omkit 0.8.9 → 0.8.11

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,300 @@
1
+ :root {
2
+ --bg: #0b1020;
3
+ --panel: #111831;
4
+ --panel-2: #0e152b;
5
+ --raise: #18213f;
6
+ --line: #222c4d;
7
+ --line-soft: #1a2342;
8
+ --text: #e6eaf5;
9
+ --text-2: #a9b2cc;
10
+ --text-3: #6f7a99;
11
+ --accent: #3b82f6;
12
+ --accent-soft: rgba(59, 130, 246, 0.18);
13
+ --ok: #22c55e;
14
+ --fail: #ef4444;
15
+ --cancel: #f59e0b;
16
+ --running: #38bdf8;
17
+ --c1: #4f8ff7;
18
+ --c2: #8b5cf6;
19
+ --c3: #22c55e;
20
+ --c4: #f59e0b;
21
+ --c5: #f0568c;
22
+ --c6: #22d3ee;
23
+ --c7: #a3e635;
24
+ --c8: #fb7185;
25
+ --bar-text: #0b1020;
26
+ --shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
27
+ --mono: ui-monospace, "SF Mono", "Cascadia Code", Consolas, monospace;
28
+ --sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
29
+ color-scheme: dark;
30
+ }
31
+ :root[data-theme="light"] {
32
+ --bg: #f4f6fb;
33
+ --panel: #ffffff;
34
+ --panel-2: #f8f9fc;
35
+ --raise: #eef1f8;
36
+ --line: #dde2ee;
37
+ --line-soft: #e9ecf4;
38
+ --text: #182033;
39
+ --text-2: #4b5672;
40
+ --text-3: #8590ab;
41
+ --accent: #2563eb;
42
+ --accent-soft: rgba(37, 99, 235, 0.12);
43
+ --bar-text: #0b1020;
44
+ --shadow: 0 10px 30px rgba(20, 30, 60, 0.15);
45
+ color-scheme: light;
46
+ }
47
+ @media (prefers-color-scheme: light) {
48
+ :root:not([data-theme="dark"]) {
49
+ --bg: #f4f6fb;
50
+ --panel: #ffffff;
51
+ --panel-2: #f8f9fc;
52
+ --raise: #eef1f8;
53
+ --line: #dde2ee;
54
+ --line-soft: #e9ecf4;
55
+ --text: #182033;
56
+ --text-2: #4b5672;
57
+ --text-3: #8590ab;
58
+ --accent: #2563eb;
59
+ --accent-soft: rgba(37, 99, 235, 0.12);
60
+ --shadow: 0 10px 30px rgba(20, 30, 60, 0.15);
61
+ color-scheme: light;
62
+ }
63
+ }
64
+
65
+ * { box-sizing: border-box; }
66
+ html, body { margin: 0; height: 100%; }
67
+ body {
68
+ background: var(--bg);
69
+ color: var(--text);
70
+ font: 13px/1.4 var(--sans);
71
+ overflow: hidden;
72
+ }
73
+ button { font: inherit; color: inherit; }
74
+ [hidden] { display: none !important; }
75
+
76
+ /* ── loader ─────────────────────────────────────────────── */
77
+ #loader {
78
+ position: fixed; inset: 0; display: grid; place-items: center;
79
+ background: var(--bg); z-index: 100;
80
+ }
81
+ .loader-card { display: grid; justify-items: center; gap: 14px; }
82
+ .loader-spin {
83
+ width: 42px; height: 42px; border-radius: 50%;
84
+ border: 3px solid var(--line); border-top-color: var(--accent);
85
+ animation: spin 0.9s linear infinite;
86
+ }
87
+ .loader-title { font-size: 16px; font-weight: 600; }
88
+ .loader-step { color: var(--text-3); font-size: 12px; }
89
+ @keyframes spin { to { transform: rotate(360deg); } }
90
+
91
+ /* ── shell ──────────────────────────────────────────────── */
92
+ #app {
93
+ height: 100vh; display: grid; gap: 10px; padding: 12px 14px 14px;
94
+ grid-template-rows: auto minmax(0, 1fr) 230px;
95
+ }
96
+ .top { display: flex; align-items: center; gap: 14px; min-width: 0; }
97
+ .top .titles { min-width: 0; flex: 1; }
98
+ .top h1 { margin: 0; font-size: 19px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
99
+ .top .meta { color: var(--text-2); display: flex; gap: 10px; align-items: center; margin-top: 3px; flex-wrap: wrap; }
100
+ .top .meta .sep { color: var(--text-3); }
101
+ .dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; flex: none; }
102
+ .dot.ok { background: var(--ok); }
103
+ .dot.failed { background: var(--fail); }
104
+ .dot.cancelled { background: var(--cancel); }
105
+ .dot.running { background: var(--running); }
106
+
107
+ .btn-group { display: flex; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; background: var(--panel); }
108
+ .btn {
109
+ border: 0; background: transparent; padding: 7px 12px; cursor: pointer;
110
+ display: inline-flex; align-items: center; gap: 7px; color: var(--text-2); white-space: nowrap;
111
+ }
112
+ .btn + .btn { border-left: 1px solid var(--line); }
113
+ .btn:hover { background: var(--raise); color: var(--text); }
114
+ .btn.active { background: var(--accent); color: #fff; }
115
+ .btn svg { width: 15px; height: 15px; }
116
+ .btn.solo { border: 1px solid var(--line); border-radius: 8px; background: var(--panel); }
117
+
118
+ .main {
119
+ display: grid; gap: 10px; min-height: 0;
120
+ grid-template-columns: minmax(0, 1fr) 320px;
121
+ }
122
+ .main.no-details { grid-template-columns: minmax(0, 1fr); }
123
+ .card { background: var(--panel); border: 1px solid var(--line); border-radius: 10px; min-height: 0; min-width: 0; }
124
+
125
+ /* ── timeline: tree + chart share one vertical scroll ──── */
126
+ .timeline { display: grid; grid-template-rows: 34px minmax(0, 1fr); overflow: hidden; }
127
+ .tl-head { display: grid; grid-template-columns: var(--tree-w, 420px) minmax(0, 1fr); border-bottom: 1px solid var(--line); }
128
+ .tl-head .cols { display: grid; grid-template-columns: minmax(0, 1fr) 84px 82px; align-items: center; border-right: 1px solid var(--line); }
129
+ .tl-head .cols > div { padding: 0 12px; color: var(--text-2); font-weight: 600; font-size: 12px; }
130
+ .tl-head .cols > div + div { border-left: 1px solid var(--line-soft); height: 100%; display: flex; align-items: center; }
131
+ .tl-head svg { display: block; width: 100%; height: 34px; }
132
+ .tl-body { overflow: auto; display: grid; grid-template-columns: var(--tree-w, 420px) minmax(0, 1fr); align-items: start; position: relative; }
133
+ .timeline.no-tree .tl-head, .timeline.no-tree .tl-body { grid-template-columns: minmax(0, 1fr); }
134
+ .timeline.no-tree .tree, .timeline.no-tree .tl-head .cols { display: none; }
135
+
136
+ .tree { border-right: 1px solid var(--line); position: sticky; left: 0; background: var(--panel); z-index: 2; }
137
+ .row {
138
+ height: var(--row-h); display: grid; grid-template-columns: minmax(0, 1fr) 84px 82px;
139
+ align-items: center; cursor: pointer; border-bottom: 1px solid transparent;
140
+ }
141
+ .row:hover { background: var(--raise); }
142
+ .row.selected { background: var(--accent-soft); }
143
+ .row .name { display: flex; align-items: center; gap: 7px; min-width: 0; padding-right: 8px; }
144
+ .row .name .label { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
145
+ .row .name .tagchip { color: var(--text-3); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
146
+ .row .twist { width: 16px; height: 16px; flex: none; display: grid; place-items: center; color: var(--text-3); border: 0; background: none; padding: 0; cursor: pointer; }
147
+ .row .twist svg { width: 12px; height: 12px; transition: transform 0.12s; }
148
+ .row .twist.open svg { transform: rotate(90deg); }
149
+ .row .icon { width: 22px; height: 22px; flex: none; display: grid; place-items: center; border-radius: 6px; }
150
+ .row .icon svg { width: 14px; height: 14px; }
151
+ .row .status, .row .dur { padding: 0 12px; display: flex; align-items: center; gap: 7px; color: var(--text-2); font-variant-numeric: tabular-nums; }
152
+ .guide { width: 14px; flex: none; align-self: stretch; position: relative; }
153
+ .guide::before { content: ""; position: absolute; left: 7px; top: 0; bottom: 0; border-left: 1px solid var(--line); }
154
+
155
+ .chart { position: relative; min-width: 0; }
156
+ .chart svg { display: block; overflow: hidden; }
157
+ .chart .bar-label { font-size: 12px; fill: var(--bar-text); font-weight: 500; cursor: pointer; }
158
+ .chart .hit { fill: transparent; cursor: pointer; }
159
+ .chart .hit:hover + .bar { filter: brightness(1.15); }
160
+ .chart .bar-label.outside { fill: var(--text); }
161
+ .chart .mark-label { font-size: 11px; fill: var(--text-2); cursor: pointer; }
162
+ .chart .mark-label:hover { fill: var(--text); }
163
+ .chart .grid line { stroke: var(--line-soft); }
164
+ .chart .cursor { stroke: var(--text-2); stroke-dasharray: 3 3; pointer-events: none; }
165
+ .chart .link { fill: none; stroke: var(--text-3); stroke-width: 1.2; }
166
+ .chart .bar { cursor: pointer; }
167
+ .chart .bar.selected { stroke: var(--text); stroke-width: 2; }
168
+ .chart .mark { cursor: pointer; stroke: var(--panel); stroke-width: 1.5; }
169
+ .axis text { fill: var(--text-2); font-size: 11px; }
170
+ .axis line, .axis path { stroke: var(--line); }
171
+
172
+ .flow-view, .flame-view { position: absolute; inset: 0; }
173
+ .flow-view svg, .flame-view svg { width: 100%; height: 100%; display: block; cursor: grab; }
174
+ .flow-card rect.box { fill: var(--raise); stroke: var(--line); rx: 8; }
175
+ .flow-card.selected rect.box { stroke: var(--accent); stroke-width: 2; }
176
+ .flow-card text { fill: var(--text); font-size: 12px; }
177
+ .flow-card text.sub { fill: var(--text-3); font-size: 11px; }
178
+ .flow-link { fill: none; stroke: var(--text-3); stroke-width: 1.3; }
179
+ .flame-rect { cursor: pointer; stroke: var(--panel); stroke-width: 1; }
180
+ .flame-rect.selected { stroke: var(--text); stroke-width: 2; }
181
+ .flame-text { font-size: 11px; fill: var(--bar-text); cursor: pointer; }
182
+
183
+ /* ── details ────────────────────────────────────────────── */
184
+ .details { display: grid; grid-template-rows: auto auto minmax(0, 1fr); overflow: hidden; }
185
+ .details .dh { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; font-weight: 600; }
186
+ .details .x { border: 0; background: none; cursor: pointer; color: var(--text-2); padding: 2px; }
187
+ .details .who { display: flex; align-items: center; gap: 10px; padding: 4px 14px 10px; }
188
+ .details .who .icon { width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center; flex: none; }
189
+ .details .who .icon svg { width: 16px; height: 16px; }
190
+ .details .who .nm { font-size: 16px; font-weight: 600; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
191
+ .pill { display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: 999px; background: var(--raise); font-size: 12px; }
192
+ .details .scroll { overflow: auto; padding: 0 14px 14px; }
193
+ .kv { display: grid; grid-template-columns: 92px minmax(0, 1fr); gap: 6px 10px; margin: 2px 0 12px; }
194
+ .kv .k { color: var(--text-2); }
195
+ .kv .v { min-width: 0; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
196
+ a { color: var(--accent); text-decoration: none; }
197
+ a:hover { text-decoration: underline; }
198
+ .tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--line); margin: 0 0 10px; overflow-x: auto; }
199
+ .tab { border: 0; background: none; padding: 7px 9px; cursor: pointer; color: var(--text-2); border-bottom: 2px solid transparent; white-space: nowrap; }
200
+ .tab.active { color: var(--text); border-bottom-color: var(--accent); font-weight: 600; }
201
+ .section-title { font-weight: 600; margin: 14px 0 8px; }
202
+ .ev-list { list-style: none; margin: 0; padding: 0; position: relative; }
203
+ .ev-list li { display: grid; grid-template-columns: 64px 18px minmax(0, 1fr); gap: 8px; align-items: start; padding: 4px 0; }
204
+ .ev-list .t { color: var(--text-2); font-variant-numeric: tabular-nums; text-align: right; }
205
+ .ev-list .m { overflow-wrap: anywhere; }
206
+ .ev-ico { width: 16px; height: 16px; border-radius: 50%; display: grid; place-items: center; margin-top: 1px; }
207
+ .ev-ico svg { width: 10px; height: 10px; }
208
+ pre.code {
209
+ margin: 0; padding: 10px; background: var(--panel-2); border: 1px solid var(--line-soft); border-radius: 8px;
210
+ font: 12px/1.45 var(--mono); white-space: pre-wrap; overflow-wrap: anywhere; max-height: 60vh; overflow: auto;
211
+ }
212
+ .muted { color: var(--text-3); }
213
+ .thumbs { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px; }
214
+ .thumb { border: 1px solid var(--line); border-radius: 6px; overflow: hidden; cursor: pointer; background: var(--panel-2); aspect-ratio: 16 / 10; display: grid; place-items: center; }
215
+ .thumb:hover { border-color: var(--accent); }
216
+ .thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
217
+ .thumb .json-ico { font: 600 12px var(--mono); color: var(--text-3); }
218
+
219
+ /* ── bottom strip ───────────────────────────────────────── */
220
+ .bottom { display: grid; gap: 10px; grid-template-columns: minmax(0, 1fr) 270px 250px; min-height: 0; }
221
+ .lower { display: grid; grid-template-rows: auto minmax(0, 1fr); overflow: hidden; }
222
+ .lower .tabs { margin: 0; padding: 0 10px; align-items: center; }
223
+ .lower .tabs .spacer { flex: 1; }
224
+ .filter { border: 1px solid var(--line); background: var(--panel-2); border-radius: 7px; padding: 5px 9px; color: var(--text); width: 200px; margin: 4px 0; }
225
+ .lower .body { overflow: auto; padding: 10px 12px; }
226
+ .gallery { display: flex; gap: 12px; }
227
+ .gal-item { flex: none; width: 160px; cursor: pointer; border: 1px solid transparent; border-radius: 8px; padding: 4px; }
228
+ .gal-item:hover, .gal-item.active { border-color: var(--accent); background: var(--accent-soft); }
229
+ .gal-item .thumb { aspect-ratio: 16 / 10; }
230
+ .gal-item .cap { display: flex; gap: 8px; margin-top: 5px; font-size: 12px; }
231
+ .gal-item .cap .t { color: var(--text-2); font-variant-numeric: tabular-nums; }
232
+ .gal-item .cap .n { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
233
+ .gal-item .sz { color: var(--text-3); font-size: 11px; }
234
+ table.list { width: 100%; border-collapse: collapse; font-size: 12px; }
235
+ table.list td { padding: 3px 8px; border-bottom: 1px solid var(--line-soft); vertical-align: top; }
236
+ table.list td.t { color: var(--text-2); white-space: nowrap; font-variant-numeric: tabular-nums; width: 1%; }
237
+ table.list td.p { color: var(--text-3); white-space: nowrap; max-width: 260px; overflow: hidden; text-overflow: ellipsis; width: 1%; }
238
+ table.list td.m { font-family: var(--mono); white-space: pre-wrap; overflow-wrap: anywhere; }
239
+ table.list tr.err td.m { color: var(--fail); }
240
+ table.list tr { cursor: pointer; }
241
+ table.list tr:hover td { background: var(--raise); }
242
+ .legend { padding: 10px 14px; }
243
+ .legend h3, .overview h3 { margin: 0 0 10px; font-size: 13px; font-weight: 600; }
244
+ .legend .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 9px 12px; }
245
+ .legend .li { display: flex; align-items: center; gap: 8px; color: var(--text-2); font-size: 12px; }
246
+ .overview { padding: 10px 14px; display: grid; grid-template-rows: auto auto minmax(0, 1fr); }
247
+ .overview .range { color: var(--text-2); font-size: 11px; text-align: right; margin-bottom: 4px; font-variant-numeric: tabular-nums; }
248
+ .overview svg { width: 100%; height: 100%; display: block; }
249
+ .overview .brush .selection { fill: var(--accent-soft); stroke: var(--text-2); }
250
+
251
+ /* ── floating ───────────────────────────────────────────── */
252
+ .tip {
253
+ position: fixed; pointer-events: none; z-index: 50; background: var(--panel); border: 1px solid var(--line);
254
+ border-radius: 8px; padding: 8px 10px; box-shadow: var(--shadow); max-width: 360px; font-size: 12px;
255
+ }
256
+ .tip .tt { font-weight: 600; margin-bottom: 2px; }
257
+ .tip .ts { color: var(--text-2); }
258
+ .tip.wide { max-width: 420px; min-width: 260px; }
259
+ .tip .mono { font-family: var(--mono); font-size: 11px; overflow-wrap: anywhere; }
260
+ .tip .small { color: var(--text-2); }
261
+ .tip .badges { display: flex; flex-wrap: wrap; gap: 5px; margin: 6px 0; }
262
+ .tip .badge { display: inline-flex; align-items: center; gap: 5px; padding: 1px 8px; border-radius: 999px; background: var(--raise); font-size: 11px; color: var(--text-2); }
263
+ .tip .badge.mcp { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
264
+ .tip .summary { margin: 4px 0 8px; line-height: 1.45; }
265
+ .tip .tkv { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 2px 10px; font-variant-numeric: tabular-nums; }
266
+ .tip .tkv .k, .tip .sec { color: var(--text-3); }
267
+ .tip .sec { margin: 8px 0 3px; font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; }
268
+ .tip .sec.fail { color: var(--fail); }
269
+ .params { display: grid; gap: 3px; }
270
+ .param { font: 11px/1.4 var(--mono); }
271
+ .param .pn { color: var(--text); }
272
+ .param .pt { color: var(--accent); margin-left: 6px; }
273
+ .param .pd { color: var(--text-3); margin-left: 6px; }
274
+ .param .pdesc { font-family: var(--sans); color: var(--text-2); margin-left: 10px; }
275
+ .kv .v.defined { display: flex; align-items: center; gap: 6px; }
276
+ .kv .v.defined a { min-width: 0; overflow-wrap: anywhere; font-family: var(--mono); font-size: 12px; }
277
+ .icon-btn { flex: none; border: 1px solid var(--line); background: var(--panel-2); color: var(--text-2); border-radius: 6px; width: 24px; height: 22px; display: grid; place-items: center; cursor: pointer; padding: 0; }
278
+ .icon-btn:hover { color: var(--text); border-color: var(--accent); }
279
+ .icon-btn svg { width: 13px; height: 13px; }
280
+ .tip .hint { margin-top: 8px; color: var(--text-3); font-size: 11px; }
281
+ .tip kbd { font: 600 10px var(--mono); border: 1px solid var(--line); border-bottom-width: 2px; border-radius: 4px; padding: 0 4px; color: var(--text-2); }
282
+ .badge-inline { display: inline-block; padding: 0 7px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); font-size: 11px; font-weight: 600; }
283
+ .tip img { display: block; max-width: 240px; max-height: 150px; border-radius: 4px; margin: 6px 0; border: 1px solid var(--line); }
284
+ .modal { position: fixed; inset: 0; background: rgba(5, 8, 18, 0.72); z-index: 60; display: grid; place-items: center; padding: 28px; }
285
+ .modal .box { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow); max-width: min(1200px, 100%); max-height: 100%; display: grid; grid-template-rows: auto minmax(0, 1fr); overflow: hidden; }
286
+ .modal .mh { display: flex; align-items: center; gap: 12px; padding: 10px 14px; border-bottom: 1px solid var(--line); }
287
+ .modal .mh .nm { font-weight: 600; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
288
+ .modal .mb { overflow: auto; padding: 14px; }
289
+ .modal img { max-width: 100%; display: block; margin: auto; }
290
+ .menu { position: fixed; z-index: 55; background: var(--panel); border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); padding: 4px; min-width: 200px; }
291
+ .menu button { display: block; width: 100%; text-align: left; border: 0; background: none; padding: 7px 10px; border-radius: 6px; cursor: pointer; }
292
+ .menu button:hover { background: var(--raise); }
293
+ .toast { position: fixed; bottom: 18px; left: 50%; transform: translateX(-50%); background: var(--raise); border: 1px solid var(--line); padding: 7px 14px; border-radius: 8px; z-index: 70; }
294
+
295
+ @media (max-width: 1100px) {
296
+ .bottom { grid-template-columns: minmax(0, 1fr); }
297
+ .legend, .overview { display: none; }
298
+ .main { grid-template-columns: minmax(0, 1fr); }
299
+ .details { display: none; }
300
+ }