@pacem/pacem-theme-css 0.0.0-stage → 2.0.0-abel

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 (153) hide show
  1. package/LICENSE +191 -0
  2. package/NOTICE +4 -0
  3. package/README.md +142 -3
  4. package/cli.js +26 -0
  5. package/pacem-themes.json +10 -0
  6. package/package.json +45 -6
  7. package/src/2d/index.css +44 -0
  8. package/src/3d/index.css +49 -0
  9. package/src/base/animations.css +82 -0
  10. package/src/base/attributes.css +19 -0
  11. package/src/base/backgrounds.css +37 -0
  12. package/src/base/body.css +199 -0
  13. package/src/base/content.css +4 -0
  14. package/src/base/icons.css +74 -0
  15. package/src/base/logging.css +5 -0
  16. package/src/base/overrides.css +3 -0
  17. package/src/base/preloader.css +17 -0
  18. package/src/base/reset.css +50 -0
  19. package/src/base/shell.css +3 -0
  20. package/src/base/text.css +184 -0
  21. package/src/basic/index.css +285 -0
  22. package/src/charts/generated/colors.css +49 -0
  23. package/src/charts/index.css +573 -0
  24. package/src/fx/index.css +230 -0
  25. package/src/layout/address.css +46 -0
  26. package/src/layout/animations.css +33 -0
  27. package/src/layout/borders.css +63 -0
  28. package/src/layout/box.css +271 -0
  29. package/src/layout/breadcrumbs.css +114 -0
  30. package/src/layout/cards.css +246 -0
  31. package/src/layout/coloring.css +862 -0
  32. package/src/layout/container.css +40 -0
  33. package/src/layout/corners.css +52 -0
  34. package/src/layout/datatable.css +324 -0
  35. package/src/layout/elevation.css +73 -0
  36. package/src/layout/fetch-feedback.css +125 -0
  37. package/src/layout/generated/borders.css +403 -0
  38. package/src/layout/generated/card-ribbon.css +94 -0
  39. package/src/layout/generated/card-sides.css +888 -0
  40. package/src/layout/generated/grid-system.css +308 -0
  41. package/src/layout/generated/grids.css +952 -0
  42. package/src/layout/generated/layout-stretch.css +132 -0
  43. package/src/layout/generated/positioning.css +323 -0
  44. package/src/layout/generated/sizing.css +478 -0
  45. package/src/layout/generated/spacing.css +1988 -0
  46. package/src/layout/generated/visibility.css +384 -0
  47. package/src/layout/grid-system.css +49 -0
  48. package/src/layout/grids.css +92 -0
  49. package/src/layout/index.css +39 -0
  50. package/src/layout/interactive.css +11 -0
  51. package/src/layout/layout.css +479 -0
  52. package/src/layout/lists.css +104 -0
  53. package/src/layout/other.css +25 -0
  54. package/src/layout/panels.css +337 -0
  55. package/src/layout/positioning.css +108 -0
  56. package/src/layout/scroll.css +85 -0
  57. package/src/layout/shapes.css +20 -0
  58. package/src/layout/shell.css +3 -0
  59. package/src/layout/sizing.css +25 -0
  60. package/src/layout/spacing.css +17 -0
  61. package/src/layout/superposition-system.css +116 -0
  62. package/src/layout/tokens-chips.css +15 -0
  63. package/src/layout/toolbar.css +30 -0
  64. package/src/layout/typography.css +106 -0
  65. package/src/layout/visibility.css +231 -0
  66. package/src/maps/index.css +20 -0
  67. package/src/media/index.css +6 -0
  68. package/src/media.css +18 -0
  69. package/src/pacem-content.css +24 -0
  70. package/src/pacem-shell.css +14 -0
  71. package/src/pacem.css +35 -0
  72. package/src/plus/carousel.css +327 -0
  73. package/src/plus/datagrid.css +68 -0
  74. package/src/plus/gallery.css +186 -0
  75. package/src/plus/icons.css +25 -0
  76. package/src/plus/index.css +7 -0
  77. package/src/plus/misc.css +194 -0
  78. package/src/scaffolding/calendar-picker.css +291 -0
  79. package/src/scaffolding/checkbox-radio.css +118 -0
  80. package/src/scaffolding/checkbox.css +200 -0
  81. package/src/scaffolding/childform.css +156 -0
  82. package/src/scaffolding/color.css +129 -0
  83. package/src/scaffolding/contenteditable.css +403 -0
  84. package/src/scaffolding/datepicker.css +126 -0
  85. package/src/scaffolding/elements.css +30 -0
  86. package/src/scaffolding/fieldset.css +346 -0
  87. package/src/scaffolding/form.css +36 -0
  88. package/src/scaffolding/formfield.css +364 -0
  89. package/src/scaffolding/generated/calendar-picker.css +40 -0
  90. package/src/scaffolding/generated/colors.css +115 -0
  91. package/src/scaffolding/generated/formfield.css +500 -0
  92. package/src/scaffolding/hierarchy.css +76 -0
  93. package/src/scaffolding/icons.css +64 -0
  94. package/src/scaffolding/image.css +195 -0
  95. package/src/scaffolding/index.css +40 -0
  96. package/src/scaffolding/input.css +163 -0
  97. package/src/scaffolding/inputs.css +77 -0
  98. package/src/scaffolding/latlng.css +173 -0
  99. package/src/scaffolding/markdown.css +14 -0
  100. package/src/scaffolding/password.css +7 -0
  101. package/src/scaffolding/pickers.css +150 -0
  102. package/src/scaffolding/radio.css +68 -0
  103. package/src/scaffolding/select.css +59 -0
  104. package/src/scaffolding/slider.css +236 -0
  105. package/src/scaffolding/snapshot.css +167 -0
  106. package/src/scaffolding/suggest.css +92 -0
  107. package/src/scaffolding/tags.css +132 -0
  108. package/src/scaffolding/textarea.css +45 -0
  109. package/src/scaffolding/upload.css +283 -0
  110. package/src/scaffolding/validators.css +29 -0
  111. package/src/tokens/colors.css +403 -0
  112. package/src/tokens/components.css +16 -0
  113. package/src/tokens/system.css +92 -0
  114. package/src/tokens/theme.css +221 -0
  115. package/src/traits.css +18 -0
  116. package/src/transforms/index.css +5 -0
  117. package/src/ui/anchor.css +55 -0
  118. package/src/ui/balloon.css +573 -0
  119. package/src/ui/binder.css +28 -0
  120. package/src/ui/blade.css +83 -0
  121. package/src/ui/bottom-sheet.css +53 -0
  122. package/src/ui/button.css +626 -0
  123. package/src/ui/calendar.css +415 -0
  124. package/src/ui/collapse.css +25 -0
  125. package/src/ui/dialog.css +230 -0
  126. package/src/ui/divider.css +42 -0
  127. package/src/ui/generated/calendar.css +363 -0
  128. package/src/ui/hidden.css +40 -0
  129. package/src/ui/icon.css +90 -0
  130. package/src/ui/image.css +140 -0
  131. package/src/ui/index.css +30 -0
  132. package/src/ui/led.css +84 -0
  133. package/src/ui/loader.css +174 -0
  134. package/src/ui/markdown.css +352 -0
  135. package/src/ui/marquee.css +41 -0
  136. package/src/ui/menu.css +386 -0
  137. package/src/ui/pager.css +133 -0
  138. package/src/ui/progressbar.css +137 -0
  139. package/src/ui/shell.css +4 -0
  140. package/src/ui/sidebar.css +103 -0
  141. package/src/ui/sticky-header.css +22 -0
  142. package/src/ui/tabs.css +355 -0
  143. package/src/ui/ticker.css +105 -0
  144. package/src/ui/timeline.css +106 -0
  145. package/src/ui/toast.css +182 -0
  146. package/src/ui/toc.css +58 -0
  147. package/src/ui/tuner.css +196 -0
  148. package/src/ui/view.css +30 -0
  149. package/src/ui/window.css +287 -0
  150. package/templates/theme.css +28 -0
  151. package/themebuilder.js +19 -0
  152. package/themes/dark.css +6 -0
  153. package/themes/light.css +97 -0
@@ -0,0 +1,53 @@
1
+ pacem-bottom-sheet-handle {
2
+ cursor: pointer;
3
+ height: var(--pacem-layout-footer-height);
4
+ display: flex;
5
+ justify-content: center;
6
+ align-items: center;
7
+ touch-action: none;
8
+
9
+ > * {
10
+ pointer-events: none;
11
+ }
12
+ }
13
+
14
+ pacem-bottom-sheet {
15
+ position: fixed;
16
+ top: 0;
17
+ left: 0;
18
+ bottom: 0;
19
+ right: 0;
20
+ overflow: hidden;
21
+ display: flex;
22
+ z-index: calc(var(--pacem-zindex-lightbox) + 1);
23
+ align-items: start;
24
+ justify-content: stretch;
25
+ pointer-events: none;
26
+
27
+ > .bottom-sheet {
28
+ pointer-events: auto;
29
+ overflow: auto;
30
+ max-height: 100vh;
31
+ width: 100%;
32
+ outline: none;
33
+ -webkit-tap-highlight-color: transparent;
34
+ transform: translate3d(0, calc(100vh - var(--pacem-layout-footer-height)), 0);
35
+ }
36
+
37
+ &.bottom-sheet-open {
38
+ pointer-events: auto;
39
+ backdrop-filter: blur(6px);
40
+
41
+ > .bottom-sheet {
42
+ transform: translate3d(0, max(var(--pacem-layout-header-height), calc(100vh - 100%)), 0);
43
+ }
44
+ }
45
+ }
46
+
47
+ .pacem-animations pacem-bottom-sheet {
48
+ transition: backdrop-filter .175s linear 0s;
49
+
50
+ > .bottom-sheet {
51
+ transition: transform .3s var(--pacem-easing-in-out-sine) 0s;
52
+ }
53
+ }
@@ -0,0 +1,626 @@
1
+ /* Buttons, in their three forms: .pacem-button, a.pacem-button and the element pacem-button.
2
+ Every rule keeps the selector list of the Less theme (`:--btns`: the three forms, `:--btn`: two of them), so that
3
+ each form keeps its own specificity: other components (context menus, buttonsets...) compete with them.
4
+ The list aliases expand into selector lists (see tools/traits.ts): they are only used in flat rules.
5
+
6
+ Colors (.ButtonColorize()): private properties assigned by the color classes
7
+ --pacem--btn background --pacem--btn-ink foreground
8
+ --pacem--btn-h background on hover --pacem--btn-ink-h foreground on hover
9
+ Glyph colors (.IconGlyphColorize()): --pacem--glyph, --pacem--glyph-h (inherited by ::before). */
10
+ @custom-selector :--btns .pacem-button, a.pacem-button, pacem-button;
11
+ @custom-selector :--btn .pacem-button, pacem-button;
12
+ @custom-selector :--colors :is(.root, .button-root, .background, .button-background, .default, .button-default,
13
+ .invert, .button-invert, .primary, .button-primary, .secondary, .button-secondary, .accent, .button-accent,
14
+ .info, .button-info, .success, .button-success, .warning, .button-warning, .danger, .button-danger, .error,
15
+ .button-error, .disabled, .button-disabled, .green, .button-green, .yellow, .button-yellow, .brown, .button-brown,
16
+ .red, .button-red, .pink, .button-pink, .blue, .button-blue, .orange, .button-orange, .purple, .button-purple,
17
+ .teal, .button-teal, .gray, .button-gray);
18
+
19
+ /* #region .button */
20
+ :--btn.button {
21
+ height: calc(var(--pacem-grid-spacing) * 1.5 - 2px);
22
+ line-height: calc(var(--pacem-grid-spacing) * 1.5 - 2px);
23
+ padding: 0 calc(var(--pacem-grid-spacing) / 1.5);
24
+ box-sizing: border-box;
25
+ cursor: pointer;
26
+ border: 1px solid transparent;
27
+ transition: all .1s linear;
28
+ border-radius: var(--pacem-border-button-radius);
29
+ }
30
+
31
+ :--btn.button.button-size {
32
+ padding: 0 calc(var(--pacem-grid-spacing) / 2);
33
+ min-width: calc(2 * (var(--pacem-grid-cell) + var(--pacem-grid-spacing) / 2));
34
+ }
35
+
36
+ /* constrained min-width */
37
+ :--btn.button.button-size.size-small {
38
+ min-width: calc(var(--pacem-grid-cell) + var(--pacem-grid-spacing));
39
+ }
40
+
41
+ /* minimal size, depends on content */
42
+ :--btn.button.button-size.size-auto {
43
+ min-width: 0;
44
+ padding: 0 0 0 calc(var(--pacem-grid-spacing) / 3);
45
+ height: var(--pacem-grid-spacing);
46
+ }
47
+
48
+ :--btn.button.button-size.size-auto[data-icon-glyph]::before {
49
+ font-size: 1rem;
50
+ line-height: var(--pacem-grid-spacing);
51
+ display: block;
52
+ }
53
+
54
+ :--btn.button.button-size.size-stretch {
55
+ min-width: 0;
56
+ padding: 0 0 0 calc(var(--pacem-grid-spacing) / 3);
57
+ height: auto;
58
+ line-height: inherit;
59
+ }
60
+
61
+ :--btn.button.button-size.size-stretch[data-icon-glyph]::before {
62
+ font-size: 1rem;
63
+ line-height: 1;
64
+ display: block;
65
+ }
66
+
67
+ :--shadows :--btn.button {
68
+ box-shadow: 0 2px calc(var(--pacem-grid-spacing) / 3) rgba(0,0,0,0.5);
69
+ }
70
+
71
+ :--gradients :--btn.button {
72
+ border-image: linear-gradient(to bottom, var(--pacem-color-button-border-light) 0, var(--pacem-color-button-border-dark) 100%) 1;
73
+ }
74
+
75
+ :--no-gradients :--btn.button {
76
+ border-top-color: var(--pacem-color-button-border-light);
77
+ border-bottom-color: var(--pacem-color-button-border);
78
+ border-right-color: var(--pacem-color-button-border);
79
+ border-left-color: var(--pacem-color-button-border);
80
+ }
81
+ /* #endregion */
82
+
83
+ /* #region base: .ButtonColorize(button) */
84
+ :--btns {
85
+ position: relative;
86
+ cursor: pointer;
87
+ display: inline-block;
88
+ vertical-align: middle;
89
+ margin: 0 calc(var(--pacem-grid-spacing) / 3) calc(var(--pacem-grid-spacing) / 3) 0;
90
+ user-select: none;
91
+ -webkit-tap-highlight-color: transparent;
92
+ background: var(--pacem-color-button-back);
93
+ color: var(--pacem-color-button-fore);
94
+ }
95
+
96
+ :--btns:hover {
97
+ color: var(--pacem-color-button-fore);
98
+ }
99
+
100
+ :--btns:is(:focus, :hover) {
101
+ background-color: var(--pacem-color-button-back-hover);
102
+ }
103
+
104
+ :--glows :--btns:is(:focus, :hover) {
105
+ text-shadow: 0 0 8px var(--pacem-color-button-fore);
106
+ }
107
+ /* #endregion */
108
+
109
+ /* #region colors */
110
+ :is(.pacem-button, pacem-button) {
111
+ &:is(.root, .button-root) { --pacem--btn: var(--pacem-color-root); --pacem--btn-ink: var(--pacem-color-root-inverse); --pacem--btn-h: var(--pacem-color-root-hover); --pacem--btn-ink-h: var(--pacem-color-root-inverse-hover); }
112
+ &:is(.background, .button-background) { --pacem--btn: var(--pacem-color-background); --pacem--btn-ink: var(--pacem-color-background-inverse); --pacem--btn-h: var(--pacem-color-background-hover); --pacem--btn-ink-h: var(--pacem-color-background-inverse-hover); }
113
+ &:is(.default, .button-default) { --pacem--btn: var(--pacem-color-default); --pacem--btn-ink: var(--pacem-color-default-inverse); --pacem--btn-h: var(--pacem-color-default-hover); --pacem--btn-ink-h: var(--pacem-color-default-inverse-hover); }
114
+ &:is(.invert, .button-invert) { --pacem--btn: var(--pacem-color-invert); --pacem--btn-ink: var(--pacem-color-invert-inverse); --pacem--btn-h: var(--pacem-color-invert-hover); --pacem--btn-ink-h: var(--pacem-color-invert-inverse-hover); }
115
+ &:is(.primary, .button-primary) { --pacem--btn: var(--pacem-color-primary); --pacem--btn-ink: var(--pacem-color-primary-inverse); --pacem--btn-h: var(--pacem-color-primary-hover); --pacem--btn-ink-h: var(--pacem-color-primary-inverse-hover); }
116
+ &:is(.secondary, .button-secondary) { --pacem--btn: var(--pacem-color-secondary); --pacem--btn-ink: var(--pacem-color-secondary-inverse); --pacem--btn-h: var(--pacem-color-secondary-hover); --pacem--btn-ink-h: var(--pacem-color-secondary-inverse-hover); }
117
+ &:is(.accent, .button-accent) { --pacem--btn: var(--pacem-color-accent); --pacem--btn-ink: var(--pacem-color-accent-inverse); --pacem--btn-h: var(--pacem-color-accent-hover); --pacem--btn-ink-h: var(--pacem-color-accent-inverse-hover); }
118
+ &:is(.info, .button-info) { --pacem--btn: var(--pacem-color-info); --pacem--btn-ink: var(--pacem-color-info-inverse); --pacem--btn-h: var(--pacem-color-info-hover); --pacem--btn-ink-h: var(--pacem-color-info-inverse-hover); }
119
+ &:is(.success, .button-success) { --pacem--btn: var(--pacem-color-success); --pacem--btn-ink: var(--pacem-color-success-inverse); --pacem--btn-h: var(--pacem-color-success-hover); --pacem--btn-ink-h: var(--pacem-color-success-inverse-hover); }
120
+ &:is(.warning, .button-warning) { --pacem--btn: var(--pacem-color-warning); --pacem--btn-ink: var(--pacem-color-warning-inverse); --pacem--btn-h: var(--pacem-color-warning-hover); --pacem--btn-ink-h: var(--pacem-color-warning-inverse-hover); }
121
+ &:is(.danger, .button-danger) { --pacem--btn: var(--pacem-color-danger); --pacem--btn-ink: var(--pacem-color-danger-inverse); --pacem--btn-h: var(--pacem-color-danger-hover); --pacem--btn-ink-h: var(--pacem-color-danger-inverse-hover); }
122
+ &:is(.error, .button-error) { --pacem--btn: var(--pacem-color-error); --pacem--btn-ink: var(--pacem-color-error-inverse); --pacem--btn-h: var(--pacem-color-error-hover); --pacem--btn-ink-h: var(--pacem-color-error-inverse-hover); }
123
+ &:is(.disabled, .button-disabled) { --pacem--btn: var(--pacem-color-disabled); --pacem--btn-ink: var(--pacem-color-disabled-inverse); --pacem--btn-h: var(--pacem-color-disabled-hover); --pacem--btn-ink-h: var(--pacem-color-disabled-inverse-hover); }
124
+ &:is(.green, .button-green) { --pacem--btn: var(--pacem-color-green); --pacem--btn-ink: var(--pacem-color-green-inverse); --pacem--btn-h: var(--pacem-color-green-hover); --pacem--btn-ink-h: var(--pacem-color-green-inverse-hover); }
125
+ &:is(.yellow, .button-yellow) { --pacem--btn: var(--pacem-color-yellow); --pacem--btn-ink: var(--pacem-color-yellow-inverse); --pacem--btn-h: var(--pacem-color-yellow-hover); --pacem--btn-ink-h: var(--pacem-color-yellow-inverse-hover); }
126
+ &:is(.brown, .button-brown) { --pacem--btn: var(--pacem-color-brown); --pacem--btn-ink: var(--pacem-color-brown-inverse); --pacem--btn-h: var(--pacem-color-brown-hover); --pacem--btn-ink-h: var(--pacem-color-brown-inverse-hover); }
127
+ &:is(.red, .button-red) { --pacem--btn: var(--pacem-color-red); --pacem--btn-ink: var(--pacem-color-red-inverse); --pacem--btn-h: var(--pacem-color-red-hover); --pacem--btn-ink-h: var(--pacem-color-red-inverse-hover); }
128
+ &:is(.pink, .button-pink) { --pacem--btn: var(--pacem-color-pink); --pacem--btn-ink: var(--pacem-color-pink-inverse); --pacem--btn-h: var(--pacem-color-pink-hover); --pacem--btn-ink-h: var(--pacem-color-pink-inverse-hover); }
129
+ &:is(.blue, .button-blue) { --pacem--btn: var(--pacem-color-blue); --pacem--btn-ink: var(--pacem-color-blue-inverse); --pacem--btn-h: var(--pacem-color-blue-hover); --pacem--btn-ink-h: var(--pacem-color-blue-inverse-hover); }
130
+ &:is(.orange, .button-orange) { --pacem--btn: var(--pacem-color-orange); --pacem--btn-ink: var(--pacem-color-orange-inverse); --pacem--btn-h: var(--pacem-color-orange-hover); --pacem--btn-ink-h: var(--pacem-color-orange-inverse-hover); }
131
+ &:is(.purple, .button-purple) { --pacem--btn: var(--pacem-color-purple); --pacem--btn-ink: var(--pacem-color-purple-inverse); --pacem--btn-h: var(--pacem-color-purple-hover); --pacem--btn-ink-h: var(--pacem-color-purple-inverse-hover); }
132
+ &:is(.teal, .button-teal) { --pacem--btn: var(--pacem-color-teal); --pacem--btn-ink: var(--pacem-color-teal-inverse); --pacem--btn-h: var(--pacem-color-teal-hover); --pacem--btn-ink-h: var(--pacem-color-teal-inverse-hover); }
133
+ &:is(.gray, .button-gray) { --pacem--btn: var(--pacem-color-gray); --pacem--btn-ink: var(--pacem-color-gray-inverse); --pacem--btn-h: var(--pacem-color-gray-hover); --pacem--btn-ink-h: var(--pacem-color-gray-inverse-hover); }
134
+
135
+ /* glyphs (any icon-glyph-* class: the size ones leave the color undefined, i.e. inherited) */
136
+ &.icon-glyph-root { --pacem--glyph: var(--pacem-color-root); --pacem--glyph-h: var(--pacem-color-root-hover); }
137
+ &.icon-glyph-background { --pacem--glyph: var(--pacem-color-background); --pacem--glyph-h: var(--pacem-color-background-hover); }
138
+ &.icon-glyph-default { --pacem--glyph: var(--pacem-color-default); --pacem--glyph-h: var(--pacem-color-default-hover); }
139
+ &.icon-glyph-invert { --pacem--glyph: var(--pacem-color-invert); --pacem--glyph-h: var(--pacem-color-invert-hover); }
140
+ &.icon-glyph-primary { --pacem--glyph: var(--pacem-color-primary); --pacem--glyph-h: var(--pacem-color-primary-hover); }
141
+ &.icon-glyph-secondary { --pacem--glyph: var(--pacem-color-secondary); --pacem--glyph-h: var(--pacem-color-secondary-hover); }
142
+ &.icon-glyph-accent { --pacem--glyph: var(--pacem-color-accent); --pacem--glyph-h: var(--pacem-color-accent-hover); }
143
+ &.icon-glyph-info { --pacem--glyph: var(--pacem-color-info); --pacem--glyph-h: var(--pacem-color-info-hover); }
144
+ &.icon-glyph-success { --pacem--glyph: var(--pacem-color-success); --pacem--glyph-h: var(--pacem-color-success-hover); }
145
+ &.icon-glyph-warning { --pacem--glyph: var(--pacem-color-warning); --pacem--glyph-h: var(--pacem-color-warning-hover); }
146
+ &.icon-glyph-danger { --pacem--glyph: var(--pacem-color-danger); --pacem--glyph-h: var(--pacem-color-danger-hover); }
147
+ &.icon-glyph-error { --pacem--glyph: var(--pacem-color-error); --pacem--glyph-h: var(--pacem-color-error-hover); }
148
+ &.icon-glyph-disabled { --pacem--glyph: var(--pacem-color-disabled); --pacem--glyph-h: var(--pacem-color-disabled-hover); }
149
+ &.icon-glyph-green { --pacem--glyph: var(--pacem-color-green); --pacem--glyph-h: var(--pacem-color-green-hover); }
150
+ &.icon-glyph-yellow { --pacem--glyph: var(--pacem-color-yellow); --pacem--glyph-h: var(--pacem-color-yellow-hover); }
151
+ &.icon-glyph-brown { --pacem--glyph: var(--pacem-color-brown); --pacem--glyph-h: var(--pacem-color-brown-hover); }
152
+ &.icon-glyph-red { --pacem--glyph: var(--pacem-color-red); --pacem--glyph-h: var(--pacem-color-red-hover); }
153
+ &.icon-glyph-pink { --pacem--glyph: var(--pacem-color-pink); --pacem--glyph-h: var(--pacem-color-pink-hover); }
154
+ &.icon-glyph-blue { --pacem--glyph: var(--pacem-color-blue); --pacem--glyph-h: var(--pacem-color-blue-hover); }
155
+ &.icon-glyph-orange { --pacem--glyph: var(--pacem-color-orange); --pacem--glyph-h: var(--pacem-color-orange-hover); }
156
+ &.icon-glyph-purple { --pacem--glyph: var(--pacem-color-purple); --pacem--glyph-h: var(--pacem-color-purple-hover); }
157
+ &.icon-glyph-teal { --pacem--glyph: var(--pacem-color-teal); --pacem--glyph-h: var(--pacem-color-teal-hover); }
158
+ &.icon-glyph-gray { --pacem--glyph: var(--pacem-color-gray); --pacem--glyph-h: var(--pacem-color-gray-hover); }
159
+ }
160
+
161
+ :--btns:--colors {
162
+ background: var(--pacem--btn);
163
+ color: var(--pacem--btn-ink);
164
+ }
165
+
166
+ :--btns:--colors:is(:focus, :hover) {
167
+ background-color: var(--pacem--btn-h);
168
+ color: var(--pacem--btn-ink-h);
169
+ }
170
+
171
+ :--glows :--btns:--colors:is(:focus, :hover) {
172
+ text-shadow: 0 0 8px var(--pacem--btn-ink);
173
+ }
174
+
175
+ :--btns[class*="icon-glyph-"][data-icon-glyph]::before {
176
+ color: var(--pacem--glyph);
177
+ }
178
+
179
+ :--btns:is(:focus, :hover)[class*="icon-glyph-"][data-icon-glyph]::before {
180
+ color: var(--pacem--glyph-h);
181
+ }
182
+
183
+ /* .ButtonColorize(highlight, highlight-fore): the color changes on hover only */
184
+ :--btns:is(.exhalt, .button-exhalt) {
185
+ background: var(--pacem-color-highlight);
186
+ color: var(--pacem-color-highlight-fore);
187
+ }
188
+
189
+ :--btns:is(.exhalt, .button-exhalt):hover {
190
+ color: var(--pacem-color-highlight-fore);
191
+ }
192
+
193
+ :--btns:is(.exhalt, .button-exhalt):is(:focus, :hover) {
194
+ background-color: hsl(from var(--pacem-color-highlight) h s min(100, l + var(--pacem-button-hover-percentage)));
195
+ }
196
+
197
+ :--light-scheme :--btns:is(.exhalt, .button-exhalt):is(:focus, :hover) {
198
+ background-color: hsl(from var(--pacem-color-highlight) h s max(0, l - var(--pacem-button-hover-percentage)));
199
+ }
200
+
201
+ :--glows :--btns:is(.exhalt, .button-exhalt):is(:focus, :hover) {
202
+ text-shadow: 0 0 8px var(--pacem-color-highlight-fore);
203
+ }
204
+
205
+ :--btns:is(.rise, .button-rise) {
206
+ box-shadow: 0 2px calc(var(--pacem-grid-spacing) / 3) rgba(0,0,0,0.5);
207
+ margin: 0 calc(var(--pacem-grid-spacing) / 3) calc(var(--pacem-grid-spacing) / 3) 0;
208
+ }
209
+ /* #endregion */
210
+
211
+ /* #region glyphs */
212
+ :--btns::before {
213
+ line-height: 1;
214
+ text-align: center;
215
+ /* .IconCore() */
216
+ font-family: var(--pacem-font-icons);
217
+ text-transform: none;
218
+ letter-spacing: normal;
219
+ word-wrap: normal;
220
+ white-space: nowrap;
221
+ direction: ltr;
222
+ -webkit-font-smoothing: antialiased;
223
+ text-rendering: optimizeLegibility;
224
+ -moz-osx-font-smoothing: grayscale;
225
+ font-feature-settings: 'liga';
226
+ transition: font-variation-settings .25s var(--pacem-easing-in-out-sine);
227
+ font-variation-settings: 'FILL' var(--pacem-font-icon-fill), 'wght' 400, 'GRAD' 0, 'opsz' 24;
228
+ font-size: var(--pacem-grid-spacing);
229
+ }
230
+
231
+ :--btns.button::before { line-height: calc(var(--pacem-grid-spacing) * 1.5 - 2px); }
232
+ :--btns.add::before { content: 'add'; }
233
+ :--btns.remove::before { content: 'remove'; }
234
+ :--btns.edit::before { content: 'edit'; }
235
+ :--btns.save::before { content: 'save'; }
236
+ :--btns.check::before { content: 'check'; }
237
+ :--btns.clear::before { content: 'clear'; }
238
+ :--btns.delete::before { content: 'delete'; }
239
+ :--btns.copy::before { content: 'file_copy'; }
240
+
241
+ :--btns.toggle::before {
242
+ transition: transform var(--pacem-easing-in-out-sine) .333s;
243
+ overflow: hidden;
244
+ }
245
+
246
+ :--btns.toggle.fullscreen::before { content: 'fullscreen'; }
247
+ :--btns.toggle.fullscreen-exit::before { content: 'fullscreen_exit'; }
248
+
249
+ :--btns.toggle.expand::before {
250
+ content: 'expand_more';
251
+ transform: rotate(0);
252
+ }
253
+
254
+ :--btns.toggle.collapse::before {
255
+ content: 'expand_more';
256
+ transform: rotate(-180deg);
257
+ }
258
+
259
+ :--btns:is(.circular, .button-circular, .button-circle, .button-square) {
260
+ width: calc(2 * var(--pacem-grid-spacing));
261
+ aspect-ratio: 1;
262
+ font-size: 0;
263
+ display: flex;
264
+ justify-content: center;
265
+ align-items: center;
266
+ }
267
+
268
+ :--btns:is(.circular, .button-circular, .button-circle, .button-square):is(.square-small, .circle-small) {
269
+ width: calc(1.5 * var(--pacem-grid-spacing));
270
+ }
271
+
272
+ :--btns:is(.circular, .button-circular, .button-circle, .button-square):is(.square-small, .circle-small)::before {
273
+ font-size: calc(var(--pacem-grid-spacing) * .75);
274
+ }
275
+
276
+ :--btns:is(.circular, .button-circular, .button-circle, .button-square):is(.square-smaller, .circle-smaller) {
277
+ width: var(--pacem-grid-spacing);
278
+ }
279
+
280
+ :--btns:is(.circular, .button-circular, .button-circle, .button-square):is(.square-smaller, .circle-smaller)::before {
281
+ font-size: calc(var(--pacem-grid-spacing) * .5);
282
+ }
283
+
284
+ :--btns:is(.circular, .button-circular, .button-circle, .button-square):is(.square-auto, .circle-auto) {
285
+ width: 100%;
286
+ }
287
+
288
+ :--btns:is(.circular, .button-circular, .button-circle, .button-square):is(.square-auto, .circle-auto)::before {
289
+ font-size: var(--pacem-grid-spacing);
290
+ text-size-adjust: 67%;
291
+ }
292
+
293
+ :--btns:is(.circular, .button-circular, .button-circle) {
294
+ border-radius: 50%;
295
+ }
296
+
297
+ /* (in a buttonset, only the anchor form outranks .pacem-buttonset .pacem-button: see .HorizontalItem below) */
298
+ a.pacem-button:is(.circular, .button-circular, .button-circle) {
299
+ --pacem--btn-r: 50%;
300
+ }
301
+
302
+ :--btns.button-square {
303
+ border-radius: var(--pacem-border-button-radius);
304
+ }
305
+
306
+ :--btns.button-square.square-sharp {
307
+ border-radius: 0;
308
+ }
309
+ /* #endregion */
310
+
311
+ /* #region states */
312
+ :--gradients :--btn:focus {
313
+ border-image: linear-gradient(to bottom, rgb(from var(--pacem-color-button-border-light) r g b / 20%) 0, rgb(from var(--pacem-color-button-border) r g b / 0%) 100%) 1;
314
+ }
315
+
316
+ :--no-gradients :--btn:focus {
317
+ border-bottom-color: var(--pacem-color-button-border-dark);
318
+ }
319
+
320
+ /* '.button-firm' prevents the 'active' state (alongside with the 'disabled' state) */
321
+ :--btn:not(.pacem-disabled):not(.button-firm).pacem-active {
322
+ transform: translateY(1px);
323
+ box-shadow: none;
324
+ }
325
+
326
+ :--gradients :--btn:not(.pacem-disabled):not(.button-firm).pacem-active {
327
+ border-image: linear-gradient(to bottom, rgb(from var(--pacem-color-button-border-dark) r g b / 10%) 0, rgb(from var(--pacem-color-button-border-light) r g b / 10%) 100%) 1;
328
+ }
329
+
330
+ :--no-gradients :--btn:not(.pacem-disabled):not(.button-firm).pacem-active {
331
+ border-top-color: var(--pacem-color-button-border);
332
+ border-bottom-color: var(--pacem-color-button-border-light);
333
+ }
334
+
335
+ /* .ButtonText() */
336
+ :--btn {
337
+ cursor: pointer;
338
+ font-family: var(--pacem-font-btn);
339
+ font-size: var(--pacem-button-fontsize);
340
+ text-align: center;
341
+ text-transform: var(--pacem-transform-button);
342
+ }
343
+
344
+ :--btn.pacem-disabled,
345
+ :--btn.pacem-disabled:hover,
346
+ /* non-components */
347
+ a.pacem-button[disabled],
348
+ button.pacem-button[disabled]:hover,
349
+ input.pacem-button[disabled],
350
+ a.pacem-button[disabled]:hover,
351
+ input.pacem-button[disabled]:hover {
352
+ cursor: default;
353
+ text-shadow: none;
354
+ pointer-events: none;
355
+ }
356
+
357
+ :--btn.pacem-disabled,
358
+ :--btn:hover.pacem-disabled,
359
+ :--btn:focus.pacem-disabled {
360
+ color: rgb(from var(--pacem-color-disabled-button-inverse) r g b / .4);
361
+ background-color: var(--pacem-color-disabled-button);
362
+ cursor: default;
363
+ }
364
+
365
+ :--gradients :--btn.pacem-disabled,
366
+ :--gradients :--btn:hover.pacem-disabled,
367
+ :--gradients :--btn:focus.pacem-disabled {
368
+ border-image: linear-gradient(to bottom, rgb(from var(--pacem-color-button-border-light) r g b / 10%) 0, rgb(from var(--pacem-color-button-border) r g b / 0%) 50%) 1;
369
+ }
370
+
371
+ :--shadows :--btn.pacem-disabled,
372
+ :--shadows :--btn:hover.pacem-disabled,
373
+ :--shadows :--btn:focus.pacem-disabled {
374
+ box-shadow: 0 2px 2px rgba(0,0,0,0.1);
375
+ }
376
+
377
+ :--no-gradients :--btn.pacem-disabled,
378
+ :--no-gradients :--btn:hover.pacem-disabled,
379
+ :--no-gradients :--btn:focus.pacem-disabled {
380
+ border-color: transparent;
381
+ }
382
+
383
+ /* flat: no background at all */
384
+ :--btn:is(.flat, .button-flat),
385
+ :--btn:hover:is(.flat, .button-flat),
386
+ :--btn:focus:is(.flat, .button-flat) {
387
+ background-color: transparent;
388
+ }
389
+ /* #endregion */
390
+
391
+ body.pacem-animations :--btns {
392
+ transition: color .1s, background .15s;
393
+ }
394
+
395
+ /* #region BUTTONSET */
396
+ pacem-buttonset {
397
+ display: block;
398
+ border: 4px solid transparent;
399
+ transition: border .25s linear;
400
+ position: relative;
401
+
402
+ &:focus {
403
+ border-color: var(--pacem-color-suggest-border);
404
+ }
405
+ }
406
+
407
+ /* .HorizontalItemSet(button) */
408
+ .pacem-buttonset {
409
+ display: grid;
410
+ grid-gap: 0;
411
+ grid-template-columns: auto 1fr auto 1fr auto;
412
+ grid-template-areas: 'left . center . right';
413
+ align-items: start;
414
+ white-space: nowrap;
415
+ padding: calc(var(--pacem-grid-spacing) / 2) 0 0 0;
416
+
417
+ :is(.pacem-buttonset-left, .buttonset-left, .pacem-buttonset-center, .buttonset-center, .pacem-buttonset-right, .buttonset-right) {
418
+ display: flex;
419
+ flex-direction: row;
420
+ align-items: flex-start;
421
+ }
422
+
423
+ :is(.pacem-buttonset-left, .buttonset-left) {
424
+ grid-area: left;
425
+ align-content: flex-start;
426
+ }
427
+
428
+ :is(.pacem-buttonset-center, .buttonset-center) {
429
+ grid-area: center;
430
+ align-content: center;
431
+ }
432
+
433
+ :is(.pacem-buttonset-right, .buttonset-right) {
434
+ grid-area: right;
435
+ align-content: flex-end;
436
+ }
437
+
438
+ :is(.pacem-buttonset-auto, .buttonset-auto) {
439
+ grid-column-start: 1;
440
+ grid-column-end: 6;
441
+ display: flex;
442
+ flex-direction: row;
443
+ flex-wrap: nowrap;
444
+
445
+ > * {
446
+ flex: 1 0 auto;
447
+ }
448
+ }
449
+ }
450
+
451
+ :--shadows .pacem-buttonset.buttons :is(.pacem-buttonset-left, .buttonset-left, .pacem-buttonset-center, .buttonset-center, .pacem-buttonset-right, .buttonset-right) {
452
+ box-shadow: 0 2px calc(var(--pacem-grid-spacing) / 3) rgba(0,0,0,0.5);
453
+ }
454
+
455
+ /* .HorizontalItem(button). Less set the first/last radii only when the radius > 0: with a 0 radius, the anchor form keeps
456
+ its own shape (--pacem--btn-r: circular) */
457
+ .pacem-buttonset :--btn {
458
+ border-radius: 0;
459
+ display: block;
460
+ margin: 0;
461
+ box-shadow: none;
462
+ }
463
+
464
+ .pacem-buttonset :--btn.buttonset-first,
465
+ .pacem-buttonset :--btn:first-child {
466
+ --pacem--bs-r: calc(var(--pacem-border-button-radius) + (1 - sign(var(--pacem-border-button-radius))) * var(--pacem--btn-r, 0px));
467
+ border-top-left-radius: var(--pacem--bs-r);
468
+ border-bottom-left-radius: var(--pacem--bs-r);
469
+ }
470
+
471
+ .pacem-buttonset :--btn.buttonset-last,
472
+ .pacem-buttonset :--btn:last-child {
473
+ --pacem--bs-r: calc(var(--pacem-border-button-radius) + (1 - sign(var(--pacem-border-button-radius))) * var(--pacem--btn-r, 0px));
474
+ border-top-right-radius: var(--pacem--bs-r);
475
+ border-bottom-right-radius: var(--pacem--bs-r);
476
+ }
477
+
478
+ .pacem-buttonset :--btn:not(:last-child):not(.buttonset-last) {
479
+ border-right: none;
480
+ }
481
+ /* #endregion */
482
+
483
+ /* #region CONTEXTMENU */
484
+ .pacem-contextmenu {
485
+ margin: 0;
486
+ padding: 0;
487
+
488
+ hr {
489
+ border: 0;
490
+ height: 1px;
491
+ background-color: var(--pacem-contextmenu-hr-back);
492
+ border-bottom: var(--pacem-contextmenu-hr-border);
493
+ margin: calc(var(--pacem-grid-spacing) / 6) calc(var(--pacem-grid-spacing) / 8);
494
+ }
495
+ }
496
+
497
+ .pacem-contextmenu :--btn {
498
+ display: block;
499
+ margin: 0;
500
+ padding: calc(var(--pacem-grid-spacing) * .5) calc(var(--pacem-grid-spacing) * 1.25);
501
+ box-shadow: none;
502
+ border: none;
503
+ background: transparent;
504
+ height: auto;
505
+ line-height: 1;
506
+ font-family: var(--pacem-font-std);
507
+ font-size: calc(1rem * var(--pacem-font-std-rem-factor));
508
+ border-radius: 0;
509
+ text-transform: none;
510
+ text-align: left;
511
+ width: calc(var(--pacem-grid-spacing) * 5);
512
+ overflow: hidden;
513
+ white-space: nowrap;
514
+ text-overflow: ellipsis;
515
+ }
516
+
517
+ .pacem-contextmenu :--btn::before {
518
+ font-size: 1em;
519
+ width: calc(var(--pacem-grid-spacing) * 1.25);
520
+ text-align: center;
521
+ position: absolute;
522
+ left: 0;
523
+ top: calc(var(--pacem-font-icon-offset) + var(--pacem-grid-spacing) * .5);
524
+ content: '';
525
+ }
526
+
527
+ .pacem-contextmenu :--btn:hover:not(.pacem-disabled),
528
+ .pacem-contextmenu :--btn:focus:not(.pacem-disabled) {
529
+ background-color: var(--pacem-color-contextmenu-hover-back);
530
+ color: var(--pacem-color-contextmenu-hover-fore);
531
+ }
532
+
533
+ .pacem-contextmenu :--btn:hover.pacem-disabled,
534
+ .pacem-contextmenu :--btn:focus.pacem-disabled {
535
+ background-color: transparent;
536
+ }
537
+ /* #endregion */
538
+
539
+ /* icon injection */
540
+ :--btn[data-icon-glyph]::before { content: attr(data-icon-glyph); }
541
+ :--btn[data-icon-glyph].icon-glyph-normal::before { font-size: 1rem; }
542
+ :--btn[data-icon-glyph].icon-glyph-tiny::before { font-size: calc(var(--pacem-grid-spacing) / 3); }
543
+ :--btn[data-icon-glyph].icon-glyph-small::before { font-size: calc(2 * var(--pacem-grid-spacing) / 3); }
544
+ :--btn[data-icon-glyph].icon-glyph-smaller::before { font-size: calc(var(--pacem-grid-spacing) / 2); }
545
+
546
+ :--btn.button[data-icon-glyph]::before {
547
+ vertical-align: bottom;
548
+ margin-right: calc(var(--pacem-grid-spacing) / 3);
549
+ }
550
+
551
+ pacem-button.dropdown-toggle {
552
+ padding-right: calc(1.5 * var(--pacem-grid-spacing));
553
+ margin-bottom: 0;
554
+ position: relative;
555
+
556
+ &::after {
557
+ /* .Icon() */
558
+ content: 'arrow_drop_down';
559
+ position: absolute;
560
+ display: inline-block;
561
+ line-height: 1;
562
+ text-align: center;
563
+ font-family: var(--pacem-font-icons);
564
+ text-transform: none;
565
+ letter-spacing: normal;
566
+ word-wrap: normal;
567
+ white-space: nowrap;
568
+ direction: ltr;
569
+ -webkit-font-smoothing: antialiased;
570
+ text-rendering: optimizeLegibility;
571
+ -moz-osx-font-smoothing: grayscale;
572
+ font-feature-settings: 'liga';
573
+ font-variation-settings: 'FILL' var(--pacem-font-icon-fill), 'wght' 400, 'GRAD' 0, 'opsz' 24;
574
+ font-size: var(--pacem-font-icon-size);
575
+ right: calc(.25 * var(--pacem-grid-spacing));
576
+ top: 50%;
577
+ margin-top: calc(var(--pacem-grid-spacing) / -2);
578
+ transition: transform .25s var(--pacem-easing-in-out-sine);
579
+ }
580
+
581
+ &.dropdown-open::after {
582
+ transform: rotate(-180deg);
583
+ }
584
+ }
585
+
586
+ :--btn.dropdown-item {
587
+ display: block;
588
+ margin: 0;
589
+ height: calc(var(--pacem-grid-spacing) * 1.5);
590
+ line-height: calc(var(--pacem-grid-spacing) * 1.5);
591
+ border-top: 1px solid var(--pacem-color-suggest-border-light);
592
+ border-bottom: 1px solid var(--pacem-color-suggest-border-dark);
593
+ }
594
+
595
+ :--btn.dropdown-item.selected {
596
+ background-color: var(--pacem-color-accent);
597
+ color: var(--pacem-color-accent-inverse);
598
+ }
599
+
600
+ :--btn.dropdown-item:hover,
601
+ :--btn.dropdown-item:focus {
602
+ background-color: var(--pacem-color-suggest-focus-back);
603
+ color: var(--pacem-color-suggest-focus-fore);
604
+ }
605
+
606
+ /* icon rotations */
607
+ :--btn.icon-rotate::before {
608
+ display: inline-block;
609
+ transform-origin: center center;
610
+ }
611
+
612
+ :--btn.icon-rotate.rotate-45::before { transform: rotate(45deg); }
613
+ :--btn.icon-rotate.rotate-90::before { transform: rotate(90deg); }
614
+ :--btn.icon-rotate.rotate-135::before { transform: rotate(135deg); }
615
+ :--btn.icon-rotate.rotate-180::before { transform: rotate(180deg); }
616
+ :--btn.icon-rotate.rotate-225::before { transform: rotate(225deg); }
617
+ :--btn.icon-rotate.rotate-270::before { transform: rotate(270deg); }
618
+ :--btn.icon-rotate.rotate-315::before { transform: rotate(315deg); }
619
+
620
+ .pacem-animations :--btn {
621
+ transition: background-color var(--pacem-easing-in-out-sine) .125s, color var(--pacem-easing-in-out-sine) .15s;
622
+ }
623
+
624
+ .pacem-animations :--btn.icon-rotate::before {
625
+ transition: background-color var(--pacem-easing-in-out-sine) .125s, color var(--pacem-easing-in-out-sine) .15s, transform var(--pacem-easing-in-out-sine) .2s;
626
+ }