anentrypoint-design 0.0.130 → 0.0.134

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/247420.css CHANGED
@@ -15,7 +15,7 @@
15
15
  --paper-3: #DFDED9;
16
16
  --ink: #131318;
17
17
  --ink-2: #25252C;
18
- --ink-3: #6A6A70;
18
+ --ink-3: #54545A; /* WCAG AAA on --paper (~7.1:1); was #6A6A70 (AA only) */
19
19
 
20
20
  /* Lore palette */
21
21
  --green: #247420;
@@ -35,6 +35,8 @@
35
35
  --flame: #FF5A1F;
36
36
  --sky: #3A6EFF;
37
37
  --warn: #E0241A;
38
+ --danger: oklch(0.55 0.18 25);
39
+ --success: var(--green-2);
38
40
  --live: var(--green);
39
41
 
40
42
  /* Semantic surfaces */
@@ -194,6 +196,7 @@
194
196
  --accent: var(--accent-bright, var(--green-2));
195
197
  --accent-fg: var(--ink);
196
198
  --accent-bright: var(--green-2);
199
+ --danger: oklch(0.68 0.19 25);
197
200
  }
198
201
 
199
202
  @media (prefers-color-scheme: dark) {
@@ -266,6 +269,35 @@
266
269
  background-size: 8px 8px;
267
270
  }
268
271
 
272
+ /* Reduced-motion guard — neutralizes every transition/animation/transform
273
+ inside the design-system scope when the user requests reduced motion.
274
+ Components remain free to opt back in with
275
+ `@media (prefers-reduced-motion: no-preference) { ... }`. */
276
+ @media (prefers-reduced-motion: reduce) {
277
+ .ds-247420 *,
278
+ .ds-247420 *::before,
279
+ .ds-247420 *::after {
280
+ animation-duration: 0.001ms !important;
281
+ animation-iteration-count: 1 !important;
282
+ transition-duration: 0.001ms !important;
283
+ scroll-behavior: auto !important;
284
+ }
285
+ }
286
+
287
+ /* Elevation tokens consumed by overlays (Tooltip, Popover, Dropdown, Dialog). */
288
+ .ds-247420 {
289
+ --shadow-1: 0 1px 2px color-mix(in oklab, var(--fg) 8%, transparent);
290
+ --shadow-2: 0 4px 12px color-mix(in oklab, var(--fg) 10%, transparent),
291
+ 0 2px 4px color-mix(in oklab, var(--fg) 6%, transparent);
292
+ --shadow-3: 0 12px 32px color-mix(in oklab, var(--fg) 14%, transparent),
293
+ 0 4px 8px color-mix(in oklab, var(--fg) 8%, transparent);
294
+ --z-dropdown: 600;
295
+ --z-popover: 700;
296
+ --z-modal: 800;
297
+ --z-toast: 900;
298
+ --z-tooltip: 1000;
299
+ }
300
+
269
301
  /* app-shell.css */
270
302
  /* ============================================================
271
303
  247420 design system — component sheet
@@ -426,11 +458,18 @@
426
458
  padding-right: env(safe-area-inset-right);
427
459
  }
428
460
 
461
+ .ds-247420 {
462
+ --app-status-h: 42px;
463
+ --app-topbar-h: 56px;
464
+ --app-crumb-h: 32px;
465
+ }
466
+
429
467
  .ds-247420 .app-topbar {
430
468
  position: sticky; top: 0; z-index: var(--z-header);
431
469
  display: grid; grid-template-columns: auto 1fr auto;
432
470
  align-items: center; gap: var(--space-4);
433
- padding: 18px var(--pad-x);
471
+ min-height: var(--app-topbar-h);
472
+ padding: 10px var(--pad-x);
434
473
  background: color-mix(in oklab, var(--bg) 88%, transparent);
435
474
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
436
475
  }
@@ -481,7 +520,8 @@
481
520
  }
482
521
 
483
522
  .ds-247420 .app-crumb {
484
- padding: 0 var(--pad-x) 14px;
523
+ min-height: var(--app-crumb-h);
524
+ padding: 6px var(--pad-x);
485
525
  display: flex; align-items: center; gap: 8px;
486
526
  font-size: var(--fs-sm); color: var(--fg-3);
487
527
  }
@@ -525,14 +565,23 @@
525
565
  }
526
566
 
527
567
  .ds-247420 .app-main {
528
- padding: var(--space-7) var(--pad-x);
568
+ padding: var(--space-5) var(--pad-x) 0;
529
569
  min-width: 0;
530
570
  }
531
571
  .ds-247420 .app-main.narrow { max-width: 760px; margin: 0 auto; }
532
572
 
573
+ @media (min-width: 1400px) {
574
+ .ds-247420 .app { max-width: 1400px; margin-left: auto; margin-right: auto; }
575
+ .ds-247420 .app-main .chat,
576
+ .ds-247420 .app-main > .chat-area,
577
+ .ds-247420 .app-main > .main-content { max-width: none; margin: 0; width: 100%; }
578
+ .ds-247420 .app-status { max-width: 1400px; margin-left: auto; margin-right: auto; left: 0; right: 0; }
579
+ }
580
+
533
581
  .ds-247420 .app-status {
534
582
  display: flex; align-items: center; gap: var(--space-3);
535
- padding: 14px var(--pad-x);
583
+ min-height: var(--app-status-h);
584
+ padding: 10px var(--pad-x);
536
585
  font-family: var(--ff-mono); font-size: var(--fs-xs);
537
586
  color: var(--fg-3);
538
587
  }
@@ -838,24 +887,9 @@
838
887
  Mobile Portrait Breakpoint (480px and below)
839
888
  ────────────────────────────────────────────────────────────────────── */
840
889
  @media (max-width: 480px) {
841
- /* App Layout */
890
+ /* App Layout — drawer handled in 900px block below */
842
891
  .ds-247420 .app-body { grid-template-columns: 1fr !important; }
843
892
  .ds-247420 .app-body.no-side { grid-template-columns: 1fr; }
844
- .ds-247420 .app-side-shell { border-right: 0; border-bottom: 1px solid var(--rule); }
845
- .ds-247420 .app-side {
846
- padding: var(--space-3) var(--space-2);
847
- font-size: var(--fs-xs);
848
- flex-direction: row; flex-wrap: wrap; gap: var(--space-2);
849
- }
850
- .ds-247420 .app-side .group {
851
- width: 100%; font-size: var(--fs-micro); margin-bottom: 4px;
852
- }
853
- .ds-247420 .app-side a {
854
- flex: 1; min-width: 100px; padding: 12px 10px; gap: 6px;
855
- grid-template-columns: 14px 1fr;
856
- min-height: 44px;
857
- }
858
- .ds-247420 .app-side a .glyph { font-size: 12px; }
859
893
 
860
894
  /* Topbar Navigation */
861
895
  .ds-247420 .app-topbar {
@@ -983,13 +1017,7 @@
983
1017
  Tablet Landscape Breakpoint (768px to 1024px)
984
1018
  ────────────────────────────────────────────────────────────────────── */
985
1019
  @media (min-width: 481px) and (max-width: 1024px) {
986
- /* App Layout */
987
- .ds-247420 .app-body { grid-template-columns: 200px minmax(0, 1fr); }
988
- .ds-247420 .app-side {
989
- padding: var(--space-4) var(--space-2);
990
- font-size: var(--fs-xs);
991
- flex-direction: column; gap: var(--space-3);
992
- }
1020
+ /* App Layout — side handled by 900px drawer block; restore for 901-1024 */
993
1021
  .ds-247420 .app-side a {
994
1022
  padding: 12px 12px; gap: 8px;
995
1023
  grid-template-columns: 16px 1fr auto;
@@ -1183,14 +1211,15 @@
1183
1211
  .ds-247420 .chat {
1184
1212
  display: flex; flex-direction: column;
1185
1213
  flex: 1; min-height: 0; gap: var(--space-3);
1214
+ padding-bottom: calc(var(--app-status-h, 42px) + var(--space-2));
1186
1215
  }
1187
1216
  .ds-247420 .chat-head {
1188
1217
  display: flex; align-items: baseline; gap: 8px;
1189
- padding: 0 0 var(--space-3);
1218
+ padding: var(--space-3) 0 var(--space-2);
1190
1219
  font-family: var(--ff-mono); font-size: var(--fs-xs);
1191
1220
  color: var(--fg-3); text-transform: lowercase; letter-spacing: 0.02em;
1192
1221
  border-bottom: 1px solid color-mix(in oklab, var(--fg) 8%, transparent);
1193
- margin-bottom: var(--space-3);
1222
+ margin-bottom: var(--space-2);
1194
1223
  }
1195
1224
  .ds-247420 .chat-head .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); flex-shrink: 0; }
1196
1225
  .ds-247420 .chat-head > span:nth-child(2) {
@@ -1222,7 +1251,7 @@
1222
1251
  pointer-events: none;
1223
1252
  }
1224
1253
 
1225
- .ds-247420 .chat-msg { display: flex; gap: 12px; align-items: flex-start; padding: 2px 0; position: relative; }
1254
+ .ds-247420 .chat-msg { display: flex; gap: 12px; align-items: flex-start; padding: 2px 0; position: relative; min-width: 0; }
1226
1255
  .ds-247420 .chat-msg.you { flex-direction: row-reverse; }
1227
1256
  .ds-247420 .chat-msg.you .chat-stack { align-items: flex-end; }
1228
1257
  .ds-247420 .chat-msg:hover { background: color-mix(in oklab, var(--fg) 1%, transparent); padding: 2px 0; margin: 0; border-radius: 8px; transition: background var(--dur-base) var(--ease); }
@@ -1249,6 +1278,7 @@
1249
1278
  .ds-247420 .chat-stack {
1250
1279
  display: flex; flex-direction: column; gap: 4px;
1251
1280
  max-width: min(70%, 56ch); min-width: 0;
1281
+ flex: 0 1 auto; overflow: hidden;
1252
1282
  }
1253
1283
 
1254
1284
  .ds-247420 .chat-bubble {
@@ -1256,7 +1286,8 @@
1256
1286
  border-radius: 14px; line-height: 1.55;
1257
1287
  word-wrap: break-word; overflow-wrap: anywhere;
1258
1288
  font-size: var(--fs-sm);
1259
- max-width: clamp(200px, 80vw, 480px);
1289
+ max-width: 100%;
1290
+ min-width: 0;
1260
1291
  transition: transform 0.12s ease, box-shadow 0.12s ease;
1261
1292
  }
1262
1293
  .ds-247420 .chat-msg:hover .chat-bubble { transform: translateY(-1px); box-shadow: 0 2px 8px color-mix(in oklab, var(--fg) 6%, transparent); transition: transform var(--dur-base) var(--ease), box-shadow var(--dur-base) var(--ease); }
@@ -1314,7 +1345,21 @@
1314
1345
  padding: 0; background: var(--bg);
1315
1346
  color: var(--fg);
1316
1347
  border: 1px solid color-mix(in oklab, var(--fg) 12%, transparent);
1317
- overflow: hidden; max-width: min(90%, 72ch);
1348
+ overflow: hidden; max-width: 100%; min-width: 0;
1349
+ }
1350
+ .ds-247420 .chat-bubble.chat-code pre,
1351
+ .ds-247420 .chat-bubble pre,
1352
+ .ds-247420 .chat-msg pre {
1353
+ max-width: 100%;
1354
+ overflow-x: auto;
1355
+ scrollbar-width: thin;
1356
+ scrollbar-color: var(--bg-3) transparent;
1357
+ }
1358
+ .ds-247420 .chat-bubble pre code,
1359
+ .ds-247420 .chat-msg pre code {
1360
+ display: block;
1361
+ white-space: pre;
1362
+ min-width: 0;
1318
1363
  }
1319
1364
  .ds-247420 .chat-code-head {
1320
1365
  display: flex; align-items: center; gap: 10px;
@@ -2141,6 +2186,81 @@
2141
2186
  }
2142
2187
  .ds-247420 .ds-alert-dismiss:hover { color: var(--fg); }
2143
2188
 
2189
+ /* ============================================================
2190
+ Responsive Perfection — Drawer rail, ultrawide cap, mobile compact
2191
+ ============================================================ */
2192
+
2193
+ /* Tablet + Mobile: side rail becomes off-canvas drawer (≤900px) */
2194
+ @media (max-width: 900px) {
2195
+ .ds-247420 .app-body,
2196
+ .ds-247420 .app-body.no-side { grid-template-columns: 1fr !important; }
2197
+ .ds-247420 .app-side-shell {
2198
+ position: fixed;
2199
+ left: 0; top: var(--app-topbar-h);
2200
+ height: calc(100vh - var(--app-topbar-h) - var(--app-status-h));
2201
+ width: 280px; max-width: 80vw;
2202
+ transform: translateX(-100%);
2203
+ transition: transform var(--dur-base, 240ms) var(--ease, ease);
2204
+ z-index: 50;
2205
+ background: var(--bg);
2206
+ border-right: 1px solid color-mix(in oklab, var(--fg) 8%, transparent);
2207
+ overflow-y: auto;
2208
+ }
2209
+ .ds-247420 .app-side-shell.open,
2210
+ .ds-247420 .app-side.open,
2211
+ .ds-247420 .app-body.side-open .app-side-shell { transform: translateX(0); }
2212
+ .ds-247420 .app-side {
2213
+ flex-direction: column !important;
2214
+ flex-wrap: nowrap !important;
2215
+ gap: var(--space-2);
2216
+ padding: var(--space-3);
2217
+ font-size: var(--fs-sm);
2218
+ }
2219
+ .ds-247420 .app-side a {
2220
+ flex: 0 0 auto; min-width: 0;
2221
+ grid-template-columns: 18px 1fr auto;
2222
+ padding: 10px 12px;
2223
+ }
2224
+ .ds-247420 .app-side .group { width: 100%; }
2225
+ .ds-247420 .app-crumb { display: none; }
2226
+ .ds-247420 .chat-head { padding: var(--space-2) var(--space-3) var(--space-2); margin-bottom: var(--space-2); }
2227
+ .ds-247420 .app-main { padding-left: var(--space-3); padding-right: var(--space-3); }
2228
+ }
2229
+
2230
+ /* Drawer scrim */
2231
+ .ds-247420 .app-side-scrim {
2232
+ display: none;
2233
+ position: fixed; inset: 0;
2234
+ background: color-mix(in oklab, var(--bg) 60%, transparent);
2235
+ z-index: 49;
2236
+ }
2237
+ @media (max-width: 900px) {
2238
+ .ds-247420 .app-body.side-open ~ .app-side-scrim,
2239
+ .ds-247420 .app-side-shell.open ~ .app-side-scrim { display: block; }
2240
+ }
2241
+
2242
+ /* Mobile (≤480) status bar compact; hide tail item */
2243
+ @media (max-width: 480px) {
2244
+ .ds-247420 .app-status {
2245
+ font-size: var(--fs-micro);
2246
+ padding: 4px var(--space-2);
2247
+ gap: var(--space-2);
2248
+ }
2249
+ .ds-247420 .app-status > :last-child:not(:only-child) { display: none; }
2250
+ }
2251
+
2252
+ /* Tiny phone (≤360) topbar compact */
2253
+ @media (max-width: 360px) {
2254
+ .ds-247420 .app-topbar {
2255
+ padding: 8px var(--space-2);
2256
+ font-size: var(--fs-xs);
2257
+ gap: var(--space-2);
2258
+ }
2259
+ .ds-247420 .app-topbar nav,
2260
+ .ds-247420 .app-topbar > :last-child { display: none; }
2261
+ .ds-247420 .brand { font-size: var(--fs-tiny); }
2262
+ }
2263
+
2144
2264
  /* community.css */
2145
2265
  /* ============================================================
2146
2266
  247420 design system — community surface (Discord-style chat)
@@ -3614,3 +3734,252 @@
3614
3734
  outline-offset: 2px;
3615
3735
  border-radius: var(--r-1);
3616
3736
  }
3737
+
3738
+ /* ---------------------------------------------------------------
3739
+ Form primitives — Checkbox, Radio, RadioGroup, Toggle, Field
3740
+ --------------------------------------------------------------- */
3741
+ .ds-247420 .ds-check-row,
3742
+ .ds-247420 .ds-radio-row,
3743
+ .ds-247420 .ds-toggle-row {
3744
+ display: inline-flex; align-items: center; gap: var(--space-2, 8px);
3745
+ min-height: 44px;
3746
+ padding: var(--space-1, 4px) var(--space-2, 8px);
3747
+ cursor: pointer;
3748
+ color: var(--fg);
3749
+ font: inherit;
3750
+ }
3751
+ .ds-247420 .ds-check-row:has(input:disabled),
3752
+ .ds-247420 .ds-radio-row:has(input:disabled),
3753
+ .ds-247420 .ds-toggle-row:has(button:disabled) { opacity: 0.5; cursor: not-allowed; }
3754
+
3755
+ .ds-247420 .ds-check, .ds-247420 .ds-radio {
3756
+ width: 18px; height: 18px;
3757
+ accent-color: var(--accent, var(--fg));
3758
+ flex-shrink: 0;
3759
+ cursor: inherit;
3760
+ }
3761
+ .ds-247420 .ds-check:focus-visible, .ds-247420 .ds-radio:focus-visible {
3762
+ outline: 2px solid var(--accent);
3763
+ outline-offset: 2px;
3764
+ }
3765
+
3766
+ .ds-247420 .ds-check-label, .ds-247420 .ds-radio-label, .ds-247420 .ds-toggle-label {
3767
+ color: var(--fg);
3768
+ font-size: var(--fs-sm, 14px);
3769
+ }
3770
+
3771
+ .ds-247420 .ds-radio-group {
3772
+ border: 0; padding: 0; margin: 0;
3773
+ display: flex; flex-direction: column; gap: var(--space-1, 4px);
3774
+ }
3775
+ .ds-247420 .ds-radio-group.horiz { flex-direction: row; flex-wrap: wrap; gap: var(--space-3, 16px); }
3776
+ .ds-247420 .ds-radio-group > legend { padding: 0 0 var(--space-1, 4px); }
3777
+
3778
+ .ds-247420 .ds-toggle {
3779
+ appearance: none; border: 0;
3780
+ width: 44px; height: 24px;
3781
+ border-radius: var(--r-pill, 999px);
3782
+ background: var(--panel-2, var(--bg-2));
3783
+ border: 1px solid var(--rule);
3784
+ position: relative;
3785
+ cursor: pointer;
3786
+ padding: 0;
3787
+ flex-shrink: 0;
3788
+ }
3789
+ .ds-247420 .ds-toggle-knob {
3790
+ position: absolute;
3791
+ top: 1px; left: 1px;
3792
+ width: 20px; height: 20px;
3793
+ border-radius: 50%;
3794
+ background: var(--fg);
3795
+ transform: translateX(0);
3796
+ }
3797
+ .ds-247420 .ds-toggle[aria-checked="true"] {
3798
+ background: var(--accent);
3799
+ border-color: var(--accent);
3800
+ }
3801
+ .ds-247420 .ds-toggle[aria-checked="true"] .ds-toggle-knob {
3802
+ background: var(--accent-fg);
3803
+ transform: translateX(20px);
3804
+ }
3805
+ .ds-247420 .ds-toggle:focus-visible {
3806
+ outline: 2px solid var(--accent);
3807
+ outline-offset: 2px;
3808
+ }
3809
+ .ds-247420 .ds-toggle:disabled { cursor: not-allowed; }
3810
+
3811
+ @media (prefers-reduced-motion: no-preference) {
3812
+ .ds-247420 .ds-toggle { transition: background var(--dur-base, 160ms) var(--ease), border-color var(--dur-base, 160ms) var(--ease); }
3813
+ .ds-247420 .ds-toggle-knob { transition: transform var(--dur-base, 160ms) var(--ease), background var(--dur-base, 160ms) var(--ease); }
3814
+ }
3815
+
3816
+ .ds-247420 .ds-field-wrap {
3817
+ display: flex; flex-direction: column; gap: var(--space-1, 4px);
3818
+ margin-bottom: var(--space-2, 8px);
3819
+ }
3820
+ .ds-247420 .ds-field-label {
3821
+ color: var(--fg-2, var(--fg));
3822
+ font-size: var(--fs-sm, 14px);
3823
+ font-weight: 500;
3824
+ }
3825
+ .ds-247420 .ds-field-required {
3826
+ color: var(--danger, oklch(0.55 0.18 25));
3827
+ font-weight: 700;
3828
+ margin-left: 2px;
3829
+ }
3830
+ .ds-247420 .ds-field-hint {
3831
+ color: var(--fg-3, var(--fg-2));
3832
+ font-size: var(--fs-tiny, 12px);
3833
+ }
3834
+ .ds-247420 .ds-field-error {
3835
+ color: var(--danger, oklch(0.55 0.18 25));
3836
+ font-size: var(--fs-tiny, 12px);
3837
+ font-weight: 500;
3838
+ }
3839
+ .ds-247420 .ds-field-wrap [aria-invalid="true"] {
3840
+ border-color: var(--danger, oklch(0.55 0.18 25)) !important;
3841
+ }
3842
+
3843
+ .ds-247420 .sr-only {
3844
+ position: absolute; width: 1px; height: 1px;
3845
+ padding: 0; margin: -1px; overflow: hidden;
3846
+ clip: rect(0,0,0,0); white-space: nowrap; border: 0;
3847
+ }
3848
+
3849
+ @media (prefers-reduced-motion: reduce) {
3850
+ .ds-247420 .ds-toggle, .ds-247420 .ds-toggle-knob { transition: none !important; }
3851
+ }
3852
+
3853
+ /* ---------------------------------------------------------------
3854
+ Tooltip
3855
+ --------------------------------------------------------------- */
3856
+ .ds-247420 .ds-tooltip {
3857
+ position: fixed;
3858
+ left: 0; top: 0;
3859
+ z-index: 9700;
3860
+ background: var(--panel-1, var(--panel-bg));
3861
+ color: var(--panel-text, var(--fg-text));
3862
+ border: 1px solid var(--rule);
3863
+ border-radius: var(--r-1, 6px);
3864
+ padding: 6px 10px;
3865
+ font-size: 12px;
3866
+ line-height: 1.4;
3867
+ max-width: 280px;
3868
+ box-shadow: 0 6px 18px rgba(0,0,0,0.22);
3869
+ pointer-events: none;
3870
+ }
3871
+ .ds-247420 .ds-tooltip.kind-danger { border-color: var(--danger, #c33); color: var(--danger, #c33); }
3872
+ @media (prefers-reduced-motion: no-preference) {
3873
+ .ds-247420 .ds-tooltip { transition: opacity 120ms ease; }
3874
+ }
3875
+
3876
+ /* ---------------------------------------------------------------
3877
+ Popover (shared surface for Popover + Dropdown)
3878
+ --------------------------------------------------------------- */
3879
+ .ds-247420 .ds-popover {
3880
+ position: fixed;
3881
+ left: 0; top: 0;
3882
+ z-index: 9600;
3883
+ background: var(--panel-1, var(--panel-bg));
3884
+ color: var(--panel-text, var(--fg-text));
3885
+ border: 1px solid var(--rule);
3886
+ border-radius: var(--r-2, 8px);
3887
+ box-shadow: 0 8px 28px rgba(0,0,0,0.22);
3888
+ padding: 0;
3889
+ outline: none;
3890
+ min-width: 160px;
3891
+ }
3892
+ @media (prefers-reduced-motion: no-preference) {
3893
+ .ds-247420 .ds-popover { transition: opacity 140ms ease, transform 140ms ease; }
3894
+ }
3895
+
3896
+ /* ---------------------------------------------------------------
3897
+ Dropdown
3898
+ --------------------------------------------------------------- */
3899
+ .ds-247420 .ds-dropdown-menu { padding: 4px; }
3900
+ .ds-247420 .ds-dropdown-list { display: flex; flex-direction: column; }
3901
+ .ds-247420 .ds-dropdown-item {
3902
+ display: flex; align-items: center; gap: 8px;
3903
+ min-height: 44px;
3904
+ padding: 8px 12px;
3905
+ background: transparent; border: 0;
3906
+ color: inherit; font: inherit; text-align: left;
3907
+ border-radius: var(--r-1, 4px);
3908
+ cursor: pointer;
3909
+ }
3910
+ .ds-247420 .ds-dropdown-item:hover,
3911
+ .ds-247420 .ds-dropdown-item:focus-visible {
3912
+ background: var(--panel-2, var(--rule));
3913
+ outline: none;
3914
+ }
3915
+ .ds-247420 .ds-dropdown-item:focus-visible {
3916
+ outline: 2px solid var(--accent);
3917
+ outline-offset: -2px;
3918
+ }
3919
+ .ds-247420 .ds-dropdown-item[aria-disabled="true"] {
3920
+ opacity: 0.5;
3921
+ pointer-events: none;
3922
+ cursor: not-allowed;
3923
+ }
3924
+ .ds-247420 .ds-dropdown-item.is-danger { color: var(--danger, #c33); }
3925
+ .ds-247420 .ds-dropdown-glyph { width: 16px; display: inline-flex; justify-content: center; flex-shrink: 0; }
3926
+ .ds-247420 .ds-dropdown-label { flex: 1; min-width: 0; }
3927
+ .ds-247420 .ds-dropdown-separator { height: 1px; background: var(--rule); margin: 4px 6px; }
3928
+ .ds-247420 .ds-dropdown-trigger {
3929
+ appearance: none;
3930
+ background: var(--panel-2, transparent);
3931
+ color: inherit; font: inherit;
3932
+ border: 1px solid var(--rule);
3933
+ border-radius: var(--r-1, 6px);
3934
+ padding: 6px 12px;
3935
+ cursor: pointer;
3936
+ min-height: 32px;
3937
+ }
3938
+ @media (pointer: coarse) {
3939
+ .ds-247420 .ds-dropdown-trigger { min-height: 44px; }
3940
+ }
3941
+
3942
+ /* Interaction primitives — drag/drop + keyboard shortcuts */
3943
+ .ds-247420 .ds-reorderable { display: flex; gap: var(--space-1, 4px); }
3944
+ .ds-247420 .ds-reorderable-vertical { flex-direction: column; }
3945
+ .ds-247420 .ds-reorderable-horizontal { flex-direction: row; }
3946
+ .ds-247420 .ds-reorder-item {
3947
+ display: flex; align-items: center; gap: var(--space-2, 8px);
3948
+ padding: var(--space-1, 4px); border-radius: var(--radius-sm, 4px);
3949
+ background: var(--panel-1); color: var(--panel-text);
3950
+ transition: transform var(--dur-snap, 120ms) var(--ease, ease), opacity var(--dur-snap, 120ms) var(--ease, ease);
3951
+ }
3952
+ .ds-247420 .ds-reorder-handle {
3953
+ min-width: 44px; min-height: 44px;
3954
+ display: inline-flex; align-items: center; justify-content: center;
3955
+ appearance: none; background: transparent; color: var(--panel-text-2, var(--panel-text));
3956
+ border: 0; border-radius: var(--radius-sm, 4px);
3957
+ cursor: grab; font: 14px/1 var(--ff-mono, monospace); letter-spacing: -2px;
3958
+ touch-action: none; user-select: none;
3959
+ }
3960
+ .ds-247420 .ds-reorder-handle:focus-visible { outline: 2px solid var(--focus-ring, var(--accent)); outline-offset: 2px; }
3961
+ .ds-247420 .ds-reorder-handle:active { cursor: grabbing; }
3962
+ .ds-247420[data-dragging="true"] { opacity: 0.6; cursor: grabbing; transform: scale(0.98); }
3963
+ .ds-247420[data-drop-target-active="true"] {
3964
+ outline: 2px dashed var(--focus-ring, var(--accent)); outline-offset: 2px;
3965
+ background: color-mix(in srgb, var(--accent) 8%, var(--panel-1));
3966
+ }
3967
+ .ds-247420 .ds-reorder-insertion-line {
3968
+ height: 2px; background: var(--focus-ring, var(--accent));
3969
+ border-radius: 1px; animation: ds-insertion-in var(--dur-snap, 120ms) var(--ease, ease);
3970
+ }
3971
+ @keyframes ds-insertion-in { from { transform: scaleX(0); opacity: 0; } to { transform: scaleX(1); opacity: 1; } }
3972
+ @media (prefers-reduced-motion: reduce) {
3973
+ .ds-247420 .ds-reorder-item, .ds-247420[data-dragging="true"] { transition: none; transform: none; }
3974
+ .ds-247420 .ds-reorder-insertion-line { animation: none; }
3975
+ }
3976
+ .ds-247420 .ds-kbd {
3977
+ display: inline-block; font: 0.85em/1 var(--ff-mono, monospace);
3978
+ padding: var(--space-1, 4px) calc(var(--space-1, 4px) * 1.5);
3979
+ border: 1px solid var(--rule, var(--panel-text-3));
3980
+ border-radius: var(--radius-sm, 4px);
3981
+ background: var(--panel-2, var(--panel-1)); color: var(--panel-text);
3982
+ }
3983
+ .ds-247420 .ds-kbd-group { margin: var(--space-3, 12px) 0; }
3984
+ .ds-247420 .ds-kbd-group h3 { font-size: 0.9em; opacity: 0.7; margin: 0 0 var(--space-1, 4px); }
3985
+ .ds-247420 .ds-kbd-group ul { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: var(--space-1, 4px); }