plotleaf 0.0.0-stage → 0.2.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,631 @@
1
+ :root {
2
+ color-scheme: light dark;
3
+ --page: #ffffff;
4
+ --ink: #202123;
5
+ --body: #55585d;
6
+ --muted: #71757c;
7
+ --rule: #e9eaec;
8
+ --soft: #f5f6f7;
9
+ --focus: #2787ce;
10
+ --positive: #258044;
11
+ --negative: #ca4247;
12
+ --warning: #996719;
13
+ --series: #429ee4;
14
+ --series-fill: rgba(79, 178, 239, .31);
15
+ --series-fill-end: rgba(79, 178, 239, 0);
16
+ --tooltip: #ffffff;
17
+ --target: #969ba2;
18
+ --slice-1: #429ee4;
19
+ --slice-2: #64afa1;
20
+ --slice-3: #8696b8;
21
+ --slice-4: #d4a05b;
22
+ --slice-5: #7984be;
23
+ --slice-6: #90c7df;
24
+ --slice-7: #b39581;
25
+ --slice-8: #a4acb9;
26
+ font-family:
27
+ ui-sans-serif,
28
+ -apple-system,
29
+ BlinkMacSystemFont,
30
+ "Segoe UI",
31
+ sans-serif;
32
+ font-synthesis: none;
33
+ -webkit-font-smoothing: antialiased;
34
+ text-rendering: optimizeLegibility;
35
+ }
36
+ @media (prefers-color-scheme: dark) {
37
+ :root {
38
+ --page: #18191c;
39
+ --ink: #efeff1;
40
+ --body: #b9bbc2;
41
+ --muted: #999da7;
42
+ --rule: #303238;
43
+ --soft: #23252a;
44
+ --focus: #79bdf2;
45
+ --positive: #79c591;
46
+ --negative: #ed8a8d;
47
+ --warning: #ddba73;
48
+ --series: #65b5ed;
49
+ --series-fill: rgba(72, 158, 224, .26);
50
+ --series-fill-end: rgba(72, 158, 224, 0);
51
+ --tooltip: #25272c;
52
+ --target: #878d97;
53
+ --slice-1: #65b5ed;
54
+ --slice-2: #80c5b6;
55
+ --slice-3: #a2b2d0;
56
+ --slice-4: #e1b575;
57
+ --slice-5: #a1a9de;
58
+ --slice-6: #a1d8eb;
59
+ --slice-7: #c5aa99;
60
+ --slice-8: #b7bfcd;
61
+ }
62
+ }
63
+ * {
64
+ box-sizing: border-box;
65
+ }
66
+ html {
67
+ background: var(--page);
68
+ scroll-padding-block-start: 32px;
69
+ }
70
+ body {
71
+ margin: 0;
72
+ color: var(--body);
73
+ font-size: 18px;
74
+ line-height: 1.75;
75
+ }
76
+ button {
77
+ font: inherit;
78
+ color: inherit;
79
+ }
80
+ a {
81
+ color: var(--focus);
82
+ text-underline-offset: 0.2em;
83
+ text-decoration-thickness: 1px;
84
+ overflow-wrap: anywhere;
85
+ }
86
+ a:focus-visible,
87
+ button:focus-visible,
88
+ summary:focus-visible {
89
+ outline: 2px solid var(--focus);
90
+ outline-offset: 5px;
91
+ border-radius: 3px;
92
+ }
93
+ .report {
94
+ max-width: 1680px;
95
+ margin-inline: auto;
96
+ padding: 40px clamp(24px, 3.5vw, 60px) 80px;
97
+ }
98
+ h1,
99
+ h2,
100
+ h3,
101
+ h4,
102
+ h5,
103
+ h6 {
104
+ color: var(--ink);
105
+ line-height: 1.3;
106
+ letter-spacing: -0.025em;
107
+ text-wrap: balance;
108
+ scroll-margin-block-start: 32px;
109
+ }
110
+ h1 {
111
+ font-size: clamp(28px, 2.4vw, 34px);
112
+ font-weight: 650;
113
+ margin: 0 0 32px;
114
+ }
115
+ h2 {
116
+ font-size: 24px;
117
+ font-weight: 620;
118
+ margin: 48px 0 14px;
119
+ }
120
+ h3 {
121
+ font-size: 19px;
122
+ font-weight: 600;
123
+ margin: 32px 0 12px;
124
+ }
125
+ h4,
126
+ h5,
127
+ h6 {
128
+ font-size: 18px;
129
+ margin: 28px 0 10px;
130
+ }
131
+ p {
132
+ margin: 0 0 18px;
133
+ max-width: 78ch;
134
+ overflow-wrap: anywhere;
135
+ }
136
+ strong {
137
+ color: var(--ink);
138
+ font-weight: 650;
139
+ }
140
+ ul,
141
+ ol {
142
+ padding-inline-start: 25px;
143
+ margin: 14px 0 24px;
144
+ max-width: 78ch;
145
+ }
146
+ li {
147
+ margin-block: 6px;
148
+ }
149
+ blockquote {
150
+ margin: 24px 0;
151
+ padding-inline-start: 22px;
152
+ border-inline-start: 2px solid var(--rule);
153
+ color: var(--muted);
154
+ }
155
+ hr {
156
+ border: 0;
157
+ border-block-start: 1px solid var(--rule);
158
+ margin: 42px 0;
159
+ }
160
+ pre {
161
+ overflow: auto;
162
+ padding: 20px 24px;
163
+ background: var(--soft);
164
+ border-radius: 6px;
165
+ font-size: 14px;
166
+ line-height: 1.65;
167
+ }
168
+ code {
169
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
170
+ font-size: 0.86em;
171
+ }
172
+ :not(pre) > code {
173
+ background: var(--soft);
174
+ border-radius: 3px;
175
+ padding: 0.15em 0.35em;
176
+ color: var(--ink);
177
+ }
178
+ .component-grid {
179
+ display: grid;
180
+ gap: 36px 48px;
181
+ margin: 30px 0 48px;
182
+ align-items: start;
183
+ }
184
+ .component-grid[data-columns="1"] {
185
+ grid-template-columns: minmax(0, 1fr);
186
+ }
187
+ .component-grid[data-columns="2"] {
188
+ grid-template-columns: repeat(2, minmax(0, 1fr));
189
+ }
190
+ .component-grid[data-columns="3"] {
191
+ grid-template-columns: repeat(3, minmax(0, 1fr));
192
+ }
193
+ .component-grid[data-columns="4"] {
194
+ grid-template-columns: repeat(4, minmax(0, 1fr));
195
+ }
196
+ .component-grid > * {
197
+ min-width: 0;
198
+ margin-block: 0;
199
+ }
200
+ .metric {
201
+ padding-block: 7px 12px;
202
+ font-variant-numeric: tabular-nums;
203
+ }
204
+ .metric-label {
205
+ color: var(--muted);
206
+ font-size: 17px;
207
+ line-height: 1.45;
208
+ margin: 0 0 14px;
209
+ }
210
+ .metric-value {
211
+ color: var(--ink);
212
+ font-size: clamp(30px, 2.8vw, 42px);
213
+ font-weight: 560;
214
+ letter-spacing: -0.035em;
215
+ line-height: 1.15;
216
+ margin: 0;
217
+ white-space: nowrap;
218
+ overflow-x: auto;
219
+ }
220
+ .metric-comparison {
221
+ font-size: 15px;
222
+ line-height: 1.5;
223
+ margin: 16px 0 0;
224
+ }
225
+ .metric-direction {
226
+ font-size: 0.75em;
227
+ margin-inline-end: 7px;
228
+ }
229
+ [data-sentiment="positive"] {
230
+ color: var(--positive);
231
+ }
232
+ [data-sentiment="negative"] {
233
+ color: var(--negative);
234
+ }
235
+ .chart {
236
+ min-width: 0;
237
+ margin: 28px 0 38px;
238
+ }
239
+ .chart figcaption {
240
+ color: var(--ink);
241
+ font-size: 18px;
242
+ font-weight: 550;
243
+ line-height: 1.4;
244
+ margin-block-end: 20px;
245
+ }
246
+ .chart-plot {
247
+ width: 100%;
248
+ height: 290px;
249
+ overflow: hidden;
250
+ }
251
+ .chart-data {
252
+ margin-block-start: 9px;
253
+ font-size: 13px;
254
+ }
255
+ .chart-data summary {
256
+ width: fit-content;
257
+ color: var(--muted);
258
+ cursor: pointer;
259
+ padding-block: 4px;
260
+ }
261
+ .chart-data[open] {
262
+ margin-block-end: 24px;
263
+ }
264
+ .chart-data table {
265
+ font-size: 14px;
266
+ }
267
+ .chart-data caption {
268
+ font-size: 15px;
269
+ }
270
+ .funnel-stages {
271
+ list-style: none;
272
+ padding: 0;
273
+ margin: 0;
274
+ max-width: none;
275
+ display: grid;
276
+ gap: 16px;
277
+ }
278
+ .funnel-stage {
279
+ --stage-fill: var(--series);
280
+ margin: 0;
281
+ min-width: 0;
282
+ font-size: 16px;
283
+ line-height: 1.5;
284
+ font-variant-numeric: tabular-nums;
285
+ }
286
+ .funnel-stage[data-status="on-target"] {
287
+ --stage-fill: var(--positive);
288
+ }
289
+ .funnel-stage[data-status="below-target"] {
290
+ --stage-fill: var(--warning);
291
+ }
292
+ .funnel-stage[data-status="at-risk"] {
293
+ --stage-fill: var(--negative);
294
+ }
295
+ .funnel-heading,
296
+ .funnel-values {
297
+ display: flex;
298
+ flex-wrap: wrap;
299
+ gap: 2px 12px;
300
+ }
301
+ .funnel-heading {
302
+ justify-content: space-between;
303
+ gap: 4px 16px;
304
+ overflow-wrap: anywhere;
305
+ }
306
+ .funnel-values {
307
+ color: var(--muted);
308
+ }
309
+ .funnel-values strong {
310
+ font-weight: 550;
311
+ }
312
+ .funnel-stage meter {
313
+ display: block;
314
+ appearance: none;
315
+ width: 100%;
316
+ height: 10px;
317
+ margin-block-start: 8px;
318
+ border: 0;
319
+ border-radius: 999px;
320
+ background: var(--soft);
321
+ }
322
+ .funnel-stage meter::-webkit-meter-bar {
323
+ height: 10px;
324
+ border: 0;
325
+ border-radius: 999px;
326
+ background: var(--soft);
327
+ box-shadow: none;
328
+ }
329
+ .funnel-stage meter::-webkit-meter-optimum-value,
330
+ .funnel-stage meter::-webkit-meter-suboptimum-value,
331
+ .funnel-stage meter::-webkit-meter-even-less-good-value {
332
+ border-radius: 999px;
333
+ background: var(--stage-fill);
334
+ }
335
+ .funnel-stage meter::-moz-meter-bar {
336
+ border-radius: 999px;
337
+ background: var(--stage-fill);
338
+ }
339
+ .funnel-status {
340
+ display: inline-flex;
341
+ align-items: center;
342
+ gap: 6px;
343
+ margin-block-start: 5px;
344
+ color: var(--muted);
345
+ font-size: 12px;
346
+ }
347
+ .funnel-status::before {
348
+ content: "";
349
+ width: 6px;
350
+ height: 6px;
351
+ border-radius: 50%;
352
+ background: var(--stage-fill);
353
+ }
354
+ .donut-layout {
355
+ display: flex;
356
+ flex-wrap: wrap;
357
+ align-items: center;
358
+ justify-content: center;
359
+ gap: 12px 24px;
360
+ }
361
+ .donut-plot {
362
+ flex: 1 1 180px;
363
+ min-width: 0;
364
+ max-width: 300px;
365
+ height: 260px;
366
+ }
367
+ .donut-legend {
368
+ flex: 1 1 210px;
369
+ min-width: 0;
370
+ max-width: 500px;
371
+ list-style: none;
372
+ padding: 0;
373
+ margin: 0;
374
+ font-size: 14px;
375
+ line-height: 1.5;
376
+ font-variant-numeric: tabular-nums;
377
+ }
378
+ .donut-legend li {
379
+ display: grid;
380
+ grid-template-columns: minmax(0, 1fr) auto auto;
381
+ align-items: baseline;
382
+ gap: 8px 14px;
383
+ margin: 0;
384
+ padding-block: 10px;
385
+ }
386
+ .donut-key {
387
+ display: flex;
388
+ align-items: baseline;
389
+ gap: 9px;
390
+ overflow-wrap: anywhere;
391
+ }
392
+ .donut-swatch {
393
+ flex: 0 0 8px;
394
+ height: 8px;
395
+ border-radius: 50%;
396
+ }
397
+ .donut-swatch[data-slice="1"] {
398
+ background: var(--slice-1);
399
+ }
400
+ .donut-swatch[data-slice="2"] {
401
+ background: var(--slice-2);
402
+ }
403
+ .donut-swatch[data-slice="3"] {
404
+ background: var(--slice-3);
405
+ }
406
+ .donut-swatch[data-slice="4"] {
407
+ background: var(--slice-4);
408
+ }
409
+ .donut-swatch[data-slice="5"] {
410
+ background: var(--slice-5);
411
+ }
412
+ .donut-swatch[data-slice="6"] {
413
+ background: var(--slice-6);
414
+ }
415
+ .donut-swatch[data-slice="7"] {
416
+ background: var(--slice-7);
417
+ }
418
+ .donut-swatch[data-slice="8"] {
419
+ background: var(--slice-8);
420
+ }
421
+ .donut-value {
422
+ color: var(--ink);
423
+ }
424
+ .donut-share {
425
+ color: var(--muted);
426
+ }
427
+ .table-scroll {
428
+ max-width: 100%;
429
+ overflow: auto;
430
+ margin: 28px 0 30px;
431
+ scrollbar-width: thin;
432
+ }
433
+ table {
434
+ width: 100%;
435
+ border-collapse: collapse;
436
+ font-size: 16px;
437
+ line-height: 1.6;
438
+ font-variant-numeric: tabular-nums;
439
+ }
440
+ caption {
441
+ color: var(--ink);
442
+ font-size: 18px;
443
+ font-weight: 550;
444
+ text-align: start;
445
+ padding: 0 0 20px;
446
+ }
447
+ thead {
448
+ color: var(--muted);
449
+ }
450
+ th {
451
+ font-weight: 400;
452
+ border-block-end: 1px solid var(--rule);
453
+ }
454
+ th,
455
+ td {
456
+ text-align: start;
457
+ padding: 13px 18px 13px 0;
458
+ white-space: nowrap;
459
+ }
460
+ th:last-child,
461
+ td:last-child {
462
+ padding-inline-end: 0;
463
+ }
464
+ td {
465
+ border-block-end: 1px solid var(--rule);
466
+ }
467
+ tbody tr:last-child td {
468
+ border-block-end: 0;
469
+ }
470
+ .numeric {
471
+ text-align: end;
472
+ }
473
+ th button {
474
+ border: 0;
475
+ background: transparent;
476
+ display: inline-flex;
477
+ align-items: center;
478
+ gap: 6px;
479
+ padding: 4px 0;
480
+ margin: -4px 0;
481
+ min-height: 32px;
482
+ cursor: pointer;
483
+ text-align: inherit;
484
+ }
485
+ th.numeric button {
486
+ justify-content: end;
487
+ }
488
+ .sort-indicator {
489
+ font-size: 11px;
490
+ opacity: 0.4;
491
+ }
492
+ th[aria-sort="ascending"] .sort-indicator,
493
+ th[aria-sort="descending"] .sort-indicator {
494
+ opacity: 1;
495
+ color: var(--ink);
496
+ }
497
+ .callout {
498
+ border-inline-start: 2px solid var(--rule);
499
+ margin: 32px 0;
500
+ padding: 4px 0 4px 20px;
501
+ font-size: 16px;
502
+ }
503
+ .callout[data-tone="warning"] {
504
+ border-color: var(--warning);
505
+ }
506
+ .callout-title {
507
+ font-weight: 600;
508
+ color: var(--ink);
509
+ margin-block-end: 8px;
510
+ }
511
+ .callout > :last-child {
512
+ margin-block-end: 0;
513
+ }
514
+ .empty-state {
515
+ padding-block: 32px;
516
+ color: var(--muted);
517
+ font-size: 15px;
518
+ }
519
+ .skip-link {
520
+ position: absolute;
521
+ inset-block-start: 12px;
522
+ inset-inline-start: 12px;
523
+ transform: translateY(-160%);
524
+ background: var(--page);
525
+ padding: 8px 14px;
526
+ z-index: 10;
527
+ }
528
+ .skip-link:focus {
529
+ transform: none;
530
+ }
531
+ .visually-hidden {
532
+ position: absolute;
533
+ width: 1px;
534
+ height: 1px;
535
+ padding: 0;
536
+ overflow: hidden;
537
+ clip-path: inset(50%);
538
+ white-space: nowrap;
539
+ border: 0;
540
+ }
541
+ .diagnostic {
542
+ padding-block: 22px;
543
+ border-block-start: 1px solid var(--rule);
544
+ max-width: 90ch;
545
+ }
546
+ .diagnostic-location {
547
+ font-family: ui-monospace, monospace;
548
+ font-size: 13px;
549
+ color: var(--negative);
550
+ }
551
+ .diagnostic-hint,
552
+ .diagnostic-intro {
553
+ color: var(--muted);
554
+ }
555
+ @media (hover: hover) {
556
+ th button:hover {
557
+ color: var(--ink);
558
+ }
559
+ tbody tr:hover {
560
+ background: var(--soft);
561
+ }
562
+ }
563
+ @media (max-width: 1280px) {
564
+ .metric-grid[data-columns="4"] {
565
+ grid-template-columns: repeat(2, minmax(0, 1fr));
566
+ }
567
+ }
568
+ @media (max-width: 800px) {
569
+ .component-grid[data-columns="3"],
570
+ .component-grid[data-columns="4"] {
571
+ grid-template-columns: repeat(2, minmax(0, 1fr));
572
+ }
573
+ .component-grid {
574
+ gap: 26px 28px;
575
+ }
576
+ .report {
577
+ padding-block-start: 30px;
578
+ }
579
+ .metric-label {
580
+ font-size: 15px;
581
+ }
582
+ }
583
+ @media (max-width: 640px) {
584
+ .component-grid.metric-grid {
585
+ grid-template-columns: minmax(0, 1fr);
586
+ }
587
+ }
588
+ @media (max-width: 540px) {
589
+ body {
590
+ font-size: 16px;
591
+ }
592
+ .component-grid[data-columns="2"] {
593
+ grid-template-columns: minmax(0, 1fr);
594
+ }
595
+ .metric-value {
596
+ font-size: 30px;
597
+ }
598
+ .metric-comparison {
599
+ font-size: 13px;
600
+ }
601
+ .chart-plot {
602
+ height: 245px;
603
+ }
604
+ h2 {
605
+ font-size: 21px;
606
+ margin-block-start: 34px;
607
+ }
608
+ table {
609
+ font-size: 14px;
610
+ }
611
+ .report {
612
+ padding-inline: 22px;
613
+ }
614
+ }
615
+ @media print {
616
+ :root {
617
+ color-scheme: light;
618
+ }
619
+ .chart-data summary,
620
+ .skip-link {
621
+ display: none;
622
+ }
623
+ .chart,
624
+ .metric,
625
+ tr {
626
+ break-inside: avoid;
627
+ }
628
+ .report {
629
+ padding: 0;
630
+ }
631
+ }