@polyxd/react 0.1.1 → 0.2.0

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 (37) hide show
  1. package/dist/components/chart.js +133 -2
  2. package/dist/components/chart.js.map +1 -1
  3. package/dist/components/content.d.ts +16 -0
  4. package/dist/components/content.js +494 -19
  5. package/dist/components/content.js.map +1 -1
  6. package/dist/components/flow.js +41 -1
  7. package/dist/components/flow.js.map +1 -1
  8. package/dist/components/index.js +5 -0
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/components/inputs.d.ts +2 -0
  11. package/dist/components/inputs.js +237 -4
  12. package/dist/components/inputs.js.map +1 -1
  13. package/dist/components/marks.d.ts +40 -0
  14. package/dist/components/marks.js +221 -0
  15. package/dist/components/marks.js.map +1 -0
  16. package/dist/components/navigation.d.ts +2 -1
  17. package/dist/components/navigation.js +48 -12
  18. package/dist/components/navigation.js.map +1 -1
  19. package/dist/components/overlays.d.ts +18 -0
  20. package/dist/components/overlays.js +128 -0
  21. package/dist/components/overlays.js.map +1 -0
  22. package/dist/components/pickers.d.ts +10 -0
  23. package/dist/components/pickers.js +402 -0
  24. package/dist/components/pickers.js.map +1 -0
  25. package/dist/components/table.d.ts +5 -0
  26. package/dist/components/table.js +19 -10
  27. package/dist/components/table.js.map +1 -1
  28. package/dist/components/tree.d.ts +11 -0
  29. package/dist/components/tree.js +268 -0
  30. package/dist/components/tree.js.map +1 -0
  31. package/dist/format.d.ts +3 -1
  32. package/dist/format.js +19 -0
  33. package/dist/format.js.map +1 -1
  34. package/dist/surface.js +1 -1
  35. package/dist/surface.js.map +1 -1
  36. package/package.json +2 -2
  37. package/src/styles.css +1940 -0
package/src/styles.css CHANGED
@@ -2180,3 +2180,1943 @@ textarea.pxd-input {
2180
2180
  background: var(--pxd-color-surface-subtle);
2181
2181
  border-radius: var(--pxd-radius-default);
2182
2182
  }
2183
+
2184
+ /* ==== Design-system survey: variants added to existing components (2026-09) ==== */
2185
+
2186
+ /* Text: rich, list, quote, colour swatches */
2187
+ .pxd-text-rich code {
2188
+ font-family: var(--pxd-type-numeric-display-family);
2189
+ font-size: 0.9em;
2190
+ padding: 0 var(--pxd-space-inline-tight);
2191
+ border-radius: var(--pxd-radius-small);
2192
+ background: var(--pxd-color-surface-subtle);
2193
+ }
2194
+ .pxd-text-rich a {
2195
+ color: var(--pxd-color-text-link);
2196
+ text-decoration: underline;
2197
+ }
2198
+ .pxd-text-list {
2199
+ display: flex;
2200
+ flex-direction: column;
2201
+ gap: var(--pxd-space-stack-tight);
2202
+ max-width: var(--pxd-measure-max);
2203
+ }
2204
+ .pxd-text-list-items {
2205
+ display: flex;
2206
+ flex-direction: column;
2207
+ gap: var(--pxd-space-stack-tight);
2208
+ padding-left: 1.25em;
2209
+ list-style: disc;
2210
+ }
2211
+ .pxd-text-list-ordered {
2212
+ list-style: decimal;
2213
+ }
2214
+ .pxd-text-quote {
2215
+ display: flex;
2216
+ flex-direction: column;
2217
+ gap: var(--pxd-space-stack-tight);
2218
+ padding-left: var(--pxd-space-inset-default);
2219
+ border-left: var(--pxd-border-width-strong) solid var(--pxd-color-border-strong);
2220
+ max-width: var(--pxd-measure-max);
2221
+ }
2222
+ .pxd-text-quote blockquote {
2223
+ margin: 0;
2224
+ font-style: italic;
2225
+ }
2226
+ .pxd-text-cite {
2227
+ color: var(--pxd-color-text-muted);
2228
+ font-size: var(--pxd-type-body-small-size);
2229
+ }
2230
+ .pxd-text-cite::before {
2231
+ content: "— ";
2232
+ }
2233
+ .pxd-swatch {
2234
+ display: inline-block;
2235
+ width: 1em;
2236
+ height: 1em;
2237
+ margin-right: var(--pxd-space-inline-tight);
2238
+ vertical-align: -0.15em;
2239
+ border-radius: var(--pxd-radius-small);
2240
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2241
+ }
2242
+ .pxd-swatch-unknown {
2243
+ background: repeating-linear-gradient(45deg, var(--pxd-color-border-default) 0 2px, transparent 2px 4px);
2244
+ }
2245
+ .pxd-color-value {
2246
+ display: inline-flex;
2247
+ align-items: center;
2248
+ }
2249
+
2250
+ /* DetailList: the Change link per row */
2251
+ .pxd-detail-actions .pxd-detail-row {
2252
+ display: grid;
2253
+ grid-template-columns: minmax(8rem, 1fr) 2fr auto;
2254
+ align-items: baseline;
2255
+ gap: var(--pxd-space-inline-default);
2256
+ }
2257
+ .pxd-detail-row-action {
2258
+ text-align: end;
2259
+ }
2260
+ .pxd-detail-change {
2261
+ white-space: nowrap;
2262
+ }
2263
+
2264
+ /* Collection: carousel */
2265
+ .pxd-carousel {
2266
+ display: flex;
2267
+ flex-direction: column;
2268
+ gap: var(--pxd-space-stack-tight);
2269
+ }
2270
+ .pxd-carousel-track {
2271
+ flex-direction: row;
2272
+ gap: var(--pxd-space-inline-default);
2273
+ overflow-x: auto;
2274
+ scroll-snap-type: x mandatory;
2275
+ scroll-padding: 0;
2276
+ padding-bottom: var(--pxd-space-stack-tight);
2277
+ scrollbar-width: thin;
2278
+ }
2279
+ .pxd-carousel-track > .pxd-collection-item {
2280
+ flex: 0 0 min(80%, 20rem);
2281
+ scroll-snap-align: start;
2282
+ }
2283
+ .pxd-carousel-controls {
2284
+ display: flex;
2285
+ align-items: center;
2286
+ justify-content: center;
2287
+ gap: var(--pxd-space-inline-default);
2288
+ }
2289
+ .pxd-carousel-position {
2290
+ color: var(--pxd-color-text-muted);
2291
+ font-size: var(--pxd-type-body-small-size);
2292
+ font-variant-numeric: tabular-nums;
2293
+ }
2294
+
2295
+ /* Collection: calendar */
2296
+ .pxd-calendar {
2297
+ display: flex;
2298
+ flex-direction: column;
2299
+ gap: var(--pxd-space-stack-tight);
2300
+ }
2301
+ .pxd-calendar-header {
2302
+ display: flex;
2303
+ align-items: center;
2304
+ justify-content: space-between;
2305
+ gap: var(--pxd-space-inline-default);
2306
+ }
2307
+ .pxd-calendar-month {
2308
+ font-family: var(--pxd-type-title-item-family);
2309
+ font-size: var(--pxd-type-title-item-size);
2310
+ font-weight: var(--pxd-type-title-item-weight);
2311
+ }
2312
+ .pxd-calendar-grid {
2313
+ width: 100%;
2314
+ table-layout: fixed;
2315
+ border-collapse: collapse;
2316
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2317
+ }
2318
+ .pxd-calendar-grid th {
2319
+ padding: var(--pxd-space-inset-compact);
2320
+ color: var(--pxd-color-text-muted);
2321
+ font-size: var(--pxd-type-label-small-size);
2322
+ font-weight: var(--pxd-type-label-small-weight);
2323
+ text-align: start;
2324
+ border-bottom: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2325
+ }
2326
+ .pxd-calendar-grid td {
2327
+ vertical-align: top;
2328
+ min-height: 5rem;
2329
+ height: 5rem;
2330
+ padding: var(--pxd-space-inset-compact);
2331
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2332
+ }
2333
+ .pxd-calendar-empty {
2334
+ background: var(--pxd-color-surface-subtle);
2335
+ }
2336
+ .pxd-calendar-date {
2337
+ display: block;
2338
+ font-size: var(--pxd-type-label-small-size);
2339
+ color: var(--pxd-color-text-muted);
2340
+ font-variant-numeric: tabular-nums;
2341
+ }
2342
+ .pxd-calendar-has-items .pxd-calendar-date {
2343
+ color: var(--pxd-color-text-default);
2344
+ font-weight: 600;
2345
+ }
2346
+ .pxd-calendar-items {
2347
+ display: flex;
2348
+ flex-direction: column;
2349
+ gap: var(--pxd-space-stack-tight);
2350
+ margin-top: var(--pxd-space-stack-tight);
2351
+ font-size: var(--pxd-type-body-small-size);
2352
+ }
2353
+ .pxd-calendar-items .pxd-collection-item {
2354
+ gap: var(--pxd-space-inline-tight);
2355
+ }
2356
+
2357
+ /* Collection: reordering */
2358
+ .pxd-collection-reorder {
2359
+ display: flex;
2360
+ flex-direction: column;
2361
+ align-items: center;
2362
+ gap: 0;
2363
+ flex: none;
2364
+ }
2365
+ .pxd-collection-handle {
2366
+ display: inline-flex;
2367
+ color: var(--pxd-color-text-muted);
2368
+ cursor: grab;
2369
+ padding: var(--pxd-space-inset-compact) 0;
2370
+ }
2371
+ .pxd-collection-move {
2372
+ min-height: 0;
2373
+ height: 1.5rem;
2374
+ width: 1.5rem;
2375
+ }
2376
+ .pxd-collection-reorderable > .pxd-collection-item {
2377
+ padding: var(--pxd-space-inset-compact);
2378
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2379
+ border-radius: var(--pxd-radius-default);
2380
+ background: var(--pxd-color-surface-default);
2381
+ }
2382
+ .pxd-collection-dragging {
2383
+ opacity: var(--pxd-opacity-state-disabled);
2384
+ }
2385
+
2386
+ /* Media: players, gallery, QR */
2387
+ .pxd-media-player {
2388
+ display: flex;
2389
+ flex-direction: column;
2390
+ gap: var(--pxd-space-stack-tight);
2391
+ }
2392
+ video.pxd-media {
2393
+ width: 100%;
2394
+ background: var(--pxd-color-surface-subtle);
2395
+ }
2396
+ .pxd-media-audio-player {
2397
+ width: 100%;
2398
+ }
2399
+ .pxd-media-audio-placeholder {
2400
+ height: var(--pxd-size-target-min);
2401
+ border-radius: var(--pxd-radius-full);
2402
+ background: var(--pxd-color-surface-subtle);
2403
+ }
2404
+ .pxd-media-caption {
2405
+ color: var(--pxd-color-text-muted);
2406
+ font-size: var(--pxd-type-body-small-size);
2407
+ }
2408
+ .pxd-media-transcript summary {
2409
+ color: var(--pxd-color-text-link);
2410
+ cursor: pointer;
2411
+ font-size: var(--pxd-type-body-small-size);
2412
+ }
2413
+ .pxd-media-transcript p {
2414
+ margin-top: var(--pxd-space-stack-tight);
2415
+ max-width: var(--pxd-measure-max);
2416
+ white-space: pre-wrap;
2417
+ }
2418
+ .pxd-gallery {
2419
+ display: grid;
2420
+ grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
2421
+ gap: var(--pxd-space-inline-default);
2422
+ }
2423
+ .pxd-gallery-image {
2424
+ width: 100%;
2425
+ border-radius: var(--pxd-radius-default);
2426
+ }
2427
+ .pxd-gallery .pxd-media-auto {
2428
+ aspect-ratio: 1;
2429
+ object-fit: cover;
2430
+ }
2431
+ .pxd-qr {
2432
+ display: block;
2433
+ width: min(100%, 15rem);
2434
+ height: auto;
2435
+ image-rendering: pixelated;
2436
+ border-radius: var(--pxd-radius-default);
2437
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2438
+ }
2439
+ .pxd-qr-placeholder {
2440
+ display: flex;
2441
+ flex-direction: column;
2442
+ align-items: center;
2443
+ justify-content: center;
2444
+ gap: var(--pxd-space-stack-tight);
2445
+ aspect-ratio: 1;
2446
+ padding: var(--pxd-space-inset-default);
2447
+ background: var(--pxd-color-surface-subtle);
2448
+ color: var(--pxd-color-text-muted);
2449
+ text-align: center;
2450
+ }
2451
+ .pxd-qr-mark {
2452
+ font-family: var(--pxd-type-title-section-family);
2453
+ font-size: var(--pxd-type-title-section-size);
2454
+ font-weight: var(--pxd-type-title-section-weight);
2455
+ letter-spacing: 0.2em;
2456
+ }
2457
+ .pxd-qr-text {
2458
+ font-size: var(--pxd-type-body-small-size);
2459
+ word-break: break-all;
2460
+ }
2461
+
2462
+ /* Table: expandable rows */
2463
+ .pxd-table-expand {
2464
+ width: 2.5rem;
2465
+ }
2466
+ .pxd-table-expander {
2467
+ min-height: 0;
2468
+ height: 2rem;
2469
+ width: 2rem;
2470
+ }
2471
+ .pxd-table-detail > td {
2472
+ padding: var(--pxd-space-inset-default) var(--pxd-space-inset-default) var(--pxd-space-inset-default) 2.5rem;
2473
+ background: var(--pxd-color-surface-subtle);
2474
+ border-bottom: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2475
+ }
2476
+ .pxd-row-detail {
2477
+ flex-basis: 100%;
2478
+ padding: var(--pxd-space-inset-default);
2479
+ background: var(--pxd-color-surface-subtle);
2480
+ border-radius: var(--pxd-radius-default);
2481
+ }
2482
+ .pxd-row-item {
2483
+ flex-wrap: wrap;
2484
+ }
2485
+
2486
+ /* TextInput: suggestions and mentions */
2487
+ .pxd-combobox {
2488
+ position: relative;
2489
+ }
2490
+ .pxd-combobox-list {
2491
+ position: absolute;
2492
+ z-index: 2;
2493
+ inset-inline: 0;
2494
+ top: calc(100% + var(--pxd-space-stack-tight));
2495
+ max-height: 16rem;
2496
+ overflow-y: auto;
2497
+ padding: var(--pxd-space-inset-compact);
2498
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2499
+ border-radius: var(--pxd-radius-default);
2500
+ background: var(--pxd-color-surface-overlay);
2501
+ box-shadow: var(--pxd-shadow-overlay);
2502
+ }
2503
+ .pxd-combobox-option {
2504
+ display: flex;
2505
+ flex-direction: column;
2506
+ padding: var(--pxd-space-inset-compact) var(--pxd-space-inset-default);
2507
+ border-radius: var(--pxd-radius-small);
2508
+ cursor: pointer;
2509
+ }
2510
+ .pxd-combobox-active,
2511
+ .pxd-combobox-option:hover {
2512
+ background: var(--pxd-color-selection-background);
2513
+ color: var(--pxd-color-selection-foreground);
2514
+ }
2515
+
2516
+ /* TextInput: tags (and several dates) */
2517
+ .pxd-tags {
2518
+ display: flex;
2519
+ flex-wrap: wrap;
2520
+ align-items: center;
2521
+ gap: var(--pxd-space-inline-tight);
2522
+ min-height: var(--pxd-size-target-min);
2523
+ padding: var(--pxd-space-inset-compact);
2524
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-strong);
2525
+ border-radius: var(--pxd-radius-control);
2526
+ background: var(--pxd-color-surface-default);
2527
+ }
2528
+ .pxd-tags:focus-within {
2529
+ outline: var(--pxd-focus-ring-width) solid var(--pxd-color-border-focus);
2530
+ outline-offset: var(--pxd-focus-ring-offset);
2531
+ }
2532
+ .pxd-tags-list {
2533
+ display: flex;
2534
+ flex-wrap: wrap;
2535
+ gap: var(--pxd-space-inline-tight);
2536
+ }
2537
+ .pxd-tag-chip {
2538
+ display: inline-flex;
2539
+ align-items: center;
2540
+ gap: var(--pxd-space-inline-tight);
2541
+ padding: 2px var(--pxd-space-inline-tight) 2px var(--pxd-space-inline-default);
2542
+ border-radius: var(--pxd-radius-full);
2543
+ background: var(--pxd-color-selection-background);
2544
+ color: var(--pxd-color-selection-foreground);
2545
+ font-size: var(--pxd-type-label-default-size);
2546
+ }
2547
+ .pxd-tag-remove {
2548
+ display: inline-flex;
2549
+ padding: 2px;
2550
+ border: 0;
2551
+ border-radius: var(--pxd-radius-full);
2552
+ background: none;
2553
+ color: inherit;
2554
+ cursor: pointer;
2555
+ }
2556
+ .pxd-tags-input {
2557
+ flex: 1;
2558
+ min-width: 8rem;
2559
+ border: 0;
2560
+ padding: var(--pxd-space-inset-compact);
2561
+ background: none;
2562
+ }
2563
+ .pxd-tags-input:focus-visible {
2564
+ outline: none;
2565
+ }
2566
+ .pxd-date-multiple {
2567
+ display: flex;
2568
+ flex-direction: column;
2569
+ gap: var(--pxd-space-stack-tight);
2570
+ }
2571
+ .pxd-date-add {
2572
+ display: block;
2573
+ }
2574
+
2575
+ /* TextInput: rich text */
2576
+ .pxd-richtext {
2577
+ display: flex;
2578
+ flex-direction: column;
2579
+ gap: var(--pxd-space-stack-tight);
2580
+ }
2581
+ .pxd-richtext-toolbar {
2582
+ display: flex;
2583
+ gap: var(--pxd-space-inline-tight);
2584
+ }
2585
+ .pxd-richtext-control {
2586
+ display: inline-flex;
2587
+ align-items: center;
2588
+ justify-content: center;
2589
+ width: 2rem;
2590
+ height: 2rem;
2591
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2592
+ border-radius: var(--pxd-radius-small);
2593
+ background: var(--pxd-color-surface-default);
2594
+ cursor: pointer;
2595
+ }
2596
+ .pxd-richtext-control:hover {
2597
+ background: var(--pxd-color-surface-subtle);
2598
+ }
2599
+ .pxd-richtext-area {
2600
+ min-height: 6rem;
2601
+ white-space: pre-wrap;
2602
+ }
2603
+ .pxd-richtext-area :is(ul, ol) {
2604
+ padding-left: 1.25em;
2605
+ list-style: disc;
2606
+ }
2607
+ .pxd-richtext-area ol {
2608
+ list-style: decimal;
2609
+ }
2610
+
2611
+ /* TextInput: code, masked, year, inline */
2612
+ .pxd-input-code,
2613
+ .pxd-input-masked {
2614
+ font-family: var(--pxd-type-numeric-display-family);
2615
+ font-variant-numeric: tabular-nums;
2616
+ }
2617
+ .pxd-input-code {
2618
+ white-space: pre;
2619
+ overflow-x: auto;
2620
+ }
2621
+ .pxd-input-year {
2622
+ width: 6rem;
2623
+ }
2624
+ .pxd-inline-edit {
2625
+ display: flex;
2626
+ flex-direction: column;
2627
+ gap: var(--pxd-space-stack-tight);
2628
+ }
2629
+ .pxd-inline-value {
2630
+ display: inline-flex;
2631
+ align-items: center;
2632
+ gap: var(--pxd-space-inline-default);
2633
+ min-height: var(--pxd-size-target-min);
2634
+ padding: var(--pxd-space-inset-compact);
2635
+ margin: 0 calc(-1 * var(--pxd-space-inset-compact));
2636
+ border: var(--pxd-border-width-default) solid transparent;
2637
+ border-radius: var(--pxd-radius-control);
2638
+ background: none;
2639
+ text-align: start;
2640
+ cursor: text;
2641
+ }
2642
+ .pxd-inline-value:hover {
2643
+ border-color: var(--pxd-color-border-default);
2644
+ background: var(--pxd-color-surface-subtle);
2645
+ }
2646
+ .pxd-inline-empty {
2647
+ color: var(--pxd-color-text-muted);
2648
+ }
2649
+ .pxd-inline-hint {
2650
+ color: var(--pxd-color-text-link);
2651
+ font-size: var(--pxd-type-label-small-size);
2652
+ }
2653
+
2654
+ /* Action: a described (two-line) button */
2655
+ .pxd-button-described {
2656
+ flex-direction: column;
2657
+ align-items: flex-start;
2658
+ gap: 0;
2659
+ text-align: start;
2660
+ }
2661
+ .pxd-button-description {
2662
+ color: var(--pxd-color-text-muted);
2663
+ font-size: var(--pxd-type-body-small-size);
2664
+ font-weight: var(--pxd-type-body-default-weight);
2665
+ }
2666
+ .pxd-button-primary .pxd-button-description {
2667
+ color: inherit;
2668
+ opacity: var(--pxd-opacity-state-hover);
2669
+ }
2670
+
2671
+ /* Steps: task list and guide */
2672
+ .pxd-tasklist-list {
2673
+ display: flex;
2674
+ flex-direction: column;
2675
+ border-top: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2676
+ }
2677
+ .pxd-task {
2678
+ border-bottom: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2679
+ }
2680
+ .pxd-task-row {
2681
+ display: flex;
2682
+ align-items: center;
2683
+ justify-content: space-between;
2684
+ gap: var(--pxd-space-inline-default);
2685
+ min-height: var(--pxd-size-target-min);
2686
+ padding: var(--pxd-space-inset-compact) 0;
2687
+ }
2688
+ .pxd-task-title {
2689
+ flex: 1;
2690
+ padding: var(--pxd-space-inset-compact) 0;
2691
+ border: 0;
2692
+ background: none;
2693
+ color: var(--pxd-color-text-link);
2694
+ text-align: start;
2695
+ text-decoration: underline;
2696
+ cursor: pointer;
2697
+ }
2698
+ .pxd-task-title:disabled {
2699
+ color: var(--pxd-color-text-muted);
2700
+ text-decoration: none;
2701
+ cursor: default;
2702
+ }
2703
+ .pxd-task-content {
2704
+ padding: 0 0 var(--pxd-space-inset-default);
2705
+ }
2706
+ .pxd-guide-list {
2707
+ display: flex;
2708
+ flex-direction: column;
2709
+ gap: var(--pxd-space-stack-loose);
2710
+ }
2711
+ .pxd-guide-step {
2712
+ display: flex;
2713
+ gap: var(--pxd-space-inline-default);
2714
+ }
2715
+ .pxd-guide-number {
2716
+ flex: none;
2717
+ display: inline-flex;
2718
+ align-items: center;
2719
+ justify-content: center;
2720
+ width: 2rem;
2721
+ height: 2rem;
2722
+ border-radius: var(--pxd-radius-full);
2723
+ background: var(--pxd-color-action-primary-background);
2724
+ color: var(--pxd-color-action-primary-foreground);
2725
+ font-weight: 600;
2726
+ font-variant-numeric: tabular-nums;
2727
+ }
2728
+ .pxd-guide-body {
2729
+ flex: 1;
2730
+ min-width: 0;
2731
+ display: flex;
2732
+ flex-direction: column;
2733
+ gap: var(--pxd-space-stack-tight);
2734
+ }
2735
+ .pxd-guide-title {
2736
+ font-family: var(--pxd-type-title-item-family);
2737
+ font-size: var(--pxd-type-title-item-size);
2738
+ font-weight: var(--pxd-type-title-item-weight);
2739
+ }
2740
+
2741
+ /* Chart: scatter, range, matrix, treemap, flow */
2742
+ .pxd-chart-range-label,
2743
+ .pxd-chart-flow-label {
2744
+ fill: var(--pxd-color-text-default);
2745
+ font-size: 12px;
2746
+ }
2747
+ .pxd-chart-tile-label {
2748
+ fill: var(--pxd-color-action-primary-foreground);
2749
+ font-size: 12px;
2750
+ font-weight: 600;
2751
+ }
2752
+ .pxd-heatmap-scroll {
2753
+ overflow-x: auto;
2754
+ }
2755
+ .pxd-heatmap {
2756
+ border-collapse: separate;
2757
+ border-spacing: 2px;
2758
+ width: 100%;
2759
+ }
2760
+ .pxd-heatmap th {
2761
+ padding: var(--pxd-space-inset-compact);
2762
+ color: var(--pxd-color-text-muted);
2763
+ font-size: var(--pxd-type-label-small-size);
2764
+ font-weight: var(--pxd-type-label-small-weight);
2765
+ text-align: start;
2766
+ }
2767
+ .pxd-heatmap-cell {
2768
+ padding: var(--pxd-space-inset-compact);
2769
+ border-radius: var(--pxd-radius-small);
2770
+ text-align: end;
2771
+ font-variant-numeric: tabular-nums;
2772
+ font-size: var(--pxd-type-body-small-size);
2773
+ }
2774
+ .pxd-heatmap-strong {
2775
+ color: var(--pxd-color-action-primary-foreground);
2776
+ }
2777
+
2778
+ /* Navigation: breadcrumb, nested, toc, local */
2779
+ .pxd-nav-breadcrumb ol {
2780
+ display: flex;
2781
+ flex-wrap: wrap;
2782
+ align-items: center;
2783
+ gap: var(--pxd-space-inline-tight);
2784
+ font-size: var(--pxd-type-body-small-size);
2785
+ }
2786
+ .pxd-nav-breadcrumb li + li::before {
2787
+ content: "/";
2788
+ margin-right: var(--pxd-space-inline-tight);
2789
+ color: var(--pxd-color-text-muted);
2790
+ }
2791
+ .pxd-nav-breadcrumb-current {
2792
+ color: var(--pxd-color-text-default);
2793
+ font-weight: 600;
2794
+ }
2795
+ .pxd-nav-group-toggle {
2796
+ display: flex;
2797
+ align-items: center;
2798
+ gap: var(--pxd-space-inline-tight);
2799
+ width: 100%;
2800
+ min-height: var(--pxd-size-target-min);
2801
+ padding: 0 var(--pxd-space-inset-compact);
2802
+ border: 0;
2803
+ background: none;
2804
+ color: var(--pxd-color-text-muted);
2805
+ cursor: pointer;
2806
+ text-align: start;
2807
+ }
2808
+ .pxd-nav-group-toggle .pxd-nav-group-label {
2809
+ padding: 0;
2810
+ }
2811
+ .pxd-nav-nested ul {
2812
+ padding-left: var(--pxd-space-inset-default);
2813
+ }
2814
+ .pxd-nav-toc {
2815
+ display: flex;
2816
+ flex-direction: column;
2817
+ gap: var(--pxd-space-stack-tight);
2818
+ padding-left: var(--pxd-space-inset-default);
2819
+ border-left: var(--pxd-border-width-strong) solid var(--pxd-color-border-default);
2820
+ }
2821
+ .pxd-nav-toc-label {
2822
+ color: var(--pxd-color-text-muted);
2823
+ font-size: var(--pxd-type-label-small-size);
2824
+ font-weight: var(--pxd-type-label-small-weight);
2825
+ text-transform: uppercase;
2826
+ letter-spacing: var(--pxd-type-label-small-letter-spacing);
2827
+ }
2828
+ .pxd-nav-toc ol {
2829
+ display: flex;
2830
+ flex-direction: column;
2831
+ gap: var(--pxd-space-stack-tight);
2832
+ }
2833
+ .pxd-nav-toc-link {
2834
+ color: var(--pxd-color-text-muted);
2835
+ text-decoration: none;
2836
+ font-size: var(--pxd-type-body-small-size);
2837
+ }
2838
+ .pxd-nav-toc-link:hover {
2839
+ color: var(--pxd-color-text-default);
2840
+ }
2841
+ .pxd-nav-toc-link.pxd-nav-current {
2842
+ color: var(--pxd-color-text-default);
2843
+ font-weight: 600;
2844
+ background: none;
2845
+ }
2846
+ .pxd-nav-local ul {
2847
+ display: flex;
2848
+ gap: var(--pxd-space-inline-tight);
2849
+ overflow-x: auto;
2850
+ border-bottom: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
2851
+ }
2852
+ .pxd-nav-local-item {
2853
+ display: inline-flex;
2854
+ align-items: center;
2855
+ gap: var(--pxd-space-inline-tight);
2856
+ min-height: var(--pxd-size-target-min);
2857
+ padding: 0 var(--pxd-space-inset-default);
2858
+ margin-bottom: calc(-1 * var(--pxd-border-width-default));
2859
+ border: 0;
2860
+ border-bottom: var(--pxd-border-width-strong) solid transparent;
2861
+ background: none;
2862
+ color: var(--pxd-color-text-muted);
2863
+ font-family: var(--pxd-type-label-default-family);
2864
+ font-size: var(--pxd-type-label-default-size);
2865
+ font-weight: var(--pxd-type-label-default-weight);
2866
+ white-space: nowrap;
2867
+ cursor: pointer;
2868
+ }
2869
+ .pxd-nav-local-item:hover {
2870
+ color: var(--pxd-color-text-default);
2871
+ }
2872
+ .pxd-nav-local-item.pxd-nav-current {
2873
+ color: var(--pxd-color-text-default);
2874
+ border-bottom-color: var(--pxd-color-action-primary-background);
2875
+ background: none;
2876
+ }
2877
+
2878
+
2879
+ /* ---- marks: added with the v0.2 components ---- */
2880
+ /*
2881
+ * Marks: Tag, Identity, Progress (as .pxd-gauge, since .pxd-progress is the Card's bar),
2882
+ * Rating and Code. Every value comes from a --pxd-* token; the two the token contract does not
2883
+ * yet name (a mono family, a control size) fall back to the closest thing it does.
2884
+ */
2885
+
2886
+ /* Tag: inline with text and in a Card header; never wraps. */
2887
+ .pxd-tag {
2888
+ position: relative;
2889
+ display: inline-flex;
2890
+ align-items: center;
2891
+ gap: var(--pxd-space-inline-tight);
2892
+ max-width: 100%;
2893
+ vertical-align: middle;
2894
+ padding: var(--pxd-space-stack-tight) var(--pxd-space-inline-default);
2895
+ border-radius: var(--pxd-radius-small);
2896
+ background: var(--pxd-color-surface-subtle);
2897
+ color: var(--pxd-color-text-default);
2898
+ font-family: var(--pxd-type-label-small-family);
2899
+ font-size: var(--pxd-type-label-small-size);
2900
+ font-weight: var(--pxd-type-label-small-weight);
2901
+ line-height: var(--pxd-type-label-small-line-height);
2902
+ letter-spacing: var(--pxd-type-label-small-letter-spacing);
2903
+ white-space: nowrap;
2904
+ }
2905
+ .pxd-tag-text {
2906
+ overflow: hidden;
2907
+ text-overflow: ellipsis;
2908
+ }
2909
+ .pxd-tag-count {
2910
+ justify-content: center;
2911
+ min-width: var(--pxd-size-icon-default);
2912
+ border-radius: var(--pxd-radius-full);
2913
+ }
2914
+ .pxd-tag-number {
2915
+ font-variant-numeric: tabular-nums;
2916
+ }
2917
+ /* Status: the pack's status pairs, which the token contract guarantees readable. */
2918
+ .pxd-tag-status.pxd-tag-info { background: var(--pxd-color-status-info-background); color: var(--pxd-color-status-info-foreground); }
2919
+ .pxd-tag-status.pxd-tag-success { background: var(--pxd-color-status-success-background); color: var(--pxd-color-status-success-foreground); }
2920
+ .pxd-tag-status.pxd-tag-warning { background: var(--pxd-color-status-warning-background); color: var(--pxd-color-status-warning-foreground); }
2921
+ .pxd-tag-status.pxd-tag-danger { background: var(--pxd-color-status-danger-background); color: var(--pxd-color-status-danger-foreground); }
2922
+ .pxd-tag-removable {
2923
+ padding-right: var(--pxd-space-inline-tight);
2924
+ }
2925
+ /* The remove control is drawn small but its hit area is the minimum target, centred on it. */
2926
+ .pxd-tag-remove {
2927
+ position: relative;
2928
+ flex: none;
2929
+ display: inline-grid;
2930
+ place-items: center;
2931
+ width: var(--pxd-size-icon-small);
2932
+ height: var(--pxd-size-icon-small);
2933
+ padding: 0;
2934
+ border: 0;
2935
+ border-radius: var(--pxd-radius-full);
2936
+ background: transparent;
2937
+ color: inherit;
2938
+ cursor: pointer;
2939
+ }
2940
+ .pxd-tag-remove::before {
2941
+ content: "";
2942
+ position: absolute;
2943
+ top: 50%;
2944
+ left: 50%;
2945
+ width: var(--pxd-size-target-min);
2946
+ height: var(--pxd-size-target-min);
2947
+ transform: translate(-50%, -50%);
2948
+ }
2949
+ .pxd-tag-remove:hover {
2950
+ background: color-mix(in srgb, currentColor calc(var(--pxd-opacity-state-hover) * 100%), transparent);
2951
+ }
2952
+
2953
+ /* Identity: picture, name, detail. A person is round; a team or organisation is square. */
2954
+ .pxd-identity {
2955
+ display: inline-flex;
2956
+ align-items: center;
2957
+ gap: var(--pxd-space-inline-default);
2958
+ max-width: 100%;
2959
+ min-width: 0;
2960
+ text-align: left;
2961
+ }
2962
+ .pxd-identity-small {
2963
+ gap: var(--pxd-space-inline-tight);
2964
+ }
2965
+ .pxd-identity .pxd-avatar {
2966
+ width: var(--polyxd-identity-size);
2967
+ height: var(--polyxd-identity-size);
2968
+ }
2969
+ .pxd-identity-team .pxd-avatar,
2970
+ .pxd-identity-organization .pxd-avatar {
2971
+ border-radius: var(--pxd-radius-small);
2972
+ }
2973
+ .pxd-identity-text {
2974
+ display: flex;
2975
+ flex-direction: column;
2976
+ min-width: 0;
2977
+ }
2978
+ .pxd-identity-name {
2979
+ overflow: hidden;
2980
+ text-overflow: ellipsis;
2981
+ white-space: nowrap;
2982
+ }
2983
+ .pxd-identity-large .pxd-identity-name {
2984
+ font-family: var(--pxd-type-title-item-family);
2985
+ font-size: var(--pxd-type-title-item-size);
2986
+ font-weight: var(--pxd-type-title-item-weight);
2987
+ line-height: var(--pxd-type-title-item-line-height);
2988
+ letter-spacing: var(--pxd-type-title-item-letter-spacing);
2989
+ }
2990
+ .pxd-identity-small .pxd-identity-name,
2991
+ .pxd-identity-detail {
2992
+ font-family: var(--pxd-type-body-small-family);
2993
+ font-size: var(--pxd-type-body-small-size);
2994
+ line-height: var(--pxd-type-body-small-line-height);
2995
+ }
2996
+ .pxd-identity-detail {
2997
+ color: var(--pxd-color-text-muted);
2998
+ overflow: hidden;
2999
+ text-overflow: ellipsis;
3000
+ white-space: nowrap;
3001
+ }
3002
+ /* With an action, the whole thing is one button: unstyled, but a real target. */
3003
+ .pxd-identity-button {
3004
+ min-height: var(--pxd-size-target-min);
3005
+ padding: var(--pxd-space-stack-tight) var(--pxd-space-inline-tight);
3006
+ margin: calc(-1 * var(--pxd-space-stack-tight)) calc(-1 * var(--pxd-space-inline-tight));
3007
+ border: 0;
3008
+ border-radius: var(--pxd-radius-control);
3009
+ background: transparent;
3010
+ color: inherit;
3011
+ cursor: pointer;
3012
+ transition: background var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3013
+ }
3014
+ .pxd-identity-button:hover {
3015
+ background: color-mix(in srgb, currentColor calc(var(--pxd-opacity-state-hover) * 100%), transparent);
3016
+ }
3017
+ /* A group: pictures overlapping by a quarter, then "+N" for the rest. */
3018
+ .pxd-identity-faces {
3019
+ display: inline-flex;
3020
+ flex: none;
3021
+ align-items: center;
3022
+ padding-left: calc(var(--polyxd-identity-size) / 4);
3023
+ }
3024
+ .pxd-identity-face {
3025
+ display: inline-flex;
3026
+ margin-left: calc(-1 * var(--polyxd-identity-size) / 4);
3027
+ border-radius: var(--pxd-radius-full);
3028
+ box-shadow: 0 0 0 var(--pxd-border-width-strong) var(--pxd-color-surface-default);
3029
+ }
3030
+ .pxd-identity-team .pxd-identity-face,
3031
+ .pxd-identity-organization .pxd-identity-face {
3032
+ border-radius: var(--pxd-radius-small);
3033
+ }
3034
+ .pxd-identity-more {
3035
+ align-items: center;
3036
+ justify-content: center;
3037
+ width: var(--polyxd-identity-size);
3038
+ height: var(--polyxd-identity-size);
3039
+ background: var(--pxd-color-surface-subtle);
3040
+ color: var(--pxd-color-text-default);
3041
+ font-family: var(--pxd-type-label-small-family);
3042
+ font-size: var(--pxd-type-label-small-size);
3043
+ font-weight: var(--pxd-type-label-small-weight);
3044
+ font-variant-numeric: tabular-nums;
3045
+ }
3046
+
3047
+ /* Progress: a bar, a ring or a meter. Track on surface.subtle; fill primary, or the tone's emphasis. */
3048
+ .pxd-gauge {
3049
+ --polyxd-gauge-fill: var(--pxd-color-action-primary-background);
3050
+ --polyxd-gauge-thickness: calc(var(--polyxd-control, var(--pxd-size-target-min)) / 5);
3051
+ display: flex;
3052
+ flex-direction: column;
3053
+ gap: var(--pxd-space-stack-tight);
3054
+ min-width: 0;
3055
+ }
3056
+ .pxd-gauge-warning { --polyxd-gauge-fill: var(--pxd-color-status-warning-emphasis); }
3057
+ .pxd-gauge-danger { --polyxd-gauge-fill: var(--pxd-color-status-danger-emphasis); }
3058
+ .pxd-gauge-success { --polyxd-gauge-fill: var(--pxd-color-status-success-emphasis); }
3059
+ .pxd-gauge-info { --polyxd-gauge-fill: var(--pxd-color-status-info-emphasis); }
3060
+ .pxd-gauge-header {
3061
+ display: flex;
3062
+ align-items: baseline;
3063
+ justify-content: space-between;
3064
+ flex-wrap: wrap;
3065
+ gap: var(--pxd-space-inline-default);
3066
+ min-width: 0;
3067
+ }
3068
+ .pxd-gauge-label {
3069
+ font-family: var(--pxd-type-label-default-family);
3070
+ font-size: var(--pxd-type-label-default-size);
3071
+ font-weight: var(--pxd-type-label-default-weight);
3072
+ line-height: var(--pxd-type-label-default-line-height);
3073
+ letter-spacing: var(--pxd-type-label-default-letter-spacing);
3074
+ }
3075
+ .pxd-gauge-readout {
3076
+ display: inline-flex;
3077
+ align-items: baseline;
3078
+ gap: var(--pxd-space-inline-tight);
3079
+ font-family: var(--pxd-type-body-small-family);
3080
+ font-size: var(--pxd-type-body-small-size);
3081
+ line-height: var(--pxd-type-body-small-line-height);
3082
+ color: var(--pxd-color-text-muted);
3083
+ }
3084
+ .pxd-gauge-value {
3085
+ color: var(--pxd-color-text-default);
3086
+ font-variant-numeric: tabular-nums;
3087
+ }
3088
+ .pxd-gauge-hint::before {
3089
+ content: "· " / "";
3090
+ }
3091
+ .pxd-gauge-track {
3092
+ width: 100%;
3093
+ height: var(--polyxd-gauge-thickness);
3094
+ border-radius: var(--pxd-radius-full);
3095
+ background: var(--pxd-color-surface-subtle);
3096
+ overflow: hidden;
3097
+ }
3098
+ .pxd-gauge-fill {
3099
+ height: 100%;
3100
+ border-radius: inherit;
3101
+ background: var(--polyxd-gauge-fill);
3102
+ transition: width var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3103
+ }
3104
+ .pxd-gauge-indeterminate .pxd-gauge-fill {
3105
+ width: 40%;
3106
+ animation: pxd-gauge-slide var(--pxd-motion-duration-long, 1.2s) var(--pxd-motion-easing-standard) infinite;
3107
+ }
3108
+ @keyframes pxd-gauge-slide {
3109
+ from { transform: translateX(-100%); }
3110
+ to { transform: translateX(250%); }
3111
+ }
3112
+ /* Ring: the graphic beside the text, a control's size across. */
3113
+ .pxd-gauge-ring {
3114
+ flex-direction: row;
3115
+ align-items: center;
3116
+ gap: var(--pxd-space-inline-default);
3117
+ }
3118
+ .pxd-gauge-ring .pxd-gauge-header {
3119
+ flex-direction: column;
3120
+ align-items: flex-start;
3121
+ gap: 0;
3122
+ }
3123
+ .pxd-gauge-ring-graphic {
3124
+ flex: none;
3125
+ width: var(--polyxd-control, var(--pxd-size-target-min));
3126
+ height: var(--polyxd-control, var(--pxd-size-target-min));
3127
+ }
3128
+ .pxd-gauge-ring-svg {
3129
+ display: block;
3130
+ width: 100%;
3131
+ height: 100%;
3132
+ transform: rotate(-90deg);
3133
+ }
3134
+ .pxd-gauge-ring-track {
3135
+ stroke: var(--pxd-color-surface-subtle);
3136
+ }
3137
+ .pxd-gauge-ring-fill {
3138
+ stroke: var(--polyxd-gauge-fill);
3139
+ transition: stroke-dasharray var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3140
+ }
3141
+ .pxd-gauge-indeterminate .pxd-gauge-ring-svg {
3142
+ animation: pxd-spin var(--pxd-motion-duration-long, 1.2s) linear infinite;
3143
+ }
3144
+ @media (prefers-reduced-motion: reduce) {
3145
+ .pxd-gauge-indeterminate .pxd-gauge-fill,
3146
+ .pxd-gauge-indeterminate .pxd-gauge-ring-svg {
3147
+ animation-duration: calc(var(--pxd-motion-duration-long, 1.2s) * 3);
3148
+ }
3149
+ }
3150
+
3151
+ /* Rating: filled shapes in warning.emphasis, empty ones in border.default. */
3152
+ .pxd-rating {
3153
+ display: flex;
3154
+ flex-wrap: wrap;
3155
+ align-items: center;
3156
+ gap: var(--pxd-space-inline-default);
3157
+ min-width: 0;
3158
+ }
3159
+ .pxd-rating.pxd-field {
3160
+ flex-direction: column;
3161
+ align-items: stretch;
3162
+ gap: var(--pxd-space-stack-tight);
3163
+ }
3164
+ .pxd-rating-row {
3165
+ display: flex;
3166
+ align-items: center;
3167
+ gap: var(--pxd-space-inline-default);
3168
+ }
3169
+ .pxd-rating-stars {
3170
+ display: inline-flex;
3171
+ align-items: center;
3172
+ /* Stars are graphics (3:1), never text: the score beside them is the text. */
3173
+ --polyxd-star: var(--pxd-color-status-warning-emphasis);
3174
+ color: var(--polyxd-star);
3175
+ }
3176
+ .pxd-rating-star-shape {
3177
+ position: relative;
3178
+ display: inline-block;
3179
+ width: var(--pxd-size-icon-default);
3180
+ height: var(--pxd-size-icon-default);
3181
+ line-height: 0;
3182
+ }
3183
+ .pxd-rating-star-shape svg {
3184
+ display: block;
3185
+ width: var(--pxd-size-icon-default);
3186
+ height: var(--pxd-size-icon-default);
3187
+ }
3188
+ .pxd-rating-star-empty path {
3189
+ fill: var(--pxd-color-border-default);
3190
+ }
3191
+ .pxd-rating-star-fill {
3192
+ position: absolute;
3193
+ inset: 0 auto 0 0;
3194
+ overflow: hidden;
3195
+ }
3196
+ .pxd-rating-star-fill path {
3197
+ fill: currentColor;
3198
+ }
3199
+ /* Each star that can be given is a real control at the minimum target. */
3200
+ .pxd-rating-star {
3201
+ display: inline-grid;
3202
+ place-items: center;
3203
+ min-width: var(--pxd-size-target-min);
3204
+ min-height: var(--pxd-size-target-min);
3205
+ padding: 0;
3206
+ border: 0;
3207
+ border-radius: var(--pxd-radius-control);
3208
+ background: transparent;
3209
+ color: inherit;
3210
+ cursor: pointer;
3211
+ }
3212
+ .pxd-rating-star:hover .pxd-rating-star-empty path {
3213
+ fill: var(--pxd-color-border-strong);
3214
+ }
3215
+ .pxd-rating-readonly .pxd-rating-stars {
3216
+ gap: 0;
3217
+ }
3218
+ .pxd-rating-readout {
3219
+ display: inline-flex;
3220
+ align-items: baseline;
3221
+ gap: var(--pxd-space-inline-tight);
3222
+ font-variant-numeric: tabular-nums;
3223
+ }
3224
+ .pxd-rating-count {
3225
+ color: var(--pxd-color-text-muted);
3226
+ font-family: var(--pxd-type-body-small-family);
3227
+ font-size: var(--pxd-type-body-small-size);
3228
+ line-height: var(--pxd-type-body-small-line-height);
3229
+ }
3230
+
3231
+ /* Code: mono at body.small on surface.subtle; the controls sit top-right. */
3232
+ .pxd-code {
3233
+ display: flex;
3234
+ flex-direction: column;
3235
+ min-width: 0;
3236
+ border-radius: var(--pxd-radius-control);
3237
+ background: var(--pxd-color-surface-subtle);
3238
+ color: var(--pxd-color-text-default);
3239
+ }
3240
+ .pxd-code-header {
3241
+ display: flex;
3242
+ align-items: center;
3243
+ justify-content: space-between;
3244
+ gap: var(--pxd-space-inline-default);
3245
+ min-height: var(--pxd-size-target-min);
3246
+ padding: 0 var(--pxd-space-inline-tight) 0 var(--pxd-space-inset-default);
3247
+ }
3248
+ .pxd-code-label {
3249
+ font-family: var(--pxd-type-label-default-family);
3250
+ font-size: var(--pxd-type-label-default-size);
3251
+ font-weight: var(--pxd-type-label-default-weight);
3252
+ line-height: var(--pxd-type-label-default-line-height);
3253
+ letter-spacing: var(--pxd-type-label-default-letter-spacing);
3254
+ color: var(--pxd-color-text-muted);
3255
+ overflow: hidden;
3256
+ text-overflow: ellipsis;
3257
+ white-space: nowrap;
3258
+ }
3259
+ .pxd-code-controls {
3260
+ display: flex;
3261
+ flex: none;
3262
+ align-items: center;
3263
+ }
3264
+ /* On the subtle surface a tertiary button's tint can fall under 4.5:1 in some packs; the
3265
+ controls read as default text instead. */
3266
+ .pxd-code-controls .pxd-code-control {
3267
+ color: var(--pxd-color-text-default);
3268
+ gap: var(--pxd-space-inline-tight);
3269
+ margin-left: auto;
3270
+ }
3271
+ .pxd-code-control {
3272
+ min-height: var(--pxd-size-target-min);
3273
+ min-width: var(--pxd-size-target-min);
3274
+ font-family: var(--pxd-type-label-default-family);
3275
+ font-size: var(--pxd-type-label-default-size);
3276
+ font-weight: var(--pxd-type-label-default-weight);
3277
+ }
3278
+ .pxd-code-pre {
3279
+ margin: 0;
3280
+ padding: 0 var(--pxd-space-inset-default) var(--pxd-space-inset-default);
3281
+ overflow-x: auto;
3282
+ overflow-y: hidden;
3283
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
3284
+ font-size: var(--pxd-type-body-small-size);
3285
+ line-height: var(--pxd-type-body-small-line-height);
3286
+ white-space: pre;
3287
+ tab-size: 2;
3288
+ }
3289
+ .pxd-code-pre code {
3290
+ font: inherit;
3291
+ user-select: text;
3292
+ }
3293
+ .pxd-code-wrap .pxd-code-pre {
3294
+ overflow-x: visible;
3295
+ white-space: pre-wrap;
3296
+ overflow-wrap: anywhere;
3297
+ }
3298
+ .pxd-code-pre[data-masked] code {
3299
+ letter-spacing: 0.1em;
3300
+ user-select: none;
3301
+ }
3302
+
3303
+
3304
+ /* ---- tree: added with the v0.2 components ---- */
3305
+ /* Tree: a hierarchy people expand, browse and pick from (WAI-ARIA tree view).
3306
+ Merged into styles.css. Every value comes from a --pxd-* token; --polyxd-tree-depth is set per row
3307
+ by the renderer (0 at the top level) and drives the indent. */
3308
+
3309
+ .pxd-tree {
3310
+ display: flex;
3311
+ flex-direction: column;
3312
+ gap: var(--pxd-space-stack-tight);
3313
+ }
3314
+ .pxd-tree-caption {
3315
+ font-family: var(--pxd-type-label-small-family);
3316
+ font-size: var(--pxd-type-label-small-size);
3317
+ font-weight: var(--pxd-type-label-small-weight);
3318
+ line-height: var(--pxd-type-label-small-line-height);
3319
+ letter-spacing: var(--pxd-type-label-small-letter-spacing);
3320
+ color: var(--pxd-color-text-muted);
3321
+ }
3322
+ /* Past 200 visible rows the list scrolls inside its own viewport and only nearby rows render;
3323
+ the height is twelve rows so the window keeps a stable size while rows come and go. */
3324
+ .pxd-tree-viewport {
3325
+ max-height: calc(var(--pxd-size-target-min) * 12);
3326
+ overflow-y: auto;
3327
+ overscroll-behavior: contain;
3328
+ }
3329
+ .pxd-tree-list {
3330
+ display: flex;
3331
+ flex-direction: column;
3332
+ }
3333
+ .pxd-tree-item {
3334
+ /* Indent by level: each level steps in by one inline space. */
3335
+ padding-inline-start: calc(var(--polyxd-tree-depth, 0) * var(--pxd-space-inline-default));
3336
+ border-radius: var(--pxd-radius-control);
3337
+ cursor: default;
3338
+ user-select: none;
3339
+ }
3340
+ .pxd-tree-item:focus-visible {
3341
+ /* Inset ring so it survives the viewport's overflow clipping. */
3342
+ outline: var(--pxd-focus-ring-width) solid var(--pxd-color-border-focus);
3343
+ outline-offset: calc(-1 * var(--pxd-focus-ring-width));
3344
+ }
3345
+ .pxd-tree-row {
3346
+ display: flex;
3347
+ align-items: center;
3348
+ gap: var(--pxd-space-inline-tight);
3349
+ min-height: var(--pxd-size-target-min);
3350
+ padding-inline-end: var(--pxd-space-inset-compact);
3351
+ border-radius: var(--pxd-radius-control);
3352
+ transition: background-color var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3353
+ }
3354
+ .pxd-tree-item:hover > .pxd-tree-row {
3355
+ background: var(--pxd-color-surface-subtle);
3356
+ }
3357
+ .pxd-tree-item[aria-selected="true"] > .pxd-tree-row {
3358
+ background: var(--pxd-color-selection-background);
3359
+ color: var(--pxd-color-selection-foreground);
3360
+ }
3361
+ /* The expander is a square target; leaves keep the same width so their labels align. */
3362
+ .pxd-tree-expander {
3363
+ flex: none;
3364
+ display: inline-flex;
3365
+ align-items: center;
3366
+ justify-content: center;
3367
+ width: var(--pxd-size-target-min);
3368
+ height: var(--pxd-size-target-min);
3369
+ padding: 0;
3370
+ border: 0;
3371
+ border-radius: var(--pxd-radius-control);
3372
+ background: none;
3373
+ color: var(--pxd-color-text-muted);
3374
+ cursor: pointer;
3375
+ }
3376
+ .pxd-tree-expander svg {
3377
+ transition: transform var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3378
+ }
3379
+ .pxd-tree-expander-open svg {
3380
+ transform: rotate(90deg);
3381
+ }
3382
+ .pxd-tree-expander-leaf {
3383
+ cursor: default;
3384
+ }
3385
+ .pxd-tree-item[aria-selected="true"] > .pxd-tree-row .pxd-tree-expander {
3386
+ color: inherit;
3387
+ }
3388
+ .pxd-tree-text {
3389
+ flex: 1;
3390
+ min-width: 0;
3391
+ overflow: hidden;
3392
+ text-overflow: ellipsis;
3393
+ white-space: nowrap;
3394
+ }
3395
+ .pxd-tree-detail {
3396
+ flex: none;
3397
+ font-family: var(--pxd-type-body-small-family);
3398
+ font-size: var(--pxd-type-body-small-size);
3399
+ line-height: var(--pxd-type-body-small-line-height);
3400
+ color: var(--pxd-color-text-muted);
3401
+ }
3402
+ .pxd-tree-item[aria-selected="true"] > .pxd-tree-row .pxd-tree-detail {
3403
+ color: inherit;
3404
+ }
3405
+ @media (prefers-reduced-motion: reduce) {
3406
+ .pxd-tree-row,
3407
+ .pxd-tree-expander svg {
3408
+ transition: none;
3409
+ }
3410
+ }
3411
+
3412
+
3413
+ /* ---- pickers: added with the v0.2 components ---- */
3414
+ /*
3415
+ * Pickers: FileInput, ColorInput, CodeInput. Every value comes from a --pxd-* token, as in
3416
+ * styles.css; --polyxd-control is the density-scaled control height styles.css derives from
3417
+ * --pxd-size-target-min. Merged into styles.css.
3418
+ */
3419
+
3420
+ /* Shared: a refusal or error said under a control, in the danger tokens. */
3421
+ .pxd-field-error {
3422
+ margin: 0;
3423
+ color: var(--pxd-color-status-danger-foreground);
3424
+ font-size: var(--pxd-type-body-small-size);
3425
+ line-height: var(--pxd-type-body-small-line-height);
3426
+ }
3427
+ /* The value as text: hex, rgb(), hsl(). No mono token exists yet, so the family falls back to the platform's. */
3428
+ .pxd-input-mono {
3429
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
3430
+ font-variant-numeric: tabular-nums;
3431
+ }
3432
+
3433
+ /* FileInput: a dashed zone the native input covers, so a click or a drop anywhere lands on it. */
3434
+ .pxd-dropzone {
3435
+ position: relative;
3436
+ display: flex;
3437
+ flex-direction: column;
3438
+ align-items: center;
3439
+ justify-content: center;
3440
+ gap: var(--pxd-space-stack-tight);
3441
+ min-height: calc(var(--polyxd-control) * 2.5);
3442
+ max-width: 32rem;
3443
+ padding: var(--pxd-space-inset-default);
3444
+ border: var(--pxd-border-width-default) dashed var(--pxd-color-border-strong);
3445
+ border-radius: var(--pxd-radius-control);
3446
+ background: var(--pxd-color-surface-subtle);
3447
+ color: var(--pxd-color-text-default);
3448
+ text-align: center;
3449
+ transition:
3450
+ border-color var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard),
3451
+ background var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3452
+ }
3453
+ .pxd-dropzone:hover {
3454
+ background: color-mix(in srgb, var(--pxd-color-text-default) calc(var(--pxd-opacity-state-hover) * 100%), var(--pxd-color-surface-subtle));
3455
+ }
3456
+ .pxd-dropzone[data-dragging] {
3457
+ border-style: solid;
3458
+ border-color: var(--pxd-color-border-focus);
3459
+ background: var(--pxd-color-selection-background);
3460
+ color: var(--pxd-color-selection-foreground);
3461
+ }
3462
+ /* The input is the real control. It is transparent, not hidden, so it stays focusable and clickable. */
3463
+ .pxd-dropzone-input {
3464
+ position: absolute;
3465
+ inset: 0;
3466
+ width: 100%;
3467
+ height: 100%;
3468
+ margin: 0;
3469
+ opacity: 0;
3470
+ cursor: pointer;
3471
+ }
3472
+ .pxd-dropzone:has(> .pxd-dropzone-input:focus-visible) {
3473
+ outline: var(--pxd-focus-ring-width) solid var(--pxd-color-border-focus);
3474
+ outline-offset: var(--pxd-focus-ring-offset);
3475
+ }
3476
+ .pxd-dropzone:has(> .pxd-dropzone-input:user-invalid) {
3477
+ border-color: var(--pxd-color-status-danger-emphasis);
3478
+ }
3479
+ .pxd-dropzone-icon {
3480
+ display: inline-flex;
3481
+ color: var(--pxd-color-text-muted);
3482
+ pointer-events: none;
3483
+ }
3484
+ .pxd-dropzone[data-dragging] .pxd-dropzone-icon {
3485
+ color: inherit;
3486
+ }
3487
+ .pxd-dropzone-text {
3488
+ display: flex;
3489
+ flex-wrap: wrap;
3490
+ justify-content: center;
3491
+ gap: 0 var(--pxd-space-inline-tight);
3492
+ pointer-events: none;
3493
+ }
3494
+ .pxd-dropzone-action {
3495
+ /* Underlined on the subtle surface, in default text: a link tint can fall under 4.5:1 there. */
3496
+ color: var(--pxd-color-text-default);
3497
+ font-family: var(--pxd-type-label-default-family);
3498
+ font-size: var(--pxd-type-label-default-size);
3499
+ font-weight: var(--pxd-type-label-default-weight);
3500
+ text-decoration: underline;
3501
+ text-underline-offset: 0.15em;
3502
+ }
3503
+ .pxd-dropzone[data-dragging] .pxd-dropzone-action {
3504
+ color: inherit;
3505
+ }
3506
+ .pxd-dropzone-hint {
3507
+ color: var(--pxd-color-text-muted);
3508
+ font-size: var(--pxd-type-body-small-size);
3509
+ }
3510
+ .pxd-dropzone[data-dragging] .pxd-dropzone-hint {
3511
+ color: inherit;
3512
+ }
3513
+ .pxd-file-list {
3514
+ display: flex;
3515
+ flex-direction: column;
3516
+ gap: var(--pxd-space-stack-tight);
3517
+ max-width: 32rem;
3518
+ }
3519
+ .pxd-file-item {
3520
+ display: flex;
3521
+ align-items: center;
3522
+ gap: var(--pxd-space-inline-default);
3523
+ min-height: var(--polyxd-control);
3524
+ padding: var(--pxd-space-inset-compact);
3525
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
3526
+ border-radius: var(--pxd-radius-control);
3527
+ background: var(--pxd-color-surface-default);
3528
+ }
3529
+ .pxd-file-icon {
3530
+ flex: none;
3531
+ display: inline-flex;
3532
+ color: var(--pxd-color-text-muted);
3533
+ }
3534
+ .pxd-file-text {
3535
+ flex: 1 1 auto;
3536
+ min-width: 0;
3537
+ display: flex;
3538
+ flex-wrap: wrap;
3539
+ align-items: baseline;
3540
+ gap: 0 var(--pxd-space-inline-tight);
3541
+ }
3542
+ .pxd-file-name {
3543
+ min-width: 0;
3544
+ overflow: hidden;
3545
+ text-overflow: ellipsis;
3546
+ white-space: nowrap;
3547
+ }
3548
+ .pxd-file-size {
3549
+ color: var(--pxd-color-text-muted);
3550
+ font-size: var(--pxd-type-body-small-size);
3551
+ font-variant-numeric: tabular-nums;
3552
+ }
3553
+ .pxd-file-progress {
3554
+ flex: 1 0 100%;
3555
+ width: 100%;
3556
+ height: 4px;
3557
+ margin-top: var(--pxd-space-stack-tight);
3558
+ border: 0;
3559
+ border-radius: var(--pxd-radius-full);
3560
+ background: var(--pxd-color-surface-subtle);
3561
+ accent-color: var(--pxd-color-action-primary-background);
3562
+ overflow: hidden;
3563
+ }
3564
+ .pxd-file-progress::-webkit-progress-bar {
3565
+ background: var(--pxd-color-surface-subtle);
3566
+ border-radius: var(--pxd-radius-full);
3567
+ }
3568
+ .pxd-file-progress::-webkit-progress-value {
3569
+ background: var(--pxd-color-action-primary-background);
3570
+ border-radius: var(--pxd-radius-full);
3571
+ }
3572
+ .pxd-file-progress::-moz-progress-bar {
3573
+ background: var(--pxd-color-action-primary-background);
3574
+ border-radius: var(--pxd-radius-full);
3575
+ }
3576
+ .pxd-file-remove {
3577
+ flex: none;
3578
+ display: inline-flex;
3579
+ align-items: center;
3580
+ justify-content: center;
3581
+ width: var(--polyxd-control);
3582
+ height: var(--polyxd-control);
3583
+ margin: calc((var(--polyxd-control) - var(--pxd-size-icon-default)) / -2 - 4px) 0;
3584
+ margin-inline-end: calc(var(--pxd-space-inset-compact) * -1);
3585
+ padding: 0;
3586
+ border: 0;
3587
+ border-radius: var(--pxd-radius-control);
3588
+ background: transparent;
3589
+ color: var(--pxd-color-text-muted);
3590
+ cursor: pointer;
3591
+ }
3592
+ .pxd-file-remove:hover {
3593
+ color: var(--pxd-color-text-default);
3594
+ background: color-mix(in srgb, currentColor calc(var(--pxd-opacity-state-hover) * 100%), transparent);
3595
+ }
3596
+
3597
+ /* ColorInput: named swatches as radios; the free picker beside its text value. */
3598
+ .pxd-swatches {
3599
+ display: flex;
3600
+ flex-wrap: wrap;
3601
+ gap: var(--pxd-space-inline-default);
3602
+ }
3603
+ .pxd-swatch {
3604
+ display: flex;
3605
+ flex-direction: column;
3606
+ align-items: center;
3607
+ gap: var(--pxd-space-stack-tight);
3608
+ width: calc(var(--polyxd-control) + var(--pxd-space-inline-default) * 2);
3609
+ padding: 0;
3610
+ border: 0;
3611
+ background: transparent;
3612
+ color: var(--pxd-color-text-default);
3613
+ cursor: pointer;
3614
+ }
3615
+ .pxd-swatch:focus-visible {
3616
+ outline: none;
3617
+ }
3618
+ .pxd-swatch-color {
3619
+ display: block;
3620
+ width: var(--polyxd-control);
3621
+ height: var(--polyxd-control);
3622
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
3623
+ border-radius: var(--pxd-radius-control);
3624
+ background: var(--pxd-color-surface-default);
3625
+ transition: box-shadow var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3626
+ }
3627
+ .pxd-swatch:hover .pxd-swatch-color {
3628
+ border-color: var(--pxd-color-border-strong);
3629
+ }
3630
+ .pxd-swatch:focus-visible .pxd-swatch-color {
3631
+ outline: var(--pxd-focus-ring-width) solid var(--pxd-color-border-focus);
3632
+ outline-offset: var(--pxd-focus-ring-offset);
3633
+ }
3634
+ .pxd-swatch[data-state="checked"] .pxd-swatch-color {
3635
+ border-color: var(--pxd-color-border-focus);
3636
+ box-shadow:
3637
+ 0 0 0 var(--pxd-focus-ring-offset) var(--pxd-color-surface-default),
3638
+ 0 0 0 calc(var(--pxd-focus-ring-offset) + var(--pxd-focus-ring-width)) var(--pxd-color-border-focus);
3639
+ }
3640
+ .pxd-swatch-other .pxd-swatch-color {
3641
+ border-style: dashed;
3642
+ border-color: var(--pxd-color-border-strong);
3643
+ }
3644
+ .pxd-swatch-name {
3645
+ max-width: 100%;
3646
+ overflow: hidden;
3647
+ text-overflow: ellipsis;
3648
+ white-space: nowrap;
3649
+ font-family: var(--pxd-type-label-small-family);
3650
+ font-size: var(--pxd-type-label-small-size);
3651
+ font-weight: var(--pxd-type-label-small-weight);
3652
+ line-height: var(--pxd-type-label-small-line-height);
3653
+ letter-spacing: var(--pxd-type-label-small-letter-spacing);
3654
+ color: var(--pxd-color-text-muted);
3655
+ }
3656
+ .pxd-swatch[data-state="checked"] .pxd-swatch-name {
3657
+ color: var(--pxd-color-text-default);
3658
+ }
3659
+ .pxd-color-picker {
3660
+ display: flex;
3661
+ flex-wrap: wrap;
3662
+ align-items: center;
3663
+ gap: var(--pxd-space-inline-default);
3664
+ max-width: 32rem;
3665
+ }
3666
+ /* The platform's picker, drawn as a swatch the same size as the named ones. */
3667
+ .pxd-color-native {
3668
+ flex: none;
3669
+ width: var(--polyxd-control);
3670
+ height: var(--polyxd-control);
3671
+ padding: 0;
3672
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-strong);
3673
+ border-radius: var(--pxd-radius-control);
3674
+ background: var(--pxd-color-surface-default);
3675
+ cursor: pointer;
3676
+ }
3677
+ .pxd-color-native::-webkit-color-swatch-wrapper {
3678
+ padding: 2px;
3679
+ }
3680
+ .pxd-color-native::-webkit-color-swatch,
3681
+ .pxd-color-native::-moz-color-swatch {
3682
+ border: 0;
3683
+ border-radius: calc(var(--pxd-radius-control) - 2px);
3684
+ }
3685
+ .pxd-color-text {
3686
+ flex: 1 1 10rem;
3687
+ max-width: 14rem;
3688
+ }
3689
+ .pxd-color-alpha {
3690
+ flex: 1 1 100%;
3691
+ display: flex;
3692
+ align-items: center;
3693
+ gap: var(--pxd-space-inline-default);
3694
+ max-width: 20rem;
3695
+ font-size: var(--pxd-type-body-small-size);
3696
+ }
3697
+ .pxd-color-alpha input[type="range"] {
3698
+ flex: 1 1 auto;
3699
+ min-width: 6rem;
3700
+ min-height: var(--polyxd-control);
3701
+ margin: 0;
3702
+ accent-color: var(--pxd-color-action-primary-background);
3703
+ }
3704
+ .pxd-color-alpha-label {
3705
+ color: var(--pxd-color-text-muted);
3706
+ }
3707
+ .pxd-color-alpha-value {
3708
+ min-width: 3ch;
3709
+ text-align: end;
3710
+ font-variant-numeric: tabular-nums;
3711
+ }
3712
+
3713
+ /* CodeInput: one square box per character; groups of three or four past six. */
3714
+ .pxd-code-boxes {
3715
+ display: flex;
3716
+ flex-wrap: wrap;
3717
+ gap: var(--pxd-space-inline-loose);
3718
+ }
3719
+ .pxd-code-group {
3720
+ display: flex;
3721
+ gap: var(--pxd-space-inline-tight);
3722
+ }
3723
+ .pxd-code-box {
3724
+ width: calc(var(--polyxd-control) + 4px);
3725
+ height: calc(var(--polyxd-control) + 4px);
3726
+ padding: 0;
3727
+ border: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
3728
+ border-radius: var(--pxd-radius-control);
3729
+ background: var(--pxd-color-surface-default);
3730
+ color: var(--pxd-color-text-default);
3731
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
3732
+ font-size: var(--pxd-type-title-item-size);
3733
+ font-weight: var(--pxd-type-title-item-weight);
3734
+ line-height: 1;
3735
+ text-align: center;
3736
+ caret-color: var(--pxd-color-border-focus);
3737
+ transition: border-color var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3738
+ }
3739
+ .pxd-code-box[data-filled] {
3740
+ border-color: var(--pxd-color-border-strong);
3741
+ border-width: var(--pxd-border-width-strong);
3742
+ }
3743
+ .pxd-code-box:focus-visible {
3744
+ outline-offset: 0;
3745
+ border-color: var(--pxd-color-border-focus);
3746
+ border-width: var(--pxd-border-width-strong);
3747
+ }
3748
+ .pxd-code-box::selection {
3749
+ background: var(--pxd-color-selection-background);
3750
+ color: var(--pxd-color-selection-foreground);
3751
+ }
3752
+ .pxd-code:has(.pxd-code-box:user-invalid) .pxd-code-box:not([data-filled]) {
3753
+ border-color: var(--pxd-color-status-danger-emphasis);
3754
+ }
3755
+
3756
+
3757
+ /* ---- overlays: added with the v0.2 components ---- */
3758
+ /* ---- Overlays: ActionMenu and Panel ---- */
3759
+
3760
+ /* ActionMenu. The menu itself reuses .pxd-menu / .pxd-menu-item (row actions). */
3761
+ .pxd-action-menu {
3762
+ min-width: 12rem;
3763
+ max-width: 20rem;
3764
+ }
3765
+ .pxd-action-menu .pxd-menu-item {
3766
+ gap: var(--pxd-space-inline-default);
3767
+ padding: 0 var(--pxd-space-inset-default);
3768
+ white-space: nowrap;
3769
+ }
3770
+ .pxd-action-menu .pxd-menu-item[data-disabled] {
3771
+ opacity: var(--pxd-opacity-state-disabled);
3772
+ cursor: not-allowed;
3773
+ }
3774
+ /* Danger is emphasised in colour, after a divider. */
3775
+ .pxd-action-menu .pxd-menu-item-danger {
3776
+ color: var(--pxd-color-status-danger-foreground);
3777
+ }
3778
+ .pxd-action-menu .pxd-menu-item-danger[data-highlighted] {
3779
+ background: var(--pxd-color-status-danger-background);
3780
+ color: var(--pxd-color-status-danger-foreground);
3781
+ }
3782
+ .pxd-menu-separator {
3783
+ height: var(--pxd-border-width-default);
3784
+ margin: var(--pxd-space-inline-tight) calc(var(--pxd-space-inline-tight) * -1);
3785
+ background: var(--pxd-color-border-default);
3786
+ }
3787
+ .pxd-action-menu[data-state="open"] {
3788
+ animation: pxd-menu-in var(--pxd-motion-duration-short) var(--pxd-motion-easing-enter);
3789
+ }
3790
+ @keyframes pxd-menu-in {
3791
+ from {
3792
+ opacity: 0;
3793
+ transform: translateY(-4px);
3794
+ }
3795
+ }
3796
+
3797
+ /* The overflow control is an icon-only button at size.target.min. */
3798
+ .pxd-action-menu-overflow {
3799
+ min-width: var(--pxd-size-target-min);
3800
+ min-height: var(--pxd-size-target-min);
3801
+ border-radius: var(--pxd-radius-control);
3802
+ }
3803
+ .pxd-action-menu-trigger:not(:disabled):hover {
3804
+ background: color-mix(in srgb, currentColor calc(var(--pxd-opacity-state-hover) * 100%), transparent);
3805
+ }
3806
+ .pxd-action-menu-trigger[data-state="open"] {
3807
+ background: var(--pxd-color-surface-subtle);
3808
+ }
3809
+ .pxd-action-menu-chevron {
3810
+ flex: none;
3811
+ transition: transform var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3812
+ }
3813
+ .pxd-action-menu-trigger[data-state="open"] .pxd-action-menu-chevron {
3814
+ transform: rotate(180deg);
3815
+ }
3816
+ .pxd-context-target {
3817
+ display: inline-flex;
3818
+ }
3819
+
3820
+ /* Split: the primary and the menu part share one outline; the menu part is at least size.target.min wide. */
3821
+ .pxd-split {
3822
+ display: inline-flex;
3823
+ align-items: stretch;
3824
+ }
3825
+ .pxd-split > .pxd-button:not(.pxd-split-menu) {
3826
+ border-start-end-radius: 0;
3827
+ border-end-end-radius: 0;
3828
+ }
3829
+ .pxd-split-menu {
3830
+ min-width: var(--pxd-size-target-min);
3831
+ padding: 0;
3832
+ margin-inline-start: calc(var(--pxd-border-width-default) * -1);
3833
+ border-start-start-radius: 0;
3834
+ border-end-start-radius: 0;
3835
+ border-inline-start: var(--pxd-border-width-default) solid color-mix(in srgb, currentColor calc(var(--pxd-opacity-state-hover) * 200%), transparent);
3836
+ }
3837
+ .pxd-split-menu.pxd-button-secondary {
3838
+ border-inline-start-color: var(--pxd-color-action-secondary-border);
3839
+ }
3840
+
3841
+ /* Panel. Modal kinds sit over a backdrop of the scrim; all panels are on the overlay surface. */
3842
+ .pxd-panel-backdrop[data-state="open"] {
3843
+ animation: pxd-fade-in var(--pxd-motion-duration-medium) var(--pxd-motion-easing-enter);
3844
+ }
3845
+ .pxd-panel-backdrop[data-state="closed"] {
3846
+ animation: pxd-fade-out var(--pxd-motion-duration-short) var(--pxd-motion-easing-exit);
3847
+ }
3848
+ .pxd-panel {
3849
+ position: fixed;
3850
+ z-index: 11;
3851
+ display: flex;
3852
+ flex-direction: column;
3853
+ background: var(--pxd-color-surface-overlay);
3854
+ color: var(--pxd-color-text-default);
3855
+ box-shadow: var(--pxd-shadow-overlay);
3856
+ outline: none;
3857
+ }
3858
+ .pxd-panel-header {
3859
+ display: flex;
3860
+ align-items: flex-start;
3861
+ gap: var(--pxd-space-inline-default);
3862
+ padding: var(--pxd-space-inset-comfortable) var(--pxd-space-inset-default) var(--pxd-space-inset-default) var(--pxd-space-inset-comfortable);
3863
+ }
3864
+ .pxd-panel-title {
3865
+ flex: 1;
3866
+ min-width: 0;
3867
+ margin: 0;
3868
+ align-self: center;
3869
+ font-family: var(--pxd-type-title-section-family);
3870
+ font-size: var(--pxd-type-title-section-size);
3871
+ font-weight: var(--pxd-type-title-section-weight);
3872
+ line-height: var(--pxd-type-title-section-line-height);
3873
+ letter-spacing: var(--pxd-type-title-section-letter-spacing);
3874
+ }
3875
+ .pxd-panel-close {
3876
+ flex: none;
3877
+ margin: calc(var(--pxd-space-inset-compact) * -1) 0;
3878
+ }
3879
+ .pxd-panel-body {
3880
+ flex: 1;
3881
+ min-height: 0;
3882
+ overflow-y: auto;
3883
+ padding: 0 var(--pxd-space-inset-comfortable) var(--pxd-space-inset-comfortable);
3884
+ }
3885
+ .pxd-panel-footer {
3886
+ padding: var(--pxd-space-inset-default) var(--pxd-space-inset-comfortable);
3887
+ border-top: var(--pxd-border-width-default) solid var(--pxd-color-border-default);
3888
+ background: var(--pxd-color-surface-overlay);
3889
+ }
3890
+ .pxd-panel-footer .pxd-action-bar {
3891
+ gap: var(--pxd-layout-action-gap, var(--pxd-space-inline-default));
3892
+ }
3893
+
3894
+ /* dialog: centred, max 560px; full width with space.inset.default on phones. */
3895
+ .pxd-panel-dialog {
3896
+ left: 50%;
3897
+ top: 50%;
3898
+ transform: translate(-50%, -50%);
3899
+ width: min(35rem, calc(100% - 2 * var(--pxd-space-inset-default)));
3900
+ max-height: calc(100% - 2 * var(--pxd-space-inset-default));
3901
+ border-radius: var(--pxd-radius-large);
3902
+ }
3903
+ .pxd-panel-dialog.pxd-panel-size-small {
3904
+ width: min(25rem, calc(100% - 2 * var(--pxd-space-inset-default)));
3905
+ }
3906
+ .pxd-panel-dialog.pxd-panel-size-large {
3907
+ width: min(50rem, calc(100% - 2 * var(--pxd-space-inset-default)));
3908
+ }
3909
+ .pxd-panel-dialog[data-state="open"] {
3910
+ animation: pxd-panel-dialog-in var(--pxd-motion-duration-medium) var(--pxd-motion-easing-enter);
3911
+ }
3912
+ .pxd-panel-dialog[data-state="closed"] {
3913
+ animation: pxd-panel-dialog-out var(--pxd-motion-duration-short) var(--pxd-motion-easing-exit);
3914
+ }
3915
+ @keyframes pxd-panel-dialog-in {
3916
+ from {
3917
+ opacity: 0;
3918
+ transform: translate(-50%, -50%) scale(0.96);
3919
+ }
3920
+ }
3921
+ @keyframes pxd-panel-dialog-out {
3922
+ to {
3923
+ opacity: 0;
3924
+ transform: translate(-50%, -50%) scale(0.96);
3925
+ }
3926
+ }
3927
+
3928
+ /* drawer: 420px from the end edge, full height. */
3929
+ .pxd-panel-drawer {
3930
+ top: 0;
3931
+ bottom: 0;
3932
+ inset-inline-end: 0;
3933
+ width: min(26.25rem, 100%);
3934
+ max-height: 100%;
3935
+ border-start-start-radius: var(--pxd-radius-large);
3936
+ border-end-start-radius: var(--pxd-radius-large);
3937
+ }
3938
+ .pxd-panel-drawer.pxd-panel-size-small {
3939
+ width: min(20rem, 100%);
3940
+ }
3941
+ .pxd-panel-drawer.pxd-panel-size-large {
3942
+ width: min(40rem, 100%);
3943
+ }
3944
+ .pxd-panel-drawer[data-state="open"] {
3945
+ animation: pxd-panel-drawer-in var(--pxd-motion-duration-medium) var(--pxd-motion-easing-enter);
3946
+ }
3947
+ .pxd-panel-drawer[data-state="closed"] {
3948
+ animation: pxd-panel-drawer-out var(--pxd-motion-duration-short) var(--pxd-motion-easing-exit);
3949
+ }
3950
+ @keyframes pxd-panel-drawer-in {
3951
+ from {
3952
+ transform: translateX(100%);
3953
+ }
3954
+ }
3955
+ @keyframes pxd-panel-drawer-out {
3956
+ to {
3957
+ transform: translateX(100%);
3958
+ }
3959
+ }
3960
+ [dir="rtl"] .pxd-panel-drawer[data-state="open"],
3961
+ .pxd-surface:dir(rtl) .pxd-panel-drawer[data-state="open"] {
3962
+ animation-name: pxd-panel-drawer-in-rtl;
3963
+ }
3964
+ [dir="rtl"] .pxd-panel-drawer[data-state="closed"],
3965
+ .pxd-surface:dir(rtl) .pxd-panel-drawer[data-state="closed"] {
3966
+ animation-name: pxd-panel-drawer-out-rtl;
3967
+ }
3968
+ @keyframes pxd-panel-drawer-in-rtl {
3969
+ from {
3970
+ transform: translateX(-100%);
3971
+ }
3972
+ }
3973
+ @keyframes pxd-panel-drawer-out-rtl {
3974
+ to {
3975
+ transform: translateX(-100%);
3976
+ }
3977
+ }
3978
+
3979
+ /* sheet: rises from the bottom with radius.large on the top corners; a grip says it drags. */
3980
+ .pxd-panel-sheet {
3981
+ left: 0;
3982
+ right: 0;
3983
+ bottom: 0;
3984
+ max-height: 85%;
3985
+ border-radius: var(--pxd-radius-large) var(--pxd-radius-large) 0 0;
3986
+ transition: transform var(--pxd-motion-duration-short) var(--pxd-motion-easing-standard);
3987
+ }
3988
+ .pxd-panel-sheet.pxd-panel-size-small {
3989
+ max-height: 50%;
3990
+ }
3991
+ .pxd-panel-sheet.pxd-panel-size-large {
3992
+ max-height: 95%;
3993
+ }
3994
+ .pxd-panel-sheet .pxd-panel-header {
3995
+ flex-wrap: wrap;
3996
+ padding-top: var(--pxd-space-inset-compact);
3997
+ touch-action: none;
3998
+ cursor: grab;
3999
+ }
4000
+ .pxd-panel-grip {
4001
+ flex: 0 0 100%;
4002
+ width: 2.5rem;
4003
+ max-width: 2.5rem;
4004
+ height: 4px;
4005
+ margin: 0 auto var(--pxd-space-stack-tight);
4006
+ border-radius: var(--pxd-radius-full);
4007
+ background: var(--pxd-color-border-strong);
4008
+ }
4009
+ .pxd-panel-sheet[data-state="open"] {
4010
+ animation: pxd-panel-sheet-in var(--pxd-motion-duration-medium) var(--pxd-motion-easing-enter);
4011
+ }
4012
+ .pxd-panel-sheet[data-state="closed"] {
4013
+ animation: pxd-panel-sheet-out var(--pxd-motion-duration-short) var(--pxd-motion-easing-exit);
4014
+ }
4015
+ @keyframes pxd-panel-sheet-in {
4016
+ from {
4017
+ transform: translateY(100%);
4018
+ }
4019
+ }
4020
+ @keyframes pxd-panel-sheet-out {
4021
+ to {
4022
+ transform: translateY(100%);
4023
+ }
4024
+ }
4025
+
4026
+ /* popover: by its opener, non-modal, with an arrow. */
4027
+ .pxd-panel-anchor {
4028
+ display: inline-block;
4029
+ width: 0;
4030
+ height: 0;
4031
+ }
4032
+ .pxd-panel-popover {
4033
+ position: relative;
4034
+ z-index: 12;
4035
+ width: max-content;
4036
+ min-width: 16rem;
4037
+ max-width: min(24rem, calc(100vw - 2 * var(--pxd-space-inset-default)));
4038
+ max-height: var(--radix-popover-content-available-height);
4039
+ border-radius: var(--pxd-radius-default);
4040
+ }
4041
+ .pxd-panel-popover.pxd-panel-size-small {
4042
+ min-width: 12rem;
4043
+ }
4044
+ .pxd-panel-popover.pxd-panel-size-large {
4045
+ max-width: min(32rem, calc(100vw - 2 * var(--pxd-space-inset-default)));
4046
+ }
4047
+ .pxd-panel-popover .pxd-panel-header {
4048
+ padding: var(--pxd-space-inset-default) var(--pxd-space-inset-compact) var(--pxd-space-inset-compact) var(--pxd-space-inset-default);
4049
+ }
4050
+ .pxd-panel-popover .pxd-panel-title {
4051
+ font-family: var(--pxd-type-title-item-family);
4052
+ font-size: var(--pxd-type-title-item-size);
4053
+ font-weight: var(--pxd-type-title-item-weight);
4054
+ line-height: var(--pxd-type-title-item-line-height);
4055
+ letter-spacing: var(--pxd-type-title-item-letter-spacing);
4056
+ }
4057
+ .pxd-panel-popover .pxd-panel-body {
4058
+ padding: 0 var(--pxd-space-inset-default) var(--pxd-space-inset-default);
4059
+ }
4060
+ .pxd-panel-popover .pxd-panel-footer {
4061
+ padding: var(--pxd-space-inset-compact) var(--pxd-space-inset-default);
4062
+ }
4063
+ .pxd-panel-arrow {
4064
+ fill: var(--pxd-color-surface-overlay);
4065
+ filter: drop-shadow(0 1px 0 var(--pxd-color-border-default));
4066
+ }
4067
+ .pxd-panel-popover[data-state="open"] {
4068
+ animation: pxd-menu-in var(--pxd-motion-duration-short) var(--pxd-motion-easing-enter);
4069
+ }
4070
+ .pxd-panel-popover[data-state="closed"] {
4071
+ animation: pxd-fade-out var(--pxd-motion-duration-short) var(--pxd-motion-easing-exit);
4072
+ }
4073
+
4074
+ @keyframes pxd-fade-in {
4075
+ from {
4076
+ opacity: 0;
4077
+ }
4078
+ }
4079
+ @keyframes pxd-fade-out {
4080
+ to {
4081
+ opacity: 0;
4082
+ }
4083
+ }
4084
+
4085
+ /* Phones: the footer is fixed to the bottom of the panel, full width. */
4086
+ @container pxd (width < 30rem) {
4087
+ .pxd-panel-dialog {
4088
+ max-height: calc(100% - 2 * var(--pxd-space-inset-default));
4089
+ }
4090
+ .pxd-panel-footer {
4091
+ position: sticky;
4092
+ bottom: 0;
4093
+ padding: var(--pxd-space-inset-compact) var(--pxd-space-inset-default) var(--pxd-space-inset-default);
4094
+ }
4095
+ .pxd-panel-footer .pxd-action-bar {
4096
+ flex-direction: column;
4097
+ align-items: stretch;
4098
+ }
4099
+ .pxd-panel-footer .pxd-button {
4100
+ width: 100%;
4101
+ }
4102
+ }
4103
+
4104
+ /* Reduced motion: every panel fades instead of moving. The base sheet zeroes animation durations
4105
+ for the whole surface; this comes later, so its !important wins and the fade is kept short. */
4106
+ @media (prefers-reduced-motion: reduce) {
4107
+ .pxd-panel[data-state="open"],
4108
+ .pxd-action-menu[data-state="open"],
4109
+ .pxd-panel-backdrop[data-state="open"] {
4110
+ animation: pxd-fade-in var(--pxd-motion-duration-short) linear;
4111
+ animation-duration: var(--pxd-motion-duration-short) !important;
4112
+ }
4113
+ .pxd-panel[data-state="closed"],
4114
+ .pxd-panel-backdrop[data-state="closed"] {
4115
+ animation: pxd-fade-out var(--pxd-motion-duration-short) linear;
4116
+ animation-duration: var(--pxd-motion-duration-short) !important;
4117
+ }
4118
+ .pxd-panel-sheet,
4119
+ .pxd-action-menu-chevron {
4120
+ transition: none;
4121
+ }
4122
+ }