@attrus-ds/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +27 -0
  2. package/README.md +123 -0
  3. package/dist/assets/flags/Brazil-rounded.svg +16 -0
  4. package/dist/assets/flags/Brazil-square.svg +17 -0
  5. package/dist/assets/flags/Chile-rounded.svg +11 -0
  6. package/dist/assets/flags/Chile-square.svg +11 -0
  7. package/dist/assets/flags/Colombia-rounded.svg +10 -0
  8. package/dist/assets/flags/Colombia-square.svg +10 -0
  9. package/dist/assets/flags/EUA-rounded.svg +11 -0
  10. package/dist/assets/flags/EUA-square.svg +11 -0
  11. package/dist/assets/flags/EUR-rounded.svg +9 -0
  12. package/dist/assets/flags/EUR-square.svg +9 -0
  13. package/dist/assets/flags/Mexico-rounded.svg +19 -0
  14. package/dist/assets/flags/Mexico-square.svg +19 -0
  15. package/dist/assets/icon-attrus-dark.svg +3 -0
  16. package/dist/assets/icon-attrus-light.svg +3 -0
  17. package/dist/assets/logo-attrus-dark.svg +8 -0
  18. package/dist/assets/logo-attrus-light.svg +8 -0
  19. package/dist/css/components/buttons.css +301 -0
  20. package/dist/css/components/callout.css +195 -0
  21. package/dist/css/components/cards.css +272 -0
  22. package/dist/css/components/combobox.css +303 -0
  23. package/dist/css/components/empty-states.css +61 -0
  24. package/dist/css/components/inputs.css +1027 -0
  25. package/dist/css/components/number-input.css +138 -0
  26. package/dist/css/components/overlays.css +405 -0
  27. package/dist/css/components/primitives.css +305 -0
  28. package/dist/css/components/sidebar.css +179 -0
  29. package/dist/css/components/status-pills.css +207 -0
  30. package/dist/css/components/stepper.css +309 -0
  31. package/dist/css/components/table.css +600 -0
  32. package/dist/css/components/tabs.css +319 -0
  33. package/dist/css/components/toast.css +239 -0
  34. package/dist/css/components/tooltip.css +226 -0
  35. package/dist/css/components/topbar.css +148 -0
  36. package/dist/css/fonts.css +91 -0
  37. package/dist/css/index.css +23 -0
  38. package/dist/css/tokens.css +691 -0
  39. package/dist/fonts/LICENSE-JetBrainsMono.txt +93 -0
  40. package/dist/fonts/LICENSE-Lato.txt +93 -0
  41. package/dist/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  42. package/dist/fonts/jetbrains-mono-latin-500-normal.woff2 +0 -0
  43. package/dist/fonts/jetbrains-mono-latin-600-normal.woff2 +0 -0
  44. package/dist/fonts/lato-latin-100-normal.woff2 +0 -0
  45. package/dist/fonts/lato-latin-300-italic.woff2 +0 -0
  46. package/dist/fonts/lato-latin-300-normal.woff2 +0 -0
  47. package/dist/fonts/lato-latin-400-italic.woff2 +0 -0
  48. package/dist/fonts/lato-latin-400-normal.woff2 +0 -0
  49. package/dist/fonts/lato-latin-700-italic.woff2 +0 -0
  50. package/dist/fonts/lato-latin-700-normal.woff2 +0 -0
  51. package/dist/fonts/lato-latin-900-normal.woff2 +0 -0
  52. package/dist/tokens/attrus-tokens.flat.json +1235 -0
  53. package/dist/tokens/attrus-tokens.json +1090 -0
  54. package/package.json +46 -0
@@ -0,0 +1,226 @@
1
+ /* ============================================================
2
+ TOOLTIP COMPONENT — ATTRUS Design System
3
+ Hover/focus-triggered label that names a target.
4
+ All values from tokens.
5
+ ============================================================ */
6
+
7
+ .tooltip-target {
8
+ position: relative;
9
+ display: inline-flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ }
13
+
14
+ .tooltip {
15
+ position: absolute;
16
+ z-index: 8000;
17
+ padding: var(--space-2) var(--space-3);
18
+ background: var(--color-background-inverse);
19
+ color: var(--color-foreground-inverse-default);
20
+ font-family: var(--font-sans);
21
+ font-size: var(--fs-xs);
22
+ font-weight: var(--w-medium);
23
+ line-height: var(--lh-tight);
24
+ letter-spacing: var(--ls-body);
25
+ white-space: normal;
26
+ width: max-content;
27
+ max-width: 240px;
28
+ border-radius: var(--radius-xs);
29
+ box-shadow: var(--shadow-md);
30
+ pointer-events: none;
31
+ opacity: 0;
32
+ transition: opacity var(--duration-base) var(--ease-standard),
33
+ transform var(--duration-base) var(--ease-emphasis);
34
+ }
35
+
36
+ .tooltip-target:hover > .tooltip,
37
+ .tooltip-target:focus-visible > .tooltip,
38
+ .tooltip-target:focus-within > .tooltip,
39
+ .tooltip-target:has(> .tooltip-rich:hover) > .tooltip-rich,
40
+ .tooltip.is-open {
41
+ opacity: 1;
42
+ pointer-events: none;
43
+ }
44
+
45
+ /* Arrow */
46
+ .tooltip::after {
47
+ content: "";
48
+ position: absolute;
49
+ width: 8px; height: 8px;
50
+ background: var(--color-background-inverse);
51
+ transform: rotate(45deg);
52
+ }
53
+
54
+ /* Placements */
55
+ .tooltip-top {
56
+ bottom: calc(100% + var(--space-2));
57
+ left: 50%;
58
+ transform: translateX(-50%) translateY(4px);
59
+ }
60
+ .tooltip-target:hover > .tooltip-top,
61
+ .tooltip-target:focus-within > .tooltip-top { transform: translateX(-50%) translateY(0); }
62
+ .tooltip-top::after { bottom: -3px; left: 50%; margin-left: -4px; }
63
+
64
+ .tooltip-bottom {
65
+ top: calc(100% + var(--space-2));
66
+ left: 50%;
67
+ transform: translateX(-50%) translateY(-4px);
68
+ }
69
+ .tooltip-target:hover > .tooltip-bottom,
70
+ .tooltip-target:focus-within > .tooltip-bottom { transform: translateX(-50%) translateY(0); }
71
+ .tooltip-bottom::after { top: -3px; left: 50%; margin-left: -4px; }
72
+
73
+ .tooltip-left {
74
+ right: calc(100% + var(--space-2));
75
+ top: 50%;
76
+ transform: translateY(-50%) translateX(4px);
77
+ }
78
+ .tooltip-target:hover > .tooltip-left,
79
+ .tooltip-target:focus-within > .tooltip-left { transform: translateY(-50%) translateX(0); }
80
+ .tooltip-left::after { right: -3px; top: 50%; margin-top: -4px; }
81
+
82
+ .tooltip-right {
83
+ left: calc(100% + var(--space-2));
84
+ top: 50%;
85
+ transform: translateY(-50%) translateX(-4px);
86
+ }
87
+ .tooltip-target:hover > .tooltip-right,
88
+ .tooltip-target:focus-within > .tooltip-right { transform: translateY(-50%) translateX(0); }
89
+ .tooltip-right::after { left: -3px; top: 50%; margin-top: -4px; }
90
+
91
+ /* Variants */
92
+ .tooltip-rich {
93
+ white-space: normal;
94
+ max-width: 260px;
95
+ padding: var(--space-3) var(--space-4);
96
+ font-size: var(--fs-xs);
97
+ line-height: var(--lh-normal);
98
+ }
99
+ /* Rich tooltips are interactive (may contain a link): make them hoverable
100
+ and bridge the gap to the target so the pointer can travel without the
101
+ tooltip closing. Bridge is an invisible pad on the target-facing side. */
102
+ .tooltip-target:hover > .tooltip-rich,
103
+ .tooltip-target:focus-within > .tooltip-rich,
104
+ .tooltip-target:has(> .tooltip-rich:hover) > .tooltip-rich,
105
+ .tooltip-rich.is-open { pointer-events: auto; }
106
+ .tooltip-rich::before {
107
+ content: "";
108
+ position: absolute;
109
+ /* covers the space-2 gap between tooltip and target */
110
+ }
111
+ .tooltip-rich.tooltip-top::before { left: 0; right: 0; bottom: calc(-1 * var(--space-2)); height: var(--space-2); }
112
+ .tooltip-rich.tooltip-bottom::before { left: 0; right: 0; top: calc(-1 * var(--space-2)); height: var(--space-2); }
113
+ .tooltip-rich.tooltip-left::before { top: 0; bottom: 0; right: calc(-1 * var(--space-2)); width: var(--space-2); }
114
+ .tooltip-rich.tooltip-right::before { top: 0; bottom: 0; left: calc(-1 * var(--space-2)); width: var(--space-2); }
115
+ .tooltip-rich .tooltip-title {
116
+ font-weight: var(--w-semibold);
117
+ font-size: var(--fs-sm);
118
+ margin: 0 0 var(--space-1);
119
+ color: var(--color-foreground-inverse-default);
120
+ }
121
+ .tooltip-rich .tooltip-desc {
122
+ margin: 0;
123
+ color: var(--color-foreground-inverse-muted);
124
+ }
125
+
126
+ /* --- Rich tooltip building blocks (title · meta · header icon ·
127
+ divider · bullet list · key/value rows · footer) --- */
128
+ .tooltip-rich .tooltip-meta {
129
+ display: block;
130
+ font-family: var(--font-mono);
131
+ font-size: var(--fs-xxs);
132
+ font-weight: var(--w-semibold);
133
+ letter-spacing: var(--ls-caps);
134
+ text-transform: uppercase;
135
+ color: var(--color-foreground-inverse-muted);
136
+ margin: 0 0 var(--space-1);
137
+ }
138
+ .tooltip-rich .tooltip-header {
139
+ display: flex;
140
+ align-items: center;
141
+ gap: var(--space-2);
142
+ margin-bottom: var(--space-1);
143
+ }
144
+ .tooltip-rich .tooltip-header .tooltip-title { margin: 0; }
145
+ .tooltip-rich .tooltip-header i,
146
+ .tooltip-rich .tooltip-header svg {
147
+ width: 15px; height: 15px;
148
+ color: var(--color-foreground-inverse-default);
149
+ flex-shrink: 0;
150
+ stroke-width: var(--icon-stroke);
151
+ }
152
+ .tooltip-rich .tooltip-divider {
153
+ height: 1px;
154
+ margin: var(--space-3) 0;
155
+ background: var(--color-border-inverse);
156
+ border: 0;
157
+ }
158
+ .tooltip-rich .tooltip-list {
159
+ margin: var(--space-2) 0 0;
160
+ padding: 0;
161
+ list-style: none;
162
+ display: flex;
163
+ flex-direction: column;
164
+ gap: var(--space-1);
165
+ }
166
+ .tooltip-rich .tooltip-list li {
167
+ position: relative;
168
+ padding-left: var(--space-4);
169
+ color: var(--color-foreground-inverse-muted);
170
+ font-size: var(--fs-xs);
171
+ line-height: var(--lh-snug);
172
+ }
173
+ .tooltip-rich .tooltip-list li::before {
174
+ content: "";
175
+ position: absolute;
176
+ left: 2px; top: 7px;
177
+ width: 4px; height: 4px;
178
+ border-radius: var(--radius-pill);
179
+ background: var(--color-foreground-inverse-accent);
180
+ }
181
+ .tooltip-rich .tooltip-row {
182
+ display: flex;
183
+ align-items: center;
184
+ justify-content: space-between;
185
+ gap: var(--space-4);
186
+ font-size: var(--fs-xs);
187
+ }
188
+ .tooltip-rich .tooltip-row + .tooltip-row { margin-top: var(--space-1); }
189
+ .tooltip-rich .tooltip-row .k { color: var(--color-foreground-inverse-muted); }
190
+ .tooltip-rich .tooltip-row .v {
191
+ color: var(--color-foreground-inverse-default);
192
+ font-family: var(--font-mono);
193
+ font-variant-numeric: tabular-nums;
194
+ font-weight: var(--w-medium);
195
+ }
196
+ .tooltip-rich .tooltip-footer {
197
+ margin-top: var(--space-3);
198
+ padding-top: var(--space-2);
199
+ border-top: 1px solid var(--color-border-inverse);
200
+ font-size: var(--fs-xxs);
201
+ color: var(--color-foreground-inverse-muted);
202
+ display: flex;
203
+ align-items: center;
204
+ gap: var(--space-2);
205
+ }
206
+ .tooltip-rich .tooltip-footer i,
207
+ .tooltip-rich .tooltip-footer svg { width: 12px; height: 12px; flex-shrink: 0; }
208
+
209
+ .tooltip-kbd kbd {
210
+ display: inline-block;
211
+ margin-left: var(--space-2);
212
+ padding: 1px var(--space-1);
213
+ background: var(--color-background-inverse-subtle);
214
+ color: var(--color-foreground-inverse-default);
215
+ border: 1px solid var(--color-border-inverse);
216
+ border-radius: var(--radius-xs);
217
+ font-family: var(--font-mono);
218
+ font-size: var(--fs-xxs);
219
+ font-weight: var(--w-medium);
220
+ line-height: 1;
221
+ }
222
+
223
+ /* Reduced motion */
224
+ @media (prefers-reduced-motion: reduce) {
225
+ .tooltip { transition: opacity var(--duration-instant) linear; transform: none !important; transition-delay: 0s !important; }
226
+ }
@@ -0,0 +1,148 @@
1
+ /* ============================================================
2
+ TOP BAR — ATTRUS Design System
3
+ Canonical component CSS. SINGLE SOURCE consumed by the live app
4
+ shell (ui_kits/dashboard/Shell.jsx) and the doc page
5
+ (preview/topbar.html). Token-driven → themes automatically.
6
+
7
+ Class map:
8
+ .topbar component root (52px bar, surface)
9
+ .tb-control unified 32px control (button/pill base)
10
+ .tb-control.icon icon-only square 32×32
11
+ .tb-control.primary high-contrast CTA (inverse layer)
12
+ .tb-live live-session indicator (non-interactive)
13
+ .tb-live .dot pulsing status dot
14
+ .tb-clock mono elapsed-time readout
15
+ .tb-flag-label ENG / lang label inside a control
16
+ .tb-bell notification button wrapper (badge anchor)
17
+ .tb-bell .badge unread red dot
18
+ .tb-avatar user avatar chip (30px)
19
+ .tb-spacer margin-left:auto group wrapper
20
+
21
+ Canonical control height: var(--tb-control-h) (default 36px). All bar
22
+ items (controls, search, account) read it, so they scale together.
23
+ ============================================================ */
24
+
25
+ .topbar {
26
+ height: 60px; flex-shrink: 0;
27
+ --tb-control-h: 36px;
28
+ background: var(--color-background-surface);
29
+ border-bottom: 1px solid var(--color-border-default);
30
+ display: flex; align-items: center; gap: var(--space-2-5);
31
+ padding: 0 var(--space-4);
32
+ }
33
+
34
+ /* Unified control — every interactive pill/button in the bar */
35
+ .tb-control {
36
+ height: var(--tb-control-h); min-height: var(--tb-control-h); box-sizing: border-box;
37
+ display: inline-flex; align-items: center; gap: var(--space-2-5);
38
+ padding: 0 var(--space-3-5);
39
+ border-radius: var(--radius-sm-md);
40
+ border: 1px solid var(--color-border-default);
41
+ background: var(--color-background-surface);
42
+ color: var(--color-foreground-secondary);
43
+ font-family: inherit; font-size: var(--fs-md); font-weight: var(--w-medium);
44
+ white-space: nowrap; cursor: pointer;
45
+ transition: var(--transition-fast);
46
+ }
47
+ .tb-control:hover { border-color: var(--color-border-strong); color: var(--color-foreground-default); background: var(--color-background-hover); }
48
+ .tb-control svg, .tb-control i { width: 14px; height: 14px; stroke-width: var(--icon-stroke); flex-shrink: 0; }
49
+
50
+ /* Icon-only square */
51
+ .tb-control.icon { width: var(--tb-control-h); padding: 0; justify-content: center; }
52
+
53
+ /* The bar's primary action is the canonical button — use `.btn .btn-primary .btn-sm`
54
+ (buttons.css), NOT a topbar-local style. Kept out of here on purpose for single source. */
55
+
56
+ /* Lang label inside a control */
57
+ .tb-control .tb-flag-label { font-size: var(--fs-sm); font-weight: var(--w-semibold); color: var(--color-foreground-secondary); }
58
+ .tb-control .chev { opacity: .6; }
59
+ .tb-control .chev svg, .tb-control .chev i { width: 11px; height: 11px; }
60
+
61
+ /* Live indicator — looks like a control but is not interactive */
62
+ .tb-live { cursor: default; color: var(--color-foreground-secondary); }
63
+ .tb-live:hover { border-color: var(--color-border-default); background: var(--color-background-surface); color: var(--color-foreground-secondary); }
64
+ .tb-live .dot {
65
+ width: 6px; height: 6px; border-radius: var(--radius-pill);
66
+ background: var(--color-success-500);
67
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-success-500) 15%, transparent);
68
+ }
69
+ .tb-live .lbl { font-size: var(--fs-sm); font-weight: var(--w-semibold); }
70
+ .tb-clock { font-family: var(--font-mono); font-size: var(--fs-xxs); color: var(--color-foreground-muted); margin-left: var(--space-1); }
71
+
72
+ /* Notification button + unread badge */
73
+ .tb-bell .badge-anchor { position: relative; display: inline-flex; }
74
+ .tb-bell .badge {
75
+ position: absolute; top: -3px; right: -3px;
76
+ width: 6px; height: 6px; border-radius: var(--radius-pill);
77
+ background: var(--color-danger-500);
78
+ }
79
+
80
+ /* Avatar chip */
81
+ .tb-avatar {
82
+ width: 30px; height: 30px; border-radius: var(--radius-pill);
83
+ background: var(--color-brand-secondary-500); color: var(--color-pure-white);
84
+ font-size: var(--fs-xs); font-weight: var(--w-bold);
85
+ display: inline-flex; align-items: center; justify-content: center;
86
+ flex-shrink: 0; margin-left: var(--space-1);
87
+ }
88
+
89
+ /* Right-aligned cluster */
90
+ .tb-spacer { margin-left: auto; display: flex; align-items: center; gap: var(--space-3); }
91
+
92
+ /* Search pill grows to fill the bar (component itself lives in inputs.css) */
93
+ .topbar .pill-search { height: var(--tb-control-h); box-sizing: border-box; flex: 1; max-width: 520px; min-width: 0; }
94
+
95
+ /* ===== Mobile ===== */
96
+ @media (max-width: 720px) {
97
+ .topbar { gap: var(--space-2); padding: 0 var(--space-3); }
98
+ }
99
+
100
+ /* ===== Account menu (avatar + identity → dropdown) ===== */
101
+ .tb-account-wrap { position: relative; margin-left: var(--space-1); }
102
+ .tb-account {
103
+ height: var(--tb-control-h); min-height: var(--tb-control-h); box-sizing: border-box;
104
+ display: inline-flex; align-items: center; gap: var(--space-2);
105
+ padding: 0 var(--space-3-5) 0 var(--space-2-5);
106
+ border: 1px solid var(--color-border-default);
107
+ border-radius: var(--radius-sm-md);
108
+ background: var(--color-background-surface);
109
+ cursor: pointer; font-family: inherit;
110
+ transition: var(--transition-fast);
111
+ }
112
+ .tb-account:hover { border-color: var(--color-border-strong); background: var(--color-background-hover); }
113
+ .tb-account.is-open { border-color: var(--color-border-strong); background: var(--color-background-hover); }
114
+ .tb-account .tb-avatar { width: 24px; height: 24px; font-size: 9px; margin-left: 0; }
115
+ .tb-account-id { display: flex; flex-direction: column; align-items: flex-start; line-height: 1.1; min-width: 0; }
116
+ .tb-account-id .nm { font-size: var(--fs-xs); font-weight: var(--w-semibold); color: var(--color-foreground-default); white-space: nowrap; }
117
+ .tb-account-id .co { font-size: var(--fs-xxs); color: var(--color-foreground-muted); white-space: nowrap; }
118
+ .tb-account .chev { display: inline-flex; color: var(--color-foreground-muted); margin-left: var(--space-1); }
119
+ .tb-account .chev svg, .tb-account .chev i { width: 12px; height: 12px; }
120
+
121
+ /* Dropdown */
122
+ .tb-account-menu {
123
+ position: absolute; top: calc(100% + var(--space-2)); right: 0; z-index: 200;
124
+ min-width: 240px; padding: var(--space-2);
125
+ background: var(--color-background-surface);
126
+ border: 1px solid var(--color-border-default);
127
+ border-radius: var(--radius-md); box-shadow: var(--shadow-lg);
128
+ }
129
+ .tb-account-menu-head { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-2) var(--space-2) var(--space-3); }
130
+ .tb-account-menu .tb-avatar.lg { width: 36px; height: 36px; font-size: var(--fs-sm); margin-left: 0; }
131
+ .tb-account-menu-id { display: flex; flex-direction: column; line-height: 1.25; min-width: 0; }
132
+ .tb-account-menu-id .nm { font-size: var(--fs-md); font-weight: var(--w-semibold); color: var(--color-foreground-default); white-space: nowrap; }
133
+ .tb-account-menu-id .co { font-size: var(--fs-xs); color: var(--color-foreground-muted); white-space: nowrap; }
134
+ .tb-account-menu-sep { height: 1px; background: var(--color-border-subtle); margin: var(--space-1) calc(-1 * var(--space-2)); }
135
+ .tb-account-menu-item {
136
+ display: flex; align-items: center; gap: var(--space-3); width: 100%;
137
+ padding: var(--space-2-5) var(--space-2); margin: 1px 0;
138
+ border: 0; border-radius: var(--radius-sm); background: transparent; cursor: pointer;
139
+ font-family: inherit; font-size: var(--fs-sm); font-weight: var(--w-medium);
140
+ color: var(--color-foreground-secondary); text-align: left; white-space: nowrap;
141
+ transition: background var(--transition-fast), color var(--transition-fast);
142
+ }
143
+ .tb-account-menu-item:hover { background: var(--color-background-hover); color: var(--color-foreground-default); }
144
+ .tb-account-menu-item svg, .tb-account-menu-item i { width: 15px; height: 15px; stroke-width: var(--icon-stroke); color: var(--color-foreground-muted); flex-shrink: 0; }
145
+ .tb-account-menu-item:hover svg, .tb-account-menu-item:hover i { color: var(--color-foreground-secondary); }
146
+ .tb-account-menu-item.is-danger { color: var(--color-feedback-danger-foreground); }
147
+ .tb-account-menu-item.is-danger svg, .tb-account-menu-item.is-danger i { color: var(--color-feedback-danger-foreground); }
148
+ .tb-account-menu-item.is-danger:hover { background: var(--color-feedback-danger-background); color: var(--color-feedback-danger-foreground); }
@@ -0,0 +1,91 @@
1
+ /* ATTRUS / Cabiros — bundled web fonts (self-hosted, no CDN).
2
+ Generated by scripts/build.mjs. Fonts under SIL OFL — see dist/fonts/LICENSE-*.txt */
3
+
4
+ @font-face {
5
+ font-family: "Lato";
6
+ font-style: normal;
7
+ font-weight: 100;
8
+ font-display: swap;
9
+ src: url("../fonts/lato-latin-100-normal.woff2") format("woff2");
10
+ }
11
+
12
+ @font-face {
13
+ font-family: "Lato";
14
+ font-style: normal;
15
+ font-weight: 300;
16
+ font-display: swap;
17
+ src: url("../fonts/lato-latin-300-normal.woff2") format("woff2");
18
+ }
19
+
20
+ @font-face {
21
+ font-family: "Lato";
22
+ font-style: italic;
23
+ font-weight: 300;
24
+ font-display: swap;
25
+ src: url("../fonts/lato-latin-300-italic.woff2") format("woff2");
26
+ }
27
+
28
+ @font-face {
29
+ font-family: "Lato";
30
+ font-style: normal;
31
+ font-weight: 400;
32
+ font-display: swap;
33
+ src: url("../fonts/lato-latin-400-normal.woff2") format("woff2");
34
+ }
35
+
36
+ @font-face {
37
+ font-family: "Lato";
38
+ font-style: italic;
39
+ font-weight: 400;
40
+ font-display: swap;
41
+ src: url("../fonts/lato-latin-400-italic.woff2") format("woff2");
42
+ }
43
+
44
+ @font-face {
45
+ font-family: "Lato";
46
+ font-style: normal;
47
+ font-weight: 700;
48
+ font-display: swap;
49
+ src: url("../fonts/lato-latin-700-normal.woff2") format("woff2");
50
+ }
51
+
52
+ @font-face {
53
+ font-family: "Lato";
54
+ font-style: italic;
55
+ font-weight: 700;
56
+ font-display: swap;
57
+ src: url("../fonts/lato-latin-700-italic.woff2") format("woff2");
58
+ }
59
+
60
+ @font-face {
61
+ font-family: "Lato";
62
+ font-style: normal;
63
+ font-weight: 900;
64
+ font-display: swap;
65
+ src: url("../fonts/lato-latin-900-normal.woff2") format("woff2");
66
+ }
67
+
68
+ @font-face {
69
+ font-family: "JetBrains Mono";
70
+ font-style: normal;
71
+ font-weight: 400;
72
+ font-display: swap;
73
+ src: url("../fonts/jetbrains-mono-latin-400-normal.woff2") format("woff2");
74
+ }
75
+
76
+ @font-face {
77
+ font-family: "JetBrains Mono";
78
+ font-style: normal;
79
+ font-weight: 500;
80
+ font-display: swap;
81
+ src: url("../fonts/jetbrains-mono-latin-500-normal.woff2") format("woff2");
82
+ }
83
+
84
+ @font-face {
85
+ font-family: "JetBrains Mono";
86
+ font-style: normal;
87
+ font-weight: 600;
88
+ font-display: swap;
89
+ src: url("../fonts/jetbrains-mono-latin-600-normal.woff2") format("woff2");
90
+ }
91
+
@@ -0,0 +1,23 @@
1
+ /* @attrus/cabiros — full design system stylesheet.
2
+ Order matters: fonts -> tokens -> components. */
3
+
4
+ @import "./fonts.css";
5
+ @import "./tokens.css";
6
+
7
+ @import "./components/buttons.css";
8
+ @import "./components/callout.css";
9
+ @import "./components/cards.css";
10
+ @import "./components/combobox.css";
11
+ @import "./components/empty-states.css";
12
+ @import "./components/inputs.css";
13
+ @import "./components/number-input.css";
14
+ @import "./components/overlays.css";
15
+ @import "./components/primitives.css";
16
+ @import "./components/sidebar.css";
17
+ @import "./components/status-pills.css";
18
+ @import "./components/stepper.css";
19
+ @import "./components/table.css";
20
+ @import "./components/tabs.css";
21
+ @import "./components/toast.css";
22
+ @import "./components/tooltip.css";
23
+ @import "./components/topbar.css";