@ceebee/ui 1.0.1 → 1.0.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 (2) hide show
  1. package/dist/styles.css +75 -11
  2. package/package.json +1 -1
package/dist/styles.css CHANGED
@@ -231,7 +231,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
231
231
  /* Someone who asked their system for more contrast gets stronger edges and darker secondary
232
232
  text, without the palette changing hue underneath them. */
233
233
  @media (prefers-contrast: more) {
234
- :root {
234
+ /* `html:root` deliberately outranks a Skin's later `:root` rule. Contrast is a reader
235
+ preference, so a brand Skin may change hue but must not weaken these accessibility edges. */
236
+ html:root {
235
237
  --cb-border: oklch(0.7 0.014 280);
236
238
  --cb-border-strong: oklch(0.45 0.02 280);
237
239
  --cb-fg-muted: oklch(0.35 0.02 280);
@@ -240,8 +242,8 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
240
242
  --cb-glass-border-strong: oklch(0.45 0.02 280);
241
243
  }
242
244
 
243
- :root[data-theme="dark"],
244
- :root:not([data-theme="light"]) {
245
+ html:root[data-theme="dark"],
246
+ html:root:not([data-theme="light"]) {
245
247
  --cb-border: oklch(0.58 0.026 280);
246
248
  --cb-border-strong: oklch(0.72 0.03 280);
247
249
  --cb-fg-muted: oklch(0.88 0.012 280);
@@ -258,6 +260,9 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
258
260
  --cb-duration-base: 220ms;
259
261
  --cb-duration-slow: 380ms;
260
262
  --cb-duration-deliberate: 620ms;
263
+ --cb-duration-stagger-tight: 40ms;
264
+ --cb-duration-stagger-standard: 60ms;
265
+ --cb-duration-stagger-relaxed: 80ms;
261
266
 
262
267
  --cb-ease-standard: cubic-bezier(0.2, 0, 0, 1);
263
268
  --cb-ease-entrance: cubic-bezier(0.05, 0.7, 0.1, 1);
@@ -272,6 +277,49 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
272
277
  :root { --cb-motion-scale: 0; }
273
278
  }
274
279
 
280
+ /* tokens/surface.css */
281
+ /* Component Tokens shared by every platform Surface rendering. */
282
+ :root {
283
+ --cb-surface-tinted-edge-strength: 0.22;
284
+ --cb-surface-gradient-start-strength: 0.26;
285
+ --cb-surface-gradient-end-strength: 0.06;
286
+ --cb-surface-gradient-edge-strength: 0.24;
287
+ }
288
+
289
+ /* tokens/data-visualization.css */
290
+ /* Component Tokens shared by the web and Flutter mini-chart renderings. */
291
+ :root {
292
+ --cb-mini-chart-track-strength: 0.08;
293
+ --cb-mini-chart-area-strength: 0.16;
294
+ --cb-mini-chart-bar-strength: 0.70;
295
+ --cb-mini-chart-line-width: 0.09375rem;
296
+ --cb-mini-chart-marker-radius: 0.15625rem;
297
+ --cb-mini-chart-bar-gap: 0.125rem;
298
+ --cb-mini-chart-min-bar: 0.0625rem;
299
+ --cb-mini-chart-bar-radius: 0.0625rem;
300
+ --cb-mini-chart-donut-size-sm: 4rem;
301
+ --cb-mini-chart-donut-size-md: 7.5rem;
302
+ --cb-mini-chart-donut-size-lg: 10rem;
303
+ --cb-mini-chart-donut-thickness-sm: 0.5rem;
304
+ --cb-mini-chart-donut-thickness-md: 1rem;
305
+ --cb-mini-chart-donut-thickness-lg: 1.5rem;
306
+ --cb-mini-chart-width-sm: 6rem;
307
+ --cb-mini-chart-width-md: 7.5rem;
308
+ --cb-mini-chart-width-lg: 10rem;
309
+ --cb-mini-chart-height-sm: 1.5rem;
310
+ --cb-mini-chart-height-md: 2rem;
311
+ --cb-mini-chart-height-lg: 3rem;
312
+ --cb-mini-chart-padding: 0.0625rem;
313
+ }
314
+
315
+ /* tokens/skeleton.css */
316
+ /* Skeleton component Tokens shared by web and Flutter renderings. */
317
+ :root {
318
+ --cb-skeleton-fill-strength: 0.28;
319
+ --cb-skeleton-opacity-min: 0.56;
320
+ --cb-skeleton-opacity-max: 1;
321
+ }
322
+
275
323
  /* foundation/layout.css */
276
324
  .cb-flex { display: flex; gap: var(--cb-flex-gap); }
277
325
  .cb-flex--column { flex-direction: column; }
@@ -361,7 +409,11 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
361
409
  /* Tint mixes the accent into the surface so one strength token retunes every tinted card. */
362
410
  .cb-surface--tinted {
363
411
  background: color-mix(in oklch, var(--cb-surface-accent) calc(var(--cb-tint-strength) * 100%), var(--cb-surface));
364
- border-color: color-mix(in oklch, var(--cb-surface-accent) 22%, transparent);
412
+ border-color: color-mix(
413
+ in oklch,
414
+ var(--cb-surface-accent) calc(var(--cb-surface-tinted-edge-strength) * 100%),
415
+ transparent
416
+ );
365
417
  }
366
418
 
367
419
  .cb-surface--glass {
@@ -391,10 +443,22 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
391
443
  .cb-surface--gradient {
392
444
  background: linear-gradient(
393
445
  var(--cb-gradient-angle),
394
- color-mix(in oklch, var(--cb-surface-accent) 26%, var(--cb-surface)),
395
- color-mix(in oklch, var(--cb-surface-accent) 6%, var(--cb-surface))
446
+ color-mix(
447
+ in oklch,
448
+ var(--cb-surface-accent) calc(var(--cb-surface-gradient-start-strength) * 100%),
449
+ var(--cb-surface)
450
+ ),
451
+ color-mix(
452
+ in oklch,
453
+ var(--cb-surface-accent) calc(var(--cb-surface-gradient-end-strength) * 100%),
454
+ var(--cb-surface)
455
+ )
456
+ );
457
+ border-color: color-mix(
458
+ in oklch,
459
+ var(--cb-surface-accent) calc(var(--cb-surface-gradient-edge-strength) * 100%),
460
+ transparent
396
461
  );
397
- border-color: color-mix(in oklch, var(--cb-surface-accent) 24%, transparent);
398
462
  }
399
463
 
400
464
  .cb-elevation--none { box-shadow: var(--cb-surface-material-shadow); }
@@ -657,7 +721,7 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
657
721
  /* data/donut.css */
658
722
  .cb-donut { position: relative; display: inline-grid; place-items: center; }
659
723
  .cb-donut svg { position: absolute; inset: 0; }
660
- .cb-donut__track { stroke: color-mix(in oklch, var(--cb-fg) 8%, transparent); }
724
+ .cb-donut__track { stroke: color-mix(in oklch, var(--cb-fg) calc(var(--cb-mini-chart-track-strength) * 100%), transparent); }
661
725
  .cb-donut__arc { transition: stroke-dasharray var(--cb-duration-deliberate) var(--cb-ease-entrance); }
662
726
  /* Reduced motion: the arcs are drawn at their final length rather than growing into place. */
663
727
  @media (prefers-reduced-motion: reduce) {
@@ -690,10 +754,10 @@ html, body { background: var(--cb-bg); color: var(--cb-fg); }
690
754
  .cb-sparkline[data-hue="amber"] { --cb-spark-accent: var(--cb-decor-amber); }
691
755
  .cb-sparkline[data-hue="rose"] { --cb-spark-accent: var(--cb-decor-rose); }
692
756
 
693
- .cb-sparkline__line { stroke: var(--cb-spark-accent); stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
694
- .cb-sparkline__area { fill: color-mix(in oklch, var(--cb-spark-accent) 16%, transparent); }
757
+ .cb-sparkline__line { stroke: var(--cb-spark-accent); stroke-width: var(--cb-mini-chart-line-width); stroke-linecap: round; stroke-linejoin: round; }
758
+ .cb-sparkline__area { fill: color-mix(in oklch, var(--cb-spark-accent) calc(var(--cb-mini-chart-area-strength) * 100%), transparent); }
695
759
  .cb-sparkline__last { fill: var(--cb-spark-accent); }
696
- .cb-sparkline__bar { fill: color-mix(in oklch, var(--cb-spark-accent) 70%, transparent); }
760
+ .cb-sparkline__bar { fill: color-mix(in oklch, var(--cb-spark-accent) calc(var(--cb-mini-chart-bar-strength) * 100%), transparent); }
697
761
 
698
762
  /* data/leaderboard.css */
699
763
  .cb-leaderboard { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--cb-space-1); font-family: var(--cb-font-sans); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ceebee/ui",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Ceebee's design system: tokens, themed primitives, motion, and onboarding.",
5
5
  "license": "MIT",
6
6
  "repository": {