tiny-essentials 1.29.1 → 1.29.2

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 (128) hide show
  1. package/changelog/1/29/2.md +82 -0
  2. package/dist/v1/TinyBasicsEs.min.js +1 -1
  3. package/dist/v1/TinyEssentials.min.js +1 -1
  4. package/dist/v1/TinyFetchLoader.min.js +1 -0
  5. package/dist/v1/TinyImageLoader.min.js +1 -0
  6. package/dist/v1/TinyMediaCache.min.js +1 -0
  7. package/dist/v1/TinyMediaLoader.min.js +1 -0
  8. package/dist/v1/basics/index.cjs +5 -0
  9. package/dist/v1/basics/index.d.mts +2 -1
  10. package/dist/v1/basics/index.d.mts.map +1 -1
  11. package/dist/v1/basics/index.mjs +2 -1
  12. package/dist/v1/basics/media/youtube.cjs +275 -0
  13. package/dist/v1/basics/media/youtube.d.mts +107 -0
  14. package/dist/v1/basics/media/youtube.d.mts.map +1 -0
  15. package/dist/v1/basics/media/youtube.mjs +214 -0
  16. package/dist/v1/index.cjs +13 -0
  17. package/dist/v1/index.d.mts +6 -1
  18. package/dist/v1/index.d.mts.map +1 -1
  19. package/dist/v1/index.mjs +7 -2
  20. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +0 -1
  21. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +0 -1
  22. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -1
  23. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +0 -1
  24. package/dist/v1/libs/fs/plugins/OPFS/index.cjs +0 -8
  25. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +0 -8
  26. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -1
  27. package/dist/v1/libs/fs/plugins/OPFS/index.mjs +0 -8
  28. package/dist/v1/libs/html/TinyHtml.cjs +1 -1
  29. package/dist/v1/libs/html/TinyHtml.d.mts +2 -2
  30. package/dist/v1/libs/html/TinyHtml.d.mts.map +1 -1
  31. package/dist/v1/libs/html/TinyHtml.mjs +1 -1
  32. package/dist/v1/libs/html/loader/TinyMediaLoader.cjs +1999 -0
  33. package/dist/v1/libs/html/loader/TinyMediaLoader.d.mts +999 -0
  34. package/dist/v1/libs/html/loader/TinyMediaLoader.d.mts.map +1 -0
  35. package/dist/v1/libs/html/loader/TinyMediaLoader.mjs +1852 -0
  36. package/dist/v1/libs/html/loader/beta/formats/TinyAudioLoader.cjs +77 -0
  37. package/dist/v1/libs/html/loader/beta/formats/TinyAudioLoader.d.mts +103 -0
  38. package/dist/v1/libs/html/loader/beta/formats/TinyAudioLoader.d.mts.map +1 -0
  39. package/dist/v1/libs/html/loader/beta/formats/TinyAudioLoader.mjs +67 -0
  40. package/dist/v1/libs/html/loader/beta/formats/TinyContentLoader.cjs +630 -0
  41. package/dist/v1/libs/html/loader/beta/formats/TinyContentLoader.d.mts +138 -0
  42. package/dist/v1/libs/html/loader/beta/formats/TinyContentLoader.d.mts.map +1 -0
  43. package/dist/v1/libs/html/loader/beta/formats/TinyContentLoader.mjs +576 -0
  44. package/dist/v1/libs/html/loader/beta/formats/TinyVideoLoader.cjs +70 -0
  45. package/dist/v1/libs/html/loader/beta/formats/TinyVideoLoader.d.mts +100 -0
  46. package/dist/v1/libs/html/loader/beta/formats/TinyVideoLoader.d.mts.map +1 -0
  47. package/dist/v1/libs/html/loader/beta/formats/TinyVideoLoader.mjs +60 -0
  48. package/dist/v1/libs/html/loader/beta/probe/TinyMediaProbe.cjs +946 -0
  49. package/dist/v1/libs/html/loader/beta/probe/TinyMediaProbe.d.mts +67 -0
  50. package/dist/v1/libs/html/loader/beta/probe/TinyMediaProbe.d.mts.map +1 -0
  51. package/dist/v1/libs/html/loader/beta/probe/TinyMediaProbe.mjs +896 -0
  52. package/dist/v1/libs/html/loader/formats/TinyFetchLoader.cjs +225 -0
  53. package/dist/v1/libs/html/loader/formats/TinyFetchLoader.d.mts +149 -0
  54. package/dist/v1/libs/html/loader/formats/TinyFetchLoader.d.mts.map +1 -0
  55. package/dist/v1/libs/html/loader/formats/TinyFetchLoader.mjs +197 -0
  56. package/dist/v1/libs/html/loader/formats/TinyImageLoader.cjs +1454 -0
  57. package/dist/v1/libs/html/loader/formats/TinyImageLoader.d.mts +200 -0
  58. package/dist/v1/libs/html/loader/formats/TinyImageLoader.d.mts.map +1 -0
  59. package/dist/v1/libs/html/loader/formats/TinyImageLoader.mjs +1317 -0
  60. package/dist/v1/libs/html/loader/probe/TinyImageProbe.cjs +668 -0
  61. package/dist/v1/libs/html/loader/probe/TinyImageProbe.d.mts +83 -0
  62. package/dist/v1/libs/html/loader/probe/TinyImageProbe.d.mts.map +1 -0
  63. package/dist/v1/libs/html/loader/probe/TinyImageProbe.mjs +626 -0
  64. package/dist/v1/libs/html/loader/utils/TinyBufferReader.cjs +277 -0
  65. package/dist/v1/libs/html/loader/utils/TinyBufferReader.d.mts +118 -0
  66. package/dist/v1/libs/html/loader/utils/TinyBufferReader.d.mts.map +1 -0
  67. package/dist/v1/libs/html/loader/utils/TinyBufferReader.mjs +247 -0
  68. package/dist/v1/libs/html/loader/utils/TinyIsoBox.cjs +128 -0
  69. package/dist/v1/libs/html/loader/utils/TinyIsoBox.d.mts +49 -0
  70. package/dist/v1/libs/html/loader/utils/TinyIsoBox.d.mts.map +1 -0
  71. package/dist/v1/libs/html/loader/utils/TinyIsoBox.mjs +116 -0
  72. package/dist/v1/libs/html/loader/utils/TinyMediaCache.cjs +796 -0
  73. package/dist/v1/libs/html/loader/utils/TinyMediaCache.d.mts +354 -0
  74. package/dist/v1/libs/html/loader/utils/TinyMediaCache.d.mts.map +1 -0
  75. package/dist/v1/libs/html/loader/utils/TinyMediaCache.mjs +734 -0
  76. package/dist/v1/libs/html/loader/utils/TinyMediaMirror.cjs +302 -0
  77. package/dist/v1/libs/html/loader/utils/TinyMediaMirror.d.mts +256 -0
  78. package/dist/v1/libs/html/loader/utils/TinyMediaMirror.d.mts.map +1 -0
  79. package/dist/v1/libs/html/loader/utils/TinyMediaMirror.mjs +280 -0
  80. package/dist/v1/libs/html/loader/utils/TinyMediaProgress.cjs +194 -0
  81. package/dist/v1/libs/html/loader/utils/TinyMediaProgress.d.mts +138 -0
  82. package/dist/v1/libs/html/loader/utils/TinyMediaProgress.d.mts.map +1 -0
  83. package/dist/v1/libs/html/loader/utils/TinyMediaProgress.mjs +175 -0
  84. package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +359 -55
  85. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +64 -6
  86. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
  87. package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +320 -57
  88. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +0 -1
  89. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +0 -1
  90. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -1
  91. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +0 -1
  92. package/dist/v1/webTemplates/bootstrap/5.3/scss/background/_background-grid.scss +15 -0
  93. package/dist/v1/webTemplates/bootstrap/5.3/scss/components/buttons/_buttons-contrast.scss +208 -0
  94. package/dist/v1/webTemplates/bootstrap/5.3/scss/components/buttons/_buttons-ghost.scss +89 -0
  95. package/dist/v1/webTemplates/bootstrap/5.3/scss/components/icon/_cube-icon.scss +65 -0
  96. package/dist/v1/webTemplates/bootstrap/5.3/scss/components/icon/_sphere-pulse.scss +39 -0
  97. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_badges.scss +90 -0
  98. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_bootstrap-overrides.scss +495 -0
  99. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_buttons.scss +390 -0
  100. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_colors.scss +213 -0
  101. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_effects.scss +153 -0
  102. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_forms-tones.scss +69 -0
  103. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_forms.scss +323 -0
  104. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_global.scss +31 -0
  105. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_links.scss +47 -0
  106. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_tables.scss +25 -0
  107. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_theme.scss +21 -0
  108. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_tokens.scss +161 -0
  109. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_utilities.scss +81 -0
  110. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/_variables.scss +63 -0
  111. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_form-tone-mixins.scss +236 -0
  112. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_sizing.scss +68 -0
  113. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_tone-mixins.scss +392 -0
  114. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/_typography.scss +112 -0
  115. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/background/_tiny_gradient_1.scss +131 -0
  116. package/dist/v1/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/colors/_pink.scss +47 -0
  117. package/docs/v1/Exports.md +33 -2
  118. package/docs/v1/README.md +9 -0
  119. package/docs/v1/basics/youtube.md +204 -0
  120. package/docs/v1/libs/html/loader/TinyFetchLoader.md +114 -0
  121. package/docs/v1/libs/html/loader/TinyImageLoader.md +141 -0
  122. package/docs/v1/libs/html/loader/TinyMediaCache.md +166 -0
  123. package/docs/v1/libs/html/loader/TinyMediaLoader.md +300 -0
  124. package/docs/v1/libs/tools/TinyPkgExportValidator.md +55 -0
  125. package/docs/v1/webTemplates/bootstrap/5.3/DeepStrap.md +177 -0
  126. package/package.json +244 -8
  127. /package/dist/v1/webTemplates/bootstrap/5.3/scss/input/{Placeholder-Colors-Fix.scss → _placeholder-colors-fix.scss} +0 -0
  128. /package/dist/v1/webTemplates/bootstrap/5.3/scss/spacing/{Spacing-Plus.scss → _spacing-plus.scss} +0 -0
@@ -0,0 +1,392 @@
1
+ // =============================================================================
2
+ // Tone mixins
3
+ //
4
+ // Shared emitters for the per-tone plugin partials. Every mixin takes the
5
+ // `--ui-*` token suffix (e.g. `pink`) and assumes the `-rgb` companion exists.
6
+ //
7
+ // Two layers live here:
8
+ //
9
+ // 1. Property emitters — `tone-ink`, `tone-list-group`, `tone-table`.
10
+ // They only declare custom properties and must be called from a selector
11
+ // the caller owns.
12
+ // 2. Class emitters — `tone-badge`, `tone-alert`, `tone-utilities`, ...
13
+ // They own their selector and are safe to call at the root.
14
+ //
15
+ // `tone-plugin` wires every class emitter for a single tone.
16
+ //
17
+ // Depends on `triplet()` and `channels()` from `_tokens.scss`. Both are only
18
+ // resolved when a mixin is *called*, so the import order in `_theme.scss`
19
+ // (mixins first, `tokens` later, plugins last) is safe.
20
+ // =============================================================================
21
+
22
+ @use 'sass:map';
23
+
24
+ // =============================================================================
25
+ // 1. Property emitters
26
+ // =============================================================================
27
+
28
+ /// Re-points every text token a component may read to the readable
29
+ /// foreground of the current tone.
30
+ ///
31
+ /// @param {String} $on - `--ui-on-*` suffix, without the prefix.
32
+ @mixin tone-ink($on) {
33
+ --tone-ink: var(--ui-on-#{$on});
34
+ --tone-ink-soft: color-mix(in srgb, var(--ui-on-#{$on}) 78%, transparent);
35
+
36
+ color: color-mix(in srgb, var(--tone-ink) calc(var(--bs-bg-opacity, 1) * 100%), var(--ui-text));
37
+
38
+ --bs-body-color: var(--tone-ink);
39
+ --bs-emphasis-color: var(--tone-ink);
40
+ --bs-heading-color: var(--tone-ink);
41
+ --bs-secondary-color: var(--tone-ink-soft);
42
+ --bs-tertiary-color: var(--tone-ink-soft);
43
+ --bs-card-color: var(--tone-ink);
44
+ --bs-card-cap-color: var(--tone-ink);
45
+ --bs-list-group-color: var(--tone-ink);
46
+ --bs-border-color: color-mix(in srgb, var(--tone-ink) 28%, transparent);
47
+ }
48
+
49
+ /// Emits the full Bootstrap 5.3 list-group variable set for a tone.
50
+ /// @param {String} $tone - Token suffix, without the `--ui-` prefix.
51
+ @mixin tone-list-group($tone) {
52
+ --bs-list-group-color: var(--ui-#{$tone});
53
+ --bs-list-group-bg: rgb(var(--ui-#{$tone}-rgb) / 0.08);
54
+ --bs-list-group-border-color: rgb(var(--ui-#{$tone}-rgb) / 0.24);
55
+
56
+ --bs-list-group-action-color: var(--ui-#{$tone});
57
+ --bs-list-group-action-hover-color: var(--ui-#{$tone});
58
+ --bs-list-group-action-hover-bg: rgb(var(--ui-#{$tone}-rgb) / 0.14);
59
+ --bs-list-group-action-active-color: var(--ui-#{$tone});
60
+ --bs-list-group-action-active-bg: rgb(var(--ui-#{$tone}-rgb) / 0.2);
61
+
62
+ --bs-list-group-active-color: var(--ui-on-#{$tone});
63
+ --bs-list-group-active-bg: var(--ui-#{$tone});
64
+ --bs-list-group-active-border-color: var(--ui-#{$tone});
65
+
66
+ --bs-list-group-disabled-color: color-mix(in srgb, var(--ui-#{$tone}) 55%, transparent);
67
+ --bs-list-group-disabled-bg: rgb(var(--ui-#{$tone}-rgb) / 0.06);
68
+ }
69
+
70
+ /// @param {String} $tone - Token suffix, without the `--ui-` prefix.
71
+ @mixin tone-list-group-active($tone) {
72
+ color: var(--ui-on-#{$tone});
73
+ background-color: var(--ui-#{$tone});
74
+ }
75
+
76
+ /// Emits the full Bootstrap 5.3 table variable set for a tone.
77
+ /// @param {String} $tone - Token suffix, without the `--ui-` prefix.
78
+ @mixin tone-table($tone) {
79
+ --bs-table-color: var(--ui-#{$tone});
80
+ --bs-table-header-color: var(--ui-#{$tone});
81
+ --bs-table-bg: color-mix(in srgb, var(--ui-#{$tone}) 12%, var(--ui-canvas));
82
+ --bs-table-border-color: color-mix(in srgb, var(--ui-#{$tone}) 32%, var(--ui-canvas));
83
+
84
+ --bs-table-striped-color: var(--ui-#{$tone});
85
+ --bs-table-striped-bg: color-mix(in srgb, var(--ui-#{$tone}) 18%, var(--ui-canvas));
86
+
87
+ --bs-table-active-color: var(--ui-#{$tone});
88
+ --bs-table-active-bg: color-mix(in srgb, var(--ui-#{$tone}) 24%, var(--ui-canvas));
89
+
90
+ --bs-table-hover-color: var(--ui-#{$tone});
91
+ --bs-table-hover-bg: color-mix(in srgb, var(--ui-#{$tone}) 20%, var(--ui-canvas));
92
+
93
+ color: var(--bs-table-color);
94
+ border-color: var(--bs-table-border-color);
95
+ }
96
+
97
+ /// Animated underline shared by every nav item.
98
+ ///
99
+ /// @param {String} $pseudo - Pseudo-element that draws the line.
100
+ /// `.dropdown-toggle` must use `before`, because Bootstrap owns its `after`
101
+ /// (the caret).
102
+ @mixin nav-underline($pseudo: 'after') {
103
+ &::#{$pseudo} {
104
+ position: absolute;
105
+ bottom: 0rem;
106
+ left: 0;
107
+ width: 0;
108
+ height: 1px;
109
+ content: '';
110
+ background: var(--ui-accent);
111
+ transition: width var(--ui-duration) var(--ui-ease);
112
+ }
113
+
114
+ &:hover::#{$pseudo},
115
+ &.active::#{$pseudo} {
116
+ width: 100%;
117
+ }
118
+ }
119
+
120
+ // =============================================================================
121
+ // 2. Class emitters
122
+ // =============================================================================
123
+
124
+ /// Emits the `--ui-*` / `--bs-*` custom properties for a single tone.
125
+ ///
126
+ /// @param {String} $name - Tone name, used as the class suffix.
127
+ /// @param {Map} $tokens - `base`, `on`, `emphasis`, `subtle-bg`, `subtle-border`.
128
+ @mixin tone-tokens($name, $tokens) {
129
+ @each $key in ('base', 'on', 'emphasis', 'subtle-bg', 'subtle-border') {
130
+ @if not map.has-key($tokens, $key) {
131
+ @error 'Tone `#{$name}` is missing the `#{$key}` token.';
132
+ }
133
+ }
134
+
135
+ $base: map.get($tokens, 'base');
136
+
137
+ --ui-#{$name}: #{$base};
138
+ --ui-#{$name}-rgb: #{triplet($base)};
139
+ --ui-on-#{$name}: #{map.get($tokens, 'on')};
140
+
141
+ --bs-#{$name}: #{$base};
142
+ --bs-#{$name}-rgb: #{channels($base)};
143
+ --bs-#{$name}-text-emphasis: #{map.get($tokens, 'emphasis')};
144
+ --bs-#{$name}-bg-subtle: #{map.get($tokens, 'subtle-bg')};
145
+ --bs-#{$name}-border-subtle: #{map.get($tokens, 'subtle-border')};
146
+ }
147
+
148
+ /// Emits the three button variants for a tone.
149
+ ///
150
+ /// @param {String} $name - Class suffix, e.g. `pink`.
151
+ /// @param {String} $tone - Token suffix for `--ui-*`.
152
+ @mixin tone-buttons($name, $tone: $name) {
153
+ .btn-#{$name} {
154
+ @include solid-variant($tone);
155
+ }
156
+
157
+ .btn-outline-#{$name} {
158
+ @include outline-variant($tone);
159
+ }
160
+
161
+ .btn-subtle-#{$name} {
162
+ @include subtle-variant($tone);
163
+ }
164
+ }
165
+
166
+ /// Keeps a hovered/active tone button above its siblings inside a group.
167
+ ///
168
+ /// @param {String} $name - Class suffix, e.g. `pink`.
169
+ @mixin tone-button-group($name) {
170
+ @each $prefix in ('btn', 'btn-outline', 'btn-subtle') {
171
+ .btn-group > .#{$prefix}-#{$name},
172
+ .btn-group-vertical > .#{$prefix}-#{$name} {
173
+ position: relative;
174
+ }
175
+
176
+ .btn-group > .#{$prefix}-#{$name}:hover:not(:disabled):not(.disabled),
177
+ .btn-group-vertical > .#{$prefix}-#{$name}:hover:not(:disabled):not(.disabled) {
178
+ z-index: 1;
179
+ }
180
+
181
+ .btn-group > .#{$prefix}-#{$name}.active,
182
+ .btn-group > .#{$prefix}-#{$name}:active:not(:disabled):not(.disabled),
183
+ .btn-group-vertical > .#{$prefix}-#{$name}.active,
184
+ .btn-group-vertical > .#{$prefix}-#{$name}:active:not(:disabled):not(.disabled) {
185
+ z-index: 2;
186
+ }
187
+ }
188
+
189
+ .btn-check:checked + .btn-#{$name} {
190
+ --btn-fill: color-mix(in srgb, var(--ui-#{$name}) var(--btn-press-amount), var(--btn-mix));
191
+ }
192
+
193
+ .btn-check:checked + .btn-outline-#{$name},
194
+ .btn-check:checked + .btn-subtle-#{$name} {
195
+ z-index: 2;
196
+ }
197
+ }
198
+
199
+ /// Emits the soft and floating badge skins for one tone.
200
+ ///
201
+ /// @param {String} $name - Class suffix, e.g. `pink`.
202
+ /// @param {String} $tone - Token suffix for `--ui-*`.
203
+ /// @param {String} $on - Token suffix for `--ui-on-*`.
204
+ @mixin tone-badge($name, $tone: $name, $on: $tone) {
205
+ .badge.text-bg-#{$name} {
206
+ color: var(--ui-#{$tone}) !important;
207
+ background-color: rgb(var(--ui-#{$tone}-rgb) / 0.12) !important;
208
+ border-color: rgb(var(--ui-#{$tone}-rgb) / 0.32);
209
+ }
210
+
211
+ .badge.badge-floating.text-bg-#{$name} {
212
+ color: var(--ui-on-#{$on}) !important;
213
+ background-color: var(--ui-#{$tone}) !important;
214
+ border-color: transparent;
215
+ }
216
+
217
+ .btn .badge.text-bg-#{$name}:not(.badge-floating) {
218
+ color: inherit !important;
219
+ background-color: color-mix(in srgb, currentColor 14%, transparent) !important;
220
+ border-color: color-mix(in srgb, currentColor 32%, transparent) !important;
221
+ }
222
+ }
223
+
224
+ /// Emits the `.text-*`, `.bg-*`, `.border-*` and `.text-bg-*` helpers.
225
+ ///
226
+ /// @param {String} $name - Class suffix, e.g. `pink`.
227
+ /// @param {String} $tone - Token suffix for `--ui-*`.
228
+ /// @param {String} $on - Token suffix for `--ui-on-*`.
229
+ @mixin tone-utilities($name, $tone: $name, $on: $tone) {
230
+ .bg-#{$name},
231
+ .text-bg-#{$name} {
232
+ @include tone-ink($on);
233
+ }
234
+
235
+ .text-#{$name} {
236
+ color: rgba(var(--bs-#{$name}-rgb), var(--bs-text-opacity, 1)) !important;
237
+ }
238
+
239
+ .bg-#{$name} {
240
+ background-color: rgba(var(--bs-#{$name}-rgb), var(--bs-bg-opacity, 1)) !important;
241
+ }
242
+
243
+ .border-#{$name} {
244
+ border-color: rgba(var(--bs-#{$name}-rgb), var(--bs-border-opacity, 1)) !important;
245
+ }
246
+
247
+ .text-bg-#{$name} {
248
+ color: var(--tone-ink) !important;
249
+ background-color: rgba(var(--bs-#{$name}-rgb), var(--bs-bg-opacity, 1)) !important;
250
+ }
251
+
252
+ .bg-#{$name}-subtle {
253
+ background-color: var(--bs-#{$name}-bg-subtle) !important;
254
+ }
255
+
256
+ .text-#{$name}-emphasis {
257
+ color: var(--bs-#{$name}-text-emphasis) !important;
258
+ }
259
+
260
+ .border-#{$name}-subtle {
261
+ border-color: var(--bs-#{$name}-border-subtle) !important;
262
+ }
263
+ }
264
+
265
+ /// @param {String} $name - Class suffix, e.g. `pink`.
266
+ /// @param {String} $tone - Token suffix for `--ui-*`.
267
+ @mixin tone-alert($name, $tone: $name) {
268
+ .alert-#{$name} {
269
+ --bs-alert-color: var(--ui-#{$tone});
270
+ --bs-alert-bg: rgb(var(--ui-#{$tone}-rgb) / 0.1);
271
+ --bs-alert-border-color: rgb(var(--ui-#{$tone}-rgb) / 0.28);
272
+ }
273
+ }
274
+
275
+ /// @param {String} $name - Class suffix, e.g. `pink`.
276
+ /// @param {String} $tone - Token suffix for `--ui-*`.
277
+ @mixin tone-link($name, $tone: $name) {
278
+ .link-#{$name} {
279
+ color: var(--ui-#{$tone});
280
+
281
+ &:hover,
282
+ &:focus {
283
+ color: color-mix(in srgb, var(--ui-#{$tone}) 80%, var(--ui-heading));
284
+ }
285
+ }
286
+ }
287
+
288
+ /// @param {String} $name - Class suffix, e.g. `pink`.
289
+ /// @param {String} $tone - Token suffix for `--ui-*`.
290
+ @mixin tone-progress($name, $tone: $name) {
291
+ .progress-bar-#{$name} {
292
+ --bs-progress-bar-bg: var(--ui-#{$tone});
293
+ }
294
+ }
295
+
296
+ /// @param {String} $name - Class suffix, e.g. `pink`.
297
+ /// @param {String} $tone - Token suffix for `--ui-*`.
298
+ @mixin tone-ghost-button($name, $tone: $name) {
299
+ .btn-ghost-#{$name} {
300
+ --bs-btn-color: var(--ui-#{$tone});
301
+ --bs-btn-bg: transparent;
302
+ --bs-btn-border-color: transparent;
303
+ --bs-btn-hover-color: var(--ui-#{$tone});
304
+ --bs-btn-hover-bg: color-mix(in srgb, var(--ui-#{$tone}) 12%, transparent);
305
+ --bs-btn-hover-border-color: transparent;
306
+ --bs-btn-active-color: var(--ui-#{$tone});
307
+ --bs-btn-active-bg: color-mix(in srgb, var(--ui-#{$tone}) 20%, transparent);
308
+ --bs-btn-active-border-color: transparent;
309
+ --bs-btn-disabled-color: var(--ui-#{$tone});
310
+ --bs-btn-disabled-bg: transparent;
311
+ --bs-btn-disabled-border-color: transparent;
312
+ }
313
+ }
314
+
315
+ /// @param {String} $name - Class suffix, e.g. `pink`.
316
+ /// @param {String} $tone - Token suffix for `--ui-*`.
317
+ @mixin tone-table-class($name, $tone: $name) {
318
+ .table-#{$name} {
319
+ @include tone-table($tone);
320
+ }
321
+ }
322
+
323
+ /// Emits a `.table-{name}` variant from a raw Sass color.
324
+ /// @param {String} $name - Class suffix, e.g. `blue`.
325
+ /// @param {Color} $base - Solid background color.
326
+ @mixin tone-table-from-color($name, $base) {
327
+ $ink: color-contrast($base);
328
+ $bg: mix($base, $body-bg, 12%);
329
+ $border: mix($base, $body-bg, 32%);
330
+ $striped: mix($base, $body-bg, 18%);
331
+ $active: mix($base, $body-bg, 24%);
332
+ $hover: mix($base, $body-bg, 20%);
333
+
334
+ .table-#{$name} {
335
+ --bs-table-color: #{$ink};
336
+ --bs-table-header-color: #{$ink};
337
+ --bs-table-bg: #{$bg};
338
+ --bs-table-border-color: #{$border};
339
+
340
+ --bs-table-striped-color: #{$ink};
341
+ --bs-table-striped-bg: #{$striped};
342
+
343
+ --bs-table-active-color: #{$ink};
344
+ --bs-table-active-bg: #{$active};
345
+
346
+ --bs-table-hover-color: #{$ink};
347
+ --bs-table-hover-bg: #{$hover};
348
+
349
+ color: var(--bs-table-color);
350
+ border-color: var(--bs-table-border-color);
351
+ }
352
+ }
353
+
354
+ /// @param {String} $name - Class suffix, e.g. `pink`.
355
+ /// @param {String} $tone - Token suffix for `--ui-*`.
356
+ @mixin tone-list-group-class($name, $tone: $name) {
357
+ .list-group-item.list-group-item-#{$name} {
358
+ @include tone-list-group($tone);
359
+ }
360
+
361
+ .list-group-item.list-group-item-#{$name}.active {
362
+ @include tone-list-group-active($tone);
363
+ }
364
+ }
365
+
366
+ // =============================================================================
367
+ // 3. Orchestrator
368
+ // =============================================================================
369
+
370
+ /// Emits every class emitter for a single tone.
371
+ ///
372
+ /// @param {String} $name - Tone name, used as the class suffix.
373
+ /// @param {Map} $config - `token` (required) and `on` (defaults to `$name`).
374
+ @mixin tone-plugin($name, $config) {
375
+ @if not map.has-key($config, 'token') {
376
+ @error 'Tone `#{$name}` is missing the `token` key.';
377
+ }
378
+
379
+ $token: map.get($config, 'token');
380
+ $on: if(map.has-key($config, 'on'), map.get($config, 'on'), $token);
381
+
382
+ @include tone-buttons($name, $token);
383
+ @include tone-button-group($name);
384
+ @include tone-utilities($name, $token, $on);
385
+ @include tone-badge($name, $token, $on);
386
+ @include tone-alert($name, $token);
387
+ @include tone-link($name, $token);
388
+ @include tone-progress($name, $token);
389
+ @include tone-ghost-button($name, $token);
390
+ @include tone-table-class($name, $token);
391
+ @include tone-list-group-class($name, $token);
392
+ }
@@ -0,0 +1,112 @@
1
+ // =============================================================================
2
+ // Compact typography (opt-in)
3
+ //
4
+ // The theme ships with Bootstrap's default 16px type scale. This file restores
5
+ // the denser 14px scale the theme used to ship with.
6
+ //
7
+ // Enable: add `@import 'typography-compact';` as the last line of _theme.scss.
8
+ //
9
+ // For pixel parity, also uncomment the two Sass variables in _variables.scss.
10
+ // They are compile-time values, so they cannot be restored from here.
11
+ // =============================================================================
12
+
13
+ // ------------------------------------------------------------------- scale --
14
+ // `$font-size-base: 0.875rem` multiplied by Bootstrap's own heading ratios.
15
+ // Kept as a map so a future scale change is a one-line edit.
16
+ $compact-headings: (
17
+ 'h1': 2.1875rem,
18
+ 'h2': 1.75rem,
19
+ 'h3': 1.53125rem,
20
+ 'h4': 1.3125rem,
21
+ 'h5': 1.09375rem,
22
+ 'h6': 0.875rem,
23
+ ) !default;
24
+
25
+ @each $tag, $size in $compact-headings {
26
+ #{$tag},
27
+ .#{$tag} {
28
+ font-size: $size;
29
+ }
30
+ }
31
+
32
+ // ---------------------------------------------------------------- Family --
33
+ $font-family-sans-serif:
34
+ 'Inter',
35
+ -apple-system,
36
+ BlinkMacSystemFont,
37
+ 'Segoe UI',
38
+ sans-serif;
39
+ $font-family-monospace: 'JetBrains Mono', 'Fira Code', 'SFMono-Regular', Consolas, monospace;
40
+
41
+ // -------------------------------------------------------------------- root --
42
+ :root {
43
+ --bs-body-font-size: 0.875rem;
44
+ }
45
+
46
+ // -------------------------------------------------------------- components --
47
+ .table {
48
+ thead th {
49
+ font-weight: 600;
50
+ letter-spacing: 0.04em;
51
+ }
52
+ }
53
+
54
+ .navbar .nav-link {
55
+ font-weight: 500;
56
+ font-size: 0.8125rem;
57
+ }
58
+
59
+ .table thead th {
60
+ font-size: 0.6875rem;
61
+ }
62
+
63
+ .badge {
64
+ font-family: $font-family-monospace;
65
+ }
66
+
67
+ .accordion {
68
+ .accordion-button {
69
+ font-weight: 500;
70
+ font-size: 0.8125rem;
71
+ }
72
+
73
+ .accordion-body {
74
+ font-size: 0.8125rem;
75
+ }
76
+ }
77
+
78
+ $btn-font-weight: 500;
79
+
80
+ .btn {
81
+ --bs-btn-font-weight: 500;
82
+ --bs-btn-font-size: 0.8125rem;
83
+ }
84
+
85
+ .form-control,
86
+ .form-select {
87
+ font-size: 0.8125rem;
88
+
89
+ &-sm {
90
+ font-size: 0.75rem;
91
+ }
92
+
93
+ &-lg {
94
+ font-size: 0.9375rem;
95
+ }
96
+ }
97
+
98
+ .form-label,
99
+ .col-form-label {
100
+ letter-spacing: 0.04em;
101
+ font-size: 0.6875rem;
102
+ }
103
+
104
+ .form-text {
105
+ font-size: 0.6875rem;
106
+ }
107
+
108
+ @each $state in ('valid', 'invalid') {
109
+ .#{$state}-feedback {
110
+ font-size: 0.6875rem;
111
+ }
112
+ }
@@ -0,0 +1,131 @@
1
+ // =============================================================================
2
+ // Optional Page background
3
+ // Three layers: mesh gradient, technical grid, ambient orbs.
4
+ //
5
+ // Opt-in. Enable it in your entry point:
6
+ //
7
+ // @import 'tiny-essentials/webTemplates/bootstrap/5.3/scss/themes/deepstrap/plugins/background/tiny_gradient_1';
8
+ // @include tiny-gb1-plugin();
9
+ //
10
+ // Then add the class to <body>:
11
+ //
12
+ // <body class="ui-background">
13
+ //
14
+ // Custom selector:
15
+ //
16
+ // @include tiny-gb1-plugin(('selector': '.my-background'));
17
+ //
18
+ // Custom colors: override the `--ui-bg-*` tokens below.
19
+ // =============================================================================
20
+
21
+ @use 'sass:map';
22
+
23
+ :root,
24
+ [data-bs-theme='dark'] {
25
+ --ui-orb-opacity: 1;
26
+ --ui-orb-blur: 48px;
27
+ --ui-mesh-1: 0.16;
28
+ --ui-mesh-2: 0.12;
29
+ }
30
+
31
+ [data-bs-theme='light'] {
32
+ --ui-orb-opacity: 0.5;
33
+ --ui-orb-blur: 64px;
34
+ --ui-mesh-1: 0.1;
35
+ --ui-mesh-2: 0.08;
36
+ }
37
+
38
+ $background-config: (
39
+ 'selector': 'body',
40
+ 'grid-size': 48px,
41
+ 'grid-mask': 'radial-gradient(ellipse 100% 70% at 50% 0%, #000 30%, transparent 78%)',
42
+ ) !default;
43
+
44
+ @mixin tiny-gb1-plugin($config: $background-config) {
45
+ $selector: map.get($config, 'selector');
46
+ $grid-size: map.get($config, 'grid-size');
47
+ $grid-mask: map.get($config, 'grid-mask');
48
+
49
+ #{$selector} {
50
+ position: relative;
51
+ min-height: 100vh;
52
+ background-color: var(--ui-bg-canvas);
53
+ background-image:
54
+ radial-gradient(
55
+ 70rem 50rem at 8% -14%,
56
+ rgb(var(--ui-bg-mesh-1) / var(--ui-bg-mesh-1-alpha)),
57
+ transparent 60%
58
+ ),
59
+ radial-gradient(
60
+ 60rem 44rem at 96% -4%,
61
+ rgb(var(--ui-bg-mesh-2) / var(--ui-bg-mesh-2-alpha)),
62
+ transparent 62%
63
+ ),
64
+ radial-gradient(
65
+ 50rem 40rem at 50% 120%,
66
+ rgb(var(--ui-bg-mesh-3) / var(--ui-bg-mesh-3-alpha)),
67
+ transparent 70%
68
+ );
69
+ background-attachment: fixed;
70
+ }
71
+
72
+ #{$selector}::before {
73
+ position: fixed;
74
+ inset: 0;
75
+ z-index: -2;
76
+ pointer-events: none;
77
+ content: '';
78
+ background-image:
79
+ linear-gradient(var(--ui-bg-grid) 1px, transparent 1px),
80
+ linear-gradient(90deg, var(--ui-bg-grid) 1px, transparent 1px);
81
+ background-size: $grid-size $grid-size;
82
+ mask-image: #{$grid-mask};
83
+ }
84
+
85
+ #{$selector}::after {
86
+ position: fixed;
87
+ inset: 0;
88
+ z-index: -1;
89
+ pointer-events: none;
90
+ content: '';
91
+ background:
92
+ radial-gradient(
93
+ 28rem 28rem at 12% 8%,
94
+ rgb(var(--ui-bg-orb-1) / var(--ui-bg-orb-1-alpha)),
95
+ transparent 70%
96
+ ),
97
+ radial-gradient(
98
+ 24rem 24rem at 88% 22%,
99
+ rgb(var(--ui-bg-orb-2) / var(--ui-bg-orb-2-alpha)),
100
+ transparent 70%
101
+ );
102
+ filter: blur(var(--ui-orb-blur));
103
+ opacity: var(--ui-orb-opacity);
104
+ transition: opacity var(--ui-duration) var(--ui-ease);
105
+ }
106
+ }
107
+
108
+ // ---------------------------------------------------------------------------
109
+ // Default color tokens.
110
+ // Override these in :root or in a scoped selector to recolor the background.
111
+ // ---------------------------------------------------------------------------
112
+ :root {
113
+ --ui-bg-canvas: var(--ui-canvas);
114
+
115
+ --ui-bg-mesh-1: var(--ui-accent-rgb);
116
+ --ui-bg-mesh-1-alpha: var(--ui-mesh-1);
117
+
118
+ --ui-bg-mesh-2: var(--ui-info-rgb);
119
+ --ui-bg-mesh-2-alpha: var(--ui-mesh-2);
120
+
121
+ --ui-bg-mesh-3: var(--ui-accent-rgb);
122
+ --ui-bg-mesh-3-alpha: 0.06;
123
+
124
+ --ui-bg-grid: var(--ui-grid-line);
125
+
126
+ --ui-bg-orb-1: var(--ui-accent-rgb);
127
+ --ui-bg-orb-1-alpha: 0.18;
128
+
129
+ --ui-bg-orb-2: var(--ui-info-rgb);
130
+ --ui-bg-orb-2-alpha: 0.14;
131
+ }
@@ -0,0 +1,47 @@
1
+ // =============================================================================
2
+ // Pink plugin
3
+ //
4
+ // Self-contained: tokens, buttons, group states, badges, alerts, utilities.
5
+ // Import after `buttons` in `_theme.scss`.
6
+ // =============================================================================
7
+
8
+ @use 'sass:map';
9
+
10
+ // ------------------------------------------------------------------ tokens --
11
+ $pink-tokens: (
12
+ 'dark': (
13
+ 'base': #ff5c9e,
14
+ 'on': #1a0410,
15
+ 'emphasis': #ff9ec4,
16
+ 'subtle-bg': #2a0f1c,
17
+ 'subtle-border': #5c2340,
18
+ ),
19
+ 'light': (
20
+ 'base': #c2185b,
21
+ 'on': #ffffff,
22
+ 'emphasis': #8a0f40,
23
+ 'subtle-bg': #fce4ec,
24
+ 'subtle-border': #f4a6c2,
25
+ ),
26
+ );
27
+
28
+ :root,
29
+ [data-bs-theme='dark'] {
30
+ @include tone-tokens('pink', map.get($pink-tokens, 'dark'));
31
+ }
32
+
33
+ [data-bs-theme='light'] {
34
+ @include tone-tokens('pink', map.get($pink-tokens, 'light'));
35
+ }
36
+
37
+ // ------------------------------------------------------------------ plugin --
38
+ @include tone-plugin(
39
+ 'pink',
40
+ (
41
+ 'token': 'pink',
42
+ 'on': 'pink',
43
+ )
44
+ );
45
+
46
+ // Form controls: select, checkbox, switch and range.
47
+ @include form-tone-plugin('pink', 'pink', 'pink', form-mark-contrast(#ff5c9e));