@fest-lib/fl-ui 0.1.1

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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/assets/OPFS.uniform.worker-Ddx6J_37.js +2982 -0
  4. package/dist/fl-ui.js +16004 -0
  5. package/dist/font-registry-BWosB92f.js +271 -0
  6. package/package.json +104 -0
  7. package/src/styles/font-loader.ts +224 -0
  8. package/src/styles/font-registry.ts +275 -0
  9. package/src/styles/fonts/_index.scss +8 -0
  10. package/src/styles/fonts/_inter.scss +171 -0
  11. package/src/styles/index.scss +2 -0
  12. package/src/styles/index.ts +33 -0
  13. package/src/styles/layers.scss +1 -0
  14. package/src/styles/patch-global-native-controls.scss +13 -0
  15. package/src/styles/scripts/encode-fonts.ts +172 -0
  16. package/src/styles/skins/thin/Thin.ts +13 -0
  17. package/src/styles/ui/_bar.scss +271 -0
  18. package/src/styles/ui/_buttons.scss +215 -0
  19. package/src/styles/ui/_color.scss +3 -0
  20. package/src/styles/ui/_colorize.scss +5 -0
  21. package/src/styles/ui/_content.scss +169 -0
  22. package/src/styles/ui/_essentials-options.scss +2 -0
  23. package/src/styles/ui/_essentials.scss +705 -0
  24. package/src/styles/ui/_explorer-content.scss +362 -0
  25. package/src/styles/ui/_explorer.scss +237 -0
  26. package/src/styles/ui/_forms-bare-host-elements.scss +25 -0
  27. package/src/styles/ui/_forms-options.scss +2 -0
  28. package/src/styles/ui/_forms.scss +280 -0
  29. package/src/styles/ui/_forms_misc.scss +201 -0
  30. package/src/styles/ui/_gridbox.scss +298 -0
  31. package/src/styles/ui/_home-host.scss +179 -0
  32. package/src/styles/ui/_index.scss +22 -0
  33. package/src/styles/ui/_launcher-typography.scss +31 -0
  34. package/src/styles/ui/_layers.scss +48 -0
  35. package/src/styles/ui/_layout.scss +3 -0
  36. package/src/styles/ui/_markdown.scss +1636 -0
  37. package/src/styles/ui/_modal.scss +258 -0
  38. package/src/styles/ui/_motion.scss +3 -0
  39. package/src/styles/ui/_native-host-button-chrome.scss +31 -0
  40. package/src/styles/ui/_orientation-functions.scss +274 -0
  41. package/src/styles/ui/_orientbox.scss +97 -0
  42. package/src/styles/ui/_scrollbar.scss +257 -0
  43. package/src/styles/ui/_shared-overlays.scss +16 -0
  44. package/src/styles/ui/_sidebar.scss +477 -0
  45. package/src/styles/ui/_speed-dial.scss +47 -0
  46. package/src/styles/ui/_tables.scss +28 -0
  47. package/src/styles/ui/_tabs.scss +406 -0
  48. package/src/styles/ui/_taskbar.scss +215 -0
  49. package/src/styles/ui/_toolbars.scss +165 -0
  50. package/src/styles/ui/_typography.scss +11 -0
  51. package/src/styles/ui/_utils.scss +8 -0
  52. package/src/styles/ui/_variables.scss +45 -0
  53. package/src/styles/ui/_viewport.scss +469 -0
  54. package/src/styles/ui/_window-frame.scss +658 -0
  55. package/src/styles/ui/home-host-apply.scss +10 -0
@@ -0,0 +1,298 @@
1
+ @use "../lib/core/interact/viewport" as *;
2
+
3
+ //
4
+ @property --item-size {
5
+ syntax: "<length-percentage>";
6
+ inherits: true;
7
+ initial-value: 100%;
8
+ }
9
+
10
+ //
11
+ @layer ux-gridbox {
12
+
13
+ //
14
+ .ui-gridlayout {
15
+ @include compute_orient_grid_layout();
16
+
17
+ //
18
+ & {
19
+ --c-gap: clamp(min(1rem, 8cqmin), min(calc(8cqmin / min(var(--layout-c, 4), var(--layout-r, 8))), calc(6cqmax / max(var(--layout-c, 4), var(--layout-r, 8)))), min(4rem, 16cqmin));
20
+ --r-gap: clamp(min(1rem, 8cqmin), min(calc(8cqmin / min(var(--layout-c, 4), var(--layout-r, 8))), calc(6cqmax / max(var(--layout-c, 4), var(--layout-r, 8)))), min(4rem, 16cqmin));
21
+ --sd-inherit-layout-c: var(--layout-c, 4);
22
+ --sd-inherit-layout-r: var(--layout-r, 8);
23
+ --sd-inherit-cs-layout-c: var(--cs-layout-c, var(--layout-c, 4));
24
+ --sd-inherit-cs-layout-r: var(--cs-layout-r, var(--layout-r, 8));
25
+ }
26
+
27
+ //
28
+ & {
29
+ //display: block flow;
30
+ display: block grid !important;
31
+ position: relative !important;
32
+
33
+ //
34
+ container-name: u2-grid;
35
+
36
+ //
37
+ zoom: 1;
38
+ direction: ltr;
39
+
40
+ //
41
+ pointer-events: none !important;
42
+ background-color: transparent;
43
+
44
+ //
45
+ inline-size: stretch;
46
+ block-size: stretch;
47
+
48
+ // for correct working of grid items
49
+ container-type: normal !important;
50
+ overflow: visible !important;
51
+ contain: none !important;
52
+ padding: 0px !important;
53
+ gap: 0px !important;
54
+
55
+ //
56
+ max-inline-size: min(100%, min(100cqi, 100dvi)) !important;
57
+ max-block-size: min(100%, min(100cqb, 100dvb)) !important;
58
+ box-sizing: border-box !important;
59
+
60
+ //
61
+ grid-template-columns: repeat(round(nearest, var(--cs-layout-c, 4), 1), minmax(0px, 1fr)) !important;
62
+ grid-template-rows: repeat(round(nearest, var(--cs-layout-r, 8), 1), minmax(0px, 1fr)) !important;
63
+
64
+ //
65
+ /*justify-content: safe start !important;
66
+ align-content: safe start !important;
67
+ justify-items: safe start !important;
68
+ align-items: safe start !important;*/
69
+
70
+ place-content: center !important;
71
+ place-items: center !important;
72
+ text-align: center !important;
73
+
74
+ //
75
+ grid-row: 1 / -1;
76
+ grid-column: 1 / -1;
77
+ }
78
+
79
+ //
80
+ /* WHY: Exclude launcher label captions (`[data-layer="labels"]`) — `aspect-ratio: 1/1` on `span` mis-sizes ellipsis pills. */
81
+ .ui-ws-item:not([data-layer="labels"]) span {
82
+ pointer-events: none;
83
+ aspect-ratio: 1 / 1;
84
+ inline-size: fit-content;
85
+ block-size: fit-content;
86
+ display: inline;
87
+ }
88
+
89
+ .ui-ws-item {
90
+ cursor: pointer;
91
+ user-select: none;
92
+ pointer-events: auto;
93
+
94
+ &:active,
95
+ &:has(:active) {
96
+ will-change: inset, translate, transform, opacity, z-index;
97
+ cursor: grabbing;
98
+ }
99
+ }
100
+
101
+ //
102
+ & > :where(*) {
103
+ @include compute_grid_item_cell();
104
+ --f-col: clamp(1, var(--sd-inherit-layout-c, var(--layout-c, 4)), 16);
105
+ --f-row: clamp(1, var(--sd-inherit-layout-r, var(--layout-r, 8)), 16);
106
+
107
+ // calculate visible size
108
+ & { --item-size: clamp(4rem, calc(100cqmax / min(var(--sd-inherit-cs-layout-c, var(--cs-layout-c, 4)), var(--sd-inherit-cs-layout-r, var(--cs-layout-r, 8)))), 5rem); }
109
+ & :where(*) {--drag-x: 0; --drag-y: 0; }
110
+
111
+ // dragging coordinate
112
+ & {
113
+ --drag-x: 0; --cs-drag-x: calc(var(--drag-x, 0) * 1px);
114
+ --drag-y: 0; --cs-drag-y: calc(var(--drag-y, 0) * 1px);
115
+ }
116
+
117
+ //
118
+ &:active, &:has(:active), *:active {
119
+ will-change: transform;
120
+ }
121
+
122
+ //
123
+ & {
124
+ grid-column: clamp(1, calc(1 + round(nearest, var(--cs-grid-c, 0), 1)), var(--sd-inherit-cs-layout-c, var(--cs-layout-c, 4))) !important;
125
+ grid-row: clamp(1, calc(1 + round(nearest, var(--cs-grid-r, 0), 1)), var(--sd-inherit-cs-layout-r, var(--cs-layout-r, 8))) !important;
126
+ cursor: pointer;
127
+
128
+ //
129
+ position: relative !important;
130
+ z-index: 1;
131
+ transform-origin: 50% 50% !important;
132
+ transform:
133
+ translate3d(
134
+ round(nearest, calc(var(--cs-drag-x, 0px) + var(--cs-transition-c, 0px)), calc(1px / var(--pixel-ratio, 1))),
135
+ round(nearest, calc(var(--cs-drag-y, 0px) + var(--cs-transition-r, 0px)), calc(1px / var(--pixel-ratio, 1))),
136
+ 0px)
137
+ scale3d(var(--scale, 1), var(--scale, 1), var(--scale, 1))
138
+ translate3d(
139
+ round(nearest, var(--translate-x, 0px), calc(1px / var(--pixel-ratio, 1))),
140
+ round(nearest, var(--translate-y, 0px), calc(1px / var(--pixel-ratio, 1))),
141
+ 0px) !important;
142
+ translate: 0px 0px 0px !important;
143
+
144
+ //
145
+ inset: auto !important;
146
+ visibility: visible;
147
+
148
+ //
149
+ zoom: 1;
150
+ place-self: center !important;
151
+
152
+ //
153
+ min-inline-size: fit-content;
154
+ min-block-size: fit-content;
155
+
156
+ //
157
+ inline-size: var(--item-size, stretch);
158
+ block-size: var(--item-size, stretch);
159
+
160
+ //
161
+ max-inline-size: var(--item-size, stretch);
162
+ max-block-size: var(--item-size, stretch);
163
+
164
+ //
165
+ pointer-events: none;
166
+ touch-action: none;
167
+ user-select: none;
168
+ -webkit-user-drag: none;
169
+ -moz-user-drag: none;
170
+
171
+ //
172
+ overflow: visible;
173
+ contain: none;
174
+ isolation: isolate;
175
+
176
+ //
177
+ border: none 0px transparent;
178
+ outline: none 0px transparent;
179
+ }
180
+
181
+ //
182
+ &, & > *, & span {
183
+ --drag-distance: clamp(0, hypot(var(--dir-x, 0), var(--dir-y, 0)), 6);
184
+ --drag-duration: clamp(96ms, calc(var(--drag-distance, 0) * 110ms + 70ms), 360ms);
185
+ transition-behavior: allow-discrete;
186
+ transition-property: opacity, background-color, color;
187
+ transition-duration: var(--drag-duration);
188
+ transition-timing-function: cubic-bezier(0.22, 0.8, 0.3, 1);
189
+ transition-delay: 0ms;
190
+ background-image: none;
191
+
192
+ //
193
+ pointer-events: none;
194
+ border: none 0px transparent;
195
+ outline: none 0px transparent;
196
+ box-shadow: none;
197
+ touch-action: none;
198
+ filter: none;
199
+ }
200
+
201
+ //
202
+ & {
203
+ pointer-events: auto;
204
+ }
205
+
206
+ //
207
+ & span, &.span, & ui-icon, &.ui-icon, & label, &.label {
208
+ pointer-events: none;
209
+ }
210
+
211
+ //
212
+ ui-icon {
213
+ pointer-events: none;
214
+ }
215
+
216
+ //
217
+ @media (prefers-reduced-motion: reduce) {
218
+ & {
219
+ transition-duration: 0ms;
220
+ transition-timing-function: linear;
221
+ }
222
+ }
223
+
224
+ //
225
+ & > :where(*) {
226
+ inline-size: stretch;
227
+ block-size: stretch;
228
+ max-inline-size: stretch;
229
+ max-block-size: stretch;
230
+ min-inline-size: 1px;
231
+ min-block-size: 1px;
232
+ grid-column: 1 / -1;
233
+ grid-row: 1 / -1;
234
+ }
235
+ }
236
+
237
+ //
238
+ &.sd-grid--labels,
239
+ &[data-layer="labels"] {
240
+ pointer-events: none !important;
241
+ isolation: isolate;
242
+ mix-blend-mode: normal;
243
+
244
+ //
245
+ & > :where(*) {
246
+ pointer-events: none;
247
+ }
248
+
249
+ //
250
+ & > :where(.ui-ws-item-label) {
251
+ display: flex;
252
+ flex-direction: column;
253
+ align-items: center;
254
+ justify-content: flex-start;
255
+ gap: clamp(0.1rem, 0.35cqmin, 0.35rem);
256
+ inline-size: 100%;
257
+ block-size: stretch;
258
+ padding-block-start: clamp(0.25rem, 0.65cqmin, 0.65rem);
259
+ color: color-mix(in oklch, var(--on-surface-color) 78%, transparent 22%);
260
+ font-size: clamp(0.65rem, 1.35cqmin, 1rem);
261
+ font-weight: 500;
262
+ text-align: center;
263
+ text-wrap: balance;
264
+ letter-spacing: 0.015em;
265
+ text-shadow:
266
+ 0 1px 2px color-mix(in oklch, var(--surface-color) 35%, transparent),
267
+ 0 0 0.35rem color-mix(in oklch, var(--surface-color) 15%, transparent);
268
+ translate: 0 calc(clamp(0.25rem, 0.65cqmin, 0.65rem) + var(--cs-sw-unit-y, 0px));
269
+
270
+ //
271
+ span {
272
+ pointer-events: none;
273
+ user-select: none;
274
+ max-inline-size: min(8ch, 100%);
275
+ opacity: clamp(0.75, 0.9, 1);
276
+ contain: layout paint; // Optimization: isolate layout/paint
277
+ content-visibility: auto; // Optimization: skip offscreen work
278
+ background-image: none;
279
+ }
280
+ }
281
+ }
282
+
283
+ //
284
+ & slot {
285
+ isolation: auto !important;
286
+ display: contents !important;
287
+ overflow: visible !important;
288
+ contain: none !important;
289
+ }
290
+
291
+ //
292
+ ::slotted(*) {
293
+ direction: inherit;
294
+ writing-mode: inherit;
295
+ }
296
+ }
297
+ }
298
+
@@ -0,0 +1,179 @@
1
+ // HomeView host + optional shell integration (environment-shell, window-frame).
2
+ // Loaded via adopted SpeedDial.scss — no dependency on `environment-shell/scss/*`.
3
+ //
4
+ // WHY: Shared demo mounts into `#app` with no intrinsic height; `%` + `min-block-size: 0` + abs
5
+ // `.speed-dial-root` collapses the grid. Use `min-block-size: 100dvb` unless flex-mounted (`.wf-mounted-view`).
6
+
7
+ $bp-desktop-min: 641px;
8
+
9
+ @mixin home-view-host-styles {
10
+ :where(body):has([data-view="home"]) {
11
+ margin: 0;
12
+ min-block-size: 100dvb;
13
+ }
14
+
15
+ /* Typical view demo: `<main id="app">` + direct home root */
16
+ :where(main, [role="main"]):has(> .view-home.env-home-workspace) {
17
+ display: flex;
18
+ flex-direction: column;
19
+ min-block-size: 100dvb;
20
+ box-sizing: border-box;
21
+ border: none;
22
+ outline: none;
23
+ box-shadow: none;
24
+ background: transparent;
25
+ }
26
+
27
+ /*
28
+ * Environment shell: `#app` may be `<env-shell-container>` — `#home` sits under `.env-shell-workspace`,
29
+ * not as a direct child of the main landmark.
30
+ */
31
+ :where(env-shell-container:is([role="main"], #app)):has(
32
+ .env-shell-workspace > .view-home.env-home-workspace,
33
+ .env-shell-workspace > .env-shell-home-mount > .view-home.env-home-workspace
34
+ ) {
35
+ display: flex;
36
+ flex-direction: column;
37
+ min-block-size: 100dvb;
38
+ box-sizing: border-box;
39
+ border: none;
40
+ outline: none;
41
+ box-shadow: none;
42
+ background: transparent;
43
+ }
44
+
45
+ /* Extra-standalone: `<main>` is the only host (no wf-mounted-view on child) — nothing frames the launcher */
46
+ :where(main, [role="main"]):has(> .view-home.env-home-workspace:not(.wf-mounted-view)) {
47
+ max-inline-size: none;
48
+ margin-inline: 0;
49
+ }
50
+
51
+ :where(env-shell-container:is([role="main"], #app)):has(
52
+ .env-shell-workspace > .view-home.env-home-workspace:not(.wf-mounted-view),
53
+ .env-shell-workspace > .env-shell-home-mount > .view-home.env-home-workspace:not(.wf-mounted-view)
54
+ ) {
55
+ max-inline-size: none;
56
+ margin-inline: 0;
57
+ }
58
+
59
+ /* Backport from environment-shell: grid labels may extend past tile bounds */
60
+ .env-home-workspace {
61
+ box-sizing: border-box;
62
+ overflow: visible;
63
+ pointer-events: none;
64
+ }
65
+
66
+ .view-home.env-home-workspace {
67
+ position: relative;
68
+ display: grid;
69
+ grid-template-columns: minmax(0, 1fr);
70
+ grid-template-rows: minmax(0, 1fr);
71
+ align-items: stretch;
72
+ justify-items: stretch;
73
+ inline-size: 100%;
74
+ min-inline-size: 0;
75
+ min-block-size: 100dvb;
76
+ padding: 0;
77
+ overflow: visible;
78
+ background: transparent;
79
+ box-sizing: border-box;
80
+ pointer-events: none;
81
+
82
+ & > .speed-dial-root {
83
+ position: absolute;
84
+ inset: 0;
85
+ inline-size: 100%;
86
+ block-size: 100%;
87
+ max-inline-size: 100%;
88
+ max-block-size: 100%;
89
+ pointer-events: none;
90
+ }
91
+ }
92
+
93
+ /*
94
+ * Flex / framed mount — parent supplies block size (`env-shell-workspace`, `wf-view-host`).
95
+ * INVARIANT: `min-block-size: 0` so flex `1fr` tracks do not overflow the shell.
96
+ */
97
+ .env-shell-workspace > .view-home.env-home-workspace.wf-mounted-view,
98
+ .env-shell-workspace > .env-shell-home-mount > .view-home.env-home-workspace.wf-mounted-view,
99
+ .wf-view-host > .view-home.env-home-workspace.wf-mounted-view {
100
+ margin: 0;
101
+ margin-inline: 0;
102
+ max-inline-size: none;
103
+ flex: 1 1 auto;
104
+ align-self: stretch;
105
+ min-block-size: 0;
106
+ block-size: auto;
107
+ position: relative;
108
+ z-index: 0;
109
+ isolation: isolate;
110
+ border: none !important;
111
+ outline: none !important;
112
+ border-radius: 0 !important;
113
+ box-shadow: none !important;
114
+ background: transparent !important;
115
+ backdrop-filter: none !important;
116
+ -webkit-backdrop-filter: none !important;
117
+ }
118
+
119
+ .env-shell-workspace > .view-home.env-home-workspace.wf-mounted-view > .speed-dial-root,
120
+ .env-shell-workspace > .env-shell-home-mount > .view-home.env-home-workspace.wf-mounted-view > .speed-dial-root,
121
+ .wf-view-host > .view-home.env-home-workspace.wf-mounted-view > .speed-dial-root {
122
+ flex: 1 1 auto;
123
+ min-block-size: 0;
124
+ block-size: 100%;
125
+ inline-size: 100%;
126
+ border-radius: 0 !important;
127
+ outline: none !important;
128
+ border: none !important;
129
+ box-shadow: none !important;
130
+ }
131
+
132
+ /* Fixed bottom chrome (optional): `.env-shell-root` may set `--env-shell-chrome-stack-reserve`. */
133
+ .env-shell-workspace > .view-home.env-home-workspace.wf-mounted-view,
134
+ .env-shell-workspace > .env-shell-home-mount > .view-home.env-home-workspace.wf-mounted-view {
135
+ padding-inline-start: env(safe-area-inset-inline-start, 0);
136
+ padding-inline-end: env(safe-area-inset-inline-end, 0);
137
+ /* Prefer overlay status inset when present (covers notch); else safe-area only. */
138
+ padding-block-start: env(safe-area-inset-block-start, 0);
139
+ padding-block-end: env(safe-area-inset-block-end, 0px);
140
+ }
141
+
142
+ /* NOTE: `--env-shell-chrome-stack-reserve` already includes mobile safe-area via root; avoid double-adding. */
143
+ .env-shell-root:has(> .env-shell-chrome) .env-shell-workspace > .view-home.env-home-workspace.wf-mounted-view,
144
+ .env-shell-root:has(> .env-shell-chrome)
145
+ .env-shell-workspace
146
+ > .env-shell-home-mount
147
+ > .view-home.env-home-workspace.wf-mounted-view {
148
+ /*padding-block-end: var(--env-shell-chrome-stack-reserve, 3rem);*/
149
+ }
150
+
151
+ @media (min-width: $bp-desktop-min) {
152
+ .env-shell-root:has(> .env-shell-chrome) .env-shell-workspace > .view-home.env-home-workspace.wf-mounted-view,
153
+ .env-shell-root:has(> .env-shell-chrome)
154
+ .env-shell-workspace
155
+ > .env-shell-home-mount
156
+ > .view-home.env-home-workspace.wf-mounted-view {
157
+ /*padding-block-end: calc(
158
+ var(--env-shell-chrome-stack-reserve, 7.5rem) + env(safe-area-inset-block-end, 0px)
159
+ );*/
160
+ }
161
+ }
162
+
163
+ /*
164
+ * Standalone test/demo (no `wf-mounted-view`): full-bleed, no “desk” card — avoid inset borders / shadows
165
+ * that read as a framed panel (see shared Vite demo on desktop).
166
+ */
167
+ .view-home.env-home-workspace:not(.wf-mounted-view) {
168
+ max-inline-size: none;
169
+ margin-inline: 0;
170
+ border-radius: 0 !important;
171
+ border: none !important;
172
+ outline: none !important;
173
+ box-shadow: none !important;
174
+ background: transparent !important;
175
+ backdrop-filter: none !important;
176
+ -webkit-backdrop-filter: none !important;
177
+ min-block-size: 100dvb;
178
+ }
179
+ }
@@ -0,0 +1,22 @@
1
+ // Core mixins/tokens for fl.ui (extend in full checkout).
2
+ @use "./variables" as *;
3
+ @use "./essentials" as *;
4
+ @use "./forms" as *;
5
+ @use "./core-layout" as *;
6
+ @use "./orientation-functions" as *;
7
+ @use "./orientbox" as *;
8
+ @use "./gridbox" as *;
9
+ @use "./speed-dial" as *;
10
+ @use "./shared" as *;
11
+ @use "./states" as *;
12
+ @use "./normalize" as *;
13
+
14
+
15
+ @forward "./scrollbar";
16
+ @forward "./layers";
17
+ @forward "./content";
18
+ @forward "./sidebar";
19
+ @forward "./tabs";
20
+ @forward "./bar";
21
+ @forward "./home-host";
22
+ @forward "./launcher-typography";
@@ -0,0 +1,31 @@
1
+ // Launcher / SpeedDial typography (system stack — no separate font files required).
2
+ // Optional host override: set `--home-font-sans` on `:root`, `.view-home`, or `.speed-dial-root`.
3
+
4
+ @mixin home-launcher-typography {
5
+ .speed-dial-root.app-oriented-desktop,
6
+ .speed-dial-root {
7
+ --home-font-sans:
8
+ system-ui,
9
+ -apple-system,
10
+ "Segoe UI",
11
+ Roboto,
12
+ "Noto Sans",
13
+ "Helvetica Neue",
14
+ Arial,
15
+ "Apple Color Emoji",
16
+ "Segoe UI Emoji",
17
+ sans-serif;
18
+
19
+ font-family: var(--home-font-sans);
20
+ -webkit-font-smoothing: antialiased;
21
+ -moz-osx-font-smoothing: grayscale;
22
+ text-rendering: optimizeLegibility;
23
+
24
+ /*
25
+ * `ui-orientbox` can set `pointer-events: none`; label text still inherits these for metrics
26
+ * when painted from the caption layer.
27
+ */
28
+ font-kerning: normal;
29
+ font-variant-numeric: tabular-nums;
30
+ }
31
+ }
@@ -0,0 +1,48 @@
1
+ // Underlying / overlaying visual contracts for sibling layers.
2
+
3
+ @mixin underlying-layer {
4
+ position: absolute;
5
+ pointer-events: none;
6
+ overflow: visible;
7
+ inset: 0;
8
+ z-index: calc(var(--layer-main-z, 0) - 1);
9
+ }
10
+
11
+ @mixin overlaying-layer {
12
+ position: absolute;
13
+ inset: 0;
14
+ pointer-events: none; // chrome children re-enable
15
+ z-index: calc(var(--layer-main-z, 0) + 1);
16
+ }
17
+
18
+ @mixin shaped-from-main {
19
+ border-radius: var(--layer-shape-radius, inherit);
20
+ mask-image: var(--layer-shape-mask, none);
21
+ -webkit-mask-image: var(--layer-shape-mask, none);
22
+ inline-size: 100%;
23
+ block-size: 100%;
24
+
25
+ @supports (border-shape: inset(0)) {
26
+ border-shape: var(--layer-shape-clip, none);
27
+ }
28
+
29
+ @supports not (border-shape: inset(0)) {
30
+ clip-path: var(--layer-shape-clip, none);
31
+ }
32
+ }
33
+
34
+ .c-underlying {
35
+ @include underlying-layer;
36
+ }
37
+
38
+ .c-underlying__shaped {
39
+ @include shaped-from-main;
40
+ }
41
+
42
+ .c-overlaying {
43
+ @include overlaying-layer;
44
+ }
45
+
46
+ .c-overlaying [data-axis] {
47
+ pointer-events: auto;
48
+ }
@@ -0,0 +1,3 @@
1
+ @mixin container-query($name) {
2
+ @content;
3
+ }