From 3b8efa99779af79eb23d2409d092392bce33c50a Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 15:04:12 +0100 Subject: [PATCH 01/23] feat: add template marketplace infrastructure and JSON templates --- scripts/generate-templates.mjs | 32 +++++++++++++++++ templates/academic.json | 49 ++++++++++++++++++++++++++ templates/colorful.json | 61 +++++++++++++++++++++++++++++++++ templates/creative-writing.json | 39 +++++++++++++++++++++ templates/minimal.json | 31 +++++++++++++++++ templates/project.json | 55 +++++++++++++++++++++++++++++ 6 files changed, 267 insertions(+) create mode 100644 scripts/generate-templates.mjs create mode 100644 templates/academic.json create mode 100644 templates/colorful.json create mode 100644 templates/creative-writing.json create mode 100644 templates/minimal.json create mode 100644 templates/project.json diff --git a/scripts/generate-templates.mjs b/scripts/generate-templates.mjs new file mode 100644 index 0000000..758bca9 --- /dev/null +++ b/scripts/generate-templates.mjs @@ -0,0 +1,32 @@ +import fs from 'fs'; +import path from 'path'; + +const templatesDir = './templates'; +const outputFile = './constants/predefinedTemplates.ts'; + +const files = fs.readdirSync(templatesDir); +const templates = []; + +files.forEach(file => { + if (file.endsWith('.json')) { + const filePath = path.join(templatesDir, file); + const content = JSON.parse(fs.readFileSync(filePath, 'utf8')); + templates.push(content); + } +}); + +const content = `import { StatusTemplate } from "types/pluginSettings"; + +/** + * Predefined status templates generated from the templates directory + */ +export const PREDEFINED_TEMPLATES: StatusTemplate[] = ${JSON.stringify(templates, null, '\t')}; + +/** + * Default template IDs that should be enabled by default + */ +export const DEFAULT_ENABLED_TEMPLATES = ["colorful"]; +`; + +fs.writeFileSync(outputFile, content); +console.log(`Generated ${outputFile} with ${templates.length} templates.`); diff --git a/templates/academic.json b/templates/academic.json new file mode 100644 index 0000000..fb46483 --- /dev/null +++ b/templates/academic.json @@ -0,0 +1,49 @@ +{ + "id": "academic", + "name": "Academic research", + "description": "Status workflow for academic research and writing", + "statuses": [ + { + "name": "research", + "icon": "πŸ”", + "color": "#2196F3", + "templateId": "academic" + }, + { + "name": "outline", + "icon": "πŸ“‘", + "color": "#9E9E9E", + "templateId": "academic" + }, + { + "name": "draft", + "icon": "✏️", + "color": "#FFC107", + "templateId": "academic" + }, + { + "name": "review", + "icon": "πŸ”¬", + "color": "#9C27B0", + "templateId": "academic" + }, + { + "name": "revision", + "icon": "πŸ“", + "color": "#FF5722", + "templateId": "academic" + }, + { + "name": "final", + "icon": "πŸ“š", + "color": "#4CAF50", + "templateId": "academic" + }, + { + "name": "published", + "icon": "πŸŽ“", + "color": "#795548", + "templateId": "academic" + } + ] +} diff --git a/templates/colorful.json b/templates/colorful.json new file mode 100644 index 0000000..15955ea --- /dev/null +++ b/templates/colorful.json @@ -0,0 +1,61 @@ +{ + "id": "colorful", + "name": "Colorful workflow", + "description": "A colorful set of workflow statuses with descriptive icons", + "statuses": [ + { + "name": "idea", + "icon": "πŸ’‘", + "color": "#FFEB3B", + "templateId": "colorful" + }, + { + "name": "draft", + "icon": "πŸ“", + "color": "#E0E0E0", + "templateId": "colorful" + }, + { + "name": "inProgress", + "icon": "πŸ”§", + "color": "#FFC107", + "templateId": "colorful" + }, + { + "name": "editing", + "icon": "πŸ–ŠοΈ", + "color": "#2196F3", + "templateId": "colorful" + }, + { + "name": "pending", + "icon": "⏳", + "color": "#9C27B0", + "templateId": "colorful" + }, + { + "name": "onHold", + "icon": "⏸", + "color": "#9E9E9E", + "templateId": "colorful" + }, + { + "name": "needsUpdate", + "icon": "πŸ”„", + "color": "#FF5722", + "templateId": "colorful" + }, + { + "name": "completed", + "icon": "βœ…", + "color": "#4CAF50", + "templateId": "colorful" + }, + { + "name": "archived", + "icon": "πŸ“¦", + "color": "#795548", + "templateId": "colorful" + } + ] +} diff --git a/templates/creative-writing.json b/templates/creative-writing.json new file mode 100644 index 0000000..eca6bf4 --- /dev/null +++ b/templates/creative-writing.json @@ -0,0 +1,39 @@ +{ + "id": "creative-writing", + "name": "Creative Writing", + "description": "Workflow for novelists and creative writers", + "author": "Obsidian Community", + "github": "https://github.com/obsidian-community", + "statuses": [ + { + "name": "idea", + "icon": "🧠", + "color": "#FFD700", + "templateId": "creative-writing" + }, + { + "name": "outline", + "icon": "πŸ—ΊοΈ", + "color": "#87CEEB", + "templateId": "creative-writing" + }, + { + "name": "first-draft", + "icon": "✍️", + "color": "#FFA07A", + "templateId": "creative-writing" + }, + { + "name": "revision", + "icon": "πŸ”", + "color": "#DA70D6", + "templateId": "creative-writing" + }, + { + "name": "final-polish", + "icon": "✨", + "color": "#32CD32", + "templateId": "creative-writing" + } + ] +} diff --git a/templates/minimal.json b/templates/minimal.json new file mode 100644 index 0000000..cb8e8ca --- /dev/null +++ b/templates/minimal.json @@ -0,0 +1,31 @@ +{ + "id": "minimal", + "name": "Minimal workflow", + "description": "A simplified set of essential workflow statuses", + "statuses": [ + { + "name": "todo", + "icon": "πŸ“Œ", + "color": "#F44336", + "templateId": "minimal" + }, + { + "name": "inProgress", + "icon": "βš™οΈ", + "color": "#2196F3", + "templateId": "minimal" + }, + { + "name": "review", + "icon": "πŸ‘€", + "color": "#9C27B0", + "templateId": "minimal" + }, + { + "name": "done", + "icon": "βœ“", + "color": "#4CAF50", + "templateId": "minimal" + } + ] +} diff --git a/templates/project.json b/templates/project.json new file mode 100644 index 0000000..43a5304 --- /dev/null +++ b/templates/project.json @@ -0,0 +1,55 @@ +{ + "id": "project", + "name": "Project management", + "description": "Status workflow for project management and tracking", + "statuses": [ + { + "name": "planning", + "icon": "πŸ—“οΈ", + "color": "#9E9E9E", + "templateId": "project" + }, + { + "name": "backlog", + "icon": "πŸ“‹", + "color": "#E0E0E0", + "templateId": "project" + }, + { + "name": "ready", + "icon": "🚦", + "color": "#8BC34A", + "templateId": "project" + }, + { + "name": "inDevelopment", + "icon": "πŸ‘¨β€πŸ’»", + "color": "#2196F3", + "templateId": "project" + }, + { + "name": "testing", + "icon": "πŸ§ͺ", + "color": "#9C27B0", + "templateId": "project" + }, + { + "name": "review", + "icon": "πŸ‘οΈ", + "color": "#FFC107", + "templateId": "project" + }, + { + "name": "approved", + "icon": "πŸ‘", + "color": "#4CAF50", + "templateId": "project" + }, + { + "name": "live", + "icon": "πŸš€", + "color": "#3F51B5", + "templateId": "project" + } + ] +} From a2fffec37cc6489896bfa629e18308e29f62cf8f Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 15:07:31 +0100 Subject: [PATCH 02/23] feat: add author attribution support to status templates UI --- components/SettingsUI/TemplateEditorModal.tsx | 28 +++++++++++++++++++ components/SettingsUI/TemplateItem.tsx | 20 ++++++++++++- styles/components/template-settings.css | 17 +++++++++++ types/pluginSettings.ts | 2 ++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/components/SettingsUI/TemplateEditorModal.tsx b/components/SettingsUI/TemplateEditorModal.tsx index ab05d0c..f758fb3 100644 --- a/components/SettingsUI/TemplateEditorModal.tsx +++ b/components/SettingsUI/TemplateEditorModal.tsx @@ -18,6 +18,8 @@ export const TemplateEditorModal: React.FC = ({ }) => { const [name, setName] = useState(template?.name || ""); const [description, setDescription] = useState(template?.description || ""); + const [author, setAuthor] = useState(template?.author || ""); + const [github, setGithub] = useState(template?.github || ""); const [statuses, setStatuses] = useState( template?.statuses || [ { @@ -52,6 +54,8 @@ export const TemplateEditorModal: React.FC = ({ id: templateId, name: name.trim(), description: description.trim(), + author: author.trim() || undefined, + github: github.trim() || undefined, statuses: statusesWithTemplateId, }; @@ -145,6 +149,30 @@ export const TemplateEditorModal: React.FC = ({ /> + + + + + + + + = ({ )}
- {template.description}: + {template.description} + {(template.author || template.github) && ( +
+ By{" "} + {template.github ? ( + e.stopPropagation()} + > + {template.author || + template.github.split("/").pop()} + + ) : ( + {template.author} + )} +
+ )}
{template.statuses.map((status, index) => ( diff --git a/styles/components/template-settings.css b/styles/components/template-settings.css index 516115a..235484c 100644 --- a/styles/components/template-settings.css +++ b/styles/components/template-settings.css @@ -229,6 +229,23 @@ transform: none; } +.template-author-info { + display: block; + font-size: var(--font-ui-smaller); + color: var(--text-muted); + margin-top: var(--size-2-1); + font-style: italic; +} + +.template-author-info a { + color: var(--text-accent); + text-decoration: none; +} + +.template-author-info a:hover { + text-decoration: underline; +} + /* Responsive Design */ @media (max-width: 768px) { .template-settings-actions { diff --git a/types/pluginSettings.ts b/types/pluginSettings.ts index 619552e..a00d335 100644 --- a/types/pluginSettings.ts +++ b/types/pluginSettings.ts @@ -19,6 +19,8 @@ export interface StatusTemplate { id: string; name: string; description: string; + author?: string; + github?: string; statuses: NoteStatus[]; } From 26cb95b8053462a204f998edd2289d28e1459e0c Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 15:07:37 +0100 Subject: [PATCH 03/23] docs: add marketplace contribution guide and update build scripts --- README.md | 37 +++++++++++++++++++++++++++++++++++++ package.json | 4 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e73ee19..ea76040 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,43 @@ It works on both Markdown and non-Markdown files, integrates into multiple UI su - ![status-dashboard-2](images/status-dashboard-2.png) - ![status-dashboard-3](images/status-dashboard-3.png) +## Template Marketplace + +You can contribute your own status templates to the plugin! Templates are stored as JSON files in the `templates/` directory. + +### How to contribute + +1. Fork the repository. +2. Create a new JSON file in the `templates/` folder (e.g., `templates/my-awesome-workflow.json`). +3. Follow this format: + ```json + { + "id": "my-awesome-workflow", + "name": "My Awesome Workflow", + "description": "A workflow for doing awesome things", + "author": "Your Name", + "github": "https://github.com/your-username", + "statuses": [ + { + "name": "todo", + "icon": "πŸ“", + "color": "#ff0000", + "templateId": "my-awesome-workflow" + }, + { + "name": "done", + "icon": "βœ…", + "color": "#00ff00", + "templateId": "my-awesome-workflow" + } + ] + } + ``` +4. Run `node scripts/generate-templates.mjs` to update the predefined templates. +5. Submit a Pull Request! + +Once accepted, your template will be available to all users of the plugin. + ## Installation ### Community Plugin Store (recommended) diff --git a/package.json b/package.json index bf836e7..25237e4 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "Enhance your note organization with a status management system. Assign and track statuses (active, on hold, completed, dropped) for your notes with a customizable interface including status pane, dropdown, and file explorer integration.", "main": "main.js", "scripts": { - "dev": "node esbuild.config.mjs", - "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", + "dev": "node scripts/generate-templates.mjs && node esbuild.config.mjs", + "build": "node scripts/generate-templates.mjs && tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", "version": "node version-bump.mjs && git add manifest.json versions.json", "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,css,md}\"", "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,css,md}\"", From 2abccbc87db356c93010237402a7bd32ed3c0f93 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 15:07:41 +0100 Subject: [PATCH 04/23] chore: regenerate predefined templates --- constants/predefinedTemplates.ts | 139 ++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 50 deletions(-) diff --git a/constants/predefinedTemplates.ts b/constants/predefinedTemplates.ts index a1ca1eb..1cf7acb 100644 --- a/constants/predefinedTemplates.ts +++ b/constants/predefinedTemplates.ts @@ -1,9 +1,58 @@ import { StatusTemplate } from "types/pluginSettings"; /** - * Predefined status templates + * Predefined status templates generated from the templates directory */ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ + { + id: "academic", + name: "Academic research", + description: "Status workflow for academic research and writing", + statuses: [ + { + name: "research", + icon: "πŸ”", + color: "#2196F3", + templateId: "academic", + }, + { + name: "outline", + icon: "πŸ“‘", + color: "#9E9E9E", + templateId: "academic", + }, + { + name: "draft", + icon: "✏️", + color: "#FFC107", + templateId: "academic", + }, + { + name: "review", + icon: "πŸ”¬", + color: "#9C27B0", + templateId: "academic", + }, + { + name: "revision", + icon: "πŸ“", + color: "#FF5722", + templateId: "academic", + }, + { + name: "final", + icon: "πŸ“š", + color: "#4CAF50", + templateId: "academic", + }, + { + name: "published", + icon: "πŸŽ“", + color: "#795548", + templateId: "academic", + }, + ], + }, { id: "colorful", name: "Colorful workflow", @@ -66,6 +115,45 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ }, ], }, + { + id: "creative-writing", + name: "Creative Writing", + description: "Workflow for novelists and creative writers", + author: "Obsidian Community", + github: "https://github.com/obsidian-community", + statuses: [ + { + name: "idea", + icon: "🧠", + color: "#FFD700", + templateId: "creative-writing", + }, + { + name: "outline", + icon: "πŸ—ΊοΈ", + color: "#87CEEB", + templateId: "creative-writing", + }, + { + name: "first-draft", + icon: "✍️", + color: "#FFA07A", + templateId: "creative-writing", + }, + { + name: "revision", + icon: "πŸ”", + color: "#DA70D6", + templateId: "creative-writing", + }, + { + name: "final-polish", + icon: "✨", + color: "#32CD32", + templateId: "creative-writing", + }, + ], + }, { id: "minimal", name: "Minimal workflow", @@ -97,55 +185,6 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ }, ], }, - { - id: "academic", - name: "Academic research", - description: "Status workflow for academic research and writing", - statuses: [ - { - name: "research", - icon: "πŸ”", - color: "#2196F3", - templateId: "academic", - }, - { - name: "outline", - icon: "πŸ“‘", - color: "#9E9E9E", - templateId: "academic", - }, - { - name: "draft", - icon: "✏️", - color: "#FFC107", - templateId: "academic", - }, - { - name: "review", - icon: "πŸ”¬", - color: "#9C27B0", - templateId: "academic", - }, - { - name: "revision", - icon: "πŸ“", - color: "#FF5722", - templateId: "academic", - }, - { - name: "final", - icon: "πŸ“š", - color: "#4CAF50", - templateId: "academic", - }, - { - name: "published", - icon: "πŸŽ“", - color: "#795548", - templateId: "academic", - }, - ], - }, { id: "project", name: "Project management", From 6a643548adbe589b8681e6507ed9a6a0fb723010 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 15:34:35 +0100 Subject: [PATCH 05/23] feat: implement 'Submit to Marketplace' workflow for custom templates --- README.md | 12 +++++++++-- components/SettingsUI/TemplateItem.tsx | 28 +++++++++++++++++++++++-- styles/components/template-settings.css | 9 ++++++++ utils/templateUtils.ts | 28 +++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ea76040..42a4956 100644 --- a/README.md +++ b/README.md @@ -75,11 +75,19 @@ It works on both Markdown and non-Markdown files, integrates into multiple UI su ## Template Marketplace -You can contribute your own status templates to the plugin! Templates are stored as JSON files in the `templates/` directory. +You can contribute your own status templates to the plugin! -### How to contribute +### How to contribute (The Easy Way) + +1. Create a custom template in the plugin settings. +2. Click the **Share** (πŸ“€) icon on your custom template. +3. It will open a GitHub page with your template content pre-filled. +4. Click **Propose new file** and submit your Pull Request! + +### How to contribute (Manual) 1. Fork the repository. + ... 2. Create a new JSON file in the `templates/` folder (e.g., `templates/my-awesome-workflow.json`). 3. Follow this format: ```json diff --git a/components/SettingsUI/TemplateItem.tsx b/components/SettingsUI/TemplateItem.tsx index f4a46c4..a3f7e74 100644 --- a/components/SettingsUI/TemplateItem.tsx +++ b/components/SettingsUI/TemplateItem.tsx @@ -1,8 +1,11 @@ -import React from "react"; +import React, { useMemo } from "react"; import { StatusTemplate } from "@/types/pluginSettings"; import { StatusDisplay } from "../atoms/StatusDisplay"; import { SelectableListItem } from "../atoms/SelectableListItem"; -import { isCustomTemplate } from "@/utils/templateUtils"; +import { + isCustomTemplate, + getMarketplaceSubmissionUrl, +} from "@/utils/templateUtils"; import { ObsidianIcon } from "../atoms/ObsidianIcon"; interface TemplateItemProps { @@ -20,6 +23,15 @@ export const TemplateItem: React.FC = ({ onEdit, onDelete, }) => { + const isCustom = useMemo( + () => isCustomTemplate(template.id), + [template.id], + ); + const submissionUrl = useMemo( + () => getMarketplaceSubmissionUrl(template), + [template], + ); + const handleClick = (e: React.MouseEvent) => { // Don't toggle if clicking action buttons if ((e.target as HTMLElement).closest(".template-item-actions")) { @@ -87,6 +99,18 @@ export const TemplateItem: React.FC = ({
+ {isCustom && ( + + )} {onEdit && ( + )} {onEdit && ( +
+
{jsonString}
+ + + + + + ); +}; diff --git a/components/SettingsUI/TemplateItem.tsx b/components/SettingsUI/TemplateItem.tsx index 340caa0..eeb2daa 100644 --- a/components/SettingsUI/TemplateItem.tsx +++ b/components/SettingsUI/TemplateItem.tsx @@ -2,10 +2,7 @@ import React, { useMemo } from "react"; import { StatusTemplate } from "@/types/pluginSettings"; import { StatusDisplay } from "../atoms/StatusDisplay"; import { SelectableListItem } from "../atoms/SelectableListItem"; -import { - isCustomTemplate, - getMarketplaceSubmissionUrl, -} from "@/utils/templateUtils"; +import { isCustomTemplate } from "@/utils/templateUtils"; import { ObsidianIcon } from "../atoms/ObsidianIcon"; interface TemplateItemProps { @@ -14,6 +11,7 @@ interface TemplateItemProps { onToggle: (templateId: string, enabled: boolean) => void; onEdit?: (template: StatusTemplate) => void; onDelete?: (templateId: string) => void; + onShare?: (template: StatusTemplate) => void; } export const TemplateItem: React.FC = ({ @@ -22,15 +20,12 @@ export const TemplateItem: React.FC = ({ onToggle, onEdit, onDelete, + onShare, }) => { const isCustom = useMemo( () => isCustomTemplate(template.id), [template.id], ); - const submissionUrl = useMemo( - () => getMarketplaceSubmissionUrl(template), - [template], - ); const handleClick = (e: React.MouseEvent) => { // Don't toggle if clicking action buttons @@ -99,17 +94,17 @@ export const TemplateItem: React.FC = ({
- {isCustom && ( - e.stopPropagation()} + {isCustom && onShare && ( + )} {onEdit && (
diff --git a/styles.css b/styles.css index c4a048b..8caba89 100644 --- a/styles.css +++ b/styles.css @@ -1 +1 @@ -.status-bar-no-status{display:inline-flex;align-items:center;gap:var(--size-2-2);color:var(--status-empty-color, var(--text-muted))}.status-bar-no-status:hover{color:var(--text-normal)}.status-bar-no-status__icon{opacity:.9}.status-bar-no-status__label{font-weight:var(--font-medium)}.status-bar-enable-button{cursor:pointer;opacity:var(--icon-opacity);transition:opacity var(--anim-duration-fast) ease}.status-bar-enable-button:hover{opacity:var(--icon-opacity-hover)}.status-bar-group-row{display:flex;align-items:center;gap:var(--size-4-2)}.status-bar-group-container{display:flex;gap:var(--size-2-1);flex-wrap:wrap;align-items:center}.status-bar-status-item{display:inline-flex;align-items:center}.status-bar-status-item--animated{animation:status-slide-in var(--anim-duration-fast) ease-out var(--status-anim-delay, 0s) both}@keyframes status-slide-in{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.note-status-settings__intro{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-2)}.note-status-settings__description{margin:0;color:var(--text-normal);line-height:1.5}.note-status-settings__support{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.note-status-settings__badge{padding:0;border:none;background:transparent}.note-status-settings__badge img{display:block;height:32px}.note-status-settings__badge:hover{background:transparent;border-color:transparent;transform:translateY(-1px)}.note-status-settings__badge:focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px;border-radius:var(--radius-s)}.note-status-settings__support a:not(.note-status-settings__badge){display:inline-flex;align-items:center;justify-content:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);text-decoration:none;color:var(--text-normal);background:var(--background-primary);transition:background var(--anim-duration-fast) ease,border-color var(--anim-duration-fast) ease,transform var(--anim-duration-fast) ease}.note-status-settings__support a:not(.note-status-settings__badge):hover{background:var(--background-modifier-hover);border-color:var(--interactive-accent);transform:translateY(-1px)}.note-status-settings__support a:not(.note-status-settings__badge):focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px}.note-status-section{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);margin-bottom:var(--size-4-3);overflow:hidden}.note-status-section__header{width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-4-1);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:none;color:inherit;cursor:pointer;text-align:left}.note-status-section__header:hover{background:var(--background-modifier-hover)}.note-status-section__title-block{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--size-2-1)}.note-status-section__title-block .setting-item-name,.note-status-section__title-block .setting-item-description{white-space:normal;line-height:1.4}.note-status-section__title-block .setting-item-description{color:var(--text-muted)}.note-status-section__chevron{font-size:var(--font-ui-medium);color:var(--text-muted)}.note-status-section__content{padding:var(--size-4-3);border-top:1px solid var(--background-modifier-border)}.note-status-settings__stack{display:flex;flex-direction:column;gap:var(--size-4-3)}.setting-item-full{width:100%}.setting-item-vertical{flex-direction:column;align-items:flex-start;gap:var(--size-2-2)}.ui-settings__no-status-input{max-width:150px}.custom-status-item{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-2);transition:all var(--anim-duration-fast) ease}.custom-status-item:hover{border-color:var(--interactive-hover)}.custom-status-item__row{display:flex;align-items:end;gap:var(--size-4-2);margin-bottom:var(--size-4-2)}.custom-status-item__row--icons{align-items:stretch;flex-wrap:wrap}.custom-status-item__field{display:flex;flex-direction:column;gap:var(--size-2-1)}.custom-status-item__field--icon,.custom-status-item__field--lucide{flex:1;min-width:240px}.custom-status-item__field--name,.custom-status-item__field--description{flex:2;min-width:120px}.custom-status-item__field--color{flex:0 0 auto}.custom-status-item__field--reorder,.custom-status-item__field--actions{flex:0 0 auto;padding-top:var(--size-4-1)}.custom-status-item__label{font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.custom-status-item__label--required{color:var(--text-error)}.custom-status-item__input--icon{width:100%!important;text-align:left;font-size:1em}.custom-status-item__hint{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.custom-status-item__input--name{font-weight:var(--font-medium)}.custom-status-item__input--name.custom-status-item__input--invalid{border-color:var(--text-error)!important;background:var(--background-modifier-error)!important}.custom-status-item__input--description{color:var(--text-muted)}.custom-status-item__input--color{width:40px!important;height:32px!important;border-radius:var(--radius-s);cursor:pointer;border:2px solid var(--background-modifier-border)!important}.custom-status-item__input--color:hover{border-color:var(--interactive-hover)!important}.custom-status-item__remove-btn{width:32px;height:32px;border-radius:var(--radius-s);background:var(--background-modifier-error);color:var(--text-on-accent);border:none;cursor:pointer;font-size:18px;font-weight:700;transition:all var(--anim-duration-fast) ease}.custom-status-item__remove-btn:hover{background:var(--text-error);transform:scale(1.05)}.custom-status-item__reorder-buttons{display:flex;flex-direction:column;gap:2px}.custom-status-item__reorder-btn{width:24px;height:24px;border-radius:var(--radius-s);background:var(--background-modifier-border);color:var(--text-normal);border:none;cursor:pointer;font-size:12px;font-weight:700;transition:all var(--anim-duration-fast) ease;display:flex;align-items:center;justify-content:center;line-height:1}.custom-status-item__reorder-btn:hover:not(:disabled){background:var(--interactive-hover);transform:scale(1.05)}.custom-status-item__reorder-btn:disabled{opacity:.5;cursor:not-allowed}.custom-status-item__preview{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);background:var(--background-primary-alt);border-radius:var(--radius-s);border-left:3px solid var(--background-modifier-border);font-size:var(--font-ui-small)}.custom-status-item__preview-icon{font-size:1.1em;min-width:20px;text-align:center}.custom-status-item__preview-text{font-weight:var(--font-medium)}.custom-status-item__preview-desc{color:var(--text-muted);font-style:italic}.custom-status-item__preview-desc:before{content:"\2014 "}.custom-status-item__error{color:var(--text-error);font-size:var(--font-ui-smaller);margin-top:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-error);border-radius:var(--radius-s);border-left:3px solid var(--text-error)}.custom-status-list__empty{text-align:center;padding:var(--size-4-4) var(--size-4-2);color:var(--text-muted);font-style:italic;border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.custom-status-list__empty p{margin:0}.status-group{margin-bottom:var(--size-4-4);padding:var(--size-4-3);background:var(--background-primary-alt);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.status-group__header{margin-bottom:var(--size-4-2);padding-bottom:var(--size-2-2);border-bottom:1px solid var(--background-modifier-border)}.status-group__title{font-weight:var(--font-semibold);color:var(--text-normal);font-size:var(--font-ui-medium)}.status-group__description{font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);line-height:var(--line-height-tight)}.status-group__items{display:flex;flex-direction:column;gap:var(--size-2-2)}.status-selector{display:flex;align-items:center;justify-content:space-between;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);cursor:pointer;transition:all var(--anim-duration-fast) ease;position:relative}.status-selector:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover)}.status-selector--selected{background:var(--background-modifier-success);border-color:var(--interactive-success)}.status-selector--selected:hover{background:var(--background-modifier-success-hover)}.status-selector__content{flex:1;min-width:0}.status-selector__status{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.status-selector__icon{font-size:var(--font-ui-medium);width:var(--size-4-3);text-align:center;flex-shrink:0}.status-selector__name{font-weight:var(--font-medium);color:var(--text-normal)}.status-selector__description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:var(--line-height-tight)}.status-selector__checkbox{margin-left:var(--size-4-2);pointer-events:none;flex-shrink:0}.quick-commands-container{margin-top:var(--size-4-2)}.template-settings-actions{display:flex;justify-content:end;gap:var(--size-4-2);padding-bottom:var(--size-4-2)}.template-create-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);font-weight:var(--font-medium);font-size:var(--font-ui-medium)}.template-reset-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);background:var(--interactive-normal);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.template-reset-btn:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-section{margin-bottom:var(--size-4-6)}.template-section-title{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-large);font-weight:var(--font-semibold);color:var(--text-normal);margin-bottom:var(--size-4-3);padding-bottom:var(--size-2-2);border-bottom:2px solid var(--background-modifier-border)}.template-section-title .lucide{opacity:.8;color:var(--text-muted)}.template-list{display:flex;flex-direction:column;gap:var(--size-4-2)}.template-item{position:relative;display:flex;align-items:stretch;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt);transition:all var(--anim-duration-fast) ease;overflow:hidden}.template-item:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover);box-shadow:0 2px 8px var(--shadow-color)}.template-item.enabled{background:var(--background-modifier-hover);border-color:var(--interactive-accent);box-shadow:0 0 0 1px var(--interactive-accent)}.template-item.enabled:hover{box-shadow:0 2px 8px var(--shadow-color),0 0 0 1px var(--interactive-accent)}.template-item-content{flex:1;border:none!important;border-radius:0!important;background:transparent!important}.template-item-main{flex:1}.template-header{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.template-custom-badge{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);border-radius:var(--radius-s);text-transform:uppercase;letter-spacing:.05em}.template-item-actions{display:flex;flex-direction:column;padding:var(--size-4-2);gap:var(--size-2-1);background:var(--background-modifier-border);border-left:1px solid var(--background-modifier-border-hover);min-width:44px;align-items:center;justify-content:center}.template-item-actions button,.template-item-actions a{display:flex;align-items:center;justify-content:center;padding:var(--size-4-1);border-radius:var(--radius-s);color:var(--text-muted);background:transparent;border:none;cursor:pointer;transition:all var(--anim-duration-fast) ease;text-decoration:none!important}.template-item-actions button:hover,.template-item-actions a:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-marketplace-btn{color:var(--text-accent)!important}.template-editor-modal{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-l);box-shadow:var(--shadow-l);max-width:800px;width:100%}.template-editor-modal__header{padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);border-radius:var(--radius-l) var(--radius-l) 0 0}.template-editor-modal__header h2{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold);color:var(--text-normal)}.template-editor-modal__content{padding:var(--size-4-6);max-height:70vh;overflow-y:auto}.template-editor-statuses{display:flex;flex-direction:column;gap:var(--size-4-3)}.template-editor-add-status{display:flex;align-items:center;gap:var(--size-2-2);align-self:flex-start;margin-top:var(--size-4-2)}.template-editor-add-status .lucide{width:16px;height:16px}.template-editor-modal__actions{display:flex;gap:var(--size-4-2);justify-content:flex-end;padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-top:1px solid var(--background-modifier-border);border-radius:0 0 var(--radius-l) var(--radius-l)}.template-editor-modal__actions button{padding:var(--size-2-3) var(--size-4-4);border-radius:var(--radius-m);font-size:var(--font-ui-medium);font-weight:var(--font-medium);cursor:pointer;transition:all var(--anim-duration-fast) ease;border:1px solid var(--background-modifier-border)}.template-editor-modal__actions button:not(.mod-cta){background:var(--interactive-normal);color:var(--text-normal)}.template-editor-modal__actions button:not(.mod-cta):hover{background:var(--interactive-hover)}.template-editor-modal__actions .mod-cta:disabled{opacity:.5;cursor:not-allowed;transform:none}.template-editor-modal__actions .mod-cta:disabled:hover{transform:none}.template-author-info{display:block;font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);font-style:italic}.template-author-info a{color:var(--text-accent);text-decoration:none}.template-author-info a:hover{text-decoration:underline}@media (max-width: 768px){.template-settings-actions,.template-item{flex-direction:column}.template-item-actions{flex-direction:row;border-left:none;border-top:1px solid var(--background-modifier-border-hover);min-width:unset;padding:var(--size-2-3) var(--size-4-2)}.template-editor-modal{margin:var(--size-4-2);max-width:calc(100% - var(--size-4-4))}}.template-editor-modal__content::-webkit-scrollbar{width:var(--scrollbar-width)}.template-editor-modal__content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.template-editor-modal__content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.status-dashboard-view-container{height:100%;overflow:hidden}.status-dashboard{background:var(--background-primary)}.status-dashboard-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-3) var(--size-4-4);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-title{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold)}.status-dashboard-refresh{padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.status-dashboard-refresh:hover{background:var(--interactive-hover);transform:rotate(90deg)}.status-dashboard-content{flex:1;overflow-y:auto;padding:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-4)}.status-dashboard-section{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden}.status-dashboard-section-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-section-header h3{margin:0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.status-dashboard-current-note{padding:var(--size-4-3)}.current-note-info{margin-bottom:var(--size-4-3);padding-bottom:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border)}.current-note-name{font-size:var(--font-ui-large);font-weight:var(--font-semibold);margin-bottom:var(--size-2-1)}.current-note-path{font-size:var(--font-ui-small);color:var(--text-muted);font-family:var(--font-monospace);margin-bottom:var(--size-2-1)}.current-note-modified{font-size:var(--font-ui-smaller);color:var(--text-faint);font-style:italic}.current-note-statuses{display:flex;flex-direction:column;gap:var(--size-4-2)}.current-note-tag-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.current-note-status-list{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.current-note-no-status{font-size:var(--font-ui-small);color:var(--text-muted);font-style:italic;padding:var(--size-2-1) var(--size-2-3);background:var(--background-modifier-border);border-radius:var(--radius-s)}.current-note-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.vault-overview{padding:var(--size-4-3)}.vault-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--size-4-2)}.vault-stat-card{text-align:center;padding:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);transition:all var(--anim-duration-fast) ease}.vault-stat-card:hover{background:var(--background-modifier-hover);transform:translateY(-2px);box-shadow:var(--shadow-s)}.vault-stat-number{font-size:var(--font-ui-largest);font-weight:var(--font-bold);color:var(--interactive-accent);margin-bottom:var(--size-2-1)}.vault-stat-label{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium);text-transform:uppercase;letter-spacing:.05em}.status-distribution{padding:var(--size-4-3)}.status-chart{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-chart-item{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-chart-item--clickable{cursor:pointer;transition:all var(--anim-duration-fast) ease;padding:var(--size-2-2);border-radius:var(--radius-s)}.status-chart-item--clickable:hover{background:var(--background-modifier-hover);transform:translateY(-1px)}.status-chart-info{display:flex;align-items:center;gap:var(--size-2-3)}.status-chart-count{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium)}.status-chart-bar{height:8px;background:var(--background-modifier-border);border-radius:var(--radius-s);overflow:hidden}.status-chart-fill{height:100%;transition:width var(--anim-duration-moderate) ease}.status-distribution-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.quick-actions{padding:var(--size-4-3);display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--size-4-3)}.quick-actions-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.quick-actions-group-title{font-size:var(--font-ui-small);font-weight:var(--font-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding-bottom:var(--size-2-1);border-bottom:1px solid var(--background-modifier-border);margin-bottom:var(--size-2-1)}.quick-action-btn{width:100%;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);font-weight:var(--font-medium);text-align:left;display:flex;align-items:center;gap:var(--size-2-2);transition:all var(--anim-duration-fast) ease}.quick-action-btn:hover:not(:disabled){background:var(--interactive-hover);transform:translateY(-1px);box-shadow:var(--shadow-s)}.quick-action-btn:disabled{opacity:.5;cursor:not-allowed;background:var(--background-modifier-border);color:var(--text-faint)}@media (max-width: 768px){.quick-actions{grid-template-columns:1fr}}.status-dashboard-loading{display:flex;align-items:center;justify-content:center;height:100%;font-size:var(--font-ui-medium);color:var(--text-muted)}.status-dashboard-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.status-dashboard-content::-webkit-scrollbar{width:var(--scrollbar-width)}.status-dashboard-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.status-dashboard-content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-view-container{height:100%;overflow:hidden}.grouped-status-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.grouped-status-title{margin:0 0 var(--size-4-2) 0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.grouped-status-filters{display:flex;flex-direction:column;gap:var(--size-4-2)}.grouped-status-note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-medium)}.grouped-status-note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-content{flex:1;overflow-y:auto;padding:var(--size-4-2)}.grouped-status-tag-section{margin-bottom:var(--size-4-3)}.grouped-status-tag-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);cursor:pointer;transition:all var(--anim-duration-fast) ease;margin-bottom:var(--size-4-2)}.grouped-status-tag-header:hover{background:var(--background-modifier-hover)}.grouped-status-tag-content{padding-left:var(--size-4-2)}.grouped-status-group{margin-bottom:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;box-shadow:0 1px 3px #0000001a;transition:box-shadow var(--anim-duration-fast) ease}.grouped-status-group:hover{box-shadow:0 2px 8px #00000026}.grouped-status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;position:relative}.grouped-status-group__header:hover{background:var(--background-modifier-hover)}.grouped-status-group__header:focus{outline:2px solid var(--color-accent);outline-offset:-2px}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2);min-width:0;flex:1}.grouped-status-group__template-badge{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium)}.grouped-status-group__info{display:flex;align-items:center;gap:var(--size-2-2);margin-left:auto}.grouped-status-files{background:var(--background-secondary);border-top:1px solid var(--background-modifier-border)}.grouped-status-files-list{max-height:300px;overflow-y:auto}.grouped-status-file-item{padding:var(--size-2-3) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;border-bottom:1px solid var(--background-modifier-border-hover)}.grouped-status-file-item:hover{background:var(--background-modifier-hover)}.grouped-status-file-item:last-child{border-bottom:none}.grouped-status-file-name{font-weight:var(--font-medium);color:var(--text-normal);margin-bottom:2px}.grouped-status-file-path{font-size:var(--font-ui-small);color:var(--text-muted);opacity:.8}.grouped-status-load-more{display:flex;justify-content:center;padding:var(--size-4-2);border-top:1px solid var(--background-modifier-border)}.grouped-status-load-btn{padding:var(--size-2-2) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-small);font-weight:var(--font-medium);transition:all var(--anim-duration-fast) ease}.grouped-status-load-btn:hover{background:var(--interactive-hover);transform:translateY(-1px)}.grouped-status-loading,.grouped-status-empty{display:flex;align-items:center;justify-content:center;padding:var(--size-4-6);color:var(--text-muted);font-size:var(--font-ui-medium)}.grouped-status-view-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.grouped-status-content::-webkit-scrollbar,.grouped-status-files-list::-webkit-scrollbar{width:var(--scrollbar-width)}.grouped-status-content::-webkit-scrollbar-thumb,.grouped-status-files-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.grouped-status-content::-webkit-scrollbar-thumb:hover,.grouped-status-files-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-filters__template{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__template-select{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);cursor:pointer}.grouped-status-filters__template-select:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-filters__note{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.grouped-status-filters__note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2)}.grouped-status-group__template-badge{background:var(--background-modifier-border);color:var(--text-muted);padding:var(--size-2-1) var(--size-2-2);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);text-transform:capitalize;white-space:nowrap}.custom-icon{display:inline-flex}.custom-icon__absolute-right{position:absolute;right:0}.note-status-colored-block{position:relative;border-radius:var(--radius-s);z-index:0}.note-status-colored-block:before{content:"";position:absolute;inset:0;border-radius:inherit;background-color:var(--note-status-block-color, transparent);opacity:.18;pointer-events:none;z-index:-1;transition:background-color var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease}.note-status-border-left{position:relative}.note-status-border-left:after{content:"";position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:var(--radius-s);background-color:var(--note-status-border-color, transparent);opacity:.35;pointer-events:none}.note-status-underline{text-decoration-line:underline;text-decoration-thickness:2px;text-decoration-color:var(--note-status-underline-color, currentColor);text-underline-offset:3px}.note-status-dot-badge{width:6px;height:6px;border-radius:50%;margin-left:var(--size-2-1);display:inline-flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px var(--background-modifier-border);flex-shrink:0}.status-wrapper{position:relative;display:inline-block}.status-minimal{display:inline-flex;align-items:center;gap:2px;margin-left:var(--size-2-2);padding:2px;border-radius:var(--radius-s);cursor:pointer;opacity:.7;transition:all var(--anim-duration-fast) ease}.status-minimal:hover{opacity:1;background:var(--background-modifier-hover);transform:scale(1.05)}.status-minimal--compact{margin-left:0;padding:0;background:transparent;gap:var(--size-2-1)}.status-minimal--compact .status-minimal__icon{font-size:var(--font-ui-medium)}.status-minimal[data-status-color] .status-minimal__count{background:var(--interactive-accent)}.status-minimal__icon{font-size:11px;line-height:1;display:inline-flex;align-items:center;justify-content:center;filter:grayscale(.2);transition:filter var(--anim-duration-fast) ease}.status-minimal:hover .status-minimal__icon{filter:grayscale(0)}.status-minimal__count{min-width:14px;height:14px;padding:0 3px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);border-radius:var(--radius-m);display:flex;align-items:center;justify-content:center}.status-info-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:var(--layer-popover);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);box-shadow:var(--shadow-l);min-width:280px;max-width:400px;overflow:hidden;pointer-events:none}.status-popup-header{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);font-weight:var(--font-semibold);font-size:var(--font-ui-small)}.status-popup-content{padding:var(--size-4-2)}.status-popup-empty{padding:var(--size-4-4);text-align:center;color:var(--text-muted);font-style:italic}.status-tag-grid{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-tag-card{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-2);background:var(--background-primary-alt);box-shadow:var(--shadow-xs)}.status-tag-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--size-2-2)}.status-tag-card__title{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-tag-card__label{font-weight:var(--font-semibold);text-transform:none}.status-tag-card__badge{font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 6px;border-radius:var(--radius-s);width:fit-content}.status-tag-card__count{font-size:var(--font-ui-small);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 10px;border-radius:var(--radius-s);font-weight:var(--font-medium)}.status-tag-card__statuses{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.status-group{margin-bottom:var(--size-4-2)}.status-group:last-child{margin-bottom:0}.status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-2-3);background:var(--background-secondary-alt);border-radius:var(--radius-s);margin-bottom:var(--size-2-2);border:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.status-group__header:hover{background:var(--background-modifier-hover)}.status-group__name{text-transform:capitalize;font-weight:var(--font-medium);font-size:var(--font-ui-smaller);color:var(--text-normal)}.status-group__count{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium);min-width:20px;justify-content:center}.status-group__items{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--size-2-2);padding:0 var(--size-2-1)}.status-item{display:flex;flex-direction:column;gap:var(--size-2-1);padding:var(--size-2-2);background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.status-description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.group-label-container{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-small);font-weight:var(--font-semibold);text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);transition:color var(--anim-duration-fast) ease}.group-label-container--highlighted{color:var(--text-normal)}.group-label-container svg{width:16px;height:16px;opacity:.8}.collapsible-counter-container{padding:var(--size-2-1) var(--size-2-3);border-radius:var(--radius-s);background:var(--background-modifier-border);border:1px solid var(--background-modifier-border-hover);color:var(--text-muted);font-weight:var(--font-medium);font-size:var(--font-ui-smaller);cursor:pointer;transition:all var(--anim-duration-fast) ease;min-width:28px;text-align:center}.collapsible-counter-container:hover{background:var(--background-modifier-border-hover);color:var(--text-normal)}.note-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-2-3);background:var(--interactive-accent);color:var(--text-on-accent);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);cursor:default;transition:transform var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-chip--clickable{cursor:pointer}.note-status-chip--clickable:hover{opacity:.92;transform:translateY(-1px);box-shadow:var(--shadow-s)}.note-status-chip--removing{opacity:.5;transform:scale(.95)}.note-status-chip__icon{font-size:1em;display:inline-flex}.note-status-chip__text{font-weight:var(--font-medium)}.note-status-chip__remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:rgba(255,255,255,.2);margin-left:var(--size-2-1);cursor:pointer;border:none;color:inherit;padding:0;font:inherit;line-height:1}.note-status-chip__remove:hover{background:rgba(255,255,255,.3)}.note-status-chip__remove:focus-visible{outline:2px solid var(--background-modifier-border)}.status-badge-container{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-primary);position:relative;overflow:hidden;isolation:isolate}.status-badge-container:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:transparent;opacity:.85;display:none}.status-badge-container--clickable{cursor:pointer;transition:background var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease,filter var(--anim-duration-fast) ease}.status-badge-container--clickable:not(.status-badge--filled):hover{background:var(--background-modifier-hover);box-shadow:var(--shadow-s)}.status-badge--accent{padding-left:calc(var(--size-4-1) + 4px)}.status-badge--accent:before{display:block;background:var(--status-accent, var(--interactive-accent))}.status-badge--filled{background:var(--status-accent, var(--interactive-accent));border-color:var(--status-accent, var(--interactive-accent));color:var(--text-on-accent);padding-left:var(--size-4-2)}.status-badge--filled .status-badge-icon,.status-badge--filled .status-badge-text{color:inherit}.status-badge--filled.status-badge-container--clickable:hover{filter:brightness(1.05);background:var(--status-accent, var(--interactive-accent));box-shadow:var(--shadow-s)}.status-badge--dot{border:none;background:transparent;padding:var(--size-2-1) var(--size-2-2);gap:var(--size-2-1)}.status-badge--dot:before{display:none}.status-badge--dot .status-badge-item{gap:var(--size-2-2)}.status-badge-dot{width:8px;height:8px;border-radius:50%;background:var(--status-accent, var(--interactive-accent));box-shadow:0 0 0 1px var(--background-primary)}.status-badge--empty{min-width:32px;justify-content:center}.status-badge-item{display:flex;align-items:center;gap:var(--size-2-1);position:relative;z-index:1}.status-badge-icon{font-size:var(--font-ui-small)}.status-badge-text{font-weight:var(--font-medium);font-size:var(--font-ui-small)}.status-badge-empty{display:inline-block;min-width:var(--size-3-2);height:var(--size-3-2)}.template-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);font-size:var(--font-ui-smaller);cursor:default;transition:background var(--anim-duration-fast) ease}.template-status-chip[data-clickable=true]{cursor:pointer}.template-status-chip[data-clickable=true]:hover{background:var(--background-modifier-hover)}.template-status-color-dot{width:8px;height:8px;border-radius:50%;background-color:var(--dot-color)}.template-status-chip__label{display:inline-flex;align-items:center;gap:var(--size-2-1)}.template-status-chip__icon{display:inline-flex;font-size:1em}.lucide-icon-picker{position:relative;display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-picker__text-input{max-width:240px}.lucide-icon-picker__row{display:flex;gap:var(--size-2-1);align-items:center}.lucide-icon-picker__modal-button{display:inline-flex;align-items:center;gap:var(--size-2-1);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-2-1) var(--size-4-1);background:var(--background-secondary);cursor:pointer;transition:border var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease;min-width:220px;justify-content:space-between}.lucide-icon-picker__modal-button:hover{border-color:var(--interactive-accent)}.lucide-icon-picker__preview{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px}.lucide-icon-picker__label{flex:1;text-align:left;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-picker__clear-trigger{background:transparent;border:none;color:var(--text-muted);font-size:var(--font-ui-smaller);cursor:pointer;padding:var(--size-2-1) var(--size-2-2)}.lucide-icon-picker__clear-trigger:hover{color:var(--text-normal);text-decoration:underline}.lucide-icon-modal-wrapper{padding:var(--size-4-2)}.lucide-icon-modal{display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-modal__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-2-2)}.lucide-icon-modal__count{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__close{display:inline-flex;align-items:center;justify-content:center}.lucide-icon-modal__search{width:100%}.lucide-icon-modal__toggle{display:inline-flex;align-items:center;gap:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--size-2-1);max-height:360px;overflow-y:auto;padding-right:var(--size-2-1)}.lucide-icon-modal__list--icons-only{grid-template-columns:repeat(auto-fill,minmax(70px,1fr))}.lucide-icon-modal__option{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-secondary);cursor:pointer;font-size:var(--font-ui-smaller);justify-content:flex-start}.lucide-icon-modal__option:hover{background:var(--background-modifier-hover)}.lucide-icon-modal__option--selected{border-color:var(--interactive-accent);background:var(--background-modifier-success)}.lucide-icon-modal__option--compact{justify-content:center}.lucide-icon-modal__option--compact span{display:none}.lucide-icon-modal__empty{grid-column:1 / -1;text-align:center;font-size:var(--font-ui-smaller);color:var(--text-muted);padding:var(--size-4-2)}.icon-selection-field{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.icon-selection-field__column{flex:1;min-width:220px}.icon-selection-field__label{display:block;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.icon-selection-field__emoji-input{max-width:260px}.icon-selection-field__hint{margin-top:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1}.obsidian-icon{display:inline-flex;align-items:center;justify-content:center}.obsidian-icon svg{width:100%;height:100%}.note-status-editor-toolbar-badge{display:inline-flex;align-items:center;margin:0 var(--size-2-1)}.note-status-editor-toolbar-badge--hidden{display:none}.editor-toolbar-button__icon{font-size:16px;display:flex;align-items:center;justify-content:center;color:var(--text-muted);width:18px;height:18px;line-height:1}.editor-toolbar-button__icon--has-status{color:var(--interactive-accent)}.editor-toolbar-button__icon-container{position:relative;display:flex;align-items:center;justify-content:center}.editor-toolbar-button__counter{position:absolute;top:-4px;right:-6px;min-width:12px;height:12px;padding:0 2px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:8px;font-weight:var(--font-semibold);border-radius:6px;display:flex;align-items:center;justify-content:center;line-height:1;border:1px solid var(--background-primary)}.status-mapping-list{display:flex;flex-direction:column;gap:var(--size-4-2);width:100%}.status-mapping-row{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);background:var(--background-primary-alt);display:flex;flex-direction:column;gap:var(--size-2-2)}.status-mapping-empty{padding:var(--size-4-3);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m)}.status-mapping-row__fields{display:flex;flex-wrap:wrap;gap:var(--size-4-2);width:100%}.status-mapping-field{display:flex;flex-direction:column;gap:var(--size-2-1);flex:1 1 180px}.status-mapping-field label{font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-mapping-field small{color:var(--text-faint)}.status-mapping-field select,.status-mapping-field input{width:100%}.status-mapping-row__actions{display:flex;justify-content:flex-end}.status-mapping-remove-btn{background:var(--background-modifier-error);color:var(--text-on-accent);border:none;border-radius:var(--radius-s);padding:4px 10px;cursor:pointer}.status-mapping-remove-btn:hover{opacity:.9}.status-mapping-add-btn{align-self:flex-start;padding:var(--size-2-2) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--interactive-normal);cursor:pointer}.status-mapping-add-btn:hover{background:var(--interactive-hover)}.note-status-input{width:100%;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);padding:var(--size-2-2) var(--size-2-3);transition:border-color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.note-status-input--search{padding-left:var(--size-4-1)}.note-status-input--color{width:36px;height:32px;padding:var(--size-2-1);cursor:pointer}.note-status-input--color::-webkit-color-swatch{border:none;border-radius:var(--radius-s)}.note-status-input--color::-webkit-color-swatch-wrapper{padding:0}.note-status-input:disabled{opacity:.65;cursor:not-allowed}.note-status-options{max-height:300px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);box-shadow:var(--shadow-xs)}.note-status-options::-webkit-scrollbar{width:var(--scrollbar-width)}.note-status-options::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.note-status-option{align-items:stretch}.note-status-option .selectable-list-item-icon{display:flex;align-items:center;justify-content:center}.note-status-option__icon-wrapper{display:inline-flex;align-items:center;justify-content:center;padding:var(--size-2-1);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border);background:var(--background-secondary);min-width:36px;transition:border-color var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease}.note-status-option:hover .note-status-option__icon-wrapper,.note-status-option[data-selected=true] .note-status-option__icon-wrapper{border-color:var(--interactive-accent);background:var(--background-modifier-hover)}.note-status-option__text{display:flex;flex-direction:column;gap:2px}.note-status-option__name{font-weight:var(--font-medium);color:var(--text-normal)}.note-status-option__description{font-size:var(--font-ui-smaller);color:var(--text-muted)}.note-status-chips{display:flex;flex-wrap:wrap;gap:var(--size-2-2);min-height:32px;align-items:center;padding:var(--size-2-1) 0}.status-selector-empty{padding:var(--size-4-2);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.selectable-list-item{display:flex;align-items:center;gap:var(--size-4-2);padding:var(--size-2-3) var(--size-4-2);cursor:pointer;border-bottom:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.selectable-list-item:hover{background:var(--background-modifier-hover)}.selectable-list-item[data-focused=true]{outline:2px solid var(--interactive-accent);outline-offset:-2px}.selectable-list-item[data-selected=true]{background:var(--background-modifier-hover)}.selectable-list-item-icon{font-size:16px;min-width:20px}.selectable-list-item-content{flex:1;font-size:var(--font-ui-small)}.selectable-list-item-check{color:var(--interactive-accent);display:flex;align-items:center}.status-selector-group{display:flex;flex-direction:column;gap:var(--size-4-2);outline:none}.status-selector-group:focus-visible{outline:2px solid var(--background-modifier-border-hover);outline-offset:4px}.note-status-template-tabs{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-secondary);margin-bottom:var(--size-2-2)}.note-status-template-tab{border:none;background:transparent;color:var(--text-muted);padding:var(--size-2-2) var(--size-3-1);border-radius:var(--radius-s);cursor:pointer;transition:background var(--anim-duration-fast) ease,color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-template-tab:not(.is-active):hover{background:var(--background-modifier-hover);color:var(--text-normal)}.note-status-template-tab.is-active{background:var(--interactive-accent);color:var(--text-on-accent);box-shadow:0 0 0 1px var(--background-modifier-border)}.note-status-template-tab:focus-visible{outline:2px solid var(--background-modifier-border)} +.status-bar-no-status{display:inline-flex;align-items:center;gap:var(--size-2-2);color:var(--status-empty-color, var(--text-muted))}.status-bar-no-status:hover{color:var(--text-normal)}.status-bar-no-status__icon{opacity:.9}.status-bar-no-status__label{font-weight:var(--font-medium)}.status-bar-enable-button{cursor:pointer;opacity:var(--icon-opacity);transition:opacity var(--anim-duration-fast) ease}.status-bar-enable-button:hover{opacity:var(--icon-opacity-hover)}.status-bar-group-row{display:flex;align-items:center;gap:var(--size-4-2)}.status-bar-group-container{display:flex;gap:var(--size-2-1);flex-wrap:wrap;align-items:center}.status-bar-status-item{display:inline-flex;align-items:center}.status-bar-status-item--animated{animation:status-slide-in var(--anim-duration-fast) ease-out var(--status-anim-delay, 0s) both}@keyframes status-slide-in{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.note-status-settings__intro{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-2)}.note-status-settings__description{margin:0;color:var(--text-normal);line-height:1.5}.note-status-settings__support{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.note-status-settings__badge{padding:0;border:none;background:transparent}.note-status-settings__badge img{display:block;height:32px}.note-status-settings__badge:hover{background:transparent;border-color:transparent;transform:translateY(-1px)}.note-status-settings__badge:focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px;border-radius:var(--radius-s)}.note-status-settings__support a:not(.note-status-settings__badge){display:inline-flex;align-items:center;justify-content:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);text-decoration:none;color:var(--text-normal);background:var(--background-primary);transition:background var(--anim-duration-fast) ease,border-color var(--anim-duration-fast) ease,transform var(--anim-duration-fast) ease}.note-status-settings__support a:not(.note-status-settings__badge):hover{background:var(--background-modifier-hover);border-color:var(--interactive-accent);transform:translateY(-1px)}.note-status-settings__support a:not(.note-status-settings__badge):focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px}.note-status-section{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);margin-bottom:var(--size-4-3);overflow:hidden}.note-status-section__header{width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-4-1);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:none;color:inherit;cursor:pointer;text-align:left}.note-status-section__header:hover{background:var(--background-modifier-hover)}.note-status-section__title-block{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--size-2-1)}.note-status-section__title-block .setting-item-name,.note-status-section__title-block .setting-item-description{white-space:normal;line-height:1.4}.note-status-section__title-block .setting-item-description{color:var(--text-muted)}.note-status-section__chevron{font-size:var(--font-ui-medium);color:var(--text-muted)}.note-status-section__content{padding:var(--size-4-3);border-top:1px solid var(--background-modifier-border)}.note-status-settings__stack{display:flex;flex-direction:column;gap:var(--size-4-3)}.setting-item-full{width:100%}.setting-item-vertical{flex-direction:column;align-items:flex-start;gap:var(--size-2-2)}.ui-settings__no-status-input{max-width:150px}.custom-status-item{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-2);transition:all var(--anim-duration-fast) ease}.custom-status-item:hover{border-color:var(--interactive-hover)}.custom-status-item__row{display:flex;align-items:end;gap:var(--size-4-2);margin-bottom:var(--size-4-2)}.custom-status-item__row--icons{align-items:stretch;flex-wrap:wrap}.custom-status-item__field{display:flex;flex-direction:column;gap:var(--size-2-1)}.custom-status-item__field--icon,.custom-status-item__field--lucide{flex:1;min-width:240px}.custom-status-item__field--name,.custom-status-item__field--description{flex:2;min-width:120px}.custom-status-item__field--color{flex:0 0 auto}.custom-status-item__field--reorder,.custom-status-item__field--actions{flex:0 0 auto;padding-top:var(--size-4-1)}.custom-status-item__label{font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.custom-status-item__label--required{color:var(--text-error)}.custom-status-item__input--icon{width:100%!important;text-align:left;font-size:1em}.custom-status-item__hint{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.custom-status-item__input--name{font-weight:var(--font-medium)}.custom-status-item__input--name.custom-status-item__input--invalid{border-color:var(--text-error)!important;background:var(--background-modifier-error)!important}.custom-status-item__input--description{color:var(--text-muted)}.custom-status-item__input--color{width:40px!important;height:32px!important;border-radius:var(--radius-s);cursor:pointer;border:2px solid var(--background-modifier-border)!important}.custom-status-item__input--color:hover{border-color:var(--interactive-hover)!important}.custom-status-item__remove-btn{width:32px;height:32px;border-radius:var(--radius-s);background:var(--background-modifier-error);color:var(--text-on-accent);border:none;cursor:pointer;font-size:18px;font-weight:700;transition:all var(--anim-duration-fast) ease}.custom-status-item__remove-btn:hover{background:var(--text-error);transform:scale(1.05)}.custom-status-item__reorder-buttons{display:flex;flex-direction:column;gap:2px}.custom-status-item__reorder-btn{width:24px;height:24px;border-radius:var(--radius-s);background:var(--background-modifier-border);color:var(--text-normal);border:none;cursor:pointer;font-size:12px;font-weight:700;transition:all var(--anim-duration-fast) ease;display:flex;align-items:center;justify-content:center;line-height:1}.custom-status-item__reorder-btn:hover:not(:disabled){background:var(--interactive-hover);transform:scale(1.05)}.custom-status-item__reorder-btn:disabled{opacity:.5;cursor:not-allowed}.custom-status-item__preview{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);background:var(--background-primary-alt);border-radius:var(--radius-s);border-left:3px solid var(--background-modifier-border);font-size:var(--font-ui-small)}.custom-status-item__preview-icon{font-size:1.1em;min-width:20px;text-align:center}.custom-status-item__preview-text{font-weight:var(--font-medium)}.custom-status-item__preview-desc{color:var(--text-muted);font-style:italic}.custom-status-item__preview-desc:before{content:"\2014 "}.custom-status-item__error{color:var(--text-error);font-size:var(--font-ui-smaller);margin-top:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-error);border-radius:var(--radius-s);border-left:3px solid var(--text-error)}.custom-status-list__empty{text-align:center;padding:var(--size-4-4) var(--size-4-2);color:var(--text-muted);font-style:italic;border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.custom-status-list__empty p{margin:0}.status-group{margin-bottom:var(--size-4-4);padding:var(--size-4-3);background:var(--background-primary-alt);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.status-group__header{margin-bottom:var(--size-4-2);padding-bottom:var(--size-2-2);border-bottom:1px solid var(--background-modifier-border)}.status-group__title{font-weight:var(--font-semibold);color:var(--text-normal);font-size:var(--font-ui-medium)}.status-group__description{font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);line-height:var(--line-height-tight)}.status-group__items{display:flex;flex-direction:column;gap:var(--size-2-2)}.status-selector{display:flex;align-items:center;justify-content:space-between;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);cursor:pointer;transition:all var(--anim-duration-fast) ease;position:relative}.status-selector:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover)}.status-selector--selected{background:var(--background-modifier-success);border-color:var(--interactive-success)}.status-selector--selected:hover{background:var(--background-modifier-success-hover)}.status-selector__content{flex:1;min-width:0}.status-selector__status{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.status-selector__icon{font-size:var(--font-ui-medium);width:var(--size-4-3);text-align:center;flex-shrink:0}.status-selector__name{font-weight:var(--font-medium);color:var(--text-normal)}.status-selector__description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:var(--line-height-tight)}.status-selector__checkbox{margin-left:var(--size-4-2);pointer-events:none;flex-shrink:0}.quick-commands-container{margin-top:var(--size-4-2)}.template-settings-actions{display:flex;justify-content:end;gap:var(--size-4-2);padding-bottom:var(--size-4-2)}.template-create-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);font-weight:var(--font-medium);font-size:var(--font-ui-medium)}.template-reset-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);background:var(--interactive-normal);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.template-reset-btn:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-section{margin-bottom:var(--size-4-6)}.template-section-title{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-large);font-weight:var(--font-semibold);color:var(--text-normal);margin-bottom:var(--size-4-3);padding-bottom:var(--size-2-2);border-bottom:2px solid var(--background-modifier-border)}.template-section-title .lucide{opacity:.8;color:var(--text-muted)}.template-list{display:flex;flex-direction:column;gap:var(--size-4-2)}.template-item{position:relative;display:flex;align-items:stretch;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt);transition:all var(--anim-duration-fast) ease;overflow:hidden}.template-item:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover);box-shadow:0 2px 8px var(--shadow-color)}.template-item.enabled{background:var(--background-modifier-hover);border-color:var(--interactive-accent);box-shadow:0 0 0 1px var(--interactive-accent)}.template-item.enabled:hover{box-shadow:0 2px 8px var(--shadow-color),0 0 0 1px var(--interactive-accent)}.template-item-content{flex:1;border:none!important;border-radius:0!important;background:transparent!important}.template-item-main{flex:1}.template-header{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.template-custom-badge{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);border-radius:var(--radius-s);text-transform:uppercase;letter-spacing:.05em}.template-item-actions{display:flex;flex-direction:column;padding:var(--size-4-2);gap:var(--size-2-1);background:var(--background-modifier-border);border-left:1px solid var(--background-modifier-border-hover);min-width:44px;align-items:center;justify-content:center}.template-item-actions button,.template-item-actions a{display:flex;align-items:center;justify-content:center;padding:var(--size-4-1);border-radius:var(--radius-s);color:var(--text-muted);background:transparent;border:none;cursor:pointer;transition:all var(--anim-duration-fast) ease;text-decoration:none!important}.template-item-actions button:hover,.template-item-actions a:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-marketplace-btn{color:var(--text-accent)!important}.template-editor-modal{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-l);box-shadow:var(--shadow-l);max-width:800px;width:100%}.template-editor-modal__header{padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);border-radius:var(--radius-l) var(--radius-l) 0 0}.template-editor-modal__header h2{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold);color:var(--text-normal)}.template-editor-modal__content{padding:var(--size-4-6);max-height:70vh;overflow-y:auto}.template-editor-statuses{display:flex;flex-direction:column;gap:var(--size-4-3)}.template-editor-add-status{display:flex;align-items:center;gap:var(--size-2-2);align-self:flex-start;margin-top:var(--size-4-2)}.template-editor-add-status .lucide{width:16px;height:16px}.template-editor-modal__actions{display:flex;gap:var(--size-4-2);justify-content:flex-end;padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-top:1px solid var(--background-modifier-border);border-radius:0 0 var(--radius-l) var(--radius-l)}.template-editor-modal__actions button{padding:var(--size-2-3) var(--size-4-4);border-radius:var(--radius-m);font-size:var(--font-ui-medium);font-weight:var(--font-medium);cursor:pointer;transition:all var(--anim-duration-fast) ease;border:1px solid var(--background-modifier-border)}.template-editor-modal__actions button:not(.mod-cta){background:var(--interactive-normal);color:var(--text-normal)}.template-editor-modal__actions button:not(.mod-cta):hover{background:var(--interactive-hover)}.template-editor-modal__actions .mod-cta:disabled{opacity:.5;cursor:not-allowed;transform:none}.template-editor-modal__actions .mod-cta:disabled:hover{transform:none}.template-author-info{display:block;font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);font-style:italic}.template-author-info a{color:var(--text-accent);text-decoration:none}.template-author-info a:hover{text-decoration:underline}.marketplace-steps{padding-left:var(--size-4-4);margin-bottom:var(--size-4-4);color:var(--text-normal)}.marketplace-steps li{margin-bottom:var(--size-2-2)}.marketplace-json-preview{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;margin-top:var(--size-4-2)}.json-preview-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-4-2);background:var(--background-primary-alt);border-bottom:1px solid var(--background-modifier-border);font-family:var(--font-monospace);font-size:var(--font-ui-smaller);color:var(--text-muted)}.copy-btn{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3)!important;font-size:var(--font-ui-smaller)!important;background:var(--interactive-accent)!important;color:var(--text-on-accent)!important;border:none!important}.copy-btn.success{background:var(--text-success)!important}.marketplace-json-preview pre{margin:0;padding:var(--size-4-2);max-height:300px;overflow-y:auto;font-family:var(--font-monospace);font-size:var(--font-ui-smaller);white-space:pre-wrap;word-break:break-all}.marketplace-github-link{display:flex;align-items:center;gap:var(--size-2-2);text-decoration:none!important}@media (max-width: 768px){.template-settings-actions,.template-item{flex-direction:column}.template-item-actions{flex-direction:row;border-left:none;border-top:1px solid var(--background-modifier-border-hover);min-width:unset;padding:var(--size-2-3) var(--size-4-2)}.template-editor-modal{margin:var(--size-4-2);max-width:calc(100% - var(--size-4-4))}}.template-editor-modal__content::-webkit-scrollbar{width:var(--scrollbar-width)}.template-editor-modal__content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.template-editor-modal__content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.status-dashboard-view-container{height:100%;overflow:hidden}.status-dashboard{background:var(--background-primary)}.status-dashboard-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-3) var(--size-4-4);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-title{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold)}.status-dashboard-refresh{padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.status-dashboard-refresh:hover{background:var(--interactive-hover);transform:rotate(90deg)}.status-dashboard-content{flex:1;overflow-y:auto;padding:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-4)}.status-dashboard-section{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden}.status-dashboard-section-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-section-header h3{margin:0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.status-dashboard-current-note{padding:var(--size-4-3)}.current-note-info{margin-bottom:var(--size-4-3);padding-bottom:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border)}.current-note-name{font-size:var(--font-ui-large);font-weight:var(--font-semibold);margin-bottom:var(--size-2-1)}.current-note-path{font-size:var(--font-ui-small);color:var(--text-muted);font-family:var(--font-monospace);margin-bottom:var(--size-2-1)}.current-note-modified{font-size:var(--font-ui-smaller);color:var(--text-faint);font-style:italic}.current-note-statuses{display:flex;flex-direction:column;gap:var(--size-4-2)}.current-note-tag-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.current-note-status-list{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.current-note-no-status{font-size:var(--font-ui-small);color:var(--text-muted);font-style:italic;padding:var(--size-2-1) var(--size-2-3);background:var(--background-modifier-border);border-radius:var(--radius-s)}.current-note-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.vault-overview{padding:var(--size-4-3)}.vault-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--size-4-2)}.vault-stat-card{text-align:center;padding:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);transition:all var(--anim-duration-fast) ease}.vault-stat-card:hover{background:var(--background-modifier-hover);transform:translateY(-2px);box-shadow:var(--shadow-s)}.vault-stat-number{font-size:var(--font-ui-largest);font-weight:var(--font-bold);color:var(--interactive-accent);margin-bottom:var(--size-2-1)}.vault-stat-label{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium);text-transform:uppercase;letter-spacing:.05em}.status-distribution{padding:var(--size-4-3)}.status-chart{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-chart-item{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-chart-item--clickable{cursor:pointer;transition:all var(--anim-duration-fast) ease;padding:var(--size-2-2);border-radius:var(--radius-s)}.status-chart-item--clickable:hover{background:var(--background-modifier-hover);transform:translateY(-1px)}.status-chart-info{display:flex;align-items:center;gap:var(--size-2-3)}.status-chart-count{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium)}.status-chart-bar{height:8px;background:var(--background-modifier-border);border-radius:var(--radius-s);overflow:hidden}.status-chart-fill{height:100%;transition:width var(--anim-duration-moderate) ease}.status-distribution-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.quick-actions{padding:var(--size-4-3);display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--size-4-3)}.quick-actions-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.quick-actions-group-title{font-size:var(--font-ui-small);font-weight:var(--font-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding-bottom:var(--size-2-1);border-bottom:1px solid var(--background-modifier-border);margin-bottom:var(--size-2-1)}.quick-action-btn{width:100%;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);font-weight:var(--font-medium);text-align:left;display:flex;align-items:center;gap:var(--size-2-2);transition:all var(--anim-duration-fast) ease}.quick-action-btn:hover:not(:disabled){background:var(--interactive-hover);transform:translateY(-1px);box-shadow:var(--shadow-s)}.quick-action-btn:disabled{opacity:.5;cursor:not-allowed;background:var(--background-modifier-border);color:var(--text-faint)}@media (max-width: 768px){.quick-actions{grid-template-columns:1fr}}.status-dashboard-loading{display:flex;align-items:center;justify-content:center;height:100%;font-size:var(--font-ui-medium);color:var(--text-muted)}.status-dashboard-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.status-dashboard-content::-webkit-scrollbar{width:var(--scrollbar-width)}.status-dashboard-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.status-dashboard-content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-view-container{height:100%;overflow:hidden}.grouped-status-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.grouped-status-title{margin:0 0 var(--size-4-2) 0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.grouped-status-filters{display:flex;flex-direction:column;gap:var(--size-4-2)}.grouped-status-note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-medium)}.grouped-status-note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-content{flex:1;overflow-y:auto;padding:var(--size-4-2)}.grouped-status-tag-section{margin-bottom:var(--size-4-3)}.grouped-status-tag-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);cursor:pointer;transition:all var(--anim-duration-fast) ease;margin-bottom:var(--size-4-2)}.grouped-status-tag-header:hover{background:var(--background-modifier-hover)}.grouped-status-tag-content{padding-left:var(--size-4-2)}.grouped-status-group{margin-bottom:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;box-shadow:0 1px 3px #0000001a;transition:box-shadow var(--anim-duration-fast) ease}.grouped-status-group:hover{box-shadow:0 2px 8px #00000026}.grouped-status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;position:relative}.grouped-status-group__header:hover{background:var(--background-modifier-hover)}.grouped-status-group__header:focus{outline:2px solid var(--color-accent);outline-offset:-2px}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2);min-width:0;flex:1}.grouped-status-group__template-badge{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium)}.grouped-status-group__info{display:flex;align-items:center;gap:var(--size-2-2);margin-left:auto}.grouped-status-files{background:var(--background-secondary);border-top:1px solid var(--background-modifier-border)}.grouped-status-files-list{max-height:300px;overflow-y:auto}.grouped-status-file-item{padding:var(--size-2-3) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;border-bottom:1px solid var(--background-modifier-border-hover)}.grouped-status-file-item:hover{background:var(--background-modifier-hover)}.grouped-status-file-item:last-child{border-bottom:none}.grouped-status-file-name{font-weight:var(--font-medium);color:var(--text-normal);margin-bottom:2px}.grouped-status-file-path{font-size:var(--font-ui-small);color:var(--text-muted);opacity:.8}.grouped-status-load-more{display:flex;justify-content:center;padding:var(--size-4-2);border-top:1px solid var(--background-modifier-border)}.grouped-status-load-btn{padding:var(--size-2-2) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-small);font-weight:var(--font-medium);transition:all var(--anim-duration-fast) ease}.grouped-status-load-btn:hover{background:var(--interactive-hover);transform:translateY(-1px)}.grouped-status-loading,.grouped-status-empty{display:flex;align-items:center;justify-content:center;padding:var(--size-4-6);color:var(--text-muted);font-size:var(--font-ui-medium)}.grouped-status-view-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.grouped-status-content::-webkit-scrollbar,.grouped-status-files-list::-webkit-scrollbar{width:var(--scrollbar-width)}.grouped-status-content::-webkit-scrollbar-thumb,.grouped-status-files-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.grouped-status-content::-webkit-scrollbar-thumb:hover,.grouped-status-files-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-filters__template{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__template-select{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);cursor:pointer}.grouped-status-filters__template-select:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-filters__note{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.grouped-status-filters__note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2)}.grouped-status-group__template-badge{background:var(--background-modifier-border);color:var(--text-muted);padding:var(--size-2-1) var(--size-2-2);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);text-transform:capitalize;white-space:nowrap}.custom-icon{display:inline-flex}.custom-icon__absolute-right{position:absolute;right:0}.note-status-colored-block{position:relative;border-radius:var(--radius-s);z-index:0}.note-status-colored-block:before{content:"";position:absolute;inset:0;border-radius:inherit;background-color:var(--note-status-block-color, transparent);opacity:.18;pointer-events:none;z-index:-1;transition:background-color var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease}.note-status-border-left{position:relative}.note-status-border-left:after{content:"";position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:var(--radius-s);background-color:var(--note-status-border-color, transparent);opacity:.35;pointer-events:none}.note-status-underline{text-decoration-line:underline;text-decoration-thickness:2px;text-decoration-color:var(--note-status-underline-color, currentColor);text-underline-offset:3px}.note-status-dot-badge{width:6px;height:6px;border-radius:50%;margin-left:var(--size-2-1);display:inline-flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px var(--background-modifier-border);flex-shrink:0}.status-wrapper{position:relative;display:inline-block}.status-minimal{display:inline-flex;align-items:center;gap:2px;margin-left:var(--size-2-2);padding:2px;border-radius:var(--radius-s);cursor:pointer;opacity:.7;transition:all var(--anim-duration-fast) ease}.status-minimal:hover{opacity:1;background:var(--background-modifier-hover);transform:scale(1.05)}.status-minimal--compact{margin-left:0;padding:0;background:transparent;gap:var(--size-2-1)}.status-minimal--compact .status-minimal__icon{font-size:var(--font-ui-medium)}.status-minimal[data-status-color] .status-minimal__count{background:var(--interactive-accent)}.status-minimal__icon{font-size:11px;line-height:1;display:inline-flex;align-items:center;justify-content:center;filter:grayscale(.2);transition:filter var(--anim-duration-fast) ease}.status-minimal:hover .status-minimal__icon{filter:grayscale(0)}.status-minimal__count{min-width:14px;height:14px;padding:0 3px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);border-radius:var(--radius-m);display:flex;align-items:center;justify-content:center}.status-info-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:var(--layer-popover);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);box-shadow:var(--shadow-l);min-width:280px;max-width:400px;overflow:hidden;pointer-events:none}.status-popup-header{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);font-weight:var(--font-semibold);font-size:var(--font-ui-small)}.status-popup-content{padding:var(--size-4-2)}.status-popup-empty{padding:var(--size-4-4);text-align:center;color:var(--text-muted);font-style:italic}.status-tag-grid{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-tag-card{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-2);background:var(--background-primary-alt);box-shadow:var(--shadow-xs)}.status-tag-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--size-2-2)}.status-tag-card__title{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-tag-card__label{font-weight:var(--font-semibold);text-transform:none}.status-tag-card__badge{font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 6px;border-radius:var(--radius-s);width:fit-content}.status-tag-card__count{font-size:var(--font-ui-small);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 10px;border-radius:var(--radius-s);font-weight:var(--font-medium)}.status-tag-card__statuses{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.status-group{margin-bottom:var(--size-4-2)}.status-group:last-child{margin-bottom:0}.status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-2-3);background:var(--background-secondary-alt);border-radius:var(--radius-s);margin-bottom:var(--size-2-2);border:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.status-group__header:hover{background:var(--background-modifier-hover)}.status-group__name{text-transform:capitalize;font-weight:var(--font-medium);font-size:var(--font-ui-smaller);color:var(--text-normal)}.status-group__count{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium);min-width:20px;justify-content:center}.status-group__items{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--size-2-2);padding:0 var(--size-2-1)}.status-item{display:flex;flex-direction:column;gap:var(--size-2-1);padding:var(--size-2-2);background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.status-description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.group-label-container{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-small);font-weight:var(--font-semibold);text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);transition:color var(--anim-duration-fast) ease}.group-label-container--highlighted{color:var(--text-normal)}.group-label-container svg{width:16px;height:16px;opacity:.8}.collapsible-counter-container{padding:var(--size-2-1) var(--size-2-3);border-radius:var(--radius-s);background:var(--background-modifier-border);border:1px solid var(--background-modifier-border-hover);color:var(--text-muted);font-weight:var(--font-medium);font-size:var(--font-ui-smaller);cursor:pointer;transition:all var(--anim-duration-fast) ease;min-width:28px;text-align:center}.collapsible-counter-container:hover{background:var(--background-modifier-border-hover);color:var(--text-normal)}.note-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-2-3);background:var(--interactive-accent);color:var(--text-on-accent);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);cursor:default;transition:transform var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-chip--clickable{cursor:pointer}.note-status-chip--clickable:hover{opacity:.92;transform:translateY(-1px);box-shadow:var(--shadow-s)}.note-status-chip--removing{opacity:.5;transform:scale(.95)}.note-status-chip__icon{font-size:1em;display:inline-flex}.note-status-chip__text{font-weight:var(--font-medium)}.note-status-chip__remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:rgba(255,255,255,.2);margin-left:var(--size-2-1);cursor:pointer;border:none;color:inherit;padding:0;font:inherit;line-height:1}.note-status-chip__remove:hover{background:rgba(255,255,255,.3)}.note-status-chip__remove:focus-visible{outline:2px solid var(--background-modifier-border)}.status-badge-container{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-primary);position:relative;overflow:hidden;isolation:isolate}.status-badge-container:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:transparent;opacity:.85;display:none}.status-badge-container--clickable{cursor:pointer;transition:background var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease,filter var(--anim-duration-fast) ease}.status-badge-container--clickable:not(.status-badge--filled):hover{background:var(--background-modifier-hover);box-shadow:var(--shadow-s)}.status-badge--accent{padding-left:calc(var(--size-4-1) + 4px)}.status-badge--accent:before{display:block;background:var(--status-accent, var(--interactive-accent))}.status-badge--filled{background:var(--status-accent, var(--interactive-accent));border-color:var(--status-accent, var(--interactive-accent));color:var(--text-on-accent);padding-left:var(--size-4-2)}.status-badge--filled .status-badge-icon,.status-badge--filled .status-badge-text{color:inherit}.status-badge--filled.status-badge-container--clickable:hover{filter:brightness(1.05);background:var(--status-accent, var(--interactive-accent));box-shadow:var(--shadow-s)}.status-badge--dot{border:none;background:transparent;padding:var(--size-2-1) var(--size-2-2);gap:var(--size-2-1)}.status-badge--dot:before{display:none}.status-badge--dot .status-badge-item{gap:var(--size-2-2)}.status-badge-dot{width:8px;height:8px;border-radius:50%;background:var(--status-accent, var(--interactive-accent));box-shadow:0 0 0 1px var(--background-primary)}.status-badge--empty{min-width:32px;justify-content:center}.status-badge-item{display:flex;align-items:center;gap:var(--size-2-1);position:relative;z-index:1}.status-badge-icon{font-size:var(--font-ui-small)}.status-badge-text{font-weight:var(--font-medium);font-size:var(--font-ui-small)}.status-badge-empty{display:inline-block;min-width:var(--size-3-2);height:var(--size-3-2)}.template-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);font-size:var(--font-ui-smaller);cursor:default;transition:background var(--anim-duration-fast) ease}.template-status-chip[data-clickable=true]{cursor:pointer}.template-status-chip[data-clickable=true]:hover{background:var(--background-modifier-hover)}.template-status-color-dot{width:8px;height:8px;border-radius:50%;background-color:var(--dot-color)}.template-status-chip__label{display:inline-flex;align-items:center;gap:var(--size-2-1)}.template-status-chip__icon{display:inline-flex;font-size:1em}.lucide-icon-picker{position:relative;display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-picker__text-input{max-width:240px}.lucide-icon-picker__row{display:flex;gap:var(--size-2-1);align-items:center}.lucide-icon-picker__modal-button{display:inline-flex;align-items:center;gap:var(--size-2-1);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-2-1) var(--size-4-1);background:var(--background-secondary);cursor:pointer;transition:border var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease;min-width:220px;justify-content:space-between}.lucide-icon-picker__modal-button:hover{border-color:var(--interactive-accent)}.lucide-icon-picker__preview{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px}.lucide-icon-picker__label{flex:1;text-align:left;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-picker__clear-trigger{background:transparent;border:none;color:var(--text-muted);font-size:var(--font-ui-smaller);cursor:pointer;padding:var(--size-2-1) var(--size-2-2)}.lucide-icon-picker__clear-trigger:hover{color:var(--text-normal);text-decoration:underline}.lucide-icon-modal-wrapper{padding:var(--size-4-2)}.lucide-icon-modal{display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-modal__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-2-2)}.lucide-icon-modal__count{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__close{display:inline-flex;align-items:center;justify-content:center}.lucide-icon-modal__search{width:100%}.lucide-icon-modal__toggle{display:inline-flex;align-items:center;gap:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--size-2-1);max-height:360px;overflow-y:auto;padding-right:var(--size-2-1)}.lucide-icon-modal__list--icons-only{grid-template-columns:repeat(auto-fill,minmax(70px,1fr))}.lucide-icon-modal__option{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-secondary);cursor:pointer;font-size:var(--font-ui-smaller);justify-content:flex-start}.lucide-icon-modal__option:hover{background:var(--background-modifier-hover)}.lucide-icon-modal__option--selected{border-color:var(--interactive-accent);background:var(--background-modifier-success)}.lucide-icon-modal__option--compact{justify-content:center}.lucide-icon-modal__option--compact span{display:none}.lucide-icon-modal__empty{grid-column:1 / -1;text-align:center;font-size:var(--font-ui-smaller);color:var(--text-muted);padding:var(--size-4-2)}.icon-selection-field{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.icon-selection-field__column{flex:1;min-width:220px}.icon-selection-field__label{display:block;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.icon-selection-field__emoji-input{max-width:260px}.icon-selection-field__hint{margin-top:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1}.obsidian-icon{display:inline-flex;align-items:center;justify-content:center}.obsidian-icon svg{width:100%;height:100%}.note-status-editor-toolbar-badge{display:inline-flex;align-items:center;margin:0 var(--size-2-1)}.note-status-editor-toolbar-badge--hidden{display:none}.editor-toolbar-button__icon{font-size:16px;display:flex;align-items:center;justify-content:center;color:var(--text-muted);width:18px;height:18px;line-height:1}.editor-toolbar-button__icon--has-status{color:var(--interactive-accent)}.editor-toolbar-button__icon-container{position:relative;display:flex;align-items:center;justify-content:center}.editor-toolbar-button__counter{position:absolute;top:-4px;right:-6px;min-width:12px;height:12px;padding:0 2px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:8px;font-weight:var(--font-semibold);border-radius:6px;display:flex;align-items:center;justify-content:center;line-height:1;border:1px solid var(--background-primary)}.status-mapping-list{display:flex;flex-direction:column;gap:var(--size-4-2);width:100%}.status-mapping-row{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);background:var(--background-primary-alt);display:flex;flex-direction:column;gap:var(--size-2-2)}.status-mapping-empty{padding:var(--size-4-3);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m)}.status-mapping-row__fields{display:flex;flex-wrap:wrap;gap:var(--size-4-2);width:100%}.status-mapping-field{display:flex;flex-direction:column;gap:var(--size-2-1);flex:1 1 180px}.status-mapping-field label{font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-mapping-field small{color:var(--text-faint)}.status-mapping-field select,.status-mapping-field input{width:100%}.status-mapping-row__actions{display:flex;justify-content:flex-end}.status-mapping-remove-btn{background:var(--background-modifier-error);color:var(--text-on-accent);border:none;border-radius:var(--radius-s);padding:4px 10px;cursor:pointer}.status-mapping-remove-btn:hover{opacity:.9}.status-mapping-add-btn{align-self:flex-start;padding:var(--size-2-2) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--interactive-normal);cursor:pointer}.status-mapping-add-btn:hover{background:var(--interactive-hover)}.note-status-input{width:100%;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);padding:var(--size-2-2) var(--size-2-3);transition:border-color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.note-status-input--search{padding-left:var(--size-4-1)}.note-status-input--color{width:36px;height:32px;padding:var(--size-2-1);cursor:pointer}.note-status-input--color::-webkit-color-swatch{border:none;border-radius:var(--radius-s)}.note-status-input--color::-webkit-color-swatch-wrapper{padding:0}.note-status-input:disabled{opacity:.65;cursor:not-allowed}.note-status-options{max-height:300px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);box-shadow:var(--shadow-xs)}.note-status-options::-webkit-scrollbar{width:var(--scrollbar-width)}.note-status-options::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.note-status-option{align-items:stretch}.note-status-option .selectable-list-item-icon{display:flex;align-items:center;justify-content:center}.note-status-option__icon-wrapper{display:inline-flex;align-items:center;justify-content:center;padding:var(--size-2-1);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border);background:var(--background-secondary);min-width:36px;transition:border-color var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease}.note-status-option:hover .note-status-option__icon-wrapper,.note-status-option[data-selected=true] .note-status-option__icon-wrapper{border-color:var(--interactive-accent);background:var(--background-modifier-hover)}.note-status-option__text{display:flex;flex-direction:column;gap:2px}.note-status-option__name{font-weight:var(--font-medium);color:var(--text-normal)}.note-status-option__description{font-size:var(--font-ui-smaller);color:var(--text-muted)}.note-status-chips{display:flex;flex-wrap:wrap;gap:var(--size-2-2);min-height:32px;align-items:center;padding:var(--size-2-1) 0}.status-selector-empty{padding:var(--size-4-2);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.selectable-list-item{display:flex;align-items:center;gap:var(--size-4-2);padding:var(--size-2-3) var(--size-4-2);cursor:pointer;border-bottom:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.selectable-list-item:hover{background:var(--background-modifier-hover)}.selectable-list-item[data-focused=true]{outline:2px solid var(--interactive-accent);outline-offset:-2px}.selectable-list-item[data-selected=true]{background:var(--background-modifier-hover)}.selectable-list-item-icon{font-size:16px;min-width:20px}.selectable-list-item-content{flex:1;font-size:var(--font-ui-small)}.selectable-list-item-check{color:var(--interactive-accent);display:flex;align-items:center}.status-selector-group{display:flex;flex-direction:column;gap:var(--size-4-2);outline:none}.status-selector-group:focus-visible{outline:2px solid var(--background-modifier-border-hover);outline-offset:4px}.note-status-template-tabs{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-secondary);margin-bottom:var(--size-2-2)}.note-status-template-tab{border:none;background:transparent;color:var(--text-muted);padding:var(--size-2-2) var(--size-3-1);border-radius:var(--radius-s);cursor:pointer;transition:background var(--anim-duration-fast) ease,color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-template-tab:not(.is-active):hover{background:var(--background-modifier-hover);color:var(--text-normal)}.note-status-template-tab.is-active{background:var(--interactive-accent);color:var(--text-on-accent);box-shadow:0 0 0 1px var(--background-modifier-border)}.note-status-template-tab:focus-visible{outline:2px solid var(--background-modifier-border)} diff --git a/styles/components/template-settings.css b/styles/components/template-settings.css index 8b4c1ee..06e4f98 100644 --- a/styles/components/template-settings.css +++ b/styles/components/template-settings.css @@ -282,6 +282,20 @@ margin-bottom: var(--size-2-2); } +.marketplace-steps li a { + color: var(--text-accent); + word-break: break-all; +} + +.marketplace-note { + margin: var(--size-4-4) 0; + padding: var(--size-4-2); + background: var(--background-primary-alt); + border-left: 4px solid var(--interactive-accent); + border-radius: var(--radius-s); + font-size: var(--font-ui-small); +} + .marketplace-json-preview { background: var(--background-secondary); border: 1px solid var(--background-modifier-border); From e089efd85c234b570361ce99f8d92096a9d9f81d Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 15:57:07 +0100 Subject: [PATCH 09/23] feat: implement Template Marketplace gallery with installation workflow --- .../SettingsUI/MarketplaceBrowseModal.tsx | 114 ++++++++++++++++++ components/SettingsUI/TemplateSettings.tsx | 79 +++++++----- styles.css | 2 +- styles/components/template-settings.css | 106 ++++++++++++++++ 4 files changed, 272 insertions(+), 29 deletions(-) create mode 100644 components/SettingsUI/MarketplaceBrowseModal.tsx diff --git a/components/SettingsUI/MarketplaceBrowseModal.tsx b/components/SettingsUI/MarketplaceBrowseModal.tsx new file mode 100644 index 0000000..d17eedf --- /dev/null +++ b/components/SettingsUI/MarketplaceBrowseModal.tsx @@ -0,0 +1,114 @@ +import React, { useState, useMemo } from "react"; +import { StatusTemplate } from "@/types/pluginSettings"; +import { PREDEFINED_TEMPLATES } from "@/constants/predefinedTemplates"; +import { StatusDisplay } from "../atoms/StatusDisplay"; +import { ObsidianIcon } from "../atoms/ObsidianIcon"; +import { SearchFilter } from "../atoms/SearchFilter"; + +interface MarketplaceBrowseModalProps { + installedIds: string[]; + onInstall: (template: StatusTemplate) => void; + onClose: () => void; +} + +export const MarketplaceBrowseModal: React.FC = ({ + installedIds, + onInstall, + onClose, +}) => { + const [searchQuery, setSearchQuery] = useState(""); + + const filteredTemplates = useMemo(() => { + return PREDEFINED_TEMPLATES.filter( + (t) => + t.name.toLowerCase().includes(searchQuery.toLowerCase()) || + t.description.toLowerCase().includes(searchQuery.toLowerCase()), + ); + }, [searchQuery]); + + return ( +
+
+
+

Template Marketplace

+ +
+
+ +
+
+ {filteredTemplates.map((template) => { + const isInstalled = + installedIds.includes(template.id) || + installedIds.includes(`custom-${template.id}`); + return ( +
+
+
+ {template.name} +
+ {template.author && ( +
+ by {template.author} +
+ )} +
+
+ {template.description} +
+
+ {template.statuses.map((status, idx) => ( + + ))} +
+
+ +
+
+ ); + })} +
+ {filteredTemplates.length === 0 && ( +
+ +

No templates found matching your search.

+
+ )} +
+ +
+ +
+
+ ); +}; diff --git a/components/SettingsUI/TemplateSettings.tsx b/components/SettingsUI/TemplateSettings.tsx index c64b04e..fae2db4 100644 --- a/components/SettingsUI/TemplateSettings.tsx +++ b/components/SettingsUI/TemplateSettings.tsx @@ -3,14 +3,11 @@ import { PluginSettings, StatusTemplate } from "@/types/pluginSettings"; import { TemplateItem } from "./TemplateItem"; import { TemplateEditorModal } from "./TemplateEditorModal"; import { MarketplaceShareModal } from "./MarketplaceShareModal"; +import { MarketplaceBrowseModal } from "./MarketplaceBrowseModal"; import { generateTemplateId, isTemplateNameUnique, } from "@/utils/templateUtils"; -import { - DEFAULT_ENABLED_TEMPLATES, - PREDEFINED_TEMPLATES, -} from "@/constants/predefinedTemplates"; interface TemplateSettingsProps { settings: PluginSettings; @@ -23,6 +20,7 @@ export const TemplateSettings: React.FC = ({ }) => { const [showEditor, setShowEditor] = useState(false); const [showShare, setShowShare] = useState(false); + const [showMarketplace, setShowMarketplace] = useState(false); const [editingTemplate, setEditingTemplate] = useState< StatusTemplate | undefined >(); @@ -62,6 +60,24 @@ export const TemplateSettings: React.FC = ({ setShowShare(true); }, []); + const handleInstallTemplate = useCallback( + (template: StatusTemplate) => { + const newId = generateTemplateId(template.name); + const installedTemplate: StatusTemplate = { + ...template, + id: newId, + statuses: template.statuses.map((s) => ({ + ...s, + templateId: newId, + })), + }; + + onChange("templates", [...settings.templates, installedTemplate]); + handleTemplateToggle(newId, true); + }, + [settings.templates, onChange, handleTemplateToggle], + ); + const handleSaveTemplate = useCallback( (template: StatusTemplate) => { // Validate name uniqueness @@ -128,19 +144,6 @@ export const TemplateSettings: React.FC = ({ [settings.templates, settings.enabledTemplates, onChange], ); - const handleResetToDefaults = useCallback(() => { - const confirmed = confirm( - "Reset to default templates? This will:\n" + - "β€’ Remove all custom templates\n" + - "β€’ Reset enabled templates to defaults\n" + - "This action cannot be undone.", - ); - if (!confirmed) return; - - onChange("templates", [...PREDEFINED_TEMPLATES]); - onChange("enabledTemplates", [...DEFAULT_ENABLED_TEMPLATES]); - }, [onChange]); - const handleCancelEditor = useCallback(() => { setShowEditor(false); setEditingTemplate(undefined); @@ -151,6 +154,14 @@ export const TemplateSettings: React.FC = ({ setSharingTemplate(undefined); }, []); + const handleOpenMarketplace = useCallback(() => { + setShowMarketplace(true); + }, []); + + const handleCloseMarketplace = useCallback(() => { + setShowMarketplace(false); + }, []); + if (showEditor) { return (
@@ -176,31 +187,43 @@ export const TemplateSettings: React.FC = ({ ); } + if (showMarketplace) { + return ( +
+

Status templates

+ t.id)} + onInstall={handleInstallTemplate} + onClose={handleCloseMarketplace} + /> +
+ ); + } + return (

Status templates

- Enable predefined templates to quickly add common status - workflows, or create your own custom templates. + Browse the marketplace to find common status workflows or create + your own custom templates.

{/* Custom Templates Section */}
-

Custom Templates

-
+ -
{(settings.templates || []).map((template) => ( diff --git a/styles.css b/styles.css index 8caba89..81935d6 100644 --- a/styles.css +++ b/styles.css @@ -1 +1 @@ -.status-bar-no-status{display:inline-flex;align-items:center;gap:var(--size-2-2);color:var(--status-empty-color, var(--text-muted))}.status-bar-no-status:hover{color:var(--text-normal)}.status-bar-no-status__icon{opacity:.9}.status-bar-no-status__label{font-weight:var(--font-medium)}.status-bar-enable-button{cursor:pointer;opacity:var(--icon-opacity);transition:opacity var(--anim-duration-fast) ease}.status-bar-enable-button:hover{opacity:var(--icon-opacity-hover)}.status-bar-group-row{display:flex;align-items:center;gap:var(--size-4-2)}.status-bar-group-container{display:flex;gap:var(--size-2-1);flex-wrap:wrap;align-items:center}.status-bar-status-item{display:inline-flex;align-items:center}.status-bar-status-item--animated{animation:status-slide-in var(--anim-duration-fast) ease-out var(--status-anim-delay, 0s) both}@keyframes status-slide-in{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.note-status-settings__intro{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-2)}.note-status-settings__description{margin:0;color:var(--text-normal);line-height:1.5}.note-status-settings__support{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.note-status-settings__badge{padding:0;border:none;background:transparent}.note-status-settings__badge img{display:block;height:32px}.note-status-settings__badge:hover{background:transparent;border-color:transparent;transform:translateY(-1px)}.note-status-settings__badge:focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px;border-radius:var(--radius-s)}.note-status-settings__support a:not(.note-status-settings__badge){display:inline-flex;align-items:center;justify-content:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);text-decoration:none;color:var(--text-normal);background:var(--background-primary);transition:background var(--anim-duration-fast) ease,border-color var(--anim-duration-fast) ease,transform var(--anim-duration-fast) ease}.note-status-settings__support a:not(.note-status-settings__badge):hover{background:var(--background-modifier-hover);border-color:var(--interactive-accent);transform:translateY(-1px)}.note-status-settings__support a:not(.note-status-settings__badge):focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px}.note-status-section{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);margin-bottom:var(--size-4-3);overflow:hidden}.note-status-section__header{width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-4-1);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:none;color:inherit;cursor:pointer;text-align:left}.note-status-section__header:hover{background:var(--background-modifier-hover)}.note-status-section__title-block{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--size-2-1)}.note-status-section__title-block .setting-item-name,.note-status-section__title-block .setting-item-description{white-space:normal;line-height:1.4}.note-status-section__title-block .setting-item-description{color:var(--text-muted)}.note-status-section__chevron{font-size:var(--font-ui-medium);color:var(--text-muted)}.note-status-section__content{padding:var(--size-4-3);border-top:1px solid var(--background-modifier-border)}.note-status-settings__stack{display:flex;flex-direction:column;gap:var(--size-4-3)}.setting-item-full{width:100%}.setting-item-vertical{flex-direction:column;align-items:flex-start;gap:var(--size-2-2)}.ui-settings__no-status-input{max-width:150px}.custom-status-item{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-2);transition:all var(--anim-duration-fast) ease}.custom-status-item:hover{border-color:var(--interactive-hover)}.custom-status-item__row{display:flex;align-items:end;gap:var(--size-4-2);margin-bottom:var(--size-4-2)}.custom-status-item__row--icons{align-items:stretch;flex-wrap:wrap}.custom-status-item__field{display:flex;flex-direction:column;gap:var(--size-2-1)}.custom-status-item__field--icon,.custom-status-item__field--lucide{flex:1;min-width:240px}.custom-status-item__field--name,.custom-status-item__field--description{flex:2;min-width:120px}.custom-status-item__field--color{flex:0 0 auto}.custom-status-item__field--reorder,.custom-status-item__field--actions{flex:0 0 auto;padding-top:var(--size-4-1)}.custom-status-item__label{font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.custom-status-item__label--required{color:var(--text-error)}.custom-status-item__input--icon{width:100%!important;text-align:left;font-size:1em}.custom-status-item__hint{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.custom-status-item__input--name{font-weight:var(--font-medium)}.custom-status-item__input--name.custom-status-item__input--invalid{border-color:var(--text-error)!important;background:var(--background-modifier-error)!important}.custom-status-item__input--description{color:var(--text-muted)}.custom-status-item__input--color{width:40px!important;height:32px!important;border-radius:var(--radius-s);cursor:pointer;border:2px solid var(--background-modifier-border)!important}.custom-status-item__input--color:hover{border-color:var(--interactive-hover)!important}.custom-status-item__remove-btn{width:32px;height:32px;border-radius:var(--radius-s);background:var(--background-modifier-error);color:var(--text-on-accent);border:none;cursor:pointer;font-size:18px;font-weight:700;transition:all var(--anim-duration-fast) ease}.custom-status-item__remove-btn:hover{background:var(--text-error);transform:scale(1.05)}.custom-status-item__reorder-buttons{display:flex;flex-direction:column;gap:2px}.custom-status-item__reorder-btn{width:24px;height:24px;border-radius:var(--radius-s);background:var(--background-modifier-border);color:var(--text-normal);border:none;cursor:pointer;font-size:12px;font-weight:700;transition:all var(--anim-duration-fast) ease;display:flex;align-items:center;justify-content:center;line-height:1}.custom-status-item__reorder-btn:hover:not(:disabled){background:var(--interactive-hover);transform:scale(1.05)}.custom-status-item__reorder-btn:disabled{opacity:.5;cursor:not-allowed}.custom-status-item__preview{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);background:var(--background-primary-alt);border-radius:var(--radius-s);border-left:3px solid var(--background-modifier-border);font-size:var(--font-ui-small)}.custom-status-item__preview-icon{font-size:1.1em;min-width:20px;text-align:center}.custom-status-item__preview-text{font-weight:var(--font-medium)}.custom-status-item__preview-desc{color:var(--text-muted);font-style:italic}.custom-status-item__preview-desc:before{content:"\2014 "}.custom-status-item__error{color:var(--text-error);font-size:var(--font-ui-smaller);margin-top:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-error);border-radius:var(--radius-s);border-left:3px solid var(--text-error)}.custom-status-list__empty{text-align:center;padding:var(--size-4-4) var(--size-4-2);color:var(--text-muted);font-style:italic;border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.custom-status-list__empty p{margin:0}.status-group{margin-bottom:var(--size-4-4);padding:var(--size-4-3);background:var(--background-primary-alt);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.status-group__header{margin-bottom:var(--size-4-2);padding-bottom:var(--size-2-2);border-bottom:1px solid var(--background-modifier-border)}.status-group__title{font-weight:var(--font-semibold);color:var(--text-normal);font-size:var(--font-ui-medium)}.status-group__description{font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);line-height:var(--line-height-tight)}.status-group__items{display:flex;flex-direction:column;gap:var(--size-2-2)}.status-selector{display:flex;align-items:center;justify-content:space-between;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);cursor:pointer;transition:all var(--anim-duration-fast) ease;position:relative}.status-selector:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover)}.status-selector--selected{background:var(--background-modifier-success);border-color:var(--interactive-success)}.status-selector--selected:hover{background:var(--background-modifier-success-hover)}.status-selector__content{flex:1;min-width:0}.status-selector__status{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.status-selector__icon{font-size:var(--font-ui-medium);width:var(--size-4-3);text-align:center;flex-shrink:0}.status-selector__name{font-weight:var(--font-medium);color:var(--text-normal)}.status-selector__description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:var(--line-height-tight)}.status-selector__checkbox{margin-left:var(--size-4-2);pointer-events:none;flex-shrink:0}.quick-commands-container{margin-top:var(--size-4-2)}.template-settings-actions{display:flex;justify-content:end;gap:var(--size-4-2);padding-bottom:var(--size-4-2)}.template-create-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);font-weight:var(--font-medium);font-size:var(--font-ui-medium)}.template-reset-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);background:var(--interactive-normal);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.template-reset-btn:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-section{margin-bottom:var(--size-4-6)}.template-section-title{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-large);font-weight:var(--font-semibold);color:var(--text-normal);margin-bottom:var(--size-4-3);padding-bottom:var(--size-2-2);border-bottom:2px solid var(--background-modifier-border)}.template-section-title .lucide{opacity:.8;color:var(--text-muted)}.template-list{display:flex;flex-direction:column;gap:var(--size-4-2)}.template-item{position:relative;display:flex;align-items:stretch;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt);transition:all var(--anim-duration-fast) ease;overflow:hidden}.template-item:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover);box-shadow:0 2px 8px var(--shadow-color)}.template-item.enabled{background:var(--background-modifier-hover);border-color:var(--interactive-accent);box-shadow:0 0 0 1px var(--interactive-accent)}.template-item.enabled:hover{box-shadow:0 2px 8px var(--shadow-color),0 0 0 1px var(--interactive-accent)}.template-item-content{flex:1;border:none!important;border-radius:0!important;background:transparent!important}.template-item-main{flex:1}.template-header{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.template-custom-badge{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);border-radius:var(--radius-s);text-transform:uppercase;letter-spacing:.05em}.template-item-actions{display:flex;flex-direction:column;padding:var(--size-4-2);gap:var(--size-2-1);background:var(--background-modifier-border);border-left:1px solid var(--background-modifier-border-hover);min-width:44px;align-items:center;justify-content:center}.template-item-actions button,.template-item-actions a{display:flex;align-items:center;justify-content:center;padding:var(--size-4-1);border-radius:var(--radius-s);color:var(--text-muted);background:transparent;border:none;cursor:pointer;transition:all var(--anim-duration-fast) ease;text-decoration:none!important}.template-item-actions button:hover,.template-item-actions a:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-marketplace-btn{color:var(--text-accent)!important}.template-editor-modal{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-l);box-shadow:var(--shadow-l);max-width:800px;width:100%}.template-editor-modal__header{padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);border-radius:var(--radius-l) var(--radius-l) 0 0}.template-editor-modal__header h2{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold);color:var(--text-normal)}.template-editor-modal__content{padding:var(--size-4-6);max-height:70vh;overflow-y:auto}.template-editor-statuses{display:flex;flex-direction:column;gap:var(--size-4-3)}.template-editor-add-status{display:flex;align-items:center;gap:var(--size-2-2);align-self:flex-start;margin-top:var(--size-4-2)}.template-editor-add-status .lucide{width:16px;height:16px}.template-editor-modal__actions{display:flex;gap:var(--size-4-2);justify-content:flex-end;padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-top:1px solid var(--background-modifier-border);border-radius:0 0 var(--radius-l) var(--radius-l)}.template-editor-modal__actions button{padding:var(--size-2-3) var(--size-4-4);border-radius:var(--radius-m);font-size:var(--font-ui-medium);font-weight:var(--font-medium);cursor:pointer;transition:all var(--anim-duration-fast) ease;border:1px solid var(--background-modifier-border)}.template-editor-modal__actions button:not(.mod-cta){background:var(--interactive-normal);color:var(--text-normal)}.template-editor-modal__actions button:not(.mod-cta):hover{background:var(--interactive-hover)}.template-editor-modal__actions .mod-cta:disabled{opacity:.5;cursor:not-allowed;transform:none}.template-editor-modal__actions .mod-cta:disabled:hover{transform:none}.template-author-info{display:block;font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);font-style:italic}.template-author-info a{color:var(--text-accent);text-decoration:none}.template-author-info a:hover{text-decoration:underline}.marketplace-steps{padding-left:var(--size-4-4);margin-bottom:var(--size-4-4);color:var(--text-normal)}.marketplace-steps li{margin-bottom:var(--size-2-2)}.marketplace-json-preview{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;margin-top:var(--size-4-2)}.json-preview-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-4-2);background:var(--background-primary-alt);border-bottom:1px solid var(--background-modifier-border);font-family:var(--font-monospace);font-size:var(--font-ui-smaller);color:var(--text-muted)}.copy-btn{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3)!important;font-size:var(--font-ui-smaller)!important;background:var(--interactive-accent)!important;color:var(--text-on-accent)!important;border:none!important}.copy-btn.success{background:var(--text-success)!important}.marketplace-json-preview pre{margin:0;padding:var(--size-4-2);max-height:300px;overflow-y:auto;font-family:var(--font-monospace);font-size:var(--font-ui-smaller);white-space:pre-wrap;word-break:break-all}.marketplace-github-link{display:flex;align-items:center;gap:var(--size-2-2);text-decoration:none!important}@media (max-width: 768px){.template-settings-actions,.template-item{flex-direction:column}.template-item-actions{flex-direction:row;border-left:none;border-top:1px solid var(--background-modifier-border-hover);min-width:unset;padding:var(--size-2-3) var(--size-4-2)}.template-editor-modal{margin:var(--size-4-2);max-width:calc(100% - var(--size-4-4))}}.template-editor-modal__content::-webkit-scrollbar{width:var(--scrollbar-width)}.template-editor-modal__content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.template-editor-modal__content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.status-dashboard-view-container{height:100%;overflow:hidden}.status-dashboard{background:var(--background-primary)}.status-dashboard-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-3) var(--size-4-4);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-title{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold)}.status-dashboard-refresh{padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.status-dashboard-refresh:hover{background:var(--interactive-hover);transform:rotate(90deg)}.status-dashboard-content{flex:1;overflow-y:auto;padding:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-4)}.status-dashboard-section{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden}.status-dashboard-section-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-section-header h3{margin:0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.status-dashboard-current-note{padding:var(--size-4-3)}.current-note-info{margin-bottom:var(--size-4-3);padding-bottom:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border)}.current-note-name{font-size:var(--font-ui-large);font-weight:var(--font-semibold);margin-bottom:var(--size-2-1)}.current-note-path{font-size:var(--font-ui-small);color:var(--text-muted);font-family:var(--font-monospace);margin-bottom:var(--size-2-1)}.current-note-modified{font-size:var(--font-ui-smaller);color:var(--text-faint);font-style:italic}.current-note-statuses{display:flex;flex-direction:column;gap:var(--size-4-2)}.current-note-tag-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.current-note-status-list{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.current-note-no-status{font-size:var(--font-ui-small);color:var(--text-muted);font-style:italic;padding:var(--size-2-1) var(--size-2-3);background:var(--background-modifier-border);border-radius:var(--radius-s)}.current-note-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.vault-overview{padding:var(--size-4-3)}.vault-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--size-4-2)}.vault-stat-card{text-align:center;padding:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);transition:all var(--anim-duration-fast) ease}.vault-stat-card:hover{background:var(--background-modifier-hover);transform:translateY(-2px);box-shadow:var(--shadow-s)}.vault-stat-number{font-size:var(--font-ui-largest);font-weight:var(--font-bold);color:var(--interactive-accent);margin-bottom:var(--size-2-1)}.vault-stat-label{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium);text-transform:uppercase;letter-spacing:.05em}.status-distribution{padding:var(--size-4-3)}.status-chart{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-chart-item{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-chart-item--clickable{cursor:pointer;transition:all var(--anim-duration-fast) ease;padding:var(--size-2-2);border-radius:var(--radius-s)}.status-chart-item--clickable:hover{background:var(--background-modifier-hover);transform:translateY(-1px)}.status-chart-info{display:flex;align-items:center;gap:var(--size-2-3)}.status-chart-count{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium)}.status-chart-bar{height:8px;background:var(--background-modifier-border);border-radius:var(--radius-s);overflow:hidden}.status-chart-fill{height:100%;transition:width var(--anim-duration-moderate) ease}.status-distribution-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.quick-actions{padding:var(--size-4-3);display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--size-4-3)}.quick-actions-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.quick-actions-group-title{font-size:var(--font-ui-small);font-weight:var(--font-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding-bottom:var(--size-2-1);border-bottom:1px solid var(--background-modifier-border);margin-bottom:var(--size-2-1)}.quick-action-btn{width:100%;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);font-weight:var(--font-medium);text-align:left;display:flex;align-items:center;gap:var(--size-2-2);transition:all var(--anim-duration-fast) ease}.quick-action-btn:hover:not(:disabled){background:var(--interactive-hover);transform:translateY(-1px);box-shadow:var(--shadow-s)}.quick-action-btn:disabled{opacity:.5;cursor:not-allowed;background:var(--background-modifier-border);color:var(--text-faint)}@media (max-width: 768px){.quick-actions{grid-template-columns:1fr}}.status-dashboard-loading{display:flex;align-items:center;justify-content:center;height:100%;font-size:var(--font-ui-medium);color:var(--text-muted)}.status-dashboard-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.status-dashboard-content::-webkit-scrollbar{width:var(--scrollbar-width)}.status-dashboard-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.status-dashboard-content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-view-container{height:100%;overflow:hidden}.grouped-status-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.grouped-status-title{margin:0 0 var(--size-4-2) 0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.grouped-status-filters{display:flex;flex-direction:column;gap:var(--size-4-2)}.grouped-status-note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-medium)}.grouped-status-note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-content{flex:1;overflow-y:auto;padding:var(--size-4-2)}.grouped-status-tag-section{margin-bottom:var(--size-4-3)}.grouped-status-tag-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);cursor:pointer;transition:all var(--anim-duration-fast) ease;margin-bottom:var(--size-4-2)}.grouped-status-tag-header:hover{background:var(--background-modifier-hover)}.grouped-status-tag-content{padding-left:var(--size-4-2)}.grouped-status-group{margin-bottom:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;box-shadow:0 1px 3px #0000001a;transition:box-shadow var(--anim-duration-fast) ease}.grouped-status-group:hover{box-shadow:0 2px 8px #00000026}.grouped-status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;position:relative}.grouped-status-group__header:hover{background:var(--background-modifier-hover)}.grouped-status-group__header:focus{outline:2px solid var(--color-accent);outline-offset:-2px}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2);min-width:0;flex:1}.grouped-status-group__template-badge{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium)}.grouped-status-group__info{display:flex;align-items:center;gap:var(--size-2-2);margin-left:auto}.grouped-status-files{background:var(--background-secondary);border-top:1px solid var(--background-modifier-border)}.grouped-status-files-list{max-height:300px;overflow-y:auto}.grouped-status-file-item{padding:var(--size-2-3) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;border-bottom:1px solid var(--background-modifier-border-hover)}.grouped-status-file-item:hover{background:var(--background-modifier-hover)}.grouped-status-file-item:last-child{border-bottom:none}.grouped-status-file-name{font-weight:var(--font-medium);color:var(--text-normal);margin-bottom:2px}.grouped-status-file-path{font-size:var(--font-ui-small);color:var(--text-muted);opacity:.8}.grouped-status-load-more{display:flex;justify-content:center;padding:var(--size-4-2);border-top:1px solid var(--background-modifier-border)}.grouped-status-load-btn{padding:var(--size-2-2) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-small);font-weight:var(--font-medium);transition:all var(--anim-duration-fast) ease}.grouped-status-load-btn:hover{background:var(--interactive-hover);transform:translateY(-1px)}.grouped-status-loading,.grouped-status-empty{display:flex;align-items:center;justify-content:center;padding:var(--size-4-6);color:var(--text-muted);font-size:var(--font-ui-medium)}.grouped-status-view-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.grouped-status-content::-webkit-scrollbar,.grouped-status-files-list::-webkit-scrollbar{width:var(--scrollbar-width)}.grouped-status-content::-webkit-scrollbar-thumb,.grouped-status-files-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.grouped-status-content::-webkit-scrollbar-thumb:hover,.grouped-status-files-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-filters__template{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__template-select{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);cursor:pointer}.grouped-status-filters__template-select:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-filters__note{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.grouped-status-filters__note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2)}.grouped-status-group__template-badge{background:var(--background-modifier-border);color:var(--text-muted);padding:var(--size-2-1) var(--size-2-2);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);text-transform:capitalize;white-space:nowrap}.custom-icon{display:inline-flex}.custom-icon__absolute-right{position:absolute;right:0}.note-status-colored-block{position:relative;border-radius:var(--radius-s);z-index:0}.note-status-colored-block:before{content:"";position:absolute;inset:0;border-radius:inherit;background-color:var(--note-status-block-color, transparent);opacity:.18;pointer-events:none;z-index:-1;transition:background-color var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease}.note-status-border-left{position:relative}.note-status-border-left:after{content:"";position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:var(--radius-s);background-color:var(--note-status-border-color, transparent);opacity:.35;pointer-events:none}.note-status-underline{text-decoration-line:underline;text-decoration-thickness:2px;text-decoration-color:var(--note-status-underline-color, currentColor);text-underline-offset:3px}.note-status-dot-badge{width:6px;height:6px;border-radius:50%;margin-left:var(--size-2-1);display:inline-flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px var(--background-modifier-border);flex-shrink:0}.status-wrapper{position:relative;display:inline-block}.status-minimal{display:inline-flex;align-items:center;gap:2px;margin-left:var(--size-2-2);padding:2px;border-radius:var(--radius-s);cursor:pointer;opacity:.7;transition:all var(--anim-duration-fast) ease}.status-minimal:hover{opacity:1;background:var(--background-modifier-hover);transform:scale(1.05)}.status-minimal--compact{margin-left:0;padding:0;background:transparent;gap:var(--size-2-1)}.status-minimal--compact .status-minimal__icon{font-size:var(--font-ui-medium)}.status-minimal[data-status-color] .status-minimal__count{background:var(--interactive-accent)}.status-minimal__icon{font-size:11px;line-height:1;display:inline-flex;align-items:center;justify-content:center;filter:grayscale(.2);transition:filter var(--anim-duration-fast) ease}.status-minimal:hover .status-minimal__icon{filter:grayscale(0)}.status-minimal__count{min-width:14px;height:14px;padding:0 3px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);border-radius:var(--radius-m);display:flex;align-items:center;justify-content:center}.status-info-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:var(--layer-popover);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);box-shadow:var(--shadow-l);min-width:280px;max-width:400px;overflow:hidden;pointer-events:none}.status-popup-header{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);font-weight:var(--font-semibold);font-size:var(--font-ui-small)}.status-popup-content{padding:var(--size-4-2)}.status-popup-empty{padding:var(--size-4-4);text-align:center;color:var(--text-muted);font-style:italic}.status-tag-grid{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-tag-card{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-2);background:var(--background-primary-alt);box-shadow:var(--shadow-xs)}.status-tag-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--size-2-2)}.status-tag-card__title{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-tag-card__label{font-weight:var(--font-semibold);text-transform:none}.status-tag-card__badge{font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 6px;border-radius:var(--radius-s);width:fit-content}.status-tag-card__count{font-size:var(--font-ui-small);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 10px;border-radius:var(--radius-s);font-weight:var(--font-medium)}.status-tag-card__statuses{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.status-group{margin-bottom:var(--size-4-2)}.status-group:last-child{margin-bottom:0}.status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-2-3);background:var(--background-secondary-alt);border-radius:var(--radius-s);margin-bottom:var(--size-2-2);border:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.status-group__header:hover{background:var(--background-modifier-hover)}.status-group__name{text-transform:capitalize;font-weight:var(--font-medium);font-size:var(--font-ui-smaller);color:var(--text-normal)}.status-group__count{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium);min-width:20px;justify-content:center}.status-group__items{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--size-2-2);padding:0 var(--size-2-1)}.status-item{display:flex;flex-direction:column;gap:var(--size-2-1);padding:var(--size-2-2);background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.status-description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.group-label-container{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-small);font-weight:var(--font-semibold);text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);transition:color var(--anim-duration-fast) ease}.group-label-container--highlighted{color:var(--text-normal)}.group-label-container svg{width:16px;height:16px;opacity:.8}.collapsible-counter-container{padding:var(--size-2-1) var(--size-2-3);border-radius:var(--radius-s);background:var(--background-modifier-border);border:1px solid var(--background-modifier-border-hover);color:var(--text-muted);font-weight:var(--font-medium);font-size:var(--font-ui-smaller);cursor:pointer;transition:all var(--anim-duration-fast) ease;min-width:28px;text-align:center}.collapsible-counter-container:hover{background:var(--background-modifier-border-hover);color:var(--text-normal)}.note-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-2-3);background:var(--interactive-accent);color:var(--text-on-accent);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);cursor:default;transition:transform var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-chip--clickable{cursor:pointer}.note-status-chip--clickable:hover{opacity:.92;transform:translateY(-1px);box-shadow:var(--shadow-s)}.note-status-chip--removing{opacity:.5;transform:scale(.95)}.note-status-chip__icon{font-size:1em;display:inline-flex}.note-status-chip__text{font-weight:var(--font-medium)}.note-status-chip__remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:rgba(255,255,255,.2);margin-left:var(--size-2-1);cursor:pointer;border:none;color:inherit;padding:0;font:inherit;line-height:1}.note-status-chip__remove:hover{background:rgba(255,255,255,.3)}.note-status-chip__remove:focus-visible{outline:2px solid var(--background-modifier-border)}.status-badge-container{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-primary);position:relative;overflow:hidden;isolation:isolate}.status-badge-container:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:transparent;opacity:.85;display:none}.status-badge-container--clickable{cursor:pointer;transition:background var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease,filter var(--anim-duration-fast) ease}.status-badge-container--clickable:not(.status-badge--filled):hover{background:var(--background-modifier-hover);box-shadow:var(--shadow-s)}.status-badge--accent{padding-left:calc(var(--size-4-1) + 4px)}.status-badge--accent:before{display:block;background:var(--status-accent, var(--interactive-accent))}.status-badge--filled{background:var(--status-accent, var(--interactive-accent));border-color:var(--status-accent, var(--interactive-accent));color:var(--text-on-accent);padding-left:var(--size-4-2)}.status-badge--filled .status-badge-icon,.status-badge--filled .status-badge-text{color:inherit}.status-badge--filled.status-badge-container--clickable:hover{filter:brightness(1.05);background:var(--status-accent, var(--interactive-accent));box-shadow:var(--shadow-s)}.status-badge--dot{border:none;background:transparent;padding:var(--size-2-1) var(--size-2-2);gap:var(--size-2-1)}.status-badge--dot:before{display:none}.status-badge--dot .status-badge-item{gap:var(--size-2-2)}.status-badge-dot{width:8px;height:8px;border-radius:50%;background:var(--status-accent, var(--interactive-accent));box-shadow:0 0 0 1px var(--background-primary)}.status-badge--empty{min-width:32px;justify-content:center}.status-badge-item{display:flex;align-items:center;gap:var(--size-2-1);position:relative;z-index:1}.status-badge-icon{font-size:var(--font-ui-small)}.status-badge-text{font-weight:var(--font-medium);font-size:var(--font-ui-small)}.status-badge-empty{display:inline-block;min-width:var(--size-3-2);height:var(--size-3-2)}.template-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);font-size:var(--font-ui-smaller);cursor:default;transition:background var(--anim-duration-fast) ease}.template-status-chip[data-clickable=true]{cursor:pointer}.template-status-chip[data-clickable=true]:hover{background:var(--background-modifier-hover)}.template-status-color-dot{width:8px;height:8px;border-radius:50%;background-color:var(--dot-color)}.template-status-chip__label{display:inline-flex;align-items:center;gap:var(--size-2-1)}.template-status-chip__icon{display:inline-flex;font-size:1em}.lucide-icon-picker{position:relative;display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-picker__text-input{max-width:240px}.lucide-icon-picker__row{display:flex;gap:var(--size-2-1);align-items:center}.lucide-icon-picker__modal-button{display:inline-flex;align-items:center;gap:var(--size-2-1);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-2-1) var(--size-4-1);background:var(--background-secondary);cursor:pointer;transition:border var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease;min-width:220px;justify-content:space-between}.lucide-icon-picker__modal-button:hover{border-color:var(--interactive-accent)}.lucide-icon-picker__preview{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px}.lucide-icon-picker__label{flex:1;text-align:left;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-picker__clear-trigger{background:transparent;border:none;color:var(--text-muted);font-size:var(--font-ui-smaller);cursor:pointer;padding:var(--size-2-1) var(--size-2-2)}.lucide-icon-picker__clear-trigger:hover{color:var(--text-normal);text-decoration:underline}.lucide-icon-modal-wrapper{padding:var(--size-4-2)}.lucide-icon-modal{display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-modal__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-2-2)}.lucide-icon-modal__count{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__close{display:inline-flex;align-items:center;justify-content:center}.lucide-icon-modal__search{width:100%}.lucide-icon-modal__toggle{display:inline-flex;align-items:center;gap:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--size-2-1);max-height:360px;overflow-y:auto;padding-right:var(--size-2-1)}.lucide-icon-modal__list--icons-only{grid-template-columns:repeat(auto-fill,minmax(70px,1fr))}.lucide-icon-modal__option{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-secondary);cursor:pointer;font-size:var(--font-ui-smaller);justify-content:flex-start}.lucide-icon-modal__option:hover{background:var(--background-modifier-hover)}.lucide-icon-modal__option--selected{border-color:var(--interactive-accent);background:var(--background-modifier-success)}.lucide-icon-modal__option--compact{justify-content:center}.lucide-icon-modal__option--compact span{display:none}.lucide-icon-modal__empty{grid-column:1 / -1;text-align:center;font-size:var(--font-ui-smaller);color:var(--text-muted);padding:var(--size-4-2)}.icon-selection-field{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.icon-selection-field__column{flex:1;min-width:220px}.icon-selection-field__label{display:block;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.icon-selection-field__emoji-input{max-width:260px}.icon-selection-field__hint{margin-top:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1}.obsidian-icon{display:inline-flex;align-items:center;justify-content:center}.obsidian-icon svg{width:100%;height:100%}.note-status-editor-toolbar-badge{display:inline-flex;align-items:center;margin:0 var(--size-2-1)}.note-status-editor-toolbar-badge--hidden{display:none}.editor-toolbar-button__icon{font-size:16px;display:flex;align-items:center;justify-content:center;color:var(--text-muted);width:18px;height:18px;line-height:1}.editor-toolbar-button__icon--has-status{color:var(--interactive-accent)}.editor-toolbar-button__icon-container{position:relative;display:flex;align-items:center;justify-content:center}.editor-toolbar-button__counter{position:absolute;top:-4px;right:-6px;min-width:12px;height:12px;padding:0 2px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:8px;font-weight:var(--font-semibold);border-radius:6px;display:flex;align-items:center;justify-content:center;line-height:1;border:1px solid var(--background-primary)}.status-mapping-list{display:flex;flex-direction:column;gap:var(--size-4-2);width:100%}.status-mapping-row{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);background:var(--background-primary-alt);display:flex;flex-direction:column;gap:var(--size-2-2)}.status-mapping-empty{padding:var(--size-4-3);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m)}.status-mapping-row__fields{display:flex;flex-wrap:wrap;gap:var(--size-4-2);width:100%}.status-mapping-field{display:flex;flex-direction:column;gap:var(--size-2-1);flex:1 1 180px}.status-mapping-field label{font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-mapping-field small{color:var(--text-faint)}.status-mapping-field select,.status-mapping-field input{width:100%}.status-mapping-row__actions{display:flex;justify-content:flex-end}.status-mapping-remove-btn{background:var(--background-modifier-error);color:var(--text-on-accent);border:none;border-radius:var(--radius-s);padding:4px 10px;cursor:pointer}.status-mapping-remove-btn:hover{opacity:.9}.status-mapping-add-btn{align-self:flex-start;padding:var(--size-2-2) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--interactive-normal);cursor:pointer}.status-mapping-add-btn:hover{background:var(--interactive-hover)}.note-status-input{width:100%;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);padding:var(--size-2-2) var(--size-2-3);transition:border-color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.note-status-input--search{padding-left:var(--size-4-1)}.note-status-input--color{width:36px;height:32px;padding:var(--size-2-1);cursor:pointer}.note-status-input--color::-webkit-color-swatch{border:none;border-radius:var(--radius-s)}.note-status-input--color::-webkit-color-swatch-wrapper{padding:0}.note-status-input:disabled{opacity:.65;cursor:not-allowed}.note-status-options{max-height:300px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);box-shadow:var(--shadow-xs)}.note-status-options::-webkit-scrollbar{width:var(--scrollbar-width)}.note-status-options::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.note-status-option{align-items:stretch}.note-status-option .selectable-list-item-icon{display:flex;align-items:center;justify-content:center}.note-status-option__icon-wrapper{display:inline-flex;align-items:center;justify-content:center;padding:var(--size-2-1);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border);background:var(--background-secondary);min-width:36px;transition:border-color var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease}.note-status-option:hover .note-status-option__icon-wrapper,.note-status-option[data-selected=true] .note-status-option__icon-wrapper{border-color:var(--interactive-accent);background:var(--background-modifier-hover)}.note-status-option__text{display:flex;flex-direction:column;gap:2px}.note-status-option__name{font-weight:var(--font-medium);color:var(--text-normal)}.note-status-option__description{font-size:var(--font-ui-smaller);color:var(--text-muted)}.note-status-chips{display:flex;flex-wrap:wrap;gap:var(--size-2-2);min-height:32px;align-items:center;padding:var(--size-2-1) 0}.status-selector-empty{padding:var(--size-4-2);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.selectable-list-item{display:flex;align-items:center;gap:var(--size-4-2);padding:var(--size-2-3) var(--size-4-2);cursor:pointer;border-bottom:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.selectable-list-item:hover{background:var(--background-modifier-hover)}.selectable-list-item[data-focused=true]{outline:2px solid var(--interactive-accent);outline-offset:-2px}.selectable-list-item[data-selected=true]{background:var(--background-modifier-hover)}.selectable-list-item-icon{font-size:16px;min-width:20px}.selectable-list-item-content{flex:1;font-size:var(--font-ui-small)}.selectable-list-item-check{color:var(--interactive-accent);display:flex;align-items:center}.status-selector-group{display:flex;flex-direction:column;gap:var(--size-4-2);outline:none}.status-selector-group:focus-visible{outline:2px solid var(--background-modifier-border-hover);outline-offset:4px}.note-status-template-tabs{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-secondary);margin-bottom:var(--size-2-2)}.note-status-template-tab{border:none;background:transparent;color:var(--text-muted);padding:var(--size-2-2) var(--size-3-1);border-radius:var(--radius-s);cursor:pointer;transition:background var(--anim-duration-fast) ease,color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-template-tab:not(.is-active):hover{background:var(--background-modifier-hover);color:var(--text-normal)}.note-status-template-tab.is-active{background:var(--interactive-accent);color:var(--text-on-accent);box-shadow:0 0 0 1px var(--background-modifier-border)}.note-status-template-tab:focus-visible{outline:2px solid var(--background-modifier-border)} +.status-bar-no-status{display:inline-flex;align-items:center;gap:var(--size-2-2);color:var(--status-empty-color, var(--text-muted))}.status-bar-no-status:hover{color:var(--text-normal)}.status-bar-no-status__icon{opacity:.9}.status-bar-no-status__label{font-weight:var(--font-medium)}.status-bar-enable-button{cursor:pointer;opacity:var(--icon-opacity);transition:opacity var(--anim-duration-fast) ease}.status-bar-enable-button:hover{opacity:var(--icon-opacity-hover)}.status-bar-group-row{display:flex;align-items:center;gap:var(--size-4-2)}.status-bar-group-container{display:flex;gap:var(--size-2-1);flex-wrap:wrap;align-items:center}.status-bar-status-item{display:inline-flex;align-items:center}.status-bar-status-item--animated{animation:status-slide-in var(--anim-duration-fast) ease-out var(--status-anim-delay, 0s) both}@keyframes status-slide-in{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.note-status-settings__intro{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-2)}.note-status-settings__description{margin:0;color:var(--text-normal);line-height:1.5}.note-status-settings__support{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.note-status-settings__badge{padding:0;border:none;background:transparent}.note-status-settings__badge img{display:block;height:32px}.note-status-settings__badge:hover{background:transparent;border-color:transparent;transform:translateY(-1px)}.note-status-settings__badge:focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px;border-radius:var(--radius-s)}.note-status-settings__support a:not(.note-status-settings__badge){display:inline-flex;align-items:center;justify-content:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);text-decoration:none;color:var(--text-normal);background:var(--background-primary);transition:background var(--anim-duration-fast) ease,border-color var(--anim-duration-fast) ease,transform var(--anim-duration-fast) ease}.note-status-settings__support a:not(.note-status-settings__badge):hover{background:var(--background-modifier-hover);border-color:var(--interactive-accent);transform:translateY(-1px)}.note-status-settings__support a:not(.note-status-settings__badge):focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px}.note-status-section{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);margin-bottom:var(--size-4-3);overflow:hidden}.note-status-section__header{width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-4-1);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:none;color:inherit;cursor:pointer;text-align:left}.note-status-section__header:hover{background:var(--background-modifier-hover)}.note-status-section__title-block{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--size-2-1)}.note-status-section__title-block .setting-item-name,.note-status-section__title-block .setting-item-description{white-space:normal;line-height:1.4}.note-status-section__title-block .setting-item-description{color:var(--text-muted)}.note-status-section__chevron{font-size:var(--font-ui-medium);color:var(--text-muted)}.note-status-section__content{padding:var(--size-4-3);border-top:1px solid var(--background-modifier-border)}.note-status-settings__stack{display:flex;flex-direction:column;gap:var(--size-4-3)}.setting-item-full{width:100%}.setting-item-vertical{flex-direction:column;align-items:flex-start;gap:var(--size-2-2)}.ui-settings__no-status-input{max-width:150px}.custom-status-item{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-2);transition:all var(--anim-duration-fast) ease}.custom-status-item:hover{border-color:var(--interactive-hover)}.custom-status-item__row{display:flex;align-items:end;gap:var(--size-4-2);margin-bottom:var(--size-4-2)}.custom-status-item__row--icons{align-items:stretch;flex-wrap:wrap}.custom-status-item__field{display:flex;flex-direction:column;gap:var(--size-2-1)}.custom-status-item__field--icon,.custom-status-item__field--lucide{flex:1;min-width:240px}.custom-status-item__field--name,.custom-status-item__field--description{flex:2;min-width:120px}.custom-status-item__field--color{flex:0 0 auto}.custom-status-item__field--reorder,.custom-status-item__field--actions{flex:0 0 auto;padding-top:var(--size-4-1)}.custom-status-item__label{font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.custom-status-item__label--required{color:var(--text-error)}.custom-status-item__input--icon{width:100%!important;text-align:left;font-size:1em}.custom-status-item__hint{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.custom-status-item__input--name{font-weight:var(--font-medium)}.custom-status-item__input--name.custom-status-item__input--invalid{border-color:var(--text-error)!important;background:var(--background-modifier-error)!important}.custom-status-item__input--description{color:var(--text-muted)}.custom-status-item__input--color{width:40px!important;height:32px!important;border-radius:var(--radius-s);cursor:pointer;border:2px solid var(--background-modifier-border)!important}.custom-status-item__input--color:hover{border-color:var(--interactive-hover)!important}.custom-status-item__remove-btn{width:32px;height:32px;border-radius:var(--radius-s);background:var(--background-modifier-error);color:var(--text-on-accent);border:none;cursor:pointer;font-size:18px;font-weight:700;transition:all var(--anim-duration-fast) ease}.custom-status-item__remove-btn:hover{background:var(--text-error);transform:scale(1.05)}.custom-status-item__reorder-buttons{display:flex;flex-direction:column;gap:2px}.custom-status-item__reorder-btn{width:24px;height:24px;border-radius:var(--radius-s);background:var(--background-modifier-border);color:var(--text-normal);border:none;cursor:pointer;font-size:12px;font-weight:700;transition:all var(--anim-duration-fast) ease;display:flex;align-items:center;justify-content:center;line-height:1}.custom-status-item__reorder-btn:hover:not(:disabled){background:var(--interactive-hover);transform:scale(1.05)}.custom-status-item__reorder-btn:disabled{opacity:.5;cursor:not-allowed}.custom-status-item__preview{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);background:var(--background-primary-alt);border-radius:var(--radius-s);border-left:3px solid var(--background-modifier-border);font-size:var(--font-ui-small)}.custom-status-item__preview-icon{font-size:1.1em;min-width:20px;text-align:center}.custom-status-item__preview-text{font-weight:var(--font-medium)}.custom-status-item__preview-desc{color:var(--text-muted);font-style:italic}.custom-status-item__preview-desc:before{content:"\2014 "}.custom-status-item__error{color:var(--text-error);font-size:var(--font-ui-smaller);margin-top:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-error);border-radius:var(--radius-s);border-left:3px solid var(--text-error)}.custom-status-list__empty{text-align:center;padding:var(--size-4-4) var(--size-4-2);color:var(--text-muted);font-style:italic;border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.custom-status-list__empty p{margin:0}.status-group{margin-bottom:var(--size-4-4);padding:var(--size-4-3);background:var(--background-primary-alt);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.status-group__header{margin-bottom:var(--size-4-2);padding-bottom:var(--size-2-2);border-bottom:1px solid var(--background-modifier-border)}.status-group__title{font-weight:var(--font-semibold);color:var(--text-normal);font-size:var(--font-ui-medium)}.status-group__description{font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);line-height:var(--line-height-tight)}.status-group__items{display:flex;flex-direction:column;gap:var(--size-2-2)}.status-selector{display:flex;align-items:center;justify-content:space-between;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);cursor:pointer;transition:all var(--anim-duration-fast) ease;position:relative}.status-selector:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover)}.status-selector--selected{background:var(--background-modifier-success);border-color:var(--interactive-success)}.status-selector--selected:hover{background:var(--background-modifier-success-hover)}.status-selector__content{flex:1;min-width:0}.status-selector__status{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.status-selector__icon{font-size:var(--font-ui-medium);width:var(--size-4-3);text-align:center;flex-shrink:0}.status-selector__name{font-weight:var(--font-medium);color:var(--text-normal)}.status-selector__description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:var(--line-height-tight)}.status-selector__checkbox{margin-left:var(--size-4-2);pointer-events:none;flex-shrink:0}.quick-commands-container{margin-top:var(--size-4-2)}.template-settings-actions{display:flex;justify-content:end;gap:var(--size-4-2);padding-bottom:var(--size-4-2)}.template-create-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);font-weight:var(--font-medium);font-size:var(--font-ui-medium)}.template-reset-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);background:var(--interactive-normal);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.template-reset-btn:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-section{margin-bottom:var(--size-4-6)}.template-section-title{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-large);font-weight:var(--font-semibold);color:var(--text-normal);margin-bottom:var(--size-4-3);padding-bottom:var(--size-2-2);border-bottom:2px solid var(--background-modifier-border)}.template-section-title .lucide{opacity:.8;color:var(--text-muted)}.template-list{display:flex;flex-direction:column;gap:var(--size-4-2)}.template-item{position:relative;display:flex;align-items:stretch;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt);transition:all var(--anim-duration-fast) ease;overflow:hidden}.template-item:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover);box-shadow:0 2px 8px var(--shadow-color)}.template-item.enabled{background:var(--background-modifier-hover);border-color:var(--interactive-accent);box-shadow:0 0 0 1px var(--interactive-accent)}.template-item.enabled:hover{box-shadow:0 2px 8px var(--shadow-color),0 0 0 1px var(--interactive-accent)}.template-item-content{flex:1;border:none!important;border-radius:0!important;background:transparent!important}.template-item-main{flex:1}.template-header{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.template-custom-badge{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);border-radius:var(--radius-s);text-transform:uppercase;letter-spacing:.05em}.template-item-actions{display:flex;flex-direction:column;padding:var(--size-4-2);gap:var(--size-2-1);background:var(--background-modifier-border);border-left:1px solid var(--background-modifier-border-hover);min-width:44px;align-items:center;justify-content:center}.template-item-actions button,.template-item-actions a{display:flex;align-items:center;justify-content:center;padding:var(--size-4-1);border-radius:var(--radius-s);color:var(--text-muted);background:transparent;border:none;cursor:pointer;transition:all var(--anim-duration-fast) ease;text-decoration:none!important}.template-item-actions button:hover,.template-item-actions a:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-marketplace-btn{color:var(--text-accent)!important}.template-editor-modal{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-l);box-shadow:var(--shadow-l);max-width:800px;width:100%}.template-editor-modal__header{padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);border-radius:var(--radius-l) var(--radius-l) 0 0}.template-editor-modal__header h2{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold);color:var(--text-normal)}.template-editor-modal__content{padding:var(--size-4-6);max-height:70vh;overflow-y:auto}.template-editor-statuses{display:flex;flex-direction:column;gap:var(--size-4-3)}.template-editor-add-status{display:flex;align-items:center;gap:var(--size-2-2);align-self:flex-start;margin-top:var(--size-4-2)}.template-editor-add-status .lucide{width:16px;height:16px}.template-editor-modal__actions{display:flex;gap:var(--size-4-2);justify-content:flex-end;padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-top:1px solid var(--background-modifier-border);border-radius:0 0 var(--radius-l) var(--radius-l)}.template-editor-modal__actions button{padding:var(--size-2-3) var(--size-4-4);border-radius:var(--radius-m);font-size:var(--font-ui-medium);font-weight:var(--font-medium);cursor:pointer;transition:all var(--anim-duration-fast) ease;border:1px solid var(--background-modifier-border)}.template-editor-modal__actions button:not(.mod-cta){background:var(--interactive-normal);color:var(--text-normal)}.template-editor-modal__actions button:not(.mod-cta):hover{background:var(--interactive-hover)}.template-editor-modal__actions .mod-cta:disabled{opacity:.5;cursor:not-allowed;transform:none}.template-editor-modal__actions .mod-cta:disabled:hover{transform:none}.template-author-info{display:block;font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);font-style:italic}.template-author-info a{color:var(--text-accent);text-decoration:none}.template-author-info a:hover{text-decoration:underline}.marketplace-steps{padding-left:var(--size-4-4);margin-bottom:var(--size-4-4);color:var(--text-normal)}.marketplace-steps li{margin-bottom:var(--size-2-2)}.marketplace-steps li a{color:var(--text-accent);word-break:break-all}.marketplace-note{margin:var(--size-4-4) 0;padding:var(--size-4-2);background:var(--background-primary-alt);border-left:4px solid var(--interactive-accent);border-radius:var(--radius-s);font-size:var(--font-ui-small)}.marketplace-json-preview{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;margin-top:var(--size-4-2)}.json-preview-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-4-2);background:var(--background-primary-alt);border-bottom:1px solid var(--background-modifier-border);font-family:var(--font-monospace);font-size:var(--font-ui-smaller);color:var(--text-muted)}.copy-btn{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3)!important;font-size:var(--font-ui-smaller)!important;background:var(--interactive-accent)!important;color:var(--text-on-accent)!important;border:none!important}.copy-btn.success{background:var(--text-success)!important}.marketplace-json-preview pre{margin:0;padding:var(--size-4-2);max-height:300px;overflow-y:auto;font-family:var(--font-monospace);font-size:var(--font-ui-smaller);white-space:pre-wrap;word-break:break-all}.marketplace-github-link{display:flex;align-items:center;gap:var(--size-2-2);text-decoration:none!important}@media (max-width: 768px){.template-settings-actions,.template-item{flex-direction:column}.template-item-actions{flex-direction:row;border-left:none;border-top:1px solid var(--background-modifier-border-hover);min-width:unset;padding:var(--size-2-3) var(--size-4-2)}.template-editor-modal{margin:var(--size-4-2);max-width:calc(100% - var(--size-4-4))}}.template-editor-modal__content::-webkit-scrollbar{width:var(--scrollbar-width)}.template-editor-modal__content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.template-editor-modal__content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.status-dashboard-view-container{height:100%;overflow:hidden}.status-dashboard{background:var(--background-primary)}.status-dashboard-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-3) var(--size-4-4);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-title{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold)}.status-dashboard-refresh{padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.status-dashboard-refresh:hover{background:var(--interactive-hover);transform:rotate(90deg)}.status-dashboard-content{flex:1;overflow-y:auto;padding:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-4)}.status-dashboard-section{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden}.status-dashboard-section-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-section-header h3{margin:0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.status-dashboard-current-note{padding:var(--size-4-3)}.current-note-info{margin-bottom:var(--size-4-3);padding-bottom:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border)}.current-note-name{font-size:var(--font-ui-large);font-weight:var(--font-semibold);margin-bottom:var(--size-2-1)}.current-note-path{font-size:var(--font-ui-small);color:var(--text-muted);font-family:var(--font-monospace);margin-bottom:var(--size-2-1)}.current-note-modified{font-size:var(--font-ui-smaller);color:var(--text-faint);font-style:italic}.current-note-statuses{display:flex;flex-direction:column;gap:var(--size-4-2)}.current-note-tag-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.current-note-status-list{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.current-note-no-status{font-size:var(--font-ui-small);color:var(--text-muted);font-style:italic;padding:var(--size-2-1) var(--size-2-3);background:var(--background-modifier-border);border-radius:var(--radius-s)}.current-note-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.vault-overview{padding:var(--size-4-3)}.vault-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--size-4-2)}.vault-stat-card{text-align:center;padding:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);transition:all var(--anim-duration-fast) ease}.vault-stat-card:hover{background:var(--background-modifier-hover);transform:translateY(-2px);box-shadow:var(--shadow-s)}.vault-stat-number{font-size:var(--font-ui-largest);font-weight:var(--font-bold);color:var(--interactive-accent);margin-bottom:var(--size-2-1)}.vault-stat-label{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium);text-transform:uppercase;letter-spacing:.05em}.status-distribution{padding:var(--size-4-3)}.status-chart{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-chart-item{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-chart-item--clickable{cursor:pointer;transition:all var(--anim-duration-fast) ease;padding:var(--size-2-2);border-radius:var(--radius-s)}.status-chart-item--clickable:hover{background:var(--background-modifier-hover);transform:translateY(-1px)}.status-chart-info{display:flex;align-items:center;gap:var(--size-2-3)}.status-chart-count{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium)}.status-chart-bar{height:8px;background:var(--background-modifier-border);border-radius:var(--radius-s);overflow:hidden}.status-chart-fill{height:100%;transition:width var(--anim-duration-moderate) ease}.status-distribution-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.quick-actions{padding:var(--size-4-3);display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--size-4-3)}.quick-actions-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.quick-actions-group-title{font-size:var(--font-ui-small);font-weight:var(--font-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding-bottom:var(--size-2-1);border-bottom:1px solid var(--background-modifier-border);margin-bottom:var(--size-2-1)}.quick-action-btn{width:100%;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);font-weight:var(--font-medium);text-align:left;display:flex;align-items:center;gap:var(--size-2-2);transition:all var(--anim-duration-fast) ease}.quick-action-btn:hover:not(:disabled){background:var(--interactive-hover);transform:translateY(-1px);box-shadow:var(--shadow-s)}.quick-action-btn:disabled{opacity:.5;cursor:not-allowed;background:var(--background-modifier-border);color:var(--text-faint)}@media (max-width: 768px){.quick-actions{grid-template-columns:1fr}}.status-dashboard-loading{display:flex;align-items:center;justify-content:center;height:100%;font-size:var(--font-ui-medium);color:var(--text-muted)}.status-dashboard-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.status-dashboard-content::-webkit-scrollbar{width:var(--scrollbar-width)}.status-dashboard-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.status-dashboard-content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-view-container{height:100%;overflow:hidden}.grouped-status-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.grouped-status-title{margin:0 0 var(--size-4-2) 0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.grouped-status-filters{display:flex;flex-direction:column;gap:var(--size-4-2)}.grouped-status-note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-medium)}.grouped-status-note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-content{flex:1;overflow-y:auto;padding:var(--size-4-2)}.grouped-status-tag-section{margin-bottom:var(--size-4-3)}.grouped-status-tag-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);cursor:pointer;transition:all var(--anim-duration-fast) ease;margin-bottom:var(--size-4-2)}.grouped-status-tag-header:hover{background:var(--background-modifier-hover)}.grouped-status-tag-content{padding-left:var(--size-4-2)}.grouped-status-group{margin-bottom:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;box-shadow:0 1px 3px #0000001a;transition:box-shadow var(--anim-duration-fast) ease}.grouped-status-group:hover{box-shadow:0 2px 8px #00000026}.grouped-status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;position:relative}.grouped-status-group__header:hover{background:var(--background-modifier-hover)}.grouped-status-group__header:focus{outline:2px solid var(--color-accent);outline-offset:-2px}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2);min-width:0;flex:1}.grouped-status-group__template-badge{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium)}.grouped-status-group__info{display:flex;align-items:center;gap:var(--size-2-2);margin-left:auto}.grouped-status-files{background:var(--background-secondary);border-top:1px solid var(--background-modifier-border)}.grouped-status-files-list{max-height:300px;overflow-y:auto}.grouped-status-file-item{padding:var(--size-2-3) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;border-bottom:1px solid var(--background-modifier-border-hover)}.grouped-status-file-item:hover{background:var(--background-modifier-hover)}.grouped-status-file-item:last-child{border-bottom:none}.grouped-status-file-name{font-weight:var(--font-medium);color:var(--text-normal);margin-bottom:2px}.grouped-status-file-path{font-size:var(--font-ui-small);color:var(--text-muted);opacity:.8}.grouped-status-load-more{display:flex;justify-content:center;padding:var(--size-4-2);border-top:1px solid var(--background-modifier-border)}.grouped-status-load-btn{padding:var(--size-2-2) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-small);font-weight:var(--font-medium);transition:all var(--anim-duration-fast) ease}.grouped-status-load-btn:hover{background:var(--interactive-hover);transform:translateY(-1px)}.grouped-status-loading,.grouped-status-empty{display:flex;align-items:center;justify-content:center;padding:var(--size-4-6);color:var(--text-muted);font-size:var(--font-ui-medium)}.grouped-status-view-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.grouped-status-content::-webkit-scrollbar,.grouped-status-files-list::-webkit-scrollbar{width:var(--scrollbar-width)}.grouped-status-content::-webkit-scrollbar-thumb,.grouped-status-files-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.grouped-status-content::-webkit-scrollbar-thumb:hover,.grouped-status-files-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-filters__template{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__template-select{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);cursor:pointer}.grouped-status-filters__template-select:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-filters__note{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.grouped-status-filters__note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2)}.grouped-status-group__template-badge{background:var(--background-modifier-border);color:var(--text-muted);padding:var(--size-2-1) var(--size-2-2);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);text-transform:capitalize;white-space:nowrap}.custom-icon{display:inline-flex}.custom-icon__absolute-right{position:absolute;right:0}.note-status-colored-block{position:relative;border-radius:var(--radius-s);z-index:0}.note-status-colored-block:before{content:"";position:absolute;inset:0;border-radius:inherit;background-color:var(--note-status-block-color, transparent);opacity:.18;pointer-events:none;z-index:-1;transition:background-color var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease}.note-status-border-left{position:relative}.note-status-border-left:after{content:"";position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:var(--radius-s);background-color:var(--note-status-border-color, transparent);opacity:.35;pointer-events:none}.note-status-underline{text-decoration-line:underline;text-decoration-thickness:2px;text-decoration-color:var(--note-status-underline-color, currentColor);text-underline-offset:3px}.note-status-dot-badge{width:6px;height:6px;border-radius:50%;margin-left:var(--size-2-1);display:inline-flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px var(--background-modifier-border);flex-shrink:0}.status-wrapper{position:relative;display:inline-block}.status-minimal{display:inline-flex;align-items:center;gap:2px;margin-left:var(--size-2-2);padding:2px;border-radius:var(--radius-s);cursor:pointer;opacity:.7;transition:all var(--anim-duration-fast) ease}.status-minimal:hover{opacity:1;background:var(--background-modifier-hover);transform:scale(1.05)}.status-minimal--compact{margin-left:0;padding:0;background:transparent;gap:var(--size-2-1)}.status-minimal--compact .status-minimal__icon{font-size:var(--font-ui-medium)}.status-minimal[data-status-color] .status-minimal__count{background:var(--interactive-accent)}.status-minimal__icon{font-size:11px;line-height:1;display:inline-flex;align-items:center;justify-content:center;filter:grayscale(.2);transition:filter var(--anim-duration-fast) ease}.status-minimal:hover .status-minimal__icon{filter:grayscale(0)}.status-minimal__count{min-width:14px;height:14px;padding:0 3px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);border-radius:var(--radius-m);display:flex;align-items:center;justify-content:center}.status-info-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:var(--layer-popover);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);box-shadow:var(--shadow-l);min-width:280px;max-width:400px;overflow:hidden;pointer-events:none}.status-popup-header{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);font-weight:var(--font-semibold);font-size:var(--font-ui-small)}.status-popup-content{padding:var(--size-4-2)}.status-popup-empty{padding:var(--size-4-4);text-align:center;color:var(--text-muted);font-style:italic}.status-tag-grid{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-tag-card{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-2);background:var(--background-primary-alt);box-shadow:var(--shadow-xs)}.status-tag-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--size-2-2)}.status-tag-card__title{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-tag-card__label{font-weight:var(--font-semibold);text-transform:none}.status-tag-card__badge{font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 6px;border-radius:var(--radius-s);width:fit-content}.status-tag-card__count{font-size:var(--font-ui-small);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 10px;border-radius:var(--radius-s);font-weight:var(--font-medium)}.status-tag-card__statuses{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.status-group{margin-bottom:var(--size-4-2)}.status-group:last-child{margin-bottom:0}.status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-2-3);background:var(--background-secondary-alt);border-radius:var(--radius-s);margin-bottom:var(--size-2-2);border:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.status-group__header:hover{background:var(--background-modifier-hover)}.status-group__name{text-transform:capitalize;font-weight:var(--font-medium);font-size:var(--font-ui-smaller);color:var(--text-normal)}.status-group__count{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium);min-width:20px;justify-content:center}.status-group__items{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--size-2-2);padding:0 var(--size-2-1)}.status-item{display:flex;flex-direction:column;gap:var(--size-2-1);padding:var(--size-2-2);background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.status-description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.group-label-container{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-small);font-weight:var(--font-semibold);text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);transition:color var(--anim-duration-fast) ease}.group-label-container--highlighted{color:var(--text-normal)}.group-label-container svg{width:16px;height:16px;opacity:.8}.collapsible-counter-container{padding:var(--size-2-1) var(--size-2-3);border-radius:var(--radius-s);background:var(--background-modifier-border);border:1px solid var(--background-modifier-border-hover);color:var(--text-muted);font-weight:var(--font-medium);font-size:var(--font-ui-smaller);cursor:pointer;transition:all var(--anim-duration-fast) ease;min-width:28px;text-align:center}.collapsible-counter-container:hover{background:var(--background-modifier-border-hover);color:var(--text-normal)}.note-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-2-3);background:var(--interactive-accent);color:var(--text-on-accent);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);cursor:default;transition:transform var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-chip--clickable{cursor:pointer}.note-status-chip--clickable:hover{opacity:.92;transform:translateY(-1px);box-shadow:var(--shadow-s)}.note-status-chip--removing{opacity:.5;transform:scale(.95)}.note-status-chip__icon{font-size:1em;display:inline-flex}.note-status-chip__text{font-weight:var(--font-medium)}.note-status-chip__remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:rgba(255,255,255,.2);margin-left:var(--size-2-1);cursor:pointer;border:none;color:inherit;padding:0;font:inherit;line-height:1}.note-status-chip__remove:hover{background:rgba(255,255,255,.3)}.note-status-chip__remove:focus-visible{outline:2px solid var(--background-modifier-border)}.status-badge-container{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-primary);position:relative;overflow:hidden;isolation:isolate}.status-badge-container:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:transparent;opacity:.85;display:none}.status-badge-container--clickable{cursor:pointer;transition:background var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease,filter var(--anim-duration-fast) ease}.status-badge-container--clickable:not(.status-badge--filled):hover{background:var(--background-modifier-hover);box-shadow:var(--shadow-s)}.status-badge--accent{padding-left:calc(var(--size-4-1) + 4px)}.status-badge--accent:before{display:block;background:var(--status-accent, var(--interactive-accent))}.status-badge--filled{background:var(--status-accent, var(--interactive-accent));border-color:var(--status-accent, var(--interactive-accent));color:var(--text-on-accent);padding-left:var(--size-4-2)}.status-badge--filled .status-badge-icon,.status-badge--filled .status-badge-text{color:inherit}.status-badge--filled.status-badge-container--clickable:hover{filter:brightness(1.05);background:var(--status-accent, var(--interactive-accent));box-shadow:var(--shadow-s)}.status-badge--dot{border:none;background:transparent;padding:var(--size-2-1) var(--size-2-2);gap:var(--size-2-1)}.status-badge--dot:before{display:none}.status-badge--dot .status-badge-item{gap:var(--size-2-2)}.status-badge-dot{width:8px;height:8px;border-radius:50%;background:var(--status-accent, var(--interactive-accent));box-shadow:0 0 0 1px var(--background-primary)}.status-badge--empty{min-width:32px;justify-content:center}.status-badge-item{display:flex;align-items:center;gap:var(--size-2-1);position:relative;z-index:1}.status-badge-icon{font-size:var(--font-ui-small)}.status-badge-text{font-weight:var(--font-medium);font-size:var(--font-ui-small)}.status-badge-empty{display:inline-block;min-width:var(--size-3-2);height:var(--size-3-2)}.template-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);font-size:var(--font-ui-smaller);cursor:default;transition:background var(--anim-duration-fast) ease}.template-status-chip[data-clickable=true]{cursor:pointer}.template-status-chip[data-clickable=true]:hover{background:var(--background-modifier-hover)}.template-status-color-dot{width:8px;height:8px;border-radius:50%;background-color:var(--dot-color)}.template-status-chip__label{display:inline-flex;align-items:center;gap:var(--size-2-1)}.template-status-chip__icon{display:inline-flex;font-size:1em}.lucide-icon-picker{position:relative;display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-picker__text-input{max-width:240px}.lucide-icon-picker__row{display:flex;gap:var(--size-2-1);align-items:center}.lucide-icon-picker__modal-button{display:inline-flex;align-items:center;gap:var(--size-2-1);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-2-1) var(--size-4-1);background:var(--background-secondary);cursor:pointer;transition:border var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease;min-width:220px;justify-content:space-between}.lucide-icon-picker__modal-button:hover{border-color:var(--interactive-accent)}.lucide-icon-picker__preview{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px}.lucide-icon-picker__label{flex:1;text-align:left;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-picker__clear-trigger{background:transparent;border:none;color:var(--text-muted);font-size:var(--font-ui-smaller);cursor:pointer;padding:var(--size-2-1) var(--size-2-2)}.lucide-icon-picker__clear-trigger:hover{color:var(--text-normal);text-decoration:underline}.lucide-icon-modal-wrapper{padding:var(--size-4-2)}.lucide-icon-modal{display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-modal__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-2-2)}.lucide-icon-modal__count{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__close{display:inline-flex;align-items:center;justify-content:center}.lucide-icon-modal__search{width:100%}.lucide-icon-modal__toggle{display:inline-flex;align-items:center;gap:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--size-2-1);max-height:360px;overflow-y:auto;padding-right:var(--size-2-1)}.lucide-icon-modal__list--icons-only{grid-template-columns:repeat(auto-fill,minmax(70px,1fr))}.lucide-icon-modal__option{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-secondary);cursor:pointer;font-size:var(--font-ui-smaller);justify-content:flex-start}.lucide-icon-modal__option:hover{background:var(--background-modifier-hover)}.lucide-icon-modal__option--selected{border-color:var(--interactive-accent);background:var(--background-modifier-success)}.lucide-icon-modal__option--compact{justify-content:center}.lucide-icon-modal__option--compact span{display:none}.lucide-icon-modal__empty{grid-column:1 / -1;text-align:center;font-size:var(--font-ui-smaller);color:var(--text-muted);padding:var(--size-4-2)}.icon-selection-field{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.icon-selection-field__column{flex:1;min-width:220px}.icon-selection-field__label{display:block;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.icon-selection-field__emoji-input{max-width:260px}.icon-selection-field__hint{margin-top:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1}.obsidian-icon{display:inline-flex;align-items:center;justify-content:center}.obsidian-icon svg{width:100%;height:100%}.note-status-editor-toolbar-badge{display:inline-flex;align-items:center;margin:0 var(--size-2-1)}.note-status-editor-toolbar-badge--hidden{display:none}.editor-toolbar-button__icon{font-size:16px;display:flex;align-items:center;justify-content:center;color:var(--text-muted);width:18px;height:18px;line-height:1}.editor-toolbar-button__icon--has-status{color:var(--interactive-accent)}.editor-toolbar-button__icon-container{position:relative;display:flex;align-items:center;justify-content:center}.editor-toolbar-button__counter{position:absolute;top:-4px;right:-6px;min-width:12px;height:12px;padding:0 2px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:8px;font-weight:var(--font-semibold);border-radius:6px;display:flex;align-items:center;justify-content:center;line-height:1;border:1px solid var(--background-primary)}.status-mapping-list{display:flex;flex-direction:column;gap:var(--size-4-2);width:100%}.status-mapping-row{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);background:var(--background-primary-alt);display:flex;flex-direction:column;gap:var(--size-2-2)}.status-mapping-empty{padding:var(--size-4-3);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m)}.status-mapping-row__fields{display:flex;flex-wrap:wrap;gap:var(--size-4-2);width:100%}.status-mapping-field{display:flex;flex-direction:column;gap:var(--size-2-1);flex:1 1 180px}.status-mapping-field label{font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-mapping-field small{color:var(--text-faint)}.status-mapping-field select,.status-mapping-field input{width:100%}.status-mapping-row__actions{display:flex;justify-content:flex-end}.status-mapping-remove-btn{background:var(--background-modifier-error);color:var(--text-on-accent);border:none;border-radius:var(--radius-s);padding:4px 10px;cursor:pointer}.status-mapping-remove-btn:hover{opacity:.9}.status-mapping-add-btn{align-self:flex-start;padding:var(--size-2-2) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--interactive-normal);cursor:pointer}.status-mapping-add-btn:hover{background:var(--interactive-hover)}.note-status-input{width:100%;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);padding:var(--size-2-2) var(--size-2-3);transition:border-color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.note-status-input--search{padding-left:var(--size-4-1)}.note-status-input--color{width:36px;height:32px;padding:var(--size-2-1);cursor:pointer}.note-status-input--color::-webkit-color-swatch{border:none;border-radius:var(--radius-s)}.note-status-input--color::-webkit-color-swatch-wrapper{padding:0}.note-status-input:disabled{opacity:.65;cursor:not-allowed}.note-status-options{max-height:300px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);box-shadow:var(--shadow-xs)}.note-status-options::-webkit-scrollbar{width:var(--scrollbar-width)}.note-status-options::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.note-status-option{align-items:stretch}.note-status-option .selectable-list-item-icon{display:flex;align-items:center;justify-content:center}.note-status-option__icon-wrapper{display:inline-flex;align-items:center;justify-content:center;padding:var(--size-2-1);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border);background:var(--background-secondary);min-width:36px;transition:border-color var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease}.note-status-option:hover .note-status-option__icon-wrapper,.note-status-option[data-selected=true] .note-status-option__icon-wrapper{border-color:var(--interactive-accent);background:var(--background-modifier-hover)}.note-status-option__text{display:flex;flex-direction:column;gap:2px}.note-status-option__name{font-weight:var(--font-medium);color:var(--text-normal)}.note-status-option__description{font-size:var(--font-ui-smaller);color:var(--text-muted)}.note-status-chips{display:flex;flex-wrap:wrap;gap:var(--size-2-2);min-height:32px;align-items:center;padding:var(--size-2-1) 0}.status-selector-empty{padding:var(--size-4-2);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.selectable-list-item{display:flex;align-items:center;gap:var(--size-4-2);padding:var(--size-2-3) var(--size-4-2);cursor:pointer;border-bottom:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.selectable-list-item:hover{background:var(--background-modifier-hover)}.selectable-list-item[data-focused=true]{outline:2px solid var(--interactive-accent);outline-offset:-2px}.selectable-list-item[data-selected=true]{background:var(--background-modifier-hover)}.selectable-list-item-icon{font-size:16px;min-width:20px}.selectable-list-item-content{flex:1;font-size:var(--font-ui-small)}.selectable-list-item-check{color:var(--interactive-accent);display:flex;align-items:center}.status-selector-group{display:flex;flex-direction:column;gap:var(--size-4-2);outline:none}.status-selector-group:focus-visible{outline:2px solid var(--background-modifier-border-hover);outline-offset:4px}.note-status-template-tabs{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-secondary);margin-bottom:var(--size-2-2)}.note-status-template-tab{border:none;background:transparent;color:var(--text-muted);padding:var(--size-2-2) var(--size-3-1);border-radius:var(--radius-s);cursor:pointer;transition:background var(--anim-duration-fast) ease,color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-template-tab:not(.is-active):hover{background:var(--background-modifier-hover);color:var(--text-normal)}.note-status-template-tab.is-active{background:var(--interactive-accent);color:var(--text-on-accent);box-shadow:0 0 0 1px var(--background-modifier-border)}.note-status-template-tab:focus-visible{outline:2px solid var(--background-modifier-border)} diff --git a/styles/components/template-settings.css b/styles/components/template-settings.css index 06e4f98..b26a7fb 100644 --- a/styles/components/template-settings.css +++ b/styles/components/template-settings.css @@ -349,6 +349,112 @@ text-decoration: none !important; } +/* Marketplace Browse Modal */ +.marketplace-header-content { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + gap: var(--size-4-4); +} + +.marketplace-header-content h2 { + margin: 0; + white-space: nowrap; +} + +.marketplace-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: var(--size-4-4); + padding: var(--size-2-2); +} + +.marketplace-card { + display: flex; + flex-direction: column; + background: var(--background-primary-alt); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); + padding: var(--size-4-4); + transition: all var(--anim-duration-fast) ease; +} + +.marketplace-card:hover { + border-color: var(--interactive-accent); + box-shadow: var(--shadow-s); +} + +.marketplace-card-header { + margin-bottom: var(--size-2-2); +} + +.marketplace-card-title { + font-weight: var(--font-bold); + font-size: var(--font-ui-medium); + color: var(--text-normal); +} + +.marketplace-card-author { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + font-style: italic; +} + +.marketplace-card-description { + font-size: var(--font-ui-small); + color: var(--text-muted); + margin-bottom: var(--size-4-2); + flex-grow: 1; +} + +.marketplace-card-statuses { + display: flex; + flex-wrap: wrap; + gap: var(--size-2-1); + margin-bottom: var(--size-4-4); +} + +.marketplace-card-actions { + margin-top: auto; +} + +.marketplace-install-btn { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + gap: var(--size-2-2); +} + +.marketplace-install-btn.installed { + background: var(--background-modifier-success-accent) !important; + color: var(--text-on-accent) !important; + opacity: 0.8; + cursor: default; +} + +.marketplace-empty { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: var(--size-4-12); + color: var(--text-muted); + text-align: center; +} + +.marketplace-empty p { + margin-top: var(--size-4-2); + font-size: var(--font-ui-large); +} + +.marketplace-browse-btn { + display: flex; + align-items: center; + gap: var(--size-2-2); +} + /* Responsive Design */ @media (max-width: 768px) { .template-settings-actions { From 74262f9b869f0cbd99eb06fc1505d8a730662a9d Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 16:11:26 +0100 Subject: [PATCH 10/23] fix: resolve build errors in TemplateSettings and MarketplaceBrowseModal --- components/SettingsUI/MarketplaceBrowseModal.tsx | 2 +- components/SettingsUI/TemplateSettings.tsx | 1 + styles.css | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/components/SettingsUI/MarketplaceBrowseModal.tsx b/components/SettingsUI/MarketplaceBrowseModal.tsx index d17eedf..76d6b54 100644 --- a/components/SettingsUI/MarketplaceBrowseModal.tsx +++ b/components/SettingsUI/MarketplaceBrowseModal.tsx @@ -33,7 +33,7 @@ export const MarketplaceBrowseModal: React.FC = ({

Template Marketplace

diff --git a/components/SettingsUI/TemplateSettings.tsx b/components/SettingsUI/TemplateSettings.tsx index fae2db4..f3eab7a 100644 --- a/components/SettingsUI/TemplateSettings.tsx +++ b/components/SettingsUI/TemplateSettings.tsx @@ -4,6 +4,7 @@ import { TemplateItem } from "./TemplateItem"; import { TemplateEditorModal } from "./TemplateEditorModal"; import { MarketplaceShareModal } from "./MarketplaceShareModal"; import { MarketplaceBrowseModal } from "./MarketplaceBrowseModal"; +import { ObsidianIcon } from "../atoms/ObsidianIcon"; import { generateTemplateId, isTemplateNameUnique, diff --git a/styles.css b/styles.css index 81935d6..dad62ab 100644 --- a/styles.css +++ b/styles.css @@ -1 +1 @@ -.status-bar-no-status{display:inline-flex;align-items:center;gap:var(--size-2-2);color:var(--status-empty-color, var(--text-muted))}.status-bar-no-status:hover{color:var(--text-normal)}.status-bar-no-status__icon{opacity:.9}.status-bar-no-status__label{font-weight:var(--font-medium)}.status-bar-enable-button{cursor:pointer;opacity:var(--icon-opacity);transition:opacity var(--anim-duration-fast) ease}.status-bar-enable-button:hover{opacity:var(--icon-opacity-hover)}.status-bar-group-row{display:flex;align-items:center;gap:var(--size-4-2)}.status-bar-group-container{display:flex;gap:var(--size-2-1);flex-wrap:wrap;align-items:center}.status-bar-status-item{display:inline-flex;align-items:center}.status-bar-status-item--animated{animation:status-slide-in var(--anim-duration-fast) ease-out var(--status-anim-delay, 0s) both}@keyframes status-slide-in{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.note-status-settings__intro{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-2)}.note-status-settings__description{margin:0;color:var(--text-normal);line-height:1.5}.note-status-settings__support{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.note-status-settings__badge{padding:0;border:none;background:transparent}.note-status-settings__badge img{display:block;height:32px}.note-status-settings__badge:hover{background:transparent;border-color:transparent;transform:translateY(-1px)}.note-status-settings__badge:focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px;border-radius:var(--radius-s)}.note-status-settings__support a:not(.note-status-settings__badge){display:inline-flex;align-items:center;justify-content:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);text-decoration:none;color:var(--text-normal);background:var(--background-primary);transition:background var(--anim-duration-fast) ease,border-color var(--anim-duration-fast) ease,transform var(--anim-duration-fast) ease}.note-status-settings__support a:not(.note-status-settings__badge):hover{background:var(--background-modifier-hover);border-color:var(--interactive-accent);transform:translateY(-1px)}.note-status-settings__support a:not(.note-status-settings__badge):focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px}.note-status-section{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);margin-bottom:var(--size-4-3);overflow:hidden}.note-status-section__header{width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-4-1);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:none;color:inherit;cursor:pointer;text-align:left}.note-status-section__header:hover{background:var(--background-modifier-hover)}.note-status-section__title-block{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--size-2-1)}.note-status-section__title-block .setting-item-name,.note-status-section__title-block .setting-item-description{white-space:normal;line-height:1.4}.note-status-section__title-block .setting-item-description{color:var(--text-muted)}.note-status-section__chevron{font-size:var(--font-ui-medium);color:var(--text-muted)}.note-status-section__content{padding:var(--size-4-3);border-top:1px solid var(--background-modifier-border)}.note-status-settings__stack{display:flex;flex-direction:column;gap:var(--size-4-3)}.setting-item-full{width:100%}.setting-item-vertical{flex-direction:column;align-items:flex-start;gap:var(--size-2-2)}.ui-settings__no-status-input{max-width:150px}.custom-status-item{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-2);transition:all var(--anim-duration-fast) ease}.custom-status-item:hover{border-color:var(--interactive-hover)}.custom-status-item__row{display:flex;align-items:end;gap:var(--size-4-2);margin-bottom:var(--size-4-2)}.custom-status-item__row--icons{align-items:stretch;flex-wrap:wrap}.custom-status-item__field{display:flex;flex-direction:column;gap:var(--size-2-1)}.custom-status-item__field--icon,.custom-status-item__field--lucide{flex:1;min-width:240px}.custom-status-item__field--name,.custom-status-item__field--description{flex:2;min-width:120px}.custom-status-item__field--color{flex:0 0 auto}.custom-status-item__field--reorder,.custom-status-item__field--actions{flex:0 0 auto;padding-top:var(--size-4-1)}.custom-status-item__label{font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.custom-status-item__label--required{color:var(--text-error)}.custom-status-item__input--icon{width:100%!important;text-align:left;font-size:1em}.custom-status-item__hint{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.custom-status-item__input--name{font-weight:var(--font-medium)}.custom-status-item__input--name.custom-status-item__input--invalid{border-color:var(--text-error)!important;background:var(--background-modifier-error)!important}.custom-status-item__input--description{color:var(--text-muted)}.custom-status-item__input--color{width:40px!important;height:32px!important;border-radius:var(--radius-s);cursor:pointer;border:2px solid var(--background-modifier-border)!important}.custom-status-item__input--color:hover{border-color:var(--interactive-hover)!important}.custom-status-item__remove-btn{width:32px;height:32px;border-radius:var(--radius-s);background:var(--background-modifier-error);color:var(--text-on-accent);border:none;cursor:pointer;font-size:18px;font-weight:700;transition:all var(--anim-duration-fast) ease}.custom-status-item__remove-btn:hover{background:var(--text-error);transform:scale(1.05)}.custom-status-item__reorder-buttons{display:flex;flex-direction:column;gap:2px}.custom-status-item__reorder-btn{width:24px;height:24px;border-radius:var(--radius-s);background:var(--background-modifier-border);color:var(--text-normal);border:none;cursor:pointer;font-size:12px;font-weight:700;transition:all var(--anim-duration-fast) ease;display:flex;align-items:center;justify-content:center;line-height:1}.custom-status-item__reorder-btn:hover:not(:disabled){background:var(--interactive-hover);transform:scale(1.05)}.custom-status-item__reorder-btn:disabled{opacity:.5;cursor:not-allowed}.custom-status-item__preview{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);background:var(--background-primary-alt);border-radius:var(--radius-s);border-left:3px solid var(--background-modifier-border);font-size:var(--font-ui-small)}.custom-status-item__preview-icon{font-size:1.1em;min-width:20px;text-align:center}.custom-status-item__preview-text{font-weight:var(--font-medium)}.custom-status-item__preview-desc{color:var(--text-muted);font-style:italic}.custom-status-item__preview-desc:before{content:"\2014 "}.custom-status-item__error{color:var(--text-error);font-size:var(--font-ui-smaller);margin-top:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-error);border-radius:var(--radius-s);border-left:3px solid var(--text-error)}.custom-status-list__empty{text-align:center;padding:var(--size-4-4) var(--size-4-2);color:var(--text-muted);font-style:italic;border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.custom-status-list__empty p{margin:0}.status-group{margin-bottom:var(--size-4-4);padding:var(--size-4-3);background:var(--background-primary-alt);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.status-group__header{margin-bottom:var(--size-4-2);padding-bottom:var(--size-2-2);border-bottom:1px solid var(--background-modifier-border)}.status-group__title{font-weight:var(--font-semibold);color:var(--text-normal);font-size:var(--font-ui-medium)}.status-group__description{font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);line-height:var(--line-height-tight)}.status-group__items{display:flex;flex-direction:column;gap:var(--size-2-2)}.status-selector{display:flex;align-items:center;justify-content:space-between;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);cursor:pointer;transition:all var(--anim-duration-fast) ease;position:relative}.status-selector:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover)}.status-selector--selected{background:var(--background-modifier-success);border-color:var(--interactive-success)}.status-selector--selected:hover{background:var(--background-modifier-success-hover)}.status-selector__content{flex:1;min-width:0}.status-selector__status{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.status-selector__icon{font-size:var(--font-ui-medium);width:var(--size-4-3);text-align:center;flex-shrink:0}.status-selector__name{font-weight:var(--font-medium);color:var(--text-normal)}.status-selector__description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:var(--line-height-tight)}.status-selector__checkbox{margin-left:var(--size-4-2);pointer-events:none;flex-shrink:0}.quick-commands-container{margin-top:var(--size-4-2)}.template-settings-actions{display:flex;justify-content:end;gap:var(--size-4-2);padding-bottom:var(--size-4-2)}.template-create-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);font-weight:var(--font-medium);font-size:var(--font-ui-medium)}.template-reset-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);background:var(--interactive-normal);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.template-reset-btn:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-section{margin-bottom:var(--size-4-6)}.template-section-title{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-large);font-weight:var(--font-semibold);color:var(--text-normal);margin-bottom:var(--size-4-3);padding-bottom:var(--size-2-2);border-bottom:2px solid var(--background-modifier-border)}.template-section-title .lucide{opacity:.8;color:var(--text-muted)}.template-list{display:flex;flex-direction:column;gap:var(--size-4-2)}.template-item{position:relative;display:flex;align-items:stretch;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt);transition:all var(--anim-duration-fast) ease;overflow:hidden}.template-item:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover);box-shadow:0 2px 8px var(--shadow-color)}.template-item.enabled{background:var(--background-modifier-hover);border-color:var(--interactive-accent);box-shadow:0 0 0 1px var(--interactive-accent)}.template-item.enabled:hover{box-shadow:0 2px 8px var(--shadow-color),0 0 0 1px var(--interactive-accent)}.template-item-content{flex:1;border:none!important;border-radius:0!important;background:transparent!important}.template-item-main{flex:1}.template-header{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.template-custom-badge{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);border-radius:var(--radius-s);text-transform:uppercase;letter-spacing:.05em}.template-item-actions{display:flex;flex-direction:column;padding:var(--size-4-2);gap:var(--size-2-1);background:var(--background-modifier-border);border-left:1px solid var(--background-modifier-border-hover);min-width:44px;align-items:center;justify-content:center}.template-item-actions button,.template-item-actions a{display:flex;align-items:center;justify-content:center;padding:var(--size-4-1);border-radius:var(--radius-s);color:var(--text-muted);background:transparent;border:none;cursor:pointer;transition:all var(--anim-duration-fast) ease;text-decoration:none!important}.template-item-actions button:hover,.template-item-actions a:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-marketplace-btn{color:var(--text-accent)!important}.template-editor-modal{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-l);box-shadow:var(--shadow-l);max-width:800px;width:100%}.template-editor-modal__header{padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);border-radius:var(--radius-l) var(--radius-l) 0 0}.template-editor-modal__header h2{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold);color:var(--text-normal)}.template-editor-modal__content{padding:var(--size-4-6);max-height:70vh;overflow-y:auto}.template-editor-statuses{display:flex;flex-direction:column;gap:var(--size-4-3)}.template-editor-add-status{display:flex;align-items:center;gap:var(--size-2-2);align-self:flex-start;margin-top:var(--size-4-2)}.template-editor-add-status .lucide{width:16px;height:16px}.template-editor-modal__actions{display:flex;gap:var(--size-4-2);justify-content:flex-end;padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-top:1px solid var(--background-modifier-border);border-radius:0 0 var(--radius-l) var(--radius-l)}.template-editor-modal__actions button{padding:var(--size-2-3) var(--size-4-4);border-radius:var(--radius-m);font-size:var(--font-ui-medium);font-weight:var(--font-medium);cursor:pointer;transition:all var(--anim-duration-fast) ease;border:1px solid var(--background-modifier-border)}.template-editor-modal__actions button:not(.mod-cta){background:var(--interactive-normal);color:var(--text-normal)}.template-editor-modal__actions button:not(.mod-cta):hover{background:var(--interactive-hover)}.template-editor-modal__actions .mod-cta:disabled{opacity:.5;cursor:not-allowed;transform:none}.template-editor-modal__actions .mod-cta:disabled:hover{transform:none}.template-author-info{display:block;font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);font-style:italic}.template-author-info a{color:var(--text-accent);text-decoration:none}.template-author-info a:hover{text-decoration:underline}.marketplace-steps{padding-left:var(--size-4-4);margin-bottom:var(--size-4-4);color:var(--text-normal)}.marketplace-steps li{margin-bottom:var(--size-2-2)}.marketplace-steps li a{color:var(--text-accent);word-break:break-all}.marketplace-note{margin:var(--size-4-4) 0;padding:var(--size-4-2);background:var(--background-primary-alt);border-left:4px solid var(--interactive-accent);border-radius:var(--radius-s);font-size:var(--font-ui-small)}.marketplace-json-preview{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;margin-top:var(--size-4-2)}.json-preview-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-4-2);background:var(--background-primary-alt);border-bottom:1px solid var(--background-modifier-border);font-family:var(--font-monospace);font-size:var(--font-ui-smaller);color:var(--text-muted)}.copy-btn{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3)!important;font-size:var(--font-ui-smaller)!important;background:var(--interactive-accent)!important;color:var(--text-on-accent)!important;border:none!important}.copy-btn.success{background:var(--text-success)!important}.marketplace-json-preview pre{margin:0;padding:var(--size-4-2);max-height:300px;overflow-y:auto;font-family:var(--font-monospace);font-size:var(--font-ui-smaller);white-space:pre-wrap;word-break:break-all}.marketplace-github-link{display:flex;align-items:center;gap:var(--size-2-2);text-decoration:none!important}@media (max-width: 768px){.template-settings-actions,.template-item{flex-direction:column}.template-item-actions{flex-direction:row;border-left:none;border-top:1px solid var(--background-modifier-border-hover);min-width:unset;padding:var(--size-2-3) var(--size-4-2)}.template-editor-modal{margin:var(--size-4-2);max-width:calc(100% - var(--size-4-4))}}.template-editor-modal__content::-webkit-scrollbar{width:var(--scrollbar-width)}.template-editor-modal__content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.template-editor-modal__content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.status-dashboard-view-container{height:100%;overflow:hidden}.status-dashboard{background:var(--background-primary)}.status-dashboard-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-3) var(--size-4-4);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-title{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold)}.status-dashboard-refresh{padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.status-dashboard-refresh:hover{background:var(--interactive-hover);transform:rotate(90deg)}.status-dashboard-content{flex:1;overflow-y:auto;padding:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-4)}.status-dashboard-section{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden}.status-dashboard-section-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-section-header h3{margin:0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.status-dashboard-current-note{padding:var(--size-4-3)}.current-note-info{margin-bottom:var(--size-4-3);padding-bottom:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border)}.current-note-name{font-size:var(--font-ui-large);font-weight:var(--font-semibold);margin-bottom:var(--size-2-1)}.current-note-path{font-size:var(--font-ui-small);color:var(--text-muted);font-family:var(--font-monospace);margin-bottom:var(--size-2-1)}.current-note-modified{font-size:var(--font-ui-smaller);color:var(--text-faint);font-style:italic}.current-note-statuses{display:flex;flex-direction:column;gap:var(--size-4-2)}.current-note-tag-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.current-note-status-list{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.current-note-no-status{font-size:var(--font-ui-small);color:var(--text-muted);font-style:italic;padding:var(--size-2-1) var(--size-2-3);background:var(--background-modifier-border);border-radius:var(--radius-s)}.current-note-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.vault-overview{padding:var(--size-4-3)}.vault-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--size-4-2)}.vault-stat-card{text-align:center;padding:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);transition:all var(--anim-duration-fast) ease}.vault-stat-card:hover{background:var(--background-modifier-hover);transform:translateY(-2px);box-shadow:var(--shadow-s)}.vault-stat-number{font-size:var(--font-ui-largest);font-weight:var(--font-bold);color:var(--interactive-accent);margin-bottom:var(--size-2-1)}.vault-stat-label{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium);text-transform:uppercase;letter-spacing:.05em}.status-distribution{padding:var(--size-4-3)}.status-chart{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-chart-item{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-chart-item--clickable{cursor:pointer;transition:all var(--anim-duration-fast) ease;padding:var(--size-2-2);border-radius:var(--radius-s)}.status-chart-item--clickable:hover{background:var(--background-modifier-hover);transform:translateY(-1px)}.status-chart-info{display:flex;align-items:center;gap:var(--size-2-3)}.status-chart-count{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium)}.status-chart-bar{height:8px;background:var(--background-modifier-border);border-radius:var(--radius-s);overflow:hidden}.status-chart-fill{height:100%;transition:width var(--anim-duration-moderate) ease}.status-distribution-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.quick-actions{padding:var(--size-4-3);display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--size-4-3)}.quick-actions-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.quick-actions-group-title{font-size:var(--font-ui-small);font-weight:var(--font-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding-bottom:var(--size-2-1);border-bottom:1px solid var(--background-modifier-border);margin-bottom:var(--size-2-1)}.quick-action-btn{width:100%;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);font-weight:var(--font-medium);text-align:left;display:flex;align-items:center;gap:var(--size-2-2);transition:all var(--anim-duration-fast) ease}.quick-action-btn:hover:not(:disabled){background:var(--interactive-hover);transform:translateY(-1px);box-shadow:var(--shadow-s)}.quick-action-btn:disabled{opacity:.5;cursor:not-allowed;background:var(--background-modifier-border);color:var(--text-faint)}@media (max-width: 768px){.quick-actions{grid-template-columns:1fr}}.status-dashboard-loading{display:flex;align-items:center;justify-content:center;height:100%;font-size:var(--font-ui-medium);color:var(--text-muted)}.status-dashboard-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.status-dashboard-content::-webkit-scrollbar{width:var(--scrollbar-width)}.status-dashboard-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.status-dashboard-content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-view-container{height:100%;overflow:hidden}.grouped-status-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.grouped-status-title{margin:0 0 var(--size-4-2) 0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.grouped-status-filters{display:flex;flex-direction:column;gap:var(--size-4-2)}.grouped-status-note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-medium)}.grouped-status-note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-content{flex:1;overflow-y:auto;padding:var(--size-4-2)}.grouped-status-tag-section{margin-bottom:var(--size-4-3)}.grouped-status-tag-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);cursor:pointer;transition:all var(--anim-duration-fast) ease;margin-bottom:var(--size-4-2)}.grouped-status-tag-header:hover{background:var(--background-modifier-hover)}.grouped-status-tag-content{padding-left:var(--size-4-2)}.grouped-status-group{margin-bottom:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;box-shadow:0 1px 3px #0000001a;transition:box-shadow var(--anim-duration-fast) ease}.grouped-status-group:hover{box-shadow:0 2px 8px #00000026}.grouped-status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;position:relative}.grouped-status-group__header:hover{background:var(--background-modifier-hover)}.grouped-status-group__header:focus{outline:2px solid var(--color-accent);outline-offset:-2px}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2);min-width:0;flex:1}.grouped-status-group__template-badge{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium)}.grouped-status-group__info{display:flex;align-items:center;gap:var(--size-2-2);margin-left:auto}.grouped-status-files{background:var(--background-secondary);border-top:1px solid var(--background-modifier-border)}.grouped-status-files-list{max-height:300px;overflow-y:auto}.grouped-status-file-item{padding:var(--size-2-3) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;border-bottom:1px solid var(--background-modifier-border-hover)}.grouped-status-file-item:hover{background:var(--background-modifier-hover)}.grouped-status-file-item:last-child{border-bottom:none}.grouped-status-file-name{font-weight:var(--font-medium);color:var(--text-normal);margin-bottom:2px}.grouped-status-file-path{font-size:var(--font-ui-small);color:var(--text-muted);opacity:.8}.grouped-status-load-more{display:flex;justify-content:center;padding:var(--size-4-2);border-top:1px solid var(--background-modifier-border)}.grouped-status-load-btn{padding:var(--size-2-2) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-small);font-weight:var(--font-medium);transition:all var(--anim-duration-fast) ease}.grouped-status-load-btn:hover{background:var(--interactive-hover);transform:translateY(-1px)}.grouped-status-loading,.grouped-status-empty{display:flex;align-items:center;justify-content:center;padding:var(--size-4-6);color:var(--text-muted);font-size:var(--font-ui-medium)}.grouped-status-view-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.grouped-status-content::-webkit-scrollbar,.grouped-status-files-list::-webkit-scrollbar{width:var(--scrollbar-width)}.grouped-status-content::-webkit-scrollbar-thumb,.grouped-status-files-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.grouped-status-content::-webkit-scrollbar-thumb:hover,.grouped-status-files-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-filters__template{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__template-select{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);cursor:pointer}.grouped-status-filters__template-select:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-filters__note{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.grouped-status-filters__note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2)}.grouped-status-group__template-badge{background:var(--background-modifier-border);color:var(--text-muted);padding:var(--size-2-1) var(--size-2-2);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);text-transform:capitalize;white-space:nowrap}.custom-icon{display:inline-flex}.custom-icon__absolute-right{position:absolute;right:0}.note-status-colored-block{position:relative;border-radius:var(--radius-s);z-index:0}.note-status-colored-block:before{content:"";position:absolute;inset:0;border-radius:inherit;background-color:var(--note-status-block-color, transparent);opacity:.18;pointer-events:none;z-index:-1;transition:background-color var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease}.note-status-border-left{position:relative}.note-status-border-left:after{content:"";position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:var(--radius-s);background-color:var(--note-status-border-color, transparent);opacity:.35;pointer-events:none}.note-status-underline{text-decoration-line:underline;text-decoration-thickness:2px;text-decoration-color:var(--note-status-underline-color, currentColor);text-underline-offset:3px}.note-status-dot-badge{width:6px;height:6px;border-radius:50%;margin-left:var(--size-2-1);display:inline-flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px var(--background-modifier-border);flex-shrink:0}.status-wrapper{position:relative;display:inline-block}.status-minimal{display:inline-flex;align-items:center;gap:2px;margin-left:var(--size-2-2);padding:2px;border-radius:var(--radius-s);cursor:pointer;opacity:.7;transition:all var(--anim-duration-fast) ease}.status-minimal:hover{opacity:1;background:var(--background-modifier-hover);transform:scale(1.05)}.status-minimal--compact{margin-left:0;padding:0;background:transparent;gap:var(--size-2-1)}.status-minimal--compact .status-minimal__icon{font-size:var(--font-ui-medium)}.status-minimal[data-status-color] .status-minimal__count{background:var(--interactive-accent)}.status-minimal__icon{font-size:11px;line-height:1;display:inline-flex;align-items:center;justify-content:center;filter:grayscale(.2);transition:filter var(--anim-duration-fast) ease}.status-minimal:hover .status-minimal__icon{filter:grayscale(0)}.status-minimal__count{min-width:14px;height:14px;padding:0 3px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);border-radius:var(--radius-m);display:flex;align-items:center;justify-content:center}.status-info-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:var(--layer-popover);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);box-shadow:var(--shadow-l);min-width:280px;max-width:400px;overflow:hidden;pointer-events:none}.status-popup-header{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);font-weight:var(--font-semibold);font-size:var(--font-ui-small)}.status-popup-content{padding:var(--size-4-2)}.status-popup-empty{padding:var(--size-4-4);text-align:center;color:var(--text-muted);font-style:italic}.status-tag-grid{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-tag-card{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-2);background:var(--background-primary-alt);box-shadow:var(--shadow-xs)}.status-tag-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--size-2-2)}.status-tag-card__title{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-tag-card__label{font-weight:var(--font-semibold);text-transform:none}.status-tag-card__badge{font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 6px;border-radius:var(--radius-s);width:fit-content}.status-tag-card__count{font-size:var(--font-ui-small);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 10px;border-radius:var(--radius-s);font-weight:var(--font-medium)}.status-tag-card__statuses{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.status-group{margin-bottom:var(--size-4-2)}.status-group:last-child{margin-bottom:0}.status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-2-3);background:var(--background-secondary-alt);border-radius:var(--radius-s);margin-bottom:var(--size-2-2);border:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.status-group__header:hover{background:var(--background-modifier-hover)}.status-group__name{text-transform:capitalize;font-weight:var(--font-medium);font-size:var(--font-ui-smaller);color:var(--text-normal)}.status-group__count{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium);min-width:20px;justify-content:center}.status-group__items{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--size-2-2);padding:0 var(--size-2-1)}.status-item{display:flex;flex-direction:column;gap:var(--size-2-1);padding:var(--size-2-2);background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.status-description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.group-label-container{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-small);font-weight:var(--font-semibold);text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);transition:color var(--anim-duration-fast) ease}.group-label-container--highlighted{color:var(--text-normal)}.group-label-container svg{width:16px;height:16px;opacity:.8}.collapsible-counter-container{padding:var(--size-2-1) var(--size-2-3);border-radius:var(--radius-s);background:var(--background-modifier-border);border:1px solid var(--background-modifier-border-hover);color:var(--text-muted);font-weight:var(--font-medium);font-size:var(--font-ui-smaller);cursor:pointer;transition:all var(--anim-duration-fast) ease;min-width:28px;text-align:center}.collapsible-counter-container:hover{background:var(--background-modifier-border-hover);color:var(--text-normal)}.note-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-2-3);background:var(--interactive-accent);color:var(--text-on-accent);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);cursor:default;transition:transform var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-chip--clickable{cursor:pointer}.note-status-chip--clickable:hover{opacity:.92;transform:translateY(-1px);box-shadow:var(--shadow-s)}.note-status-chip--removing{opacity:.5;transform:scale(.95)}.note-status-chip__icon{font-size:1em;display:inline-flex}.note-status-chip__text{font-weight:var(--font-medium)}.note-status-chip__remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:rgba(255,255,255,.2);margin-left:var(--size-2-1);cursor:pointer;border:none;color:inherit;padding:0;font:inherit;line-height:1}.note-status-chip__remove:hover{background:rgba(255,255,255,.3)}.note-status-chip__remove:focus-visible{outline:2px solid var(--background-modifier-border)}.status-badge-container{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-primary);position:relative;overflow:hidden;isolation:isolate}.status-badge-container:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:transparent;opacity:.85;display:none}.status-badge-container--clickable{cursor:pointer;transition:background var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease,filter var(--anim-duration-fast) ease}.status-badge-container--clickable:not(.status-badge--filled):hover{background:var(--background-modifier-hover);box-shadow:var(--shadow-s)}.status-badge--accent{padding-left:calc(var(--size-4-1) + 4px)}.status-badge--accent:before{display:block;background:var(--status-accent, var(--interactive-accent))}.status-badge--filled{background:var(--status-accent, var(--interactive-accent));border-color:var(--status-accent, var(--interactive-accent));color:var(--text-on-accent);padding-left:var(--size-4-2)}.status-badge--filled .status-badge-icon,.status-badge--filled .status-badge-text{color:inherit}.status-badge--filled.status-badge-container--clickable:hover{filter:brightness(1.05);background:var(--status-accent, var(--interactive-accent));box-shadow:var(--shadow-s)}.status-badge--dot{border:none;background:transparent;padding:var(--size-2-1) var(--size-2-2);gap:var(--size-2-1)}.status-badge--dot:before{display:none}.status-badge--dot .status-badge-item{gap:var(--size-2-2)}.status-badge-dot{width:8px;height:8px;border-radius:50%;background:var(--status-accent, var(--interactive-accent));box-shadow:0 0 0 1px var(--background-primary)}.status-badge--empty{min-width:32px;justify-content:center}.status-badge-item{display:flex;align-items:center;gap:var(--size-2-1);position:relative;z-index:1}.status-badge-icon{font-size:var(--font-ui-small)}.status-badge-text{font-weight:var(--font-medium);font-size:var(--font-ui-small)}.status-badge-empty{display:inline-block;min-width:var(--size-3-2);height:var(--size-3-2)}.template-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);font-size:var(--font-ui-smaller);cursor:default;transition:background var(--anim-duration-fast) ease}.template-status-chip[data-clickable=true]{cursor:pointer}.template-status-chip[data-clickable=true]:hover{background:var(--background-modifier-hover)}.template-status-color-dot{width:8px;height:8px;border-radius:50%;background-color:var(--dot-color)}.template-status-chip__label{display:inline-flex;align-items:center;gap:var(--size-2-1)}.template-status-chip__icon{display:inline-flex;font-size:1em}.lucide-icon-picker{position:relative;display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-picker__text-input{max-width:240px}.lucide-icon-picker__row{display:flex;gap:var(--size-2-1);align-items:center}.lucide-icon-picker__modal-button{display:inline-flex;align-items:center;gap:var(--size-2-1);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-2-1) var(--size-4-1);background:var(--background-secondary);cursor:pointer;transition:border var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease;min-width:220px;justify-content:space-between}.lucide-icon-picker__modal-button:hover{border-color:var(--interactive-accent)}.lucide-icon-picker__preview{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px}.lucide-icon-picker__label{flex:1;text-align:left;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-picker__clear-trigger{background:transparent;border:none;color:var(--text-muted);font-size:var(--font-ui-smaller);cursor:pointer;padding:var(--size-2-1) var(--size-2-2)}.lucide-icon-picker__clear-trigger:hover{color:var(--text-normal);text-decoration:underline}.lucide-icon-modal-wrapper{padding:var(--size-4-2)}.lucide-icon-modal{display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-modal__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-2-2)}.lucide-icon-modal__count{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__close{display:inline-flex;align-items:center;justify-content:center}.lucide-icon-modal__search{width:100%}.lucide-icon-modal__toggle{display:inline-flex;align-items:center;gap:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--size-2-1);max-height:360px;overflow-y:auto;padding-right:var(--size-2-1)}.lucide-icon-modal__list--icons-only{grid-template-columns:repeat(auto-fill,minmax(70px,1fr))}.lucide-icon-modal__option{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-secondary);cursor:pointer;font-size:var(--font-ui-smaller);justify-content:flex-start}.lucide-icon-modal__option:hover{background:var(--background-modifier-hover)}.lucide-icon-modal__option--selected{border-color:var(--interactive-accent);background:var(--background-modifier-success)}.lucide-icon-modal__option--compact{justify-content:center}.lucide-icon-modal__option--compact span{display:none}.lucide-icon-modal__empty{grid-column:1 / -1;text-align:center;font-size:var(--font-ui-smaller);color:var(--text-muted);padding:var(--size-4-2)}.icon-selection-field{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.icon-selection-field__column{flex:1;min-width:220px}.icon-selection-field__label{display:block;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.icon-selection-field__emoji-input{max-width:260px}.icon-selection-field__hint{margin-top:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1}.obsidian-icon{display:inline-flex;align-items:center;justify-content:center}.obsidian-icon svg{width:100%;height:100%}.note-status-editor-toolbar-badge{display:inline-flex;align-items:center;margin:0 var(--size-2-1)}.note-status-editor-toolbar-badge--hidden{display:none}.editor-toolbar-button__icon{font-size:16px;display:flex;align-items:center;justify-content:center;color:var(--text-muted);width:18px;height:18px;line-height:1}.editor-toolbar-button__icon--has-status{color:var(--interactive-accent)}.editor-toolbar-button__icon-container{position:relative;display:flex;align-items:center;justify-content:center}.editor-toolbar-button__counter{position:absolute;top:-4px;right:-6px;min-width:12px;height:12px;padding:0 2px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:8px;font-weight:var(--font-semibold);border-radius:6px;display:flex;align-items:center;justify-content:center;line-height:1;border:1px solid var(--background-primary)}.status-mapping-list{display:flex;flex-direction:column;gap:var(--size-4-2);width:100%}.status-mapping-row{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);background:var(--background-primary-alt);display:flex;flex-direction:column;gap:var(--size-2-2)}.status-mapping-empty{padding:var(--size-4-3);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m)}.status-mapping-row__fields{display:flex;flex-wrap:wrap;gap:var(--size-4-2);width:100%}.status-mapping-field{display:flex;flex-direction:column;gap:var(--size-2-1);flex:1 1 180px}.status-mapping-field label{font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-mapping-field small{color:var(--text-faint)}.status-mapping-field select,.status-mapping-field input{width:100%}.status-mapping-row__actions{display:flex;justify-content:flex-end}.status-mapping-remove-btn{background:var(--background-modifier-error);color:var(--text-on-accent);border:none;border-radius:var(--radius-s);padding:4px 10px;cursor:pointer}.status-mapping-remove-btn:hover{opacity:.9}.status-mapping-add-btn{align-self:flex-start;padding:var(--size-2-2) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--interactive-normal);cursor:pointer}.status-mapping-add-btn:hover{background:var(--interactive-hover)}.note-status-input{width:100%;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);padding:var(--size-2-2) var(--size-2-3);transition:border-color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.note-status-input--search{padding-left:var(--size-4-1)}.note-status-input--color{width:36px;height:32px;padding:var(--size-2-1);cursor:pointer}.note-status-input--color::-webkit-color-swatch{border:none;border-radius:var(--radius-s)}.note-status-input--color::-webkit-color-swatch-wrapper{padding:0}.note-status-input:disabled{opacity:.65;cursor:not-allowed}.note-status-options{max-height:300px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);box-shadow:var(--shadow-xs)}.note-status-options::-webkit-scrollbar{width:var(--scrollbar-width)}.note-status-options::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.note-status-option{align-items:stretch}.note-status-option .selectable-list-item-icon{display:flex;align-items:center;justify-content:center}.note-status-option__icon-wrapper{display:inline-flex;align-items:center;justify-content:center;padding:var(--size-2-1);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border);background:var(--background-secondary);min-width:36px;transition:border-color var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease}.note-status-option:hover .note-status-option__icon-wrapper,.note-status-option[data-selected=true] .note-status-option__icon-wrapper{border-color:var(--interactive-accent);background:var(--background-modifier-hover)}.note-status-option__text{display:flex;flex-direction:column;gap:2px}.note-status-option__name{font-weight:var(--font-medium);color:var(--text-normal)}.note-status-option__description{font-size:var(--font-ui-smaller);color:var(--text-muted)}.note-status-chips{display:flex;flex-wrap:wrap;gap:var(--size-2-2);min-height:32px;align-items:center;padding:var(--size-2-1) 0}.status-selector-empty{padding:var(--size-4-2);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.selectable-list-item{display:flex;align-items:center;gap:var(--size-4-2);padding:var(--size-2-3) var(--size-4-2);cursor:pointer;border-bottom:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.selectable-list-item:hover{background:var(--background-modifier-hover)}.selectable-list-item[data-focused=true]{outline:2px solid var(--interactive-accent);outline-offset:-2px}.selectable-list-item[data-selected=true]{background:var(--background-modifier-hover)}.selectable-list-item-icon{font-size:16px;min-width:20px}.selectable-list-item-content{flex:1;font-size:var(--font-ui-small)}.selectable-list-item-check{color:var(--interactive-accent);display:flex;align-items:center}.status-selector-group{display:flex;flex-direction:column;gap:var(--size-4-2);outline:none}.status-selector-group:focus-visible{outline:2px solid var(--background-modifier-border-hover);outline-offset:4px}.note-status-template-tabs{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-secondary);margin-bottom:var(--size-2-2)}.note-status-template-tab{border:none;background:transparent;color:var(--text-muted);padding:var(--size-2-2) var(--size-3-1);border-radius:var(--radius-s);cursor:pointer;transition:background var(--anim-duration-fast) ease,color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-template-tab:not(.is-active):hover{background:var(--background-modifier-hover);color:var(--text-normal)}.note-status-template-tab.is-active{background:var(--interactive-accent);color:var(--text-on-accent);box-shadow:0 0 0 1px var(--background-modifier-border)}.note-status-template-tab:focus-visible{outline:2px solid var(--background-modifier-border)} +.status-bar-no-status{display:inline-flex;align-items:center;gap:var(--size-2-2);color:var(--status-empty-color, var(--text-muted))}.status-bar-no-status:hover{color:var(--text-normal)}.status-bar-no-status__icon{opacity:.9}.status-bar-no-status__label{font-weight:var(--font-medium)}.status-bar-enable-button{cursor:pointer;opacity:var(--icon-opacity);transition:opacity var(--anim-duration-fast) ease}.status-bar-enable-button:hover{opacity:var(--icon-opacity-hover)}.status-bar-group-row{display:flex;align-items:center;gap:var(--size-4-2)}.status-bar-group-container{display:flex;gap:var(--size-2-1);flex-wrap:wrap;align-items:center}.status-bar-status-item{display:inline-flex;align-items:center}.status-bar-status-item--animated{animation:status-slide-in var(--anim-duration-fast) ease-out var(--status-anim-delay, 0s) both}@keyframes status-slide-in{0%{opacity:0;transform:scale(.8) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.note-status-settings__intro{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-2)}.note-status-settings__description{margin:0;color:var(--text-normal);line-height:1.5}.note-status-settings__support{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.note-status-settings__badge{padding:0;border:none;background:transparent}.note-status-settings__badge img{display:block;height:32px}.note-status-settings__badge:hover{background:transparent;border-color:transparent;transform:translateY(-1px)}.note-status-settings__badge:focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px;border-radius:var(--radius-s)}.note-status-settings__support a:not(.note-status-settings__badge){display:inline-flex;align-items:center;justify-content:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);text-decoration:none;color:var(--text-normal);background:var(--background-primary);transition:background var(--anim-duration-fast) ease,border-color var(--anim-duration-fast) ease,transform var(--anim-duration-fast) ease}.note-status-settings__support a:not(.note-status-settings__badge):hover{background:var(--background-modifier-hover);border-color:var(--interactive-accent);transform:translateY(-1px)}.note-status-settings__support a:not(.note-status-settings__badge):focus-visible{outline:2px solid var(--interactive-accent);outline-offset:2px}.note-status-section{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);margin-bottom:var(--size-4-3);overflow:hidden}.note-status-section__header{width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-4-1);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:none;color:inherit;cursor:pointer;text-align:left}.note-status-section__header:hover{background:var(--background-modifier-hover)}.note-status-section__title-block{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--size-2-1)}.note-status-section__title-block .setting-item-name,.note-status-section__title-block .setting-item-description{white-space:normal;line-height:1.4}.note-status-section__title-block .setting-item-description{color:var(--text-muted)}.note-status-section__chevron{font-size:var(--font-ui-medium);color:var(--text-muted)}.note-status-section__content{padding:var(--size-4-3);border-top:1px solid var(--background-modifier-border)}.note-status-settings__stack{display:flex;flex-direction:column;gap:var(--size-4-3)}.setting-item-full{width:100%}.setting-item-vertical{flex-direction:column;align-items:flex-start;gap:var(--size-2-2)}.ui-settings__no-status-input{max-width:150px}.custom-status-item{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);margin-bottom:var(--size-4-2);transition:all var(--anim-duration-fast) ease}.custom-status-item:hover{border-color:var(--interactive-hover)}.custom-status-item__row{display:flex;align-items:end;gap:var(--size-4-2);margin-bottom:var(--size-4-2)}.custom-status-item__row--icons{align-items:stretch;flex-wrap:wrap}.custom-status-item__field{display:flex;flex-direction:column;gap:var(--size-2-1)}.custom-status-item__field--icon,.custom-status-item__field--lucide{flex:1;min-width:240px}.custom-status-item__field--name,.custom-status-item__field--description{flex:2;min-width:120px}.custom-status-item__field--color{flex:0 0 auto}.custom-status-item__field--reorder,.custom-status-item__field--actions{flex:0 0 auto;padding-top:var(--size-4-1)}.custom-status-item__label{font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.custom-status-item__label--required{color:var(--text-error)}.custom-status-item__input--icon{width:100%!important;text-align:left;font-size:1em}.custom-status-item__hint{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.custom-status-item__input--name{font-weight:var(--font-medium)}.custom-status-item__input--name.custom-status-item__input--invalid{border-color:var(--text-error)!important;background:var(--background-modifier-error)!important}.custom-status-item__input--description{color:var(--text-muted)}.custom-status-item__input--color{width:40px!important;height:32px!important;border-radius:var(--radius-s);cursor:pointer;border:2px solid var(--background-modifier-border)!important}.custom-status-item__input--color:hover{border-color:var(--interactive-hover)!important}.custom-status-item__remove-btn{width:32px;height:32px;border-radius:var(--radius-s);background:var(--background-modifier-error);color:var(--text-on-accent);border:none;cursor:pointer;font-size:18px;font-weight:700;transition:all var(--anim-duration-fast) ease}.custom-status-item__remove-btn:hover{background:var(--text-error);transform:scale(1.05)}.custom-status-item__reorder-buttons{display:flex;flex-direction:column;gap:2px}.custom-status-item__reorder-btn{width:24px;height:24px;border-radius:var(--radius-s);background:var(--background-modifier-border);color:var(--text-normal);border:none;cursor:pointer;font-size:12px;font-weight:700;transition:all var(--anim-duration-fast) ease;display:flex;align-items:center;justify-content:center;line-height:1}.custom-status-item__reorder-btn:hover:not(:disabled){background:var(--interactive-hover);transform:scale(1.05)}.custom-status-item__reorder-btn:disabled{opacity:.5;cursor:not-allowed}.custom-status-item__preview{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-2);background:var(--background-primary-alt);border-radius:var(--radius-s);border-left:3px solid var(--background-modifier-border);font-size:var(--font-ui-small)}.custom-status-item__preview-icon{font-size:1.1em;min-width:20px;text-align:center}.custom-status-item__preview-text{font-weight:var(--font-medium)}.custom-status-item__preview-desc{color:var(--text-muted);font-style:italic}.custom-status-item__preview-desc:before{content:"\2014 "}.custom-status-item__error{color:var(--text-error);font-size:var(--font-ui-smaller);margin-top:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-error);border-radius:var(--radius-s);border-left:3px solid var(--text-error)}.custom-status-list__empty{text-align:center;padding:var(--size-4-4) var(--size-4-2);color:var(--text-muted);font-style:italic;border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.custom-status-list__empty p{margin:0}.status-group{margin-bottom:var(--size-4-4);padding:var(--size-4-3);background:var(--background-primary-alt);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border)}.status-group__header{margin-bottom:var(--size-4-2);padding-bottom:var(--size-2-2);border-bottom:1px solid var(--background-modifier-border)}.status-group__title{font-weight:var(--font-semibold);color:var(--text-normal);font-size:var(--font-ui-medium)}.status-group__description{font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);line-height:var(--line-height-tight)}.status-group__items{display:flex;flex-direction:column;gap:var(--size-2-2)}.status-selector{display:flex;align-items:center;justify-content:space-between;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary);cursor:pointer;transition:all var(--anim-duration-fast) ease;position:relative}.status-selector:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover)}.status-selector--selected{background:var(--background-modifier-success);border-color:var(--interactive-success)}.status-selector--selected:hover{background:var(--background-modifier-success-hover)}.status-selector__content{flex:1;min-width:0}.status-selector__status{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.status-selector__icon{font-size:var(--font-ui-medium);width:var(--size-4-3);text-align:center;flex-shrink:0}.status-selector__name{font-weight:var(--font-medium);color:var(--text-normal)}.status-selector__description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:var(--line-height-tight)}.status-selector__checkbox{margin-left:var(--size-4-2);pointer-events:none;flex-shrink:0}.quick-commands-container{margin-top:var(--size-4-2)}.template-settings-actions{display:flex;justify-content:end;gap:var(--size-4-2);padding-bottom:var(--size-4-2)}.template-create-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);font-weight:var(--font-medium);font-size:var(--font-ui-medium)}.template-reset-btn{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-3) var(--size-4-3);background:var(--interactive-normal);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.template-reset-btn:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-section{margin-bottom:var(--size-4-6)}.template-section-title{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-large);font-weight:var(--font-semibold);color:var(--text-normal);margin-bottom:var(--size-4-3);padding-bottom:var(--size-2-2);border-bottom:2px solid var(--background-modifier-border)}.template-section-title .lucide{opacity:.8;color:var(--text-muted)}.template-list{display:flex;flex-direction:column;gap:var(--size-4-2)}.template-item{position:relative;display:flex;align-items:stretch;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt);transition:all var(--anim-duration-fast) ease;overflow:hidden}.template-item:hover{background:var(--background-modifier-hover);border-color:var(--background-modifier-border-hover);box-shadow:0 2px 8px var(--shadow-color)}.template-item.enabled{background:var(--background-modifier-hover);border-color:var(--interactive-accent);box-shadow:0 0 0 1px var(--interactive-accent)}.template-item.enabled:hover{box-shadow:0 2px 8px var(--shadow-color),0 0 0 1px var(--interactive-accent)}.template-item-content{flex:1;border:none!important;border-radius:0!important;background:transparent!important}.template-item-main{flex:1}.template-header{display:flex;align-items:center;gap:var(--size-2-2);margin-bottom:var(--size-2-1)}.template-custom-badge{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-2);background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);border-radius:var(--radius-s);text-transform:uppercase;letter-spacing:.05em}.template-item-actions{display:flex;flex-direction:column;padding:var(--size-4-2);gap:var(--size-2-1);background:var(--background-modifier-border);border-left:1px solid var(--background-modifier-border-hover);min-width:44px;align-items:center;justify-content:center}.template-item-actions button,.template-item-actions a{display:flex;align-items:center;justify-content:center;padding:var(--size-4-1);border-radius:var(--radius-s);color:var(--text-muted);background:transparent;border:none;cursor:pointer;transition:all var(--anim-duration-fast) ease;text-decoration:none!important}.template-item-actions button:hover,.template-item-actions a:hover{background:var(--interactive-hover);color:var(--text-normal)}.template-marketplace-btn{color:var(--text-accent)!important}.template-editor-modal{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-l);box-shadow:var(--shadow-l);max-width:800px;width:100%}.template-editor-modal__header{padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);border-radius:var(--radius-l) var(--radius-l) 0 0}.template-editor-modal__header h2{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold);color:var(--text-normal)}.template-editor-modal__content{padding:var(--size-4-6);max-height:70vh;overflow-y:auto}.template-editor-statuses{display:flex;flex-direction:column;gap:var(--size-4-3)}.template-editor-add-status{display:flex;align-items:center;gap:var(--size-2-2);align-self:flex-start;margin-top:var(--size-4-2)}.template-editor-add-status .lucide{width:16px;height:16px}.template-editor-modal__actions{display:flex;gap:var(--size-4-2);justify-content:flex-end;padding:var(--size-4-4) var(--size-4-6);background:var(--background-secondary);border-top:1px solid var(--background-modifier-border);border-radius:0 0 var(--radius-l) var(--radius-l)}.template-editor-modal__actions button{padding:var(--size-2-3) var(--size-4-4);border-radius:var(--radius-m);font-size:var(--font-ui-medium);font-weight:var(--font-medium);cursor:pointer;transition:all var(--anim-duration-fast) ease;border:1px solid var(--background-modifier-border)}.template-editor-modal__actions button:not(.mod-cta){background:var(--interactive-normal);color:var(--text-normal)}.template-editor-modal__actions button:not(.mod-cta):hover{background:var(--interactive-hover)}.template-editor-modal__actions .mod-cta:disabled{opacity:.5;cursor:not-allowed;transform:none}.template-editor-modal__actions .mod-cta:disabled:hover{transform:none}.template-author-info{display:block;font-size:var(--font-ui-smaller);color:var(--text-muted);margin-top:var(--size-2-1);font-style:italic}.template-author-info a{color:var(--text-accent);text-decoration:none}.template-author-info a:hover{text-decoration:underline}.marketplace-steps{padding-left:var(--size-4-4);margin-bottom:var(--size-4-4);color:var(--text-normal)}.marketplace-steps li{margin-bottom:var(--size-2-2)}.marketplace-steps li a{color:var(--text-accent);word-break:break-all}.marketplace-note{margin:var(--size-4-4) 0;padding:var(--size-4-2);background:var(--background-primary-alt);border-left:4px solid var(--interactive-accent);border-radius:var(--radius-s);font-size:var(--font-ui-small)}.marketplace-json-preview{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;margin-top:var(--size-4-2)}.json-preview-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-4-2);background:var(--background-primary-alt);border-bottom:1px solid var(--background-modifier-border);font-family:var(--font-monospace);font-size:var(--font-ui-smaller);color:var(--text-muted)}.copy-btn{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3)!important;font-size:var(--font-ui-smaller)!important;background:var(--interactive-accent)!important;color:var(--text-on-accent)!important;border:none!important}.copy-btn.success{background:var(--text-success)!important}.marketplace-json-preview pre{margin:0;padding:var(--size-4-2);max-height:300px;overflow-y:auto;font-family:var(--font-monospace);font-size:var(--font-ui-smaller);white-space:pre-wrap;word-break:break-all}.marketplace-github-link{display:flex;align-items:center;gap:var(--size-2-2);text-decoration:none!important}.marketplace-header-content{display:flex;justify-content:space-between;align-items:center;width:100%;gap:var(--size-4-4)}.marketplace-header-content h2{margin:0;white-space:nowrap}.marketplace-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--size-4-4);padding:var(--size-2-2)}.marketplace-card{display:flex;flex-direction:column;background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-4);transition:all var(--anim-duration-fast) ease}.marketplace-card:hover{border-color:var(--interactive-accent);box-shadow:var(--shadow-s)}.marketplace-card-header{margin-bottom:var(--size-2-2)}.marketplace-card-title{font-weight:var(--font-bold);font-size:var(--font-ui-medium);color:var(--text-normal)}.marketplace-card-author{font-size:var(--font-ui-smaller);color:var(--text-muted);font-style:italic}.marketplace-card-description{font-size:var(--font-ui-small);color:var(--text-muted);margin-bottom:var(--size-4-2);flex-grow:1}.marketplace-card-statuses{display:flex;flex-wrap:wrap;gap:var(--size-2-1);margin-bottom:var(--size-4-4)}.marketplace-card-actions{margin-top:auto}.marketplace-install-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:var(--size-2-2)}.marketplace-install-btn.installed{background:var(--background-modifier-success-accent)!important;color:var(--text-on-accent)!important;opacity:.8;cursor:default}.marketplace-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--size-4-12);color:var(--text-muted);text-align:center}.marketplace-empty p{margin-top:var(--size-4-2);font-size:var(--font-ui-large)}.marketplace-browse-btn{display:flex;align-items:center;gap:var(--size-2-2)}@media (max-width: 768px){.template-settings-actions,.template-item{flex-direction:column}.template-item-actions{flex-direction:row;border-left:none;border-top:1px solid var(--background-modifier-border-hover);min-width:unset;padding:var(--size-2-3) var(--size-4-2)}.template-editor-modal{margin:var(--size-4-2);max-width:calc(100% - var(--size-4-4))}}.template-editor-modal__content::-webkit-scrollbar{width:var(--scrollbar-width)}.template-editor-modal__content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.template-editor-modal__content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.status-dashboard-view-container{height:100%;overflow:hidden}.status-dashboard{background:var(--background-primary)}.status-dashboard-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-3) var(--size-4-4);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-title{margin:0;font-size:var(--font-ui-larger);font-weight:var(--font-bold)}.status-dashboard-refresh{padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);transition:all var(--anim-duration-fast) ease}.status-dashboard-refresh:hover{background:var(--interactive-hover);transform:rotate(90deg)}.status-dashboard-content{flex:1;overflow-y:auto;padding:var(--size-4-3);display:flex;flex-direction:column;gap:var(--size-4-4)}.status-dashboard-section{background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden}.status-dashboard-section-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-border)}.status-dashboard-section-header h3{margin:0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.status-dashboard-current-note{padding:var(--size-4-3)}.current-note-info{margin-bottom:var(--size-4-3);padding-bottom:var(--size-4-2);border-bottom:1px solid var(--background-modifier-border)}.current-note-name{font-size:var(--font-ui-large);font-weight:var(--font-semibold);margin-bottom:var(--size-2-1)}.current-note-path{font-size:var(--font-ui-small);color:var(--text-muted);font-family:var(--font-monospace);margin-bottom:var(--size-2-1)}.current-note-modified{font-size:var(--font-ui-smaller);color:var(--text-faint);font-style:italic}.current-note-statuses{display:flex;flex-direction:column;gap:var(--size-4-2)}.current-note-tag-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.current-note-status-list{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.current-note-no-status{font-size:var(--font-ui-small);color:var(--text-muted);font-style:italic;padding:var(--size-2-1) var(--size-2-3);background:var(--background-modifier-border);border-radius:var(--radius-s)}.current-note-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.vault-overview{padding:var(--size-4-3)}.vault-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--size-4-2)}.vault-stat-card{text-align:center;padding:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);transition:all var(--anim-duration-fast) ease}.vault-stat-card:hover{background:var(--background-modifier-hover);transform:translateY(-2px);box-shadow:var(--shadow-s)}.vault-stat-number{font-size:var(--font-ui-largest);font-weight:var(--font-bold);color:var(--interactive-accent);margin-bottom:var(--size-2-1)}.vault-stat-label{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium);text-transform:uppercase;letter-spacing:.05em}.status-distribution{padding:var(--size-4-3)}.status-chart{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-chart-item{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-chart-item--clickable{cursor:pointer;transition:all var(--anim-duration-fast) ease;padding:var(--size-2-2);border-radius:var(--radius-s)}.status-chart-item--clickable:hover{background:var(--background-modifier-hover);transform:translateY(-1px)}.status-chart-info{display:flex;align-items:center;gap:var(--size-2-3)}.status-chart-count{font-size:var(--font-ui-small);color:var(--text-muted);font-weight:var(--font-medium)}.status-chart-bar{height:8px;background:var(--background-modifier-border);border-radius:var(--radius-s);overflow:hidden}.status-chart-fill{height:100%;transition:width var(--anim-duration-moderate) ease}.status-distribution-empty{text-align:center;color:var(--text-muted);font-style:italic;padding:var(--size-4-4)}.quick-actions{padding:var(--size-4-3);display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--size-4-3)}.quick-actions-group{display:flex;flex-direction:column;gap:var(--size-2-2)}.quick-actions-group-title{font-size:var(--font-ui-small);font-weight:var(--font-semibold);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding-bottom:var(--size-2-1);border-bottom:1px solid var(--background-modifier-border);margin-bottom:var(--size-2-1)}.quick-action-btn{width:100%;padding:var(--size-2-3) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-medium);font-weight:var(--font-medium);text-align:left;display:flex;align-items:center;gap:var(--size-2-2);transition:all var(--anim-duration-fast) ease}.quick-action-btn:hover:not(:disabled){background:var(--interactive-hover);transform:translateY(-1px);box-shadow:var(--shadow-s)}.quick-action-btn:disabled{opacity:.5;cursor:not-allowed;background:var(--background-modifier-border);color:var(--text-faint)}@media (max-width: 768px){.quick-actions{grid-template-columns:1fr}}.status-dashboard-loading{display:flex;align-items:center;justify-content:center;height:100%;font-size:var(--font-ui-medium);color:var(--text-muted)}.status-dashboard-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.status-dashboard-content::-webkit-scrollbar{width:var(--scrollbar-width)}.status-dashboard-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.status-dashboard-content::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-view-container{height:100%;overflow:hidden}.grouped-status-header{padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border)}.grouped-status-title{margin:0 0 var(--size-4-2) 0;font-size:var(--font-ui-large);font-weight:var(--font-semibold)}.grouped-status-filters{display:flex;flex-direction:column;gap:var(--size-4-2)}.grouped-status-note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-medium)}.grouped-status-note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-content{flex:1;overflow-y:auto;padding:var(--size-4-2)}.grouped-status-tag-section{margin-bottom:var(--size-4-3)}.grouped-status-tag-header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);cursor:pointer;transition:all var(--anim-duration-fast) ease;margin-bottom:var(--size-4-2)}.grouped-status-tag-header:hover{background:var(--background-modifier-hover)}.grouped-status-tag-content{padding-left:var(--size-4-2)}.grouped-status-group{margin-bottom:var(--size-4-2);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);overflow:hidden;box-shadow:0 1px 3px #0000001a;transition:box-shadow var(--anim-duration-fast) ease}.grouped-status-group:hover{box-shadow:0 2px 8px #00000026}.grouped-status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-4-2) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;position:relative}.grouped-status-group__header:hover{background:var(--background-modifier-hover)}.grouped-status-group__header:focus{outline:2px solid var(--color-accent);outline-offset:-2px}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2);min-width:0;flex:1}.grouped-status-group__template-badge{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium)}.grouped-status-group__info{display:flex;align-items:center;gap:var(--size-2-2);margin-left:auto}.grouped-status-files{background:var(--background-secondary);border-top:1px solid var(--background-modifier-border)}.grouped-status-files-list{max-height:300px;overflow-y:auto}.grouped-status-file-item{padding:var(--size-2-3) var(--size-4-3);cursor:pointer;transition:background var(--anim-duration-fast) ease;border-bottom:1px solid var(--background-modifier-border-hover)}.grouped-status-file-item:hover{background:var(--background-modifier-hover)}.grouped-status-file-item:last-child{border-bottom:none}.grouped-status-file-name{font-weight:var(--font-medium);color:var(--text-normal);margin-bottom:2px}.grouped-status-file-path{font-size:var(--font-ui-small);color:var(--text-muted);opacity:.8}.grouped-status-load-more{display:flex;justify-content:center;padding:var(--size-4-2);border-top:1px solid var(--background-modifier-border)}.grouped-status-load-btn{padding:var(--size-2-2) var(--size-4-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--interactive-normal);color:var(--text-normal);cursor:pointer;font-size:var(--font-ui-small);font-weight:var(--font-medium);transition:all var(--anim-duration-fast) ease}.grouped-status-load-btn:hover{background:var(--interactive-hover);transform:translateY(-1px)}.grouped-status-loading,.grouped-status-empty{display:flex;align-items:center;justify-content:center;padding:var(--size-4-6);color:var(--text-muted);font-size:var(--font-ui-medium)}.grouped-status-view-disabled{display:flex;align-items:center;justify-content:center;height:100%;padding:var(--size-4-4);text-align:center;font-size:var(--font-ui-medium);color:var(--text-muted);background:var(--background-secondary);border:2px dashed var(--background-modifier-border);border-radius:var(--radius-m);margin:var(--size-4-4)}.grouped-status-content::-webkit-scrollbar,.grouped-status-files-list::-webkit-scrollbar{width:var(--scrollbar-width)}.grouped-status-content::-webkit-scrollbar-thumb,.grouped-status-files-list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.grouped-status-content::-webkit-scrollbar-thumb:hover,.grouped-status-files-list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-active-bg)}.grouped-status-filters__template{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__template-select{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);cursor:pointer}.grouped-status-filters__template-select:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-filters__note{display:flex;flex-direction:column;gap:var(--size-2-1)}.grouped-status-filters__note-input{width:100%;padding:var(--size-2-2) var(--size-2-3);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small)}.grouped-status-filters__note-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.grouped-status-group__status{display:flex;align-items:center;gap:var(--size-2-2)}.grouped-status-group__template-badge{background:var(--background-modifier-border);color:var(--text-muted);padding:var(--size-2-1) var(--size-2-2);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);font-weight:var(--font-medium);text-transform:capitalize;white-space:nowrap}.custom-icon{display:inline-flex}.custom-icon__absolute-right{position:absolute;right:0}.note-status-colored-block{position:relative;border-radius:var(--radius-s);z-index:0}.note-status-colored-block:before{content:"";position:absolute;inset:0;border-radius:inherit;background-color:var(--note-status-block-color, transparent);opacity:.18;pointer-events:none;z-index:-1;transition:background-color var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease}.note-status-border-left{position:relative}.note-status-border-left:after{content:"";position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:var(--radius-s);background-color:var(--note-status-border-color, transparent);opacity:.35;pointer-events:none}.note-status-underline{text-decoration-line:underline;text-decoration-thickness:2px;text-decoration-color:var(--note-status-underline-color, currentColor);text-underline-offset:3px}.note-status-dot-badge{width:6px;height:6px;border-radius:50%;margin-left:var(--size-2-1);display:inline-flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px var(--background-modifier-border);flex-shrink:0}.status-wrapper{position:relative;display:inline-block}.status-minimal{display:inline-flex;align-items:center;gap:2px;margin-left:var(--size-2-2);padding:2px;border-radius:var(--radius-s);cursor:pointer;opacity:.7;transition:all var(--anim-duration-fast) ease}.status-minimal:hover{opacity:1;background:var(--background-modifier-hover);transform:scale(1.05)}.status-minimal--compact{margin-left:0;padding:0;background:transparent;gap:var(--size-2-1)}.status-minimal--compact .status-minimal__icon{font-size:var(--font-ui-medium)}.status-minimal[data-status-color] .status-minimal__count{background:var(--interactive-accent)}.status-minimal__icon{font-size:11px;line-height:1;display:inline-flex;align-items:center;justify-content:center;filter:grayscale(.2);transition:filter var(--anim-duration-fast) ease}.status-minimal:hover .status-minimal__icon{filter:grayscale(0)}.status-minimal__count{min-width:14px;height:14px;padding:0 3px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:var(--font-ui-smaller);font-weight:var(--font-semibold);border-radius:var(--radius-m);display:flex;align-items:center;justify-content:center}.status-info-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:var(--layer-popover);background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);box-shadow:var(--shadow-l);min-width:280px;max-width:400px;overflow:hidden;pointer-events:none}.status-popup-header{display:flex;align-items:center;gap:var(--size-2-2);padding:var(--size-4-2) var(--size-4-3);background:var(--background-secondary);border-bottom:1px solid var(--background-modifier-border);font-weight:var(--font-semibold);font-size:var(--font-ui-small)}.status-popup-content{padding:var(--size-4-2)}.status-popup-empty{padding:var(--size-4-4);text-align:center;color:var(--text-muted);font-style:italic}.status-tag-grid{display:flex;flex-direction:column;gap:var(--size-4-2)}.status-tag-card{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-2);background:var(--background-primary-alt);box-shadow:var(--shadow-xs)}.status-tag-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--size-2-2)}.status-tag-card__title{display:flex;flex-direction:column;gap:var(--size-2-1)}.status-tag-card__label{font-weight:var(--font-semibold);text-transform:none}.status-tag-card__badge{font-size:var(--font-ui-smaller);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 6px;border-radius:var(--radius-s);width:fit-content}.status-tag-card__count{font-size:var(--font-ui-small);color:var(--text-muted);background:var(--background-modifier-border);padding:2px 10px;border-radius:var(--radius-s);font-weight:var(--font-medium)}.status-tag-card__statuses{display:flex;flex-wrap:wrap;gap:var(--size-2-2)}.status-group{margin-bottom:var(--size-4-2)}.status-group:last-child{margin-bottom:0}.status-group__header{display:flex;justify-content:space-between;align-items:center;padding:var(--size-2-2) var(--size-2-3);background:var(--background-secondary-alt);border-radius:var(--radius-s);margin-bottom:var(--size-2-2);border:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.status-group__header:hover{background:var(--background-modifier-hover)}.status-group__name{text-transform:capitalize;font-weight:var(--font-medium);font-size:var(--font-ui-smaller);color:var(--text-normal)}.status-group__count{display:inline-flex;align-items:center;padding:var(--size-2-1) var(--size-2-2);background:var(--background-modifier-border);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);color:var(--text-muted);font-weight:var(--font-medium);min-width:20px;justify-content:center}.status-group__items{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:var(--size-2-2);padding:0 var(--size-2-1)}.status-item{display:flex;flex-direction:column;gap:var(--size-2-1);padding:var(--size-2-2);background:var(--background-primary-alt);border:1px solid var(--background-modifier-border);border-radius:var(--radius-s)}.status-description{font-size:var(--font-ui-smaller);color:var(--text-muted);line-height:1.4}.group-label-container{display:flex;align-items:center;gap:var(--size-2-2);font-size:var(--font-ui-small);font-weight:var(--font-semibold);text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);transition:color var(--anim-duration-fast) ease}.group-label-container--highlighted{color:var(--text-normal)}.group-label-container svg{width:16px;height:16px;opacity:.8}.collapsible-counter-container{padding:var(--size-2-1) var(--size-2-3);border-radius:var(--radius-s);background:var(--background-modifier-border);border:1px solid var(--background-modifier-border-hover);color:var(--text-muted);font-weight:var(--font-medium);font-size:var(--font-ui-smaller);cursor:pointer;transition:all var(--anim-duration-fast) ease;min-width:28px;text-align:center}.collapsible-counter-container:hover{background:var(--background-modifier-border-hover);color:var(--text-normal)}.note-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-2-3);background:var(--interactive-accent);color:var(--text-on-accent);border-radius:var(--radius-s);font-size:var(--font-ui-smaller);cursor:default;transition:transform var(--anim-duration-fast) ease,opacity var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-chip--clickable{cursor:pointer}.note-status-chip--clickable:hover{opacity:.92;transform:translateY(-1px);box-shadow:var(--shadow-s)}.note-status-chip--removing{opacity:.5;transform:scale(.95)}.note-status-chip__icon{font-size:1em;display:inline-flex}.note-status-chip__text{font-weight:var(--font-medium)}.note-status-chip__remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:rgba(255,255,255,.2);margin-left:var(--size-2-1);cursor:pointer;border:none;color:inherit;padding:0;font:inherit;line-height:1}.note-status-chip__remove:hover{background:rgba(255,255,255,.3)}.note-status-chip__remove:focus-visible{outline:2px solid var(--background-modifier-border)}.status-badge-container{display:inline-flex;align-items:center;gap:var(--size-2-2);padding:var(--size-2-1) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-primary);position:relative;overflow:hidden;isolation:isolate}.status-badge-container:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:transparent;opacity:.85;display:none}.status-badge-container--clickable{cursor:pointer;transition:background var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease,filter var(--anim-duration-fast) ease}.status-badge-container--clickable:not(.status-badge--filled):hover{background:var(--background-modifier-hover);box-shadow:var(--shadow-s)}.status-badge--accent{padding-left:calc(var(--size-4-1) + 4px)}.status-badge--accent:before{display:block;background:var(--status-accent, var(--interactive-accent))}.status-badge--filled{background:var(--status-accent, var(--interactive-accent));border-color:var(--status-accent, var(--interactive-accent));color:var(--text-on-accent);padding-left:var(--size-4-2)}.status-badge--filled .status-badge-icon,.status-badge--filled .status-badge-text{color:inherit}.status-badge--filled.status-badge-container--clickable:hover{filter:brightness(1.05);background:var(--status-accent, var(--interactive-accent));box-shadow:var(--shadow-s)}.status-badge--dot{border:none;background:transparent;padding:var(--size-2-1) var(--size-2-2);gap:var(--size-2-1)}.status-badge--dot:before{display:none}.status-badge--dot .status-badge-item{gap:var(--size-2-2)}.status-badge-dot{width:8px;height:8px;border-radius:50%;background:var(--status-accent, var(--interactive-accent));box-shadow:0 0 0 1px var(--background-primary)}.status-badge--empty{min-width:32px;justify-content:center}.status-badge-item{display:flex;align-items:center;gap:var(--size-2-1);position:relative;z-index:1}.status-badge-icon{font-size:var(--font-ui-small)}.status-badge-text{font-weight:var(--font-medium);font-size:var(--font-ui-small)}.status-badge-empty{display:inline-block;min-width:var(--size-3-2);height:var(--size-3-2)}.template-status-chip{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1) var(--size-2-3);background:var(--background-secondary);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);font-size:var(--font-ui-smaller);cursor:default;transition:background var(--anim-duration-fast) ease}.template-status-chip[data-clickable=true]{cursor:pointer}.template-status-chip[data-clickable=true]:hover{background:var(--background-modifier-hover)}.template-status-color-dot{width:8px;height:8px;border-radius:50%;background-color:var(--dot-color)}.template-status-chip__label{display:inline-flex;align-items:center;gap:var(--size-2-1)}.template-status-chip__icon{display:inline-flex;font-size:1em}.lucide-icon-picker{position:relative;display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-picker__text-input{max-width:240px}.lucide-icon-picker__row{display:flex;gap:var(--size-2-1);align-items:center}.lucide-icon-picker__modal-button{display:inline-flex;align-items:center;gap:var(--size-2-1);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-2-1) var(--size-4-1);background:var(--background-secondary);cursor:pointer;transition:border var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease;min-width:220px;justify-content:space-between}.lucide-icon-picker__modal-button:hover{border-color:var(--interactive-accent)}.lucide-icon-picker__preview{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px}.lucide-icon-picker__label{flex:1;text-align:left;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-picker__clear-trigger{background:transparent;border:none;color:var(--text-muted);font-size:var(--font-ui-smaller);cursor:pointer;padding:var(--size-2-1) var(--size-2-2)}.lucide-icon-picker__clear-trigger:hover{color:var(--text-normal);text-decoration:underline}.lucide-icon-modal-wrapper{padding:var(--size-4-2)}.lucide-icon-modal{display:flex;flex-direction:column;gap:var(--size-2-1)}.lucide-icon-modal__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--size-2-2)}.lucide-icon-modal__count{margin:0;font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__close{display:inline-flex;align-items:center;justify-content:center}.lucide-icon-modal__search{width:100%}.lucide-icon-modal__toggle{display:inline-flex;align-items:center;gap:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.lucide-icon-modal__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--size-2-1);max-height:360px;overflow-y:auto;padding-right:var(--size-2-1)}.lucide-icon-modal__list--icons-only{grid-template-columns:repeat(auto-fill,minmax(70px,1fr))}.lucide-icon-modal__option{display:flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-1);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--background-secondary);cursor:pointer;font-size:var(--font-ui-smaller);justify-content:flex-start}.lucide-icon-modal__option:hover{background:var(--background-modifier-hover)}.lucide-icon-modal__option--selected{border-color:var(--interactive-accent);background:var(--background-modifier-success)}.lucide-icon-modal__option--compact{justify-content:center}.lucide-icon-modal__option--compact span{display:none}.lucide-icon-modal__empty{grid-column:1 / -1;text-align:center;font-size:var(--font-ui-smaller);color:var(--text-muted);padding:var(--size-4-2)}.icon-selection-field{display:flex;flex-wrap:wrap;gap:var(--size-4-2)}.icon-selection-field__column{flex:1;min-width:220px}.icon-selection-field__label{display:block;font-size:var(--font-ui-smaller);font-weight:var(--font-medium);color:var(--text-muted);margin-bottom:var(--size-2-1)}.icon-selection-field__emoji-input{max-width:260px}.icon-selection-field__hint{margin-top:var(--size-2-1);font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1}.obsidian-icon{display:inline-flex;align-items:center;justify-content:center}.obsidian-icon svg{width:100%;height:100%}.note-status-editor-toolbar-badge{display:inline-flex;align-items:center;margin:0 var(--size-2-1)}.note-status-editor-toolbar-badge--hidden{display:none}.editor-toolbar-button__icon{font-size:16px;display:flex;align-items:center;justify-content:center;color:var(--text-muted);width:18px;height:18px;line-height:1}.editor-toolbar-button__icon--has-status{color:var(--interactive-accent)}.editor-toolbar-button__icon-container{position:relative;display:flex;align-items:center;justify-content:center}.editor-toolbar-button__counter{position:absolute;top:-4px;right:-6px;min-width:12px;height:12px;padding:0 2px;background:var(--interactive-accent);color:var(--text-on-accent);font-size:8px;font-weight:var(--font-semibold);border-radius:6px;display:flex;align-items:center;justify-content:center;line-height:1;border:1px solid var(--background-primary)}.status-mapping-list{display:flex;flex-direction:column;gap:var(--size-4-2);width:100%}.status-mapping-row{border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);padding:var(--size-4-3);background:var(--background-primary-alt);display:flex;flex-direction:column;gap:var(--size-2-2)}.status-mapping-empty{padding:var(--size-4-3);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m)}.status-mapping-row__fields{display:flex;flex-wrap:wrap;gap:var(--size-4-2);width:100%}.status-mapping-field{display:flex;flex-direction:column;gap:var(--size-2-1);flex:1 1 180px}.status-mapping-field label{font-size:var(--font-ui-smaller);color:var(--text-muted)}.status-mapping-field small{color:var(--text-faint)}.status-mapping-field select,.status-mapping-field input{width:100%}.status-mapping-row__actions{display:flex;justify-content:flex-end}.status-mapping-remove-btn{background:var(--background-modifier-error);color:var(--text-on-accent);border:none;border-radius:var(--radius-s);padding:4px 10px;cursor:pointer}.status-mapping-remove-btn:hover{opacity:.9}.status-mapping-add-btn{align-self:flex-start;padding:var(--size-2-2) var(--size-4-2);border-radius:var(--radius-s);border:1px solid var(--background-modifier-border);background:var(--interactive-normal);cursor:pointer}.status-mapping-add-btn:hover{background:var(--interactive-hover)}.note-status-input{width:100%;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);color:var(--text-normal);font-size:var(--font-ui-small);padding:var(--size-2-2) var(--size-2-3);transition:border-color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-input:focus{outline:none;border-color:var(--interactive-accent);box-shadow:0 0 0 2px var(--background-modifier-accent)}.note-status-input--search{padding-left:var(--size-4-1)}.note-status-input--color{width:36px;height:32px;padding:var(--size-2-1);cursor:pointer}.note-status-input--color::-webkit-color-swatch{border:none;border-radius:var(--radius-s)}.note-status-input--color::-webkit-color-swatch-wrapper{padding:0}.note-status-input:disabled{opacity:.65;cursor:not-allowed}.note-status-options{max-height:300px;overflow-y:auto;border:1px solid var(--background-modifier-border);border-radius:var(--radius-s);background:var(--background-primary);box-shadow:var(--shadow-xs)}.note-status-options::-webkit-scrollbar{width:var(--scrollbar-width)}.note-status-options::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-bg);border-radius:var(--radius-s)}.note-status-option{align-items:stretch}.note-status-option .selectable-list-item-icon{display:flex;align-items:center;justify-content:center}.note-status-option__icon-wrapper{display:inline-flex;align-items:center;justify-content:center;padding:var(--size-2-1);border-radius:var(--radius-m);border:1px solid var(--background-modifier-border);background:var(--background-secondary);min-width:36px;transition:border-color var(--anim-duration-fast) ease,background var(--anim-duration-fast) ease}.note-status-option:hover .note-status-option__icon-wrapper,.note-status-option[data-selected=true] .note-status-option__icon-wrapper{border-color:var(--interactive-accent);background:var(--background-modifier-hover)}.note-status-option__text{display:flex;flex-direction:column;gap:2px}.note-status-option__name{font-weight:var(--font-medium);color:var(--text-normal)}.note-status-option__description{font-size:var(--font-ui-smaller);color:var(--text-muted)}.note-status-chips{display:flex;flex-wrap:wrap;gap:var(--size-2-2);min-height:32px;align-items:center;padding:var(--size-2-1) 0}.status-selector-empty{padding:var(--size-4-2);text-align:center;color:var(--text-muted);font-style:italic;border:1px dashed var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-primary-alt)}.selectable-list-item{display:flex;align-items:center;gap:var(--size-4-2);padding:var(--size-2-3) var(--size-4-2);cursor:pointer;border-bottom:1px solid var(--background-modifier-border);transition:background var(--anim-duration-fast) ease}.selectable-list-item:hover{background:var(--background-modifier-hover)}.selectable-list-item[data-focused=true]{outline:2px solid var(--interactive-accent);outline-offset:-2px}.selectable-list-item[data-selected=true]{background:var(--background-modifier-hover)}.selectable-list-item-icon{font-size:16px;min-width:20px}.selectable-list-item-content{flex:1;font-size:var(--font-ui-small)}.selectable-list-item-check{color:var(--interactive-accent);display:flex;align-items:center}.status-selector-group{display:flex;flex-direction:column;gap:var(--size-4-2);outline:none}.status-selector-group:focus-visible{outline:2px solid var(--background-modifier-border-hover);outline-offset:4px}.note-status-template-tabs{display:inline-flex;align-items:center;gap:var(--size-2-1);padding:var(--size-2-2);border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background:var(--background-secondary);margin-bottom:var(--size-2-2)}.note-status-template-tab{border:none;background:transparent;color:var(--text-muted);padding:var(--size-2-2) var(--size-3-1);border-radius:var(--radius-s);cursor:pointer;transition:background var(--anim-duration-fast) ease,color var(--anim-duration-fast) ease,box-shadow var(--anim-duration-fast) ease}.note-status-template-tab:not(.is-active):hover{background:var(--background-modifier-hover);color:var(--text-normal)}.note-status-template-tab.is-active{background:var(--interactive-accent);color:var(--text-on-accent);box-shadow:0 0 0 1px var(--background-modifier-border)}.note-status-template-tab:focus-visible{outline:2px solid var(--background-modifier-border)} From a51b1ad4c3781670f21ccbc5a1e693e8212fd102 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 16:14:25 +0100 Subject: [PATCH 11/23] fix: resolve re-installation bug by matching marketplace templates by name --- components/SettingsUI/MarketplaceBrowseModal.tsx | 12 +++++++----- components/SettingsUI/TemplateSettings.tsx | 9 ++++++--- utils/templateUtils.ts | 8 ++++++-- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/components/SettingsUI/MarketplaceBrowseModal.tsx b/components/SettingsUI/MarketplaceBrowseModal.tsx index 76d6b54..47e3146 100644 --- a/components/SettingsUI/MarketplaceBrowseModal.tsx +++ b/components/SettingsUI/MarketplaceBrowseModal.tsx @@ -6,13 +6,13 @@ import { ObsidianIcon } from "../atoms/ObsidianIcon"; import { SearchFilter } from "../atoms/SearchFilter"; interface MarketplaceBrowseModalProps { - installedIds: string[]; + installedTemplates: StatusTemplate[]; onInstall: (template: StatusTemplate) => void; onClose: () => void; } export const MarketplaceBrowseModal: React.FC = ({ - installedIds, + installedTemplates, onInstall, onClose, }) => { @@ -42,9 +42,11 @@ export const MarketplaceBrowseModal: React.FC = ({
{filteredTemplates.map((template) => { - const isInstalled = - installedIds.includes(template.id) || - installedIds.includes(`custom-${template.id}`); + const isInstalled = installedTemplates.some( + (t) => + t.name.toLowerCase() === + template.name.toLowerCase(), + ); return (
diff --git a/components/SettingsUI/TemplateSettings.tsx b/components/SettingsUI/TemplateSettings.tsx index f3eab7a..7060507 100644 --- a/components/SettingsUI/TemplateSettings.tsx +++ b/components/SettingsUI/TemplateSettings.tsx @@ -63,7 +63,7 @@ export const TemplateSettings: React.FC = ({ const handleInstallTemplate = useCallback( (template: StatusTemplate) => { - const newId = generateTemplateId(template.name); + const newId = generateTemplateId(template.name, settings.templates); const installedTemplate: StatusTemplate = { ...template, id: newId, @@ -100,7 +100,10 @@ export const TemplateSettings: React.FC = ({ onChange("templates", updatedTemplates); } else { // Add new template - generate unique ID - const uniqueId = generateTemplateId(template.name); + const uniqueId = generateTemplateId( + template.name, + settings.templates, + ); finalTemplate = { ...template, id: uniqueId }; // Update statuses with the final template ID @@ -193,7 +196,7 @@ export const TemplateSettings: React.FC = ({

Status templates

t.id)} + installedTemplates={settings.templates} onInstall={handleInstallTemplate} onClose={handleCloseMarketplace} /> diff --git a/utils/templateUtils.ts b/utils/templateUtils.ts index ae8efc5..168966e 100644 --- a/utils/templateUtils.ts +++ b/utils/templateUtils.ts @@ -36,9 +36,13 @@ export const isTemplateNameUnique = ( /** * Generate unique template ID */ -export const generateTemplateId = (name: string): string => { +export const generateTemplateId = ( + name: string, + existingTemplates?: StatusTemplate[], +): string => { const baseId = name.toLowerCase().replace(/[^a-z0-9]/g, "-"); - const allTemplates = settingsService.settings.templates; + const allTemplates = + existingTemplates || settingsService.settings.templates; let counter = 1; let id = `custom-${baseId}`; From 7833676b8bb60b093cf9c4d4b8217fb2f089c69e Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 16:20:01 +0100 Subject: [PATCH 12/23] fix: implement template deduplication and installation safety checks --- components/SettingsUI/TemplateSettings.tsx | 6 +++++ core/settingsService.ts | 27 ++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/components/SettingsUI/TemplateSettings.tsx b/components/SettingsUI/TemplateSettings.tsx index 7060507..033c79a 100644 --- a/components/SettingsUI/TemplateSettings.tsx +++ b/components/SettingsUI/TemplateSettings.tsx @@ -63,6 +63,12 @@ export const TemplateSettings: React.FC = ({ const handleInstallTemplate = useCallback( (template: StatusTemplate) => { + if (!isTemplateNameUnique(template.name, undefined)) { + alert( + `A template with the name "${template.name}" is already installed.`, + ); + return; + } const newId = generateTemplateId(template.name, settings.templates); const installedTemplate: StatusTemplate = { ...template, diff --git a/core/settingsService.ts b/core/settingsService.ts index 3d5a880..6d440ec 100644 --- a/core/settingsService.ts +++ b/core/settingsService.ts @@ -103,9 +103,36 @@ class SettingsService { private async loadSettings() { const loadedData = await this.plugin.loadData(); this.settings = this.mergeSettings(DEFAULT_PLUGIN_SETTINGS, loadedData); + this.deduplicateTemplates(); return this.settings; } + /** + * Removes duplicate templates with the same name, keeping the first occurrence. + */ + private deduplicateTemplates() { + if (!this.settings.templates) return; + + const seenNames = new Set(); + const uniqueTemplates = []; + let hasDuplicates = false; + + for (const template of this.settings.templates) { + const lowerName = template.name.toLowerCase().trim(); + if (!seenNames.has(lowerName)) { + seenNames.add(lowerName); + uniqueTemplates.push(template); + } else { + hasDuplicates = true; + } + } + + if (hasDuplicates) { + this.settings.templates = uniqueTemplates; + this.saveSettings().catch(console.error); + } + } + /** * Deep merges loaded settings with defaults to prevent data loss for nested objects like statusColors. */ From 04c4bf70fd076795596a7fa7fde259f19a45dbd9 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 16:20:07 +0100 Subject: [PATCH 13/23] chore: start with empty templates by default for new users --- constants/defaultSettings.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/constants/defaultSettings.ts b/constants/defaultSettings.ts index 608fd1c..4264818 100644 --- a/constants/defaultSettings.ts +++ b/constants/defaultSettings.ts @@ -1,8 +1,4 @@ import { PluginSettings } from "types/pluginSettings"; -import { - DEFAULT_ENABLED_TEMPLATES, - PREDEFINED_TEMPLATES, -} from "./predefinedTemplates"; export const DEFAULT_PLUGIN_SETTINGS: PluginSettings = { fileExplorerIconPosition: "absolute-right", @@ -18,7 +14,7 @@ export const DEFAULT_PLUGIN_SETTINGS: PluginSettings = { showStatusBar: true, autoHideStatusBar: false, enableStatusOverviewPopup: true, - templates: [...PREDEFINED_TEMPLATES], + templates: [], customStatuses: [], showStatusIconsInExplorer: true, hideUnknownStatusInExplorer: true, // Default to hide unknown status @@ -30,7 +26,7 @@ export const DEFAULT_PLUGIN_SETTINGS: PluginSettings = { enableExperimentalFeatures: true, enableStatusDashboard: true, enableGroupedStatusView: true, - enabledTemplates: DEFAULT_ENABLED_TEMPLATES, + enabledTemplates: [], useCustomStatusesOnly: false, useMultipleStatuses: true, singleStatusStorageMode: "list", From 4cf73df7307fa2b233197d4a16e705ac46d1674c Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 16:42:22 +0100 Subject: [PATCH 14/23] chore: update marketplace templates with official author metadata --- constants/predefinedTemplates.ts | 8 ++++++++ templates/academic.json | 2 ++ templates/colorful.json | 2 ++ templates/minimal.json | 2 ++ templates/project.json | 2 ++ 5 files changed, 16 insertions(+) diff --git a/constants/predefinedTemplates.ts b/constants/predefinedTemplates.ts index 1cf7acb..62e0e77 100644 --- a/constants/predefinedTemplates.ts +++ b/constants/predefinedTemplates.ts @@ -8,6 +8,8 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ id: "academic", name: "Academic research", description: "Status workflow for academic research and writing", + author: "Obsidian Note Status", + github: "https://github.com/devonthesofa/obsidian-note-status", statuses: [ { name: "research", @@ -58,6 +60,8 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ name: "Colorful workflow", description: "A colorful set of workflow statuses with descriptive icons", + author: "Obsidian Note Status", + github: "https://github.com/devonthesofa/obsidian-note-status", statuses: [ { name: "idea", @@ -158,6 +162,8 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ id: "minimal", name: "Minimal workflow", description: "A simplified set of essential workflow statuses", + author: "Obsidian Note Status", + github: "https://github.com/devonthesofa/obsidian-note-status", statuses: [ { name: "todo", @@ -189,6 +195,8 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ id: "project", name: "Project management", description: "Status workflow for project management and tracking", + author: "Obsidian Note Status", + github: "https://github.com/devonthesofa/obsidian-note-status", statuses: [ { name: "planning", diff --git a/templates/academic.json b/templates/academic.json index fb46483..86bff2c 100644 --- a/templates/academic.json +++ b/templates/academic.json @@ -2,6 +2,8 @@ "id": "academic", "name": "Academic research", "description": "Status workflow for academic research and writing", + "author": "Obsidian Note Status", + "github": "https://github.com/devonthesofa/obsidian-note-status", "statuses": [ { "name": "research", diff --git a/templates/colorful.json b/templates/colorful.json index 15955ea..182aedb 100644 --- a/templates/colorful.json +++ b/templates/colorful.json @@ -2,6 +2,8 @@ "id": "colorful", "name": "Colorful workflow", "description": "A colorful set of workflow statuses with descriptive icons", + "author": "Obsidian Note Status", + "github": "https://github.com/devonthesofa/obsidian-note-status", "statuses": [ { "name": "idea", diff --git a/templates/minimal.json b/templates/minimal.json index cb8e8ca..7de688e 100644 --- a/templates/minimal.json +++ b/templates/minimal.json @@ -2,6 +2,8 @@ "id": "minimal", "name": "Minimal workflow", "description": "A simplified set of essential workflow statuses", + "author": "Obsidian Note Status", + "github": "https://github.com/devonthesofa/obsidian-note-status", "statuses": [ { "name": "todo", diff --git a/templates/project.json b/templates/project.json index 43a5304..cd2cc2c 100644 --- a/templates/project.json +++ b/templates/project.json @@ -2,6 +2,8 @@ "id": "project", "name": "Project management", "description": "Status workflow for project management and tracking", + "author": "Obsidian Note Status", + "github": "https://github.com/devonthesofa/obsidian-note-status", "statuses": [ { "name": "planning", From 6ab760df98f8abac76fc97b679d20d75587a0ef4 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 16:45:47 +0100 Subject: [PATCH 15/23] feat: improve template marketplace UI/UX with badges, 'Modified' status, and read-only marketplace metadata --- .../SettingsUI/MarketplaceBrowseModal.tsx | 15 +++-- components/SettingsUI/TemplateEditorModal.tsx | 21 ++++++- components/SettingsUI/TemplateItem.tsx | 41 +++++++++---- components/atoms/Input.tsx | 3 + styles/components/template-settings.css | 60 ++++++++++++++++--- utils/templateUtils.ts | 58 ++++++++++++++++-- 6 files changed, 167 insertions(+), 31 deletions(-) diff --git a/components/SettingsUI/MarketplaceBrowseModal.tsx b/components/SettingsUI/MarketplaceBrowseModal.tsx index 47e3146..578568e 100644 --- a/components/SettingsUI/MarketplaceBrowseModal.tsx +++ b/components/SettingsUI/MarketplaceBrowseModal.tsx @@ -53,11 +53,16 @@ export const MarketplaceBrowseModal: React.FC = ({
{template.name}
- {template.author && ( -
- by {template.author} -
- )} +
+ + Marketplace + + {template.author && ( +
+ by {template.author} +
+ )} +
{template.description} diff --git a/components/SettingsUI/TemplateEditorModal.tsx b/components/SettingsUI/TemplateEditorModal.tsx index f758fb3..741a1f2 100644 --- a/components/SettingsUI/TemplateEditorModal.tsx +++ b/components/SettingsUI/TemplateEditorModal.tsx @@ -1,9 +1,10 @@ -import React, { useState, useCallback } from "react"; +import React, { useState, useCallback, useMemo } from "react"; import { StatusTemplate } from "@/types/pluginSettings"; import { NoteStatus } from "@/types/noteStatus"; import { Input } from "@/components/atoms/Input"; import { SettingItem } from "./SettingItem"; import { CustomStatusItem } from "./CustomStatusItem"; +import { isCustomTemplate } from "@/utils/templateUtils"; interface TemplateEditorModalProps { template?: StatusTemplate; @@ -16,6 +17,10 @@ export const TemplateEditorModal: React.FC = ({ onSave, onCancel, }) => { + const isCustom = useMemo( + () => (template ? isCustomTemplate(template) : true), + [template], + ); const [name, setName] = useState(template?.name || ""); const [description, setDescription] = useState(template?.description || ""); const [author, setAuthor] = useState(template?.author || ""); @@ -151,25 +156,35 @@ export const TemplateEditorModal: React.FC = ({ diff --git a/components/SettingsUI/TemplateItem.tsx b/components/SettingsUI/TemplateItem.tsx index eeb2daa..874c589 100644 --- a/components/SettingsUI/TemplateItem.tsx +++ b/components/SettingsUI/TemplateItem.tsx @@ -2,7 +2,7 @@ import React, { useMemo } from "react"; import { StatusTemplate } from "@/types/pluginSettings"; import { StatusDisplay } from "../atoms/StatusDisplay"; import { SelectableListItem } from "../atoms/SelectableListItem"; -import { isCustomTemplate } from "@/utils/templateUtils"; +import { isCustomTemplate, isTemplateModified } from "@/utils/templateUtils"; import { ObsidianIcon } from "../atoms/ObsidianIcon"; interface TemplateItemProps { @@ -22,9 +22,10 @@ export const TemplateItem: React.FC = ({ onDelete, onShare, }) => { - const isCustom = useMemo( - () => isCustomTemplate(template.id), - [template.id], + const isCustom = useMemo(() => isCustomTemplate(template), [template]); + const isModified = useMemo( + () => !isCustom && isTemplateModified(template), + [isCustom, template], ); const handleClick = (e: React.MouseEvent) => { @@ -36,7 +37,7 @@ export const TemplateItem: React.FC = ({ }; return ( -
+
= ({ {template.name} - {isCustomTemplate(template.id) && ( - - Custom - - )} +
+ {isEnabled ? ( + + Active + + ) : ( + + Inactive + + )} + {isCustom ? ( + + Custom + + ) : ( + + Marketplace + + )} + {isModified && ( + + Modified + + )} +
{template.description} diff --git a/components/atoms/Input.tsx b/components/atoms/Input.tsx index 142f210..4730079 100644 --- a/components/atoms/Input.tsx +++ b/components/atoms/Input.tsx @@ -11,6 +11,7 @@ interface BaseInputProps { style?: React.CSSProperties; onFocus?: () => void; onBlur?: () => void; + disabled?: boolean; } interface TextInputProps extends BaseInputProps { @@ -38,6 +39,7 @@ export const Input = React.forwardRef( style, onFocus, onBlur, + disabled, }, ref, ) => { @@ -67,6 +69,7 @@ export const Input = React.forwardRef( style={style} onFocus={onFocus} onBlur={onBlur} + disabled={disabled} /> ); }, diff --git a/styles/components/template-settings.css b/styles/components/template-settings.css index b26a7fb..8f1fb20 100644 --- a/styles/components/template-settings.css +++ b/styles/components/template-settings.css @@ -84,12 +84,20 @@ box-shadow: 0 2px 8px var(--shadow-color); } +.template-item.disabled { + opacity: 0.85; +} + .template-item.enabled { background: var(--background-modifier-hover); border-color: var(--interactive-accent); box-shadow: 0 0 0 1px var(--interactive-accent); } +.template-item.enabled .setting-item-name { + font-weight: var(--font-bold); +} + .template-item.enabled:hover { box-shadow: 0 2px 8px var(--shadow-color), @@ -114,20 +122,47 @@ margin-bottom: var(--size-2-1); } -.template-custom-badge { +.template-badges { display: flex; + gap: var(--size-2-2); +} + +.template-badge { + display: inline-flex; align-items: center; - gap: var(--size-2-1); - padding: var(--size-2-1) var(--size-2-2); - background: var(--interactive-accent); - color: var(--text-on-accent); - font-size: var(--font-ui-smaller); - font-weight: var(--font-medium); + padding: 2px 8px; border-radius: var(--radius-s); + font-size: 10px; + font-weight: var(--font-bold); text-transform: uppercase; letter-spacing: 0.05em; } +.badge-success { + background-color: var(--background-modifier-success); + color: var(--text-on-accent); +} + +.badge-muted { + background-color: var(--background-modifier-border); + color: var(--text-muted); +} + +.badge-accent { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} + +.badge-warning { + background-color: var(--background-modifier-warning); + color: var(--text-on-accent); +} + +.badge-info { + background-color: var(--background-modifier-info); + color: var(--text-on-accent); +} + /* Template Item Actions */ .template-item-actions { display: flex; @@ -386,13 +421,20 @@ } .marketplace-card-header { - margin-bottom: var(--size-2-2); + margin-bottom: var(--size-4-2); } .marketplace-card-title { font-weight: var(--font-bold); - font-size: var(--font-ui-medium); + font-size: var(--font-ui-large); color: var(--text-normal); + margin-bottom: var(--size-2-2); +} + +.marketplace-card-meta { + display: flex; + align-items: center; + gap: var(--size-2-2); } .marketplace-card-author { diff --git a/utils/templateUtils.ts b/utils/templateUtils.ts index 168966e..82f1f2a 100644 --- a/utils/templateUtils.ts +++ b/utils/templateUtils.ts @@ -3,11 +3,61 @@ import settingsService from "@/core/settingsService"; import { PREDEFINED_TEMPLATES } from "@/constants/predefinedTemplates"; /** - * Get all enabled templates + * Check if a template is a custom user template (not from marketplace) */ -export const isCustomTemplate = (templateId: string): boolean => { - const i = PREDEFINED_TEMPLATES.findIndex((t) => t.id === templateId); - return i === -1; +export const isCustomTemplate = (template: StatusTemplate): boolean => { + // Either matches an original marketplace template ID + const matchesPredefined = PREDEFINED_TEMPLATES.some( + (pt) => + pt.id === template.id || + pt.name.toLowerCase() === template.name.toLowerCase(), + ); + if (matchesPredefined) return false; + + // Or has metadata from marketplace + const hasMetadata = !!(template.author || template.github); + if (hasMetadata) return false; + + return true; +}; + +/** + * Check if a marketplace template has been modified by the user + */ +export const isTemplateModified = (template: StatusTemplate): boolean => { + const original = PREDEFINED_TEMPLATES.find( + (pt) => + pt.id === template.id || + pt.name.toLowerCase() === template.name.toLowerCase(), + ); + + if (!original) return false; + + // Compare relevant fields to see if anything changed + // We stringify for a deep comparison of statuses + const originalData = JSON.stringify({ + name: original.name, + description: original.description, + statuses: original.statuses.map((s) => ({ + name: s.name, + icon: s.icon, + lucideIcon: s.lucideIcon, + color: s.color, + })), + }); + + const currentData = JSON.stringify({ + name: template.name, + description: template.description, + statuses: template.statuses.map((s) => ({ + name: s.name, + icon: s.icon, + lucideIcon: s.lucideIcon, + color: s.color, + })), + }); + + return originalData !== currentData; }; /** From 25372276789764c688b170fdc478b69f88c5b2f0 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 16:58:41 +0100 Subject: [PATCH 16/23] chore: cleanup unused code and enhance marketplace author links --- README.md | 5 ++- .../SettingsUI/MarketplaceBrowseModal.tsx | 16 +++++++++- constants/predefinedTemplates.ts | 5 --- package.json | 4 +-- scripts/generate-templates.mjs | 32 ------------------- 5 files changed, 19 insertions(+), 43 deletions(-) delete mode 100644 scripts/generate-templates.mjs diff --git a/README.md b/README.md index d3b88f0..4257f6f 100644 --- a/README.md +++ b/README.md @@ -113,10 +113,9 @@ You can contribute your own status templates to the plugin! ] } ``` -4. Run `node scripts/generate-templates.mjs` to update the predefined templates. -5. Submit a Pull Request! +4. Submit a Pull Request with your JSON file! -Once accepted, your template will be available to all users of the plugin. +Once accepted, maintainers will include your template in the next plugin update. ## Installation diff --git a/components/SettingsUI/MarketplaceBrowseModal.tsx b/components/SettingsUI/MarketplaceBrowseModal.tsx index 578568e..b25ede2 100644 --- a/components/SettingsUI/MarketplaceBrowseModal.tsx +++ b/components/SettingsUI/MarketplaceBrowseModal.tsx @@ -59,7 +59,21 @@ export const MarketplaceBrowseModal: React.FC = ({ {template.author && (
- by {template.author} + by{" "} + {template.github ? ( + + e.stopPropagation() + } + > + {template.author} + + ) : ( + template.author + )}
)}
diff --git a/constants/predefinedTemplates.ts b/constants/predefinedTemplates.ts index 62e0e77..73acad1 100644 --- a/constants/predefinedTemplates.ts +++ b/constants/predefinedTemplates.ts @@ -249,8 +249,3 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ ], }, ]; - -/** - * Default template IDs that should be enabled by default - */ -export const DEFAULT_ENABLED_TEMPLATES = ["colorful"]; diff --git a/package.json b/package.json index 25237e4..bf836e7 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "Enhance your note organization with a status management system. Assign and track statuses (active, on hold, completed, dropped) for your notes with a customizable interface including status pane, dropdown, and file explorer integration.", "main": "main.js", "scripts": { - "dev": "node scripts/generate-templates.mjs && node esbuild.config.mjs", - "build": "node scripts/generate-templates.mjs && tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", + "dev": "node esbuild.config.mjs", + "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", "version": "node version-bump.mjs && git add manifest.json versions.json", "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,css,md}\"", "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,css,md}\"", diff --git a/scripts/generate-templates.mjs b/scripts/generate-templates.mjs deleted file mode 100644 index 758bca9..0000000 --- a/scripts/generate-templates.mjs +++ /dev/null @@ -1,32 +0,0 @@ -import fs from 'fs'; -import path from 'path'; - -const templatesDir = './templates'; -const outputFile = './constants/predefinedTemplates.ts'; - -const files = fs.readdirSync(templatesDir); -const templates = []; - -files.forEach(file => { - if (file.endsWith('.json')) { - const filePath = path.join(templatesDir, file); - const content = JSON.parse(fs.readFileSync(filePath, 'utf8')); - templates.push(content); - } -}); - -const content = `import { StatusTemplate } from "types/pluginSettings"; - -/** - * Predefined status templates generated from the templates directory - */ -export const PREDEFINED_TEMPLATES: StatusTemplate[] = ${JSON.stringify(templates, null, '\t')}; - -/** - * Default template IDs that should be enabled by default - */ -export const DEFAULT_ENABLED_TEMPLATES = ["colorful"]; -`; - -fs.writeFileSync(outputFile, content); -console.log(`Generated ${outputFile} with ${templates.length} templates.`); From bd0469f7c7a4bf1e04a6eece089d35355544d603 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 17:25:48 +0100 Subject: [PATCH 17/23] refactor: use templates/ folder as single source of truth and cleanup unused code --- README.md | 5 +- constants/predefinedTemplates.ts | 257 ++----------------------------- tsconfig.json | 3 +- utils/templateUtils.ts | 27 ---- 4 files changed, 17 insertions(+), 275 deletions(-) diff --git a/README.md b/README.md index 4257f6f..b5dcbe1 100644 --- a/README.md +++ b/README.md @@ -113,9 +113,10 @@ You can contribute your own status templates to the plugin! ] } ``` -4. Submit a Pull Request with your JSON file! +4. Register your template in `constants/predefinedTemplates.ts` by adding an import and adding it to the `PREDEFINED_TEMPLATES` array. +5. Submit a Pull Request! -Once accepted, maintainers will include your template in the next plugin update. +Once accepted, your template will be available in the marketplace for all users. ## Installation diff --git a/constants/predefinedTemplates.ts b/constants/predefinedTemplates.ts index 73acad1..eb27071 100644 --- a/constants/predefinedTemplates.ts +++ b/constants/predefinedTemplates.ts @@ -1,251 +1,18 @@ import { StatusTemplate } from "types/pluginSettings"; +import academic from "../templates/academic.json"; +import colorful from "../templates/colorful.json"; +import creativeWriting from "../templates/creative-writing.json"; +import minimal from "../templates/minimal.json"; +import project from "../templates/project.json"; /** - * Predefined status templates generated from the templates directory + * Predefined status templates imported directly from the templates directory. + * This file serves as an index for the marketplace. */ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ - { - id: "academic", - name: "Academic research", - description: "Status workflow for academic research and writing", - author: "Obsidian Note Status", - github: "https://github.com/devonthesofa/obsidian-note-status", - statuses: [ - { - name: "research", - icon: "πŸ”", - color: "#2196F3", - templateId: "academic", - }, - { - name: "outline", - icon: "πŸ“‘", - color: "#9E9E9E", - templateId: "academic", - }, - { - name: "draft", - icon: "✏️", - color: "#FFC107", - templateId: "academic", - }, - { - name: "review", - icon: "πŸ”¬", - color: "#9C27B0", - templateId: "academic", - }, - { - name: "revision", - icon: "πŸ“", - color: "#FF5722", - templateId: "academic", - }, - { - name: "final", - icon: "πŸ“š", - color: "#4CAF50", - templateId: "academic", - }, - { - name: "published", - icon: "πŸŽ“", - color: "#795548", - templateId: "academic", - }, - ], - }, - { - id: "colorful", - name: "Colorful workflow", - description: - "A colorful set of workflow statuses with descriptive icons", - author: "Obsidian Note Status", - github: "https://github.com/devonthesofa/obsidian-note-status", - statuses: [ - { - name: "idea", - icon: "πŸ’‘", - color: "#FFEB3B", - templateId: "colorful", - }, - { - name: "draft", - icon: "πŸ“", - color: "#E0E0E0", - templateId: "colorful", - }, - { - name: "inProgress", - icon: "πŸ”§", - color: "#FFC107", - templateId: "colorful", - }, - { - name: "editing", - icon: "πŸ–ŠοΈ", - color: "#2196F3", - templateId: "colorful", - }, - { - name: "pending", - icon: "⏳", - color: "#9C27B0", - templateId: "colorful", - }, - { - name: "onHold", - icon: "⏸", - color: "#9E9E9E", - templateId: "colorful", - }, - { - name: "needsUpdate", - icon: "πŸ”„", - color: "#FF5722", - templateId: "colorful", - }, - { - name: "completed", - icon: "βœ…", - color: "#4CAF50", - templateId: "colorful", - }, - { - name: "archived", - icon: "πŸ“¦", - color: "#795548", - templateId: "colorful", - }, - ], - }, - { - id: "creative-writing", - name: "Creative Writing", - description: "Workflow for novelists and creative writers", - author: "Obsidian Community", - github: "https://github.com/obsidian-community", - statuses: [ - { - name: "idea", - icon: "🧠", - color: "#FFD700", - templateId: "creative-writing", - }, - { - name: "outline", - icon: "πŸ—ΊοΈ", - color: "#87CEEB", - templateId: "creative-writing", - }, - { - name: "first-draft", - icon: "✍️", - color: "#FFA07A", - templateId: "creative-writing", - }, - { - name: "revision", - icon: "πŸ”", - color: "#DA70D6", - templateId: "creative-writing", - }, - { - name: "final-polish", - icon: "✨", - color: "#32CD32", - templateId: "creative-writing", - }, - ], - }, - { - id: "minimal", - name: "Minimal workflow", - description: "A simplified set of essential workflow statuses", - author: "Obsidian Note Status", - github: "https://github.com/devonthesofa/obsidian-note-status", - statuses: [ - { - name: "todo", - icon: "πŸ“Œ", - color: "#F44336", - templateId: "minimal", - }, - { - name: "inProgress", - icon: "βš™οΈ", - color: "#2196F3", - templateId: "minimal", - }, - { - name: "review", - icon: "πŸ‘€", - color: "#9C27B0", - templateId: "minimal", - }, - { - name: "done", - icon: "βœ“", - color: "#4CAF50", - templateId: "minimal", - }, - ], - }, - { - id: "project", - name: "Project management", - description: "Status workflow for project management and tracking", - author: "Obsidian Note Status", - github: "https://github.com/devonthesofa/obsidian-note-status", - statuses: [ - { - name: "planning", - icon: "πŸ—“οΈ", - color: "#9E9E9E", - templateId: "project", - }, - { - name: "backlog", - icon: "πŸ“‹", - color: "#E0E0E0", - templateId: "project", - }, - { - name: "ready", - icon: "🚦", - color: "#8BC34A", - templateId: "project", - }, - { - name: "inDevelopment", - icon: "πŸ‘¨β€πŸ’»", - color: "#2196F3", - templateId: "project", - }, - { - name: "testing", - icon: "πŸ§ͺ", - color: "#9C27B0", - templateId: "project", - }, - { - name: "review", - icon: "πŸ‘οΈ", - color: "#FFC107", - templateId: "project", - }, - { - name: "approved", - icon: "πŸ‘", - color: "#4CAF50", - templateId: "project", - }, - { - name: "live", - icon: "πŸš€", - color: "#3F51B5", - templateId: "project", - }, - ], - }, + academic as StatusTemplate, + colorful as StatusTemplate, + creativeWriting as StatusTemplate, + minimal as StatusTemplate, + project as StatusTemplate, ]; diff --git a/tsconfig.json b/tsconfig.json index f83eaba..7f0cec4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,7 +26,8 @@ "lib": ["DOM", "ES5", "ES6", "ES7"], "jsx": "react-jsx", "esModuleInterop": true, - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true }, "include": ["**/*.ts", "**/*.tsx"] } diff --git a/utils/templateUtils.ts b/utils/templateUtils.ts index 82f1f2a..d4f07b3 100644 --- a/utils/templateUtils.ts +++ b/utils/templateUtils.ts @@ -105,30 +105,3 @@ export const generateTemplateId = ( return id; }; -/** - * Generate a GitHub URL to submit a template to the marketplace - */ -export const getMarketplaceSubmissionUrl = ( - template: StatusTemplate, -): string => { - const baseUrl = - "https://github.com/devonthesofa/obsidian-note-status/new/master/templates"; - const filename = `${template.id.replace(/^custom-/, "")}.json`; - - // Create a clean version of the template for the marketplace - const marketplaceTemplate = { - ...template, - // Ensure the ID doesn't have the 'custom-' prefix for the marketplace - id: template.id.replace(/^custom-/, ""), - // Ensure statuses use the new ID - statuses: template.statuses.map((s) => ({ - ...s, - templateId: template.id.replace(/^custom-/, ""), - })), - }; - - const value = encodeURIComponent( - JSON.stringify(marketplaceTemplate, null, 2), - ); - return `${baseUrl}?filename=${filename}&value=${value}`; -}; From 0f810a79e10c8793937cd2884195edd1863134f0 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 17:53:23 +0100 Subject: [PATCH 18/23] feat: automate marketplace template registration during build process --- README.md | 5 +- constants/predefinedTemplates.ts | 294 +++++++++++++++++++++++++++++-- esbuild.config.mjs | 42 ++++- 3 files changed, 323 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index b5dcbe1..b965631 100644 --- a/README.md +++ b/README.md @@ -113,10 +113,9 @@ You can contribute your own status templates to the plugin! ] } ``` -4. Register your template in `constants/predefinedTemplates.ts` by adding an import and adding it to the `PREDEFINED_TEMPLATES` array. -5. Submit a Pull Request! +4. Submit a Pull Request with your JSON file! -Once accepted, your template will be available in the marketplace for all users. +Once accepted and merged, your template will be automatically included in the next build and available in the marketplace for all users. ## Installation diff --git a/constants/predefinedTemplates.ts b/constants/predefinedTemplates.ts index eb27071..1fb8ca5 100644 --- a/constants/predefinedTemplates.ts +++ b/constants/predefinedTemplates.ts @@ -1,18 +1,284 @@ -import { StatusTemplate } from "types/pluginSettings"; -import academic from "../templates/academic.json"; -import colorful from "../templates/colorful.json"; -import creativeWriting from "../templates/creative-writing.json"; -import minimal from "../templates/minimal.json"; -import project from "../templates/project.json"; - /** - * Predefined status templates imported directly from the templates directory. - * This file serves as an index for the marketplace. + * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT MANUALLY. + * To add a new template, create a JSON file in the /templates directory. */ +import { StatusTemplate } from "types/pluginSettings"; + export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ - academic as StatusTemplate, - colorful as StatusTemplate, - creativeWriting as StatusTemplate, - minimal as StatusTemplate, - project as StatusTemplate, + { + "id": "academic", + "name": "Academic research", + "description": "Status workflow for academic research and writing", + "author": "Obsidian Note Status", + "github": "https://github.com/devonthesofa/obsidian-note-status", + "statuses": [ + { + "name": "research", + "icon": "πŸ”", + "color": "#2196F3", + "templateId": "academic" + }, + { + "name": "outline", + "icon": "πŸ“‘", + "color": "#9E9E9E", + "templateId": "academic" + }, + { + "name": "draft", + "icon": "✏️", + "color": "#FFC107", + "templateId": "academic" + }, + { + "name": "review", + "icon": "πŸ”¬", + "color": "#9C27B0", + "templateId": "academic" + }, + { + "name": "revision", + "icon": "πŸ“", + "color": "#FF5722", + "templateId": "academic" + }, + { + "name": "final", + "icon": "πŸ“š", + "color": "#4CAF50", + "templateId": "academic" + }, + { + "name": "published", + "icon": "πŸŽ“", + "color": "#795548", + "templateId": "academic" + } + ] + }, + { + "id": "colorful", + "name": "Colorful workflow", + "description": "A colorful set of workflow statuses with descriptive icons", + "author": "Obsidian Note Status", + "github": "https://github.com/devonthesofa/obsidian-note-status", + "statuses": [ + { + "name": "idea", + "icon": "πŸ’‘", + "color": "#FFEB3B", + "templateId": "colorful" + }, + { + "name": "draft", + "icon": "πŸ“", + "color": "#E0E0E0", + "templateId": "colorful" + }, + { + "name": "inProgress", + "icon": "πŸ”§", + "color": "#FFC107", + "templateId": "colorful" + }, + { + "name": "editing", + "icon": "πŸ–ŠοΈ", + "color": "#2196F3", + "templateId": "colorful" + }, + { + "name": "pending", + "icon": "⏳", + "color": "#9C27B0", + "templateId": "colorful" + }, + { + "name": "onHold", + "icon": "⏸", + "color": "#9E9E9E", + "templateId": "colorful" + }, + { + "name": "needsUpdate", + "icon": "πŸ”„", + "color": "#FF5722", + "templateId": "colorful" + }, + { + "name": "completed", + "icon": "βœ…", + "color": "#4CAF50", + "templateId": "colorful" + }, + { + "name": "archived", + "icon": "πŸ“¦", + "color": "#795548", + "templateId": "colorful" + } + ] + }, + { + "id": "creative-writing", + "name": "Creative Writing", + "description": "Workflow for novelists and creative writers", + "author": "Obsidian Community", + "github": "https://github.com/obsidian-community", + "statuses": [ + { + "name": "idea", + "icon": "🧠", + "color": "#FFD700", + "templateId": "creative-writing" + }, + { + "name": "outline", + "icon": "πŸ—ΊοΈ", + "color": "#87CEEB", + "templateId": "creative-writing" + }, + { + "name": "first-draft", + "icon": "✍️", + "color": "#FFA07A", + "templateId": "creative-writing" + }, + { + "name": "revision", + "icon": "πŸ”", + "color": "#DA70D6", + "templateId": "creative-writing" + }, + { + "name": "final-polish", + "icon": "✨", + "color": "#32CD32", + "templateId": "creative-writing" + } + ] + }, + { + "id": "removeme", + "name": "I am a test", + "description": "asdfasdf", + "author": "asfdlei", + "github": "https://github.com/devonthesofa/obsidian-note-status", + "statuses": [ + { + "name": "hello", + "icon": "πŸ“Œ", + "color": "#F44336", + "templateId": "minimal" + }, + { + "name": "inProgress", + "icon": "βš™οΈ", + "color": "#2196F3", + "templateId": "minimal" + }, + { + "name": "review", + "icon": "πŸ‘€", + "color": "#9C27B0", + "templateId": "minimal" + }, + { + "name": "done", + "icon": "βœ“", + "color": "#4CAF50", + "templateId": "minimal" + } + ] + }, + { + "id": "minimal", + "name": "Minimal workflow", + "description": "A simplified set of essential workflow statuses", + "author": "Obsidian Note Status", + "github": "https://github.com/devonthesofa/obsidian-note-status", + "statuses": [ + { + "name": "todo", + "icon": "πŸ“Œ", + "color": "#F44336", + "templateId": "minimal" + }, + { + "name": "inProgress", + "icon": "βš™οΈ", + "color": "#2196F3", + "templateId": "minimal" + }, + { + "name": "review", + "icon": "πŸ‘€", + "color": "#9C27B0", + "templateId": "minimal" + }, + { + "name": "done", + "icon": "βœ“", + "color": "#4CAF50", + "templateId": "minimal" + } + ] + }, + { + "id": "project", + "name": "Project management", + "description": "Status workflow for project management and tracking", + "author": "Obsidian Note Status", + "github": "https://github.com/devonthesofa/obsidian-note-status", + "statuses": [ + { + "name": "planning", + "icon": "πŸ—“οΈ", + "color": "#9E9E9E", + "templateId": "project" + }, + { + "name": "backlog", + "icon": "πŸ“‹", + "color": "#E0E0E0", + "templateId": "project" + }, + { + "name": "ready", + "icon": "🚦", + "color": "#8BC34A", + "templateId": "project" + }, + { + "name": "inDevelopment", + "icon": "πŸ‘¨β€πŸ’»", + "color": "#2196F3", + "templateId": "project" + }, + { + "name": "testing", + "icon": "πŸ§ͺ", + "color": "#9C27B0", + "templateId": "project" + }, + { + "name": "review", + "icon": "πŸ‘οΈ", + "color": "#FFC107", + "templateId": "project" + }, + { + "name": "approved", + "icon": "πŸ‘", + "color": "#4CAF50", + "templateId": "project" + }, + { + "name": "live", + "icon": "πŸš€", + "color": "#3F51B5", + "templateId": "project" + } + ] + } ]; diff --git a/esbuild.config.mjs b/esbuild.config.mjs index f6dca29..6b64ec6 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -1,6 +1,8 @@ import esbuild from "esbuild"; import process from "process"; import builtins from "builtin-modules"; +import fs from "fs"; +import path from "path"; const banner = `/* @@ -9,7 +11,45 @@ if you want to view the source, please visit the github repository of this plugi */ `; -const prod = (process.argv[2] === "production"); +/** + * Automatically generates the predefinedTemplates.ts file by scanning the templates directory. + */ +const generateTemplatesIndex = () => { + const templatesDir = "./templates"; + const outputFile = "./constants/predefinedTemplates.ts"; + + if (!fs.existsSync(templatesDir)) return; + + const files = fs.readdirSync(templatesDir); + const templates = []; + + files.forEach((file) => { + if (file.endsWith(".json")) { + const filePath = path.join(templatesDir, file); + const content = JSON.parse(fs.readFileSync(filePath, "utf8")); + templates.push(content); + } + }); + + const content = `/** + * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT MANUALLY. + * To add a new template, create a JSON file in the /templates directory. + */ +import { StatusTemplate } from "types/pluginSettings"; + +export const PREDEFINED_TEMPLATES: StatusTemplate[] = ${JSON.stringify(templates, null, "\t")}; +`; + + fs.writeFileSync(outputFile, content); + console.log( + `\x1b[36m[Templates]\x1b[0m Automatically registered ${templates.length} templates.`, + ); +}; + +// Generate templates index before build +generateTemplatesIndex(); + +const prod = process.argv[2] === "production"; // CSS bundling function const buildStyles = async () => { From e141c8c72941188bb49a1d6e3ff016962509d187 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 18:10:00 +0100 Subject: [PATCH 19/23] refactor: replace separate author and github fields with authorGithub username --- README.md | 35 +++++--------- .../SettingsUI/MarketplaceBrowseModal.tsx | 26 +++++----- components/SettingsUI/TemplateEditorModal.tsx | 35 ++++---------- components/SettingsUI/TemplateItem.tsx | 23 ++++----- constants/predefinedTemplates.ts | 48 ++----------------- templates/academic.json | 3 +- templates/colorful.json | 3 +- templates/creative-writing.json | 3 +- templates/minimal.json | 3 +- templates/project.json | 3 +- types/pluginSettings.ts | 3 +- utils/templateUtils.ts | 2 +- 12 files changed, 53 insertions(+), 134 deletions(-) diff --git a/README.md b/README.md index b965631..dc931f5 100644 --- a/README.md +++ b/README.md @@ -90,29 +90,18 @@ You can contribute your own status templates to the plugin! ... 2. Create a new JSON file in the `templates/` folder (e.g., `templates/my-awesome-workflow.json`). 3. Follow this format: - ```json - { - "id": "my-awesome-workflow", - "name": "My Awesome Workflow", - "description": "A workflow for doing awesome things", - "author": "Your Name", - "github": "https://github.com/your-username", - "statuses": [ - { - "name": "todo", - "icon": "πŸ“", - "color": "#ff0000", - "templateId": "my-awesome-workflow" - }, - { - "name": "done", - "icon": "βœ…", - "color": "#00ff00", - "templateId": "my-awesome-workflow" - } - ] - } - ``` + ```json + { + "id": "my-awesome-workflow", + "name": "My Awesome Workflow", + "description": "A workflow for doing awesome things", + "authorGithub": "your-username", + "statuses": [ + { "name": "todo", "icon": "πŸ“", "color": "#ff0000", "templateId": "my-awesome-workflow" }, + { "name": "done", "icon": "βœ…", "color": "#00ff00", "templateId": "my-awesome-workflow" } + ] + } + ``` 4. Submit a Pull Request with your JSON file! Once accepted and merged, your template will be automatically included in the next build and available in the marketplace for all users. diff --git a/components/SettingsUI/MarketplaceBrowseModal.tsx b/components/SettingsUI/MarketplaceBrowseModal.tsx index b25ede2..f3bfa65 100644 --- a/components/SettingsUI/MarketplaceBrowseModal.tsx +++ b/components/SettingsUI/MarketplaceBrowseModal.tsx @@ -57,23 +57,19 @@ export const MarketplaceBrowseModal: React.FC = ({ Marketplace - {template.author && ( + {template.authorGithub && ( )}
diff --git a/components/SettingsUI/TemplateEditorModal.tsx b/components/SettingsUI/TemplateEditorModal.tsx index 741a1f2..67a3900 100644 --- a/components/SettingsUI/TemplateEditorModal.tsx +++ b/components/SettingsUI/TemplateEditorModal.tsx @@ -23,8 +23,9 @@ export const TemplateEditorModal: React.FC = ({ ); const [name, setName] = useState(template?.name || ""); const [description, setDescription] = useState(template?.description || ""); - const [author, setAuthor] = useState(template?.author || ""); - const [github, setGithub] = useState(template?.github || ""); + const [authorGithub, setAuthorGithub] = useState( + template?.authorGithub || "", + ); const [statuses, setStatuses] = useState( template?.statuses || [ { @@ -59,8 +60,7 @@ export const TemplateEditorModal: React.FC = ({ id: templateId, name: name.trim(), description: description.trim(), - author: author.trim() || undefined, - github: github.trim() || undefined, + authorGithub: authorGithub.trim() || undefined, statuses: statusesWithTemplateId, }; @@ -155,35 +155,18 @@ export const TemplateEditorModal: React.FC = ({ - - - - diff --git a/components/SettingsUI/TemplateItem.tsx b/components/SettingsUI/TemplateItem.tsx index 874c589..f376c94 100644 --- a/components/SettingsUI/TemplateItem.tsx +++ b/components/SettingsUI/TemplateItem.tsx @@ -84,22 +84,17 @@ export const TemplateItem: React.FC = ({
{template.description} - {(template.author || template.github) && ( + {template.authorGithub && ( )}
diff --git a/constants/predefinedTemplates.ts b/constants/predefinedTemplates.ts index 1fb8ca5..47aadc4 100644 --- a/constants/predefinedTemplates.ts +++ b/constants/predefinedTemplates.ts @@ -9,8 +9,7 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ "id": "academic", "name": "Academic research", "description": "Status workflow for academic research and writing", - "author": "Obsidian Note Status", - "github": "https://github.com/devonthesofa/obsidian-note-status", + "authorGithub": "soler1212", "statuses": [ { "name": "research", @@ -60,8 +59,7 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ "id": "colorful", "name": "Colorful workflow", "description": "A colorful set of workflow statuses with descriptive icons", - "author": "Obsidian Note Status", - "github": "https://github.com/devonthesofa/obsidian-note-status", + "authorGithub": "soler1212", "statuses": [ { "name": "idea", @@ -123,8 +121,7 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ "id": "creative-writing", "name": "Creative Writing", "description": "Workflow for novelists and creative writers", - "author": "Obsidian Community", - "github": "https://github.com/obsidian-community", + "authorGithub": "soler1212", "statuses": [ { "name": "idea", @@ -158,45 +155,11 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ } ] }, - { - "id": "removeme", - "name": "I am a test", - "description": "asdfasdf", - "author": "asfdlei", - "github": "https://github.com/devonthesofa/obsidian-note-status", - "statuses": [ - { - "name": "hello", - "icon": "πŸ“Œ", - "color": "#F44336", - "templateId": "minimal" - }, - { - "name": "inProgress", - "icon": "βš™οΈ", - "color": "#2196F3", - "templateId": "minimal" - }, - { - "name": "review", - "icon": "πŸ‘€", - "color": "#9C27B0", - "templateId": "minimal" - }, - { - "name": "done", - "icon": "βœ“", - "color": "#4CAF50", - "templateId": "minimal" - } - ] - }, { "id": "minimal", "name": "Minimal workflow", "description": "A simplified set of essential workflow statuses", - "author": "Obsidian Note Status", - "github": "https://github.com/devonthesofa/obsidian-note-status", + "authorGithub": "soler1212", "statuses": [ { "name": "todo", @@ -228,8 +191,7 @@ export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ "id": "project", "name": "Project management", "description": "Status workflow for project management and tracking", - "author": "Obsidian Note Status", - "github": "https://github.com/devonthesofa/obsidian-note-status", + "authorGithub": "soler1212", "statuses": [ { "name": "planning", diff --git a/templates/academic.json b/templates/academic.json index 86bff2c..f3e5337 100644 --- a/templates/academic.json +++ b/templates/academic.json @@ -2,8 +2,7 @@ "id": "academic", "name": "Academic research", "description": "Status workflow for academic research and writing", - "author": "Obsidian Note Status", - "github": "https://github.com/devonthesofa/obsidian-note-status", + "authorGithub": "soler1212", "statuses": [ { "name": "research", diff --git a/templates/colorful.json b/templates/colorful.json index 182aedb..27ecd66 100644 --- a/templates/colorful.json +++ b/templates/colorful.json @@ -2,8 +2,7 @@ "id": "colorful", "name": "Colorful workflow", "description": "A colorful set of workflow statuses with descriptive icons", - "author": "Obsidian Note Status", - "github": "https://github.com/devonthesofa/obsidian-note-status", + "authorGithub": "soler1212", "statuses": [ { "name": "idea", diff --git a/templates/creative-writing.json b/templates/creative-writing.json index eca6bf4..10c8cd0 100644 --- a/templates/creative-writing.json +++ b/templates/creative-writing.json @@ -2,8 +2,7 @@ "id": "creative-writing", "name": "Creative Writing", "description": "Workflow for novelists and creative writers", - "author": "Obsidian Community", - "github": "https://github.com/obsidian-community", + "authorGithub": "soler1212", "statuses": [ { "name": "idea", diff --git a/templates/minimal.json b/templates/minimal.json index 7de688e..bcc3bd8 100644 --- a/templates/minimal.json +++ b/templates/minimal.json @@ -2,8 +2,7 @@ "id": "minimal", "name": "Minimal workflow", "description": "A simplified set of essential workflow statuses", - "author": "Obsidian Note Status", - "github": "https://github.com/devonthesofa/obsidian-note-status", + "authorGithub": "soler1212", "statuses": [ { "name": "todo", diff --git a/templates/project.json b/templates/project.json index cd2cc2c..8f309d8 100644 --- a/templates/project.json +++ b/templates/project.json @@ -2,8 +2,7 @@ "id": "project", "name": "Project management", "description": "Status workflow for project management and tracking", - "author": "Obsidian Note Status", - "github": "https://github.com/devonthesofa/obsidian-note-status", + "authorGithub": "soler1212", "statuses": [ { "name": "planning", diff --git a/types/pluginSettings.ts b/types/pluginSettings.ts index a00d335..1faa01f 100644 --- a/types/pluginSettings.ts +++ b/types/pluginSettings.ts @@ -19,8 +19,7 @@ export interface StatusTemplate { id: string; name: string; description: string; - author?: string; - github?: string; + authorGithub?: string; statuses: NoteStatus[]; } diff --git a/utils/templateUtils.ts b/utils/templateUtils.ts index d4f07b3..a4d9d1a 100644 --- a/utils/templateUtils.ts +++ b/utils/templateUtils.ts @@ -15,7 +15,7 @@ export const isCustomTemplate = (template: StatusTemplate): boolean => { if (matchesPredefined) return false; // Or has metadata from marketplace - const hasMetadata = !!(template.author || template.github); + const hasMetadata = !!template.authorGithub; if (hasMetadata) return false; return true; From 9351ccc4da8a63c809388e5f586903e307608cea Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 18:19:38 +0100 Subject: [PATCH 20/23] chore: set the starter template for new users --- constants/defaultSettings.ts | 38 ++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/constants/defaultSettings.ts b/constants/defaultSettings.ts index 4264818..a28f31f 100644 --- a/constants/defaultSettings.ts +++ b/constants/defaultSettings.ts @@ -14,7 +14,41 @@ export const DEFAULT_PLUGIN_SETTINGS: PluginSettings = { showStatusBar: true, autoHideStatusBar: false, enableStatusOverviewPopup: true, - templates: [], + templates: [ + { + id: "default-starter", + name: "Starter Template", + description: + "A simplified set of essential workflow statuses to get you started.", + authorGithub: "soler1212", + statuses: [ + { + name: "todo", + icon: "πŸ“Œ", + color: "#F44336", + templateId: "default-starter", + }, + { + name: "inProgress", + icon: "βš™οΈ", + color: "#2196F3", + templateId: "default-starter", + }, + { + name: "review", + icon: "πŸ‘€", + color: "#9C27B0", + templateId: "default-starter", + }, + { + name: "done", + icon: "βœ“", + color: "#4CAF50", + templateId: "default-starter", + }, + ], + }, + ], customStatuses: [], showStatusIconsInExplorer: true, hideUnknownStatusInExplorer: true, // Default to hide unknown status @@ -26,7 +60,7 @@ export const DEFAULT_PLUGIN_SETTINGS: PluginSettings = { enableExperimentalFeatures: true, enableStatusDashboard: true, enableGroupedStatusView: true, - enabledTemplates: [], + enabledTemplates: ["default-starter"], useCustomStatusesOnly: false, useMultipleStatuses: true, singleStatusStorageMode: "list", From fcd5d114eca48108655be45a86e97148a02b8a05 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 18:34:52 +0100 Subject: [PATCH 21/23] chore: add starer template to templates --- constants/predefinedTemplates.ts | 370 +++++++++++++++++-------------- templates/starter-template.json | 32 +++ 2 files changed, 234 insertions(+), 168 deletions(-) create mode 100644 templates/starter-template.json diff --git a/constants/predefinedTemplates.ts b/constants/predefinedTemplates.ts index 47aadc4..a5753fb 100644 --- a/constants/predefinedTemplates.ts +++ b/constants/predefinedTemplates.ts @@ -6,241 +6,275 @@ import { StatusTemplate } from "types/pluginSettings"; export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ { - "id": "academic", - "name": "Academic research", - "description": "Status workflow for academic research and writing", - "authorGithub": "soler1212", - "statuses": [ + id: "academic", + name: "Academic research", + description: "Status workflow for academic research and writing", + authorGithub: "soler1212", + statuses: [ { - "name": "research", - "icon": "πŸ”", - "color": "#2196F3", - "templateId": "academic" + name: "research", + icon: "πŸ”", + color: "#2196F3", + templateId: "academic", }, { - "name": "outline", - "icon": "πŸ“‘", - "color": "#9E9E9E", - "templateId": "academic" + name: "outline", + icon: "πŸ“‘", + color: "#9E9E9E", + templateId: "academic", }, { - "name": "draft", - "icon": "✏️", - "color": "#FFC107", - "templateId": "academic" + name: "draft", + icon: "✏️", + color: "#FFC107", + templateId: "academic", }, { - "name": "review", - "icon": "πŸ”¬", - "color": "#9C27B0", - "templateId": "academic" + name: "review", + icon: "πŸ”¬", + color: "#9C27B0", + templateId: "academic", }, { - "name": "revision", - "icon": "πŸ“", - "color": "#FF5722", - "templateId": "academic" + name: "revision", + icon: "πŸ“", + color: "#FF5722", + templateId: "academic", }, { - "name": "final", - "icon": "πŸ“š", - "color": "#4CAF50", - "templateId": "academic" + name: "final", + icon: "πŸ“š", + color: "#4CAF50", + templateId: "academic", }, { - "name": "published", - "icon": "πŸŽ“", - "color": "#795548", - "templateId": "academic" - } - ] + name: "published", + icon: "πŸŽ“", + color: "#795548", + templateId: "academic", + }, + ], }, { - "id": "colorful", - "name": "Colorful workflow", - "description": "A colorful set of workflow statuses with descriptive icons", - "authorGithub": "soler1212", - "statuses": [ + id: "colorful", + name: "Colorful workflow", + description: + "A colorful set of workflow statuses with descriptive icons", + authorGithub: "soler1212", + statuses: [ { - "name": "idea", - "icon": "πŸ’‘", - "color": "#FFEB3B", - "templateId": "colorful" + name: "idea", + icon: "πŸ’‘", + color: "#FFEB3B", + templateId: "colorful", }, { - "name": "draft", - "icon": "πŸ“", - "color": "#E0E0E0", - "templateId": "colorful" + name: "draft", + icon: "πŸ“", + color: "#E0E0E0", + templateId: "colorful", }, { - "name": "inProgress", - "icon": "πŸ”§", - "color": "#FFC107", - "templateId": "colorful" + name: "inProgress", + icon: "πŸ”§", + color: "#FFC107", + templateId: "colorful", }, { - "name": "editing", - "icon": "πŸ–ŠοΈ", - "color": "#2196F3", - "templateId": "colorful" + name: "editing", + icon: "πŸ–ŠοΈ", + color: "#2196F3", + templateId: "colorful", }, { - "name": "pending", - "icon": "⏳", - "color": "#9C27B0", - "templateId": "colorful" + name: "pending", + icon: "⏳", + color: "#9C27B0", + templateId: "colorful", }, { - "name": "onHold", - "icon": "⏸", - "color": "#9E9E9E", - "templateId": "colorful" + name: "onHold", + icon: "⏸", + color: "#9E9E9E", + templateId: "colorful", }, { - "name": "needsUpdate", - "icon": "πŸ”„", - "color": "#FF5722", - "templateId": "colorful" + name: "needsUpdate", + icon: "πŸ”„", + color: "#FF5722", + templateId: "colorful", }, { - "name": "completed", - "icon": "βœ…", - "color": "#4CAF50", - "templateId": "colorful" + name: "completed", + icon: "βœ…", + color: "#4CAF50", + templateId: "colorful", }, { - "name": "archived", - "icon": "πŸ“¦", - "color": "#795548", - "templateId": "colorful" - } - ] + name: "archived", + icon: "πŸ“¦", + color: "#795548", + templateId: "colorful", + }, + ], }, { - "id": "creative-writing", - "name": "Creative Writing", - "description": "Workflow for novelists and creative writers", - "authorGithub": "soler1212", - "statuses": [ + id: "creative-writing", + name: "Creative Writing", + description: "Workflow for novelists and creative writers", + authorGithub: "soler1212", + statuses: [ { - "name": "idea", - "icon": "🧠", - "color": "#FFD700", - "templateId": "creative-writing" + name: "idea", + icon: "🧠", + color: "#FFD700", + templateId: "creative-writing", }, { - "name": "outline", - "icon": "πŸ—ΊοΈ", - "color": "#87CEEB", - "templateId": "creative-writing" + name: "outline", + icon: "πŸ—ΊοΈ", + color: "#87CEEB", + templateId: "creative-writing", }, { - "name": "first-draft", - "icon": "✍️", - "color": "#FFA07A", - "templateId": "creative-writing" + name: "first-draft", + icon: "✍️", + color: "#FFA07A", + templateId: "creative-writing", }, { - "name": "revision", - "icon": "πŸ”", - "color": "#DA70D6", - "templateId": "creative-writing" + name: "revision", + icon: "πŸ”", + color: "#DA70D6", + templateId: "creative-writing", }, { - "name": "final-polish", - "icon": "✨", - "color": "#32CD32", - "templateId": "creative-writing" - } - ] + name: "final-polish", + icon: "✨", + color: "#32CD32", + templateId: "creative-writing", + }, + ], }, { - "id": "minimal", - "name": "Minimal workflow", - "description": "A simplified set of essential workflow statuses", - "authorGithub": "soler1212", - "statuses": [ + id: "minimal", + name: "Minimal workflow", + description: "A simplified set of essential workflow statuses", + authorGithub: "soler1212", + statuses: [ { - "name": "todo", - "icon": "πŸ“Œ", - "color": "#F44336", - "templateId": "minimal" + name: "todo", + icon: "πŸ“Œ", + color: "#F44336", + templateId: "minimal", }, { - "name": "inProgress", - "icon": "βš™οΈ", - "color": "#2196F3", - "templateId": "minimal" + name: "inProgress", + icon: "βš™οΈ", + color: "#2196F3", + templateId: "minimal", }, { - "name": "review", - "icon": "πŸ‘€", - "color": "#9C27B0", - "templateId": "minimal" + name: "review", + icon: "πŸ‘€", + color: "#9C27B0", + templateId: "minimal", }, { - "name": "done", - "icon": "βœ“", - "color": "#4CAF50", - "templateId": "minimal" - } - ] + name: "done", + icon: "βœ“", + color: "#4CAF50", + templateId: "minimal", + }, + ], }, { - "id": "project", - "name": "Project management", - "description": "Status workflow for project management and tracking", - "authorGithub": "soler1212", - "statuses": [ + id: "project", + name: "Project management", + description: "Status workflow for project management and tracking", + authorGithub: "soler1212", + statuses: [ { - "name": "planning", - "icon": "πŸ—“οΈ", - "color": "#9E9E9E", - "templateId": "project" + name: "planning", + icon: "πŸ—“οΈ", + color: "#9E9E9E", + templateId: "project", }, { - "name": "backlog", - "icon": "πŸ“‹", - "color": "#E0E0E0", - "templateId": "project" + name: "backlog", + icon: "πŸ“‹", + color: "#E0E0E0", + templateId: "project", }, { - "name": "ready", - "icon": "🚦", - "color": "#8BC34A", - "templateId": "project" + name: "ready", + icon: "🚦", + color: "#8BC34A", + templateId: "project", }, { - "name": "inDevelopment", - "icon": "πŸ‘¨β€πŸ’»", - "color": "#2196F3", - "templateId": "project" + name: "inDevelopment", + icon: "πŸ‘¨β€πŸ’»", + color: "#2196F3", + templateId: "project", }, { - "name": "testing", - "icon": "πŸ§ͺ", - "color": "#9C27B0", - "templateId": "project" + name: "testing", + icon: "πŸ§ͺ", + color: "#9C27B0", + templateId: "project", }, { - "name": "review", - "icon": "πŸ‘οΈ", - "color": "#FFC107", - "templateId": "project" + name: "review", + icon: "πŸ‘οΈ", + color: "#FFC107", + templateId: "project", }, { - "name": "approved", - "icon": "πŸ‘", - "color": "#4CAF50", - "templateId": "project" + name: "approved", + icon: "πŸ‘", + color: "#4CAF50", + templateId: "project", }, { - "name": "live", - "icon": "πŸš€", - "color": "#3F51B5", - "templateId": "project" - } - ] - } + name: "live", + icon: "πŸš€", + color: "#3F51B5", + templateId: "project", + }, + ], + }, + { + id: "default-starter", + name: "Starter Template", + description: + "A simplified set of essential workflow statuses to get you started.", + authorGithub: "soler1212", + statuses: [ + { + name: "todo", + icon: "πŸ“Œ", + color: "#F44336", + templateId: "default-starter", + }, + { + name: "inProgress", + icon: "βš™οΈ", + color: "#2196F3", + templateId: "default-starter", + }, + { + name: "review", + icon: "πŸ‘€", + color: "#9C27B0", + templateId: "default-starter", + }, + { + name: "done", + icon: "βœ“", + color: "#4CAF50", + templateId: "default-starter", + }, + ], + }, ]; diff --git a/templates/starter-template.json b/templates/starter-template.json new file mode 100644 index 0000000..744a3de --- /dev/null +++ b/templates/starter-template.json @@ -0,0 +1,32 @@ +{ + "id": "default-starter", + "name": "Starter Template", + "description": "A simplified set of essential workflow statuses to get you started.", + "authorGithub": "soler1212", + "statuses": [ + { + "name": "todo", + "icon": "πŸ“Œ", + "color": "#F44336", + "templateId": "default-starter" + }, + { + "name": "inProgress", + "icon": "βš™οΈ", + "color": "#2196F3", + "templateId": "default-starter" + }, + { + "name": "review", + "icon": "πŸ‘€", + "color": "#9C27B0", + "templateId": "default-starter" + }, + { + "name": "done", + "icon": "βœ“", + "color": "#4CAF50", + "templateId": "default-starter" + } + ] +} From 712ab7bc6b0f916cd9d24b4c4b60c7334ca8885f Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 18:35:56 +0100 Subject: [PATCH 22/23] Rename starter-template.json to default-starter.json --- templates/{starter-template.json => default-starter.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename templates/{starter-template.json => default-starter.json} (100%) diff --git a/templates/starter-template.json b/templates/default-starter.json similarity index 100% rename from templates/starter-template.json rename to templates/default-starter.json From 782e9f14a8d103f44e87f0af0595650675324573 Mon Sep 17 00:00:00 2001 From: Aleix Soler Date: Wed, 18 Mar 2026 19:02:33 +0100 Subject: [PATCH 23/23] fix: preserve original template IDs during migration and installation for legacy compatibility --- components/SettingsUI/TemplateSettings.tsx | 25 +- constants/defaultSettings.ts | 38 +- constants/predefinedTemplates.ts | 398 ++++++++++----------- core/settingsService.ts | 101 +++++- 4 files changed, 318 insertions(+), 244 deletions(-) diff --git a/components/SettingsUI/TemplateSettings.tsx b/components/SettingsUI/TemplateSettings.tsx index 033c79a..32c4a82 100644 --- a/components/SettingsUI/TemplateSettings.tsx +++ b/components/SettingsUI/TemplateSettings.tsx @@ -69,7 +69,15 @@ export const TemplateSettings: React.FC = ({ ); return; } - const newId = generateTemplateId(template.name, settings.templates); + + // Try to use the original ID if it's unique, otherwise generate a new one + const isIdUnique = !settings.templates.some( + (t) => t.id === template.id, + ); + const newId = isIdUnique + ? template.id + : generateTemplateId(template.name, settings.templates); + const installedTemplate: StatusTemplate = { ...template, id: newId, @@ -105,11 +113,16 @@ export const TemplateSettings: React.FC = ({ ); onChange("templates", updatedTemplates); } else { - // Add new template - generate unique ID - const uniqueId = generateTemplateId( - template.name, - settings.templates, - ); + // Add new template + // Try to use the original ID if it's unique, otherwise generate a new one + const isIdUnique = + template.id && + !settings.templates.some((t) => t.id === template.id); + + const uniqueId = isIdUnique + ? template.id + : generateTemplateId(template.name, settings.templates); + finalTemplate = { ...template, id: uniqueId }; // Update statuses with the final template ID diff --git a/constants/defaultSettings.ts b/constants/defaultSettings.ts index a28f31f..4264818 100644 --- a/constants/defaultSettings.ts +++ b/constants/defaultSettings.ts @@ -14,41 +14,7 @@ export const DEFAULT_PLUGIN_SETTINGS: PluginSettings = { showStatusBar: true, autoHideStatusBar: false, enableStatusOverviewPopup: true, - templates: [ - { - id: "default-starter", - name: "Starter Template", - description: - "A simplified set of essential workflow statuses to get you started.", - authorGithub: "soler1212", - statuses: [ - { - name: "todo", - icon: "πŸ“Œ", - color: "#F44336", - templateId: "default-starter", - }, - { - name: "inProgress", - icon: "βš™οΈ", - color: "#2196F3", - templateId: "default-starter", - }, - { - name: "review", - icon: "πŸ‘€", - color: "#9C27B0", - templateId: "default-starter", - }, - { - name: "done", - icon: "βœ“", - color: "#4CAF50", - templateId: "default-starter", - }, - ], - }, - ], + templates: [], customStatuses: [], showStatusIconsInExplorer: true, hideUnknownStatusInExplorer: true, // Default to hide unknown status @@ -60,7 +26,7 @@ export const DEFAULT_PLUGIN_SETTINGS: PluginSettings = { enableExperimentalFeatures: true, enableStatusDashboard: true, enableGroupedStatusView: true, - enabledTemplates: ["default-starter"], + enabledTemplates: [], useCustomStatusesOnly: false, useMultipleStatuses: true, singleStatusStorageMode: "list", diff --git a/constants/predefinedTemplates.ts b/constants/predefinedTemplates.ts index a5753fb..e6a914e 100644 --- a/constants/predefinedTemplates.ts +++ b/constants/predefinedTemplates.ts @@ -6,275 +6,273 @@ import { StatusTemplate } from "types/pluginSettings"; export const PREDEFINED_TEMPLATES: StatusTemplate[] = [ { - id: "academic", - name: "Academic research", - description: "Status workflow for academic research and writing", - authorGithub: "soler1212", - statuses: [ + "id": "academic", + "name": "Academic research", + "description": "Status workflow for academic research and writing", + "authorGithub": "soler1212", + "statuses": [ { - name: "research", - icon: "πŸ”", - color: "#2196F3", - templateId: "academic", + "name": "research", + "icon": "πŸ”", + "color": "#2196F3", + "templateId": "academic" }, { - name: "outline", - icon: "πŸ“‘", - color: "#9E9E9E", - templateId: "academic", + "name": "outline", + "icon": "πŸ“‘", + "color": "#9E9E9E", + "templateId": "academic" }, { - name: "draft", - icon: "✏️", - color: "#FFC107", - templateId: "academic", + "name": "draft", + "icon": "✏️", + "color": "#FFC107", + "templateId": "academic" }, { - name: "review", - icon: "πŸ”¬", - color: "#9C27B0", - templateId: "academic", + "name": "review", + "icon": "πŸ”¬", + "color": "#9C27B0", + "templateId": "academic" }, { - name: "revision", - icon: "πŸ“", - color: "#FF5722", - templateId: "academic", + "name": "revision", + "icon": "πŸ“", + "color": "#FF5722", + "templateId": "academic" }, { - name: "final", - icon: "πŸ“š", - color: "#4CAF50", - templateId: "academic", + "name": "final", + "icon": "πŸ“š", + "color": "#4CAF50", + "templateId": "academic" }, { - name: "published", - icon: "πŸŽ“", - color: "#795548", - templateId: "academic", - }, - ], + "name": "published", + "icon": "πŸŽ“", + "color": "#795548", + "templateId": "academic" + } + ] }, { - id: "colorful", - name: "Colorful workflow", - description: - "A colorful set of workflow statuses with descriptive icons", - authorGithub: "soler1212", - statuses: [ + "id": "colorful", + "name": "Colorful workflow", + "description": "A colorful set of workflow statuses with descriptive icons", + "authorGithub": "soler1212", + "statuses": [ { - name: "idea", - icon: "πŸ’‘", - color: "#FFEB3B", - templateId: "colorful", + "name": "idea", + "icon": "πŸ’‘", + "color": "#FFEB3B", + "templateId": "colorful" }, { - name: "draft", - icon: "πŸ“", - color: "#E0E0E0", - templateId: "colorful", + "name": "draft", + "icon": "πŸ“", + "color": "#E0E0E0", + "templateId": "colorful" }, { - name: "inProgress", - icon: "πŸ”§", - color: "#FFC107", - templateId: "colorful", + "name": "inProgress", + "icon": "πŸ”§", + "color": "#FFC107", + "templateId": "colorful" }, { - name: "editing", - icon: "πŸ–ŠοΈ", - color: "#2196F3", - templateId: "colorful", + "name": "editing", + "icon": "πŸ–ŠοΈ", + "color": "#2196F3", + "templateId": "colorful" }, { - name: "pending", - icon: "⏳", - color: "#9C27B0", - templateId: "colorful", + "name": "pending", + "icon": "⏳", + "color": "#9C27B0", + "templateId": "colorful" }, { - name: "onHold", - icon: "⏸", - color: "#9E9E9E", - templateId: "colorful", + "name": "onHold", + "icon": "⏸", + "color": "#9E9E9E", + "templateId": "colorful" }, { - name: "needsUpdate", - icon: "πŸ”„", - color: "#FF5722", - templateId: "colorful", + "name": "needsUpdate", + "icon": "πŸ”„", + "color": "#FF5722", + "templateId": "colorful" }, { - name: "completed", - icon: "βœ…", - color: "#4CAF50", - templateId: "colorful", + "name": "completed", + "icon": "βœ…", + "color": "#4CAF50", + "templateId": "colorful" }, { - name: "archived", - icon: "πŸ“¦", - color: "#795548", - templateId: "colorful", - }, - ], + "name": "archived", + "icon": "πŸ“¦", + "color": "#795548", + "templateId": "colorful" + } + ] }, { - id: "creative-writing", - name: "Creative Writing", - description: "Workflow for novelists and creative writers", - authorGithub: "soler1212", - statuses: [ + "id": "creative-writing", + "name": "Creative Writing", + "description": "Workflow for novelists and creative writers", + "authorGithub": "soler1212", + "statuses": [ { - name: "idea", - icon: "🧠", - color: "#FFD700", - templateId: "creative-writing", + "name": "idea", + "icon": "🧠", + "color": "#FFD700", + "templateId": "creative-writing" }, { - name: "outline", - icon: "πŸ—ΊοΈ", - color: "#87CEEB", - templateId: "creative-writing", + "name": "outline", + "icon": "πŸ—ΊοΈ", + "color": "#87CEEB", + "templateId": "creative-writing" }, { - name: "first-draft", - icon: "✍️", - color: "#FFA07A", - templateId: "creative-writing", + "name": "first-draft", + "icon": "✍️", + "color": "#FFA07A", + "templateId": "creative-writing" }, { - name: "revision", - icon: "πŸ”", - color: "#DA70D6", - templateId: "creative-writing", + "name": "revision", + "icon": "πŸ”", + "color": "#DA70D6", + "templateId": "creative-writing" }, { - name: "final-polish", - icon: "✨", - color: "#32CD32", - templateId: "creative-writing", - }, - ], + "name": "final-polish", + "icon": "✨", + "color": "#32CD32", + "templateId": "creative-writing" + } + ] }, { - id: "minimal", - name: "Minimal workflow", - description: "A simplified set of essential workflow statuses", - authorGithub: "soler1212", - statuses: [ + "id": "default-starter", + "name": "Starter Template", + "description": "A simplified set of essential workflow statuses to get you started.", + "authorGithub": "soler1212", + "statuses": [ { - name: "todo", - icon: "πŸ“Œ", - color: "#F44336", - templateId: "minimal", + "name": "todo", + "icon": "πŸ“Œ", + "color": "#F44336", + "templateId": "default-starter" }, { - name: "inProgress", - icon: "βš™οΈ", - color: "#2196F3", - templateId: "minimal", + "name": "inProgress", + "icon": "βš™οΈ", + "color": "#2196F3", + "templateId": "default-starter" }, { - name: "review", - icon: "πŸ‘€", - color: "#9C27B0", - templateId: "minimal", + "name": "review", + "icon": "πŸ‘€", + "color": "#9C27B0", + "templateId": "default-starter" }, { - name: "done", - icon: "βœ“", - color: "#4CAF50", - templateId: "minimal", - }, - ], + "name": "done", + "icon": "βœ“", + "color": "#4CAF50", + "templateId": "default-starter" + } + ] }, { - id: "project", - name: "Project management", - description: "Status workflow for project management and tracking", - authorGithub: "soler1212", - statuses: [ + "id": "minimal", + "name": "Minimal workflow", + "description": "A simplified set of essential workflow statuses", + "authorGithub": "soler1212", + "statuses": [ { - name: "planning", - icon: "πŸ—“οΈ", - color: "#9E9E9E", - templateId: "project", + "name": "todo", + "icon": "πŸ“Œ", + "color": "#F44336", + "templateId": "minimal" }, { - name: "backlog", - icon: "πŸ“‹", - color: "#E0E0E0", - templateId: "project", + "name": "inProgress", + "icon": "βš™οΈ", + "color": "#2196F3", + "templateId": "minimal" }, { - name: "ready", - icon: "🚦", - color: "#8BC34A", - templateId: "project", + "name": "review", + "icon": "πŸ‘€", + "color": "#9C27B0", + "templateId": "minimal" }, { - name: "inDevelopment", - icon: "πŸ‘¨β€πŸ’»", - color: "#2196F3", - templateId: "project", - }, - { - name: "testing", - icon: "πŸ§ͺ", - color: "#9C27B0", - templateId: "project", - }, - { - name: "review", - icon: "πŸ‘οΈ", - color: "#FFC107", - templateId: "project", - }, - { - name: "approved", - icon: "πŸ‘", - color: "#4CAF50", - templateId: "project", - }, - { - name: "live", - icon: "πŸš€", - color: "#3F51B5", - templateId: "project", - }, - ], + "name": "done", + "icon": "βœ“", + "color": "#4CAF50", + "templateId": "minimal" + } + ] }, { - id: "default-starter", - name: "Starter Template", - description: - "A simplified set of essential workflow statuses to get you started.", - authorGithub: "soler1212", - statuses: [ + "id": "project", + "name": "Project management", + "description": "Status workflow for project management and tracking", + "authorGithub": "soler1212", + "statuses": [ { - name: "todo", - icon: "πŸ“Œ", - color: "#F44336", - templateId: "default-starter", + "name": "planning", + "icon": "πŸ—“οΈ", + "color": "#9E9E9E", + "templateId": "project" }, { - name: "inProgress", - icon: "βš™οΈ", - color: "#2196F3", - templateId: "default-starter", + "name": "backlog", + "icon": "πŸ“‹", + "color": "#E0E0E0", + "templateId": "project" }, { - name: "review", - icon: "πŸ‘€", - color: "#9C27B0", - templateId: "default-starter", + "name": "ready", + "icon": "🚦", + "color": "#8BC34A", + "templateId": "project" }, { - name: "done", - icon: "βœ“", - color: "#4CAF50", - templateId: "default-starter", + "name": "inDevelopment", + "icon": "πŸ‘¨β€πŸ’»", + "color": "#2196F3", + "templateId": "project" }, - ], - }, + { + "name": "testing", + "icon": "πŸ§ͺ", + "color": "#9C27B0", + "templateId": "project" + }, + { + "name": "review", + "icon": "πŸ‘οΈ", + "color": "#FFC107", + "templateId": "project" + }, + { + "name": "approved", + "icon": "πŸ‘", + "color": "#4CAF50", + "templateId": "project" + }, + { + "name": "live", + "icon": "πŸš€", + "color": "#3F51B5", + "templateId": "project" + } + ] + } ]; diff --git a/core/settingsService.ts b/core/settingsService.ts index 6d440ec..1fcba68 100644 --- a/core/settingsService.ts +++ b/core/settingsService.ts @@ -1,5 +1,6 @@ import { DEFAULT_PLUGIN_SETTINGS } from "@/constants/defaultSettings"; import { PluginSettings, SyncGroup } from "@/types/pluginSettings"; +import { PREDEFINED_TEMPLATES } from "@/constants/predefinedTemplates"; import { Plugin, TFile, normalizePath } from "obsidian"; import eventBus from "./eventBus"; @@ -64,7 +65,8 @@ class SettingsService { async initialize(plugin: Plugin): Promise { this.plugin = plugin; - await this.loadSettings(); + const loadedData = await this.loadSettings(); + this.migrateLegacySettings(loadedData); if (this.settings.enableExternalStatusSync) { await this.loadFromExternalFile(); @@ -104,7 +106,102 @@ class SettingsService { const loadedData = await this.plugin.loadData(); this.settings = this.mergeSettings(DEFAULT_PLUGIN_SETTINGS, loadedData); this.deduplicateTemplates(); - return this.settings; + return loadedData; + } + + /** + * Migrates legacy settings and ensures new users have a starter template. + */ + private migrateLegacySettings(loadedData: Partial | null) { + const hasTemplates = + this.settings.templates && this.settings.templates.length > 0; + + // 1. If it's a truly new user (no data at all), give them the starter template + if (!loadedData) { + this.injectStarterTemplate(); + return; + } + + // 2. If it's an existing user but has no templates, they were using the old defaults + if (!hasTemplates) { + const legacyIds = [ + "colorful", + "minimal", + "academic", + "project", + "creative-writing", + ]; + const enabledLegacy = (this.settings.enabledTemplates || []).filter( + (id) => legacyIds.includes(id), + ); + + if (enabledLegacy.length > 0) { + // Restore the ones they had enabled from the marketplace list + const toRestore = PREDEFINED_TEMPLATES.filter((t) => + enabledLegacy.includes(t.id), + ).map((t) => ({ + ...t, + id: t.id, // Keep original ID for legacy compatibility + statuses: t.statuses.map((s) => ({ + ...s, + templateId: t.id, + })), + })); + + this.settings.templates = toRestore; + // Update enabled list + this.settings.enabledTemplates = toRestore.map((t) => t.id); + this.saveSettings().catch(console.error); + } else { + // If nothing was enabled, just give them the starter template + this.injectStarterTemplate(); + } + } + } + + /** + * Injects the default starter template. + */ + private injectStarterTemplate() { + const starterTemplate = { + id: "starter", + name: "Starter Template", + description: + "A simplified set of essential workflow statuses to get you started.", + authorGithub: "soler1212", + statuses: [ + { + name: "todo", + icon: "πŸ“Œ", + color: "#F44336", + templateId: "starter", + }, + { + name: "inProgress", + icon: "βš™οΈ", + color: "#2196F3", + templateId: "starter", + }, + { + name: "review", + icon: "πŸ‘€", + color: "#9C27B0", + templateId: "starter", + }, + { + name: "done", + icon: "βœ“", + color: "#4CAF50", + templateId: "starter", + }, + ], + }; + + this.settings.templates = [starterTemplate]; + if (!this.settings.enabledTemplates.includes(starterTemplate.id)) { + this.settings.enabledTemplates.push(starterTemplate.id); + } + this.saveSettings().catch(console.error); } /**