@bluealba/pae-design-tokens 0.0.0-integration-css.403

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Shell reset.
3
+ *
4
+ * Full preflight-style reset for the platform shell. This stylesheet is ONLY
5
+ * ever injected INSIDE the shell shadow root (<pae-shell-host>), never into
6
+ * the document: inside the shadow boundary the universal selectors below only
7
+ * match shell-owned DOM, so the reset cannot leak into micro-frontends and
8
+ * micro-frontend resets cannot leak in.
9
+ *
10
+ * (Adapted from the legacy "pilar-css-base" Tailwind preflight that used to
11
+ * live inline in index.hbs; html/body rules became :host rules.)
12
+ */
13
+
14
+ *,
15
+ ::after,
16
+ ::before {
17
+ box-sizing: border-box;
18
+ border-width: 0;
19
+ border-style: solid;
20
+ border-color: #e5e7eb;
21
+ }
22
+
23
+ :host {
24
+ display: block;
25
+ line-height: 1.5;
26
+ -webkit-text-size-adjust: 100%;
27
+ -moz-tab-size: 4;
28
+ tab-size: 4;
29
+ font-family: var(--pae-shell-text-base-font-family, ui-sans-serif, system-ui, sans-serif);
30
+ font-size: var(--pae-shell-text-base-font-size, 12px);
31
+ font-feature-settings: normal;
32
+ font-variation-settings: normal;
33
+ -webkit-tap-highlight-color: transparent;
34
+ }
35
+
36
+ hr {
37
+ height: 0;
38
+ color: inherit;
39
+ border-top-width: 1px;
40
+ }
41
+
42
+ abbr:where([title]) {
43
+ -webkit-text-decoration: underline dotted;
44
+ text-decoration: underline dotted;
45
+ }
46
+
47
+ h1,
48
+ h2,
49
+ h3,
50
+ h4,
51
+ h5,
52
+ h6 {
53
+ font-size: inherit;
54
+ font-weight: inherit;
55
+ }
56
+
57
+ a {
58
+ color: inherit;
59
+ text-decoration: inherit;
60
+ }
61
+
62
+ b,
63
+ strong {
64
+ font-weight: bolder;
65
+ }
66
+
67
+ code,
68
+ kbd,
69
+ pre,
70
+ samp {
71
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
72
+ font-feature-settings: normal;
73
+ font-variation-settings: normal;
74
+ font-size: 1em;
75
+ }
76
+
77
+ small {
78
+ font-size: 80%;
79
+ }
80
+
81
+ sub,
82
+ sup {
83
+ font-size: 75%;
84
+ line-height: 0;
85
+ position: relative;
86
+ vertical-align: baseline;
87
+ }
88
+
89
+ sub {
90
+ bottom: -.25em;
91
+ }
92
+
93
+ sup {
94
+ top: -.5em;
95
+ }
96
+
97
+ table {
98
+ text-indent: 0;
99
+ border-color: inherit;
100
+ border-collapse: collapse;
101
+ }
102
+
103
+ button,
104
+ input,
105
+ optgroup,
106
+ select,
107
+ textarea {
108
+ font-family: inherit;
109
+ font-feature-settings: inherit;
110
+ font-variation-settings: inherit;
111
+ font-size: 100%;
112
+ font-weight: inherit;
113
+ line-height: inherit;
114
+ letter-spacing: inherit;
115
+ color: inherit;
116
+ margin: 0;
117
+ padding: 0;
118
+ }
119
+
120
+ button,
121
+ select {
122
+ text-transform: none;
123
+ }
124
+
125
+ button,
126
+ input:where([type=button]),
127
+ input:where([type=reset]),
128
+ input:where([type=submit]) {
129
+ -webkit-appearance: button;
130
+ background-color: transparent;
131
+ background-image: none;
132
+ }
133
+
134
+ :-moz-focusring {
135
+ outline: auto;
136
+ }
137
+
138
+ :-moz-ui-invalid {
139
+ box-shadow: none;
140
+ }
141
+
142
+ progress {
143
+ vertical-align: baseline;
144
+ }
145
+
146
+ ::-webkit-inner-spin-button,
147
+ ::-webkit-outer-spin-button {
148
+ height: auto;
149
+ }
150
+
151
+ [type=search] {
152
+ -webkit-appearance: textfield;
153
+ outline-offset: -2px;
154
+ }
155
+
156
+ ::-webkit-search-decoration {
157
+ -webkit-appearance: none;
158
+ }
159
+
160
+ ::-webkit-file-upload-button {
161
+ -webkit-appearance: button;
162
+ font: inherit;
163
+ }
164
+
165
+ summary {
166
+ display: list-item;
167
+ }
168
+
169
+ blockquote,
170
+ dd,
171
+ dl,
172
+ figure,
173
+ h1,
174
+ h2,
175
+ h3,
176
+ h4,
177
+ h5,
178
+ h6,
179
+ hr,
180
+ p,
181
+ pre {
182
+ margin: 0;
183
+ }
184
+
185
+ fieldset {
186
+ margin: 0;
187
+ padding: 0;
188
+ }
189
+
190
+ legend {
191
+ padding: 0;
192
+ }
193
+
194
+ menu,
195
+ ol,
196
+ ul {
197
+ list-style: none;
198
+ margin: 0;
199
+ padding: 0;
200
+ }
201
+
202
+ dialog {
203
+ padding: 0;
204
+ }
205
+
206
+ textarea {
207
+ resize: vertical;
208
+ }
209
+
210
+ input::placeholder,
211
+ textarea::placeholder {
212
+ opacity: 1;
213
+ color: #9ca3af;
214
+ }
215
+
216
+ [role=button],
217
+ button {
218
+ cursor: pointer;
219
+ }
220
+
221
+ :disabled {
222
+ cursor: default;
223
+ }
224
+
225
+ audio,
226
+ canvas,
227
+ embed,
228
+ iframe,
229
+ img,
230
+ object,
231
+ svg,
232
+ video {
233
+ display: block;
234
+ vertical-align: middle;
235
+ }
236
+
237
+ img,
238
+ video {
239
+ max-width: 100%;
240
+ height: auto;
241
+ }
242
+
243
+ [hidden]:where(:not([hidden=until-found])) {
244
+ display: none;
245
+ }
246
+
247
+ /**
248
+ * Radix poppers (tooltips/dropdowns) portaled INSIDE the shell shadow root
249
+ * must stack above the shell layer (mirrors the document-level rule in
250
+ * base.css).
251
+ */
252
+ div[data-radix-popper-content-wrapper] {
253
+ z-index: calc(var(--platform-shell-layer) + 10) !important;
254
+ }
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@bluealba/pae-design-tokens",
3
+ "description": "Blue Alba Platform design tokens, cascade layer contract and base styles",
4
+ "version": "0.0.0-integration-css.403",
5
+ "main": "./dist/platform-tokens.css",
6
+ "files": [
7
+ "dist",
8
+ "src"
9
+ ],
10
+ "exports": {
11
+ ".": "./dist/platform-tokens.css",
12
+ "./platform-tokens.css": "./dist/platform-tokens.css",
13
+ "./shell-reset.css": "./dist/shell-reset.css",
14
+ "./layer-order.css": "./src/layer-order.css",
15
+ "./tokens.css": "./src/tokens.css",
16
+ "./base.css": "./src/base.css"
17
+ },
18
+ "scripts": {
19
+ "build": "node ./scripts/build.mjs",
20
+ "clean": "rm -rf dist",
21
+ "prebuild": "npm run clean"
22
+ },
23
+ "keywords": [],
24
+ "author": "Blue Alba",
25
+ "license": "PolyForm-Noncommercial-1.0.0",
26
+ "publishConfig": {
27
+ "@bluealba:registry": "https://registry.npmjs.org/",
28
+ "access": "public"
29
+ }
30
+ }
package/src/base.css ADDED
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Platform document base + defensive defaults.
3
+ *
4
+ * Everything here lives in @layer pae.base, so:
5
+ * - a micro-frontend that owns its tree (e.g. Tailwind v4, whose layers are
6
+ * declared later in the document) can override these rules deliberately;
7
+ * - tenant customizations (@layer pae.customization) always win.
8
+ *
9
+ * IMPORTANT: this file must NOT contain aggressive global resets. The full
10
+ * preflight-style reset only exists inside the shell shadow root
11
+ * (see shell-reset.css).
12
+ */
13
+ @layer pae.base {
14
+
15
+ /**
16
+ * Minimal document base. The shell is rendered in a shadow root and does
17
+ * not depend on these, but the document still needs a sane baseline:
18
+ * rem sizing, no default body margin and the platform font for
19
+ * micro-frontends that don't bring their own.
20
+ */
21
+ html {
22
+ font-size: var(--platform-text-base-font-size);
23
+ line-height: 1.5;
24
+ -webkit-text-size-adjust: 100%;
25
+ }
26
+
27
+ body {
28
+ margin: 0;
29
+ padding: 0;
30
+ line-height: inherit;
31
+ font-family: var(--platform-text-base-font-family);
32
+ overflow: hidden;
33
+ }
34
+
35
+ /**
36
+ * Defensive defaults for platform UI rendered in the light DOM
37
+ * (pae-ui-react-core components inside micro-frontends). Scoped to the
38
+ * [data-pae-ui] marker that initializeMicroFrontend() puts on every
39
+ * micro-frontend root, so it never leaks into arbitrary third-party DOM.
40
+ */
41
+ [data-pae-ui],
42
+ [data-pae-ui] *,
43
+ [data-pae-ui] *::before,
44
+ [data-pae-ui] *::after {
45
+ box-sizing: border-box;
46
+ }
47
+
48
+ [data-pae-ui] button,
49
+ [data-pae-ui] input,
50
+ [data-pae-ui] optgroup,
51
+ [data-pae-ui] select,
52
+ [data-pae-ui] textarea {
53
+ font-family: inherit;
54
+ font-size: 100%;
55
+ font-weight: inherit;
56
+ line-height: inherit;
57
+ letter-spacing: inherit;
58
+ color: inherit;
59
+ margin: 0;
60
+ padding: 0;
61
+ }
62
+
63
+ [data-pae-ui] button,
64
+ [data-pae-ui] select {
65
+ text-transform: none;
66
+ }
67
+
68
+ [data-pae-ui] button,
69
+ [data-pae-ui] input:where([type=button]),
70
+ [data-pae-ui] input:where([type=reset]),
71
+ [data-pae-ui] input:where([type=submit]) {
72
+ -webkit-appearance: button;
73
+ background-color: transparent;
74
+ background-image: none;
75
+ }
76
+
77
+ [data-pae-ui] button,
78
+ [data-pae-ui] [role=button] {
79
+ cursor: pointer;
80
+ }
81
+
82
+ [data-pae-ui] :disabled {
83
+ cursor: default;
84
+ }
85
+
86
+ [data-pae-ui] h1,
87
+ [data-pae-ui] h2,
88
+ [data-pae-ui] h3,
89
+ [data-pae-ui] h4,
90
+ [data-pae-ui] h5,
91
+ [data-pae-ui] h6,
92
+ [data-pae-ui] p,
93
+ [data-pae-ui] figure,
94
+ [data-pae-ui] blockquote,
95
+ [data-pae-ui] dl,
96
+ [data-pae-ui] dd,
97
+ [data-pae-ui] hr,
98
+ [data-pae-ui] pre {
99
+ margin: 0;
100
+ }
101
+
102
+ [data-pae-ui] h1,
103
+ [data-pae-ui] h2,
104
+ [data-pae-ui] h3,
105
+ [data-pae-ui] h4,
106
+ [data-pae-ui] h5,
107
+ [data-pae-ui] h6 {
108
+ font-size: inherit;
109
+ font-weight: inherit;
110
+ }
111
+
112
+ [data-pae-ui] a {
113
+ color: inherit;
114
+ text-decoration: inherit;
115
+ }
116
+
117
+ [data-pae-ui] menu,
118
+ [data-pae-ui] ol,
119
+ [data-pae-ui] ul {
120
+ list-style: none;
121
+ margin: 0;
122
+ padding: 0;
123
+ }
124
+
125
+ [data-pae-ui] img,
126
+ [data-pae-ui] svg,
127
+ [data-pae-ui] video,
128
+ [data-pae-ui] canvas,
129
+ [data-pae-ui] audio,
130
+ [data-pae-ui] iframe,
131
+ [data-pae-ui] embed,
132
+ [data-pae-ui] object {
133
+ display: block;
134
+ vertical-align: middle;
135
+ }
136
+
137
+ [data-pae-ui] img,
138
+ [data-pae-ui] video {
139
+ max-width: 100%;
140
+ height: auto;
141
+ }
142
+
143
+ [data-pae-ui] textarea {
144
+ resize: vertical;
145
+ }
146
+
147
+ [data-pae-ui] input::placeholder,
148
+ [data-pae-ui] textarea::placeholder {
149
+ opacity: 1;
150
+ color: #9ca3af;
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Radix portals (popovers/tooltips/dropdowns) attach to document.body in the
156
+ * light DOM. They must stack above the application layer. Kept outside any
157
+ * layer on purpose so third-party layered CSS cannot accidentally beat it.
158
+ */
159
+ div[data-radix-popper-content-wrapper] {
160
+ z-index: calc(var(--platform-shell-layer) + 10) !important;
161
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Platform cascade layer contract.
3
+ *
4
+ * This MUST be the first stylesheet evaluated in the document: the first
5
+ * appearance of each layer name fixes its position in the cascade, so any
6
+ * stylesheet loaded later (in any order) that targets one of these layers
7
+ * gets deterministic priority.
8
+ *
9
+ * Order (lowest to highest priority at equal specificity):
10
+ * - pae.tokens design token definitions (custom properties)
11
+ * - pae.base minimal document base + defensive defaults ([data-pae-ui])
12
+ * - pae.customization tenant/customization overrides — always wins over the above
13
+ *
14
+ * Guarantees:
15
+ * - pae.customization beats pae.tokens/pae.base regardless of load order.
16
+ * - Micro-frontend CSS placed in its own layers (e.g. Tailwind v4 layers)
17
+ * is declared later, so it wins over platform layers inside the MFE tree.
18
+ *
19
+ * NOT guaranteed:
20
+ * - Un-layered third-party CSS always beats layered CSS at equal
21
+ * specificity. The shell is immune to that via Shadow DOM, not layers.
22
+ */
23
+ @layer pae.tokens, pae.base, pae.customization;
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Shell reset.
3
+ *
4
+ * Full preflight-style reset for the platform shell. This stylesheet is ONLY
5
+ * ever injected INSIDE the shell shadow root (<pae-shell-host>), never into
6
+ * the document: inside the shadow boundary the universal selectors below only
7
+ * match shell-owned DOM, so the reset cannot leak into micro-frontends and
8
+ * micro-frontend resets cannot leak in.
9
+ *
10
+ * (Adapted from the legacy "pilar-css-base" Tailwind preflight that used to
11
+ * live inline in index.hbs; html/body rules became :host rules.)
12
+ */
13
+
14
+ *,
15
+ ::after,
16
+ ::before {
17
+ box-sizing: border-box;
18
+ border-width: 0;
19
+ border-style: solid;
20
+ border-color: #e5e7eb;
21
+ }
22
+
23
+ :host {
24
+ display: block;
25
+ line-height: 1.5;
26
+ -webkit-text-size-adjust: 100%;
27
+ -moz-tab-size: 4;
28
+ tab-size: 4;
29
+ font-family: var(--pae-shell-text-base-font-family, ui-sans-serif, system-ui, sans-serif);
30
+ font-size: var(--pae-shell-text-base-font-size, 12px);
31
+ font-feature-settings: normal;
32
+ font-variation-settings: normal;
33
+ -webkit-tap-highlight-color: transparent;
34
+ }
35
+
36
+ hr {
37
+ height: 0;
38
+ color: inherit;
39
+ border-top-width: 1px;
40
+ }
41
+
42
+ abbr:where([title]) {
43
+ -webkit-text-decoration: underline dotted;
44
+ text-decoration: underline dotted;
45
+ }
46
+
47
+ h1,
48
+ h2,
49
+ h3,
50
+ h4,
51
+ h5,
52
+ h6 {
53
+ font-size: inherit;
54
+ font-weight: inherit;
55
+ }
56
+
57
+ a {
58
+ color: inherit;
59
+ text-decoration: inherit;
60
+ }
61
+
62
+ b,
63
+ strong {
64
+ font-weight: bolder;
65
+ }
66
+
67
+ code,
68
+ kbd,
69
+ pre,
70
+ samp {
71
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
72
+ font-feature-settings: normal;
73
+ font-variation-settings: normal;
74
+ font-size: 1em;
75
+ }
76
+
77
+ small {
78
+ font-size: 80%;
79
+ }
80
+
81
+ sub,
82
+ sup {
83
+ font-size: 75%;
84
+ line-height: 0;
85
+ position: relative;
86
+ vertical-align: baseline;
87
+ }
88
+
89
+ sub {
90
+ bottom: -.25em;
91
+ }
92
+
93
+ sup {
94
+ top: -.5em;
95
+ }
96
+
97
+ table {
98
+ text-indent: 0;
99
+ border-color: inherit;
100
+ border-collapse: collapse;
101
+ }
102
+
103
+ button,
104
+ input,
105
+ optgroup,
106
+ select,
107
+ textarea {
108
+ font-family: inherit;
109
+ font-feature-settings: inherit;
110
+ font-variation-settings: inherit;
111
+ font-size: 100%;
112
+ font-weight: inherit;
113
+ line-height: inherit;
114
+ letter-spacing: inherit;
115
+ color: inherit;
116
+ margin: 0;
117
+ padding: 0;
118
+ }
119
+
120
+ button,
121
+ select {
122
+ text-transform: none;
123
+ }
124
+
125
+ button,
126
+ input:where([type=button]),
127
+ input:where([type=reset]),
128
+ input:where([type=submit]) {
129
+ -webkit-appearance: button;
130
+ background-color: transparent;
131
+ background-image: none;
132
+ }
133
+
134
+ :-moz-focusring {
135
+ outline: auto;
136
+ }
137
+
138
+ :-moz-ui-invalid {
139
+ box-shadow: none;
140
+ }
141
+
142
+ progress {
143
+ vertical-align: baseline;
144
+ }
145
+
146
+ ::-webkit-inner-spin-button,
147
+ ::-webkit-outer-spin-button {
148
+ height: auto;
149
+ }
150
+
151
+ [type=search] {
152
+ -webkit-appearance: textfield;
153
+ outline-offset: -2px;
154
+ }
155
+
156
+ ::-webkit-search-decoration {
157
+ -webkit-appearance: none;
158
+ }
159
+
160
+ ::-webkit-file-upload-button {
161
+ -webkit-appearance: button;
162
+ font: inherit;
163
+ }
164
+
165
+ summary {
166
+ display: list-item;
167
+ }
168
+
169
+ blockquote,
170
+ dd,
171
+ dl,
172
+ figure,
173
+ h1,
174
+ h2,
175
+ h3,
176
+ h4,
177
+ h5,
178
+ h6,
179
+ hr,
180
+ p,
181
+ pre {
182
+ margin: 0;
183
+ }
184
+
185
+ fieldset {
186
+ margin: 0;
187
+ padding: 0;
188
+ }
189
+
190
+ legend {
191
+ padding: 0;
192
+ }
193
+
194
+ menu,
195
+ ol,
196
+ ul {
197
+ list-style: none;
198
+ margin: 0;
199
+ padding: 0;
200
+ }
201
+
202
+ dialog {
203
+ padding: 0;
204
+ }
205
+
206
+ textarea {
207
+ resize: vertical;
208
+ }
209
+
210
+ input::placeholder,
211
+ textarea::placeholder {
212
+ opacity: 1;
213
+ color: #9ca3af;
214
+ }
215
+
216
+ [role=button],
217
+ button {
218
+ cursor: pointer;
219
+ }
220
+
221
+ :disabled {
222
+ cursor: default;
223
+ }
224
+
225
+ audio,
226
+ canvas,
227
+ embed,
228
+ iframe,
229
+ img,
230
+ object,
231
+ svg,
232
+ video {
233
+ display: block;
234
+ vertical-align: middle;
235
+ }
236
+
237
+ img,
238
+ video {
239
+ max-width: 100%;
240
+ height: auto;
241
+ }
242
+
243
+ [hidden]:where(:not([hidden=until-found])) {
244
+ display: none;
245
+ }
246
+
247
+ /**
248
+ * Radix poppers (tooltips/dropdowns) portaled INSIDE the shell shadow root
249
+ * must stack above the shell layer (mirrors the document-level rule in
250
+ * base.css).
251
+ */
252
+ div[data-radix-popper-content-wrapper] {
253
+ z-index: calc(var(--platform-shell-layer) + 10) !important;
254
+ }