@orianatech/pire 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.
- package/LICENSE +202 -0
- package/NOTICE +7 -0
- package/README.md +114 -0
- package/dist/components/core/Avatar.d.cts +11 -0
- package/dist/components/core/Avatar.d.ts +12 -0
- package/dist/components/core/Avatar.d.ts.map +1 -0
- package/dist/components/core/Badge.d.cts +9 -0
- package/dist/components/core/Badge.d.ts +10 -0
- package/dist/components/core/Badge.d.ts.map +1 -0
- package/dist/components/core/Button.d.cts +17 -0
- package/dist/components/core/Button.d.ts +18 -0
- package/dist/components/core/Button.d.ts.map +1 -0
- package/dist/components/core/Card.d.cts +13 -0
- package/dist/components/core/Card.d.ts +14 -0
- package/dist/components/core/Card.d.ts.map +1 -0
- package/dist/components/core/Icon.d.cts +22 -0
- package/dist/components/core/Icon.d.ts +23 -0
- package/dist/components/core/Icon.d.ts.map +1 -0
- package/dist/components/core/IconButton.d.cts +15 -0
- package/dist/components/core/IconButton.d.ts +16 -0
- package/dist/components/core/IconButton.d.ts.map +1 -0
- package/dist/components/core/SegmentedControl.d.cts +23 -0
- package/dist/components/core/SegmentedControl.d.ts +24 -0
- package/dist/components/core/SegmentedControl.d.ts.map +1 -0
- package/dist/components/core/Tag.d.cts +8 -0
- package/dist/components/core/Tag.d.ts +9 -0
- package/dist/components/core/Tag.d.ts.map +1 -0
- package/dist/components/data/DataTable.d.cts +40 -0
- package/dist/components/data/DataTable.d.ts +41 -0
- package/dist/components/data/DataTable.d.ts.map +1 -0
- package/dist/components/data/DescriptionList.d.cts +21 -0
- package/dist/components/data/DescriptionList.d.ts +22 -0
- package/dist/components/data/DescriptionList.d.ts.map +1 -0
- package/dist/components/data/FilterBar.d.cts +19 -0
- package/dist/components/data/FilterBar.d.ts +20 -0
- package/dist/components/data/FilterBar.d.ts.map +1 -0
- package/dist/components/data/KpiTile.d.cts +23 -0
- package/dist/components/data/KpiTile.d.ts +24 -0
- package/dist/components/data/KpiTile.d.ts.map +1 -0
- package/dist/components/data/LinkList.d.cts +18 -0
- package/dist/components/data/LinkList.d.ts +19 -0
- package/dist/components/data/LinkList.d.ts.map +1 -0
- package/dist/components/data/ObjectHeader.d.cts +21 -0
- package/dist/components/data/ObjectHeader.d.ts +22 -0
- package/dist/components/data/ObjectHeader.d.ts.map +1 -0
- package/dist/components/data/Timeline.d.cts +16 -0
- package/dist/components/data/Timeline.d.ts +17 -0
- package/dist/components/data/Timeline.d.ts.map +1 -0
- package/dist/components/feedback/Dialog.d.cts +21 -0
- package/dist/components/feedback/Dialog.d.ts +22 -0
- package/dist/components/feedback/Dialog.d.ts.map +1 -0
- package/dist/components/feedback/InlineMessage.d.cts +13 -0
- package/dist/components/feedback/InlineMessage.d.ts +14 -0
- package/dist/components/feedback/InlineMessage.d.ts.map +1 -0
- package/dist/components/feedback/ProgressBar.d.cts +16 -0
- package/dist/components/feedback/ProgressBar.d.ts +17 -0
- package/dist/components/feedback/ProgressBar.d.ts.map +1 -0
- package/dist/components/feedback/Toast.d.cts +28 -0
- package/dist/components/feedback/Toast.d.ts +29 -0
- package/dist/components/feedback/Toast.d.ts.map +1 -0
- package/dist/components/feedback/Tooltip.d.cts +11 -0
- package/dist/components/feedback/Tooltip.d.ts +12 -0
- package/dist/components/feedback/Tooltip.d.ts.map +1 -0
- package/dist/components/forms/Checkbox.d.cts +9 -0
- package/dist/components/forms/Checkbox.d.ts +10 -0
- package/dist/components/forms/Checkbox.d.ts.map +1 -0
- package/dist/components/forms/ComboBox.d.cts +45 -0
- package/dist/components/forms/ComboBox.d.ts +46 -0
- package/dist/components/forms/ComboBox.d.ts.map +1 -0
- package/dist/components/forms/DatePicker.d.cts +27 -0
- package/dist/components/forms/DatePicker.d.ts +28 -0
- package/dist/components/forms/DatePicker.d.ts.map +1 -0
- package/dist/components/forms/FormField.d.cts +17 -0
- package/dist/components/forms/FormField.d.ts +18 -0
- package/dist/components/forms/FormField.d.ts.map +1 -0
- package/dist/components/forms/Input.d.cts +33 -0
- package/dist/components/forms/Input.d.ts +34 -0
- package/dist/components/forms/Input.d.ts.map +1 -0
- package/dist/components/forms/NumberField.d.cts +33 -0
- package/dist/components/forms/NumberField.d.ts +34 -0
- package/dist/components/forms/NumberField.d.ts.map +1 -0
- package/dist/components/forms/Radio.d.cts +18 -0
- package/dist/components/forms/Radio.d.ts +19 -0
- package/dist/components/forms/Radio.d.ts.map +1 -0
- package/dist/components/forms/Select.d.cts +28 -0
- package/dist/components/forms/Select.d.ts +29 -0
- package/dist/components/forms/Select.d.ts.map +1 -0
- package/dist/components/forms/Switch.d.cts +9 -0
- package/dist/components/forms/Switch.d.ts +10 -0
- package/dist/components/forms/Switch.d.ts.map +1 -0
- package/dist/components/forms/ValueHelpField.d.cts +31 -0
- package/dist/components/forms/ValueHelpField.d.ts +32 -0
- package/dist/components/forms/ValueHelpField.d.ts.map +1 -0
- package/dist/components/layout/FooterBar.d.cts +10 -0
- package/dist/components/layout/FooterBar.d.ts +11 -0
- package/dist/components/layout/FooterBar.d.ts.map +1 -0
- package/dist/components/layout/PageHeader.d.cts +10 -0
- package/dist/components/layout/PageHeader.d.ts +11 -0
- package/dist/components/layout/PageHeader.d.ts.map +1 -0
- package/dist/components/layout/SectionHeader.d.cts +11 -0
- package/dist/components/layout/SectionHeader.d.ts +12 -0
- package/dist/components/layout/SectionHeader.d.ts.map +1 -0
- package/dist/components/layout/SelectionBar.d.cts +14 -0
- package/dist/components/layout/SelectionBar.d.ts +15 -0
- package/dist/components/layout/SelectionBar.d.ts.map +1 -0
- package/dist/components/navigation/Breadcrumb.d.cts +14 -0
- package/dist/components/navigation/Breadcrumb.d.ts +15 -0
- package/dist/components/navigation/Breadcrumb.d.ts.map +1 -0
- package/dist/components/navigation/Pagination.d.cts +13 -0
- package/dist/components/navigation/Pagination.d.ts +14 -0
- package/dist/components/navigation/Pagination.d.ts.map +1 -0
- package/dist/components/navigation/ShellBar.d.cts +17 -0
- package/dist/components/navigation/ShellBar.d.ts +18 -0
- package/dist/components/navigation/ShellBar.d.ts.map +1 -0
- package/dist/components/navigation/SideNav.d.cts +22 -0
- package/dist/components/navigation/SideNav.d.ts +23 -0
- package/dist/components/navigation/SideNav.d.ts.map +1 -0
- package/dist/components/navigation/Tabs.d.cts +23 -0
- package/dist/components/navigation/Tabs.d.ts +24 -0
- package/dist/components/navigation/Tabs.d.ts.map +1 -0
- package/dist/components/patterns/ConfirmDialog.d.cts +21 -0
- package/dist/components/patterns/ConfirmDialog.d.ts +22 -0
- package/dist/components/patterns/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/patterns/EmptyState.d.cts +13 -0
- package/dist/components/patterns/EmptyState.d.ts +14 -0
- package/dist/components/patterns/EmptyState.d.ts.map +1 -0
- package/dist/components/patterns/SidePanel.d.cts +14 -0
- package/dist/components/patterns/SidePanel.d.ts +15 -0
- package/dist/components/patterns/SidePanel.d.ts.map +1 -0
- package/dist/components/patterns/ValueHelpDialog.d.cts +20 -0
- package/dist/components/patterns/ValueHelpDialog.d.ts +21 -0
- package/dist/components/patterns/ValueHelpDialog.d.ts.map +1 -0
- package/dist/components/utils/cx.d.cts +2 -0
- package/dist/components/utils/cx.d.ts +3 -0
- package/dist/components/utils/cx.d.ts.map +1 -0
- package/dist/components.css +352 -0
- package/dist/index.cjs +1590 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +46 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1560 -0
- package/dist/index.js.map +1 -0
- package/dist/pire.css +11 -0
- package/dist/tokens/base.css +18 -0
- package/dist/tokens/colors.css +53 -0
- package/dist/tokens/elevation.css +21 -0
- package/dist/tokens/fonts.css +15 -0
- package/dist/tokens/motion.css +13 -0
- package/dist/tokens/spacing.css +18 -0
- package/dist/tokens/themes.css +23 -0
- package/dist/tokens/typography.css +39 -0
- package/dist/tokens.css +8 -0
- package/package.json +99 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/* Pire components — class contract.
|
|
2
|
+
Interactive state comes from React Aria data attributes ([data-hovered], [data-pressed],
|
|
3
|
+
[data-focus-visible], [data-selected], [data-disabled]), never from :hover alone, so touch
|
|
4
|
+
and keyboard behave identically. Every value is a token. */
|
|
5
|
+
|
|
6
|
+
/* ---- focus ---------------------------------------------------------- */
|
|
7
|
+
.pire [data-focus-visible],.pire[data-focus-visible],.pire-focusable[data-focus-visible]{outline:var(--focus-w) solid var(--focus-color);outline-offset:var(--focus-offset)}
|
|
8
|
+
|
|
9
|
+
/* ---- Button --------------------------------------------------------- */
|
|
10
|
+
.pire-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);height:var(--control-h-md);padding:0 var(--control-pad-x);font:var(--type-body-strong);letter-spacing:var(--ls-body);border-radius:var(--radius-1);border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:var(--transition-control);appearance:none}
|
|
11
|
+
.pire-btn[data-size="sm"]{height:var(--control-h-sm)}
|
|
12
|
+
.pire-btn[data-size="lg"]{height:var(--control-h-lg);padding:0 var(--control-pad-x-lg)}
|
|
13
|
+
.pire-btn[data-full-width="true"]{width:100%}
|
|
14
|
+
.pire-btn[data-variant="primary"]{background:var(--accent-bg);color:var(--accent-fg);border-color:var(--accent-bg)}
|
|
15
|
+
.pire-btn[data-variant="primary"][data-hovered]{background:var(--accent-bg-hover);border-color:var(--accent-bg-hover)}
|
|
16
|
+
.pire-btn[data-variant="primary"][data-pressed]{background:var(--accent-bg-active);border-color:var(--accent-bg-active)}
|
|
17
|
+
.pire-btn[data-variant="secondary"]{background:var(--surface-card);color:var(--accent-subtle-fg);border-color:var(--accent-bg)}
|
|
18
|
+
.pire-btn[data-variant="secondary"][data-hovered]{background:var(--accent-subtle-bg)}
|
|
19
|
+
.pire-btn[data-variant="secondary"][data-pressed]{background:var(--blue-20)}
|
|
20
|
+
.pire-btn[data-variant="tertiary"]{background:transparent;color:var(--text-link)}
|
|
21
|
+
.pire-btn[data-variant="tertiary"][data-hovered]{background:var(--surface-hover)}
|
|
22
|
+
.pire-btn[data-variant="tertiary"][data-pressed]{background:var(--surface-active)}
|
|
23
|
+
.pire-btn[data-variant="danger"]{background:var(--danger-bg);color:var(--accent-fg);border-color:var(--danger-bg)}
|
|
24
|
+
.pire-btn[data-variant="danger"][data-hovered]{background:var(--danger-bg-hover);border-color:var(--danger-bg-hover)}
|
|
25
|
+
.pire-btn[data-variant="emphasized"]{background:var(--surface-shell);color:var(--accent-fg);border-color:var(--surface-shell)}
|
|
26
|
+
.pire-btn[data-variant="emphasized"][data-hovered]{background:var(--blue-80);border-color:var(--blue-80)}
|
|
27
|
+
.pire-btn[data-disabled]{background:var(--surface-disabled);color:var(--text-disabled);border-color:var(--border-subtle);cursor:not-allowed}
|
|
28
|
+
|
|
29
|
+
/* ---- IconButton ------------------------------------------------------ */
|
|
30
|
+
.pire-iconbtn{display:inline-flex;align-items:center;justify-content:center;width:var(--control-h-md);height:var(--control-h-md);border:1px solid transparent;border-radius:var(--radius-1);background:transparent;color:var(--text-secondary);cursor:pointer;transition:var(--transition-control)}
|
|
31
|
+
.pire-iconbtn[data-size="sm"]{width:var(--control-h-sm);height:var(--control-h-sm)}
|
|
32
|
+
.pire-iconbtn[data-size="lg"]{width:var(--control-h-lg);height:var(--control-h-lg)}
|
|
33
|
+
.pire-iconbtn[data-hovered]{background:var(--surface-hover);color:var(--text-primary)}
|
|
34
|
+
.pire-iconbtn[data-selected="true"]{background:var(--surface-selected);color:var(--accent-subtle-fg)}
|
|
35
|
+
.pire-iconbtn[data-variant="outlined"]{border-color:var(--border-field);background:var(--surface-card)}
|
|
36
|
+
.pire-iconbtn[data-variant="inverse"]{color:var(--text-inverse)}
|
|
37
|
+
.pire-iconbtn[data-variant="inverse"][data-hovered]{background:var(--surface-shell-hover);color:var(--text-inverse)}
|
|
38
|
+
.pire-iconbtn[data-disabled]{color:var(--text-disabled);cursor:not-allowed;background:transparent}
|
|
39
|
+
|
|
40
|
+
/* ---- Badge / Tag ----------------------------------------------------- */
|
|
41
|
+
.pire-badge{display:inline-flex;align-items:center;gap:var(--sp-1);height:20px;padding:0 var(--sp-2);border-radius:var(--radius-1);font:var(--type-label);white-space:nowrap;border:1px solid transparent}
|
|
42
|
+
.pire-badge[data-status="positive"]{background:var(--status-positive-bg);color:var(--status-positive-fg);border-color:var(--status-positive-border)}
|
|
43
|
+
.pire-badge[data-status="critical"]{background:var(--status-critical-bg);color:var(--status-critical-fg);border-color:var(--status-critical-border)}
|
|
44
|
+
.pire-badge[data-status="negative"]{background:var(--status-negative-bg);color:var(--status-negative-fg);border-color:var(--status-negative-border)}
|
|
45
|
+
.pire-badge[data-status="informative"]{background:var(--status-informative-bg);color:var(--status-informative-fg);border-color:var(--status-informative-border)}
|
|
46
|
+
.pire-badge[data-status="neutral"]{background:var(--status-neutral-bg);color:var(--status-neutral-fg);border-color:var(--status-neutral-border)}
|
|
47
|
+
.pire-tag{display:inline-flex;align-items:center;gap:var(--sp-1);height:24px;padding:0 var(--sp-1) 0 var(--sp-2);border:1px solid var(--border-default);border-radius:var(--radius-1);background:var(--surface-sunken);color:var(--text-primary);font:var(--type-caption);white-space:nowrap}
|
|
48
|
+
.pire-tag[data-disabled]{color:var(--text-disabled);background:var(--surface-disabled)}
|
|
49
|
+
.pire-tag-remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:0;border-radius:var(--radius-1);background:transparent;color:var(--text-secondary);cursor:pointer}
|
|
50
|
+
.pire-tag-remove[data-hovered]{background:var(--surface-active);color:var(--text-primary)}
|
|
51
|
+
|
|
52
|
+
/* ---- Card ------------------------------------------------------------ */
|
|
53
|
+
.pire-card{display:flex;flex-direction:column;background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-2);box-shadow:var(--shadow-1);transition:var(--transition-surface)}
|
|
54
|
+
.pire-card[data-interactive="true"]{cursor:pointer}
|
|
55
|
+
.pire-card[data-interactive="true"]:hover{box-shadow:var(--shadow-2)}
|
|
56
|
+
.pire-card-head{display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-4);border-bottom:1px solid var(--border-subtle)}
|
|
57
|
+
.pire-card-title{font:var(--type-h4);letter-spacing:var(--ls-heading)}
|
|
58
|
+
.pire-card-sub{font:var(--type-caption);color:var(--text-secondary)}
|
|
59
|
+
.pire-card-body{padding:var(--sp-4);flex:1}
|
|
60
|
+
.pire-card-foot{display:flex;justify-content:flex-end;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border-subtle)}
|
|
61
|
+
|
|
62
|
+
/* ---- Field shell (Input, Select, ComboBox) --------------------------- */
|
|
63
|
+
.pire-field{display:flex;flex-direction:column;gap:var(--sp-1)}
|
|
64
|
+
.pire-field-label{font:var(--type-label);color:var(--text-label)}
|
|
65
|
+
.pire-field-req{color:var(--status-negative-fg);margin-left:var(--sp-0h)}
|
|
66
|
+
.pire-field-hint{font:var(--type-caption);color:var(--text-secondary)}
|
|
67
|
+
.pire-field-error{display:flex;align-items:center;gap:var(--sp-1);font:var(--type-caption);color:var(--status-negative-fg)}
|
|
68
|
+
.pire-field[data-layout="horizontal"]{display:grid;grid-template-columns:160px 1fr;column-gap:var(--sp-4);align-items:center}
|
|
69
|
+
.pire-field[data-layout="horizontal"] .pire-field-label{text-align:right}
|
|
70
|
+
.pire-field[data-layout="horizontal"] .pire-field-hint,.pire-field[data-layout="horizontal"] .pire-field-error{grid-column:2}
|
|
71
|
+
|
|
72
|
+
.pire-control{display:inline-flex;align-items:center;gap:var(--sp-2);height:var(--control-h-md);width:100%;padding:0 var(--control-pad-x);background:var(--surface-card);color:var(--text-primary);border:1px solid var(--border-field);border-radius:var(--radius-1);transition:var(--transition-control)}
|
|
73
|
+
.pire-control[data-size="sm"]{height:var(--control-h-sm)}
|
|
74
|
+
.pire-control[data-size="lg"]{height:var(--control-h-lg)}
|
|
75
|
+
.pire-control[data-full-width="false"]{width:auto}
|
|
76
|
+
.pire-control[data-hovered]{border-color:var(--border-strong)}
|
|
77
|
+
.pire-control[data-focus-within]{outline:var(--focus-w) solid var(--focus-color);outline-offset:var(--focus-offset)}
|
|
78
|
+
/* The shell above owns the focus ring for the whole control, so nested focusables must not
|
|
79
|
+
paint a second one. base.css gives every input/button/[tabindex] a :focus-visible outline at
|
|
80
|
+
specificity (0,1,1), which outranks the plain .pire-input/.pire-datesegment `outline:none`
|
|
81
|
+
(0,1,0) regardless of import order — hence the class+pseudo-class selector here.
|
|
82
|
+
The descendant combinator deliberately excludes .pire-control itself: on Select the control
|
|
83
|
+
IS the focusable button and must keep its own ring. */
|
|
84
|
+
.pire-control :focus-visible{outline:none}
|
|
85
|
+
.pire-control[data-invalid="true"]{border-color:var(--status-negative-fg);border-bottom-width:2px}
|
|
86
|
+
.pire-control[data-disabled]{background:var(--surface-disabled);color:var(--text-disabled);cursor:not-allowed}
|
|
87
|
+
.pire-control[data-readonly="true"]{background:var(--surface-sunken)}
|
|
88
|
+
.pire-input{flex:1;min-width:0;border:0;outline:none;background:transparent;color:inherit;font:var(--type-body)}
|
|
89
|
+
.pire-input[data-numeric="true"]{font:var(--type-numeric);text-align:right;font-variant-numeric:tabular-nums}
|
|
90
|
+
.pire-input::placeholder{color:var(--text-tertiary)}
|
|
91
|
+
.pire-affix{font:var(--type-caption);color:var(--text-secondary);flex:0 0 auto}
|
|
92
|
+
.pire-leading-icon{color:var(--text-tertiary);flex:0 0 auto}
|
|
93
|
+
|
|
94
|
+
/* ---- Select / ListBox popover ---------------------------------------- */
|
|
95
|
+
.pire-select-value{flex:1;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--type-body)}
|
|
96
|
+
.pire-select-value[data-placeholder]{color:var(--text-tertiary)}
|
|
97
|
+
/* The viewport clamp is load-bearing, not cosmetic. Sized to its trigger alone, a
|
|
98
|
+
full-bleed trigger makes the popover exactly the viewport width, while React Aria
|
|
99
|
+
positions it no closer than 12px to either edge (`useOverlayPosition`'s default
|
|
100
|
+
`containerPadding`) — so it starts at left:12 and ends 12px past the right edge,
|
|
101
|
+
giving every Popover-backed overlay (ComboBox, Select, DatePicker, Menu) a horizontal
|
|
102
|
+
scrollbar, worst on narrow viewports.
|
|
103
|
+
Both bounds are needed: CSS resolves min-width *after* max-width, so a bare
|
|
104
|
+
`max-width` would be ignored whenever `--trigger-width` exceeded it. The min-width is
|
|
105
|
+
therefore clamped at source, and the max-width caps content-driven growth as well. */
|
|
106
|
+
.pire-popover{background:var(--surface-raised);border:1px solid var(--border-default);border-radius:var(--radius-2);box-shadow:var(--shadow-3);overflow:auto;max-height:min(320px,var(--trigger-height,320px));min-width:min(var(--trigger-width),calc(100vw - 24px));max-width:calc(100vw - 24px);animation:pire-fade-in var(--dur-fast) var(--ease-entrance)}
|
|
107
|
+
.pire-listbox{outline:none;padding:var(--sp-1) 0;display:flex;flex-direction:column}
|
|
108
|
+
.pire-option{display:flex;align-items:center;gap:var(--sp-2);min-height:var(--row-h-condensed);padding:0 var(--sp-3);font:var(--type-body);color:var(--text-primary);cursor:pointer;outline:none}
|
|
109
|
+
.pire-option[data-focused]{background:var(--surface-hover)}
|
|
110
|
+
.pire-option[data-selected]{background:var(--surface-selected);color:var(--accent-subtle-fg);font:var(--type-body-strong)}
|
|
111
|
+
.pire-option[data-disabled]{color:var(--text-disabled);cursor:not-allowed}
|
|
112
|
+
|
|
113
|
+
/* ---- Checkbox / Radio / Switch --------------------------------------- */
|
|
114
|
+
.pire-choice{display:inline-flex;align-items:flex-start;gap:var(--sp-2);font:var(--type-body);color:var(--text-primary);cursor:pointer}
|
|
115
|
+
.pire-choice[data-disabled]{color:var(--text-disabled);cursor:not-allowed}
|
|
116
|
+
.pire-choice-box{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-top:2px;border:1px solid var(--border-field);border-radius:var(--radius-1);background:var(--surface-card);color:var(--accent-fg);transition:var(--transition-control)}
|
|
117
|
+
.pire-choice-box[data-radio="true"]{border-radius:var(--radius-pill)}
|
|
118
|
+
.pire-choice[data-hovered] .pire-choice-box{border-color:var(--text-primary)}
|
|
119
|
+
.pire-choice[data-selected] .pire-choice-box,.pire-choice[data-indeterminate] .pire-choice-box{background:var(--accent-bg);border-color:var(--accent-bg)}
|
|
120
|
+
.pire-choice[data-selected] .pire-choice-box[data-radio="true"]{background:var(--surface-card);border-width:5px;border-color:var(--accent-bg)}
|
|
121
|
+
.pire-choice[data-focus-visible] .pire-choice-box{outline:var(--focus-w) solid var(--focus-color);outline-offset:var(--focus-offset)}
|
|
122
|
+
.pire-choice[data-disabled] .pire-choice-box{background:var(--surface-disabled);border-color:var(--border-default)}
|
|
123
|
+
.pire-choice-hint{display:block;font:var(--type-caption);color:var(--text-secondary)}
|
|
124
|
+
.pire-switch-track{flex:0 0 auto;width:36px;height:20px;border-radius:var(--radius-pill);background:var(--gray-40);padding:2px;transition:background-color var(--dur-fast) var(--ease-standard)}
|
|
125
|
+
.pire-switch-thumb{width:16px;height:16px;border-radius:var(--radius-pill);background:var(--gray-0);box-shadow:var(--shadow-1);transition:transform var(--dur-fast) var(--ease-standard)}
|
|
126
|
+
.pire-choice[data-selected] .pire-switch-track{background:var(--accent-bg)}
|
|
127
|
+
.pire-choice[data-selected] .pire-switch-thumb{transform:translateX(16px)}
|
|
128
|
+
.pire-choice[data-focus-visible] .pire-switch-track{outline:var(--focus-w) solid var(--focus-color);outline-offset:var(--focus-offset)}
|
|
129
|
+
.pire-radiogroup{display:flex;flex-direction:column;gap:var(--sp-2)}
|
|
130
|
+
|
|
131
|
+
/* ---- Tabs ------------------------------------------------------------ */
|
|
132
|
+
.pire-tablist{display:flex;gap:var(--sp-5);border-bottom:1px solid var(--border-subtle);overflow-x:auto}
|
|
133
|
+
.pire-tab{display:inline-flex;align-items:center;gap:var(--sp-2);height:var(--shell-subheader-h);padding:0 var(--sp-0h);border-bottom:2px solid transparent;margin-bottom:-1px;font:var(--type-body);color:var(--text-secondary);cursor:pointer;white-space:nowrap;outline:none;transition:var(--transition-control)}
|
|
134
|
+
.pire-tab[data-hovered]{color:var(--text-primary)}
|
|
135
|
+
.pire-tab[data-selected]{color:var(--accent-subtle-fg);border-bottom-color:var(--accent-bg);font:var(--type-body-strong)}
|
|
136
|
+
.pire-tab[data-disabled]{color:var(--text-disabled);cursor:not-allowed}
|
|
137
|
+
.pire-tab-count{font:var(--type-code);color:var(--text-tertiary)}
|
|
138
|
+
.pire-tabpanel{padding-top:var(--sp-4);outline:none}
|
|
139
|
+
|
|
140
|
+
/* ---- Breadcrumb / Pagination ----------------------------------------- */
|
|
141
|
+
.pire-breadcrumbs{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-1);margin:0;padding:0;list-style:none;font:var(--type-caption)}
|
|
142
|
+
.pire-breadcrumb{display:inline-flex;align-items:center;gap:var(--sp-1);color:var(--text-secondary)}
|
|
143
|
+
.pire-breadcrumb[data-current]{color:var(--text-primary)}
|
|
144
|
+
.pire-breadcrumb a{color:var(--text-link);text-decoration:none;cursor:pointer}
|
|
145
|
+
.pire-breadcrumb a[data-hovered]{text-decoration:underline}
|
|
146
|
+
.pire-pagination{display:flex;align-items:center;gap:var(--sp-3);font:var(--type-caption);color:var(--text-secondary)}
|
|
147
|
+
.pire-pagination-count{font:var(--type-code);color:var(--text-secondary)}
|
|
148
|
+
|
|
149
|
+
/* ---- ShellBar / SideNav ---------------------------------------------- */
|
|
150
|
+
.pire-shellbar{display:flex;align-items:center;gap:var(--sp-3);height:var(--shell-header-h);padding:0 var(--sp-3);background:var(--surface-shell);color:var(--text-inverse)}
|
|
151
|
+
.pire-shellbar-mono{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-1);background:var(--gray-0);color:var(--surface-shell);font:var(--type-label);letter-spacing:var(--ls-caps)}
|
|
152
|
+
.pire-shellbar-product{font:var(--type-label);letter-spacing:var(--ls-caps);text-transform:uppercase;opacity:.8}
|
|
153
|
+
.pire-shellbar-title{font:var(--type-body-strong)}
|
|
154
|
+
.pire-shellbar-spacer{flex:1}
|
|
155
|
+
.pire-avatar{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-pill);background:var(--blue-60);color:var(--text-inverse);font:var(--type-label)}
|
|
156
|
+
.pire-sidenav{display:flex;flex-direction:column;width:var(--sidenav-w);flex:0 0 auto;background:var(--surface-nav);border-right:1px solid var(--border-subtle);overflow:auto}
|
|
157
|
+
.pire-sidenav[data-collapsed="true"]{width:var(--sidenav-w-collapsed)}
|
|
158
|
+
.pire-sidenav-group{padding:var(--sp-3) 0}
|
|
159
|
+
.pire-sidenav-group + .pire-sidenav-group{border-top:1px solid var(--border-subtle)}
|
|
160
|
+
.pire-sidenav-label{padding:0 var(--sp-4) var(--sp-2);font:var(--type-label);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--text-tertiary)}
|
|
161
|
+
.pire-sidenav-item{display:flex;align-items:center;gap:var(--sp-3);width:100%;height:var(--row-h-regular);padding:0 var(--sp-4);border:0;border-left:3px solid transparent;background:transparent;color:var(--text-primary);font:var(--type-body);text-align:left;cursor:pointer;transition:var(--transition-control)}
|
|
162
|
+
.pire-sidenav-item[data-hovered]{background:var(--surface-hover)}
|
|
163
|
+
.pire-sidenav-item[data-selected="true"]{background:var(--surface-selected);border-left-color:var(--accent-bg);color:var(--accent-subtle-fg);font:var(--type-body-strong)}
|
|
164
|
+
.pire-sidenav-count{margin-left:auto;font:var(--type-code);color:var(--text-tertiary)}
|
|
165
|
+
.pire-sidenav-footer{margin-top:auto;padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border-subtle)}
|
|
166
|
+
|
|
167
|
+
/* ---- Feedback -------------------------------------------------------- */
|
|
168
|
+
.pire-modal-overlay{position:fixed;inset:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:var(--sp-6);background:var(--surface-overlay);animation:pire-fade-in var(--dur-fast) var(--ease-entrance)}
|
|
169
|
+
.pire-modal{display:flex;flex-direction:column;width:100%;max-height:calc(100vh - var(--sp-16));background:var(--surface-raised);border-radius:var(--radius-2);box-shadow:var(--shadow-3);animation:pire-dialog-in var(--dur-base) var(--ease-entrance);outline:none}
|
|
170
|
+
.pire-modal[data-size="sm"]{max-width:420px}
|
|
171
|
+
.pire-modal[data-size="md"]{max-width:640px}
|
|
172
|
+
.pire-modal[data-size="lg"]{max-width:960px}
|
|
173
|
+
.pire-dialog{display:flex;flex-direction:column;min-height:0;outline:none}
|
|
174
|
+
.pire-dialog-head{display:flex;align-items:flex-start;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--border-subtle)}
|
|
175
|
+
.pire-dialog-title{font:var(--type-h3);letter-spacing:var(--ls-heading)}
|
|
176
|
+
.pire-dialog-sub{font:var(--type-caption);color:var(--text-secondary)}
|
|
177
|
+
.pire-dialog-body{padding:var(--sp-5);overflow:auto;font:var(--type-body)}
|
|
178
|
+
.pire-dialog-foot{display:flex;justify-content:flex-end;gap:var(--sp-2);padding:var(--sp-4) var(--sp-5);border-top:1px solid var(--border-subtle);background:var(--surface-sunken);border-radius:0 0 var(--radius-2) var(--radius-2)}
|
|
179
|
+
.pire-sidepanel-overlay{position:fixed;inset:0;z-index:900;display:flex;justify-content:flex-end;background:var(--surface-overlay)}
|
|
180
|
+
.pire-sidepanel{display:flex;flex-direction:column;height:100%;max-width:100vw;background:var(--surface-raised);box-shadow:var(--shadow-3);outline:none}
|
|
181
|
+
.pire-sidepanel[data-entering]{animation:pire-panel-in var(--dur-moderate) var(--ease-entrance)}
|
|
182
|
+
@keyframes pire-panel-in{from{transform:translateX(24px);opacity:0}to{transform:none;opacity:1}}
|
|
183
|
+
.pire-msg{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-3);border:1px solid transparent;border-left-width:3px;border-radius:var(--radius-1);font:var(--type-body)}
|
|
184
|
+
.pire-msg[data-kind="info"]{background:var(--status-informative-bg);border-color:var(--status-informative-border);border-left-color:var(--status-informative-fg);color:var(--status-informative-fg)}
|
|
185
|
+
.pire-msg[data-kind="success"]{background:var(--status-positive-bg);border-color:var(--status-positive-border);border-left-color:var(--status-positive-fg);color:var(--status-positive-fg)}
|
|
186
|
+
.pire-msg[data-kind="warning"]{background:var(--status-critical-bg);border-color:var(--status-critical-border);border-left-color:var(--status-critical-fg);color:var(--status-critical-fg)}
|
|
187
|
+
.pire-msg[data-kind="error"]{background:var(--status-negative-bg);border-color:var(--status-negative-border);border-left-color:var(--status-negative-fg);color:var(--status-negative-fg)}
|
|
188
|
+
.pire-msg-title{font:var(--type-body-strong)}
|
|
189
|
+
.pire-msg-body{color:var(--text-primary)}
|
|
190
|
+
.pire-toast{position:fixed;z-index:1000;bottom:var(--sp-6);display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-radius:var(--radius-2);background:var(--gray-90);color:var(--text-inverse);box-shadow:var(--shadow-3);font:var(--type-body);animation:pire-toast-in var(--dur-base) var(--ease-entrance)}
|
|
191
|
+
.pire-toast[data-position="bottom-center"]{left:50%;--pire-toast-tx:-50%;transform:translateX(-50%)}
|
|
192
|
+
.pire-toast[data-position="bottom-right"]{right:var(--sp-6);--pire-toast-tx:0}
|
|
193
|
+
.pire-toast-region{position:fixed;z-index:1000;bottom:var(--sp-6);left:50%;transform:translateX(-50%);display:flex;flex-direction:column;gap:var(--sp-2);outline:none}
|
|
194
|
+
.pire-progress{display:flex;flex-direction:column;gap:var(--sp-1)}
|
|
195
|
+
.pire-progress-head{display:flex;justify-content:space-between;gap:var(--sp-3);font:var(--type-caption);color:var(--text-secondary)}
|
|
196
|
+
.pire-progress-track{height:8px;border-radius:var(--radius-pill);background:var(--gray-20);overflow:hidden}
|
|
197
|
+
.pire-progress[data-size="sm"] .pire-progress-track{height:4px}
|
|
198
|
+
.pire-progress-fill{height:100%;background:var(--accent-bg);transition:width var(--dur-moderate) var(--ease-standard)}
|
|
199
|
+
.pire-progress[data-status="positive"] .pire-progress-fill{background:var(--status-positive-fg)}
|
|
200
|
+
.pire-progress[data-status="critical"] .pire-progress-fill{background:var(--status-critical-fg)}
|
|
201
|
+
.pire-progress[data-status="negative"] .pire-progress-fill{background:var(--status-negative-fg)}
|
|
202
|
+
.pire-tooltip{max-width:240px;padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-1);background:var(--gray-90);color:var(--text-inverse);font:var(--type-caption);box-shadow:var(--shadow-2);animation:pire-fade-in var(--dur-fast) var(--ease-entrance)}
|
|
203
|
+
|
|
204
|
+
/* ---- Data ------------------------------------------------------------ */
|
|
205
|
+
.pire-table-wrap{overflow:auto;background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-2)}
|
|
206
|
+
.pire-table{width:100%;border-collapse:collapse;font:var(--type-body)}
|
|
207
|
+
.pire-table thead tr,.pire-table .pire-thead-row{height:var(--row-h-condensed);background:var(--surface-toolbar)}
|
|
208
|
+
.pire-table[data-sticky="true"] thead{position:sticky;top:0;z-index:1}
|
|
209
|
+
.pire-th{padding:0 var(--sp-3);font:var(--type-label);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--text-secondary);border-bottom:1px solid var(--border-default);white-space:nowrap;text-align:left;outline:none}
|
|
210
|
+
.pire-th[data-allows-sorting="true"]{cursor:pointer;user-select:none}
|
|
211
|
+
.pire-th[data-focus-visible]{outline:var(--focus-w) solid var(--focus-color);outline-offset:calc(var(--focus-offset) * -1)}
|
|
212
|
+
.pire-th-inner{display:inline-flex;align-items:center;gap:var(--sp-1);width:100%}
|
|
213
|
+
.pire-th[data-align="right"] .pire-th-inner{justify-content:flex-end}
|
|
214
|
+
.pire-tr{height:var(--row-h-regular);border-bottom:1px solid var(--border-subtle);outline:none}
|
|
215
|
+
.pire-table[data-density="condensed"] .pire-tr{height:var(--row-h-condensed)}
|
|
216
|
+
.pire-table[data-density="comfortable"] .pire-tr{height:var(--row-h-comfortable)}
|
|
217
|
+
.pire-tr[data-hovered]{background:var(--surface-hover)}
|
|
218
|
+
.pire-tr[data-selected]{background:var(--surface-selected)}
|
|
219
|
+
.pire-tr[data-focus-visible]{outline:var(--focus-w) solid var(--focus-color);outline-offset:calc(var(--focus-offset) * -1)}
|
|
220
|
+
.pire-tr[data-pressable="true"]{cursor:pointer}
|
|
221
|
+
.pire-td{padding:0 var(--sp-3);color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;outline:none}
|
|
222
|
+
.pire-td[data-numeric="true"]{font:var(--type-numeric);font-variant-numeric:tabular-nums;text-align:right}
|
|
223
|
+
/* Density overrides sit after the .pire-th/.pire-td bases they override, so the cascade reads
|
|
224
|
+
top-to-bottom in source order rather than relying on specificity alone. */
|
|
225
|
+
.pire-table[data-density="condensed"] .pire-th,.pire-table[data-density="condensed"] .pire-td{padding:0 var(--sp-2)}
|
|
226
|
+
.pire-table-empty{padding:var(--sp-10);text-align:center;color:var(--text-secondary)}
|
|
227
|
+
.pire-kpi{display:flex;flex-direction:column;gap:var(--sp-1);padding:var(--sp-4);background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:var(--radius-2);text-align:left;min-width:0;transition:var(--transition-surface)}
|
|
228
|
+
.pire-kpi[data-pressable="true"]{cursor:pointer}
|
|
229
|
+
.pire-kpi[data-hovered]{box-shadow:var(--shadow-2)}
|
|
230
|
+
.pire-kpi-label{display:flex;align-items:center;gap:var(--sp-2);font:var(--type-label);color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
231
|
+
.pire-kpi-value{font:var(--fw-semibold) var(--fs-display)/var(--lh-tight) var(--font-mono);letter-spacing:var(--ls-numeric);font-variant-numeric:tabular-nums;color:var(--text-numeric)}
|
|
232
|
+
.pire-kpi[data-status="positive"] .pire-kpi-value{color:var(--status-positive-fg)}
|
|
233
|
+
.pire-kpi[data-status="critical"] .pire-kpi-value{color:var(--status-critical-fg)}
|
|
234
|
+
.pire-kpi[data-status="negative"] .pire-kpi-value{color:var(--status-negative-fg)}
|
|
235
|
+
.pire-kpi-unit{font:var(--type-caption);color:var(--text-secondary);margin-left:var(--sp-1)}
|
|
236
|
+
.pire-kpi-delta{display:inline-flex;align-items:center;gap:var(--sp-1);font:var(--type-caption)}
|
|
237
|
+
.pire-kpi-delta[data-tone="positive"]{color:var(--status-positive-fg)}
|
|
238
|
+
.pire-kpi-delta[data-tone="negative"]{color:var(--status-negative-fg)}
|
|
239
|
+
.pire-kpi-delta[data-tone="neutral"]{color:var(--text-secondary)}
|
|
240
|
+
.pire-kpi-foot{font:var(--type-caption);color:var(--text-tertiary)}
|
|
241
|
+
.pire-objheader{display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-4) var(--page-pad-x);background:var(--surface-card);border-bottom:1px solid var(--border-subtle)}
|
|
242
|
+
.pire-objheader-row{display:flex;align-items:flex-start;gap:var(--sp-3);flex-wrap:wrap}
|
|
243
|
+
.pire-objheader-title{font:var(--type-h1);letter-spacing:var(--ls-heading)}
|
|
244
|
+
.pire-objheader-sub{display:flex;align-items:center;gap:var(--sp-2);font:var(--type-caption);color:var(--text-secondary)}
|
|
245
|
+
.pire-objheader-id{font:var(--type-code);color:var(--text-secondary)}
|
|
246
|
+
.pire-objheader-actions{margin-left:auto;display:flex;gap:var(--sp-2)}
|
|
247
|
+
.pire-facts{display:flex;flex-wrap:wrap;gap:var(--sp-6)}
|
|
248
|
+
.pire-fact-label{font:var(--type-label);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--text-tertiary)}
|
|
249
|
+
.pire-fact-value{font:var(--type-body-strong)}
|
|
250
|
+
.pire-fact-value[data-numeric="true"]{font:var(--type-numeric);font-variant-numeric:tabular-nums}
|
|
251
|
+
.pire-filterbar{display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--surface-toolbar);border:1px solid var(--border-subtle);border-radius:var(--radius-2)}
|
|
252
|
+
.pire-filterbar-controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--sp-3)}
|
|
253
|
+
.pire-filterbar-foot{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
|
|
254
|
+
.pire-filterbar-result{font:var(--type-caption);color:var(--text-secondary)}
|
|
255
|
+
.pire-filterbar-actions{margin-left:auto;display:flex;gap:var(--sp-2)}
|
|
256
|
+
|
|
257
|
+
/* ---- EmptyState ------------------------------------------------------ */
|
|
258
|
+
.pire-empty{display:flex;flex-direction:column;align-items:center;gap:var(--sp-3);padding:var(--sp-16) var(--sp-6);text-align:center;color:var(--text-secondary)}
|
|
259
|
+
.pire-empty[data-compact="true"]{padding:var(--sp-8) var(--sp-4)}
|
|
260
|
+
.pire-empty-icon{color:var(--text-tertiary)}
|
|
261
|
+
.pire-empty-title{font:var(--type-h4);color:var(--text-primary)}
|
|
262
|
+
.pire-empty-body{max-width:44ch;font:var(--type-body)}
|
|
263
|
+
|
|
264
|
+
/* ---- Avatar ----------------------------------------------------------- */
|
|
265
|
+
.pire-avatar[data-size="lg"]{width:40px;height:40px;font:var(--type-body-strong)}
|
|
266
|
+
.pire-avatar[data-size="sm"]{width:24px;height:24px;font:var(--type-micro,var(--type-label))}
|
|
267
|
+
|
|
268
|
+
/* ---- SegmentedControl -------------------------------------------------- */
|
|
269
|
+
.pire-segmented{display:inline-flex;padding:2px;gap:2px;background:var(--surface-sunken);border:1px solid var(--border-default);border-radius:var(--radius-1)}
|
|
270
|
+
.pire-segmented-item{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);height:28px;padding:0 var(--sp-3);border:0;border-radius:var(--radius-1);background:transparent;color:var(--text-secondary);font:var(--type-label);cursor:pointer;transition:var(--transition-control)}
|
|
271
|
+
.pire-segmented[data-size="md"] .pire-segmented-item{height:34px;font:var(--type-body)}
|
|
272
|
+
.pire-segmented-item[data-hovered]{background:var(--surface-hover);color:var(--text-primary)}
|
|
273
|
+
.pire-segmented-item[data-selected]{background:var(--surface-card);color:var(--accent-subtle-fg);box-shadow:var(--shadow-1)}
|
|
274
|
+
.pire-segmented-item[data-disabled]{color:var(--text-disabled);cursor:not-allowed}
|
|
275
|
+
|
|
276
|
+
/* ---- DescriptionList --------------------------------------------------- */
|
|
277
|
+
.pire-dl{display:flex;flex-direction:column;gap:var(--sp-2);margin:0}
|
|
278
|
+
.pire-dl[data-layout="grid"]{display:grid;grid-template-columns:repeat(var(--pire-dl-cols,3),minmax(0,1fr));gap:var(--sp-3) var(--sp-4)}
|
|
279
|
+
.pire-dl-row{display:flex;justify-content:space-between;gap:var(--sp-3);align-items:baseline}
|
|
280
|
+
.pire-dl[data-layout="grid"] .pire-dl-row{display:block}
|
|
281
|
+
.pire-dl-term{font:var(--type-caption);color:var(--text-secondary);display:inline-flex;align-items:center;gap:var(--sp-1)}
|
|
282
|
+
.pire-dl[data-layout="grid"] .pire-dl-term{font:var(--type-label);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--text-tertiary)}
|
|
283
|
+
.pire-dl-value{margin:0;font:var(--type-body)}
|
|
284
|
+
.pire-dl-value[data-numeric="true"]{font:var(--type-numeric);font-variant-numeric:tabular-nums}
|
|
285
|
+
.pire-dl-row[data-emphasis="true"]{border-top:1px solid var(--border-default);padding-top:var(--sp-2)}
|
|
286
|
+
.pire-dl-row[data-emphasis="true"] .pire-dl-term{font:var(--type-body-strong);color:var(--text-primary)}
|
|
287
|
+
.pire-dl-row[data-emphasis="true"] .pire-dl-value{font:var(--fw-semibold) var(--fs-h4)/1.3 var(--font-sans)}
|
|
288
|
+
.pire-dl-row[data-emphasis="true"] .pire-dl-value[data-numeric="true"]{font:var(--fw-semibold) var(--fs-h4)/1.3 var(--font-mono)}
|
|
289
|
+
|
|
290
|
+
/* ---- Timeline ---------------------------------------------------------- */
|
|
291
|
+
.pire-timeline{display:flex;flex-direction:column;margin:0;padding:0;list-style:none}
|
|
292
|
+
.pire-timeline-item{display:flex;gap:var(--sp-4);align-items:baseline;padding:var(--sp-2) 0;border-bottom:1px solid var(--border-subtle)}
|
|
293
|
+
.pire-timeline-item:last-child{border-bottom:0}
|
|
294
|
+
.pire-timeline-time{flex:0 0 auto;width:132px;font:var(--type-code);color:var(--text-secondary)}
|
|
295
|
+
.pire-timeline-text{flex:1;font:var(--type-body)}
|
|
296
|
+
.pire-timeline-actor{font:var(--type-caption);color:var(--text-secondary)}
|
|
297
|
+
|
|
298
|
+
/* ---- LinkList ---------------------------------------------------------- */
|
|
299
|
+
.pire-linklist{display:flex;flex-direction:column}
|
|
300
|
+
.pire-linklist-item{display:flex;align-items:center;gap:var(--sp-2);width:100%;height:var(--row-h-regular);padding:0 var(--sp-1);border:0;border-bottom:1px solid var(--border-subtle);background:transparent;text-align:left;cursor:pointer;color:var(--text-primary);transition:var(--transition-control)}
|
|
301
|
+
.pire-linklist-item:last-child{border-bottom:0}
|
|
302
|
+
.pire-linklist-item[data-hovered]{background:var(--surface-hover)}
|
|
303
|
+
.pire-linklist-key{font:var(--type-code)}
|
|
304
|
+
.pire-linklist-text{flex:1;min-width:0;font:var(--type-caption);color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
305
|
+
|
|
306
|
+
/* ---- PageHeader / SectionHeader ---------------------------------------- */
|
|
307
|
+
.pire-pageheader{display:flex;align-items:flex-start;gap:var(--sp-4);flex-wrap:wrap}
|
|
308
|
+
.pire-pageheader-title{font:var(--type-h1);letter-spacing:var(--ls-heading);margin:0}
|
|
309
|
+
.pire-pageheader-sub{margin:var(--sp-1) 0 0;font:var(--type-body);color:var(--text-secondary);max-width:80ch}
|
|
310
|
+
.pire-pageheader-actions{margin-left:auto;display:flex;gap:var(--sp-2)}
|
|
311
|
+
.pire-sectionhead{display:flex;align-items:baseline;gap:var(--sp-3)}
|
|
312
|
+
.pire-sectionhead-actions{margin-left:auto;display:flex;align-items:baseline;gap:var(--sp-2)}
|
|
313
|
+
|
|
314
|
+
/* ---- SelectionBar / FooterBar ------------------------------------------ */
|
|
315
|
+
.pire-selectionbar{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);background:var(--surface-selected);border:1px solid var(--status-informative-border);border-radius:var(--radius-1);font:var(--type-body)}
|
|
316
|
+
.pire-selectionbar-count{font:var(--type-body-strong);color:var(--accent-subtle-fg)}
|
|
317
|
+
.pire-selectionbar-actions{margin-left:auto;display:flex;gap:var(--sp-2)}
|
|
318
|
+
.pire-footerbar{position:sticky;bottom:0;z-index:50;display:flex;align-items:center;gap:var(--sp-3);height:var(--control-h-lg);padding:0 var(--page-pad-x);background:var(--surface-card);border-top:1px solid var(--border-subtle);box-shadow:0 -1px 2px rgba(13,19,25,.08)}
|
|
319
|
+
.pire-footerbar-actions{margin-left:auto;display:flex;gap:var(--sp-2)}
|
|
320
|
+
.pire-footerbar-note{font:var(--type-caption);color:var(--text-secondary)}
|
|
321
|
+
|
|
322
|
+
/* ---- NumberField ------------------------------------------------------- */
|
|
323
|
+
.pire-stepper{display:flex;flex-direction:column;flex:0 0 auto;margin-right:calc(var(--control-pad-x) * -1 + 2px)}
|
|
324
|
+
.pire-stepper-btn{display:flex;align-items:center;justify-content:center;width:24px;height:14px;border:0;background:transparent;color:var(--text-secondary);cursor:pointer;border-radius:var(--radius-1)}
|
|
325
|
+
.pire-stepper-btn[data-hovered]{background:var(--surface-hover);color:var(--text-primary)}
|
|
326
|
+
.pire-stepper-btn[data-disabled]{color:var(--text-disabled);cursor:not-allowed}
|
|
327
|
+
|
|
328
|
+
/* ---- DatePicker / Calendar --------------------------------------------- */
|
|
329
|
+
.pire-datefield{display:flex;align-items:center;flex:1;min-width:0;font:var(--type-numeric);font-variant-numeric:tabular-nums}
|
|
330
|
+
.pire-datesegment{padding:0 1px;border-radius:2px;outline:none;color:var(--text-primary)}
|
|
331
|
+
.pire-datesegment[data-type="literal"]{color:var(--text-tertiary)}
|
|
332
|
+
.pire-datesegment[data-placeholder]{color:var(--text-tertiary)}
|
|
333
|
+
.pire-datesegment[data-focused]{background:var(--accent-bg);color:var(--accent-fg)}
|
|
334
|
+
.pire-calendar{padding:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-2)}
|
|
335
|
+
.pire-calendar-head{display:flex;align-items:center;gap:var(--sp-2)}
|
|
336
|
+
.pire-calendar-title{flex:1;text-align:center;font:var(--type-body-strong)}
|
|
337
|
+
.pire-calendar-grid{border-collapse:collapse}
|
|
338
|
+
.pire-calendar-grid th{width:32px;height:24px;font:var(--type-label);color:var(--text-tertiary);font-weight:var(--fw-medium)}
|
|
339
|
+
.pire-calendar-cell{width:32px;height:32px;text-align:center;vertical-align:middle;font:var(--type-numeric);border-radius:var(--radius-1);cursor:pointer;outline:none;color:var(--text-primary)}
|
|
340
|
+
.pire-calendar-cell[data-outside-month]{visibility:hidden}
|
|
341
|
+
.pire-calendar-cell[data-hovered]{background:var(--surface-hover)}
|
|
342
|
+
.pire-calendar-cell[data-selected]{background:var(--accent-bg);color:var(--accent-fg)}
|
|
343
|
+
.pire-calendar-cell[data-today]::after{content:"";display:block;width:4px;height:2px;margin:-4px auto 0;background:currentColor}
|
|
344
|
+
.pire-calendar-cell[data-disabled],.pire-calendar-cell[data-unavailable]{color:var(--text-disabled);cursor:not-allowed;text-decoration:line-through}
|
|
345
|
+
.pire-calendar-cell[data-focus-visible]{outline:var(--focus-w) solid var(--focus-color);outline-offset:-1px}
|
|
346
|
+
|
|
347
|
+
/* ---- Reduced motion --------------------------------------------------- */
|
|
348
|
+
@media (prefers-reduced-motion: reduce){.pire-modal,.pire-toast,.pire-popover,.pire-tooltip,.pire-sidepanel{animation:none}
|
|
349
|
+
/* !important is the point here: this must beat every component transition, including any a
|
|
350
|
+
consuming app has layered on top. Honouring the OS motion preference outranks the style rule. */
|
|
351
|
+
/* biome-ignore lint/complexity/noImportantStyles: accessibility override must win unconditionally */
|
|
352
|
+
*,*::before,*::after{transition-duration:1ms!important}}
|