@kaizenreport/kensho-viewer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,219 @@
1
+ /* ==========================================================================
2
+ Kensho Design System — Colors & Type
3
+ --------------------------------------------------------------------------
4
+ Kensho is a test-report tool. It is a competitor to Allure Reports.
5
+ The aesthetic: technical, dense, confident — like a Linear / Vercel
6
+ dashboard crossed with the engineer-trust feel of Datadog & Sentry.
7
+ Blue = the brand & passing identity backbone. Green = success/checks.
8
+ Coral-red = failure. Amber = broken/flaky. Slate = skipped/neutral.
9
+ ========================================================================== */
10
+
11
+ @import url("https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap");
12
+
13
+ :root {
14
+ /* ---------- BRAND (official) ---------- */
15
+ /* Kaizen Reports brand uses a vivid electric-blue + neon-green pair,
16
+ pulled from the official wordmark: stroke #0072FF + #00FF87 on dark. */
17
+ --brand-blue-50: #E6F2FF;
18
+ --brand-blue-100: #CCE5FF;
19
+ --brand-blue-200: #99CBFF;
20
+ --brand-blue-300: #66B0FF;
21
+ --brand-blue-400: #3396FF;
22
+ --brand-blue-500: #0072FF; /* primary brand blue */
23
+ --brand-blue-600: #005CCC;
24
+ --brand-blue-700: #004599;
25
+ --brand-blue-800: #002E66;
26
+ --brand-blue-900: #001733;
27
+
28
+ --brand-green-50: #E6FFF3;
29
+ --brand-green-100: #B8FFDA;
30
+ --brand-green-200: #80FFC0;
31
+ --brand-green-300: #4DFFA6;
32
+ --brand-green-400: #00FF87; /* secondary brand green (neon) */
33
+ --brand-green-500: #00CC6C;
34
+ --brand-green-600: #009951;
35
+ --brand-green-700: #006636;
36
+ --brand-green-800: #00331B;
37
+
38
+ /* ---------- TEST-STATUS SEMANTIC ---------- */
39
+ /* These are the most important colors in the system — every chart,
40
+ bar, donut, badge and row tint maps to one of these five. */
41
+ --status-passed: #1FA864; /* green — passed */
42
+ --status-passed-bg: #EAFBF1;
43
+ --status-passed-fg: #0E5C39;
44
+ --status-passed-border: #C5E5D2;
45
+ --status-failed: #E5484D; /* coral — failed */
46
+ --status-failed-bg: #FCEBEC;
47
+ --status-failed-fg: #8A1F23;
48
+ --status-failed-border: #F2C8CB;
49
+ --status-broken: #F5A524; /* amber — broken / flaky */
50
+ --status-broken-bg: #FFF4DD;
51
+ --status-broken-fg: #7A4A00;
52
+ --status-broken-border: #F4DDA8;
53
+ --status-skipped: #94A3B8; /* slate — skipped */
54
+ --status-skipped-bg: #EEF1F6;
55
+ --status-skipped-fg: #4F5B72;
56
+ --status-skipped-border: #D9E0EC;
57
+ --status-unknown: #7C5CFF; /* violet — unknown / not run */
58
+ --status-unknown-bg: #F1ECFF;
59
+
60
+ /* ---------- NEUTRALS (light) ---------- */
61
+ --bg: #F7F8FB; /* app canvas */
62
+ --bg-elev: #FFFFFF; /* cards */
63
+ --bg-sunken: #F1F3F8; /* table headers, input wells */
64
+ --bg-hover: #F4F6FA;
65
+ --line: #E4E7EE; /* hairline borders */
66
+ --line-strong: #CFD4DD;
67
+ --fg1: #0B1220; /* primary text */
68
+ --fg2: #3A4254; /* secondary text */
69
+ --fg3: #6B7388; /* tertiary / meta */
70
+ --fg4: #94A0B5; /* placeholder */
71
+
72
+ /* ---------- NEUTRALS (dark — sidebar, dark mode) ---------- */
73
+ --dark-bg: #0B1220;
74
+ --dark-bg-elev: #111A2E;
75
+ --dark-bg-sunken: #070C18;
76
+ --dark-line: #1B253D;
77
+ --dark-line-strong: #28344F;
78
+ --dark-fg1: #F2F5FA;
79
+ --dark-fg2: #B7C0D2;
80
+ --dark-fg3: #7C8AA6;
81
+
82
+ /* ---------- ACCENTS ---------- */
83
+ --accent: var(--brand-blue-500);
84
+ --accent-hover: var(--brand-blue-600);
85
+ --accent-soft: var(--brand-blue-50);
86
+ --focus-ring: 0 0 0 3px rgba(0,114,255,0.30);
87
+
88
+ /* ---------- TYPE — FAMILIES ---------- */
89
+ /* Manrope = display/UI; Inter = body/data; JetBrains Mono = code/logs/IDs */
90
+ --font-display: "Manrope", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
91
+ --font-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
92
+ --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
93
+
94
+ /* ---------- TYPE — SCALE ---------- */
95
+ --fs-display: 40px; --lh-display: 1.05; --tr-display: -0.025em;
96
+ --fs-h1: 28px; --lh-h1: 1.15; --tr-h1: -0.02em;
97
+ --fs-h2: 22px; --lh-h2: 1.2; --tr-h2: -0.015em;
98
+ --fs-h3: 18px; --lh-h3: 1.3; --tr-h3: -0.01em;
99
+ --fs-h4: 15px; --lh-h4: 1.35; --tr-h4: -0.005em;
100
+ --fs-body: 14px; --lh-body: 1.5;
101
+ --fs-body-sm: 13px; --lh-body-sm: 1.45;
102
+ --fs-meta: 12px; --lh-meta: 1.4;
103
+ --fs-overline: 11px; --lh-overline: 1.3;
104
+ --fs-mono: 13px; --lh-mono: 1.5;
105
+ --fs-mono-sm: 12px;
106
+
107
+ /* ---------- SPACING (4px grid) ---------- */
108
+ --s-0: 0px;
109
+ --s-1: 4px;
110
+ --s-2: 8px;
111
+ --s-3: 12px;
112
+ --s-4: 16px;
113
+ --s-5: 20px;
114
+ --s-6: 24px;
115
+ --s-8: 32px;
116
+ --s-10: 40px;
117
+ --s-12: 48px;
118
+ --s-16: 64px;
119
+ --s-20: 80px;
120
+
121
+ /* ---------- RADII ---------- */
122
+ --r-xs: 4px;
123
+ --r-sm: 6px;
124
+ --r-md: 8px;
125
+ --r-lg: 12px;
126
+ --r-xl: 16px;
127
+ --r-2xl: 20px;
128
+ --r-pill: 999px;
129
+
130
+ /* ---------- SHADOWS / ELEVATION ---------- */
131
+ --shadow-xs: 0 1px 1px rgba(11,18,32,0.04);
132
+ --shadow-sm: 0 1px 2px rgba(11,18,32,0.06), 0 1px 1px rgba(11,18,32,0.04);
133
+ --shadow-md: 0 4px 12px rgba(11,18,32,0.08), 0 1px 2px rgba(11,18,32,0.04);
134
+ --shadow-lg: 0 12px 32px rgba(11,18,32,0.12), 0 2px 6px rgba(11,18,32,0.06);
135
+ --shadow-xl: 0 24px 64px rgba(11,18,32,0.18), 0 4px 12px rgba(11,18,32,0.08);
136
+ --shadow-focus: 0 0 0 3px rgba(0,114,255,0.30);
137
+ --shadow-inset: inset 0 1px 0 rgba(255,255,255,0.5), inset 0 -1px 0 rgba(11,18,32,0.04);
138
+
139
+ /* ---------- MOTION ---------- */
140
+ --ease-out: cubic-bezier(.2,.7,.2,1);
141
+ --ease-in-out: cubic-bezier(.4,.0,.2,1);
142
+ --dur-fast: 120ms;
143
+ --dur-base: 180ms;
144
+ --dur-slow: 280ms;
145
+
146
+ /* ---------- LAYOUT ---------- */
147
+ --sidebar-w: 240px;
148
+ --sidebar-w-collapsed: 64px;
149
+ --topbar-h: 56px;
150
+ --container-max: 1440px;
151
+ }
152
+
153
+ /* ==========================================================================
154
+ BASE / RESET
155
+ ========================================================================== */
156
+ * { box-sizing: border-box; }
157
+ html, body { margin: 0; padding: 0; }
158
+ body {
159
+ font-family: var(--font-body);
160
+ font-size: var(--fs-body);
161
+ line-height: var(--lh-body);
162
+ color: var(--fg1);
163
+ background: var(--bg);
164
+ -webkit-font-smoothing: antialiased;
165
+ text-rendering: optimizeLegibility;
166
+ }
167
+
168
+ /* ==========================================================================
169
+ SEMANTIC TYPE
170
+ ========================================================================== */
171
+ .k-display, h1.k-display {
172
+ font-family: var(--font-display);
173
+ font-size: var(--fs-display);
174
+ line-height: var(--lh-display);
175
+ letter-spacing: var(--tr-display);
176
+ font-weight: 800;
177
+ color: var(--fg1);
178
+ }
179
+ h1, .k-h1 { font-family: var(--font-display); font-size: var(--fs-h1); line-height: var(--lh-h1); letter-spacing: var(--tr-h1); font-weight: 700; margin: 0; color: var(--fg1); }
180
+ h2, .k-h2 { font-family: var(--font-display); font-size: var(--fs-h2); line-height: var(--lh-h2); letter-spacing: var(--tr-h2); font-weight: 700; margin: 0; color: var(--fg1); }
181
+ h3, .k-h3 { font-family: var(--font-display); font-size: var(--fs-h3); line-height: var(--lh-h3); letter-spacing: var(--tr-h3); font-weight: 600; margin: 0; color: var(--fg1); }
182
+ h4, .k-h4 { font-family: var(--font-display); font-size: var(--fs-h4); line-height: var(--lh-h4); letter-spacing: var(--tr-h4); font-weight: 600; margin: 0; color: var(--fg1); }
183
+ p, .k-body { font-size: var(--fs-body); line-height: var(--lh-body); margin: 0; color: var(--fg2); }
184
+ .k-body-sm { font-size: var(--fs-body-sm); line-height: var(--lh-body-sm); color: var(--fg2); }
185
+ .k-meta { font-size: var(--fs-meta); line-height: var(--lh-meta); color: var(--fg3); }
186
+ .k-overline {
187
+ font-size: var(--fs-overline);
188
+ line-height: var(--lh-overline);
189
+ letter-spacing: 0.12em;
190
+ text-transform: uppercase;
191
+ font-weight: 600;
192
+ color: var(--fg3);
193
+ }
194
+ code, kbd, samp, pre, .k-mono {
195
+ font-family: var(--font-mono);
196
+ font-size: var(--fs-mono);
197
+ line-height: var(--lh-mono);
198
+ font-feature-settings: "calt" 0, "ss01" 1;
199
+ }
200
+ .k-num {
201
+ font-family: var(--font-display);
202
+ font-variant-numeric: tabular-nums;
203
+ font-feature-settings: "tnum" 1;
204
+ }
205
+
206
+ /* ==========================================================================
207
+ STATUS HELPERS
208
+ ========================================================================== */
209
+ .k-status-passed { color: var(--status-passed); }
210
+ .k-status-failed { color: var(--status-failed); }
211
+ .k-status-broken { color: var(--status-broken); }
212
+ .k-status-skipped { color: var(--status-skipped); }
213
+ .k-status-unknown { color: var(--status-unknown); }
214
+
215
+ .k-bg-passed { background: var(--status-passed-bg); }
216
+ .k-bg-failed { background: var(--status-failed-bg); }
217
+ .k-bg-broken { background: var(--status-broken-bg); }
218
+ .k-bg-skipped { background: var(--status-skipped-bg); }
219
+ .k-bg-unknown { background: var(--status-unknown-bg); }