@wtfalch/design 0.9.0 → 0.9.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.
package/dist/valet.css CHANGED
@@ -291,12 +291,9 @@
291
291
  --font-sans: var(--font-sans);
292
292
  --font-mono: var(--font-mono);
293
293
  --text-xs: var(--text-xs);
294
- --text-xs--line-height: inherit;
295
294
  --text-sm: var(--text-sm);
296
- --text-sm--line-height: inherit;
297
295
  --text-base: var(--text-base);
298
296
  --text-lg: var(--text-lg);
299
- --text-lg--line-height: inherit;
300
297
  --text-xl: var(--text-xl);
301
298
  --font-weight-normal: var(--weight);
302
299
  --tracking-normal: var(--tracking);
@@ -311,14 +308,12 @@
311
308
  --spacing-5: var(--space-5);
312
309
  --spacing-6: var(--space-6);
313
310
  --spacing-10: var(--space-10);
314
- --text-2xs--line-height: inherit;
315
311
  --text-2xs: var(--text-2xs);
316
312
  --text-md: var(--text-md);
317
313
  --font-weight-strong: var(--weight-strong);
318
314
  --radius-pill: var(--radius-pill);
319
315
  --color-text: var(--text);
320
316
  --color-muted: var(--muted);
321
- --color-accent: var(--accent);
322
317
  --color-border: var(--border);
323
318
  --color-border-strong: var(--border-strong);
324
319
  }
@@ -574,9 +569,6 @@
574
569
  --tw-border-style: dashed;
575
570
  border-style: dashed;
576
571
  }
577
- .border-accent {
578
- border-color: var(--color-accent);
579
- }
580
572
  .border-border {
581
573
  border-color: var(--color-border);
582
574
  }
@@ -627,19 +619,15 @@
627
619
  }
628
620
  .text-2xs {
629
621
  font-size: var(--text-2xs);
630
- line-height: var(--tw-leading, var(--text-2xs--line-height));
631
622
  }
632
623
  .text-lg {
633
624
  font-size: var(--text-lg);
634
- line-height: var(--tw-leading, var(--text-lg--line-height));
635
625
  }
636
626
  .text-sm {
637
627
  font-size: var(--text-sm);
638
- line-height: var(--tw-leading, var(--text-sm--line-height));
639
628
  }
640
629
  .text-xs {
641
630
  font-size: var(--text-xs);
642
- line-height: var(--tw-leading, var(--text-xs--line-height));
643
631
  }
644
632
  .leading-\[0\] {
645
633
  --tw-leading: 0;
@@ -694,9 +682,6 @@
694
682
  --tw-numeric-spacing: tabular-nums;
695
683
  font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
696
684
  }
697
- .opacity-0 {
698
- opacity: 0%;
699
- }
700
685
  .opacity-60 {
701
686
  opacity: 60%;
702
687
  }
@@ -739,9 +724,6 @@
739
724
  .surface-panel {
740
725
  background: var(--panel);
741
726
  }
742
- .surface-panel-2 {
743
- background: var(--panel-2);
744
- }
745
727
  .disabled\:cursor-default:disabled {
746
728
  cursor: default;
747
729
  }
@@ -981,7 +963,19 @@
981
963
  }
982
964
  }
983
965
 
984
- /* ---- ./base.css ---- */
966
+ /* ---- ./_system-light.css ---- */
967
+ /* The `system` theme's light half.
968
+ *
969
+ * Its own file, and outside the components layer, because it is a *theme*
970
+ * rather than a component rule. `tokens.css` states the dark base on `:root`
971
+ * and is unlayered; the moment this sat inside `@layer components` it lost to
972
+ * that, and every `system` specimen rendered dark on a light-mode machine.
973
+ * Unlayered beats layered whatever the selector says, which is exactly the
974
+ * trap this repository keeps finding in different costumes.
975
+ *
976
+ * The underscore marks it the same way `_tailwind.built.css` is marked:
977
+ * `copy-css.mjs` passes both through without wrapping them.
978
+ */
985
979
  /* Light, only under the `system` theme. This used to override `:root`
986
980
  unconditionally, so choosing a dark theme on a light-mode laptop got
987
981
  silently repainted. Every other theme states its own palette. */
@@ -1010,6 +1004,8 @@
1010
1004
  }
1011
1005
  }
1012
1006
 
1007
+ /* ---- ./base.css ---- */
1008
+ @layer components {
1013
1009
  /* Derived from the two surfaces every theme already defines, so a theme gets a
1014
1010
  control colour without knowing this exists. */
1015
1011
  /* Pseudo-elements too. `*` does not match them, and `box-sizing` is not
@@ -1870,8 +1866,10 @@ input:active, textarea:active, select:active { transform: none; }
1870
1866
  color: var(--muted);
1871
1867
  opacity: 1;
1872
1868
  }
1869
+ }
1873
1870
 
1874
1871
  /* ---- ./select.css ---- */
1872
+ @layer components {
1875
1873
  /* How big a control is, asked for rather than inherited.
1876
1874
  Four sizes existed and every one of them came from a descendant selector:
1877
1875
  `.set-row button` was 11px in 3px of padding, `.approval-actions button` was
@@ -1966,16 +1964,19 @@ input:active, textarea:active, select:active { transform: none; }
1966
1964
  /* State is read off React Aria's attributes: `data-open` on the root,
1967
1965
  `data-focused` / `data-selected` / `data-disabled` on an item, where
1968
1966
  `.open`, `[data-active]`, `.on` and `.off` used to be. */
1969
- .sel-list { scroll-padding-block: var(--space-1); box-shadow: var(--shadow-2); })` brings up ended flush against the
1970
- border and read as clipped rather than as one of a set -- and this list
1971
- opens scrolled to whatever is chosen, so that was the ordinary state.
1972
- `scroll-padding` insets what counts as "in view", so it stops short by
1973
- the same four the sides have. */
1967
+ /* The list keeps two things the utilities on `Select` cannot say.
1968
+ *
1969
+ * `scroll-padding-block`: the same room while the list is scrolled as it has
1970
+ * at rest. Padding at the top of a scroll container scrolls away with the
1971
+ * content, so the row `scrollIntoView({block: 'nearest'})` brings up ended
1972
+ * flush against the border and read as clipped rather than as one of a set --
1973
+ * and this list opens scrolled to whatever is chosen, so that was the
1974
+ * ordinary state.
1975
+ *
1976
+ * `box-shadow`: `--shadow-2` is a token, and a utility would have to inline
1977
+ * the value, which is the one thing the vocabulary exists to stop. */
1978
+ .sel-list {
1974
1979
  scroll-padding-block: var(--space-1);
1975
- list-style: none;
1976
- border: var(--border-width) solid var(--border-strong);
1977
- border-radius: var(--radius-md);
1978
- background: var(--panel);
1979
1980
  box-shadow: var(--shadow-2);
1980
1981
  }
1981
1982
 
@@ -1990,6 +1991,19 @@ input:active, textarea:active, select:active { transform: none; }
1990
1991
 
1991
1992
  /* The tick marks the chosen row. Colour alone would not: a list where the only
1992
1993
  difference is a hue is a list you cannot read past. */
1994
+ /* The tick's resting state lives here, beside the state that overrides it.
1995
+ *
1996
+ * It was `opacity-0` on the element and `opacity: 1` here, which worked only
1997
+ * while this sheet was unlayered. A utility is in `@layer utilities` and
1998
+ * beats `@layer components` whatever the selector, so the moment the sheets
1999
+ * moved into a layer the tick stopped appearing on the selected row -- the
2000
+ * resting state won permanently.
2001
+ *
2002
+ * The rule generalises: a utility for a resting state whose active state is a
2003
+ * relationship between elements will always beat that active state. The pair
2004
+ * has to sit in the same layer. */
2005
+ .sel-tick { opacity: 0; }
2006
+
1993
2007
  .sel-item[data-selected] .sel-tick { opacity: 1; }
1994
2008
 
1995
2009
  /* The icon on a speaker's row in the open list -- `Select`'s `aside`. Last in
@@ -2024,8 +2038,10 @@ input:active, textarea:active, select:active { transform: none; }
2024
2038
  .field > input,
2025
2039
  .field > textarea,
2026
2040
  .field > .sel { width: 100%; }
2041
+ }
2027
2042
 
2028
2043
  /* ---- ./dangerzone.css ---- */
2044
+ @layer components {
2029
2045
  /* Destructive, and legible as such standing still. */
2030
2046
  .btn.danger {
2031
2047
  color: var(--bad);
@@ -2137,8 +2153,10 @@ input:active, textarea:active, select:active { transform: none; }
2137
2153
  controls in the same column at the same indent that do not line up read as
2138
2154
  an accident rather than as a pair. */
2139
2155
  .field-row > button { min-width: 9ch; }
2156
+ }
2140
2157
 
2141
2158
  /* ---- ./callout.css ---- */
2159
+ @layer components {
2142
2160
  /* One shape for everything that tells you something.
2143
2161
  `.banner` and `.callout` were the same box drawn twice: a bordered, rounded,
2144
2162
  12px panel with a tint. They differed in padding by a pixel in each direction
@@ -2277,8 +2295,10 @@ input:active, textarea:active, select:active { transform: none; }
2277
2295
  }
2278
2296
 
2279
2297
  .callout button { flex: none; }
2298
+ }
2280
2299
 
2281
2300
  /* ---- ./card.css ---- */
2301
+ @layer components {
2282
2302
  /* `.card` is public API, not this component's private styling.
2283
2303
  *
2284
2304
  * Consumers apply it to their own markup -- the gallery's skeleton specimen
@@ -2420,8 +2440,10 @@ input:active, textarea:active, select:active { transform: none; }
2420
2440
  }
2421
2441
 
2422
2442
  .card[aria-pressed='true']:hover { border-color: var(--accent); }
2443
+ }
2423
2444
 
2424
2445
  /* ---- ./toggle.css ---- */
2446
+ @layer components {
2425
2447
  .card-action .switch-row { padding: 0; gap: var(--space-2); }
2426
2448
 
2427
2449
  .card-action .switch-row .switch-body { flex: none; }
@@ -2652,8 +2674,10 @@ input[type='radio']:active:not(:disabled) {
2652
2674
  @media (prefers-reduced-motion: reduce) {
2653
2675
  .toggle-sweep::before { animation: none; background: color-mix(in oklab, var(--accent) 45%, transparent); }
2654
2676
  }
2677
+ }
2655
2678
 
2656
2679
  /* ---- ./skeleton.css ---- */
2680
+ @layer components {
2657
2681
  .muted { color: var(--muted); }
2658
2682
 
2659
2683
  .pulse-block {
@@ -2708,8 +2732,10 @@ input[type='radio']:active:not(:disabled) {
2708
2732
  /* Still distinguishable from a real block of colour, and still still. */
2709
2733
  .skel-pulse { animation: none; opacity: 0.8; }
2710
2734
  }
2735
+ }
2711
2736
 
2712
2737
  /* ---- ./rows.css ---- */
2738
+ @layer components {
2713
2739
  .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2714
2740
 
2715
2741
  /* A name and the pills that qualify it, on one line, where the name is the only
@@ -2970,8 +2996,10 @@ input[type='radio']:active:not(:disabled) {
2970
2996
  .row-hit:hover .truncate { color: var(--accent); }
2971
2997
 
2972
2998
  .row-hit:focus-visible { outline: none; box-shadow: var(--focus-ring); }
2999
+ }
2973
3000
 
2974
3001
  /* ---- ./progress.css ---- */
3002
+ @layer components {
2975
3003
  /* progress ----------------------------------------------------------- */
2976
3004
 
2977
3005
  /* The bar itself: a track with a child it fills, an animation and a
@@ -3013,8 +3041,10 @@ input[type='radio']:active:not(:disabled) {
3013
3041
  /* Still distinguishable from empty, and from full. */
3014
3042
  .bar-indeterminate > i { animation: none; width: 100%; opacity: 0.35; }
3015
3043
  }
3044
+ }
3016
3045
 
3017
3046
  /* ---- ./tabs.css ---- */
3047
+ @layer components {
3018
3048
  /* ---------------------------------------------------------------- tabs */
3019
3049
  .tabs { position: relative; display: flex; gap: var(--space-1); }
3020
3050
 
@@ -3115,8 +3145,10 @@ input[type='radio']:active:not(:disabled) {
3115
3145
  }
3116
3146
 
3117
3147
  .tabs-vertical .tab:active:not(:disabled) { border-color: transparent; }
3148
+ }
3118
3149
 
3119
3150
  /* ---- ./toast.css ---- */
3151
+ @layer components {
3120
3152
  /* ---------------------------------------------------------------- toasts */
3121
3153
  .toasts {
3122
3154
  position: fixed;
@@ -3214,8 +3246,10 @@ input[type='radio']:active:not(:disabled) {
3214
3246
  outline: 2px solid var(--accent);
3215
3247
  outline-offset: 2px;
3216
3248
  }
3249
+ }
3217
3250
 
3218
3251
  /* ---- ./modal.css ---- */
3252
+ @layer components {
3219
3253
  /* modal --------------------------------------------------------------- */
3220
3254
 
3221
3255
  /* `hidden` needs saying out loud here. The browser's own `[hidden]` rule is a
@@ -3446,8 +3480,10 @@ input[type='radio']:active:not(:disabled) {
3446
3480
  .modal.sheet[data-entering],
3447
3481
  .modal.sheet[data-exiting] { animation: none; }
3448
3482
  }
3483
+ }
3449
3484
 
3450
3485
  /* ---- ./slider.css ---- */
3486
+ @layer components {
3451
3487
  /* slider ----------------------------------------------------------------- */
3452
3488
  /* A number from a range -- `Slider.tsx` says when one is the right control.
3453
3489
  The row is laid out like a switch row: words on the left, the control on the
@@ -3669,8 +3705,10 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
3669
3705
  the scale, and the two line up; an explicit `size-*` still wins. */
3670
3706
  :where(.set-row) button,
3671
3707
  :where(.set-row) .slider-box { font-size: var(--text-xs); }
3708
+ }
3672
3709
 
3673
3710
  /* ---- ./checkbox.css ---- */
3711
+ @layer components {
3674
3712
  /* A row you choose. There is no checkbox in it.
3675
3713
  Every one of the fourteen in this app sits beside a name and a line of
3676
3714
  explanation, so the row was always the thing being designed and the 17px
@@ -3840,8 +3878,10 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
3840
3878
  .choice[data-disabled] .choice-why { opacity: 0.5; }
3841
3879
 
3842
3880
  .choice[data-disabled]::after { opacity: 0.4; }
3881
+ }
3843
3882
 
3844
3883
  /* ---- ./table.css ---- */
3884
+ @layer components {
3845
3885
  /* A second line under a row's name, inside the `<th scope="row">` that makes it
3846
3886
  one. The cell is bold because it is a heading; what hangs under it is not,
3847
3887
  and inherited the weight -- so a pinned version read as loud as the thing it
@@ -3889,27 +3929,48 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
3889
3929
  .data-table .num { text-align: right; font-variant-numeric: tabular-nums; font-family: var(--font-mono); }
3890
3930
 
3891
3931
  .data-table thead th[style*='right'] { text-align: right; }
3932
+ }
3892
3933
 
3893
3934
  /* ---- ./sizegrid.css ---- */
3894
- /* What is left of the size grid once it draws itself.
3935
+ @layer components {
3936
+ /* The cell's colour, all of it, in one place.
3937
+ *
3938
+ * `SizeGrid` draws the cell's geometry with utilities and leaves every colour
3939
+ * here, because `on` and `chosen` override the resting state -- and a utility
3940
+ * is in `@layer utilities`, which beats `@layer components` whatever the
3941
+ * selector. Stated as `surface-panel-2` and `border-border` on the element,
3942
+ * the resting state won permanently and no cell ever lit up.
3895
3943
  *
3896
- * `on` follows the pointer; `chosen` is what is actually saved, shown only
3897
- * when nothing is hovered so the two can never contradict each other.
3898
- * `chosen` is a border colour and says so at the call site; `on` is a fill
3899
- * mixed from the accent, and `color-mix` in an arbitrary value is less
3900
- * readable than the rule it replaces. */
3944
+ * That is the third time this pattern has bitten: `Select`'s tick and
3945
+ * `Empty`'s figure were the other two. The rule: a resting state whose
3946
+ * active state is a CSS rule has to be a CSS rule too. */
3947
+ .size-cell {
3948
+ border: var(--border-width) solid var(--border);
3949
+ background: var(--panel-2);
3950
+ }
3951
+
3952
+ /* `on` follows the pointer; `chosen` is what is actually saved, shown only
3953
+ when nothing is hovered so the two can never contradict each other. */
3901
3954
  .size-cell.on {
3902
3955
  border-color: var(--accent);
3903
3956
  background: color-mix(in srgb, var(--accent) 45%, transparent);
3904
3957
  }
3905
3958
 
3959
+ .size-cell.chosen { border-color: var(--accent); }
3960
+ }
3961
+
3906
3962
  /* ---- ./tooltip.css ---- */
3963
+ @layer components {
3907
3964
  /* A callout: something worth knowing, with nothing to answer. Distinct from a
3908
3965
  `?`, which is an offer to read more, and from a banner, which is a problem.
3909
3966
  The mark is a round `i` rather than an emoji so it takes the theme's colours
3910
3967
  and stays the same size as the text beside it. */
3911
- /* An info-toned `.callout`, spelled the old way. Identical to it now rather than
3912
- nearly identical to it, which is the whole point of the consolidation: the
3968
+ /* An info-toned `.callout`, spelled the old way. Identical to it now rather
3969
+ than nearly identical to it, which is the whole point of the consolidation.
3970
+ (This comment has been unterminated since before the Tailwind branch -- it
3971
+ stops mid-sentence and never closes, so the CSS parser merged it with the
3972
+ one below and recovered. Nothing was lost from the stylesheet; the rest of
3973
+ the sentence was. Closed here rather than guessed at.) */
3913
3974
 
3914
3975
  /* What is left once `Tooltip` draws its own mark: the hover and focus that
3915
3976
  reach the mark from its parent, and the tip -- whose closed and open
@@ -3992,8 +4053,10 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
3992
4053
  }
3993
4054
 
3994
4055
  .explain-tip strong { color: var(--text); font-weight: 600; }
4056
+ }
3995
4057
 
3996
4058
  /* ---- ./illustration.css ---- */
4059
+ @layer components {
3997
4060
  /* illustrations -------------------------------------------------------- */
3998
4061
 
3999
4062
  /* Open Peeps, two colours, wearing whatever the theme is.
@@ -4031,8 +4094,10 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
4031
4094
  * original rule already carried a note about needing two classes to beat
4032
4095
  * `.illo`; layers make that impossible rather than merely fiddly. */
4033
4096
  .nothing-figure { color: var(--muted); }
4097
+ }
4034
4098
 
4035
4099
  /* ---- ./field.css ---- */
4100
+ @layer components {
4036
4101
  /* fields --------------------------------------------------------------- */
4037
4102
 
4038
4103
  /* Label, description, input, error -- in the order they are wanted. The
@@ -4207,8 +4272,10 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
4207
4272
  background: var(--panel-2);
4208
4273
  color: var(--text);
4209
4274
  }
4275
+ }
4210
4276
 
4211
4277
  /* ---- ./tour.css ---- */
4278
+ @layer components {
4212
4279
  /* tour ----------------------------------------------------------------- */
4213
4280
 
4214
4281
  /* The layer sits over everything and catches nothing: the scrim is painted by
@@ -4270,12 +4337,14 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
4270
4337
  .tour-actions { display: flex; align-items: center; gap: var(--space-2); margin-top: var(--space-2); }
4271
4338
 
4272
4339
  .tour-count { color: var(--muted); font-size: var(--text-xs); }
4340
+ }
4273
4341
 
4274
4342
  /* The mail and forum shell, added in 0.4.0. After the rest, because the
4275
4343
  anchored surfaces (`.pop`, `.menu-sheet`, `.cmd`) sit over everything and a
4276
4344
  rule of equal specificity that came earlier would lose to whatever the
4277
4345
  sheets they cover happen to set. */
4278
4346
  /* ---- ./stat.css ---- */
4347
+ @layer components {
4279
4348
  /* What the utilities on `Stat` cannot say: a tone on the tile colouring the
4280
4349
  figure inside it. An attribute on the parent selecting a child is a
4281
4350
  relationship; a utility is a property on one element.
@@ -4286,8 +4355,10 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
4286
4355
  .stat[data-tone='good'] .stat-value { color: var(--good); }
4287
4356
  .stat[data-tone='warn'] .stat-value { color: var(--warn); }
4288
4357
  .stat[data-tone='bad'] .stat-value { color: var(--bad); }
4358
+ }
4289
4359
 
4290
4360
  /* ---- ./shell.css ---- */
4361
+ @layer components {
4291
4362
  /* The measure, and only the measure.
4292
4363
  *
4293
4364
  * `Shell` draws itself with utilities -- it is layout and nothing else. What
@@ -4314,8 +4385,10 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
4314
4385
  font-size: var(--text-sm);
4315
4386
  white-space: nowrap;
4316
4387
  }
4388
+ }
4317
4389
 
4318
4390
  /* ---- ./scrollarea.css ---- */
4391
+ @layer components {
4319
4392
  /* A box that scrolls, with its edges drawn.
4320
4393
 
4321
4394
  The fades are `::before`/`::after` on the scroller itself, pinned with
@@ -4408,8 +4481,10 @@ input[type='range'].slider:disabled::-moz-range-thumb { opacity: 0; }
4408
4481
  .scroller.faded::before,
4409
4482
  .scroller.faded::after { transition: none; }
4410
4483
  }
4484
+ }
4411
4485
 
4412
4486
  /* ---- ./splitpane.css ---- */
4487
+ @layer components {
4413
4488
  /* Two panes and the handle between them. */
4414
4489
  .split {
4415
4490
  display: flex;
@@ -4509,8 +4584,10 @@ body.splitting * { cursor: inherit !important; }
4509
4584
  @media (prefers-reduced-motion: reduce) {
4510
4585
  .split-grip { transition: none; }
4511
4586
  }
4587
+ }
4512
4588
 
4513
4589
  /* ---- ./popover.css ---- */
4590
+ @layer components {
4514
4591
  /* A small surface anchored to what opened it. Same sheet as the select's list,
4515
4592
  because they are the same object -- something that appeared over the page,
4516
4593
  attached to a control. */
@@ -4564,8 +4641,10 @@ body.splitting * { cursor: inherit !important; }
4564
4641
  .pop[data-entering],
4565
4642
  .pop[data-exiting] { animation: none; }
4566
4643
  }
4644
+ }
4567
4645
 
4568
4646
  /* ---- ./menu.css ---- */
4647
+ @layer components {
4569
4648
  /* What is left once `Menu` draws its sheet and its list: the rows, whose
4570
4649
  `data-focused`, `data-pressed` and danger states React Aria stamps on
4571
4650
  them, and the rules that reach from a row into what it holds. The
@@ -4647,8 +4726,10 @@ body.splitting * { cursor: inherit !important; }
4647
4726
  }
4648
4727
 
4649
4728
  .menu-sheet { box-shadow: var(--shadow-2); }
4729
+ }
4650
4730
 
4651
4731
  /* ---- ./command.css ---- */
4732
+ @layer components {
4652
4733
  /* The command palette: a field over the app and a list under it. */
4653
4734
  .cmd-scrim {
4654
4735
  position: fixed;
@@ -4790,8 +4871,10 @@ body.splitting * { cursor: inherit !important; }
4790
4871
  .cmd-scrim[data-exiting],
4791
4872
  .cmd[data-entering] { animation: none; }
4792
4873
  }
4874
+ }
4793
4875
 
4794
4876
  /* ---- ./pagination.css ---- */
4877
+ @layer components {
4795
4878
  /* What is left once `Pagination` draws its own frame: the step and page
4796
4879
  buttons, whose hover, focus-visible and current states are pseudo-classes
4797
4880
  on two selectors at once, and `.pager-count strong`, which reaches into
@@ -4910,8 +4993,10 @@ body.splitting * { cursor: inherit !important; }
4910
4993
  .pager-page,
4911
4994
  .pager-jump { transition: none; }
4912
4995
  }
4996
+ }
4913
4997
 
4914
4998
  /* ---- ./identity.css ---- */
4999
+ @layer components {
4915
5000
  /* A person, said in one line: initials, name, sometimes the address. */
4916
5001
  .ident {
4917
5002
  display: inline-flex;
@@ -5012,6 +5097,7 @@ body.splitting * { cursor: inherit !important; }
5012
5097
 
5013
5098
  .ident-remove:hover { background: var(--panel); color: var(--text); }
5014
5099
  .ident-remove:focus-visible { outline: none; box-shadow: var(--focus-ring); }
5100
+ }
5015
5101
  /* ---- valet: the themes ---- */
5016
5102
  :root[data-theme='valet']{--bg:#f4f5f8;--panel:#ffffff;--panel-2:#eceef3;--border:#dcdfe7;--border-strong:#7b8597;--text:#171a21;--muted:#5b6474;--accent:#4f46e5;--accent-dim:#a9a4f0;--on-accent:#ffffff;--good:#1b7f4b;--warn:#8a5f0a;--bad:#bf3a31;--info:#0e6f8e;--app-bg:#f4f5f8;--shadow-1:0 4px 14px rgba(23, 26, 33, 0.08);--shadow-2:0 8px 24px rgba(23, 26, 33, 0.10);--shadow-3:0 12px 32px rgba(23, 26, 33, 0.12);--scrim:rgba(23, 26, 33, 0.32);color-scheme:light}
5017
5103
  :root[data-theme='valet-night']{--bg:#0c0f14;--panel:#141820;--panel-2:#1b2029;--border:#262c37;--border-strong:#616b7d;--text:#e8eaf0;--muted:#9ba4b5;--accent:#8f88ff;--accent-dim:#3f3a8f;--on-accent:#0d0b2e;--good:#5fcb8f;--warn:#e2ae58;--bad:#f28b84;--info:#57c4e8;--app-bg:#0c0f14;--shadow-1:0 6px 20px rgba(0, 0, 0, 0.28);--shadow-2:0 8px 28px rgba(0, 0, 0, 0.34);--shadow-3:0 10px 34px rgba(0, 0, 0, 0.38);--scrim:rgba(0, 0, 0, 0.5);color-scheme:dark}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wtfalch/design",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "wtfalch's design system: themeable components on a fixed token vocabulary.",
5
5
  "keywords": [
6
6
  "design-system",