@keenmate/pure-admin-core 2.7.1 → 2.8.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.
- package/README.md +8 -17
- package/dist/css/main.css +620 -83
- package/package.json +1 -1
- package/src/scss/_base-css-variables.scss +6 -0
- package/src/scss/core-components/_kpi-bento.scss +41 -6
- package/src/scss/core-components/_kpi-comparison-gauges.scss +60 -23
- package/src/scss/core-components/_kpi-editorial-minimal.scss +63 -20
- package/src/scss/core-components/_kpi-hero-supporting.scss +15 -1
- package/src/scss/core-components/_kpi-numeric-strip.scss +74 -15
- package/src/scss/core-components/_kpi-sparkline-list.scss +56 -4
- package/src/scss/core-components/_kpi-terminal.scss +22 -15
- package/src/scss/main.scss +11 -0
package/dist/css/main.css
CHANGED
|
@@ -16823,25 +16823,31 @@ code {
|
|
|
16823
16823
|
/* ========================================
|
|
16824
16824
|
KPI · Terminal grid
|
|
16825
16825
|
Bloomberg-style dense panel: mono numbers, status pills, inline SVG
|
|
16826
|
-
sparklines, ▲▼ deltas, segmented
|
|
16826
|
+
sparklines, ▲▼ deltas, optional segmented tab strip for swapping
|
|
16827
|
+
the body content (different tile sets / grids per tab).
|
|
16827
16828
|
Shared chrome (header, live, footer, detail popover, spark-dot) is in
|
|
16828
16829
|
_kpi-base.scss.
|
|
16829
16830
|
======================================== */
|
|
16830
|
-
/* -----
|
|
16831
|
+
/* ----- Tab strip (segmented button group) ------------------------------
|
|
16832
|
+
Generalised tabs — each `.pa-kpi-terminal__tab` carries a `data-tab`
|
|
16833
|
+
slug that matches a `.pa-kpi-terminal__pane[data-tab="…"]` in the body.
|
|
16834
|
+
JS toggles `.is-active` on the clicked tab + matching pane; tabs and
|
|
16835
|
+
panes are otherwise independent so each pane can hold a completely
|
|
16836
|
+
different grid (different tile count, different grid modifier). */
|
|
16831
16837
|
.pa-kpi-terminal__controls {
|
|
16832
16838
|
display: inline-flex;
|
|
16833
16839
|
align-items: center;
|
|
16834
16840
|
gap: 1.6rem;
|
|
16835
16841
|
}
|
|
16836
16842
|
|
|
16837
|
-
.pa-kpi-
|
|
16843
|
+
.pa-kpi-terminal__tabs {
|
|
16838
16844
|
display: inline-flex;
|
|
16839
16845
|
border: 1px solid var(--pa-border-color);
|
|
16840
16846
|
border-radius: 0.4rem;
|
|
16841
16847
|
overflow: hidden;
|
|
16842
16848
|
}
|
|
16843
16849
|
|
|
16844
|
-
.pa-kpi-
|
|
16850
|
+
.pa-kpi-terminal__tab {
|
|
16845
16851
|
background: transparent;
|
|
16846
16852
|
border: 0;
|
|
16847
16853
|
color: var(--pa-text-color-2);
|
|
@@ -16853,14 +16859,22 @@ code {
|
|
|
16853
16859
|
cursor: pointer;
|
|
16854
16860
|
transition: background-color 0.1s ease-out, color 0.1s ease-out;
|
|
16855
16861
|
}
|
|
16856
|
-
.pa-kpi-
|
|
16862
|
+
.pa-kpi-terminal__tab:hover {
|
|
16857
16863
|
color: var(--pa-text-color-1);
|
|
16858
16864
|
}
|
|
16859
|
-
.pa-kpi-
|
|
16865
|
+
.pa-kpi-terminal__tab.is-active {
|
|
16860
16866
|
background: var(--pa-text-color-1);
|
|
16861
16867
|
color: var(--pa-card-bg);
|
|
16862
16868
|
}
|
|
16863
16869
|
|
|
16870
|
+
/* ----- Pane visibility ------------------------------------------------- */
|
|
16871
|
+
.pa-kpi-terminal__pane {
|
|
16872
|
+
display: none;
|
|
16873
|
+
}
|
|
16874
|
+
.pa-kpi-terminal__pane.is-active {
|
|
16875
|
+
display: block;
|
|
16876
|
+
}
|
|
16877
|
+
|
|
16864
16878
|
/* ----- Grid + tile borders ----------------------------------------------
|
|
16865
16879
|
Hairline 1px borders between tiles, no gap. Last-row/last-column
|
|
16866
16880
|
borders suppressed via :nth-last-child / :nth-child selectors. */
|
|
@@ -16956,17 +16970,16 @@ code {
|
|
|
16956
16970
|
margin-bottom: 0.8rem;
|
|
16957
16971
|
}
|
|
16958
16972
|
|
|
16959
|
-
/* ----- Big value
|
|
16960
|
-
|
|
16961
|
-
|
|
16962
|
-
|
|
16963
|
-
when the segmented control is clicked. */
|
|
16973
|
+
/* ----- Big value -------------------------------------------------------
|
|
16974
|
+
One value per tile — sentiment colour set via `--very-positive` /
|
|
16975
|
+
`--positive` / `--neutral` / `--negative` / `--very-negative` modifier
|
|
16976
|
+
on the value element. */
|
|
16964
16977
|
.pa-kpi-tile__values {
|
|
16965
16978
|
margin-bottom: 0.4rem;
|
|
16966
16979
|
}
|
|
16967
16980
|
|
|
16968
16981
|
.pa-kpi-tile__value {
|
|
16969
|
-
display:
|
|
16982
|
+
display: inline-flex;
|
|
16970
16983
|
align-items: baseline;
|
|
16971
16984
|
gap: 0.3rem;
|
|
16972
16985
|
font-family: var(--base-font-family-mono);
|
|
@@ -16988,12 +17001,6 @@ code {
|
|
|
16988
17001
|
color: var(--pa-very-negative);
|
|
16989
17002
|
}
|
|
16990
17003
|
|
|
16991
|
-
.pa-kpi-terminal[data-view=value] .pa-kpi-tile__value[data-mode=value],
|
|
16992
|
-
.pa-kpi-terminal[data-view=delta] .pa-kpi-tile__value[data-mode=delta],
|
|
16993
|
-
.pa-kpi-terminal[data-view=trend] .pa-kpi-tile__value[data-mode=trend] {
|
|
16994
|
-
display: inline-flex;
|
|
16995
|
-
}
|
|
16996
|
-
|
|
16997
17004
|
.pa-kpi-tile__num {
|
|
16998
17005
|
font-size: 3.8rem;
|
|
16999
17006
|
font-weight: 700;
|
|
@@ -17078,7 +17085,16 @@ code {
|
|
|
17078
17085
|
scanning rather than per-tile depth — no view-mode toggle, no status
|
|
17079
17086
|
pills. Container queries collapse 4-col → 2-row → 3-row as the card
|
|
17080
17087
|
narrows.
|
|
17088
|
+
|
|
17089
|
+
Row template uses local SCSS variables for the four column widths
|
|
17090
|
+
(`$spark-col-label`, `$spark-col-chart`, `$spark-col-value`,
|
|
17091
|
+
`$spark-col-delta`) so all responsive overrides reference the same
|
|
17092
|
+
widths — change one and every breakpoint follows. The `--no-delta`
|
|
17093
|
+
modifier drops the rightmost column; the other three are load-bearing
|
|
17094
|
+
(a sparkline list without label, chart, or value is a different
|
|
17095
|
+
design).
|
|
17081
17096
|
======================================== */
|
|
17097
|
+
/* Per-column track widths — referenced from every template selector. */
|
|
17082
17098
|
/* Card is a query container so rows react to *card* width, not viewport. */
|
|
17083
17099
|
.pa-kpi-spark-list {
|
|
17084
17100
|
container-type: inline-size;
|
|
@@ -17101,6 +17117,18 @@ code {
|
|
|
17101
17117
|
border-bottom: 0;
|
|
17102
17118
|
}
|
|
17103
17119
|
|
|
17120
|
+
/* Modifier: --no-delta — drops the rightmost column. label · chart ·
|
|
17121
|
+
value only. Useful when the chart's slope already conveys direction
|
|
17122
|
+
and the delta would be redundant. Hides the delta element and shrinks
|
|
17123
|
+
the row template to 3 columns. */
|
|
17124
|
+
.pa-kpi-spark-list--no-delta .pa-kpi-spark-row {
|
|
17125
|
+
grid-template-columns: minmax(14rem, 28%) minmax(10rem, 1fr) minmax(8rem, 18%);
|
|
17126
|
+
}
|
|
17127
|
+
|
|
17128
|
+
.pa-kpi-spark-list--no-delta .pa-kpi-spark-row__delta {
|
|
17129
|
+
display: none;
|
|
17130
|
+
}
|
|
17131
|
+
|
|
17104
17132
|
/* Mid-narrow card (1×3 page-grid + 45% column): stack to 2 rows.
|
|
17105
17133
|
Label/value/delta on top, full-width chart below. Default order is
|
|
17106
17134
|
value-above-chart; use .pa-kpi-spark-list--chart-first to flip. */
|
|
@@ -17152,6 +17180,16 @@ code {
|
|
|
17152
17180
|
.pa-kpi-spark-list--chart-first .pa-kpi-spark-row__delta {
|
|
17153
17181
|
align-self: baseline;
|
|
17154
17182
|
}
|
|
17183
|
+
/* --no-delta at mid-narrow: 2-row layout, top row is label+value only. */
|
|
17184
|
+
.pa-kpi-spark-list--no-delta .pa-kpi-spark-row {
|
|
17185
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
17186
|
+
grid-template-areas: "label value" "chart chart";
|
|
17187
|
+
}
|
|
17188
|
+
/* --no-delta + --chart-first: 3-row single-column stack. */
|
|
17189
|
+
.pa-kpi-spark-list--no-delta.pa-kpi-spark-list--chart-first .pa-kpi-spark-row {
|
|
17190
|
+
grid-template-columns: 1fr;
|
|
17191
|
+
grid-template-areas: "label" "chart" "value";
|
|
17192
|
+
}
|
|
17155
17193
|
}
|
|
17156
17194
|
/* Very narrow card (~280–360px, 25% page-grid stress test): force the
|
|
17157
17195
|
chart-first 3-row layout regardless of modifier. */
|
|
@@ -17180,6 +17218,11 @@ code {
|
|
|
17180
17218
|
grid-area: delta;
|
|
17181
17219
|
align-self: baseline;
|
|
17182
17220
|
}
|
|
17221
|
+
/* --no-delta at very-narrow: 3-row single-column stack (no delta cell). */
|
|
17222
|
+
.pa-kpi-spark-list--no-delta .pa-kpi-spark-row {
|
|
17223
|
+
grid-template-columns: 1fr;
|
|
17224
|
+
grid-template-areas: "label" "chart" "value";
|
|
17225
|
+
}
|
|
17183
17226
|
}
|
|
17184
17227
|
/* ----- Cell typography -------------------------------------------------- */
|
|
17185
17228
|
.pa-kpi-spark-row__label {
|
|
@@ -17284,43 +17327,86 @@ code {
|
|
|
17284
17327
|
Goal-oriented progress bars. Each KPI shows label · value, a bar with a
|
|
17285
17328
|
target tick, and a 0 · tgt scale below. Bar fill = value/target * 100%,
|
|
17286
17329
|
capped visually so overshoots are signalled by colour, not overflow.
|
|
17287
|
-
======================================== */
|
|
17288
|
-
.pa-kpi-gauge-list {
|
|
17289
|
-
container-type: inline-size;
|
|
17290
|
-
}
|
|
17291
17330
|
|
|
17331
|
+
Layout is a cell-min-driven `auto-fit` grid — cells stay at least
|
|
17332
|
+
`--pa-kpi-gauge-cell-min` wide, the grid fits as many columns as the
|
|
17333
|
+
container allows, and the responsive cascade is intrinsic to the grid
|
|
17334
|
+
template (no `@container` queries). `--max-N` cap modifiers cap the
|
|
17335
|
+
column count at N while still collapsing below the cell-min × N
|
|
17336
|
+
threshold. Same pattern as `_kpi-editorial-minimal.scss`.
|
|
17337
|
+
======================================== */
|
|
17292
17338
|
.pa-kpi-gauge-list__body {
|
|
17293
17339
|
padding: 0;
|
|
17294
17340
|
}
|
|
17295
17341
|
|
|
17296
|
-
/*
|
|
17342
|
+
/* ----- Grid + hairline rules -------------------------------------------
|
|
17343
|
+
Cell-min-driven responsive layout. Override `--pa-kpi-gauge-cell-min`
|
|
17344
|
+
per instance to change density (smaller min → more columns at the same
|
|
17345
|
+
container width).
|
|
17346
|
+
|
|
17347
|
+
`gap: 1px` over `background: var(--pa-border-color)` with each tile
|
|
17348
|
+
painting `background: var(--pa-card-bg)` on top — only the gap shows
|
|
17349
|
+
through, giving single-pixel hairlines on every interior boundary
|
|
17350
|
+
regardless of column count. The card's outer border supplies the
|
|
17351
|
+
perimeter. Replaces the previous per-tile `border-right` +
|
|
17352
|
+
`border-bottom` + nth-child suppression machinery, which only worked
|
|
17353
|
+
for the hardcoded 2-col layout. */
|
|
17297
17354
|
.pa-kpi-gauge-list__grid {
|
|
17298
17355
|
display: grid;
|
|
17356
|
+
grid-template-columns: repeat(auto-fit, minmax(var(--pa-kpi-gauge-cell-min, 20rem), 1fr));
|
|
17357
|
+
gap: 1px;
|
|
17358
|
+
background: var(--pa-border-color);
|
|
17359
|
+
}
|
|
17360
|
+
|
|
17361
|
+
/* Modifier: force exactly 2 columns regardless of cell-min or container
|
|
17362
|
+
width. For placements wanting a deterministic 2×N layout. */
|
|
17363
|
+
.pa-kpi-gauge-list__grid--2col {
|
|
17299
17364
|
grid-template-columns: repeat(2, 1fr);
|
|
17300
17365
|
}
|
|
17301
17366
|
|
|
17302
|
-
|
|
17303
|
-
|
|
17304
|
-
|
|
17305
|
-
|
|
17367
|
+
/* Cap-at-N modifiers: combine auto-fit with a ceiling on the column
|
|
17368
|
+
count. Cells stay at least --pa-kpi-gauge-cell-min wide, but the grid
|
|
17369
|
+
never exceeds N columns even when the container is wide enough to fit
|
|
17370
|
+
more. Below the cell-min × N threshold the grid still collapses
|
|
17371
|
+
responsively — these modifiers cap the maximum, not the minimum.
|
|
17372
|
+
|
|
17373
|
+
How the calc reads: each track's effective min is
|
|
17374
|
+
max(cell-min, (container − total-gap) / N)
|
|
17375
|
+
On a wide container the calc wins (so tracks grow, you stay at N).
|
|
17376
|
+
On a narrow container cell-min wins (so the grid collapses).
|
|
17377
|
+
|
|
17378
|
+
Pick the cap so your item count divides into clean rows. */
|
|
17379
|
+
.pa-kpi-gauge-list__grid--max-2 {
|
|
17380
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-gauge-cell-min, 20rem), (100% - 1px) / 2), 1fr));
|
|
17381
|
+
}
|
|
17382
|
+
|
|
17383
|
+
.pa-kpi-gauge-list__grid--max-3 {
|
|
17384
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-gauge-cell-min, 20rem), (100% - 2px) / 3), 1fr));
|
|
17306
17385
|
}
|
|
17386
|
+
|
|
17387
|
+
.pa-kpi-gauge-list__grid--max-4 {
|
|
17388
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-gauge-cell-min, 20rem), (100% - 3px) / 4), 1fr));
|
|
17389
|
+
}
|
|
17390
|
+
|
|
17391
|
+
.pa-kpi-gauge-list__grid--max-5 {
|
|
17392
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-gauge-cell-min, 20rem), (100% - 4px) / 5), 1fr));
|
|
17393
|
+
}
|
|
17394
|
+
|
|
17395
|
+
.pa-kpi-gauge-list__grid--max-6 {
|
|
17396
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-gauge-cell-min, 20rem), (100% - 5px) / 6), 1fr));
|
|
17397
|
+
}
|
|
17398
|
+
|
|
17307
17399
|
/* ----- Gauge tile (label/value head · bar · 0/tgt scale) ---------------- */
|
|
17308
17400
|
.pa-kpi-gauge {
|
|
17309
17401
|
position: relative;
|
|
17402
|
+
background: var(--pa-card-bg);
|
|
17310
17403
|
padding: 1.6rem 2rem;
|
|
17311
|
-
|
|
17312
|
-
border-right: 1px solid var(--pa-border-color);
|
|
17404
|
+
min-width: 0;
|
|
17313
17405
|
/* Per-tile bar colour cascade — modifiers below set the var, the fill
|
|
17314
17406
|
reads it. Cleaner than per-modifier-per-element rules; host apps can
|
|
17315
17407
|
override at the tile level via inline style="--pa-kpi-bar-color: …". */
|
|
17316
17408
|
--pa-kpi-bar-color: var(--pa-positive);
|
|
17317
17409
|
}
|
|
17318
|
-
.pa-kpi-gauge:nth-child(2n) {
|
|
17319
|
-
border-right: 0;
|
|
17320
|
-
}
|
|
17321
|
-
.pa-kpi-gauge:nth-last-child(-n+2) {
|
|
17322
|
-
border-bottom: 0;
|
|
17323
|
-
}
|
|
17324
17410
|
.pa-kpi-gauge--positive {
|
|
17325
17411
|
--pa-kpi-bar-color: var(--pa-positive);
|
|
17326
17412
|
}
|
|
@@ -17334,17 +17420,6 @@ code {
|
|
|
17334
17420
|
--pa-kpi-bar-color: color-mix(in srgb, var(--pa-text-color-1) 70%, transparent);
|
|
17335
17421
|
}
|
|
17336
17422
|
|
|
17337
|
-
@container (max-width: 600px) {
|
|
17338
|
-
.pa-kpi-gauge {
|
|
17339
|
-
border-right: 0;
|
|
17340
|
-
}
|
|
17341
|
-
.pa-kpi-gauge:nth-last-child(-n+2) {
|
|
17342
|
-
border-bottom: 1px solid var(--pa-border-color);
|
|
17343
|
-
}
|
|
17344
|
-
.pa-kpi-gauge:last-child {
|
|
17345
|
-
border-bottom: 0;
|
|
17346
|
-
}
|
|
17347
|
-
}
|
|
17348
17423
|
/* ----- Head: label left, value right (baseline-aligned) ----------------- */
|
|
17349
17424
|
.pa-kpi-gauge__head {
|
|
17350
17425
|
display: flex;
|
|
@@ -17442,13 +17517,29 @@ code {
|
|
|
17442
17517
|
padding: 1.6rem;
|
|
17443
17518
|
}
|
|
17444
17519
|
|
|
17445
|
-
/* ----- Layout: hero left, rail right ------------------------------------
|
|
17520
|
+
/* ----- Layout: hero left, rail right ------------------------------------
|
|
17521
|
+
Default split is 1:1 (50% hero / 50% rail). Modifiers below shift the
|
|
17522
|
+
weight to the hero, which is the more common "executive dashboard"
|
|
17523
|
+
shape — one big headline, supporting tiles compressed into a narrower
|
|
17524
|
+
rail. Pick a modifier per instance; the markup stays unchanged. */
|
|
17446
17525
|
.pa-kpi-hero-list__layout {
|
|
17447
17526
|
display: grid;
|
|
17448
17527
|
grid-template-columns: 1fr 1fr;
|
|
17449
17528
|
gap: 1.4rem;
|
|
17450
17529
|
}
|
|
17451
17530
|
|
|
17531
|
+
/* Hero 2/3, rail 1/3. */
|
|
17532
|
+
.pa-kpi-hero-list__layout--hero-2-3 {
|
|
17533
|
+
grid-template-columns: 2fr 1fr;
|
|
17534
|
+
}
|
|
17535
|
+
|
|
17536
|
+
/* Hero 3/4, rail 1/4 — hero-dominant; rail is a thin sidebar. */
|
|
17537
|
+
.pa-kpi-hero-list__layout--hero-3-4 {
|
|
17538
|
+
grid-template-columns: 3fr 1fr;
|
|
17539
|
+
}
|
|
17540
|
+
|
|
17541
|
+
/* Narrow card → stack to single column. Overrides any --hero-N-M modifier
|
|
17542
|
+
that lives on the same element. */
|
|
17452
17543
|
@container (max-width: 700px) {
|
|
17453
17544
|
.pa-kpi-hero-list__layout {
|
|
17454
17545
|
grid-template-columns: 1fr;
|
|
@@ -17660,23 +17751,33 @@ code {
|
|
|
17660
17751
|
/* ========================================
|
|
17661
17752
|
KPI · Bento layout
|
|
17662
17753
|
Magazine-style asymmetric tile sizing with sparklines as soft background
|
|
17663
|
-
fills behind the values. 6
|
|
17754
|
+
fills behind the values. Default 6-tile layout on a 6-col × 3-row grid
|
|
17664
17755
|
(hero left-half × 2 rows, two stacked right-half × 2 rows, three equal
|
|
17665
|
-
tiles bottom row). Tile placement by source order via :nth-child
|
|
17756
|
+
tiles bottom row). Tile placement is by source order via :nth-child, so
|
|
17757
|
+
markup stays identical across layout modifiers.
|
|
17758
|
+
|
|
17759
|
+
Layout modifiers (below) swap `grid-template-areas` to provide
|
|
17760
|
+
alternative compositions:
|
|
17761
|
+
· default (no modifier) — 6 tiles, hero on the left
|
|
17762
|
+
· `--hero-right` — 6 tiles, mirror of default (hero on right)
|
|
17763
|
+
· `--5-tile` — 5 tiles, hero + 4 supporting
|
|
17764
|
+
Row height is a CSS variable (`--pa-kpi-bento-row-height`, default
|
|
17765
|
+
`12rem`) so authors can dial tile height per instance.
|
|
17666
17766
|
======================================== */
|
|
17667
17767
|
.pa-kpi-bento {
|
|
17668
17768
|
container-type: inline-size;
|
|
17769
|
+
--pa-kpi-bento-row-height: 12rem;
|
|
17669
17770
|
}
|
|
17670
17771
|
|
|
17671
17772
|
.pa-kpi-bento__body {
|
|
17672
17773
|
padding: 1.6rem;
|
|
17673
17774
|
}
|
|
17674
17775
|
|
|
17675
|
-
/* ----- Bento grid
|
|
17776
|
+
/* ----- Bento grid (default: 6 tiles, hero on left) ---------------------- */
|
|
17676
17777
|
.pa-kpi-bento__grid {
|
|
17677
17778
|
display: grid;
|
|
17678
17779
|
grid-template-columns: repeat(6, 1fr);
|
|
17679
|
-
grid-template-rows:
|
|
17780
|
+
grid-template-rows: repeat(3, var(--pa-kpi-bento-row-height));
|
|
17680
17781
|
grid-template-areas: "hero hero hero a a a" "hero hero hero b b b" "c c d d e e";
|
|
17681
17782
|
gap: 1rem;
|
|
17682
17783
|
}
|
|
@@ -17699,8 +17800,27 @@ code {
|
|
|
17699
17800
|
grid-area: e;
|
|
17700
17801
|
}
|
|
17701
17802
|
|
|
17702
|
-
/*
|
|
17703
|
-
|
|
17803
|
+
/* Modifier: --hero-right — mirror of default. Hero on the right half,
|
|
17804
|
+
two stacked tiles on the left of rows 1-2, three equal tiles below.
|
|
17805
|
+
Same 6-tile contract as default; only the template flips. Source
|
|
17806
|
+
order stays unchanged (1st = hero, 2nd = a, …). */
|
|
17807
|
+
.pa-kpi-bento__grid--hero-right {
|
|
17808
|
+
grid-template-areas: "a a a hero hero hero" "b b b hero hero hero" "c c d d e e";
|
|
17809
|
+
}
|
|
17810
|
+
|
|
17811
|
+
/* Modifier: --5-tile — hero + 4 supporting. Hero spans the left half ×
|
|
17812
|
+
2 rows, two stacked tiles on the right (rows 1-2), two equal halves on
|
|
17813
|
+
the bottom row. Requires exactly 5 tiles — a 6th tile (if present)
|
|
17814
|
+
would be auto-placed in a new row and break the layout. */
|
|
17815
|
+
.pa-kpi-bento__grid--5-tile {
|
|
17816
|
+
grid-template-areas: "hero hero hero a a a" "hero hero hero b b b" "c c c d d d";
|
|
17817
|
+
}
|
|
17818
|
+
|
|
17819
|
+
/* Narrow card → stack everything single column. Resets `grid-area: auto`
|
|
17820
|
+
on every tile so the same markup works regardless of which layout
|
|
17821
|
+
modifier the grid carries (the @container override sets
|
|
17822
|
+
`grid-template-areas: none` and the `grid-area: auto` on nth-child
|
|
17823
|
+
together neutralise any modifier's template). */
|
|
17704
17824
|
@container (max-width: 700px) {
|
|
17705
17825
|
.pa-kpi-bento__grid {
|
|
17706
17826
|
grid-template-columns: 1fr;
|
|
@@ -17867,12 +17987,20 @@ code {
|
|
|
17867
17987
|
|
|
17868
17988
|
/* ========================================
|
|
17869
17989
|
KPI · Numeric strip (densest)
|
|
17870
|
-
Tabular "spreadsheet-style" table card with metric/now/prev
|
|
17871
|
-
columns — most data per pixel, no chart chrome. Each row is its
|
|
17872
|
-
grid sharing the same column template so cells align across rows
|
|
17990
|
+
Tabular "spreadsheet-style" table card with metric / now / prev / Δ% /
|
|
17991
|
+
target columns — most data per pixel, no chart chrome. Each row is its
|
|
17992
|
+
own grid sharing the same column template so cells align across rows
|
|
17873
17993
|
without needing subgrid. Wide-only by design — no responsive collapse;
|
|
17874
17994
|
narrow placements should use Comparison gauges instead.
|
|
17995
|
+
|
|
17996
|
+
Column contract: `metric` + `now` are always present; `prev`, `delta`,
|
|
17997
|
+
and `target` are independently optional via toggle modifiers on the
|
|
17998
|
+
strip (`--no-prev`, `--no-delta`, `--no-target`). Modifiers compose, so
|
|
17999
|
+
the visible column count ranges from 2 (all three optional columns
|
|
18000
|
+
dropped) to 5 (none dropped). Each combination has its own template
|
|
18001
|
+
selector below so the grid tracks always match the visible cell count.
|
|
17875
18002
|
======================================== */
|
|
18003
|
+
/* Per-column track widths — referenced from every template selector. */
|
|
17876
18004
|
.pa-kpi-strip__body {
|
|
17877
18005
|
padding: 0;
|
|
17878
18006
|
}
|
|
@@ -17881,7 +18009,7 @@ code {
|
|
|
17881
18009
|
.pa-kpi-strip__row,
|
|
17882
18010
|
.pa-kpi-strip__head-row {
|
|
17883
18011
|
display: grid;
|
|
17884
|
-
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.6fr);
|
|
18012
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.6fr);
|
|
17885
18013
|
column-gap: 1.6rem;
|
|
17886
18014
|
align-items: center;
|
|
17887
18015
|
position: relative;
|
|
@@ -18018,16 +18146,76 @@ code {
|
|
|
18018
18146
|
line-height: 1;
|
|
18019
18147
|
}
|
|
18020
18148
|
|
|
18021
|
-
/* -----
|
|
18022
|
-
|
|
18149
|
+
/* ----- Toggle modifiers ------------------------------------------------
|
|
18150
|
+
`--no-prev`, `--no-delta`, `--no-target` are independently composable.
|
|
18151
|
+
Each hides its column's cells (data + header) and the matching template
|
|
18152
|
+
selector below adjusts `grid-template-columns` to the visible cell
|
|
18153
|
+
count, so source order (metric, now, prev, delta, target) is preserved
|
|
18154
|
+
and the remaining cells slot into the right tracks.
|
|
18155
|
+
|
|
18156
|
+
`metric` and `now` are mandatory — no toggle drops them. If a strip
|
|
18157
|
+
doesn't need a focal value, it's a different design (use comparison
|
|
18158
|
+
gauges or editorial-minimal). */
|
|
18159
|
+
.pa-kpi-strip--no-prev .pa-kpi-strip__prev,
|
|
18160
|
+
.pa-kpi-strip--no-prev .pa-kpi-strip__head--prev {
|
|
18161
|
+
display: none;
|
|
18162
|
+
}
|
|
18163
|
+
|
|
18164
|
+
.pa-kpi-strip--no-delta .pa-kpi-strip__delta,
|
|
18165
|
+
.pa-kpi-strip--no-delta .pa-kpi-strip__head--delta {
|
|
18166
|
+
display: none;
|
|
18167
|
+
}
|
|
18168
|
+
|
|
18169
|
+
.pa-kpi-strip--no-target .pa-kpi-strip__target,
|
|
18170
|
+
.pa-kpi-strip--no-target .pa-kpi-strip__head--target {
|
|
18171
|
+
display: none;
|
|
18172
|
+
}
|
|
18173
|
+
|
|
18174
|
+
/* ----- Grid templates per visible-column combination -------------------
|
|
18175
|
+
8 combos (1 default + 3 single-drops + 3 double-drops + 1 triple-drop).
|
|
18176
|
+
Each lists the visible columns in source order with their declared
|
|
18177
|
+
`$strip-col-*` width. */
|
|
18178
|
+
/* 4-col: one optional column dropped */
|
|
18023
18179
|
.pa-kpi-strip--no-prev .pa-kpi-strip__row,
|
|
18024
18180
|
.pa-kpi-strip--no-prev .pa-kpi-strip__head-row {
|
|
18025
18181
|
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr) minmax(0, 1fr) minmax(0, 1.6fr);
|
|
18026
18182
|
}
|
|
18027
18183
|
|
|
18184
|
+
.pa-kpi-strip--no-delta .pa-kpi-strip__row,
|
|
18185
|
+
.pa-kpi-strip--no-delta .pa-kpi-strip__head-row {
|
|
18186
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr) minmax(0, 1fr) minmax(0, 1.6fr);
|
|
18187
|
+
}
|
|
18188
|
+
|
|
18189
|
+
.pa-kpi-strip--no-target .pa-kpi-strip__row,
|
|
18190
|
+
.pa-kpi-strip--no-target .pa-kpi-strip__head-row {
|
|
18191
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr) minmax(0, 1fr) minmax(0, 1fr);
|
|
18192
|
+
}
|
|
18193
|
+
|
|
18194
|
+
/* 3-col: two optional columns dropped */
|
|
18195
|
+
.pa-kpi-strip--no-prev.pa-kpi-strip--no-delta .pa-kpi-strip__row,
|
|
18196
|
+
.pa-kpi-strip--no-prev.pa-kpi-strip--no-delta .pa-kpi-strip__head-row {
|
|
18197
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr) minmax(0, 1.6fr);
|
|
18198
|
+
}
|
|
18199
|
+
|
|
18200
|
+
.pa-kpi-strip--no-prev.pa-kpi-strip--no-target .pa-kpi-strip__row,
|
|
18201
|
+
.pa-kpi-strip--no-prev.pa-kpi-strip--no-target .pa-kpi-strip__head-row {
|
|
18202
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr) minmax(0, 1fr);
|
|
18203
|
+
}
|
|
18204
|
+
|
|
18205
|
+
.pa-kpi-strip--no-delta.pa-kpi-strip--no-target .pa-kpi-strip__row,
|
|
18206
|
+
.pa-kpi-strip--no-delta.pa-kpi-strip--no-target .pa-kpi-strip__head-row {
|
|
18207
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr) minmax(0, 1fr);
|
|
18208
|
+
}
|
|
18209
|
+
|
|
18210
|
+
/* 2-col: all three optional columns dropped (metric + now only) */
|
|
18211
|
+
.pa-kpi-strip--no-prev.pa-kpi-strip--no-delta.pa-kpi-strip--no-target .pa-kpi-strip__row,
|
|
18212
|
+
.pa-kpi-strip--no-prev.pa-kpi-strip--no-delta.pa-kpi-strip--no-target .pa-kpi-strip__head-row {
|
|
18213
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 1.1fr);
|
|
18214
|
+
}
|
|
18215
|
+
|
|
18028
18216
|
/* ========================================
|
|
18029
18217
|
KPI · Editorial minimal
|
|
18030
|
-
|
|
18218
|
+
KPI tiles in a responsive grid with hairline rules between cells,
|
|
18031
18219
|
generous space, and an extra-light-weight number as the focal point per
|
|
18032
18220
|
tile. No charts, no pills — the design's whole identity is the thin
|
|
18033
18221
|
numeral. Renders as a table card (zero card-body padding) so hairlines
|
|
@@ -18038,38 +18226,74 @@ code {
|
|
|
18038
18226
|
}
|
|
18039
18227
|
|
|
18040
18228
|
/* ----- Grid + hairline rules -------------------------------------------
|
|
18229
|
+
Cell-min-driven responsive layout: cells stay at least
|
|
18230
|
+
--pa-kpi-edit-cell-min wide; the grid fits as many columns as the
|
|
18231
|
+
container allows. No @container queries — `auto-fit + minmax` handles
|
|
18232
|
+
the cascade intrinsically. Override the min per instance to change
|
|
18233
|
+
density (smaller min → more columns at the same container width).
|
|
18234
|
+
|
|
18041
18235
|
`gap: 1px` over `background: var(--pa-border-color)` with each tile
|
|
18042
|
-
painting `background: var(--pa-card-bg)` on top
|
|
18043
|
-
through, giving
|
|
18044
|
-
|
|
18045
|
-
|
|
18236
|
+
painting `background: var(--pa-card-bg)` on top — only the gap shows
|
|
18237
|
+
through, giving single-pixel hairlines on every interior boundary
|
|
18238
|
+
regardless of column count. The card's outer border supplies the
|
|
18239
|
+
perimeter. */
|
|
18046
18240
|
.pa-kpi-edit__grid {
|
|
18047
18241
|
display: grid;
|
|
18048
|
-
grid-template-columns: repeat(
|
|
18242
|
+
grid-template-columns: repeat(auto-fit, minmax(var(--pa-kpi-edit-cell-min, 14rem), 1fr));
|
|
18049
18243
|
gap: 1px;
|
|
18050
18244
|
background: var(--pa-border-color);
|
|
18051
|
-
container-type: inline-size;
|
|
18052
18245
|
}
|
|
18053
18246
|
|
|
18054
|
-
|
|
18055
|
-
|
|
18056
|
-
|
|
18057
|
-
}
|
|
18058
|
-
}
|
|
18059
|
-
@container (max-width: 360px) {
|
|
18060
|
-
.pa-kpi-edit__grid {
|
|
18061
|
-
grid-template-columns: 1fr;
|
|
18062
|
-
}
|
|
18063
|
-
}
|
|
18064
|
-
/* Modifier: force 2-col regardless of card width. For placements wanting
|
|
18065
|
-
a deterministic 2×N layout (e.g. 4 tiles as clean 2×2) instead of
|
|
18066
|
-
relying on the container query to land in the right bucket. */
|
|
18247
|
+
/* Modifier: force exactly 2 columns regardless of cell-min or container
|
|
18248
|
+
width. For placements wanting a deterministic 2×N layout (e.g. 4 tiles
|
|
18249
|
+
as a clean 2×2 even when the container is wide enough for more). */
|
|
18067
18250
|
.pa-kpi-edit__grid--2col {
|
|
18068
18251
|
grid-template-columns: repeat(2, 1fr);
|
|
18069
18252
|
}
|
|
18070
18253
|
|
|
18071
|
-
/*
|
|
18254
|
+
/* Cap-at-N modifiers: combine auto-fit with a ceiling on the column
|
|
18255
|
+
count. Cells stay at least --pa-kpi-edit-cell-min wide, but the grid
|
|
18256
|
+
never exceeds N columns even when the container is wide enough to fit
|
|
18257
|
+
more. Below the cell-min × N threshold the grid still collapses
|
|
18258
|
+
responsively — these modifiers cap the maximum, not the minimum.
|
|
18259
|
+
|
|
18260
|
+
How the calc reads: each track's effective min is
|
|
18261
|
+
max(cell-min, (container − total-gap) / N)
|
|
18262
|
+
On a wide container the calc wins (so tracks grow, you stay at N).
|
|
18263
|
+
On a narrow container cell-min wins (so the grid collapses).
|
|
18264
|
+
|
|
18265
|
+
Why this matters for the gray-void edge case: `auto-fit` keeps as many
|
|
18266
|
+
tracks as fit the container, then only collapses tracks empty across
|
|
18267
|
+
the *whole* grid. With 6 items at 4-col auto-fit, tracks 1–4 all have
|
|
18268
|
+
row-1 items, so row 2's tracks 3–4 stay (and show the gap background).
|
|
18269
|
+
Capping at 3 makes 6 items pack 3×2 cleanly. Pick the cap so your item
|
|
18270
|
+
count divides into clean rows. */
|
|
18271
|
+
.pa-kpi-edit__grid--max-2 {
|
|
18272
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-edit-cell-min, 14rem), (100% - 1px) / 2), 1fr));
|
|
18273
|
+
}
|
|
18274
|
+
|
|
18275
|
+
.pa-kpi-edit__grid--max-3 {
|
|
18276
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-edit-cell-min, 14rem), (100% - 2px) / 3), 1fr));
|
|
18277
|
+
}
|
|
18278
|
+
|
|
18279
|
+
.pa-kpi-edit__grid--max-4 {
|
|
18280
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-edit-cell-min, 14rem), (100% - 3px) / 4), 1fr));
|
|
18281
|
+
}
|
|
18282
|
+
|
|
18283
|
+
.pa-kpi-edit__grid--max-5 {
|
|
18284
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-edit-cell-min, 14rem), (100% - 4px) / 5), 1fr));
|
|
18285
|
+
}
|
|
18286
|
+
|
|
18287
|
+
.pa-kpi-edit__grid--max-6 {
|
|
18288
|
+
grid-template-columns: repeat(auto-fit, minmax(max(var(--pa-kpi-edit-cell-min, 14rem), (100% - 5px) / 6), 1fr));
|
|
18289
|
+
}
|
|
18290
|
+
|
|
18291
|
+
/* ----- Tile (editorial spacing leans on the 2.4rem padding) -------------
|
|
18292
|
+
Per-cell container: the value's `cqi`-based font-size scales with
|
|
18293
|
+
*this* tile's width, not the whole grid's. Keeps typography legible as
|
|
18294
|
+
the grid packs more cells into the same row. */
|
|
18072
18295
|
.pa-kpi-edit__tile {
|
|
18296
|
+
container-type: inline-size;
|
|
18073
18297
|
background: var(--pa-card-bg);
|
|
18074
18298
|
padding: 2.4rem 2rem;
|
|
18075
18299
|
display: flex;
|
|
@@ -18101,11 +18325,13 @@ code {
|
|
|
18101
18325
|
"monospace at low contrast".
|
|
18102
18326
|
- font-weight: 200 (extra-light). 300 was tested first but didn't read
|
|
18103
18327
|
distinctly enough as "light" against the body's 400 default.
|
|
18104
|
-
- clamp() lets the number shrink in narrow
|
|
18105
|
-
|
|
18328
|
+
- clamp() lets the number shrink in narrow cells without manual
|
|
18329
|
+
breakpoints. `cqi` measures per-cell (tile is a container) so the
|
|
18330
|
+
value tracks each cell's actual width as the grid packs more
|
|
18331
|
+
columns into a wider container. */
|
|
18106
18332
|
.pa-kpi-edit__value {
|
|
18107
18333
|
font-family: var(--base-font-family);
|
|
18108
|
-
font-size: clamp(3.2rem,
|
|
18334
|
+
font-size: clamp(3.2rem, 22cqi, 5.6rem);
|
|
18109
18335
|
font-weight: 200;
|
|
18110
18336
|
letter-spacing: -0.02em;
|
|
18111
18337
|
line-height: 1;
|
|
@@ -19062,3 +19288,314 @@ html.pa-font-base-12 {
|
|
|
19062
19288
|
.text-end {
|
|
19063
19289
|
text-align: end;
|
|
19064
19290
|
}
|
|
19291
|
+
|
|
19292
|
+
/* Pure Admin Visual Framework - Core Styles */
|
|
19293
|
+
:root,
|
|
19294
|
+
.pa-mode-light,
|
|
19295
|
+
.pa-mode-dark {
|
|
19296
|
+
--pa-text-strong: color-mix(in srgb, var(--pa-text-color-1) 85%, transparent);
|
|
19297
|
+
--pa-text-secondary: color-mix(in srgb, var(--pa-text-color-1) 70%, transparent);
|
|
19298
|
+
--pa-text-tertiary: color-mix(in srgb, var(--pa-text-color-1) 55%, transparent);
|
|
19299
|
+
--pa-surface-hover: color-mix(in srgb, var(--pa-text-color-1) 4%, transparent);
|
|
19300
|
+
--pa-surface-track: color-mix(in srgb, var(--pa-text-color-1) 12%, transparent);
|
|
19301
|
+
}
|
|
19302
|
+
|
|
19303
|
+
:root {
|
|
19304
|
+
--base-accent-color: #007bff;
|
|
19305
|
+
--base-accent-color-hover: rgb(51, 149.4, 255);
|
|
19306
|
+
--base-accent-color-active: rgb(102, 175.8, 255);
|
|
19307
|
+
--base-accent-color-light: rgba(0, 123, 255, 0.05);
|
|
19308
|
+
--base-accent-color-light-hover: rgba(0, 123, 255, 0.12);
|
|
19309
|
+
--base-text-color-1: #2c3e50;
|
|
19310
|
+
--base-text-color-2: #6c757d;
|
|
19311
|
+
--base-text-color-3: #7a8a99;
|
|
19312
|
+
--base-text-color-4: #a3b1bf;
|
|
19313
|
+
--base-text-color-on-accent: #ffffff;
|
|
19314
|
+
--base-main-bg: #ffffff;
|
|
19315
|
+
--base-page-bg: #f8f9fa;
|
|
19316
|
+
--base-subtle-bg: #e9ecef;
|
|
19317
|
+
--base-inverse-bg: #2c3e50;
|
|
19318
|
+
--base-overlay-bg: rgba(0, 0, 0, 0.5);
|
|
19319
|
+
--base-shadow-color: rgba(0, 0, 0, 0.15);
|
|
19320
|
+
--base-hover-bg: #e9ecef;
|
|
19321
|
+
--base-active-bg: rgb(218.2368421053, 223.25, 228.2631578947);
|
|
19322
|
+
--base-disabled-bg: #e9ecef;
|
|
19323
|
+
--base-elevated-bg: #f5f5f5;
|
|
19324
|
+
--base-surface-1: #ffffff;
|
|
19325
|
+
--base-surface-2: #f8f9fa;
|
|
19326
|
+
--base-surface-3: #e9ecef;
|
|
19327
|
+
--base-surface-inverse: #2c3e50;
|
|
19328
|
+
--base-primary-bg: #ffffff;
|
|
19329
|
+
--base-primary-bg-hover: rgb(242.25, 242.25, 242.25);
|
|
19330
|
+
--base-border-color: #e1e5e9;
|
|
19331
|
+
--base-border: 1px solid #e1e5e9;
|
|
19332
|
+
--base-input-bg: #ffffff;
|
|
19333
|
+
--base-input-color: #495057;
|
|
19334
|
+
--base-input-border: 1px solid #ced4da;
|
|
19335
|
+
--base-input-border-hover: 1px solid #b8bfc6;
|
|
19336
|
+
--base-input-border-focus: 1px solid #007bff;
|
|
19337
|
+
--base-input-placeholder-color: #a3b1bf;
|
|
19338
|
+
--base-input-bg-disabled: rgba(255, 255, 255, 0.5);
|
|
19339
|
+
--base-input-size-xs-height: 3.1;
|
|
19340
|
+
--base-input-size-sm-height: 3.3;
|
|
19341
|
+
--base-input-size-md-height: 3.5;
|
|
19342
|
+
--base-input-size-lg-height: 3.8;
|
|
19343
|
+
--base-input-size-xl-height: 4.1;
|
|
19344
|
+
--base-dropdown-bg: #ffffff;
|
|
19345
|
+
--base-dropdown-border: 1px solid #e1e5e9;
|
|
19346
|
+
--base-dropdown-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
|
|
19347
|
+
--base-tooltip-bg: #2c3e50;
|
|
19348
|
+
--base-tooltip-text-color: #ffffff;
|
|
19349
|
+
--base-success-color: #22c55e;
|
|
19350
|
+
--base-success-color-hover: rgb(26.4935064935, 153.5064935065, 73.2467532468);
|
|
19351
|
+
--base-success-bg-light: rgba(34, 197, 94, 0.1);
|
|
19352
|
+
--base-success-bg-subtle: rgba(34, 197, 94, 0.08);
|
|
19353
|
+
--base-success-border: rgba(34, 197, 94, 0.2);
|
|
19354
|
+
--base-success-text: #155724;
|
|
19355
|
+
--base-success-text-light: #d4edda;
|
|
19356
|
+
--base-text-on-success: #ffffff;
|
|
19357
|
+
--base-danger-color: #ef4444;
|
|
19358
|
+
--base-danger-color-hover: rgb(234.9802955665, 21.0197044335, 21.0197044335);
|
|
19359
|
+
--base-danger-bg-light: rgba(239, 68, 68, 0.1);
|
|
19360
|
+
--base-danger-bg-subtle: rgba(239, 68, 68, 0.08);
|
|
19361
|
+
--base-danger-border: rgba(239, 68, 68, 0.2);
|
|
19362
|
+
--base-danger-text: #721c24;
|
|
19363
|
+
--base-danger-text-light: #f8d7da;
|
|
19364
|
+
--base-text-on-danger: #ffffff;
|
|
19365
|
+
--base-warning-color: #f97316;
|
|
19366
|
+
--base-warning-color-hover: rgb(214.4769874477, 91.129707113, 5.5230125523);
|
|
19367
|
+
--base-warning-bg-light: rgba(249, 115, 22, 0.1);
|
|
19368
|
+
--base-warning-bg-subtle: rgba(249, 115, 22, 0.08);
|
|
19369
|
+
--base-warning-border: rgba(249, 115, 22, 0.2);
|
|
19370
|
+
--base-warning-text: #856404;
|
|
19371
|
+
--base-warning-text-light: #fff3cd;
|
|
19372
|
+
--base-text-on-warning: #212529;
|
|
19373
|
+
--base-info-color: #17a2b8;
|
|
19374
|
+
--base-info-color-hover: rgb(17.3333333333, 122.0869565217, 138.6666666667);
|
|
19375
|
+
--base-info-bg-light: rgba(23, 162, 184, 0.1);
|
|
19376
|
+
--base-info-bg-subtle: rgba(23, 162, 184, 0.08);
|
|
19377
|
+
--base-info-border: rgba(23, 162, 184, 0.2);
|
|
19378
|
+
--base-info-text: #0c5460;
|
|
19379
|
+
--base-info-text-light: #d1ecf1;
|
|
19380
|
+
--base-text-on-info: #ffffff;
|
|
19381
|
+
--base-hover-overlay: rgba(0, 0, 0, 0.04);
|
|
19382
|
+
--base-active-overlay: rgba(0, 0, 0, 0.08);
|
|
19383
|
+
--base-focus-ring-color: #007bff;
|
|
19384
|
+
--base-focus-ring-width: 3px;
|
|
19385
|
+
--base-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif;
|
|
19386
|
+
--base-font-family-mono: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
|
|
19387
|
+
--base-font-size-2xs: 1;
|
|
19388
|
+
--base-font-size-xs: 1.2;
|
|
19389
|
+
--base-font-size-sm: 1.4;
|
|
19390
|
+
--base-font-size-base: 1.6;
|
|
19391
|
+
--base-font-size-lg: 1.8;
|
|
19392
|
+
--base-font-size-xl: 2;
|
|
19393
|
+
--base-font-size-2xl: 2.4;
|
|
19394
|
+
--base-font-weight-normal: 400;
|
|
19395
|
+
--base-font-weight-medium: 500;
|
|
19396
|
+
--base-font-weight-semibold: 600;
|
|
19397
|
+
--base-font-weight-bold: 700;
|
|
19398
|
+
--base-line-height-tight: 1.25;
|
|
19399
|
+
--base-line-height-normal: 1.5;
|
|
19400
|
+
--base-line-height-relaxed: 1.75;
|
|
19401
|
+
--base-border-radius-sm: 0.4;
|
|
19402
|
+
--base-border-radius-md: 0.6;
|
|
19403
|
+
--base-border-radius-lg: 0.8;
|
|
19404
|
+
--pa-main-bg: #f8f9fa;
|
|
19405
|
+
--pa-page-bg: #f8f9fa;
|
|
19406
|
+
--pa-subtle-bg: #ffffff;
|
|
19407
|
+
--pa-text-color-1: #2c3e50;
|
|
19408
|
+
--pa-text-color-2: #6c757d;
|
|
19409
|
+
--pa-accent: #007bff;
|
|
19410
|
+
--pa-accent-hover: rgba(0, 123, 255, 0.12);
|
|
19411
|
+
--pa-accent-light: color-mix(in srgb, var(--pa-accent) 5%, transparent);
|
|
19412
|
+
--pa-link-color: var(--pa-accent);
|
|
19413
|
+
--pa-link-color-hover: color-mix(in srgb, var(--pa-link-color), currentColor 50%);
|
|
19414
|
+
--pa-link-color-visited: var(--pa-link-color);
|
|
19415
|
+
--pa-border-color: #e1e5e9;
|
|
19416
|
+
--pa-success: #22c55e;
|
|
19417
|
+
--pa-warning: #f97316;
|
|
19418
|
+
--pa-danger: #ef4444;
|
|
19419
|
+
--pa-info: #17a2b8;
|
|
19420
|
+
--pa-very-positive: #16a34a;
|
|
19421
|
+
--pa-positive: var(--pa-success);
|
|
19422
|
+
--pa-neutral: #9ca3af;
|
|
19423
|
+
--pa-negative: var(--pa-danger);
|
|
19424
|
+
--pa-very-negative: #dc2626;
|
|
19425
|
+
--pa-chart-trendline-height: 3rem;
|
|
19426
|
+
--pa-chart-trendline-stroke: 2.1;
|
|
19427
|
+
--pa-detail-bg: rgba(15, 17, 21, 0.97);
|
|
19428
|
+
--pa-detail-text: #ffffff;
|
|
19429
|
+
--pa-detail-row-label: rgba(255, 255, 255, 0.75);
|
|
19430
|
+
--pa-detail-title: rgba(255, 255, 255, 0.55);
|
|
19431
|
+
--pa-detail-shadow: 0 1.4rem 3.6rem rgba(0, 0, 0, 0.55);
|
|
19432
|
+
--pa-header-bg: #ffffff;
|
|
19433
|
+
--pa-header-border-color: #e1e5e9;
|
|
19434
|
+
--pa-header-text: #2c3e50;
|
|
19435
|
+
--pa-header-text-secondary: #6c757d;
|
|
19436
|
+
--pa-header-profile-name-color: #2c3e50;
|
|
19437
|
+
--pa-sidebar-bg: #f8f9fa;
|
|
19438
|
+
--pa-sidebar-text: #2c3e50;
|
|
19439
|
+
--pa-sidebar-text-secondary: #6c757d;
|
|
19440
|
+
--pa-sidebar-submenu-bg: #e9ecef;
|
|
19441
|
+
--pa-sidebar-submenu-hover-bg: rgb(218.2368421053, 223.25, 228.2631578947);
|
|
19442
|
+
--pa-sidebar-submenu-active-bg: rgb(203.4736842105, 210.5, 217.5263157895);
|
|
19443
|
+
--pa-sidebar-submenu-active-text: #2c3e50;
|
|
19444
|
+
--pa-footer-bg: #ffffff;
|
|
19445
|
+
--pa-footer-border-color: #e1e5e9;
|
|
19446
|
+
--pa-btn-primary-bg: #007bff;
|
|
19447
|
+
--pa-btn-primary-bg-hover: rgb(51, 149.4, 255);
|
|
19448
|
+
--pa-btn-primary-bg-light: color-mix(in srgb, var(--pa-btn-primary-bg) 5%, transparent);
|
|
19449
|
+
--pa-btn-primary-text: #ffffff;
|
|
19450
|
+
--pa-btn-secondary-bg: #6c757d;
|
|
19451
|
+
--pa-btn-secondary-bg-hover: #545b62;
|
|
19452
|
+
--pa-btn-secondary-text: #ffffff;
|
|
19453
|
+
--pa-btn-secondary-outline-color: var(--pa-btn-secondary-bg);
|
|
19454
|
+
--pa-btn-success-bg: var(--pa-success);
|
|
19455
|
+
--pa-btn-success-bg-hover: rgb(26.4935064935, 153.5064935065, 73.2467532468);
|
|
19456
|
+
--pa-btn-success-text: #ffffff;
|
|
19457
|
+
--pa-btn-danger-bg: var(--pa-danger);
|
|
19458
|
+
--pa-btn-danger-bg-hover: rgb(234.9802955665, 21.0197044335, 21.0197044335);
|
|
19459
|
+
--pa-btn-danger-text: #ffffff;
|
|
19460
|
+
--pa-btn-warning-bg: var(--pa-warning);
|
|
19461
|
+
--pa-btn-warning-bg-hover: rgb(214.4769874477, 91.129707113, 5.5230125523);
|
|
19462
|
+
--pa-btn-warning-text: #212529;
|
|
19463
|
+
--pa-btn-info-bg: var(--pa-info);
|
|
19464
|
+
--pa-btn-info-bg-hover: rgb(17.3333333333, 122.0869565217, 138.6666666667);
|
|
19465
|
+
--pa-btn-info-text: #ffffff;
|
|
19466
|
+
--pa-btn-light-bg: #f8f9fa;
|
|
19467
|
+
--pa-btn-light-bg-hover: #e9ecef;
|
|
19468
|
+
--pa-btn-light-text: #2c3e50;
|
|
19469
|
+
--pa-btn-dark-bg: #343a40;
|
|
19470
|
+
--pa-btn-dark-bg-hover: #1d2124;
|
|
19471
|
+
--pa-btn-dark-text: #ffffff;
|
|
19472
|
+
--pa-success-bg: var(--pa-success);
|
|
19473
|
+
--pa-success-bg-hover: rgb(26.4935064935, 153.5064935065, 73.2467532468);
|
|
19474
|
+
--pa-success-bg-light: color-mix(in srgb, var(--pa-success) 10%, transparent);
|
|
19475
|
+
--pa-success-bg-subtle: color-mix(in srgb, var(--pa-success) 8%, transparent);
|
|
19476
|
+
--pa-success-border: color-mix(in srgb, var(--pa-success) 20%, transparent);
|
|
19477
|
+
--pa-success-text: #155724;
|
|
19478
|
+
--pa-success-text-light: #d4edda;
|
|
19479
|
+
--pa-danger-bg: var(--pa-danger);
|
|
19480
|
+
--pa-danger-bg-hover: rgb(234.9802955665, 21.0197044335, 21.0197044335);
|
|
19481
|
+
--pa-danger-bg-light: color-mix(in srgb, var(--pa-danger) 10%, transparent);
|
|
19482
|
+
--pa-danger-bg-subtle: color-mix(in srgb, var(--pa-danger) 8%, transparent);
|
|
19483
|
+
--pa-danger-border: color-mix(in srgb, var(--pa-danger) 20%, transparent);
|
|
19484
|
+
--pa-danger-text: #721c24;
|
|
19485
|
+
--pa-danger-text-light: #f8d7da;
|
|
19486
|
+
--pa-warning-bg: var(--pa-warning);
|
|
19487
|
+
--pa-warning-bg-hover: rgb(214.4769874477, 91.129707113, 5.5230125523);
|
|
19488
|
+
--pa-warning-bg-light: color-mix(in srgb, var(--pa-warning) 10%, transparent);
|
|
19489
|
+
--pa-warning-bg-subtle: color-mix(in srgb, var(--pa-warning) 8%, transparent);
|
|
19490
|
+
--pa-warning-border: color-mix(in srgb, var(--pa-warning) 20%, transparent);
|
|
19491
|
+
--pa-warning-text: #856404;
|
|
19492
|
+
--pa-warning-text-light: #fff3cd;
|
|
19493
|
+
--pa-info-bg: var(--pa-info);
|
|
19494
|
+
--pa-info-bg-hover: rgb(17.3333333333, 122.0869565217, 138.6666666667);
|
|
19495
|
+
--pa-info-bg-light: color-mix(in srgb, var(--pa-info) 10%, transparent);
|
|
19496
|
+
--pa-info-bg-subtle: color-mix(in srgb, var(--pa-info) 8%, transparent);
|
|
19497
|
+
--pa-info-border: color-mix(in srgb, var(--pa-info) 20%, transparent);
|
|
19498
|
+
--pa-info-text: #0c5460;
|
|
19499
|
+
--pa-info-text-light: #d1ecf1;
|
|
19500
|
+
--pa-card-bg: #ffffff;
|
|
19501
|
+
--pa-card-header-bg: #f8f9fa;
|
|
19502
|
+
--pa-card-footer-bg: #ffffff;
|
|
19503
|
+
--pa-card-tabs-bg: #f8f9fa;
|
|
19504
|
+
--pa-input-bg: #ffffff;
|
|
19505
|
+
--pa-input-border: #ced4da;
|
|
19506
|
+
--pa-input-text: #495057;
|
|
19507
|
+
--pa-input-focus-border-color: #007bff;
|
|
19508
|
+
--pa-select-focus-border-color: #007bff;
|
|
19509
|
+
--pa-textarea-focus-border-color: #007bff;
|
|
19510
|
+
--pa-checkbox-border-color: #e1e5e9;
|
|
19511
|
+
--pa-checkbox-border-color-hover: #007bff;
|
|
19512
|
+
--pa-checkbox-border-color-checked: #007bff;
|
|
19513
|
+
--pa-checkbox-bg: #ffffff;
|
|
19514
|
+
--pa-checkbox-bg-checked: #007bff;
|
|
19515
|
+
--pa-checkbox-bg-indeterminate: #007bff;
|
|
19516
|
+
--pa-checkbox-checkmark-color: white;
|
|
19517
|
+
--pa-checkbox-focus-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
|
|
19518
|
+
--pa-input-group-prepend-bg: #6c757d;
|
|
19519
|
+
--pa-input-group-prepend-text: #6c757d;
|
|
19520
|
+
--pa-input-group-append-bg: #6c757d;
|
|
19521
|
+
--pa-input-group-append-text: #6c757d;
|
|
19522
|
+
--pa-table-bg: #ffffff;
|
|
19523
|
+
--pa-table-header-bg: #f8f9fa;
|
|
19524
|
+
--pa-table-stripe: #f8f9fa;
|
|
19525
|
+
--pa-table-hover-bg: #f8f9fa;
|
|
19526
|
+
--pa-table-hover-accent-color: #007bff;
|
|
19527
|
+
--pa-modal-overlay-bg: rgba(0, 0, 0, 0.5);
|
|
19528
|
+
--pa-modal-content-bg: #ffffff;
|
|
19529
|
+
--pa-badge-success-bg: #d4edda;
|
|
19530
|
+
--pa-badge-success-text: #155724;
|
|
19531
|
+
--pa-badge-warning-bg: #fff3cd;
|
|
19532
|
+
--pa-badge-warning-text: #856404;
|
|
19533
|
+
--pa-badge-info-bg: #d1ecf1;
|
|
19534
|
+
--pa-badge-info-text: #0c5460;
|
|
19535
|
+
--pa-badge-danger-bg: #f8d7da;
|
|
19536
|
+
--pa-badge-danger-text: #721c24;
|
|
19537
|
+
--pa-composite-badge-icon-bg: #6c757d;
|
|
19538
|
+
--pa-composite-badge-label-bg: #e9ecef;
|
|
19539
|
+
--pa-composite-badge-label-text: #2c3e50;
|
|
19540
|
+
--pa-composite-badge-label-hover-bg: #e9ecef;
|
|
19541
|
+
--pa-tooltip-bg: #2c3e50;
|
|
19542
|
+
--pa-tooltip-text: #ffffff;
|
|
19543
|
+
--pa-popover-content-bg: #ffffff;
|
|
19544
|
+
--pa-popover-text-light: #ffffff;
|
|
19545
|
+
--pa-popover-text-dark: #000000;
|
|
19546
|
+
--pa-loader-overlay-bg: rgba(255, 255, 255, 0.8);
|
|
19547
|
+
--pa-profile-overlay-bg: rgba(0, 0, 0, 0.3);
|
|
19548
|
+
--pa-detail-panel-overlay-bg: rgba(0, 0, 0, 0.3);
|
|
19549
|
+
--pa-detail-panel-selected-bg: rgba(0, 123, 255, 0.08);
|
|
19550
|
+
--pa-detail-panel-z-index: 4500;
|
|
19551
|
+
--pa-command-palette-backdrop-bg: rgba(0, 0, 0, 0.5);
|
|
19552
|
+
--pa-command-palette-item-hover-bg: rgba(0, 123, 255, 0.05);
|
|
19553
|
+
--pa-command-palette-item-active-bg: rgba(0, 123, 255, 0.1);
|
|
19554
|
+
--pa-command-palette-highlight-bg: rgba(0, 123, 255, 0.2);
|
|
19555
|
+
--pa-command-palette-highlight-text: #007bff;
|
|
19556
|
+
--pa-command-palette-key-bg: #ffffff;
|
|
19557
|
+
--pa-command-palette-key-text: #2c3e50;
|
|
19558
|
+
--pa-command-palette-key-font-size: 1.2rem;
|
|
19559
|
+
--pa-command-palette-key-font-weight: 600;
|
|
19560
|
+
--pa-multiselect-dropdown-bg: #ffffff;
|
|
19561
|
+
--pa-multiselect-dropdown-border: #e1e5e9;
|
|
19562
|
+
--pa-multiselect-dropdown-text: #2c3e50;
|
|
19563
|
+
--pa-multiselect-hint-bg: #f8f9fa;
|
|
19564
|
+
--pa-multiselect-hint-border: #e1e5e9;
|
|
19565
|
+
--pa-multiselect-option-hover-bg: #f8f9fa;
|
|
19566
|
+
--pa-multiselect-pill-bg: rgba(0, 123, 255, 0.05);
|
|
19567
|
+
--pa-multiselect-pill-border: #007bff;
|
|
19568
|
+
--pa-color-1: transparent;
|
|
19569
|
+
--pa-color-2: transparent;
|
|
19570
|
+
--pa-color-3: transparent;
|
|
19571
|
+
--pa-color-4: transparent;
|
|
19572
|
+
--pa-color-5: transparent;
|
|
19573
|
+
--pa-color-6: transparent;
|
|
19574
|
+
--pa-color-7: transparent;
|
|
19575
|
+
--pa-color-8: transparent;
|
|
19576
|
+
--pa-color-9: transparent;
|
|
19577
|
+
--pa-color-1-text: #ffffff;
|
|
19578
|
+
--pa-color-2-text: #ffffff;
|
|
19579
|
+
--pa-color-3-text: #ffffff;
|
|
19580
|
+
--pa-color-4-text: #ffffff;
|
|
19581
|
+
--pa-color-5-text: #ffffff;
|
|
19582
|
+
--pa-color-6-text: #ffffff;
|
|
19583
|
+
--pa-color-7-text: #ffffff;
|
|
19584
|
+
--pa-color-8-text: #ffffff;
|
|
19585
|
+
--pa-color-9-text: #ffffff;
|
|
19586
|
+
--pa-border-radius-sm: 2px;
|
|
19587
|
+
--pa-border-radius: 4px;
|
|
19588
|
+
--pa-border-radius-lg: 8px;
|
|
19589
|
+
--pa-alert-success-text: color-mix(in srgb, var(--pa-success-bg) 60%, black);
|
|
19590
|
+
--pa-alert-success-bg: color-mix(in srgb, var(--pa-success-bg) 15%, transparent);
|
|
19591
|
+
--pa-alert-success-border: color-mix(in srgb, var(--pa-success-bg) 30%, transparent);
|
|
19592
|
+
--pa-alert-danger-text: color-mix(in srgb, var(--pa-danger-bg) 60%, black);
|
|
19593
|
+
--pa-alert-danger-bg: color-mix(in srgb, var(--pa-danger-bg) 15%, transparent);
|
|
19594
|
+
--pa-alert-danger-border: color-mix(in srgb, var(--pa-danger-bg) 30%, transparent);
|
|
19595
|
+
--pa-alert-warning-text: color-mix(in srgb, var(--pa-warning-bg) 60%, black);
|
|
19596
|
+
--pa-alert-warning-bg: color-mix(in srgb, var(--pa-warning-bg) 15%, transparent);
|
|
19597
|
+
--pa-alert-warning-border: color-mix(in srgb, var(--pa-warning-bg) 30%, transparent);
|
|
19598
|
+
--pa-alert-info-text: color-mix(in srgb, var(--pa-info-bg) 60%, black);
|
|
19599
|
+
--pa-alert-info-bg: color-mix(in srgb, var(--pa-info-bg) 15%, transparent);
|
|
19600
|
+
--pa-alert-info-border: color-mix(in srgb, var(--pa-info-bg) 30%, transparent);
|
|
19601
|
+
}
|