designmaker-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/commands/doctor.d.ts +1 -0
  2. package/dist/commands/doctor.js +26 -0
  3. package/dist/commands/doctor.js.map +1 -0
  4. package/dist/commands/import.d.ts +1 -0
  5. package/dist/commands/import.js +45 -0
  6. package/dist/commands/import.js.map +1 -0
  7. package/dist/commands/rebuild.d.ts +1 -0
  8. package/dist/commands/rebuild.js +32 -0
  9. package/dist/commands/rebuild.js.map +1 -0
  10. package/dist/commands/start.d.ts +1 -0
  11. package/dist/commands/start.js +103 -0
  12. package/dist/commands/start.js.map +1 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.js +65 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/lib/ai/build-annotation-prompt.d.ts +6 -0
  17. package/dist/lib/ai/build-annotation-prompt.js +40 -0
  18. package/dist/lib/ai/build-annotation-prompt.js.map +1 -0
  19. package/dist/lib/ai/providers/index.d.ts +10 -0
  20. package/dist/lib/ai/providers/index.js +27 -0
  21. package/dist/lib/ai/providers/index.js.map +1 -0
  22. package/dist/lib/ai/providers/openai.d.ts +9 -0
  23. package/dist/lib/ai/providers/openai.js +77 -0
  24. package/dist/lib/ai/providers/openai.js.map +1 -0
  25. package/dist/lib/ai/providers/response-schema.d.ts +159 -0
  26. package/dist/lib/ai/providers/response-schema.js +21 -0
  27. package/dist/lib/ai/providers/response-schema.js.map +1 -0
  28. package/dist/lib/annotations/annotation-generator.d.ts +9 -0
  29. package/dist/lib/annotations/annotation-generator.js +90 -0
  30. package/dist/lib/annotations/annotation-generator.js.map +1 -0
  31. package/dist/lib/annotations/run-annotation-generation.d.ts +13 -0
  32. package/dist/lib/annotations/run-annotation-generation.js +52 -0
  33. package/dist/lib/annotations/run-annotation-generation.js.map +1 -0
  34. package/dist/lib/bundle/annotated-bundle.d.ts +15 -0
  35. package/dist/lib/bundle/annotated-bundle.js +63 -0
  36. package/dist/lib/bundle/annotated-bundle.js.map +1 -0
  37. package/dist/lib/bundle/shell-dist.d.ts +1 -0
  38. package/dist/lib/bundle/shell-dist.js +29 -0
  39. package/dist/lib/bundle/shell-dist.js.map +1 -0
  40. package/dist/lib/config.d.ts +13 -0
  41. package/dist/lib/config.js +84 -0
  42. package/dist/lib/config.js.map +1 -0
  43. package/dist/lib/doctor/doctor-checks.d.ts +12 -0
  44. package/dist/lib/doctor/doctor-checks.js +98 -0
  45. package/dist/lib/doctor/doctor-checks.js.map +1 -0
  46. package/dist/lib/env.d.ts +1 -0
  47. package/dist/lib/env.js +5 -0
  48. package/dist/lib/env.js.map +1 -0
  49. package/dist/lib/logger.d.ts +6 -0
  50. package/dist/lib/logger.js +15 -0
  51. package/dist/lib/logger.js.map +1 -0
  52. package/dist/lib/project/detect-artifacts.d.ts +1 -0
  53. package/dist/lib/project/detect-artifacts.js +10 -0
  54. package/dist/lib/project/detect-artifacts.js.map +1 -0
  55. package/dist/lib/project/detect-framework.d.ts +3 -0
  56. package/dist/lib/project/detect-framework.js +14 -0
  57. package/dist/lib/project/detect-framework.js.map +1 -0
  58. package/dist/lib/project/detect-package-manager.d.ts +3 -0
  59. package/dist/lib/project/detect-package-manager.js +33 -0
  60. package/dist/lib/project/detect-package-manager.js.map +1 -0
  61. package/dist/lib/project/detect-scripts.d.ts +6 -0
  62. package/dist/lib/project/detect-scripts.js +8 -0
  63. package/dist/lib/project/detect-scripts.js.map +1 -0
  64. package/dist/lib/project/package-json.d.ts +23 -0
  65. package/dist/lib/project/package-json.js +20 -0
  66. package/dist/lib/project/package-json.js.map +1 -0
  67. package/dist/lib/project/project-scan.d.ts +2 -0
  68. package/dist/lib/project/project-scan.js +35 -0
  69. package/dist/lib/project/project-scan.js.map +1 -0
  70. package/dist/lib/prompt/is-tty.d.ts +1 -0
  71. package/dist/lib/prompt/is-tty.js +5 -0
  72. package/dist/lib/prompt/is-tty.js.map +1 -0
  73. package/dist/lib/prototype/browser.d.ts +2 -0
  74. package/dist/lib/prototype/browser.js +5 -0
  75. package/dist/lib/prototype/browser.js.map +1 -0
  76. package/dist/lib/prototype/capture-all-pages.d.ts +13 -0
  77. package/dist/lib/prototype/capture-all-pages.js +22 -0
  78. package/dist/lib/prototype/capture-all-pages.js.map +1 -0
  79. package/dist/lib/prototype/dom-summary.d.ts +3 -0
  80. package/dist/lib/prototype/dom-summary.js +56 -0
  81. package/dist/lib/prototype/dom-summary.js.map +1 -0
  82. package/dist/lib/prototype/page-capture.d.ts +6 -0
  83. package/dist/lib/prototype/page-capture.js +36 -0
  84. package/dist/lib/prototype/page-capture.js.map +1 -0
  85. package/dist/lib/prototype/page-metadata.d.ts +7 -0
  86. package/dist/lib/prototype/page-metadata.js +9 -0
  87. package/dist/lib/prototype/page-metadata.js.map +1 -0
  88. package/dist/lib/prototype/prototype-session.d.ts +22 -0
  89. package/dist/lib/prototype/prototype-session.js +82 -0
  90. package/dist/lib/prototype/prototype-session.js.map +1 -0
  91. package/dist/lib/prototype/run-package-script.d.ts +2 -0
  92. package/dist/lib/prototype/run-package-script.js +21 -0
  93. package/dist/lib/prototype/run-package-script.js.map +1 -0
  94. package/dist/lib/prototype/start-static-preview.d.ts +5 -0
  95. package/dist/lib/prototype/start-static-preview.js +74 -0
  96. package/dist/lib/prototype/start-static-preview.js.map +1 -0
  97. package/dist/lib/prototype/startup-strategy.d.ts +7 -0
  98. package/dist/lib/prototype/startup-strategy.js +32 -0
  99. package/dist/lib/prototype/startup-strategy.js.map +1 -0
  100. package/dist/lib/prototype/visible-text.d.ts +2 -0
  101. package/dist/lib/prototype/visible-text.js +5 -0
  102. package/dist/lib/prototype/visible-text.js.map +1 -0
  103. package/dist/lib/prototype/wait-for-url.d.ts +1 -0
  104. package/dist/lib/prototype/wait-for-url.js +16 -0
  105. package/dist/lib/prototype/wait-for-url.js.map +1 -0
  106. package/dist/lib/requirements/parse-file.d.ts +1 -0
  107. package/dist/lib/requirements/parse-file.js +7 -0
  108. package/dist/lib/requirements/parse-file.js.map +1 -0
  109. package/dist/lib/requirements/parse-text.d.ts +1 -0
  110. package/dist/lib/requirements/parse-text.js +4 -0
  111. package/dist/lib/requirements/parse-text.js.map +1 -0
  112. package/dist/lib/requirements/requirements-discovery.d.ts +2 -0
  113. package/dist/lib/requirements/requirements-discovery.js +62 -0
  114. package/dist/lib/requirements/requirements-discovery.js.map +1 -0
  115. package/dist/lib/requirements/requirements-ranking.d.ts +1 -0
  116. package/dist/lib/requirements/requirements-ranking.js +41 -0
  117. package/dist/lib/requirements/requirements-ranking.js.map +1 -0
  118. package/dist/lib/routes/confirm-ai-routes.d.ts +10 -0
  119. package/dist/lib/routes/confirm-ai-routes.js +70 -0
  120. package/dist/lib/routes/confirm-ai-routes.js.map +1 -0
  121. package/dist/lib/routes/crawl-internal-links.d.ts +4 -0
  122. package/dist/lib/routes/crawl-internal-links.js +42 -0
  123. package/dist/lib/routes/crawl-internal-links.js.map +1 -0
  124. package/dist/lib/routes/normalize-route-path.d.ts +5 -0
  125. package/dist/lib/routes/normalize-route-path.js +52 -0
  126. package/dist/lib/routes/normalize-route-path.js.map +1 -0
  127. package/dist/lib/routes/resolve-capture-routes.d.ts +18 -0
  128. package/dist/lib/routes/resolve-capture-routes.js +47 -0
  129. package/dist/lib/routes/resolve-capture-routes.js.map +1 -0
  130. package/dist/lib/routes/routes-config.d.ts +21 -0
  131. package/dist/lib/routes/routes-config.js +31 -0
  132. package/dist/lib/routes/routes-config.js.map +1 -0
  133. package/dist/lib/workspace/paths.d.ts +8 -0
  134. package/dist/lib/workspace/paths.js +19 -0
  135. package/dist/lib/workspace/paths.js.map +1 -0
  136. package/dist/lib/workspace/read-json.d.ts +2 -0
  137. package/dist/lib/workspace/read-json.js +26 -0
  138. package/dist/lib/workspace/read-json.js.map +1 -0
  139. package/dist/lib/workspace/schema.d.ts +355 -0
  140. package/dist/lib/workspace/schema.js +71 -0
  141. package/dist/lib/workspace/schema.js.map +1 -0
  142. package/dist/lib/workspace/types.d.ts +81 -0
  143. package/dist/lib/workspace/types.js +2 -0
  144. package/dist/lib/workspace/types.js.map +1 -0
  145. package/dist/lib/workspace/workspace-store.d.ts +27 -0
  146. package/dist/lib/workspace/workspace-store.js +75 -0
  147. package/dist/lib/workspace/workspace-store.js.map +1 -0
  148. package/dist/lib/workspace/write-json.d.ts +1 -0
  149. package/dist/lib/workspace/write-json.js +10 -0
  150. package/dist/lib/workspace/write-json.js.map +1 -0
  151. package/package.json +34 -0
  152. package/templates/vercel.json +5 -0
  153. package/vendor/annotation-shell/annotation-shell.css +1 -0
  154. package/vendor/annotation-shell/annotation-shell.js +379 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/lib/workspace/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ export interface WorkspacePaths {
2
+ projectRoot: string;
3
+ workspaceRoot: string;
4
+ outputDir: string;
5
+ workspaceJson: string;
6
+ projectScanJson: string;
7
+ requirementsContextJson: string;
8
+ annotationsSeedJson: string;
9
+ pageSnapshotsDir: string;
10
+ exportsDir: string;
11
+ annotatedBundleDir: string;
12
+ }
13
+ export interface WorkspaceMetadata {
14
+ id: string;
15
+ name: string;
16
+ framework: 'react' | 'vue' | 'unknown';
17
+ project_root: string;
18
+ workspace_root: string;
19
+ output_dir: string;
20
+ entry_url: string | null;
21
+ no_ai: boolean;
22
+ created_at: string;
23
+ updated_at: string;
24
+ }
25
+ export interface ProjectScanResult {
26
+ framework: 'react' | 'vue' | 'unknown';
27
+ package_manager: 'pnpm' | 'npm' | 'yarn' | 'unknown';
28
+ scripts: Record<string, string>;
29
+ artifact_dirs: string[];
30
+ build_script: string | null;
31
+ startup_strategy: string | null;
32
+ resolved_entry_url: string | null;
33
+ }
34
+ export interface RequirementsContext {
35
+ candidate_files: string[];
36
+ selected_files: string[];
37
+ combined_text: string;
38
+ updated_at: string;
39
+ }
40
+ export interface DomSummaryItem {
41
+ tag: string;
42
+ role: string | null;
43
+ text: string;
44
+ bounding_box: {
45
+ x: number;
46
+ y: number;
47
+ width: number;
48
+ height: number;
49
+ };
50
+ selector_hint: string;
51
+ }
52
+ export interface PageSnapshot {
53
+ page_key: string;
54
+ url: string;
55
+ title: string;
56
+ screenshot_path: string;
57
+ visible_text: string;
58
+ dom_summary: DomSummaryItem[];
59
+ captured_at: string;
60
+ }
61
+ export interface Annotation {
62
+ id: string;
63
+ page_key: string;
64
+ title: string;
65
+ description: string;
66
+ business_rule: string;
67
+ validation_rule: string;
68
+ acceptance_criteria: string;
69
+ source: 'ai' | 'manual';
70
+ confidence: number;
71
+ selector_hint: string;
72
+ text_signature: string;
73
+ anchor_x: number;
74
+ anchor_y: number;
75
+ anchor_w: number;
76
+ anchor_h: number;
77
+ hidden: boolean;
78
+ }
79
+ export interface AnnotationsSeed {
80
+ annotations: Annotation[];
81
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/workspace/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import type { AnnotationsSeed, PageSnapshot, ProjectScanResult, RequirementsContext, WorkspaceMetadata, WorkspacePaths } from './types.js';
2
+ interface WorkspaceStoreOptions {
3
+ projectRoot: string;
4
+ workspaceRoot?: string;
5
+ outputDir?: string;
6
+ }
7
+ interface UpsertWorkspaceOptions {
8
+ name: string;
9
+ no_ai: boolean;
10
+ framework?: WorkspaceMetadata['framework'];
11
+ entry_url?: string | null;
12
+ }
13
+ export declare function createWorkspaceStore(options: WorkspaceStoreOptions): WorkspaceStore;
14
+ export declare class WorkspaceStore {
15
+ readonly paths: WorkspacePaths;
16
+ constructor(paths: WorkspacePaths);
17
+ ensure(): Promise<void>;
18
+ readWorkspaceMetadata(): Promise<WorkspaceMetadata | null>;
19
+ upsertWorkspaceMetadata(options: UpsertWorkspaceOptions): Promise<WorkspaceMetadata>;
20
+ writeProjectScan(scan: ProjectScanResult): Promise<ProjectScanResult>;
21
+ readProjectScan(): Promise<ProjectScanResult>;
22
+ writeRequirementsContext(context: RequirementsContext): Promise<RequirementsContext>;
23
+ writeAnnotationsSeed(seed: AnnotationsSeed): Promise<AnnotationsSeed>;
24
+ readAnnotationsSeed(): Promise<AnnotationsSeed>;
25
+ writePageSnapshot(fileName: string, snapshot: PageSnapshot): Promise<PageSnapshot>;
26
+ }
27
+ export {};
@@ -0,0 +1,75 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir } from 'node:fs/promises';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { resolveWorkspacePaths } from './paths.js';
5
+ import { readJsonFile } from './read-json.js';
6
+ import { pageSnapshotSchema, annotationsSeedSchema, projectScanSchema, requirementsContextSchema, workspaceMetadataSchema, } from './schema.js';
7
+ import { writeJsonFile } from './write-json.js';
8
+ export function createWorkspaceStore(options) {
9
+ return new WorkspaceStore(resolveWorkspacePaths(options));
10
+ }
11
+ export class WorkspaceStore {
12
+ paths;
13
+ constructor(paths) {
14
+ this.paths = paths;
15
+ }
16
+ async ensure() {
17
+ await Promise.all([
18
+ mkdir(this.paths.workspaceRoot, { recursive: true }),
19
+ mkdir(this.paths.pageSnapshotsDir, { recursive: true }),
20
+ mkdir(this.paths.exportsDir, { recursive: true }),
21
+ mkdir(this.paths.annotatedBundleDir, { recursive: true }),
22
+ ]);
23
+ }
24
+ async readWorkspaceMetadata() {
25
+ if (!existsSync(this.paths.workspaceJson))
26
+ return null;
27
+ return readJsonFile(this.paths.workspaceJson, workspaceMetadataSchema);
28
+ }
29
+ async upsertWorkspaceMetadata(options) {
30
+ const now = new Date().toISOString();
31
+ const current = await this.readWorkspaceMetadata();
32
+ const metadata = {
33
+ id: current?.id ?? randomUUID(),
34
+ name: options.name,
35
+ framework: options.framework ?? current?.framework ?? 'unknown',
36
+ project_root: this.paths.projectRoot,
37
+ workspace_root: this.paths.workspaceRoot,
38
+ output_dir: this.paths.outputDir,
39
+ entry_url: options.entry_url ?? current?.entry_url ?? null,
40
+ no_ai: options.no_ai,
41
+ created_at: current?.created_at ?? now,
42
+ updated_at: now,
43
+ };
44
+ const parsed = workspaceMetadataSchema.parse(metadata);
45
+ await writeJsonFile(this.paths.workspaceJson, parsed);
46
+ return parsed;
47
+ }
48
+ async writeProjectScan(scan) {
49
+ const parsed = projectScanSchema.parse(scan);
50
+ await writeJsonFile(this.paths.projectScanJson, parsed);
51
+ return parsed;
52
+ }
53
+ async readProjectScan() {
54
+ return readJsonFile(this.paths.projectScanJson, projectScanSchema);
55
+ }
56
+ async writeRequirementsContext(context) {
57
+ const parsed = requirementsContextSchema.parse(context);
58
+ await writeJsonFile(this.paths.requirementsContextJson, parsed);
59
+ return parsed;
60
+ }
61
+ async writeAnnotationsSeed(seed) {
62
+ const parsed = annotationsSeedSchema.parse(seed);
63
+ await writeJsonFile(this.paths.annotationsSeedJson, parsed);
64
+ return parsed;
65
+ }
66
+ async readAnnotationsSeed() {
67
+ return readJsonFile(this.paths.annotationsSeedJson, annotationsSeedSchema);
68
+ }
69
+ async writePageSnapshot(fileName, snapshot) {
70
+ const parsed = pageSnapshotSchema.parse(snapshot);
71
+ await writeJsonFile(`${this.paths.pageSnapshotsDir}/${fileName}`, parsed);
72
+ return parsed;
73
+ }
74
+ }
75
+ //# sourceMappingURL=workspace-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-store.js","sourceRoot":"","sources":["../../../src/lib/workspace/workspace-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function writeJsonFile(path: string, value: unknown): Promise<void>;
@@ -0,0 +1,10 @@
1
+ import { mkdir, rename, writeFile } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ export async function writeJsonFile(path, value) {
4
+ await mkdir(dirname(path), { recursive: true });
5
+ const tempPath = `${path}.${process.pid}.${Date.now()}.tmp`;
6
+ const json = `${JSON.stringify(value, null, 2)}\n`;
7
+ await writeFile(tempPath, json, 'utf8');
8
+ await rename(tempPath, path);
9
+ }
10
+ //# sourceMappingURL=write-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-json.js","sourceRoot":"","sources":["../../../src/lib/workspace/write-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,KAAc;IAC9D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IAC5D,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAEnD,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "designmaker-cli",
3
+ "version": "0.1.0",
4
+ "description": "DesignMaker CLI:本地无侵入原型标注工具(扫描、采集、AI 草稿、打包 annotation-shell)",
5
+ "type": "module",
6
+ "bin": {
7
+ "designmaker": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "vendor",
12
+ "templates"
13
+ ],
14
+ "engines": {
15
+ "node": ">=18"
16
+ },
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "scripts": {
21
+ "build": "rm -rf dist && tsc -p tsconfig.json",
22
+ "test": "pnpm build && tsc -p tsconfig.test.json && node --test \"dist/**/*.test.js\"",
23
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
24
+ "prepublishOnly": "pnpm run build && node -e \"const fs=require('fs'); if(!fs.existsSync('vendor/annotation-shell/annotation-shell.js')){console.error('缺少 vendor/annotation-shell,请先在仓库根目录执行 pnpm build:release'); process.exit(1)}\""
25
+ },
26
+ "dependencies": {
27
+ "playwright": "^1.49.1",
28
+ "zod": "^3.25.76"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^22.10.5",
32
+ "typescript": "^5.7.2"
33
+ }
34
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "rewrites": [
3
+ { "source": "/(.*)", "destination": "/index.html" }
4
+ ]
5
+ }
@@ -0,0 +1 @@
1
+ :host,[data-mount]{all:initial;font-family:system-ui,-apple-system,sans-serif}.dm-shell{position:fixed;bottom:16px;right:16px;width:320px;max-height:calc(100vh - 32px);overflow:auto;background:#fff;border:1px solid #d8dee6;border-radius:12px;box-shadow:0 12px 32px #0f172a2e;z-index:2147483647;color:#0f172a;font-size:14px}.dm-shell-collapsed{position:fixed;bottom:16px;right:16px;z-index:2147483647;border:none;border-radius:999px;padding:10px 16px;background:#2563eb;color:#fff;font-size:13px;font-weight:700;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;box-shadow:0 8px 24px #2563eb59}.dm-shell-collapsed:active{cursor:grabbing}.dm-shell-header{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid #e2e8f0;font-weight:700}.dm-drag-handle{flex:1;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dm-drag-handle:active{cursor:grabbing}.dm-icon-btn{border:none;background:#e2e8f0;color:#0f172a;border-radius:8px;padding:4px 8px;font-size:12px;font-weight:600;cursor:pointer}.dm-shell-body{padding:12px 14px}.dm-field{margin-bottom:10px}.dm-field label{display:block;font-size:12px;font-weight:600;margin-bottom:4px}.dm-field input,.dm-field textarea{width:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:8px;padding:8px;font:inherit}.dm-toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.dm-btn{border:none;border-radius:8px;padding:8px 12px;font-weight:600;cursor:pointer}.dm-btn-primary{background:#2563eb;color:#fff}.dm-btn-secondary{background:#e2e8f0;color:#0f172a}.dm-list{list-style:none;padding:0;margin:0 0 12px}.dm-list li{padding:8px;border:1px solid #e2e8f0;border-radius:8px;margin-bottom:8px;cursor:pointer}.dm-list li.active{border-color:#2563eb;background:#eff6ff}.dm-muted{color:#64748b;font-size:12px}.dm-pick-hint{margin:8px 0 0;padding:8px 10px;border-radius:8px;background:#eff6ff;color:#1d4ed8;font-size:12px;line-height:1.5}.dm-btn-danger{background:#fee2e2;color:#b91c1c}.dm-btn-compact{padding:6px 12px;font-size:12px}.dm-more-menu{position:relative}.dm-more-dropdown{position:absolute;right:0;bottom:calc(100% + 6px);min-width:120px;background:#fff;border:1px solid #dbe3ef;border-radius:8px;box-shadow:0 8px 24px #0f172a1f;overflow:hidden;z-index:1}.dm-more-dropdown button{display:block;width:100%;border:none;background:#fff;color:#0f172a;text-align:left;padding:10px 12px;font:inherit;font-size:13px;cursor:pointer}.dm-more-dropdown button:hover{background:#f8fafc}.dm-list-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;margin-top:12px;padding:8px 10px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;color:#0f172a;font:inherit;font-size:13px;font-weight:600;cursor:pointer}.dm-list-compact{margin-top:8px}.dm-list-compact li{display:flex;align-items:center;gap:8px;margin-bottom:6px;padding:6px 8px}.dm-list-index{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;border-radius:999px;background:#dbeafe;color:#1d4ed8;font-size:11px;font-weight:700;flex-shrink:0}.dm-list-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dm-list-empty{cursor:default;color:#64748b;font-size:12px}.dm-edit-card,.dm-annotation-card{display:flex;flex-direction:column;position:relative;background:#fff;border:1px solid #d8dee6;border-radius:12px;box-shadow:0 16px 40px #0f172a2e;color:#0f172a;font-size:14px;overflow:hidden}.dm-edit-card-header,.dm-annotation-card-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid #e2e8f0;font-weight:700}.dm-annotation-card-drag{flex:1;min-width:0;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dm-annotation-card-drag:active{cursor:grabbing}.dm-edit-card-header{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dm-edit-card-header:active{cursor:grabbing}.dm-annotation-card-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.dm-annotation-card-index{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;border-radius:999px;background:#2563eb;color:#fff;font-size:12px;flex-shrink:0}.dm-annotation-card-title-input{flex:1;min-width:0;border:1px solid #cbd5e1;border-radius:8px;padding:6px 8px;font:inherit;font-weight:600}.dm-annotation-card-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.dm-edit-card-body,.dm-annotation-card-body{flex:1;overflow:auto;padding:12px 14px}.dm-edit-card-footer,.dm-annotation-card-footer{padding:10px 14px 12px;border-top:1px solid #e2e8f0}.dm-edit-card-resize,.dm-annotation-card-resize{position:absolute;right:0;bottom:0;width:16px;height:16px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 50%,#94a3b8 50%)}.dm-markdown-toolbar{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.dm-markdown-toolbar button{border:1px solid #dbe3ef;background:#f8fafc;color:#334155;border-radius:6px;padding:4px 8px;font-size:12px;cursor:pointer}.dm-markdown-editor{width:100%;min-height:220px;height:calc(100% - 36px);box-sizing:border-box;border:1px solid #cbd5e1;border-radius:8px;padding:10px;font:inherit;line-height:1.6;resize:none}.dm-markdown-view{font-size:13px;line-height:1.7;color:#334155}.dm-markdown-view h2{margin:0 0 8px;font-size:14px;color:#2563eb}.dm-markdown-view p{margin:0 0 10px}.dm-markdown-view ul{margin:0 0 10px;padding-left:18px}.dm-markdown-empty{margin:0;color:#64748b}.dm-toast{position:fixed;top:64px;left:50%;transform:translate(-50%);z-index:2147483647;display:flex;align-items:flex-start;gap:10px;max-width:min(90vw,440px);padding:12px 16px;border:1px solid #fcd34d;border-left:4px solid #f59e0b;border-radius:10px;background:#fffbeb;color:#92400e;font-size:13px;line-height:1.5;box-shadow:0 10px 28px #f59e0b2e;pointer-events:none;animation:dm-toast-in .2s ease-out}.dm-toast-icon{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:#f59e0b;color:#fff;font-size:12px;font-weight:800;flex-shrink:0;margin-top:1px}.dm-toast-text{flex:1}@keyframes dm-toast-in{0%{opacity:0;transform:translate(-50%) translateY(-8px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.dm-confirm-dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483646;display:flex;align-items:center;justify-content:center;padding:24px;background:#0f172a73;animation:dm-confirm-backdrop-in .18s ease-out}.dm-confirm-dialog{width:min(100%,360px);padding:20px 22px 18px;border:1px solid #e2e8f0;border-radius:12px;background:#fff;color:#0f172a;box-shadow:0 20px 48px #0f172a38;animation:dm-confirm-dialog-in .2s ease-out}.dm-confirm-dialog-title{margin:0 0 8px;font-size:15px;font-weight:700;line-height:1.4}.dm-confirm-dialog-message{margin:0 0 18px;font-size:13px;line-height:1.6;color:#64748b}.dm-confirm-dialog-actions{display:flex;justify-content:flex-end;gap:8px}.dm-confirm-dialog-confirm.dm-btn-danger{background:#dc2626;color:#fff}.dm-confirm-dialog-confirm.dm-btn-danger:hover{background:#b91c1c}@keyframes dm-confirm-backdrop-in{0%{opacity:0}to{opacity:1}}@keyframes dm-confirm-dialog-in{0%{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}