@atlashub/smartstack-cli 3.7.0 → 3.9.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 (133) hide show
  1. package/dist/index.js +365 -2
  2. package/dist/index.js.map +1 -1
  3. package/package.json +4 -2
  4. package/templates/agents/action.md +1 -0
  5. package/templates/agents/ba-writer.md +33 -0
  6. package/templates/agents/explore-codebase.md +1 -0
  7. package/templates/agents/explore-docs.md +1 -0
  8. package/templates/agents/fix-grammar.md +1 -0
  9. package/templates/agents/snipper.md +1 -0
  10. package/templates/skills/admin/SKILL.md +6 -0
  11. package/templates/skills/ai-prompt/SKILL.md +32 -136
  12. package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -0
  13. package/templates/skills/apex/SKILL.md +120 -0
  14. package/templates/skills/apex/_shared.md +86 -0
  15. package/templates/skills/apex/references/agent-teams-protocol.md +164 -0
  16. package/templates/skills/apex/references/smartstack-layers.md +173 -0
  17. package/templates/skills/apex/steps/step-00-init.md +156 -0
  18. package/templates/skills/apex/steps/step-01-analyze.md +169 -0
  19. package/templates/skills/apex/steps/step-02-plan.md +160 -0
  20. package/templates/skills/apex/steps/step-03-execute.md +166 -0
  21. package/templates/skills/apex/steps/step-04-validate.md +138 -0
  22. package/templates/skills/apex/steps/step-05-examine.md +124 -0
  23. package/templates/skills/apex/steps/step-06-resolve.md +105 -0
  24. package/templates/skills/apex/steps/step-07-tests.md +130 -0
  25. package/templates/skills/apex/steps/step-08-run-tests.md +115 -0
  26. package/templates/skills/application/SKILL.md +10 -0
  27. package/templates/skills/application/references/backend-controller-hierarchy.md +58 -0
  28. package/templates/skills/application/references/backend-entity-seeding.md +72 -0
  29. package/templates/skills/application/references/backend-verification.md +88 -0
  30. package/templates/skills/application/references/frontend-verification.md +111 -0
  31. package/templates/skills/application/references/nav-fallback-procedure.md +200 -0
  32. package/templates/skills/application/references/provider-template.md +134 -0
  33. package/templates/skills/application/references/test-frontend.md +73 -0
  34. package/templates/skills/application/references/test-prerequisites.md +72 -0
  35. package/templates/skills/application/steps/step-01-navigation.md +7 -198
  36. package/templates/skills/application/steps/step-03b-provider.md +4 -128
  37. package/templates/skills/application/steps/step-04-backend.md +20 -350
  38. package/templates/skills/application/steps/step-05-frontend.md +12 -101
  39. package/templates/skills/application/steps/step-07-tests.md +12 -132
  40. package/templates/skills/business-analyse/SKILL.md +11 -2
  41. package/templates/skills/business-analyse/html/ba-interactive.html +3214 -2246
  42. package/templates/skills/business-analyse/html/build-html.js +77 -0
  43. package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +130 -0
  44. package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +22 -0
  45. package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +208 -0
  46. package/templates/skills/business-analyse/html/src/scripts/04-render-modules.js +211 -0
  47. package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +554 -0
  48. package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +110 -0
  49. package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +90 -0
  50. package/templates/skills/business-analyse/html/src/scripts/08-editing.js +45 -0
  51. package/templates/skills/business-analyse/html/src/scripts/09-export.js +168 -0
  52. package/templates/skills/business-analyse/html/src/scripts/10-comments.js +171 -0
  53. package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +161 -0
  54. package/templates/skills/business-analyse/html/src/styles/01-variables.css +38 -0
  55. package/templates/skills/business-analyse/html/src/styles/02-layout.css +101 -0
  56. package/templates/skills/business-analyse/html/src/styles/03-navigation.css +62 -0
  57. package/templates/skills/business-analyse/html/src/styles/04-cards.css +196 -0
  58. package/templates/skills/business-analyse/html/src/styles/05-modules.css +325 -0
  59. package/templates/skills/business-analyse/html/src/styles/06-wireframes.css +230 -0
  60. package/templates/skills/business-analyse/html/src/styles/07-comments.css +184 -0
  61. package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +241 -0
  62. package/templates/skills/business-analyse/html/src/template.html +623 -0
  63. package/templates/skills/business-analyse/references/cadrage-structure-cards.md +78 -0
  64. package/templates/skills/business-analyse/references/cadrage-vibe-coding.md +97 -0
  65. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +92 -0
  66. package/templates/skills/business-analyse/references/deploy-data-build.md +121 -0
  67. package/templates/skills/business-analyse/references/deploy-modes.md +49 -0
  68. package/templates/skills/business-analyse/references/handoff-file-templates.md +119 -0
  69. package/templates/skills/business-analyse/references/handoff-mappings.md +81 -0
  70. package/templates/skills/business-analyse/references/html-data-mapping.md +10 -2
  71. package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -0
  72. package/templates/skills/business-analyse/references/review-data-mapping.md +363 -0
  73. package/templates/skills/business-analyse/references/spec-auto-inference.md +57 -0
  74. package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -0
  75. package/templates/skills/business-analyse/references/ui-resource-cards.md +110 -0
  76. package/templates/skills/business-analyse/references/validate-incremental-html.md +55 -0
  77. package/templates/skills/business-analyse/steps/step-00-init.md +35 -68
  78. package/templates/skills/business-analyse/steps/step-01-cadrage.md +5 -194
  79. package/templates/skills/business-analyse/steps/step-03a-data.md +6 -49
  80. package/templates/skills/business-analyse/steps/step-03b-ui.md +12 -178
  81. package/templates/skills/business-analyse/steps/step-03d-validate.md +3 -48
  82. package/templates/skills/business-analyse/steps/step-04-consolidation.md +9 -104
  83. package/templates/skills/business-analyse/steps/step-05a-handoff.md +25 -441
  84. package/templates/skills/business-analyse/steps/step-05b-deploy.md +19 -187
  85. package/templates/skills/business-analyse/steps/step-06-review.md +277 -0
  86. package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -0
  87. package/templates/skills/cc-agent/steps/step-02-generate.md +5 -78
  88. package/templates/skills/check-version/SKILL.md +7 -0
  89. package/templates/skills/controller/references/controller-code-templates.md +159 -0
  90. package/templates/skills/controller/references/permission-sync-templates.md +152 -0
  91. package/templates/skills/controller/steps/step-03-generate.md +6 -158
  92. package/templates/skills/controller/steps/step-04-perms.md +5 -144
  93. package/templates/skills/debug/SKILL.md +7 -0
  94. package/templates/skills/explore/SKILL.md +6 -0
  95. package/templates/skills/feature-full/SKILL.md +39 -142
  96. package/templates/skills/feature-full/steps/step-01-implementation.md +120 -0
  97. package/templates/skills/gitflow/references/init-config-template.md +135 -0
  98. package/templates/skills/gitflow/references/init-name-normalization.md +103 -0
  99. package/templates/skills/gitflow/references/plan-template.md +69 -0
  100. package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -0
  101. package/templates/skills/gitflow/references/start-local-config.md +110 -0
  102. package/templates/skills/gitflow/steps/step-init.md +18 -289
  103. package/templates/skills/gitflow/steps/step-plan.md +6 -63
  104. package/templates/skills/gitflow/steps/step-start.md +16 -126
  105. package/templates/skills/mcp/SKILL.md +9 -213
  106. package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -0
  107. package/templates/skills/mcp/steps/step-02-tools.md +73 -0
  108. package/templates/skills/notification/SKILL.md +7 -0
  109. package/templates/skills/quick-search/SKILL.md +5 -0
  110. package/templates/skills/ralph-loop/SKILL.md +99 -381
  111. package/templates/skills/ralph-loop/references/category-rules.md +259 -0
  112. package/templates/skills/ralph-loop/references/compact-loop.md +182 -0
  113. package/templates/skills/ralph-loop/references/task-transform-legacy.md +259 -0
  114. package/templates/skills/ralph-loop/references/team-orchestration.md +189 -0
  115. package/templates/skills/ralph-loop/steps/step-00-init.md +111 -383
  116. package/templates/skills/ralph-loop/steps/step-01-task.md +79 -896
  117. package/templates/skills/ralph-loop/steps/step-02-execute.md +68 -680
  118. package/templates/skills/ralph-loop/steps/step-03-commit.md +47 -277
  119. package/templates/skills/ralph-loop/steps/step-04-check.md +124 -607
  120. package/templates/skills/ralph-loop/steps/step-05-report.md +68 -367
  121. package/templates/skills/refactor/SKILL.md +12 -176
  122. package/templates/skills/refactor/steps/step-01-discover.md +60 -0
  123. package/templates/skills/refactor/steps/step-02-execute.md +67 -0
  124. package/templates/skills/review-code/SKILL.md +19 -257
  125. package/templates/skills/review-code/steps/step-01-smartstack.md +96 -0
  126. package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -0
  127. package/templates/skills/review-code/steps/step-03-react.md +44 -0
  128. package/templates/skills/ui-components/SKILL.md +7 -0
  129. package/templates/skills/utils/SKILL.md +6 -0
  130. package/templates/skills/validate/SKILL.md +6 -0
  131. package/templates/skills/validate-feature/SKILL.md +8 -0
  132. package/templates/skills/workflow/SKILL.md +40 -118
  133. package/templates/skills/workflow/steps/step-01-implementation.md +84 -0
@@ -0,0 +1,161 @@
1
+ /* ============================================
2
+ REVIEW PANEL
3
+ ============================================ */
4
+ let reviewPanelOpen = false;
5
+ let reviewFilter = 'all';
6
+
7
+ function toggleReviewPanel() {
8
+ reviewPanelOpen = !reviewPanelOpen;
9
+ const panel = document.getElementById('reviewPanel');
10
+ const body = document.getElementById('appBody');
11
+ const btn = document.getElementById('reviewToggleBtn');
12
+
13
+ if (reviewPanelOpen) {
14
+ panel.classList.add('visible');
15
+ body.classList.add('review-open');
16
+ btn.classList.add('active');
17
+ } else {
18
+ panel.classList.remove('visible');
19
+ body.classList.remove('review-open');
20
+ btn.classList.remove('active');
21
+ }
22
+
23
+ renderReviewPanel();
24
+ }
25
+
26
+ function filterReviewComments(filter) {
27
+ reviewFilter = filter;
28
+ // Update active filter button
29
+ document.querySelectorAll('.review-filter-btn').forEach(btn => {
30
+ btn.classList.toggle('active', btn.dataset.filter === filter);
31
+ });
32
+ renderReviewPanel();
33
+ }
34
+
35
+ function renderReviewPanel() {
36
+ const comments = data.comments || [];
37
+
38
+ // Update header badge
39
+ const toReviewCount = comments.filter(c => c.status === 'to-review').length;
40
+ const badge = document.getElementById('reviewBadge');
41
+ if (badge) {
42
+ badge.textContent = toReviewCount;
43
+ badge.classList.toggle('hidden', toReviewCount === 0);
44
+ }
45
+
46
+ // Update stats
47
+ const totalEl = document.getElementById('reviewStatTotal');
48
+ const toReviewEl = document.getElementById('reviewStatToReview');
49
+ const validatedEl = document.getElementById('reviewStatValidated');
50
+ if (totalEl) totalEl.textContent = comments.length;
51
+ if (toReviewEl) toReviewEl.textContent = toReviewCount;
52
+ if (validatedEl) validatedEl.textContent = comments.filter(c => c.status === 'validated').length;
53
+
54
+ // Filter comments
55
+ let filtered = comments;
56
+ if (reviewFilter === 'to-review') {
57
+ filtered = comments.filter(c => c.status === 'to-review');
58
+ } else if (reviewFilter === 'validated') {
59
+ filtered = comments.filter(c => c.status === 'validated');
60
+ }
61
+
62
+ // Render comment list
63
+ const container = document.getElementById('reviewCommentsList');
64
+ if (!container) return;
65
+
66
+ if (filtered.length === 0) {
67
+ container.innerHTML = '<div class="review-empty">Aucun commentaire' +
68
+ (reviewFilter !== 'all' ? ' avec ce filtre' : '') + '.</div>';
69
+ return;
70
+ }
71
+
72
+ container.innerHTML = filtered.map((c, i) => {
73
+ const globalIndex = data.comments.indexOf(c);
74
+ const sectionLabel = getSectionLabel(c.sectionId);
75
+ const date = c.timestamp ? new Date(c.timestamp).toLocaleDateString('fr-FR', { day: '2-digit', month: '2-digit' }) : '';
76
+
77
+ return `
78
+ <div class="review-comment-item" onclick="navigateToComment('${c.sectionId}', ${c.cardIndex})">
79
+ <div class="review-comment-section">${sectionLabel}</div>
80
+ <div class="review-comment-text">${c.content}</div>
81
+ <div class="review-comment-footer">
82
+ <span class="review-comment-author">${c.author || 'Utilisateur'} - ${date}</span>
83
+ <div class="review-comment-actions">
84
+ <button class="review-action-btn ${c.status === 'validated' ? 'reject' : 'validate'}"
85
+ onclick="event.stopPropagation();toggleCommentStatus(${globalIndex})"
86
+ title="${c.status === 'validated' ? 'Remettre a revoir' : 'Valider'}">
87
+ ${c.status === 'validated' ? 'A revoir' : 'Valider'}
88
+ </button>
89
+ <button class="review-action-btn delete"
90
+ onclick="event.stopPropagation();deleteComment(${globalIndex})"
91
+ title="Supprimer">
92
+ &#10005;
93
+ </button>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ `;
98
+ }).join('');
99
+ }
100
+
101
+ function getSectionLabel(sectionId) {
102
+ const labels = {
103
+ 'cadrage-problem': 'Probleme',
104
+ 'cadrage-current': 'Situation actuelle',
105
+ 'cadrage-vision': 'Vision',
106
+ 'cadrage-stakeholders': 'Parties prenantes',
107
+ 'cadrage-scope': 'Perimetre',
108
+ 'cadrage-risks': 'Risques',
109
+ 'cadrage-success': 'Criteres',
110
+ 'decomp-modules': 'Domaines',
111
+ 'decomp-dependencies': 'Dependances',
112
+ 'consol-interactions': 'Interactions',
113
+ 'consol-permissions': 'Acces',
114
+ 'consol-flows': 'Parcours',
115
+ 'handoff-summary': 'Synthese'
116
+ };
117
+ if (labels[sectionId]) return labels[sectionId];
118
+ if (sectionId.startsWith('module-spec-')) {
119
+ const code = sectionId.replace('module-spec-', '');
120
+ const mod = data.modules.find(m => m.code === code);
121
+ return mod ? mod.name : code;
122
+ }
123
+ // Handle list-based sectionIds (ucList-*, brList-*, entList-*)
124
+ const listMatch = sectionId.match(/^(uc|br|ent)List-(.+)$/);
125
+ if (listMatch) {
126
+ const tabLabels = { uc: 'Cas d\'utilisation', br: 'Regles metier', ent: 'Donnees' };
127
+ const mod = data.modules.find(m => m.code === listMatch[2]);
128
+ const modName = mod ? mod.name : listMatch[2];
129
+ return modName + ' > ' + (tabLabels[listMatch[1]] || listMatch[1]);
130
+ }
131
+ return sectionId;
132
+ }
133
+
134
+ function navigateToComment(sectionId, cardIndex) {
135
+ // Handle list-based sectionIds (ucList-*, brList-*, entList-*) → navigate to module + tab
136
+ const listMatch = sectionId.match(/^(uc|br|ent)List-(.+)$/);
137
+ if (listMatch) {
138
+ const [, tabType, moduleCode] = listMatch;
139
+ showSection('module-spec-' + moduleCode);
140
+ setTimeout(() => {
141
+ switchTab(moduleCode, tabType);
142
+ scrollToCommentThread(sectionId, cardIndex);
143
+ }, 150);
144
+ } else {
145
+ showSection(sectionId);
146
+ scrollToCommentThread(sectionId, cardIndex);
147
+ }
148
+ }
149
+
150
+ function scrollToCommentThread(sectionId, cardIndex) {
151
+ setTimeout(() => {
152
+ const thread = document.getElementById('comment-thread-' + sectionId + '-' + cardIndex);
153
+ if (thread && !thread.classList.contains('visible')) {
154
+ thread.classList.add('visible');
155
+ }
156
+ const container = document.querySelector(`.comment-btn-container[data-section-id="${sectionId}"][data-card-index="${cardIndex}"]`);
157
+ if (container) {
158
+ container.scrollIntoView({ behavior: 'smooth', block: 'center' });
159
+ }
160
+ }, 100);
161
+ }
@@ -0,0 +1,38 @@
1
+ /* ============================================
2
+ DESIGN SYSTEM - SmartStack Business Analysis
3
+ ============================================ */
4
+ :root {
5
+ --primary: #6366f1;
6
+ --primary-dark: #4f46e5;
7
+ --primary-light: #818cf8;
8
+ --secondary: #f97316;
9
+ --accent: #06b6d4;
10
+ --bg-dark: #0f172a;
11
+ --bg-card: #1e293b;
12
+ --bg-hover: #334155;
13
+ --bg-input: #151d2e;
14
+ --text: #b8c4d1;
15
+ --text-muted: #8a9bb0;
16
+ --text-bright: #e2e8f0;
17
+ --border: #334155;
18
+ --border-light: #475569;
19
+ --success: #22c55e;
20
+ --warning: #eab308;
21
+ --error: #ef4444;
22
+ --info: #3b82f6;
23
+ --sidebar-width: 280px;
24
+ --header-height: 52px;
25
+ --transition-fast: 0.15s ease;
26
+ --transition-normal: 0.3s ease;
27
+ }
28
+
29
+ * { margin: 0; padding: 0; box-sizing: border-box; }
30
+ html { scroll-behavior: smooth; }
31
+
32
+ body {
33
+ font-family: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif;
34
+ background: var(--bg-dark);
35
+ color: var(--text);
36
+ line-height: 1.7;
37
+ min-height: 100vh;
38
+ }
@@ -0,0 +1,101 @@
1
+ /* ============================================
2
+ LAYOUT
3
+ ============================================ */
4
+ .app { display: flex; flex-direction: column; min-height: 100vh; }
5
+
6
+ .header {
7
+ background: var(--bg-card);
8
+ border-bottom: 1px solid var(--border);
9
+ height: var(--header-height);
10
+ display: flex;
11
+ align-items: center;
12
+ padding: 0 1.5rem;
13
+ gap: 1rem;
14
+ position: sticky;
15
+ top: 0;
16
+ z-index: 100;
17
+ }
18
+
19
+ .header-logo {
20
+ width: 32px; height: 32px;
21
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
22
+ border-radius: 6px;
23
+ display: flex; align-items: center; justify-content: center;
24
+ font-weight: 700; font-size: 0.85rem; color: #fff;
25
+ flex-shrink: 0;
26
+ }
27
+
28
+ .header-title { font-size: 1rem; font-weight: 600; color: var(--text-bright); }
29
+ .header-sep { width: 1px; height: 24px; background: var(--border); }
30
+ .header-app-name { font-size: 0.9rem; color: var(--primary-light); font-weight: 500; }
31
+ .header-spacer { flex: 1; }
32
+
33
+ .header-actions { display: flex; gap: 0.5rem; }
34
+
35
+ .body { display: flex; flex: 1; }
36
+
37
+ /* ============================================
38
+ SIDEBAR - Container
39
+ ============================================ */
40
+ .sidebar {
41
+ width: var(--sidebar-width);
42
+ background: var(--bg-card);
43
+ border-right: 1px solid var(--border);
44
+ overflow-y: auto;
45
+ height: calc(100vh - var(--header-height));
46
+ position: sticky;
47
+ top: var(--header-height);
48
+ flex-shrink: 0;
49
+ }
50
+
51
+ .sidebar::-webkit-scrollbar { width: 4px; }
52
+ .sidebar::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
53
+
54
+ /* ============================================
55
+ MAIN CONTENT - FULL WIDTH
56
+ ============================================ */
57
+ .main {
58
+ flex: 1;
59
+ padding: 2rem 3rem;
60
+ overflow-y: auto;
61
+ height: calc(100vh - var(--header-height));
62
+ }
63
+
64
+ .section { margin-bottom: 4rem; }
65
+ .section-title {
66
+ font-size: 1.4rem;
67
+ color: var(--text-bright);
68
+ font-weight: 600;
69
+ margin-bottom: 0.5rem;
70
+ padding-bottom: 0.5rem;
71
+ border-bottom: 2px solid var(--primary);
72
+ }
73
+ .section-subtitle {
74
+ font-size: 0.9rem;
75
+ color: var(--text-muted);
76
+ margin-bottom: 1.5rem;
77
+ }
78
+
79
+ /* ============================================
80
+ RESPONSIVE
81
+ ============================================ */
82
+ @media (max-width: 768px) {
83
+ .sidebar { display: none; }
84
+ .main { padding: 1rem; }
85
+ .form-row { grid-template-columns: 1fr; }
86
+ .stakeholder-grid { grid-template-columns: 1fr; }
87
+ }
88
+
89
+ /* ============================================
90
+ PRINT
91
+ ============================================ */
92
+ @media print {
93
+ .sidebar, .header-actions, .add-btn, .uc-actions, .inline-form, .module-card-remove, .phase-progress { display: none !important; }
94
+ .main { max-width: 100%; padding: 0; }
95
+ .section { display: block !important; page-break-inside: avoid; }
96
+ body { background: #fff; color: #1a1a1a; }
97
+ .card, .uc-item, .br-item, .module-card, .entity-block, .interaction-item { border-color: #ddd; }
98
+ .tab-panel { display: block !important; }
99
+ .tab-bar { display: none; }
100
+ .review-panel, .comment-btn-container { display: none !important; }
101
+ }
@@ -0,0 +1,62 @@
1
+ /* ============================================
2
+ SIDEBAR - Navigation 5 niveaux
3
+ ============================================ */
4
+ .nav-group { padding: 1rem 0; }
5
+ .nav-group + .nav-group { border-top: 1px solid var(--border); }
6
+
7
+ .nav-group-title {
8
+ font-size: 0.65rem;
9
+ text-transform: uppercase;
10
+ letter-spacing: 0.1em;
11
+ color: var(--text-muted);
12
+ padding: 0 1rem;
13
+ margin-bottom: 0.5rem;
14
+ font-weight: 600;
15
+ }
16
+
17
+ .nav-item {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: 0.5rem;
21
+ padding: 0.45rem 1rem;
22
+ color: var(--text);
23
+ text-decoration: none;
24
+ font-size: 0.85rem;
25
+ cursor: pointer;
26
+ transition: all var(--transition-fast);
27
+ border-left: 3px solid transparent;
28
+ }
29
+ .nav-item:hover { background: var(--bg-hover); color: var(--text-bright); }
30
+ .nav-item.active { background: rgba(99,102,241,0.1); border-left-color: var(--primary); color: var(--primary-light); font-weight: 500; }
31
+
32
+ .nav-item .nav-icon { font-size: 1rem; width: 20px; text-align: center; }
33
+ .nav-item .nav-badge {
34
+ margin-left: auto;
35
+ font-size: 0.65rem;
36
+ background: var(--bg-hover);
37
+ padding: 0.1rem 0.4rem;
38
+ border-radius: 10px;
39
+ color: var(--text-muted);
40
+ }
41
+
42
+ .nav-children { margin-left: 1.2rem; }
43
+ .nav-children .nav-item { font-size: 0.8rem; padding: 0.3rem 1rem; }
44
+
45
+ /* ============================================
46
+ PHASE PROGRESS
47
+ ============================================ */
48
+ .phase-progress {
49
+ display: flex; align-items: center; gap: 0.3rem;
50
+ padding: 0.75rem 1rem; border-bottom: 1px solid var(--border);
51
+ }
52
+ .phase-dot {
53
+ width: 24px; height: 24px; border-radius: 50%;
54
+ display: flex; align-items: center; justify-content: center;
55
+ font-size: 0.6rem; font-weight: 700; color: var(--text-muted);
56
+ background: var(--bg-hover); border: 2px solid var(--border);
57
+ transition: all var(--transition-fast);
58
+ }
59
+ .phase-dot.completed { background: var(--success); border-color: var(--success); color: #fff; }
60
+ .phase-dot.current { background: var(--primary); border-color: var(--primary); color: #fff; }
61
+ .phase-line { flex: 1; height: 2px; background: var(--border); }
62
+ .phase-line.completed { background: var(--success); }
@@ -0,0 +1,196 @@
1
+ /* ============================================
2
+ BUTTONS
3
+ ============================================ */
4
+ .btn {
5
+ padding: 0.4rem 0.9rem;
6
+ border-radius: 6px;
7
+ border: 1px solid var(--border);
8
+ background: var(--bg-hover);
9
+ color: var(--text);
10
+ font-size: 0.8rem;
11
+ cursor: pointer;
12
+ transition: all var(--transition-fast);
13
+ font-family: inherit;
14
+ }
15
+ .btn:hover { border-color: var(--primary); color: var(--text-bright); }
16
+ .btn-primary { background: var(--primary); border-color: var(--primary); color: #fff; }
17
+ .btn-primary:hover { background: var(--primary-dark); }
18
+ .btn-success { background: var(--success); border-color: var(--success); color: #fff; }
19
+ .btn-sm { padding: 0.25rem 0.6rem; font-size: 0.75rem; }
20
+
21
+ /* ============================================
22
+ EDITABLE CARDS
23
+ ============================================ */
24
+ .card {
25
+ background: var(--bg-card);
26
+ border: 1px solid var(--border);
27
+ border-radius: 10px;
28
+ padding: 1.5rem;
29
+ margin-bottom: 1rem;
30
+ transition: border-color var(--transition-fast);
31
+ }
32
+ .card:hover { border-color: var(--border-light); }
33
+
34
+ .card-header {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 0.75rem;
38
+ margin-bottom: 0.75rem;
39
+ }
40
+ .card-label {
41
+ font-size: 0.7rem;
42
+ text-transform: uppercase;
43
+ letter-spacing: 0.08em;
44
+ color: var(--text-muted);
45
+ font-weight: 600;
46
+ }
47
+ .card-title {
48
+ font-size: 1.05rem;
49
+ color: var(--text-bright);
50
+ font-weight: 600;
51
+ }
52
+
53
+ .editable {
54
+ border: 1px dashed transparent;
55
+ border-radius: 6px;
56
+ padding: 0.4rem 0.6rem;
57
+ transition: all var(--transition-fast);
58
+ min-height: 1.5em;
59
+ outline: none;
60
+ }
61
+ .editable:hover { border-color: var(--border-light); background: var(--bg-input); }
62
+ .editable:focus { border-color: var(--primary); background: var(--bg-input); box-shadow: 0 0 0 2px rgba(99,102,241,0.2); }
63
+ .editable[data-placeholder]:empty::before {
64
+ content: attr(data-placeholder);
65
+ color: var(--text-muted);
66
+ font-style: italic;
67
+ }
68
+
69
+ /* ============================================
70
+ PRIORITY BADGES
71
+ ============================================ */
72
+ .priority {
73
+ display: inline-flex;
74
+ align-items: center;
75
+ gap: 0.3rem;
76
+ padding: 0.2rem 0.6rem;
77
+ border-radius: 12px;
78
+ font-size: 0.7rem;
79
+ font-weight: 600;
80
+ text-transform: uppercase;
81
+ letter-spacing: 0.05em;
82
+ }
83
+ .priority-vital { background: rgba(239,68,68,0.15); color: #f87171; border: 1px solid rgba(239,68,68,0.3); }
84
+ .priority-important { background: rgba(234,179,8,0.15); color: #facc15; border: 1px solid rgba(234,179,8,0.3); }
85
+ .priority-optional { background: rgba(34,197,94,0.15); color: #4ade80; border: 1px solid rgba(34,197,94,0.3); }
86
+ .priority-excluded { background: rgba(100,116,139,0.15); color: #94a3b8; border: 1px solid rgba(100,116,139,0.3); }
87
+
88
+ /* ============================================
89
+ STATUS BADGES
90
+ ============================================ */
91
+ .status {
92
+ display: inline-flex; align-items: center; gap: 0.3rem;
93
+ padding: 0.15rem 0.5rem; border-radius: 10px;
94
+ font-size: 0.7rem; font-weight: 500;
95
+ }
96
+ .status-dot { width: 6px; height: 6px; border-radius: 50%; }
97
+ .status-draft .status-dot { background: var(--text-muted); }
98
+ .status-draft { color: var(--text-muted); }
99
+ .status-progress .status-dot { background: var(--info); }
100
+ .status-progress { color: var(--info); }
101
+ .status-done .status-dot { background: var(--success); }
102
+ .status-done { color: var(--success); }
103
+
104
+ /* ============================================
105
+ ADD BUTTON
106
+ ============================================ */
107
+ .add-btn {
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ gap: 0.5rem;
112
+ width: 100%;
113
+ padding: 0.75rem;
114
+ border: 2px dashed var(--border);
115
+ border-radius: 8px;
116
+ background: transparent;
117
+ color: var(--text-muted);
118
+ font-size: 0.85rem;
119
+ cursor: pointer;
120
+ transition: all var(--transition-fast);
121
+ font-family: inherit;
122
+ }
123
+ .add-btn:hover {
124
+ border-color: var(--primary);
125
+ color: var(--primary-light);
126
+ background: rgba(99,102,241,0.05);
127
+ }
128
+
129
+ /* ============================================
130
+ INLINE FORM (for adding items)
131
+ ============================================ */
132
+ .inline-form {
133
+ background: var(--bg-card);
134
+ border: 2px solid var(--primary);
135
+ border-radius: 10px;
136
+ padding: 1.25rem;
137
+ margin-bottom: 1rem;
138
+ display: none;
139
+ }
140
+ .inline-form.visible { display: block; }
141
+ .inline-form-title {
142
+ font-size: 0.9rem;
143
+ font-weight: 600;
144
+ color: var(--primary-light);
145
+ margin-bottom: 1rem;
146
+ }
147
+ .form-group { margin-bottom: 0.75rem; }
148
+ .form-label {
149
+ display: block;
150
+ font-size: 0.75rem;
151
+ color: var(--text-muted);
152
+ margin-bottom: 0.3rem;
153
+ font-weight: 500;
154
+ }
155
+ .form-input, .form-textarea, .form-select {
156
+ width: 100%;
157
+ padding: 0.5rem 0.75rem;
158
+ background: var(--bg-input);
159
+ border: 1px solid var(--border);
160
+ border-radius: 6px;
161
+ color: var(--text);
162
+ font-size: 0.85rem;
163
+ font-family: inherit;
164
+ transition: border-color var(--transition-fast);
165
+ }
166
+ .form-input:focus, .form-textarea:focus, .form-select:focus {
167
+ outline: none;
168
+ border-color: var(--primary);
169
+ box-shadow: 0 0 0 2px rgba(99,102,241,0.2);
170
+ }
171
+ .form-textarea { min-height: 80px; resize: vertical; }
172
+ .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }
173
+ .form-actions {
174
+ display: flex; gap: 0.5rem; justify-content: flex-end;
175
+ margin-top: 1rem; padding-top: 0.75rem; border-top: 1px solid var(--border);
176
+ }
177
+
178
+ /* ============================================
179
+ NOTIFICATION BAR
180
+ ============================================ */
181
+ .notification {
182
+ position: fixed;
183
+ bottom: 1.5rem;
184
+ right: 1.5rem;
185
+ padding: 0.75rem 1.25rem;
186
+ border-radius: 8px;
187
+ font-size: 0.85rem;
188
+ font-weight: 500;
189
+ z-index: 200;
190
+ transform: translateY(100px);
191
+ opacity: 0;
192
+ transition: all 0.3s ease;
193
+ }
194
+ .notification.visible { transform: translateY(0); opacity: 1; }
195
+ .notification-success { background: var(--success); color: #fff; }
196
+ .notification-info { background: var(--info); color: #fff; }