@codeledger/insight-ui 0.9.1 → 0.9.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Value.js","sourceRoot":"","sources":["../../src/pages/Value.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Value.js","sourceRoot":"","sources":["../../src/pages/Value.tsx"],"names":[],"mappings":"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"}
package/dist/render.d.ts CHANGED
@@ -1,3 +1,28 @@
1
1
  import type { InsightSnapshot } from '@codeledger/types';
2
- export declare function renderInsightPage(pathname: string, snapshot: InsightSnapshot): string;
2
+ /** Pre-computed evidence payload for static builds (no /api/ fetch needed) */
3
+ export interface EvidenceCache {
4
+ [metricKey: string]: {
5
+ explanation: string;
6
+ events: Array<Record<string, unknown>>;
7
+ };
8
+ }
9
+ /**
10
+ * Render a complete HTML page for the Insight dashboard.
11
+ *
12
+ * @param pathname - Route path (/, /integrity, /quality, etc.)
13
+ * @param snapshot - Complete InsightSnapshot with all metrics
14
+ * @param options.evidenceCache - Pre-computed evidence for static builds (embeds in HTML, no fetch needed)
15
+ * @param options.staticMode - When true, generates file://-compatible HTML (no server dependencies)
16
+ * @param options.pagePrefix - Prefix for inter-page links in static mode (e.g., '' for same-dir)
17
+ */
18
+ export declare function renderInsightPage(pathname: string, snapshot: InsightSnapshot, options?: {
19
+ evidenceCache?: EvidenceCache;
20
+ staticMode?: boolean;
21
+ pagePrefix?: string;
22
+ }): string;
23
+ /**
24
+ * Render a full-page evidence view — no drawer, no side panel.
25
+ * Used when "Open full page" is clicked from the evidence drawer.
26
+ */
27
+ export declare function renderEvidencePage(metric: string, explanation: string, events: Array<Record<string, unknown>>, filters: Record<string, unknown>): string;
3
28
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAmBzD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CA8CrF"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAmBzD,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,CAAC,SAAS,EAAE,MAAM,GAAG;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACxC,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,MAAM,CAyDR;AAKD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CA0FR"}
package/dist/render.js CHANGED
@@ -16,10 +16,59 @@ const routes = [
16
16
  { href: '/efficiency', label: 'Efficiency' },
17
17
  { href: '/value', label: 'Value' },
18
18
  ];
19
- export function renderInsightPage(pathname, snapshot) {
19
+ /**
20
+ * Render a complete HTML page for the Insight dashboard.
21
+ *
22
+ * @param pathname - Route path (/, /integrity, /quality, etc.)
23
+ * @param snapshot - Complete InsightSnapshot with all metrics
24
+ * @param options.evidenceCache - Pre-computed evidence for static builds (embeds in HTML, no fetch needed)
25
+ * @param options.staticMode - When true, generates file://-compatible HTML (no server dependencies)
26
+ * @param options.pagePrefix - Prefix for inter-page links in static mode (e.g., '' for same-dir)
27
+ */
28
+ export function renderInsightPage(pathname, snapshot, options) {
20
29
  const active = pathname === '/' ? '/' : pathname;
21
30
  const page = selectPage(active, snapshot);
22
- return '<!doctype html>' + renderToStaticMarkup(_jsxs("html", { lang: "en", children: [_jsxs("head", { children: [_jsx("meta", { charSet: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsx("title", { children: "CodeLedger Insight" }), _jsx("style", { children: insightStyles })] }), _jsxs("body", { children: [_jsxs("div", { className: "shell", children: [_jsxs("header", { className: "header", children: [_jsxs("div", { children: [_jsx("p", { className: "kicker", children: "CodeLedger Insight" }), _jsx("h1", { className: "title", children: "Engineering work as a compounding asset" }), _jsx("p", { className: "subtitle", children: "Every metric is traceable to evidence. No manual logging." })] }), _jsxs("div", { className: "card snapshot-card", children: [_jsx("strong", { children: snapshot.eventCount }), _jsxs("span", { children: ["events \u00B7 ", snapshot.generatedAt.slice(0, 16).replace('T', ' ')] })] })] }), _jsx("nav", { className: "nav", children: routes.map((route) => (_jsx("a", { href: route.href, className: route.href === active ? 'active' : '', children: route.label }, route.href))) }), _jsx(WelcomeBanner, { welcomeState: snapshot.welcomeState }), _jsx(ModeTabs, { snapshot: snapshot, pathname: active }), _jsx(OnboardingHint, { snapshot: snapshot }), _jsx(ScopeHeader, { snapshot: snapshot, pathname: active }), page, _jsx("p", { className: "footer-note", children: "Aggregate signals only \u2014 no individual productivity tracking." })] }), _jsxs("aside", { className: "evidence-drawer", id: "evidence-drawer", children: [_jsx("button", { className: "drawer-close", id: "evidence-close", children: "Close" }), _jsx("div", { id: "evidence-content" })] }), _jsx("script", { dangerouslySetInnerHTML: { __html: drawerScript } })] })] }));
31
+ return '<!doctype html>' + renderToStaticMarkup(_jsxs("html", { lang: "en", children: [_jsxs("head", { children: [_jsx("meta", { charSet: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsx("title", { children: "CodeLedger Insight" }), _jsx("style", { children: insightStyles })] }), _jsxs("body", { children: [_jsxs("div", { className: "shell", children: [_jsxs("header", { className: "header", children: [_jsxs("div", { children: [_jsx("p", { className: "kicker", children: "CodeLedger Insight" }), _jsx("h1", { className: "title", children: "Engineering work as a compounding asset" }), _jsx("p", { className: "subtitle", children: "Every metric is traceable to evidence. No manual logging." })] }), _jsxs("div", { className: "card snapshot-card", children: [_jsx("strong", { children: snapshot.eventCount }), _jsxs("span", { children: ["events \u00B7 ", snapshot.generatedAt.slice(0, 16).replace('T', ' ')] })] })] }), _jsx("nav", { className: "nav", children: routes.map((route) => {
32
+ const prefix = options?.pagePrefix ?? '';
33
+ const href = options?.staticMode
34
+ ? (route.href === '/' ? `${prefix}index.html` : `${prefix}${route.href.slice(1)}.html`)
35
+ : route.href;
36
+ return _jsx("a", { href: href, className: route.href === active ? 'active' : '', children: route.label }, route.href);
37
+ }) }), _jsx(WelcomeBanner, { welcomeState: snapshot.welcomeState }), _jsx(ModeTabs, { snapshot: snapshot, pathname: active }), _jsx(OnboardingHint, { snapshot: snapshot }), _jsx(ScopeHeader, { snapshot: snapshot, pathname: active }), page, _jsx("p", { className: "footer-note", children: "Aggregate signals only \u2014 no individual productivity tracking." })] }), _jsx("div", { className: "drawer-backdrop", id: "drawer-backdrop" }), _jsxs("aside", { className: "evidence-drawer", id: "evidence-drawer", children: [_jsxs("div", { className: "drawer-sticky-header", children: [_jsx("button", { className: "drawer-close", id: "evidence-close", children: "Close" }), _jsx("a", { className: "drawer-newtab", id: "evidence-newtab", href: "#", target: "_blank", rel: "noopener", children: "Open full page" })] }), _jsx("div", { className: "drawer-body", id: "evidence-content" })] }), options?.evidenceCache && (_jsx("script", { dangerouslySetInnerHTML: { __html: `window.__EVIDENCE_CACHE__ = ${JSON.stringify(options.evidenceCache)};` } })), _jsx("script", { dangerouslySetInnerHTML: { __html: drawerScript } })] })] }));
38
+ }
39
+ /** Evidence detail — the metric help definitions, reused from CockpitLayout */
40
+ import { METRIC_HELP } from './components/CockpitLayout.js';
41
+ /**
42
+ * Render a full-page evidence view — no drawer, no side panel.
43
+ * Used when "Open full page" is clicked from the evidence drawer.
44
+ */
45
+ export function renderEvidencePage(metric, explanation, events, filters) {
46
+ const labelMap = {
47
+ writeSafetySuccessRate: 'Write safety',
48
+ redactRate: 'Redaction rate',
49
+ rejectRate: 'Rejection rate',
50
+ integrityDrift: 'Integrity drift',
51
+ boundaryIntegrity: 'Boundary integrity',
52
+ cleanLedgerAdmissionRate: 'Clean ledger admission',
53
+ firstPassSuccessRate: 'First-pass success',
54
+ reworkRatio: 'Rework ratio',
55
+ executionReliability: 'Execution reliability',
56
+ patternReuseRate: 'Pattern reuse',
57
+ timeToContext: 'Time to context',
58
+ shadowKnowledgeIndex: 'Shadow knowledge',
59
+ goldenPathAdherence: 'Golden path adherence',
60
+ promptLift: 'Prompt lift',
61
+ contextCompression: 'Context compression',
62
+ wasteAvoided: 'Waste avoided',
63
+ estimatedSavings: 'Estimated savings',
64
+ };
65
+ const humanLabel = labelMap[metric] ?? metric;
66
+ const help = METRIC_HELP[metric];
67
+ return '<!doctype html>' + renderToStaticMarkup(_jsxs("html", { lang: "en", children: [_jsxs("head", { children: [_jsx("meta", { charSet: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsxs("title", { children: [humanLabel, " \u2014 CodeLedger Evidence"] }), _jsx("style", { children: insightStyles })] }), _jsx("body", { children: _jsxs("div", { className: "shell evidence-full-page", children: [_jsxs("header", { className: "evidence-fp-header", children: [_jsxs("div", { children: [_jsx("p", { className: "kicker", children: "Evidence" }), _jsx("h1", { className: "title", children: humanLabel }), _jsx("p", { className: "subtitle", children: explanation }), help && (_jsxs("p", { className: "scope-context", children: [_jsx("strong", { children: "Why this matters:" }), " ", help.whyItMatters] }))] }), _jsx("a", { href: "javascript:history.back()", className: "evidence-fp-back", children: "Back to dashboard" })] }), _jsx("section", { className: "evidence-fp-meta", children: Object.entries(filters).filter(([k]) => !['metric', 'syntheticOnly'].includes(k)).map(([k, v]) => (_jsxs("span", { className: "evidence-fp-filter", children: [k, ": ", String(v)] }, k))) }), events.length === 0 ? (_jsxs("section", { className: "panel evidence-fp-empty", children: [_jsx("p", { children: _jsx("strong", { children: "No evidence events yet." }) }), _jsxs("p", { children: ["Events will appear here as your team runs CodeLedger commands that produce ", humanLabel.toLowerCase(), " signals."] })] })) : (_jsxs("section", { className: "evidence-fp-list", children: [_jsxs("p", { className: "scope-context", children: [events.length, " evidence event", events.length !== 1 ? 's' : ''] }), events.slice(0, 50).map((entry, i) => {
68
+ const e = entry;
69
+ const isRefinement = e['type'] === 'PROMPT_REFINEMENT';
70
+ return (_jsxs("article", { className: "evidence-fp-row", children: [_jsxs("div", { className: "evidence-fp-row-header", children: [_jsx("strong", { children: String(e['type'] ?? 'Event') }), _jsx("span", { className: "evidence-fp-time", children: String(e['timestamp'] ?? '').slice(0, 16).replace('T', ' ') }), e['sourceLabel'] && _jsx("span", { className: "source-label", children: String(e['sourceLabel']) })] }), isRefinement && e['originalTask'] && (_jsxs("p", { className: "evidence-fp-detail", children: [_jsx("strong", { children: "Task:" }), " ", String(e['originalTask'])] })), isRefinement && e['refinedTask'] && e['refinedTask'] !== e['originalTask'] && (_jsxs("p", { className: "evidence-fp-detail", children: [_jsx("strong", { children: "Refined:" }), " ", String(e['refinedTask'])] })), e['impact'] && _jsx("p", { className: "evidence-fp-impact", children: String(e['impact']) }), (e['repo'] || e['command']) && (_jsxs("p", { className: "evidence-fp-meta-line", children: [String(e['repo'] ?? ''), " ", String(e['command'] ?? '')] }))] }, i));
71
+ })] })), _jsx("p", { className: "footer-note", children: "Aggregate signals only \u2014 no individual productivity tracking." })] }) })] }));
23
72
  }
24
73
  function selectPage(pathname, snapshot) {
25
74
  switch (pathname) {
@@ -52,54 +101,152 @@ function OnboardingHint({ snapshot }) {
52
101
  const drawerScript = `
53
102
  const drawer = document.getElementById('evidence-drawer');
54
103
  const content = document.getElementById('evidence-content');
55
- document.getElementById('evidence-close')?.addEventListener('click', () => drawer?.classList.remove('open'));
56
- document.addEventListener('click', async (event) => {
57
- const target = event.target;
58
- if (!(target instanceof HTMLElement)) return;
59
- const metric = target.getAttribute('data-metric');
60
- if (!metric) return;
61
104
 
62
- // Carry forward the current page's view/scenario/scope filters
63
- const pageParams = new URLSearchParams(window.location.search);
64
- const evidenceParams = new URLSearchParams();
65
- evidenceParams.set('metric', metric);
66
- for (const key of ['view', 'scenario', 'repo', 'team', 'scopeType', 'scopeId', 'dateFrom', 'dateTo']) {
67
- if (pageParams.has(key)) evidenceParams.set(key, pageParams.get(key));
68
- }
105
+ // Human-readable labels managers see language, not code
106
+ const METRIC_LABELS = {
107
+ writeSafetySuccessRate: 'Write safety',
108
+ redactRate: 'Redaction rate',
109
+ rejectRate: 'Rejection rate',
110
+ integrityDrift: 'Integrity drift',
111
+ boundaryIntegrity: 'Boundary integrity',
112
+ cleanLedgerAdmissionRate: 'Clean ledger admission',
113
+ firstPassSuccessRate: 'First-pass success',
114
+ reworkRatio: 'Rework ratio',
115
+ executionReliability: 'Execution reliability',
116
+ patternReuseRate: 'Pattern reuse',
117
+ timeToContext: 'Time to context',
118
+ shadowKnowledgeIndex: 'Shadow knowledge',
119
+ goldenPathAdherence: 'Golden path adherence',
120
+ primitiveAdoptionRate: 'Primitive adoption',
121
+ promptLift: 'Prompt lift',
122
+ contextCompression: 'Context compression',
123
+ wasteAvoided: 'Waste avoided',
124
+ estimatedSavings: 'Estimated savings',
125
+ };
126
+ function metricLabel(key) { return METRIC_LABELS[key] || key.replace(/([A-Z])/g, ' $$1').replace(/^./, function(s) { return s.toUpperCase(); }); }
69
127
 
70
- const response = await fetch('/api/evidence?' + evidenceParams.toString());
71
- const payload = await response.json();
72
- const events = (payload.events ?? []).slice(0, 12);
128
+ var backdrop = document.getElementById('drawer-backdrop');
129
+ var newtabLink = document.getElementById('evidence-newtab');
73
130
 
131
+ // ── Close drawer + clean URL ──────────────────────────────────────────────
132
+ function closeDrawer() {
133
+ drawer?.classList.remove('open');
134
+ backdrop?.classList.remove('open');
135
+ var url = new URL(window.location);
136
+ url.searchParams.delete('evidence');
137
+ history.replaceState(null, '', url.toString());
138
+ }
139
+ document.getElementById('evidence-close')?.addEventListener('click', closeDrawer);
140
+ backdrop?.addEventListener('click', closeDrawer);
141
+ document.addEventListener('keydown', function(e) {
142
+ if (e.key === 'Escape' && drawer?.classList.contains('open')) closeDrawer();
143
+ });
144
+
145
+ // ── Shared evidence renderer (used by both cache and fetch paths) ─────────
146
+ function renderEvidenceContent(humanLabel, explanation, events) {
147
+ events = (events || []).slice(0, 12);
74
148
  if (events.length === 0) {
75
- content.innerHTML = '<h2>' + metric + '</h2>'
76
- + '<p>' + (payload.explanation ?? '') + '</p>'
149
+ content.innerHTML = '<h2>' + humanLabel + '</h2>'
150
+ + '<p>' + (explanation || '') + '</p>'
77
151
  + '<div class="empty-evidence">'
78
152
  + '<p><strong>No evidence events yet.</strong></p>'
79
- + '<p>Events will appear here as your team runs CodeLedger commands that produce ' + metric + ' signals.</p>'
153
+ + '<p>Events will appear here as your team runs CodeLedger commands.</p>'
80
154
  + '</div>';
81
- drawer?.classList.add('open');
82
155
  return;
83
156
  }
84
-
85
- const rows = events.map((entry) => {
86
- const impact = entry.impact ? '<p class="impact">' + entry.impact + '</p>' : '';
87
- const source = entry.sourceLabel ? '<span class="source-label">' + entry.sourceLabel + '</span>' : '';
88
- const detail = entry.command ?? entry.path ?? entry.repo ?? '';
89
-
90
- // Prompt refinement events get a richer summary
157
+ var rows = events.map(function(entry) {
158
+ var impact = entry.impact ? '<p class="impact">' + entry.impact + '</p>' : '';
159
+ var source = entry.sourceLabel ? '<span class="source-label">' + entry.sourceLabel + '</span>' : '';
160
+ var detail = entry.command || entry.path || entry.repo || '';
91
161
  if (entry.type === 'PROMPT_REFINEMENT') {
92
- const orig = entry.originalTask ? '<p class="evidence-task"><strong>Task:</strong> ' + entry.originalTask + '</p>' : '';
93
- const refined = entry.refinedTask && entry.refinedTask !== entry.originalTask
162
+ var orig = entry.originalTask ? '<p class="evidence-task"><strong>Task:</strong> ' + entry.originalTask + '</p>' : '';
163
+ var refined = entry.refinedTask && entry.refinedTask !== entry.originalTask
94
164
  ? '<p class="evidence-task"><strong>Refined:</strong> ' + entry.refinedTask + '</p>' : '';
95
- const ctx = entry.contextReductionPct > 0 ? '<p class="evidence-context">Context reduced ' + entry.contextReductionPct + '% (' + entry.scopeUsed + '/' + entry.scopeConsidered + ' files used)</p>' : '';
165
+ var ctx = entry.contextReductionPct > 0 ? '<p class="evidence-context">Context reduced ' + entry.contextReductionPct + '%</p>' : '';
96
166
  return '<div class="row evidence-rich">' + orig + refined + ctx + impact + source + '</div>';
97
167
  }
98
-
99
168
  return '<div class="row"><div><strong>' + entry.type + '</strong><div>' + entry.timestamp + '</div>' + impact + '</div><div>' + detail + ' ' + source + '</div></div>';
100
169
  }).join('');
101
- content.innerHTML = '<h2>' + metric + '</h2><p>' + (payload.explanation ?? '') + '</p>' + rows;
102
- drawer?.classList.add('open');
170
+ content.innerHTML = '<h2>' + humanLabel + '</h2><p>' + (explanation || '') + '</p>' + rows;
171
+ }
172
+
173
+ // ── Core evidence loader ──────────────────────────────────────────────────
174
+ async function openEvidence(metric) {
175
+ var pageParams = new URLSearchParams(window.location.search);
176
+ var evidenceParams = new URLSearchParams();
177
+ evidenceParams.set('metric', metric);
178
+ ['view','scenario','repo','team','scopeType','scopeId','dateFrom','dateTo'].forEach(function(key) {
179
+ if (pageParams.has(key)) evidenceParams.set(key, pageParams.get(key));
180
+ });
181
+
182
+ // Update URL — makes the evidence state deep-linkable and shareable
183
+ var url = new URL(window.location);
184
+ url.searchParams.set('evidence', metric);
185
+ history.replaceState(null, '', url.toString());
186
+
187
+ // "Open full page" — links to /evidence?metric=... (formatted full-page view)
188
+ if (newtabLink) {
189
+ newtabLink.href = '/evidence?' + evidenceParams.toString();
190
+ newtabLink.textContent = 'Open full page';
191
+ }
192
+
193
+ var humanLabel = metricLabel(metric);
194
+
195
+ // Static mode: use pre-embedded evidence cache instead of fetch
196
+ if (window.__EVIDENCE_CACHE__ && window.__EVIDENCE_CACHE__[metric]) {
197
+ var cached = window.__EVIDENCE_CACHE__[metric];
198
+ renderEvidenceContent(humanLabel, cached.explanation || '', cached.events || []);
199
+ drawer?.classList.add('open'); backdrop?.classList.add('open');
200
+ return;
201
+ }
202
+
203
+ var response;
204
+ try {
205
+ response = await fetch('/api/evidence?' + evidenceParams.toString());
206
+ if (!response.ok) throw new Error('HTTP ' + response.status);
207
+ } catch (err) {
208
+ content.innerHTML = '<h2>' + humanLabel + '</h2>'
209
+ + '<div class="empty-evidence">'
210
+ + '<p><strong>Unable to load evidence.</strong></p>'
211
+ + '<p>The evidence API returned an error. Try refreshing the page.</p>'
212
+ + '</div>';
213
+ drawer?.classList.add('open'); backdrop?.classList.add('open');
214
+ return;
215
+ }
216
+
217
+ var payload = await response.json();
218
+ renderEvidenceContent(humanLabel, payload.explanation, payload.events);
219
+ drawer?.classList.add('open'); backdrop?.classList.add('open');
220
+ }
221
+
222
+ // ── Click handler ─────────────────────────────────────────────────────────
223
+ document.addEventListener('click', function(event) {
224
+ var target = event.target;
225
+ if (!(target instanceof HTMLElement)) return;
226
+ var metric = target.getAttribute('data-metric');
227
+ if (!metric) return;
228
+ openEvidence(metric);
229
+ });
230
+
231
+ // ── Deep-link: auto-open on page load if ?evidence= is present ────────────
232
+ (function() {
233
+ var params = new URLSearchParams(window.location.search);
234
+ var evidenceParam = params.get('evidence');
235
+ if (evidenceParam) {
236
+ setTimeout(function() { openEvidence(evidenceParam); }, 150);
237
+ }
238
+ })();
239
+
240
+ // ── Metric help toggle (inline expand/collapse) ──────────────────────────
241
+ document.addEventListener('click', function(event) {
242
+ var target = event.target;
243
+ if (!(target instanceof HTMLElement)) return;
244
+ var helpFor = target.getAttribute('data-help-for');
245
+ if (!helpFor) return;
246
+ var helpContent = document.querySelector('[data-help-content="' + helpFor + '"]');
247
+ if (helpContent) {
248
+ helpContent.classList.toggle('open');
249
+ }
103
250
  });
104
251
  `;
105
252
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.tsx"],"names":[],"mappings":"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"}
package/dist/theme.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const insightStyles = "\n:root {\n --bg: #f3efe6;\n --panel: #fffdf8;\n --ink: #1e2430;\n --muted: #596275;\n --line: #d7d0c3;\n --accent: #0b6e4f;\n --accent-soft: #dcefe8;\n --warn: #bc6c25;\n --risk: #a23b2a;\n --shadow: rgba(30, 36, 48, 0.08);\n}\n* { box-sizing: border-box; }\nbody {\n margin: 0;\n font-family: \"Iowan Old Style\", \"Palatino Linotype\", Georgia, serif;\n color: var(--ink);\n background:\n radial-gradient(circle at top left, rgba(11,110,79,0.08), transparent 35%),\n linear-gradient(180deg, #f6f1e8 0%, #f2eee5 100%);\n}\na { color: inherit; text-decoration: none; }\n.shell { max-width: 1280px; margin: 0 auto; padding: 32px 20px 48px; }\n.header { display: flex; justify-content: space-between; gap: 16px; align-items: flex-start; margin-bottom: 24px; }\n.title { font-size: 40px; line-height: 1; margin: 0 0 8px; }\n.subtitle { margin: 0; color: var(--muted); max-width: 720px; }\n.nav { display: flex; gap: 10px; flex-wrap: wrap; margin: 20px 0 28px; }\n.nav a {\n padding: 10px 14px;\n border-radius: 999px;\n border: 1px solid var(--line);\n background: rgba(255,255,255,0.72);\n}\n.nav a.active { background: var(--ink); color: white; border-color: var(--ink); }\n.mode-tabs {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n margin-bottom: 12px;\n}\n.mode-pill {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 10px 14px;\n border-radius: 999px;\n border: 1px solid rgba(215, 208, 195, 0.9);\n background: rgba(255, 255, 255, 0.85);\n font-size: 14px;\n color: var(--ink);\n}\n.mode-pill small {\n font-size: 11px;\n letter-spacing: 0.02em;\n color: var(--muted);\n}\n.mode-pill.active {\n background: var(--accent-soft);\n border-color: var(--accent);\n color: var(--accent);\n}\n.scope-shell {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 20px;\n padding: 18px 20px;\n background: rgba(255, 255, 255, 0.85);\n border: 1px solid rgba(215, 208, 195, 0.9);\n border-radius: 16px;\n box-shadow: 0 6px 30px rgba(30, 36, 48, 0.06);\n margin-bottom: 20px;\n}\n.scope-title {\n font-size: 18px;\n margin: 0 0 6px;\n}\n.scope-actions {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 280px;\n}\n.scope-selector {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.scope-selector-label {\n font-size: 11px;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--muted);\n}\n.scope-selector-row {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n.scope-pill {\n padding: 6px 12px;\n border-radius: 999px;\n border: 1px solid rgba(215, 208, 195, 0.9);\n background: rgba(255, 255, 255, 0.7);\n font-size: 13px;\n color: var(--ink);\n}\n.scope-pill.active {\n background: var(--ink);\n color: white;\n border-color: var(--ink);\n}\n.comparison-panel {\n border-radius: 16px;\n background: var(--panel);\n}\n.comparison-grid {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n}\n.comparison-card {\n border-radius: 12px;\n border: 1px solid rgba(215, 208, 195, 0.85);\n padding: 12px;\n background: white;\n box-shadow: 0 8px 20px rgba(30, 36, 48, 0.04);\n}\n.comparison-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 6px;\n gap: 12px;\n}\n.comparison-direction {\n font-size: 11px;\n text-transform: uppercase;\n border-radius: 999px;\n padding: 2px 8px;\n border: 1px solid rgba(215, 208, 195, 0.7);\n}\n.comparison-direction.above {\n color: #0b6e4f;\n border-color: rgba(11, 110, 79, 0.6);\n}\n.comparison-direction.below {\n color: #a23b2a;\n border-color: rgba(162, 59, 42, 0.6);\n}\n.comparison-direction.flat {\n color: var(--muted);\n border-color: rgba(215, 208, 195, 0.7);\n}\n.comparison-value {\n font-size: 22px;\n font-weight: 700;\n margin-bottom: 6px;\n}\n.comparison-detail {\n margin: 0;\n font-size: 13px;\n color: var(--muted);\n min-height: 36px;\n}\n.comparison-confidence {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n border-radius: 999px;\n padding: 4px 10px;\n border: 1px solid rgba(215, 208, 195, 0.9);\n}\n.comparison-confidence.high { color: var(--accent); border-color: var(--accent); }\n.comparison-confidence.medium { color: var(--warn); border-color: var(--warn); }\n.comparison-confidence.low { color: var(--risk); border-color: var(--risk); }\n.pattern-panel {\n margin-top: 16px;\n}\n.scenario-banner {\n border-radius: 12px;\n border: 1px solid rgba(215, 208, 195, 0.85);\n padding: 8px 12px;\n background: rgba(255, 255, 255, 0.8);\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n color: var(--muted);\n}\n.scenario-picker {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.scenario-picker-label {\n font-size: 11px;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--muted);\n}\n.scenario-picker-row {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n.scenario-pill {\n padding: 6px 10px;\n border-radius: 999px;\n border: 1px solid rgba(215, 208, 195, 0.9);\n background: rgba(255, 255, 255, 0.7);\n font-size: 12px;\n color: var(--ink);\n}\n.scenario-pill.active {\n background: var(--ink);\n color: white;\n border-color: var(--ink);\n}\n.scenario-banner strong {\n color: var(--ink);\n}\n.grid { display: grid; gap: 16px; }\n.cards { grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }\n.two-col { grid-template-columns: minmax(0, 1.6fr) minmax(300px, 1fr); align-items: start; }\n.insights-panel ul { list-style:none; margin:0; padding:0; }\n.insights-panel li { padding: 12px 0; border-bottom:1px solid rgba(215,208,195,0.8); }\n.insights-panel li:last-child { border-bottom:none; }\n.insight-severity { font-size:12px; padding:3px 8px; border-radius:12px; margin-left:6px; border:1px solid rgba(215,208,195,0.9); }\n.insight-severity.info { background:#f0f7f4; color:#0b6e4f; }\n.insight-severity.warn { background:#fff4eb; color:#a23b2a; }\n.insight-severity.critical { background:#ffe0df; color:#a23b2a; border-color:#a23b2a; }\n.insight-actions { display:flex; gap:12px; align-items:center; justify-content:space-between; font-size:12px; margin-top:4px; }\n.storyline { display:flex; flex-wrap:wrap; gap:16px; align-items:center; margin-bottom:12px; }\n.scope-context { font-size:13px; color:var(--muted); }\n.scope-view-mode { font-style: italic; }\n.page-header { display:flex; justify-content:space-between; align-items:flex-start; gap:16px; margin-bottom:20px; padding:20px; border-radius:20px; border:1px solid rgba(215,208,195,0.8); background:var(--panel); box-shadow:0 10px 30px var(--shadow); }\n.page-title { font-size:20px; font-weight:700; margin:0; }\n.page-subtitle { margin:8px 0; color:var(--muted); }\n.scope-context-bar { display:flex; flex-wrap:wrap; gap:12px; font-size:12px; color:var(--muted); }\n.scope-context-bar span { padding:4px 8px; border-radius:10px; border:1px solid rgba(215,208,195,0.8); background:rgba(255,255,255,0.7); }\n.page-trend-note { margin-top:8px; font-size:13px; color:var(--muted); }\n.header-badges { display:flex; flex-direction:column; gap:6px; }\n.trend-note { font-size:14px; color:var(--muted); margin-top:8px; }\n.story-panel { flex-direction:column; }\n.story-panel .value-scope { margin-top:12px; display:flex; flex-wrap:wrap; gap:12px; font-size:13px; color:var(--muted); }\n.value-trend-note { font-size:13px; color:var(--muted); margin-top:8px; }\n.card, .panel {\n background: var(--panel);\n border: 1px solid rgba(215, 208, 195, 0.9);\n border-radius: 20px;\n padding: 18px;\n box-shadow: 0 14px 40px var(--shadow);\n}\n.metric-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-bottom:20px; }\n.metric-card { border-radius:18px; border:1px solid rgba(215,208,195,0.8); background:var(--panel); padding:18px; display:flex; flex-direction:column; gap:12px; box-shadow:0 10px 30px var(--shadow); }\n.metric-card header { display:flex; justify-content:space-between; align-items:center; }\n.metric-label { font-size:12px; letter-spacing:0.2em; text-transform:uppercase; color:var(--muted); }\n.metric-display strong { font-size:28px; }\n.metric-display span { font-size:13px; color:var(--muted); }\n.metric-severity { font-size:11px; padding:4px 10px; border-radius:999px; border:1px solid rgba(215,208,195,0.8); text-transform:uppercase; }\n.metric-severity.high { color:#a23b2a; border-color:#a23b2a; background:rgba(162,59,42,0.12); }\n.metric-severity.medium { color:#bc6c25; border-color:#bc6c25; background:rgba(188,108,37,0.12); }\n.metric-severity.low { color:#0b6e4f; border-color:#0b6e4f; background:rgba(11,110,79,0.12); }\n.value-hero { display:flex; justify-content:space-between; align-items:flex-start; gap:16px; padding:20px; border-radius:20px; border:1px solid rgba(215,208,195,0.8); background:var(--panel); box-shadow:0 14px 36px var(--shadow); margin-bottom:20px; }\n.value-title { font-size:36px; margin:8px 0; }\n.action-callout { border-radius:18px; border:1px solid rgba(215,208,195,0.8); padding:20px; background:var(--panel); box-shadow:0 10px 30px var(--shadow); margin-bottom:20px; }\n.callout-grid { display:grid; gap:12px; margin-top:12px; }\n.callout-title { display:flex; justify-content:space-between; align-items:center; gap:8px; }\n.value-breakdown, .pattern-list, .hotspot-list { margin-bottom:20px; }\n.value-breakdown-row span { font-size:13px; color:var(--muted); }\n.value-breakdown .row strong, .pattern-list article strong { font-size:16px; }\n.value-formula {\n border-radius: 18px;\n border: 1px solid rgba(215, 208, 195, 0.8);\n padding: 20px;\n background: var(--panel);\n box-shadow: 0 10px 30px var(--shadow);\n margin: 16px 0;\n}\n.formula-metrics {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n margin-top: 12px;\n}\n.formula-metrics article {\n padding: 10px 12px;\n border-radius: 12px;\n border: 1px solid rgba(215, 208, 195, 0.7);\n background: rgba(255, 255, 255, 0.85);\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 140px;\n font-size: 12px;\n}\n.confidence-note { margin-top: 12px; font-size: 13px; color: var(--muted); }\n.insight-strip { margin:20px 0; }\n.insight-strip-panel { margin:0; }\n.hotspot-list { border-radius:18px; border:1px solid rgba(215,208,195,0.8); padding:20px; background:var(--panel); box-shadow:0 10px 30px var(--shadow); }\n.hotspot-items, .pattern-items { display:grid; gap:12px; margin-top:16px; }\n.hotspot-items article, .pattern-items article { border-radius:16px; border:1px solid rgba(215,208,195,0.8); padding:12px; background:#fff; }\n.hotspot-metrics { display:flex; gap:12px; font-size:12px; color:var(--muted); }\n.synthetic-pill { padding:4px 10px; border-radius:999px; border:1px solid rgba(215,208,195,0.8); background:#fff; font-size:12px; }\n.value-hero { display:flex; flex-direction:column; gap:8px; }\n.value-scope { margin-top:12px; display:flex; flex-wrap:wrap; gap:12px; font-size:13px; color:var(--muted); }\n.value-scope span { display:inline-flex; gap:6px; padding:4px 8px; border-radius:12px; border:1px solid rgba(215,208,195,0.8); background:rgba(255,255,255,0.5); }\n.confidence-badge { border-radius:999px; padding:4px 12px; font-size:12px; display:inline-flex; align-items:center; gap:6px; border:1px solid rgba(215,208,195,0.8); }\n.confidence-badge.high { background:var(--accent); color:#fff; border-color:var(--accent); }\n.confidence-badge.medium { background:var(--warn); color:#fff; border-color:var(--warn); }\n.confidence-badge.low { background:#fff4eb; color:#a23b2a; border-color:#a23b2a; }\n.value-breakdown .row strong, .value-assumptions .row strong { font-size:16px; }\n.kicker { font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin-bottom: 8px; }\n.metric { font-size: 34px; font-weight: 700; margin: 0; }\n.metric small { font-size: 14px; color: var(--muted); }\n.section-title { font-size: 24px; margin: 0 0 16px; }\n.knowledge-summary { margin-bottom:12px; font-size:14px; color:var(--muted); display:flex; flex-direction:column; gap:4px; }\n.list { display: grid; gap: 10px; }\n.hotspot-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap:12px; margin-top:12px; }\n.hotspot-card, .shadow-card { border-radius:16px; padding:12px; border:1px solid rgba(215,208,195,0.8); display:flex; flex-direction:column; gap:8px; background:#fff; box-shadow:0 10px 30px rgba(30,36,48,0.05); }\n.hotspot-header { display:flex; justify-content:space-between; align-items:center; }\n.hotspot-body { display:flex; justify-content:space-between; gap:12px; }\n.hotspot-body span { font-size:12px; color:var(--muted); }\n.hotspot-note { margin:0; font-size:12px; color:var(--muted); }\n.trend-indicator { font-size:12px; text-transform:capitalize; border-radius:999px; padding:4px 10px; border:1px solid rgba(215,208,195,0.8); }\n.trend-indicator.up { color:#0b6e4f; border-color:#0b6e4f; background:rgba(11,110,79,0.12); }\n.trend-indicator.down { color:#a23b2a; border-color:#a23b2a; background:rgba(162,59,42,0.12); }\n.trend-indicator.flat { color:var(--muted); border-color:rgba(215,208,195,0.9); }\n.pattern-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap:12px; margin-top:12px; }\n.pattern-card { border-radius:16px; padding:12px; border:1px solid rgba(215,208,195,0.8); background:#fff; box-shadow:0 10px 24px rgba(30,36,48,0.05); }\n.pattern-meta { display:flex; flex-direction:column; font-size:12px; color:var(--muted); margin-top:6px; gap:2px; }\n.row { display: flex; justify-content: space-between; gap: 16px; padding: 10px 0; border-top: 1px solid var(--line); }\n.row:first-child { border-top: 0; padding-top: 0; }\n.value-breakdown .row div, .value-assumptions .row div { font-size: 13px; color: var(--muted); }\n.badge { display: inline-flex; padding: 4px 10px; border-radius: 999px; font-size: 12px; border: 1px solid var(--line); }\n.badge.high { color: white; background: var(--risk); border-color: var(--risk); }\n.badge.medium { color: white; background: var(--warn); border-color: var(--warn); }\n.badge.low { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); }\n.btn-link {\n border: 0; background: none; padding: 0; color: var(--accent); cursor: pointer; font: inherit; text-align: left;\n}\n.evidence-drawer {\n position: fixed; top: 0; right: 0; width: min(420px, 100vw); height: 100vh; background: var(--panel);\n border-left: 1px solid var(--line); box-shadow: -12px 0 40px var(--shadow); padding: 20px; overflow: auto; display: none;\n}\n.evidence-drawer.open { display: block; }\n.drawer-close { border: 0; background: var(--ink); color: white; border-radius: 999px; padding: 8px 12px; cursor: pointer; }\n.chart-wrap svg { overflow: visible; }\n.footer-note { color: var(--muted); font-size: 11px; margin-top: 32px; text-align: center; opacity: 0.6; }\n.impact { font-size: 12px; color: var(--muted); margin-top: 4px; }\n.empty-evidence { text-align: center; padding: 24px 0; color: var(--muted); }\n.empty-evidence strong { color: var(--ink); }\n.source-label { font-size: 11px; padding: 2px 6px; border-radius: 4px; background: #ede9df; color: var(--muted); }\n.evidence-rich { padding: 12px 0; border-bottom: 1px solid var(--line); }\n.evidence-task { margin: 4px 0; font-size: 13px; line-height: 1.5; }\n.evidence-context { margin: 4px 0; font-size: 12px; color: var(--accent); }\n.system-health-card { text-align: center; padding: 24px 20px; }\n.health-headline { margin-bottom: 16px; }\n.health-score { font-size: 48px; display: block; line-height: 1; color: var(--accent); }\n.health-sentence { font-size: 15px; color: var(--muted); }\n.health-sub-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }\n.health-sub {\n display: flex; flex-direction: column; align-items: center; gap: 2px;\n text-decoration: none; color: inherit; border-radius: 8px; padding: 8px 4px;\n transition: background 0.15s;\n}\n.health-sub:hover { background: rgba(11,110,79,0.06); }\n.health-sub-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--muted); }\n.health-sub strong { font-size: 18px; }\n.severity-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }\n.severity-dot.green { background: var(--accent); }\n.severity-dot.amber { background: var(--warn); }\n.severity-dot.red { background: var(--risk); }\n.drivers-section { }\n.drivers-subtitle { margin: 0 0 12px; font-size: 13px; color: var(--muted); }\n.drivers-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }\n.driver-item { display: flex; flex-direction: column; align-items: center; gap: 4px; }\n.driver-label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--muted); }\n.driver-item strong { font-size: 22px; }\n.detail-section { margin-top: 16px; opacity: 0.85; }\n.detail-section .panel { padding: 14px 18px; }\n.detail-section .kicker { margin-bottom: 6px; }\n.snapshot-card { display: flex; flex-direction: column; align-items: center; gap: 2px; }\n.snapshot-card strong { font-size: 28px; }\n.snapshot-card span { font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.5px; }\n.efficiency-zero-state { text-align: center; padding: 24px; }\n.efficiency-zero-state .causal-chain {\n font-style: italic; color: var(--accent); font-size: 15px; margin-top: 12px;\n}\n.efficiency-strip-row {\n display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 8px;\n}\n.efficiency-strip-item {\n display: flex; flex-direction: column; align-items: center; gap: 4px;\n}\n.efficiency-strip-label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--muted); }\n.efficiency-strip-item strong { font-size: 22px; }\n.trend-compact {\n display: flex; gap: 6px; align-items: flex-end; height: 70px; margin-top: 12px;\n}\n.trend-bar-group { display: flex; gap: 2px; align-items: flex-end; }\n.trend-bar { width: 8px; border-radius: 2px 2px 0 0; min-height: 2px; }\n.trend-bar-lift { background: var(--accent); }\n.trend-bar-quality { background: var(--warn); }\n.trend-legend { display: flex; gap: 16px; margin-top: 8px; font-size: 12px; color: var(--muted); }\n.legend-item { display: flex; align-items: center; gap: 4px; }\n.dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }\n.dot-lift { background: var(--accent); }\n.dot-quality { background: var(--warn); }\n.welcome-banner {\n background: linear-gradient(135deg, var(--accent-soft), #eef6f2);\n border: 1px solid var(--accent);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 20px;\n}\n.welcome-banner strong { display: block; font-size: 16px; margin-bottom: 4px; color: var(--accent); }\n.welcome-banner p { margin: 0; color: var(--muted); font-size: 14px; }\n.onboarding-hint {\n background: var(--panel);\n border: 1px dashed var(--line);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 20px;\n}\n.onboarding-columns { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }\n.onboarding-col { font-size: 14px; line-height: 1.5; }\n.onboarding-note { color: var(--accent); font-style: italic; }\n.onboarding-steps { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--line); }\n.onboarding-steps p { margin: 0 0 8px; font-size: 14px; font-weight: 600; }\n.onboarding-steps ol { margin: 0; padding-left: 20px; font-size: 13px; line-height: 1.7; }\n.onboarding-steps code { background: #ede9df; padding: 2px 6px; border-radius: 4px; font-size: 12px; }\n@media (max-width: 900px) {\n .two-col { grid-template-columns: 1fr; }\n .title { font-size: 30px; }\n .onboarding-columns { grid-template-columns: 1fr; }\n}\n";
1
+ export declare const insightStyles = "\n:root {\n --bg: #f3efe6;\n --panel: #fffdf8;\n --ink: #1e2430;\n --muted: #596275;\n --line: #d7d0c3;\n --accent: #0b6e4f;\n --accent-soft: #dcefe8;\n --warn: #bc6c25;\n --risk: #a23b2a;\n --shadow: rgba(30, 36, 48, 0.08);\n}\n* { box-sizing: border-box; }\nbody {\n margin: 0;\n font-family: \"Iowan Old Style\", \"Palatino Linotype\", Georgia, serif;\n color: var(--ink);\n line-height: 1.5;\n letter-spacing: -0.01em;\n word-spacing: 0.02em;\n -webkit-font-smoothing: antialiased;\n background:\n radial-gradient(circle at top left, rgba(11,110,79,0.08), transparent 35%),\n linear-gradient(180deg, #f6f1e8 0%, #f2eee5 100%);\n}\na { color: inherit; text-decoration: none; }\np { line-height: 1.55; margin: 0 0 8px; }\n.shell { max-width: 1280px; margin: 0 auto; padding: 32px 20px 48px; }\n.header { display: flex; justify-content: space-between; gap: 16px; align-items: flex-start; margin-bottom: 24px; }\n.title { font-size: 40px; line-height: 1.1; margin: 0 0 8px; letter-spacing: -0.02em; }\n.subtitle { margin: 0; color: var(--muted); max-width: 720px; line-height: 1.45; }\n.nav { display: flex; gap: 10px; flex-wrap: wrap; margin: 20px 0 28px; }\n.nav a {\n padding: 10px 14px;\n border-radius: 999px;\n border: 1px solid var(--line);\n background: rgba(255,255,255,0.72);\n}\n.nav a.active { background: var(--ink); color: white; border-color: var(--ink); }\n.mode-tabs {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n margin-bottom: 12px;\n}\n.mode-pill {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 10px 14px;\n border-radius: 999px;\n border: 1px solid rgba(215, 208, 195, 0.9);\n background: rgba(255, 255, 255, 0.85);\n font-size: 14px;\n color: var(--ink);\n}\n.mode-pill small {\n font-size: 11px;\n letter-spacing: 0.02em;\n color: var(--muted);\n}\n.mode-pill.active {\n background: var(--accent-soft);\n border-color: var(--accent);\n color: var(--accent);\n}\n.scope-shell {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 20px;\n padding: 18px 20px;\n background: rgba(255, 255, 255, 0.85);\n border: 1px solid rgba(215, 208, 195, 0.9);\n border-radius: 16px;\n box-shadow: 0 6px 30px rgba(30, 36, 48, 0.06);\n margin-bottom: 20px;\n}\n.scope-title {\n font-size: 18px;\n margin: 0 0 6px;\n}\n.scope-actions {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 280px;\n}\n.scope-selector {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.scope-selector-label {\n font-size: 11px;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--muted);\n}\n.scope-selector-row {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n.scope-pill {\n padding: 6px 12px;\n border-radius: 999px;\n border: 1px solid rgba(215, 208, 195, 0.9);\n background: rgba(255, 255, 255, 0.7);\n font-size: 13px;\n color: var(--ink);\n}\n.scope-pill.active {\n background: var(--ink);\n color: white;\n border-color: var(--ink);\n}\n.comparison-panel {\n border-radius: 16px;\n background: var(--panel);\n}\n.comparison-grid {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n}\n.comparison-card {\n border-radius: 12px;\n border: 1px solid rgba(215, 208, 195, 0.85);\n padding: 12px;\n background: white;\n box-shadow: 0 8px 20px rgba(30, 36, 48, 0.04);\n}\n.comparison-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 6px;\n gap: 12px;\n}\n.comparison-direction {\n font-size: 11px;\n text-transform: uppercase;\n border-radius: 999px;\n padding: 2px 8px;\n border: 1px solid rgba(215, 208, 195, 0.7);\n}\n.comparison-direction.above {\n color: #0b6e4f;\n border-color: rgba(11, 110, 79, 0.6);\n}\n.comparison-direction.below {\n color: #a23b2a;\n border-color: rgba(162, 59, 42, 0.6);\n}\n.comparison-direction.flat {\n color: var(--muted);\n border-color: rgba(215, 208, 195, 0.7);\n}\n.comparison-value {\n font-size: 22px;\n font-weight: 700;\n margin-bottom: 6px;\n}\n.comparison-detail {\n margin: 0;\n font-size: 13px;\n color: var(--muted);\n min-height: 36px;\n}\n.comparison-confidence {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n border-radius: 999px;\n padding: 4px 10px;\n border: 1px solid rgba(215, 208, 195, 0.9);\n}\n.comparison-confidence.high { color: var(--accent); border-color: var(--accent); }\n.comparison-confidence.medium { color: var(--warn); border-color: var(--warn); }\n.comparison-confidence.low { color: var(--risk); border-color: var(--risk); }\n.pattern-panel {\n margin-top: 16px;\n}\n.scenario-banner {\n border-radius: 12px;\n border: 1px solid rgba(215, 208, 195, 0.85);\n padding: 8px 12px;\n background: rgba(255, 255, 255, 0.8);\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n color: var(--muted);\n}\n.scenario-picker {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.scenario-picker-label {\n font-size: 11px;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: var(--muted);\n}\n.scenario-picker-row {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n.scenario-pill {\n padding: 6px 10px;\n border-radius: 999px;\n border: 1px solid rgba(215, 208, 195, 0.9);\n background: rgba(255, 255, 255, 0.7);\n font-size: 12px;\n color: var(--ink);\n}\n.scenario-pill.active {\n background: var(--ink);\n color: white;\n border-color: var(--ink);\n}\n.scenario-banner strong {\n color: var(--ink);\n}\n.grid { display: grid; gap: 16px; }\n.cards { grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }\n.two-col { grid-template-columns: minmax(0, 1.6fr) minmax(300px, 1fr); align-items: start; }\n.insights-panel ul { list-style:none; margin:0; padding:0; }\n.insights-panel li { padding: 12px 0; border-bottom:1px solid rgba(215,208,195,0.8); }\n.insights-panel li:last-child { border-bottom:none; }\n.insight-severity { font-size:12px; padding:3px 8px; border-radius:12px; margin-left:6px; border:1px solid rgba(215,208,195,0.9); }\n.insight-severity.info { background:#f0f7f4; color:#0b6e4f; }\n.insight-severity.warn { background:#fff4eb; color:#a23b2a; }\n.insight-severity.critical { background:#ffe0df; color:#a23b2a; border-color:#a23b2a; }\n.insight-actions { display:flex; gap:12px; align-items:center; justify-content:space-between; font-size:12px; margin-top:4px; }\n.storyline { display:flex; flex-wrap:wrap; gap:16px; align-items:center; margin-bottom:12px; }\n.scope-context { font-size:13px; color:var(--muted); line-height:1.45; }\n.scope-view-mode { font-style: italic; }\n.page-header { display:flex; justify-content:space-between; align-items:flex-start; gap:16px; margin-bottom:20px; padding:20px; border-radius:20px; border:1px solid rgba(215,208,195,0.8); background:var(--panel); box-shadow:0 10px 30px var(--shadow); }\n.page-title { font-size:20px; font-weight:700; margin:0; }\n.page-subtitle { margin:8px 0; color:var(--muted); }\n.scope-context-bar { display:flex; flex-wrap:wrap; gap:12px; font-size:12px; color:var(--muted); }\n.scope-context-bar span { padding:4px 8px; border-radius:10px; border:1px solid rgba(215,208,195,0.8); background:rgba(255,255,255,0.7); }\n.page-trend-note { margin-top:8px; font-size:13px; color:var(--muted); }\n.header-badges { display:flex; flex-direction:column; gap:6px; }\n.trend-note { font-size:14px; color:var(--muted); margin-top:8px; }\n.story-panel { flex-direction:column; }\n.story-panel .value-scope { margin-top:12px; display:flex; flex-wrap:wrap; gap:12px; font-size:13px; color:var(--muted); }\n.value-trend-note { font-size:13px; color:var(--muted); margin-top:8px; }\n.card, .panel {\n background: var(--panel);\n border: 1px solid rgba(215, 208, 195, 0.9);\n border-radius: 20px;\n padding: 18px;\n box-shadow: 0 14px 40px var(--shadow);\n}\n.metric-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px; margin-bottom:20px; }\n.metric-card { border-radius:18px; border:1px solid rgba(215,208,195,0.8); background:var(--panel); padding:18px; display:flex; flex-direction:column; gap:12px; box-shadow:0 10px 30px var(--shadow); }\n.metric-card header { display:flex; justify-content:space-between; align-items:center; }\n.metric-label { font-size:12px; letter-spacing:0.2em; text-transform:uppercase; color:var(--muted); }\n.metric-display strong { font-size:28px; }\n.metric-display span { font-size:13px; color:var(--muted); display:block; }\n.metric-secondary { font-size:11px !important; color:var(--muted) !important; opacity:0.7; margin-top:2px; font-style:italic; }\n.signal-synthesis { padding:16px 20px; border-radius:16px; background:linear-gradient(135deg, rgba(11,110,79,0.06) 0%, rgba(255,253,248,0.9) 100%); border:1px solid rgba(11,110,79,0.15); margin-bottom:20px; }\n.synthesis-text { font-size:15px; line-height:1.5; color:var(--ink); margin:0; }\n.stale-badge { font-size:12px; color:var(--warn); border:1px solid rgba(188,108,37,0.4); padding:4px 10px; border-radius:999px; }\n.stale-refresh { color:var(--accent); text-decoration:underline; font-weight:600; }\n.metric-header-actions { display:flex; align-items:center; gap:6px; }\n.metric-help-toggle { width:20px; height:20px; border-radius:50%; border:1px solid var(--line); background:transparent; color:var(--muted); font-size:11px; font-weight:600; cursor:pointer; display:flex; align-items:center; justify-content:center; padding:0; line-height:1; }\n.metric-help-toggle:hover { background:var(--accent-soft); color:var(--accent); border-color:var(--accent); }\n.metric-help-content { display:none; padding:10px 0 4px; border-top:1px solid rgba(215,208,195,0.5); margin-top:8px; }\n.metric-help-content.open { display:block; }\n.metric-help-definition { font-size:12px; color:var(--muted); margin:0 0 4px; }\n.metric-help-why { font-size:12px; color:var(--ink); margin:0; }\n.metric-grid-wrapper { margin-bottom:20px; }\n.metric-group-label { font-size:11px; letter-spacing:0.14em; text-transform:uppercase; color:var(--muted); margin-bottom:8px; padding-left:2px; }\n.metric-severity { font-size:11px; padding:4px 10px; border-radius:999px; border:1px solid rgba(215,208,195,0.8); text-transform:uppercase; }\n.metric-severity.high { color:#a23b2a; border-color:#a23b2a; background:rgba(162,59,42,0.12); }\n.metric-severity.medium { color:#bc6c25; border-color:#bc6c25; background:rgba(188,108,37,0.12); }\n.metric-severity.low { color:#0b6e4f; border-color:#0b6e4f; background:rgba(11,110,79,0.12); }\n.value-hero { display:flex; justify-content:space-between; align-items:flex-start; gap:16px; padding:20px; border-radius:20px; border:1px solid rgba(215,208,195,0.8); background:var(--panel); box-shadow:0 14px 36px var(--shadow); margin-bottom:20px; }\n.value-title { font-size:36px; margin:8px 0; }\n.action-callout { border-radius:18px; border:1px solid rgba(215,208,195,0.8); padding:20px; background:var(--panel); box-shadow:0 10px 30px var(--shadow); margin-bottom:20px; }\n.callout-grid { display:grid; gap:12px; margin-top:12px; }\n.callout-title { display:flex; justify-content:space-between; align-items:center; gap:8px; }\n.value-breakdown, .pattern-list, .hotspot-list { margin-bottom:20px; }\n.value-breakdown-row span { font-size:13px; color:var(--muted); }\n.value-breakdown .row strong, .pattern-list article strong { font-size:16px; }\n.value-formula {\n border-radius: 18px;\n border: 1px solid rgba(215, 208, 195, 0.8);\n padding: 20px;\n background: var(--panel);\n box-shadow: 0 10px 30px var(--shadow);\n margin: 16px 0;\n}\n.formula-metrics {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n margin-top: 12px;\n}\n.formula-metrics article {\n padding: 10px 12px;\n border-radius: 12px;\n border: 1px solid rgba(215, 208, 195, 0.7);\n background: rgba(255, 255, 255, 0.85);\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 140px;\n font-size: 12px;\n}\n.confidence-note { margin-top: 12px; font-size: 13px; color: var(--muted); }\n.insight-strip { margin:20px 0; }\n.insight-strip-panel { margin:0; }\n.hotspot-list { border-radius:18px; border:1px solid rgba(215,208,195,0.8); padding:20px; background:var(--panel); box-shadow:0 10px 30px var(--shadow); }\n.hotspot-items, .pattern-items { display:grid; gap:12px; margin-top:16px; }\n.hotspot-items article, .pattern-items article { border-radius:16px; border:1px solid rgba(215,208,195,0.8); padding:12px; background:#fff; }\n.hotspot-metrics { display:flex; gap:12px; font-size:12px; color:var(--muted); }\n.synthetic-pill { padding:4px 10px; border-radius:999px; border:1px solid rgba(215,208,195,0.8); background:#fff; font-size:12px; }\n.value-hero { display:flex; flex-direction:column; gap:8px; }\n.value-scope { margin-top:12px; display:flex; flex-wrap:wrap; gap:12px; font-size:13px; color:var(--muted); }\n.value-scope span { display:inline-flex; gap:6px; padding:4px 8px; border-radius:12px; border:1px solid rgba(215,208,195,0.8); background:rgba(255,255,255,0.5); }\n.confidence-badge { border-radius:999px; padding:4px 12px; font-size:12px; display:inline-flex; align-items:center; gap:6px; border:1px solid rgba(215,208,195,0.8); }\n.confidence-badge.high { background:var(--accent); color:#fff; border-color:var(--accent); }\n.confidence-badge.medium { background:var(--warn); color:#fff; border-color:var(--warn); }\n.confidence-badge.low { background:#fff4eb; color:#a23b2a; border-color:#a23b2a; }\n.value-breakdown .row strong, .value-assumptions .row strong { font-size:16px; }\n.kicker { font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin-bottom: 10px; word-spacing: 0.05em; }\n.metric { font-size: 34px; font-weight: 700; margin: 0; }\n.metric small { font-size: 14px; color: var(--muted); }\n.section-title { font-size: 24px; margin: 0 0 16px; }\n.knowledge-summary { margin-bottom:12px; font-size:14px; color:var(--muted); display:flex; flex-direction:column; gap:4px; }\n.list { display: grid; gap: 10px; }\n.hotspot-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap:12px; margin-top:12px; }\n.hotspot-card, .shadow-card { border-radius:16px; padding:12px; border:1px solid rgba(215,208,195,0.8); display:flex; flex-direction:column; gap:8px; background:#fff; box-shadow:0 10px 30px rgba(30,36,48,0.05); }\n.hotspot-header { display:flex; justify-content:space-between; align-items:center; }\n.hotspot-body { display:flex; justify-content:space-between; gap:12px; }\n.hotspot-body span { font-size:12px; color:var(--muted); }\n.hotspot-note { margin:0; font-size:12px; color:var(--muted); }\n.trend-indicator { font-size:12px; text-transform:capitalize; border-radius:999px; padding:4px 10px; border:1px solid rgba(215,208,195,0.8); }\n.trend-indicator.up { color:#0b6e4f; border-color:#0b6e4f; background:rgba(11,110,79,0.12); }\n.trend-indicator.down { color:#a23b2a; border-color:#a23b2a; background:rgba(162,59,42,0.12); }\n.trend-indicator.flat { color:var(--muted); border-color:rgba(215,208,195,0.9); }\n.pattern-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap:12px; margin-top:12px; }\n.pattern-card { border-radius:16px; padding:12px; border:1px solid rgba(215,208,195,0.8); background:#fff; box-shadow:0 10px 24px rgba(30,36,48,0.05); }\n.pattern-meta { display:flex; flex-direction:column; font-size:12px; color:var(--muted); margin-top:6px; gap:2px; }\n.row { display: flex; justify-content: space-between; gap: 16px; padding: 10px 0; border-top: 1px solid var(--line); }\n.row:first-child { border-top: 0; padding-top: 0; }\n.value-breakdown .row div, .value-assumptions .row div { font-size: 13px; color: var(--muted); }\n.badge { display: inline-flex; padding: 4px 10px; border-radius: 999px; font-size: 12px; border: 1px solid var(--line); }\n.badge.high { color: white; background: var(--risk); border-color: var(--risk); }\n.badge.medium { color: white; background: var(--warn); border-color: var(--warn); }\n.badge.low { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); }\n.btn-link {\n border: 0; background: none; padding: 0; color: var(--accent); cursor: pointer; font: inherit; text-align: left;\n}\n/* \u2500\u2500 Drawer backdrop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.drawer-backdrop {\n position: fixed; top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(30, 36, 48, 0.18); z-index: 99;\n display: none; cursor: pointer;\n}\n.drawer-backdrop.open { display: block; }\n\n/* \u2500\u2500 Evidence drawer \u2014 full-height, wider, sticky header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.evidence-drawer {\n position: fixed; top: 0; right: 0;\n width: min(540px, 92vw); height: 100vh;\n background: var(--panel);\n border-left: 1px solid var(--line);\n box-shadow: -16px 0 60px rgba(30, 36, 48, 0.12);\n display: none; z-index: 100;\n overflow: hidden;\n flex-direction: column;\n}\n.evidence-drawer.open { display: flex; }\n\n/* Sticky header \u2014 always visible regardless of scroll position */\n.drawer-sticky-header {\n display: flex; align-items: center; justify-content: space-between;\n padding: 14px 20px; border-bottom: 1px solid var(--line);\n background: var(--panel); flex-shrink: 0;\n}\n.drawer-close {\n border: 0; background: var(--ink); color: white;\n border-radius: 999px; padding: 8px 16px; cursor: pointer;\n font-size: 13px; font-family: inherit;\n}\n.drawer-close:hover { background: #2a3040; }\n.drawer-newtab {\n font-size: 12px; color: var(--accent); text-decoration: underline;\n font-family: inherit;\n}\n\n/* Scrollable body \u2014 content scrolls independently from header */\n.drawer-body {\n flex: 1; overflow-y: auto; overflow-x: hidden;\n padding: 20px 24px 32px;\n}\n.drawer-body h2 { font-size: 22px; margin: 0 0 8px; line-height: 1.2; }\n.drawer-body p { line-height: 1.5; }\n.drawer-body .row {\n padding: 14px 0; border-bottom: 1px solid rgba(215, 208, 195, 0.5);\n display: flex; flex-wrap: wrap; gap: 8px 16px;\n}\n.drawer-body .evidence-rich {\n flex-direction: column; gap: 6px;\n}\n.drawer-body .evidence-task { margin: 2px 0; font-size: 13px; line-height: 1.4; }\n.drawer-body .evidence-context { font-size: 12px; color: var(--accent); margin: 2px 0; }\n.drawer-body .impact { font-size: 12px; color: var(--muted); margin: 4px 0 0; }\n.drawer-body .source-label {\n font-size: 10px; padding: 2px 8px; border-radius: 999px;\n border: 1px solid var(--line); color: var(--muted);\n white-space: nowrap;\n}\n.drawer-body .empty-evidence { padding: 24px 0; }\n\n/* \u2500\u2500 Full-page evidence view \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.evidence-full-page { max-width: 900px; }\n.evidence-fp-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; margin-bottom: 20px; }\n.evidence-fp-back { font-size: 13px; color: var(--accent); text-decoration: underline; white-space: nowrap; padding-top: 8px; }\n.evidence-fp-meta { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }\n.evidence-fp-filter { font-size: 11px; padding: 4px 10px; border-radius: 999px; border: 1px solid var(--line); color: var(--muted); background: rgba(255,255,255,0.7); }\n.evidence-fp-empty { padding: 32px 20px; text-align: center; }\n.evidence-fp-list { margin-bottom: 24px; }\n.evidence-fp-row { padding: 16px 20px; border-radius: 14px; border: 1px solid rgba(215,208,195,0.7); background: var(--panel); margin-bottom: 10px; box-shadow: 0 4px 16px var(--shadow); }\n.evidence-fp-row-header { display: flex; align-items: center; gap: 12px; margin-bottom: 6px; flex-wrap: wrap; }\n.evidence-fp-time { font-size: 12px; color: var(--muted); }\n.evidence-fp-detail { font-size: 13px; margin: 4px 0; line-height: 1.45; }\n.evidence-fp-impact { font-size: 12px; color: var(--muted); margin: 4px 0 0; line-height: 1.4; }\n.evidence-fp-meta-line { font-size: 11px; color: var(--muted); margin: 4px 0 0; }\n\n/* \u2500\u2500 Intelligence sections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.intelligence-section { margin-bottom: 16px; }\n.intelligence-list { display: flex; flex-direction: column; gap: 10px; }\n.intelligence-item { display: flex; flex-direction: column; gap: 2px; }\n.intelligence-item.friction strong { color: var(--warn); }\n.compounding-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }\n.compounding-item { display: flex; flex-direction: column; gap: 2px; text-align: center; }\n.compounding-label { font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); }\n.compounding-item strong { font-size: 14px; }\n.chart-wrap svg { overflow: visible; }\n.footer-note { color: var(--muted); font-size: 11px; margin-top: 32px; text-align: center; opacity: 0.6; }\n.impact { font-size: 12px; color: var(--muted); margin-top: 4px; }\n.empty-evidence { text-align: center; padding: 24px 0; color: var(--muted); }\n.empty-evidence strong { color: var(--ink); }\n.source-label { font-size: 11px; padding: 2px 6px; border-radius: 4px; background: #ede9df; color: var(--muted); }\n.evidence-rich { padding: 12px 0; border-bottom: 1px solid var(--line); }\n.evidence-task { margin: 4px 0; font-size: 13px; line-height: 1.5; }\n.evidence-context { margin: 4px 0; font-size: 12px; color: var(--accent); }\n.system-health-card { text-align: center; padding: 24px 20px; }\n.health-headline { margin-bottom: 16px; }\n.health-score { font-size: 48px; display: block; line-height: 1; color: var(--accent); }\n.health-sentence { font-size: 15px; color: var(--muted); }\n.health-sub-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }\n.health-sub {\n display: flex; flex-direction: column; align-items: center; gap: 2px;\n text-decoration: none; color: inherit; border-radius: 8px; padding: 8px 4px;\n transition: background 0.15s;\n}\n.health-sub:hover { background: rgba(11,110,79,0.06); }\n.health-sub-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--muted); }\n.health-sub strong { font-size: 18px; }\n.severity-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }\n.severity-dot.green { background: var(--accent); }\n.severity-dot.amber { background: var(--warn); }\n.severity-dot.red { background: var(--risk); }\n.drivers-section { }\n.drivers-subtitle { margin: 0 0 12px; font-size: 13px; color: var(--muted); }\n.drivers-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }\n.driver-item { display: flex; flex-direction: column; align-items: center; gap: 4px; }\n.driver-label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--muted); }\n.driver-item strong { font-size: 22px; }\n.detail-section { margin-top: 16px; opacity: 0.85; }\n.detail-section .panel { padding: 14px 18px; }\n.detail-section .kicker { margin-bottom: 6px; }\n.snapshot-card { display: flex; flex-direction: column; align-items: center; gap: 2px; }\n.snapshot-card strong { font-size: 28px; }\n.snapshot-card span { font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.5px; }\n.efficiency-zero-state { text-align: center; padding: 24px; }\n.efficiency-zero-state .causal-chain {\n font-style: italic; color: var(--accent); font-size: 15px; margin-top: 12px;\n}\n.efficiency-strip-row {\n display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 8px;\n}\n.efficiency-strip-item {\n display: flex; flex-direction: column; align-items: center; gap: 4px;\n}\n.efficiency-strip-label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--muted); }\n.efficiency-strip-item strong { font-size: 22px; }\n.trend-compact {\n display: flex; gap: 6px; align-items: flex-end; height: 70px; margin-top: 12px;\n}\n.trend-bar-group { display: flex; gap: 2px; align-items: flex-end; }\n.trend-bar { width: 8px; border-radius: 2px 2px 0 0; min-height: 2px; }\n.trend-bar-lift { background: var(--accent); }\n.trend-bar-quality { background: var(--warn); }\n.trend-legend { display: flex; gap: 16px; margin-top: 8px; font-size: 12px; color: var(--muted); }\n.legend-item { display: flex; align-items: center; gap: 4px; }\n.dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }\n.dot-lift { background: var(--accent); }\n.dot-quality { background: var(--warn); }\n.welcome-banner {\n background: linear-gradient(135deg, var(--accent-soft), #eef6f2);\n border: 1px solid var(--accent);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 20px;\n}\n.welcome-banner strong { display: block; font-size: 16px; margin-bottom: 4px; color: var(--accent); }\n.welcome-banner p { margin: 0; color: var(--muted); font-size: 14px; }\n.onboarding-hint {\n background: var(--panel);\n border: 1px dashed var(--line);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 20px;\n}\n.onboarding-columns { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }\n.onboarding-col { font-size: 14px; line-height: 1.5; }\n.onboarding-note { color: var(--accent); font-style: italic; }\n.onboarding-steps { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--line); }\n.onboarding-steps p { margin: 0 0 8px; font-size: 14px; font-weight: 600; }\n.onboarding-steps ol { margin: 0; padding-left: 20px; font-size: 13px; line-height: 1.7; }\n.onboarding-steps code { background: #ede9df; padding: 2px 6px; border-radius: 4px; font-size: 12px; }\n@media (max-width: 900px) {\n .two-col { grid-template-columns: 1fr; }\n .title { font-size: 30px; }\n .onboarding-columns { grid-template-columns: 1fr; }\n}\n";
2
2
  //# sourceMappingURL=theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,q6mBAwbzB,CAAC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,04zBA2hBzB,CAAC"}
package/dist/theme.js CHANGED
@@ -16,15 +16,20 @@ body {
16
16
  margin: 0;
17
17
  font-family: "Iowan Old Style", "Palatino Linotype", Georgia, serif;
18
18
  color: var(--ink);
19
+ line-height: 1.5;
20
+ letter-spacing: -0.01em;
21
+ word-spacing: 0.02em;
22
+ -webkit-font-smoothing: antialiased;
19
23
  background:
20
24
  radial-gradient(circle at top left, rgba(11,110,79,0.08), transparent 35%),
21
25
  linear-gradient(180deg, #f6f1e8 0%, #f2eee5 100%);
22
26
  }
23
27
  a { color: inherit; text-decoration: none; }
28
+ p { line-height: 1.55; margin: 0 0 8px; }
24
29
  .shell { max-width: 1280px; margin: 0 auto; padding: 32px 20px 48px; }
25
30
  .header { display: flex; justify-content: space-between; gap: 16px; align-items: flex-start; margin-bottom: 24px; }
26
- .title { font-size: 40px; line-height: 1; margin: 0 0 8px; }
27
- .subtitle { margin: 0; color: var(--muted); max-width: 720px; }
31
+ .title { font-size: 40px; line-height: 1.1; margin: 0 0 8px; letter-spacing: -0.02em; }
32
+ .subtitle { margin: 0; color: var(--muted); max-width: 720px; line-height: 1.45; }
28
33
  .nav { display: flex; gap: 10px; flex-wrap: wrap; margin: 20px 0 28px; }
29
34
  .nav a {
30
35
  padding: 10px 14px;
@@ -234,7 +239,7 @@ a { color: inherit; text-decoration: none; }
234
239
  .insight-severity.critical { background:#ffe0df; color:#a23b2a; border-color:#a23b2a; }
235
240
  .insight-actions { display:flex; gap:12px; align-items:center; justify-content:space-between; font-size:12px; margin-top:4px; }
236
241
  .storyline { display:flex; flex-wrap:wrap; gap:16px; align-items:center; margin-bottom:12px; }
237
- .scope-context { font-size:13px; color:var(--muted); }
242
+ .scope-context { font-size:13px; color:var(--muted); line-height:1.45; }
238
243
  .scope-view-mode { font-style: italic; }
239
244
  .page-header { display:flex; justify-content:space-between; align-items:flex-start; gap:16px; margin-bottom:20px; padding:20px; border-radius:20px; border:1px solid rgba(215,208,195,0.8); background:var(--panel); box-shadow:0 10px 30px var(--shadow); }
240
245
  .page-title { font-size:20px; font-weight:700; margin:0; }
@@ -259,7 +264,21 @@ a { color: inherit; text-decoration: none; }
259
264
  .metric-card header { display:flex; justify-content:space-between; align-items:center; }
260
265
  .metric-label { font-size:12px; letter-spacing:0.2em; text-transform:uppercase; color:var(--muted); }
261
266
  .metric-display strong { font-size:28px; }
262
- .metric-display span { font-size:13px; color:var(--muted); }
267
+ .metric-display span { font-size:13px; color:var(--muted); display:block; }
268
+ .metric-secondary { font-size:11px !important; color:var(--muted) !important; opacity:0.7; margin-top:2px; font-style:italic; }
269
+ .signal-synthesis { padding:16px 20px; border-radius:16px; background:linear-gradient(135deg, rgba(11,110,79,0.06) 0%, rgba(255,253,248,0.9) 100%); border:1px solid rgba(11,110,79,0.15); margin-bottom:20px; }
270
+ .synthesis-text { font-size:15px; line-height:1.5; color:var(--ink); margin:0; }
271
+ .stale-badge { font-size:12px; color:var(--warn); border:1px solid rgba(188,108,37,0.4); padding:4px 10px; border-radius:999px; }
272
+ .stale-refresh { color:var(--accent); text-decoration:underline; font-weight:600; }
273
+ .metric-header-actions { display:flex; align-items:center; gap:6px; }
274
+ .metric-help-toggle { width:20px; height:20px; border-radius:50%; border:1px solid var(--line); background:transparent; color:var(--muted); font-size:11px; font-weight:600; cursor:pointer; display:flex; align-items:center; justify-content:center; padding:0; line-height:1; }
275
+ .metric-help-toggle:hover { background:var(--accent-soft); color:var(--accent); border-color:var(--accent); }
276
+ .metric-help-content { display:none; padding:10px 0 4px; border-top:1px solid rgba(215,208,195,0.5); margin-top:8px; }
277
+ .metric-help-content.open { display:block; }
278
+ .metric-help-definition { font-size:12px; color:var(--muted); margin:0 0 4px; }
279
+ .metric-help-why { font-size:12px; color:var(--ink); margin:0; }
280
+ .metric-grid-wrapper { margin-bottom:20px; }
281
+ .metric-group-label { font-size:11px; letter-spacing:0.14em; text-transform:uppercase; color:var(--muted); margin-bottom:8px; padding-left:2px; }
263
282
  .metric-severity { font-size:11px; padding:4px 10px; border-radius:999px; border:1px solid rgba(215,208,195,0.8); text-transform:uppercase; }
264
283
  .metric-severity.high { color:#a23b2a; border-color:#a23b2a; background:rgba(162,59,42,0.12); }
265
284
  .metric-severity.medium { color:#bc6c25; border-color:#bc6c25; background:rgba(188,108,37,0.12); }
@@ -313,7 +332,7 @@ a { color: inherit; text-decoration: none; }
313
332
  .confidence-badge.medium { background:var(--warn); color:#fff; border-color:var(--warn); }
314
333
  .confidence-badge.low { background:#fff4eb; color:#a23b2a; border-color:#a23b2a; }
315
334
  .value-breakdown .row strong, .value-assumptions .row strong { font-size:16px; }
316
- .kicker { font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin-bottom: 8px; }
335
+ .kicker { font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin-bottom: 10px; word-spacing: 0.05em; }
317
336
  .metric { font-size: 34px; font-weight: 700; margin: 0; }
318
337
  .metric small { font-size: 14px; color: var(--muted); }
319
338
  .section-title { font-size: 24px; margin: 0 0 16px; }
@@ -342,12 +361,92 @@ a { color: inherit; text-decoration: none; }
342
361
  .btn-link {
343
362
  border: 0; background: none; padding: 0; color: var(--accent); cursor: pointer; font: inherit; text-align: left;
344
363
  }
364
+ /* ── Drawer backdrop ──────────────────────────────────────────────────── */
365
+ .drawer-backdrop {
366
+ position: fixed; top: 0; left: 0; right: 0; bottom: 0;
367
+ background: rgba(30, 36, 48, 0.18); z-index: 99;
368
+ display: none; cursor: pointer;
369
+ }
370
+ .drawer-backdrop.open { display: block; }
371
+
372
+ /* ── Evidence drawer — full-height, wider, sticky header ─────────────── */
345
373
  .evidence-drawer {
346
- position: fixed; top: 0; right: 0; width: min(420px, 100vw); height: 100vh; background: var(--panel);
347
- border-left: 1px solid var(--line); box-shadow: -12px 0 40px var(--shadow); padding: 20px; overflow: auto; display: none;
374
+ position: fixed; top: 0; right: 0;
375
+ width: min(540px, 92vw); height: 100vh;
376
+ background: var(--panel);
377
+ border-left: 1px solid var(--line);
378
+ box-shadow: -16px 0 60px rgba(30, 36, 48, 0.12);
379
+ display: none; z-index: 100;
380
+ overflow: hidden;
381
+ flex-direction: column;
348
382
  }
349
- .evidence-drawer.open { display: block; }
350
- .drawer-close { border: 0; background: var(--ink); color: white; border-radius: 999px; padding: 8px 12px; cursor: pointer; }
383
+ .evidence-drawer.open { display: flex; }
384
+
385
+ /* Sticky header — always visible regardless of scroll position */
386
+ .drawer-sticky-header {
387
+ display: flex; align-items: center; justify-content: space-between;
388
+ padding: 14px 20px; border-bottom: 1px solid var(--line);
389
+ background: var(--panel); flex-shrink: 0;
390
+ }
391
+ .drawer-close {
392
+ border: 0; background: var(--ink); color: white;
393
+ border-radius: 999px; padding: 8px 16px; cursor: pointer;
394
+ font-size: 13px; font-family: inherit;
395
+ }
396
+ .drawer-close:hover { background: #2a3040; }
397
+ .drawer-newtab {
398
+ font-size: 12px; color: var(--accent); text-decoration: underline;
399
+ font-family: inherit;
400
+ }
401
+
402
+ /* Scrollable body — content scrolls independently from header */
403
+ .drawer-body {
404
+ flex: 1; overflow-y: auto; overflow-x: hidden;
405
+ padding: 20px 24px 32px;
406
+ }
407
+ .drawer-body h2 { font-size: 22px; margin: 0 0 8px; line-height: 1.2; }
408
+ .drawer-body p { line-height: 1.5; }
409
+ .drawer-body .row {
410
+ padding: 14px 0; border-bottom: 1px solid rgba(215, 208, 195, 0.5);
411
+ display: flex; flex-wrap: wrap; gap: 8px 16px;
412
+ }
413
+ .drawer-body .evidence-rich {
414
+ flex-direction: column; gap: 6px;
415
+ }
416
+ .drawer-body .evidence-task { margin: 2px 0; font-size: 13px; line-height: 1.4; }
417
+ .drawer-body .evidence-context { font-size: 12px; color: var(--accent); margin: 2px 0; }
418
+ .drawer-body .impact { font-size: 12px; color: var(--muted); margin: 4px 0 0; }
419
+ .drawer-body .source-label {
420
+ font-size: 10px; padding: 2px 8px; border-radius: 999px;
421
+ border: 1px solid var(--line); color: var(--muted);
422
+ white-space: nowrap;
423
+ }
424
+ .drawer-body .empty-evidence { padding: 24px 0; }
425
+
426
+ /* ── Full-page evidence view ───────────────────────────────────────────── */
427
+ .evidence-full-page { max-width: 900px; }
428
+ .evidence-fp-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; margin-bottom: 20px; }
429
+ .evidence-fp-back { font-size: 13px; color: var(--accent); text-decoration: underline; white-space: nowrap; padding-top: 8px; }
430
+ .evidence-fp-meta { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
431
+ .evidence-fp-filter { font-size: 11px; padding: 4px 10px; border-radius: 999px; border: 1px solid var(--line); color: var(--muted); background: rgba(255,255,255,0.7); }
432
+ .evidence-fp-empty { padding: 32px 20px; text-align: center; }
433
+ .evidence-fp-list { margin-bottom: 24px; }
434
+ .evidence-fp-row { padding: 16px 20px; border-radius: 14px; border: 1px solid rgba(215,208,195,0.7); background: var(--panel); margin-bottom: 10px; box-shadow: 0 4px 16px var(--shadow); }
435
+ .evidence-fp-row-header { display: flex; align-items: center; gap: 12px; margin-bottom: 6px; flex-wrap: wrap; }
436
+ .evidence-fp-time { font-size: 12px; color: var(--muted); }
437
+ .evidence-fp-detail { font-size: 13px; margin: 4px 0; line-height: 1.45; }
438
+ .evidence-fp-impact { font-size: 12px; color: var(--muted); margin: 4px 0 0; line-height: 1.4; }
439
+ .evidence-fp-meta-line { font-size: 11px; color: var(--muted); margin: 4px 0 0; }
440
+
441
+ /* ── Intelligence sections ─────────────────────────────────────────────── */
442
+ .intelligence-section { margin-bottom: 16px; }
443
+ .intelligence-list { display: flex; flex-direction: column; gap: 10px; }
444
+ .intelligence-item { display: flex; flex-direction: column; gap: 2px; }
445
+ .intelligence-item.friction strong { color: var(--warn); }
446
+ .compounding-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
447
+ .compounding-item { display: flex; flex-direction: column; gap: 2px; text-align: center; }
448
+ .compounding-label { font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); }
449
+ .compounding-item strong { font-size: 14px; }
351
450
  .chart-wrap svg { overflow: visible; }
352
451
  .footer-note { color: var(--muted); font-size: 11px; margin-top: 32px; text-align: center; opacity: 0.6; }
353
452
  .impact { font-size: 12px; color: var(--muted); margin-top: 4px; }