@tangle-network/sandbox-ui 0.134.7 → 0.134.9

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/styles.css CHANGED
@@ -2024,6 +2024,9 @@
2024
2024
  border-color: color-mix(in oklab, hsl(var(--border)) 70%, transparent);
2025
2025
  }
2026
2026
  }
2027
+ .self-center {
2028
+ align-self: center;
2029
+ }
2027
2030
  .self-start {
2028
2031
  align-self: flex-start;
2029
2032
  }
@@ -2296,6 +2299,9 @@
2296
2299
  .border-\[var\(--surface-success-border\)\] {
2297
2300
  border-color: var(--surface-success-border);
2298
2301
  }
2302
+ .border-\[var\(--surface-violet-border\)\] {
2303
+ border-color: var(--surface-violet-border);
2304
+ }
2299
2305
  .border-\[var\(--surface-warning-border\)\] {
2300
2306
  border-color: var(--surface-warning-border);
2301
2307
  }
@@ -2638,6 +2644,9 @@
2638
2644
  .bg-\[var\(--surface-success-text\)\] {
2639
2645
  background-color: var(--surface-success-text);
2640
2646
  }
2647
+ .bg-\[var\(--surface-violet-bg\)\] {
2648
+ background-color: var(--surface-violet-bg);
2649
+ }
2641
2650
  .bg-\[var\(--surface-warning-bg\)\] {
2642
2651
  background-color: var(--surface-warning-bg);
2643
2652
  }
@@ -3703,6 +3712,9 @@
3703
3712
  .text-\[var\(--surface-success-text\,\#047857\)\] {
3704
3713
  color: var(--surface-success-text,#047857);
3705
3714
  }
3715
+ .text-\[var\(--surface-violet-text\)\] {
3716
+ color: var(--surface-violet-text);
3717
+ }
3706
3718
  .text-\[var\(--surface-warning-text\)\] {
3707
3719
  color: var(--surface-warning-text);
3708
3720
  }
@@ -4168,11 +4180,6 @@
4168
4180
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4169
4181
  transition-duration: var(--tw-duration, var(--default-transition-duration));
4170
4182
  }
4171
- .transition-\[border-color\,box-shadow\,background-color\] {
4172
- transition-property: border-color,box-shadow,background-color;
4173
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4174
- transition-duration: var(--tw-duration, var(--default-transition-duration));
4175
- }
4176
4183
  .transition-\[border-color\,box-shadow\] {
4177
4184
  transition-property: border-color,box-shadow;
4178
4185
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -4183,11 +4190,6 @@
4183
4190
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4184
4191
  transition-duration: var(--tw-duration, var(--default-transition-duration));
4185
4192
  }
4186
- .transition-\[color\,background-color\,border-color\,box-shadow\,transform\,scale\] {
4187
- transition-property: color,background-color,border-color,box-shadow,transform,scale;
4188
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4189
- transition-duration: var(--tw-duration, var(--default-transition-duration));
4190
- }
4191
4193
  .transition-\[color\,background-color\,border-color\,box-shadow\] {
4192
4194
  transition-property: color,background-color,border-color,box-shadow;
4193
4195
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -4198,11 +4200,6 @@
4198
4200
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4199
4201
  transition-duration: var(--tw-duration, var(--default-transition-duration));
4200
4202
  }
4201
- .transition-\[margin-left\] {
4202
- transition-property: margin-left;
4203
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4204
- transition-duration: var(--tw-duration, var(--default-transition-duration));
4205
- }
4206
4203
  .transition-\[opacity\,background-color\] {
4207
4204
  transition-property: opacity,background-color;
4208
4205
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -4253,6 +4250,9 @@
4253
4250
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
4254
4251
  transition-duration: var(--tw-duration, var(--default-transition-duration));
4255
4252
  }
4253
+ .transition-none {
4254
+ transition-property: none;
4255
+ }
4256
4256
  .duration-150 {
4257
4257
  --tw-duration: 150ms;
4258
4258
  transition-duration: 150ms;
@@ -4269,34 +4269,10 @@
4269
4269
  --tw-duration: 500ms;
4270
4270
  transition-duration: 500ms;
4271
4271
  }
4272
- .duration-\[var\(--duration-base\)\] {
4273
- --tw-duration: var(--duration-base);
4274
- transition-duration: var(--duration-base);
4275
- }
4276
- .duration-\[var\(--duration-fast\)\] {
4277
- --tw-duration: var(--duration-fast);
4278
- transition-duration: var(--duration-fast);
4279
- }
4280
- .duration-\[var\(--duration-slow\)\] {
4281
- --tw-duration: var(--duration-slow);
4282
- transition-duration: var(--duration-slow);
4283
- }
4284
- .duration-\[var\(--transition-default\)\] {
4285
- --tw-duration: var(--transition-default);
4286
- transition-duration: var(--transition-default);
4287
- }
4288
4272
  .duration-\[var\(--transition-fast\)\] {
4289
4273
  --tw-duration: var(--transition-fast);
4290
4274
  transition-duration: var(--transition-fast);
4291
4275
  }
4292
- .ease-\[var\(--ease-entrance\)\] {
4293
- --tw-ease: var(--ease-entrance);
4294
- transition-timing-function: var(--ease-entrance);
4295
- }
4296
- .ease-\[var\(--ease-standard\)\] {
4297
- --tw-ease: var(--ease-standard);
4298
- transition-timing-function: var(--ease-standard);
4299
- }
4300
4276
  .ease-out {
4301
4277
  --tw-ease: var(--ease-out);
4302
4278
  transition-timing-function: var(--ease-out);
@@ -4312,6 +4288,12 @@
4312
4288
  .\[--field-surface\:hsl\(var\(--card\)\)\] {
4313
4289
  --field-surface: hsl(var(--card));
4314
4290
  }
4291
+ .\[transition\:color_var\(--motion-control\)\,background-color_var\(--motion-control\)\,border-color_var\(--motion-control\)\,box-shadow_var\(--motion-control\)\,transform_var\(--motion-control\)\,scale_var\(--motion-control\)\,opacity_var\(--motion-control\)\] {
4292
+ transition: color var(--motion-control),background-color var(--motion-control),border-color var(--motion-control),box-shadow var(--motion-control),transform var(--motion-control),scale var(--motion-control),opacity var(--motion-control);
4293
+ }
4294
+ .\[transition\:opacity_var\(--motion-surface\)\,transform_var\(--motion-surface\)\] {
4295
+ transition: opacity var(--motion-surface),transform var(--motion-surface);
4296
+ }
4315
4297
  .ring-inset {
4316
4298
  --tw-ring-inset: inset;
4317
4299
  }
@@ -5162,6 +5144,30 @@
5162
5144
  --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--ix-sel-ring));
5163
5145
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
5164
5146
  }
5147
+ .data-\[copy-loading\=true\]\:gap-1[data-copy-loading="true"] {
5148
+ gap: var(--spacing);
5149
+ }
5150
+ .data-\[copy-loading\=true\]\:after\:content-\[\'…\'\][data-copy-loading="true"]::after {
5151
+ --tw-content: '…';
5152
+ content: var(--tw-content);
5153
+ }
5154
+ .data-\[copy-long-work\=true\]\:not-sr-only[data-copy-long-work="true"] {
5155
+ position: static;
5156
+ width: auto;
5157
+ height: auto;
5158
+ padding: 0;
5159
+ margin: 0;
5160
+ overflow: visible;
5161
+ clip-path: none;
5162
+ white-space: normal;
5163
+ }
5164
+ .data-\[copy-long-work\=true\]\:text-xs[data-copy-long-work="true"] {
5165
+ font-size: var(--text-xs);
5166
+ line-height: var(--tw-leading, var(--text-xs--line-height));
5167
+ }
5168
+ .data-\[copy-long-work\=true\]\:text-muted-foreground[data-copy-long-work="true"] {
5169
+ color: hsl(var(--muted-foreground));
5170
+ }
5165
5171
  .data-\[disabled\]\:pointer-events-none[data-disabled] {
5166
5172
  pointer-events: none;
5167
5173
  }
@@ -5202,15 +5208,6 @@
5202
5208
  .data-\[orientation\=vertical\]\:flex-col[data-orientation="vertical"] {
5203
5209
  flex-direction: column;
5204
5210
  }
5205
- .data-\[overflow-end\]\:\[mask-image\:linear-gradient\(to_right\,\#000_calc\(100\%-24px\)\,transparent\)\][data-overflow-end] {
5206
- mask-image: linear-gradient(to right,#000 calc(100% - 24px),transparent);
5207
- }
5208
- .data-\[overflow-start\]\:\[mask-image\:linear-gradient\(to_right\,transparent\,\#000_24px\)\][data-overflow-start] {
5209
- mask-image: linear-gradient(to right,transparent,#000 24px);
5210
- }
5211
- .data-\[overflow-start\]\:data-\[overflow-end\]\:\[mask-image\:linear-gradient\(to_right\,transparent\,\#000_24px\,\#000_calc\(100\%-24px\)\,transparent\)\][data-overflow-start][data-overflow-end] {
5212
- mask-image: linear-gradient(to right,transparent,#000 24px,#000 calc(100% - 24px),transparent);
5213
- }
5214
5211
  .data-\[placeholder\]\:text-\[var\(--text-dim\)\][data-placeholder] {
5215
5212
  color: var(--text-dim);
5216
5213
  }
@@ -5304,9 +5301,11 @@
5304
5301
  --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--ix-sel-ring));
5305
5302
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
5306
5303
  }
5307
- .data-\[state\=closed\]\:duration-200[data-state="closed"] {
5308
- --tw-duration: 200ms;
5309
- transition-duration: 200ms;
5304
+ .data-\[state\=closed\]\:\[animation\:tangle-surface-absent_var\(--motion-dismiss\)_both\][data-state="closed"] {
5305
+ animation: tangle-surface-absent var(--motion-dismiss) both;
5306
+ }
5307
+ .data-\[state\=delayed-open\]\:\[animation\:tangle-surface-present_var\(--motion-surface\)_both\][data-state="delayed-open"] {
5308
+ animation: tangle-surface-present var(--motion-surface) both;
5310
5309
  }
5311
5310
  .data-\[state\=inactive\]\:text-muted-foreground[data-state="inactive"] {
5312
5311
  color: hsl(var(--muted-foreground));
@@ -5320,6 +5319,9 @@
5320
5319
  .data-\[state\=indeterminate\]\:text-primary-foreground[data-state="indeterminate"] {
5321
5320
  color: hsl(var(--primary-foreground));
5322
5321
  }
5322
+ .data-\[state\=instant-open\]\:\[animation\:tangle-surface-present_var\(--motion-surface\)_both\][data-state="instant-open"] {
5323
+ animation: tangle-surface-present var(--motion-surface) both;
5324
+ }
5323
5325
  .data-\[state\=on\]\:bg-\[var\(--ix-sel-bg\)\][data-state="on"] {
5324
5326
  background-color: var(--ix-sel-bg);
5325
5327
  }
@@ -5330,6 +5332,9 @@
5330
5332
  .data-\[state\=open\]\:rotate-180[data-state="open"] {
5331
5333
  rotate: 180deg;
5332
5334
  }
5335
+ .data-\[state\=open\]\:\[animation\:tangle-surface-present_var\(--motion-surface\)_both\][data-state="open"] {
5336
+ animation: tangle-surface-present var(--motion-surface) both;
5337
+ }
5333
5338
  .data-\[state\=open\]\:border-\[var\(--ix-hover-border\)\][data-state="open"] {
5334
5339
  border-color: var(--ix-hover-border);
5335
5340
  }
@@ -5370,10 +5375,6 @@
5370
5375
  --tw-shadow: var(--ix-after);
5371
5376
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
5372
5377
  }
5373
- .data-\[state\=open\]\:duration-300[data-state="open"] {
5374
- --tw-duration: 300ms;
5375
- transition-duration: 300ms;
5376
- }
5377
5378
  .data-\[state\=selected\]\:bg-muted\/50[data-state="selected"] {
5378
5379
  background-color: hsl(var(--muted));
5379
5380
  @supports (color: color-mix(in lab, red, red)) {
@@ -5404,16 +5405,25 @@
5404
5405
  }
5405
5406
  }
5406
5407
  @media (prefers-reduced-motion: reduce) {
5408
+ .motion-reduce\:not-sr-only {
5409
+ position: static;
5410
+ width: auto;
5411
+ height: auto;
5412
+ padding: 0;
5413
+ margin: 0;
5414
+ overflow: visible;
5415
+ clip-path: none;
5416
+ white-space: normal;
5417
+ }
5407
5418
  .motion-reduce\:animate-none {
5408
5419
  animation: none;
5409
5420
  }
5421
+ .motion-reduce\:animate-none\! {
5422
+ animation: none !important;
5423
+ }
5410
5424
  .motion-reduce\:transition-none {
5411
5425
  transition-property: none;
5412
5426
  }
5413
- .motion-reduce\:duration-0 {
5414
- --tw-duration: 0ms;
5415
- transition-duration: 0ms;
5416
- }
5417
5427
  .motion-reduce\:active\:scale-100:active {
5418
5428
  --tw-scale-x: 100%;
5419
5429
  --tw-scale-y: 100%;
@@ -5490,6 +5500,9 @@
5490
5500
  -webkit-box-orient: vertical;
5491
5501
  -webkit-line-clamp: 3;
5492
5502
  }
5503
+ .sm\:flex {
5504
+ display: flex;
5505
+ }
5493
5506
  .sm\:grid {
5494
5507
  display: grid;
5495
5508
  }
@@ -5813,6 +5826,9 @@
5813
5826
  .pointer-coarse\:min-h-11 {
5814
5827
  min-height: calc(var(--spacing) * 11);
5815
5828
  }
5829
+ .pointer-coarse\:min-w-11 {
5830
+ min-width: calc(var(--spacing) * 11);
5831
+ }
5816
5832
  .pointer-coarse\:text-base {
5817
5833
  font-size: var(--text-base);
5818
5834
  line-height: var(--tw-leading, var(--text-base--line-height));
@@ -6044,12 +6060,19 @@
6044
6060
  .\[\&\>span\]\:text-left > span {
6045
6061
  text-align: left;
6046
6062
  }
6063
+ .\[\&\>svg\]\:size-3 > svg {
6064
+ width: calc(var(--spacing) * 3);
6065
+ height: calc(var(--spacing) * 3);
6066
+ }
6047
6067
  .\[\&\>svg\]\:h-4 > svg {
6048
6068
  height: calc(var(--spacing) * 4);
6049
6069
  }
6050
6070
  .\[\&\>svg\]\:w-4 > svg {
6051
6071
  width: calc(var(--spacing) * 4);
6052
6072
  }
6073
+ .\[\&\>svg\]\:shrink-0 > svg {
6074
+ flex-shrink: 0;
6075
+ }
6053
6076
  .\[\&\>svg\]\:transition-transform > svg {
6054
6077
  transition-property: transform, translate, scale, rotate;
6055
6078
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -6126,9 +6149,9 @@
6126
6149
  :root, [data-sandbox-ui], [data-sandbox-theme="vault"], [data-sandbox-theme="dawn"], [data-theme="dark"], [data-theme="light"], [data-theme="aubergine"], [data-theme="aubergine-light"], [data-theme="arena"], [data-theme="arena-light"], [data-theme="super"], [data-theme="super-light"], [data-theme="tangle-dark"], [data-theme="tangle-light"], [data-theme="hospitality"], [data-theme="agents"], [data-theme="agents-light"], [data-theme="website"], .light, .dark {
6127
6150
  color-scheme: dark;
6128
6151
  --md3-surface: #0a0a14;
6129
- --md3-surface-dim: #060610;
6152
+ --md3-surface-dim: #040408;
6130
6153
  --md3-surface-bright: #232238;
6131
- --md3-surface-container-lowest: #050509;
6154
+ --md3-surface-container-lowest: #040408;
6132
6155
  --md3-surface-container-low: #12111f;
6133
6156
  --md3-surface-container: #191826;
6134
6157
  --md3-surface-container-high: #221f33;
@@ -6421,6 +6444,25 @@
6421
6444
  --tracking-tight: -0.02em;
6422
6445
  --tracking-snug: -0.01em;
6423
6446
  --tracking-wide: 0.08em;
6447
+ --tracking-display: -0.03em;
6448
+ --hero-gutter: 1.5rem;
6449
+ --hero-padding-top: clamp(5rem, 3rem + 5vw, 7rem);
6450
+ --hero-padding-bottom: clamp(4rem, 2rem + 5vw, 6rem);
6451
+ --display-max-width: 56rem;
6452
+ --reading-max-width: 42rem;
6453
+ --hero-action-gap: 0.75rem;
6454
+ --hero-content-gap: 1.5rem;
6455
+ --display-control-height: 2.875rem;
6456
+ --display-control-radius: 0.625rem;
6457
+ --display-control-font-size: 0.9375rem;
6458
+ --display-control-shadow: inset 0 1px 0 rgb(255 255 255 / 0.18), 0 4px 16px hsl(var(--primary) / 0.2);
6459
+ --display-gradient: linear-gradient(135deg, hsl(var(--foreground)) 10%, var(--accent-text) 70%);
6460
+ --hero-grid-pitch: 3.5rem;
6461
+ --hero-atmosphere-opacity: 0.16;
6462
+ --hero-knot-opacity: 0.07;
6463
+ --duration-expressive-entrance: 300ms;
6464
+ --duration-expressive-ambient: 14s;
6465
+ --ease-expressive: cubic-bezier(0.16, 1, 0.3, 1);
6424
6466
  --avatar-size: 2rem;
6425
6467
  --timeline-dot-size: 0.625rem;
6426
6468
  --indicator-dot-size: 0.25rem;
@@ -6460,6 +6502,10 @@
6460
6502
  --motion-dismiss: var(--duration-instant) var(--ease-exit);
6461
6503
  --motion-stream: var(--duration-stream) var(--ease-expo);
6462
6504
  --motion-arrive: var(--duration-arrive) var(--ease-expo);
6505
+ --interaction-feedback-budget: 100ms;
6506
+ --interaction-pending-delay: 200ms;
6507
+ --interaction-long-work-delay: 1000ms;
6508
+ --interaction-mutation-budget: 500ms;
6463
6509
  --stagger-step: 50ms;
6464
6510
  --stagger-index: 0;
6465
6511
  --arrive-distance: 8px;
@@ -6739,12 +6785,18 @@
6739
6785
  }
6740
6786
  --hsl-raised: var(--hsl-card);
6741
6787
  --hsl-raised-2: var(--hsl-card);
6742
- --well-page: var(--bg-input);
6743
- --well-card: var(--bg-input);
6744
- --well-raised: var(--bg-input);
6745
- --well-raised-2: var(--bg-input);
6788
+ --well-page: hsl(var(--hsl-background));
6789
+ @supports (color: color-mix(in lab, red, red)) {
6790
+ --well-page: color-mix(in oklab, hsl(var(--hsl-background)) 70%, black);
6791
+ }
6792
+ --well-card: var(--well-page);
6793
+ --well-raised: var(--well-page);
6794
+ --well-raised-2: var(--well-page);
6746
6795
  --well: var(--well-page);
6747
6796
  --field-border: hsl(var(--hsl-border));
6797
+ @supports (color: color-mix(in lab, red, red)) {
6798
+ --field-border: color-mix(in oklab, hsl(var(--hsl-border)), hsl(var(--hsl-foreground)) 45%);
6799
+ }
6748
6800
  --shadow-raised: var(--shadow-card);
6749
6801
  --shadow-well: 0 0 0 0 transparent;
6750
6802
  --edge-highlight: 0 0 0 0 transparent;
@@ -6759,6 +6811,10 @@
6759
6811
  [data-sandbox-theme="vault"]:where(:not(.dark)), [data-sandbox-theme="dawn"]:where(:not(.dark)), [data-theme="hospitality"]:where(:not(.dark)), [data-theme="website"]:where(:not(.dark)), [data-theme="light"], .light, [data-theme$="-light"] {
6760
6812
  --ix-sel-bg: hsl(var(--hsl-ring) / 0.13);
6761
6813
  --ix-hover-bg: hsl(var(--hsl-ring) / 0.07);
6814
+ --well-page: hsl(var(--hsl-card));
6815
+ --well-card: hsl(var(--hsl-background));
6816
+ --well-raised: hsl(var(--hsl-background));
6817
+ --well-raised-2: hsl(var(--hsl-background));
6762
6818
  }
6763
6819
  [data-slot="card"] :where(*) {
6764
6820
  --card: var(--hsl-raised);
@@ -7262,7 +7318,7 @@
7262
7318
  --bg-root: #0a0a14;
7263
7319
  --bg-card: var(--depth-2);
7264
7320
  --bg-input: hsl(var(--hsl-input));
7265
- --md3-surface-container-lowest: #050509;
7321
+ --md3-surface-container-lowest: #040408;
7266
7322
  --md3-surface-container-low: #12111f;
7267
7323
  --md3-surface-container: #191826;
7268
7324
  --md3-surface-container-high: #221f33;
@@ -7523,8 +7579,8 @@
7523
7579
  --border-subtle: rgba(227, 233, 229, 0.10);
7524
7580
  --border-default: rgba(227, 233, 229, 0.16);
7525
7581
  --border-hover: rgba(227, 233, 229, 0.28);
7526
- --border-strong: #868f87;
7527
- --field-border: #868f87;
7582
+ --border-strong: #939c94;
7583
+ --field-border: #939c94;
7528
7584
  --border-accent: rgba(118, 183, 145, 0.35);
7529
7585
  --border-accent-hover: rgba(118, 183, 145, 0.50);
7530
7586
  --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.45), 0 10px 24px -14px rgba(0, 0, 0, 0.6);
@@ -7766,25 +7822,6 @@
7766
7822
  --muted-foreground: var(--hsl-muted-foreground);
7767
7823
  }
7768
7824
  :root {
7769
- --duration-instant: 90ms;
7770
- --duration-fast: 150ms;
7771
- --duration-base: 240ms;
7772
- --duration-slow: 360ms;
7773
- --ease-standard: cubic-bezier(0.2, 0.8, 0.2, 1);
7774
- --ease-entrance: cubic-bezier(0.22, 1, 0.36, 1);
7775
- --ease-exit: cubic-bezier(0.4, 0, 1, 1);
7776
- --motion-control: var(--duration-fast) var(--ease-standard);
7777
- --motion-surface: var(--duration-base) var(--ease-entrance);
7778
- --motion-dismiss: var(--duration-instant) var(--ease-exit);
7779
- --duration-stream: 420ms;
7780
- --duration-arrive: 600ms;
7781
- --ease-expo: cubic-bezier(0.23, 1, 0.32, 1);
7782
- --motion-stream: var(--duration-stream) var(--ease-expo);
7783
- --motion-arrive: var(--duration-arrive) var(--ease-expo);
7784
- --stagger-step: 50ms;
7785
- --stagger-index: 0;
7786
- --arrive-distance: 8px;
7787
- --stream-blur: 4px;
7788
7825
  --shimmer-period: 1400ms;
7789
7826
  }
7790
7827
  .sandbox-tree-surface {
@@ -8196,15 +8233,6 @@
8196
8233
  opacity: 1;
8197
8234
  }
8198
8235
  @media (prefers-reduced-motion: reduce) {
8199
- :root {
8200
- --duration-instant: 1ms;
8201
- --duration-fast: 1ms;
8202
- --duration-base: 1ms;
8203
- --duration-slow: 1ms;
8204
- --duration-stream: 1ms;
8205
- --duration-arrive: 1ms;
8206
- --stagger-step: 0ms;
8207
- }
8208
8236
  *:where(:not([data-motion="essential"], [data-motion="essential"] *)), *:where(:not([data-motion="essential"], [data-motion="essential"] *))::before, *:where(:not([data-motion="essential"], [data-motion="essential"] *))::after {
8209
8237
  animation-duration: 1ms !important;
8210
8238
  animation-iteration-count: 1 !important;
package/dist/tailwind.css CHANGED
@@ -123,86 +123,9 @@
123
123
  --color-surface-bright: var(--md3-surface-bright);
124
124
  }
125
125
 
126
- /* ── Motion ────────────────────────────────────────────────────────────────
127
- *
128
- * `@tangle-network/brand` ships exactly one motion token (`--transition-default:
129
- * 0.16s ease`) and no curves, so every animated surface in this package picked
130
- * its own number: `duration-150` on a rail button, `duration-200` on the rail
131
- * itself, `0.18s ease-out` on a session row, Tailwind's implicit default
132
- * everywhere a bare `transition-colors` was written. Nothing was wrong;
133
- * nothing was decidable either, and none of it was reachable by a reduced-motion
134
- * preference.
135
- *
136
- * These are the SAME names and the SAME values `@tangle-network/agent-app`
137
- * declares in its own `theme/tokens.css` (0.45.46+), deliberately duplicated
138
- * rather than imported: sandbox-ui does not depend on agent-app, and a product
139
- * that loads both stylesheets must not get two different answers for
140
- * `--duration-base`. Identical declarations are order-independent; divergent
141
- * ones are a coin flip decided by import order. If agent-app retunes the
142
- * ladder, retune it here in the same change.
143
- *
144
- * They live in `globals.css` and not in `dist/tokens.css` because that file is
145
- * a byte-for-byte copy of brand's (see scripts/copy-styles.mjs) — the tokens
146
- * that are ours to declare belong in the one stylesheet this package authors,
147
- * next to the utilities that consume them.
148
- *
149
- * instant a control acknowledging a pointer (hover/active colour)
150
- * fast a state change on a control already on screen
151
- * base a surface arriving or leaving (popover, panel, disclosure)
152
- * slow a full-height surface travelling (drawer, sheet, the rail)
153
- *
154
- * Curves: entrances decelerate hard and land softly; state changes decelerate
155
- * normally; exits ACCELERATE away, because a user who dismissed something is
156
- * done with it and should not wait for it to glide out. */
126
+ /* Brand owns motion roles and preference reduction. This period remains local
127
+ * for existing shimmer consumers; Sidebar exposes a static pending label. */
157
128
  :root {
158
- --duration-instant: 90ms;
159
- --duration-fast: 150ms;
160
- --duration-base: 240ms;
161
- --duration-slow: 360ms;
162
- --ease-standard: cubic-bezier(0.2, 0.8, 0.2, 1);
163
- --ease-entrance: cubic-bezier(0.22, 1, 0.36, 1);
164
- --ease-exit: cubic-bezier(0.4, 0, 1, 1);
165
- /* Drop-in duration+easing pairs: `transition: background-color var(--motion-control)`. */
166
- --motion-control: var(--duration-fast) var(--ease-standard);
167
- --motion-surface: var(--duration-base) var(--ease-entrance);
168
- --motion-dismiss: var(--duration-instant) var(--ease-exit);
169
-
170
- /* Entrance choreography. The durations above answer "how fast does an
171
- * existing thing change"; these answer "how does a thing that was not there
172
- * ARRIVE" — a nav rail unfolding, a session appearing in the list, a
173
- * disclosure revealing its sub-items.
174
- *
175
- * `--motion-stream` is longer than `base` on purpose: streamed text arrives
176
- * continuously, so each chunk overlaps its neighbours and a fast curve makes
177
- * the paragraph flicker. `--motion-arrive` is the row/card entrance and is
178
- * meant to be staggered by index (see `--stagger-step`). */
179
- --duration-stream: 420ms;
180
- --duration-arrive: 600ms;
181
- --ease-expo: cubic-bezier(0.23, 1, 0.32, 1);
182
- --motion-stream: var(--duration-stream) var(--ease-expo);
183
- --motion-arrive: var(--duration-arrive) var(--ease-expo);
184
- /* Per-item delay in a staggered group. 5 items = 200ms tail, which stays
185
- * under the 250ms an interface can add before it reads as latency. */
186
- --stagger-step: 50ms;
187
- /* Position in a staggered group, overridden PER ELEMENT by the caller. It is
188
- * declared here with a zero default rather than read through a `var()`
189
- * fallback so the file never references a token it does not define — an
190
- * undefined `var()` resolves to nothing and paints silently, which is the
191
- * failure the token contract exists to catch. */
192
- --stagger-index: 0;
193
- /* How far an arriving surface travels, and how far a streamed chunk resolves
194
- * from. Both are small: motion that announces itself is motion you notice
195
- * twice. */
196
- --arrive-distance: 8px;
197
- --stream-blur: 4px;
198
- /* Period of the `.agent-shimmer` sweep. Deliberately NOT named
199
- * `--duration-*`: that prefix is the collapsible ladder, and the
200
- * reduced-motion block sets every member of it to 1ms at `:root`. A custom
201
- * property collapsed at the root cannot be excluded per element, so naming
202
- * this one `--duration-shimmer` would freeze the sweep for the very users the
203
- * `data-motion="essential"` exemption exists to keep informed. The sweep is a
204
- * looping SIGNAL, not a transition, so it sits with the other non-collapsible
205
- * motion constants above. */
206
129
  --shimmer-period: 1400ms;
207
130
  }
208
131
 
@@ -808,66 +731,10 @@
808
731
  opacity: 1;
809
732
  }
810
733
 
811
- /**
812
- * Reduced motion, at the token layer and at the floor.
813
- *
814
- * Two rules, because they cover two different populations. Collapsing the
815
- * duration TOKENS is what makes motion built on this system honour the
816
- * preference for free — a component that wrote `var(--motion-surface)` or
817
- * `duration-[var(--duration-fast)]` needs no media query of its own, and gets no
818
- * chance to forget one. The universal rule under it is the floor for everything
819
- * that predates the tokens: this package still carries transitions on Tailwind's
820
- * implicit duration, and a consuming app carries its own. Neither reads a token,
821
- * so neither would be reached.
822
- *
823
- * 1ms rather than 0: a zero-duration transition fires no `transitionend`, and
824
- * any component that awaits one to unmount or advance a state machine hangs
825
- * forever. 1ms is imperceptible AND still fires.
826
- *
827
- * THE RULE, so the next element is classified the same way this one was:
828
- *
829
- * Motion is ESSENTIAL when it is the only evidence that something is
830
- * happening RIGHT NOW — an operation in flight, a resource actively running.
831
- * Freeze it and "working" becomes indistinguishable from "stuck", which is
832
- * information removed. Everything else is DECORATIVE and is silenced.
833
- *
834
- * Two consequences make it decidable rather than a matter of taste:
835
- *
836
- * - A static label beside the motion does NOT make an in-flight indicator
837
- * decorative. "Loading processes…" stays on screen whether the fetch is
838
- * alive or hung; only the spinner separates those.
839
- * - A state that is NOT in flight is carried by its label, its colour and its
840
- * shape, so motion on it is emphasis. The `animate-ping` beside "Error
841
- * fetching logs" says nothing the sentence does not, and it is silenced.
842
- * Skeleton placeholders are the same case: a frozen skeleton still reads as
843
- * a placeholder, because the shape is the message.
844
- *
845
- * The exemption is declared PER ELEMENT with `data-motion="essential"`, never on
846
- * a class. `.agent-shimmer` is the reason: the identical sweep marks a session
847
- * whose agent is mid-turn and dresses a plain skeleton, and only the caller
848
- * knows which one it built. The exclusion covers the element and its subtree,
849
- * and `:where()` keeps the selector at zero specificity so a consumer's own rule
850
- * can still win. Reduced motion is not a design preference to be overridden, it
851
- * is a request from the person using the product; the only defensible exemption
852
- * is motion whose absence removes information.
853
- *
854
- * Note the asymmetry with the `:root` block: a duration collapsed there reaches
855
- * every element, `data-motion` included, because a custom property cannot be
856
- * un-inherited. That is why an essential animation's period is not a
857
- * `--duration-*` token — @see `--shimmer-period`.
858
- */
734
+ /* Brand reduces its motion tokens, including scoped themes. Keep the existing
735
+ * floor for legacy components that do not consume those roles. Its per-element
736
+ * essential-motion exclusion is unchanged; new Sidebar pending state is static. */
859
737
  @media (prefers-reduced-motion: reduce) {
860
- :root {
861
- --duration-instant: 1ms;
862
- --duration-fast: 1ms;
863
- --duration-base: 1ms;
864
- --duration-slow: 1ms;
865
- --duration-stream: 1ms;
866
- --duration-arrive: 1ms;
867
- /* The stagger is a delay, not a duration, and a collapsed animation with a
868
- live delay still arrives as a visible cascade. */
869
- --stagger-step: 0ms;
870
- }
871
738
 
872
739
  /* `::before` and `::after` are listed because `*` matches elements only, and
873
740
  an animation declared on a pseudo-element is therefore invisible to the