nuvox 0.1.4 → 0.1.6

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.
@@ -238,6 +238,32 @@
238
238
  color: var(--color-textMuted, #6b7280);
239
239
  flex-shrink: 0;
240
240
  }
241
+ .nx-input__toggle {
242
+ display: inline-flex;
243
+ align-items: center;
244
+ justify-content: center;
245
+ flex-shrink: 0;
246
+ padding: 2px;
247
+ border: none;
248
+ border-radius: var(--radius-sm, 4px);
249
+ background: transparent;
250
+ color: var(--color-textMuted, #6b7280);
251
+ cursor: pointer;
252
+ transition: color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
253
+ }
254
+ .nx-input__toggle:hover {
255
+ color: var(--color-text, #111827);
256
+ background: var(--color-neutral-100, #f3f4f6);
257
+ }
258
+ .nx-input__toggle:focus-visible {
259
+ outline: 2px solid var(--color-brand-400, #818cf8);
260
+ outline-offset: 1px;
261
+ }
262
+ .nx-input__toggle:disabled {
263
+ cursor: not-allowed;
264
+ opacity: 0.5;
265
+ background: transparent;
266
+ }
241
267
 
242
268
  /* src/react/Textarea.css */
243
269
  .nx-textarea {
@@ -2062,6 +2088,112 @@
2062
2088
  z-index: 2;
2063
2089
  }
2064
2090
 
2091
+ /* src/react/ScrollArea.css */
2092
+ .nx-scroll-area {
2093
+ position: relative;
2094
+ overflow: hidden;
2095
+ --nx-scrollbar-thickness: var(--spacing-sm, 10px);
2096
+ }
2097
+ .nx-scroll-area__viewport {
2098
+ width: 100%;
2099
+ height: 100%;
2100
+ scrollbar-width: none;
2101
+ -ms-overflow-style: none;
2102
+ overscroll-behavior: contain;
2103
+ }
2104
+ .nx-scroll-area__viewport::-webkit-scrollbar {
2105
+ width: 0;
2106
+ height: 0;
2107
+ display: none;
2108
+ }
2109
+ .nx-scroll-area__viewport--vertical {
2110
+ overflow-y: auto;
2111
+ overflow-x: hidden;
2112
+ }
2113
+ .nx-scroll-area__viewport--horizontal {
2114
+ overflow-x: auto;
2115
+ overflow-y: hidden;
2116
+ }
2117
+ .nx-scroll-area__viewport--both {
2118
+ overflow: auto;
2119
+ }
2120
+ .nx-scroll-area__content {
2121
+ min-width: 100%;
2122
+ width: fit-content;
2123
+ color: var(--color-text, #111827);
2124
+ }
2125
+ .nx-scroll-area__viewport--vertical .nx-scroll-area__content {
2126
+ width: 100%;
2127
+ }
2128
+ .nx-scroll-area__track {
2129
+ position: absolute;
2130
+ z-index: 2;
2131
+ opacity: 0;
2132
+ pointer-events: none;
2133
+ transition: opacity var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
2134
+ }
2135
+ .nx-scroll-area__track--vertical {
2136
+ top: 0;
2137
+ right: 0;
2138
+ bottom: 0;
2139
+ width: var(--nx-scrollbar-thickness);
2140
+ padding: 2px;
2141
+ }
2142
+ .nx-scroll-area__track--horizontal {
2143
+ left: 0;
2144
+ right: 0;
2145
+ bottom: 0;
2146
+ height: var(--nx-scrollbar-thickness);
2147
+ padding: 2px;
2148
+ }
2149
+ .nx-scroll-area--both .nx-scroll-area__track--vertical {
2150
+ bottom: var(--nx-scrollbar-thickness);
2151
+ }
2152
+ .nx-scroll-area--both .nx-scroll-area__track--horizontal {
2153
+ right: var(--nx-scrollbar-thickness);
2154
+ }
2155
+ .nx-scroll-area__thumb {
2156
+ position: absolute;
2157
+ background: var(--nx-scroll-area-thumb-color, var(--color-textMuted, #6b7280));
2158
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
2159
+ box-shadow: var(--shadow-xs, 0 1px 2px rgba(0, 0, 0, 0.05));
2160
+ opacity: 0.55;
2161
+ border-radius: var(--radius-full, 9999px);
2162
+ cursor: pointer;
2163
+ transition: opacity var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
2164
+ }
2165
+ .nx-scroll-area__track--vertical .nx-scroll-area__thumb {
2166
+ left: 0;
2167
+ right: 0;
2168
+ }
2169
+ .nx-scroll-area__track--horizontal .nx-scroll-area__thumb {
2170
+ top: 0;
2171
+ bottom: 0;
2172
+ }
2173
+ .nx-scroll-area__thumb:hover,
2174
+ .nx-scroll-area__thumb.is-dragging {
2175
+ opacity: 1;
2176
+ }
2177
+ .nx-scroll-area__corner {
2178
+ position: absolute;
2179
+ right: 0;
2180
+ bottom: 0;
2181
+ width: var(--nx-scrollbar-thickness);
2182
+ height: var(--nx-scrollbar-thickness);
2183
+ z-index: 2;
2184
+ background: transparent;
2185
+ }
2186
+ .nx-scroll-area--scrollbar-always .nx-scroll-area__track {
2187
+ opacity: 1;
2188
+ pointer-events: auto;
2189
+ }
2190
+ .nx-scroll-area--scrollbar-hover:hover .nx-scroll-area__track,
2191
+ .nx-scroll-area--scrollbar-hover.nx-scroll-area--active .nx-scroll-area__track,
2192
+ .nx-scroll-area--scrollbar-auto.nx-scroll-area--active .nx-scroll-area__track {
2193
+ opacity: 1;
2194
+ pointer-events: auto;
2195
+ }
2196
+
2065
2197
  /* src/react/Alert.css */
2066
2198
  .nx-alert {
2067
2199
  display: flex;
@@ -2143,7 +2275,7 @@
2143
2275
  .nx-modal-backdrop {
2144
2276
  position: fixed;
2145
2277
  inset: 0;
2146
- z-index: 1000;
2278
+ z-index: var(--elevation-modal, 1000);
2147
2279
  display: flex;
2148
2280
  align-items: center;
2149
2281
  justify-content: center;
@@ -2266,7 +2398,7 @@
2266
2398
 
2267
2399
  /* src/react/Tooltip.css */
2268
2400
  .nx-tooltip {
2269
- z-index: 1100;
2401
+ z-index: var(--elevation-tooltip, 1100);
2270
2402
  max-width: 240px;
2271
2403
  padding: 6px 10px;
2272
2404
  border-radius: var(--radius-sm, 6px);
@@ -2323,7 +2455,7 @@
2323
2455
  /* src/react/Toast.css */
2324
2456
  .nx-toast-container {
2325
2457
  position: fixed;
2326
- z-index: 1200;
2458
+ z-index: var(--elevation-toast, 1200);
2327
2459
  display: flex;
2328
2460
  flex-direction: column;
2329
2461
  gap: var(--spacing-sm, 8px);
@@ -2593,6 +2725,12 @@
2593
2725
  opacity: 0.5;
2594
2726
  cursor: not-allowed;
2595
2727
  }
2728
+ .nx-tabs__chevron {
2729
+ transition: transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
2730
+ }
2731
+ .nx-tabs__tab--menu[aria-expanded=true] .nx-tabs__chevron {
2732
+ transform: rotate(180deg);
2733
+ }
2596
2734
  .nx-tabs--xs .nx-tabs__tab {
2597
2735
  padding: 4px 10px;
2598
2736
  font-size: var(--typography-sizeXs, 12px);
@@ -2798,7 +2936,7 @@
2798
2936
 
2799
2937
  /* src/react/DropdownMenu.css */
2800
2938
  .nx-dropdown__menu {
2801
- z-index: 1050;
2939
+ z-index: var(--elevation-dropdown, 1050);
2802
2940
  box-sizing: border-box;
2803
2941
  min-inline-size: 10rem;
2804
2942
  max-inline-size: min(20rem, calc(100vw - 16px));
@@ -3053,7 +3191,7 @@
3053
3191
  border: 1px solid var(--color-neutral-200, #e5e5e5);
3054
3192
  border-radius: var(--radius-md, 8px);
3055
3193
  box-shadow: var(--shadow-lg, 0 10px 15px rgba(0, 0, 0, 0.1));
3056
- z-index: 1050;
3194
+ z-index: var(--elevation-dropdown, 1050);
3057
3195
  animation: nx-select-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
3058
3196
  }
3059
3197
  .nx-select__listbox--xs {
@@ -3133,6 +3271,231 @@
3133
3271
  }
3134
3272
  }
3135
3273
 
3274
+ /* src/react/StepWizard.css */
3275
+ .nx-stepwizard {
3276
+ display: flex;
3277
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
3278
+ color: var(--color-text, #111827);
3279
+ }
3280
+ .nx-stepwizard--horizontal {
3281
+ flex-direction: column;
3282
+ gap: var(--spacing-md, 16px);
3283
+ }
3284
+ .nx-stepwizard--vertical {
3285
+ flex-direction: row;
3286
+ gap: var(--spacing-lg, 24px);
3287
+ }
3288
+ .nx-stepwizard__list {
3289
+ display: flex;
3290
+ align-items: stretch;
3291
+ }
3292
+ .nx-stepwizard--horizontal .nx-stepwizard__list {
3293
+ flex-direction: row;
3294
+ align-items: flex-start;
3295
+ }
3296
+ .nx-stepwizard--vertical .nx-stepwizard__list {
3297
+ flex-direction: column;
3298
+ flex: 0 0 auto;
3299
+ }
3300
+ .nx-stepwizard__step {
3301
+ appearance: none;
3302
+ background: transparent;
3303
+ border: none;
3304
+ margin: 0;
3305
+ padding: 0;
3306
+ cursor: pointer;
3307
+ font-family: inherit;
3308
+ text-align: start;
3309
+ display: inline-flex;
3310
+ align-items: center;
3311
+ gap: var(--spacing-sm, 8px);
3312
+ color: var(--color-textMuted, #6b7280);
3313
+ transition: color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
3314
+ }
3315
+ .nx-stepwizard--vertical .nx-stepwizard__step {
3316
+ align-items: flex-start;
3317
+ }
3318
+ .nx-stepwizard__step:focus-visible {
3319
+ outline: 2px solid var(--color-brand-500, #6366f1);
3320
+ outline-offset: 2px;
3321
+ border-radius: var(--radius-sm, 6px);
3322
+ }
3323
+ .nx-stepwizard__step--disabled,
3324
+ .nx-stepwizard__step:disabled {
3325
+ opacity: 0.45;
3326
+ cursor: not-allowed;
3327
+ }
3328
+ .nx-stepwizard__step--upcoming:not(.nx-stepwizard__step--clickable) {
3329
+ cursor: default;
3330
+ }
3331
+ .nx-stepwizard__step--current {
3332
+ color: var(--color-text, #111827);
3333
+ }
3334
+ .nx-stepwizard__step--current .nx-stepwizard__label {
3335
+ font-weight: var(--typography-weightSemibold, 600);
3336
+ }
3337
+ .nx-stepwizard__step--complete {
3338
+ color: var(--color-text, #111827);
3339
+ }
3340
+ .nx-stepwizard__indicator {
3341
+ flex: none;
3342
+ display: inline-flex;
3343
+ align-items: center;
3344
+ justify-content: center;
3345
+ border-radius: var(--radius-full, 999px);
3346
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
3347
+ background: var(--color-surface, #ffffff);
3348
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
3349
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
3350
+ color: var(--color-textMuted, #6b7280);
3351
+ font-weight: var(--typography-weightMedium, 500);
3352
+ line-height: 1;
3353
+ transition:
3354
+ background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
3355
+ border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
3356
+ color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
3357
+ box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
3358
+ transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
3359
+ }
3360
+ .nx-stepwizard__step--current .nx-stepwizard__indicator {
3361
+ border-color: var(--color-brand-500, #6366f1);
3362
+ color: var(--color-brand-600, #4f46e5);
3363
+ box-shadow: 0 0 0 3px var(--color-brand-50, #f0f4ff), var(--shadow-sm, none);
3364
+ }
3365
+ .nx-stepwizard__step--complete .nx-stepwizard__indicator {
3366
+ background: var(--color-brand-500, #6366f1);
3367
+ border-color: var(--color-brand-500, #6366f1);
3368
+ color: var(--color-brand-onAccent, #ffffff);
3369
+ box-shadow: var(--shadow-sm, none);
3370
+ }
3371
+ .nx-stepwizard__step--clickable:active:not(:disabled) .nx-stepwizard__indicator {
3372
+ box-shadow: var(--shadow-xs, none);
3373
+ transform: translate(1px, 1px);
3374
+ }
3375
+ .nx-stepwizard__step--disabled .nx-stepwizard__indicator {
3376
+ background: var(--color-surfaceRaised, #f3f4f6);
3377
+ }
3378
+ .nx-stepwizard__indicator svg,
3379
+ .nx-stepwizard__indicator img {
3380
+ inline-size: calc(var(--stepwizard-indicator-size, 32px) * 0.42);
3381
+ block-size: calc(var(--stepwizard-indicator-size, 32px) * 0.42);
3382
+ display: block;
3383
+ }
3384
+ .nx-stepwizard__text {
3385
+ display: flex;
3386
+ flex-direction: column;
3387
+ min-inline-size: 0;
3388
+ }
3389
+ .nx-stepwizard__label {
3390
+ white-space: nowrap;
3391
+ font-size: var(--typography-sizeMd, 16px);
3392
+ line-height: var(--typography-lineHeightTight, 1.2);
3393
+ }
3394
+ .nx-stepwizard__description {
3395
+ font-size: var(--typography-sizeSm, 14px);
3396
+ color: var(--color-textMuted, #6b7280);
3397
+ line-height: var(--typography-lineHeightNormal, 1.5);
3398
+ }
3399
+ .nx-stepwizard__connector {
3400
+ flex: 1 1 auto;
3401
+ align-self: center;
3402
+ background: var(--color-textMuted, #9ca3af);
3403
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
3404
+ }
3405
+ .nx-stepwizard--horizontal .nx-stepwizard__connector {
3406
+ block-size: var(--border-widthThin, 1px);
3407
+ min-inline-size: var(--spacing-lg, 24px);
3408
+ margin-inline: var(--spacing-sm, 8px);
3409
+ }
3410
+ .nx-stepwizard--vertical .nx-stepwizard__connector {
3411
+ inline-size: var(--border-widthThin, 1px);
3412
+ min-block-size: var(--spacing-lg, 24px);
3413
+ margin-block: var(--spacing-xs, 4px);
3414
+ margin-inline-start: calc(var(--stepwizard-indicator-size, 32px) / 2 - var(--border-widthThin, 1px) / 2);
3415
+ align-self: flex-start;
3416
+ }
3417
+ .nx-stepwizard__connector--complete {
3418
+ background: var(--color-brand-500, #6366f1);
3419
+ }
3420
+ .nx-stepwizard--xs .nx-stepwizard__indicator {
3421
+ inline-size: 22px;
3422
+ block-size: 22px;
3423
+ font-size: var(--typography-sizeXs, 12px);
3424
+ --stepwizard-indicator-size: 22px;
3425
+ }
3426
+ .nx-stepwizard--sm .nx-stepwizard__indicator {
3427
+ inline-size: 26px;
3428
+ block-size: 26px;
3429
+ font-size: var(--typography-sizeXs, 12px);
3430
+ --stepwizard-indicator-size: 26px;
3431
+ }
3432
+ .nx-stepwizard--md .nx-stepwizard__indicator {
3433
+ inline-size: 32px;
3434
+ block-size: 32px;
3435
+ font-size: var(--typography-sizeSm, 14px);
3436
+ --stepwizard-indicator-size: 32px;
3437
+ }
3438
+ .nx-stepwizard--lg .nx-stepwizard__indicator {
3439
+ inline-size: 38px;
3440
+ block-size: 38px;
3441
+ font-size: var(--typography-sizeMd, 16px);
3442
+ --stepwizard-indicator-size: 38px;
3443
+ }
3444
+ .nx-stepwizard--xl .nx-stepwizard__indicator {
3445
+ inline-size: 44px;
3446
+ block-size: 44px;
3447
+ font-size: var(--typography-sizeLg, 18px);
3448
+ --stepwizard-indicator-size: 44px;
3449
+ }
3450
+ .nx-stepwizard--dots .nx-stepwizard__indicator {
3451
+ inline-size: 10px;
3452
+ block-size: 10px;
3453
+ font-size: 0;
3454
+ --stepwizard-indicator-size: 10px;
3455
+ }
3456
+ .nx-stepwizard--dots .nx-stepwizard__step--current .nx-stepwizard__indicator {
3457
+ box-shadow: 0 0 0 3px var(--color-brand-50, #f0f4ff);
3458
+ }
3459
+ .nx-stepwizard--progress .nx-stepwizard__indicator {
3460
+ inline-size: 12px;
3461
+ block-size: 12px;
3462
+ font-size: 0;
3463
+ border-width: var(--border-widthThick, 2px);
3464
+ --stepwizard-indicator-size: 12px;
3465
+ }
3466
+ .nx-stepwizard--progress.nx-stepwizard--horizontal .nx-stepwizard__connector {
3467
+ block-size: 3px;
3468
+ border-radius: var(--radius-full, 999px);
3469
+ }
3470
+ .nx-stepwizard--progress.nx-stepwizard--vertical .nx-stepwizard__connector {
3471
+ inline-size: 3px;
3472
+ border-radius: var(--radius-full, 999px);
3473
+ }
3474
+ .nx-stepwizard--dots .nx-stepwizard__indicator > *,
3475
+ .nx-stepwizard--progress .nx-stepwizard__indicator > * {
3476
+ display: none;
3477
+ }
3478
+ .nx-stepwizard__panel {
3479
+ color: var(--color-text, #111827);
3480
+ }
3481
+ .nx-stepwizard__panel:focus-visible {
3482
+ outline: 2px solid var(--color-brand-500, #6366f1);
3483
+ outline-offset: 2px;
3484
+ border-radius: var(--radius-sm, 6px);
3485
+ }
3486
+ .nx-stepwizard__nav {
3487
+ display: flex;
3488
+ justify-content: space-between;
3489
+ gap: var(--spacing-sm, 8px);
3490
+ }
3491
+ @media (prefers-reduced-motion: reduce) {
3492
+ .nx-stepwizard__step,
3493
+ .nx-stepwizard__indicator,
3494
+ .nx-stepwizard__connector {
3495
+ transition: none;
3496
+ }
3497
+ }
3498
+
3136
3499
  /* src/react/Slider.css */
3137
3500
  .nx-slider {
3138
3501
  position: relative;
@@ -3366,7 +3729,7 @@
3366
3729
  border: 1px solid var(--color-neutral-200, #e5e5e5);
3367
3730
  border-radius: var(--radius-md, 8px);
3368
3731
  box-shadow: var(--shadow-lg, 0 10px 15px rgba(0, 0, 0, 0.1));
3369
- z-index: 1050;
3732
+ z-index: var(--elevation-dropdown, 1050);
3370
3733
  animation: nx-combobox-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
3371
3734
  }
3372
3735
  .nx-combobox__listbox--xs {
@@ -3430,29 +3793,203 @@
3430
3793
  }
3431
3794
  }
3432
3795
 
3433
- /* src/react/Calendar.css */
3434
- .nx-calendar {
3435
- display: inline-flex;
3436
- flex-direction: column;
3437
- gap: 8px;
3438
- box-sizing: border-box;
3439
- padding: 12px;
3440
- background: var(--color-surface, #ffffff);
3441
- border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e5e5);
3442
- border-radius: var(--radius-lg, 14px);
3443
- box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.08));
3444
- backdrop-filter: blur(var(--effects-backdropBlur, 0px));
3445
- -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
3446
- font-family: var(--typography-fontSans, system-ui, sans-serif);
3447
- color: var(--color-text, #171717);
3448
- user-select: none;
3449
- }
3450
- .nx-calendar__header {
3796
+ /* src/react/SearchBar.css */
3797
+ .nx-search-bar__wrapper {
3798
+ position: relative;
3451
3799
  display: flex;
3452
3800
  align-items: center;
3453
- justify-content: space-between;
3454
- gap: 8px;
3455
- }
3801
+ inline-size: 100%;
3802
+ max-inline-size: 20rem;
3803
+ }
3804
+ .nx-search-bar__icon {
3805
+ position: absolute;
3806
+ inset-inline-start: 10px;
3807
+ inline-size: 1em;
3808
+ block-size: 1em;
3809
+ color: var(--color-neutral-400, #a3a3a3);
3810
+ pointer-events: none;
3811
+ }
3812
+ .nx-search-bar__input {
3813
+ inline-size: 100%;
3814
+ box-sizing: border-box;
3815
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
3816
+ color: var(--color-neutral-900, #171717);
3817
+ background: var(--color-neutral-0, #ffffff);
3818
+ border: 1px solid var(--color-neutral-300, #d4d4d4);
3819
+ border-radius: var(--radius-md, 8px);
3820
+ box-shadow: var(--shadow-xs, 0 1px 2px rgba(0, 0, 0, 0.05));
3821
+ padding-inline-start: 34px;
3822
+ padding-inline-end: 32px;
3823
+ transition: border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
3824
+ }
3825
+ .nx-search-bar__input:focus-visible,
3826
+ .nx-search-bar__input--open {
3827
+ outline: none;
3828
+ border-color: var(--color-brand-500, #6366f1);
3829
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand-500, #6366f1) 20%, transparent);
3830
+ }
3831
+ .nx-search-bar__input--invalid {
3832
+ border-color: var(--color-danger-base, #dc2626);
3833
+ }
3834
+ .nx-search-bar__input--invalid:focus-visible,
3835
+ .nx-search-bar__input--invalid.nx-search-bar__input--open {
3836
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-danger-base, #dc2626) 20%, transparent);
3837
+ }
3838
+ .nx-search-bar__input--disabled {
3839
+ opacity: 0.5;
3840
+ cursor: not-allowed;
3841
+ background: var(--color-neutral-50, #fafafa);
3842
+ }
3843
+ .nx-search-bar__input--disabled ~ .nx-search-bar__icon {
3844
+ opacity: 0.5;
3845
+ }
3846
+ .nx-search-bar__input--xs {
3847
+ padding-block: 4px;
3848
+ min-block-size: 28px;
3849
+ font-size: var(--typography-sizeXs, 12px);
3850
+ }
3851
+ .nx-search-bar__input--sm {
3852
+ padding-block: 5px;
3853
+ min-block-size: 32px;
3854
+ font-size: var(--typography-sizeSm, 14px);
3855
+ }
3856
+ .nx-search-bar__input--md {
3857
+ padding-block: 8px;
3858
+ min-block-size: 38px;
3859
+ font-size: var(--typography-sizeMd, 16px);
3860
+ }
3861
+ .nx-search-bar__input--lg {
3862
+ padding-block: 10px;
3863
+ min-block-size: 44px;
3864
+ font-size: var(--typography-sizeLg, 18px);
3865
+ }
3866
+ .nx-search-bar__input--xl {
3867
+ padding-block: 12px;
3868
+ min-block-size: 52px;
3869
+ font-size: var(--typography-sizeXl, 20px);
3870
+ }
3871
+ .nx-search-bar__clear {
3872
+ position: absolute;
3873
+ inset-inline-end: 4px;
3874
+ top: 50%;
3875
+ transform: translateY(-50%);
3876
+ display: inline-flex;
3877
+ align-items: center;
3878
+ justify-content: center;
3879
+ inline-size: 24px;
3880
+ block-size: 24px;
3881
+ padding: 0;
3882
+ border: none;
3883
+ background: transparent;
3884
+ border-radius: var(--radius-full, 9999px);
3885
+ color: var(--color-neutral-500, #737373);
3886
+ cursor: pointer;
3887
+ }
3888
+ .nx-search-bar__clear:hover {
3889
+ background: var(--color-neutral-100, #f5f5f5);
3890
+ color: var(--color-neutral-700, #404040);
3891
+ }
3892
+ .nx-search-bar__clear-icon {
3893
+ inline-size: 0.9em;
3894
+ block-size: 0.9em;
3895
+ }
3896
+ .nx-search-bar__listbox {
3897
+ box-sizing: border-box;
3898
+ max-block-size: 16rem;
3899
+ overflow-y: auto;
3900
+ padding: var(--spacing-xs, 4px);
3901
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
3902
+ background: var(--color-neutral-0, #ffffff);
3903
+ border: 1px solid var(--color-neutral-200, #e5e5e5);
3904
+ border-radius: var(--radius-md, 8px);
3905
+ box-shadow: var(--shadow-lg, 0 10px 15px rgba(0, 0, 0, 0.1));
3906
+ z-index: var(--elevation-dropdown, 1050);
3907
+ animation: nx-search-bar-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
3908
+ }
3909
+ .nx-search-bar__listbox--xs {
3910
+ font-size: var(--typography-sizeXs, 12px);
3911
+ }
3912
+ .nx-search-bar__listbox--sm {
3913
+ font-size: var(--typography-sizeSm, 14px);
3914
+ }
3915
+ .nx-search-bar__listbox--md {
3916
+ font-size: var(--typography-sizeMd, 16px);
3917
+ }
3918
+ .nx-search-bar__listbox--lg {
3919
+ font-size: var(--typography-sizeLg, 18px);
3920
+ }
3921
+ .nx-search-bar__listbox--xl {
3922
+ font-size: var(--typography-sizeXl, 20px);
3923
+ }
3924
+ .nx-search-bar__option {
3925
+ padding: 6px 8px;
3926
+ border-radius: var(--radius-sm, 4px);
3927
+ color: var(--color-neutral-800, #262626);
3928
+ cursor: pointer;
3929
+ user-select: none;
3930
+ overflow: hidden;
3931
+ white-space: nowrap;
3932
+ text-overflow: ellipsis;
3933
+ }
3934
+ .nx-search-bar__option--active {
3935
+ background: var(--color-brand-50, #eef2ff);
3936
+ color: var(--color-brand-700, #4338ca);
3937
+ }
3938
+ .nx-search-bar__option--disabled {
3939
+ opacity: 0.5;
3940
+ cursor: not-allowed;
3941
+ }
3942
+ .nx-search-bar__empty {
3943
+ padding: 10px 8px;
3944
+ color: var(--color-neutral-400, #a3a3a3);
3945
+ font-size: 0.9em;
3946
+ text-align: center;
3947
+ }
3948
+ .nx-search-bar__loading {
3949
+ display: flex;
3950
+ align-items: center;
3951
+ justify-content: center;
3952
+ padding: 14px 8px;
3953
+ }
3954
+ @keyframes nx-search-bar-in {
3955
+ from {
3956
+ opacity: 0;
3957
+ transform: translateY(-4px);
3958
+ }
3959
+ to {
3960
+ opacity: 1;
3961
+ transform: translateY(0);
3962
+ }
3963
+ }
3964
+ @media (prefers-reduced-motion: reduce) {
3965
+ .nx-search-bar__listbox {
3966
+ animation-duration: 0.01ms;
3967
+ }
3968
+ }
3969
+
3970
+ /* src/react/Calendar.css */
3971
+ .nx-calendar {
3972
+ display: inline-flex;
3973
+ flex-direction: column;
3974
+ gap: 8px;
3975
+ box-sizing: border-box;
3976
+ padding: 12px;
3977
+ background: var(--color-surface, #ffffff);
3978
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e5e5);
3979
+ border-radius: var(--radius-lg, 14px);
3980
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.08));
3981
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
3982
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
3983
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
3984
+ color: var(--color-text, #171717);
3985
+ user-select: none;
3986
+ }
3987
+ .nx-calendar__header {
3988
+ display: flex;
3989
+ align-items: center;
3990
+ justify-content: space-between;
3991
+ gap: 8px;
3992
+ }
3456
3993
  .nx-calendar__month-label {
3457
3994
  font-weight: var(--typography-weightMedium, 500);
3458
3995
  font-size: var(--typography-sizeSm, 14px);
@@ -3591,7 +4128,7 @@
3591
4128
 
3592
4129
  /* src/react/Popover.css */
3593
4130
  .nx-popover__content {
3594
- z-index: 1060;
4131
+ z-index: var(--elevation-popover, 1060);
3595
4132
  box-sizing: border-box;
3596
4133
  min-inline-size: 12rem;
3597
4134
  max-inline-size: min(24rem, calc(100vw - 16px));
@@ -4297,6 +4834,8 @@
4297
4834
  position: relative;
4298
4835
  overflow: hidden;
4299
4836
  border-radius: var(--radius-lg, 12px);
4837
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
4838
+ box-shadow: var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.08));
4300
4839
  grid-row: 1;
4301
4840
  grid-column: 1;
4302
4841
  }
@@ -4335,7 +4874,7 @@
4335
4874
  justify-content: center;
4336
4875
  inline-size: 36px;
4337
4876
  block-size: 36px;
4338
- border: 1px solid var(--color-neutral-200, #e5e5e5);
4877
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e5e5);
4339
4878
  border-radius: var(--radius-full, 9999px);
4340
4879
  background: color-mix(in srgb, var(--color-neutral-0, #ffffff) 85%, transparent);
4341
4880
  color: var(--color-neutral-800, #262626);
@@ -4528,775 +5067,2442 @@
4528
5067
  color: var(--color-textMuted, #525252);
4529
5068
  }
4530
5069
 
4531
- /* src/react/CommandPalette.css */
4532
- .nx-command__backdrop {
4533
- position: fixed;
4534
- inset: 0;
4535
- z-index: 1000;
5070
+ /* src/react/ChatBubble.css */
5071
+ .nx-chat-bubble {
4536
5072
  display: flex;
4537
- justify-content: center;
4538
- padding-top: 12vh;
4539
- padding-inline: var(--spacing-lg, 24px);
4540
- background: rgba(0, 0, 0, 0.5);
4541
- backdrop-filter: blur(2px);
4542
- animation: nx-command-backdrop-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5073
+ align-items: flex-end;
5074
+ gap: var(--spacing-sm, 8px);
5075
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
5076
+ max-inline-size: 100%;
4543
5077
  }
4544
- @keyframes nx-command-backdrop-in {
4545
- from {
4546
- opacity: 0;
4547
- }
4548
- to {
4549
- opacity: 1;
4550
- }
5078
+ .nx-chat-bubble--end {
5079
+ flex-direction: row-reverse;
4551
5080
  }
4552
- .nx-command {
4553
- display: flex;
4554
- flex-direction: column;
4555
- inline-size: 100%;
4556
- max-inline-size: 640px;
4557
- max-block-size: min(480px, 70vh);
4558
- background: var(--color-neutral-0, #ffffff);
4559
- border-radius: var(--radius-lg, 14px);
4560
- box-shadow: var(--shadow-xl, 0 20px 40px rgba(0, 0, 0, 0.25));
4561
- border: 1px solid var(--color-neutral-200, #e5e5e5);
4562
- overflow: hidden;
4563
- outline: none;
4564
- animation: nx-command-panel-in var(--motion-durationNormal, 180ms) var(--motion-easeEmphasized, ease);
5081
+ .nx-chat-bubble__avatar {
5082
+ flex-shrink: 0;
4565
5083
  }
4566
- @keyframes nx-command-panel-in {
4567
- from {
4568
- opacity: 0;
4569
- transform: translateY(-8px) scale(0.98);
4570
- }
4571
- to {
4572
- opacity: 1;
4573
- transform: translateY(0) scale(1);
4574
- }
5084
+ .nx-chat-bubble--no-avatar {
5085
+ padding-inline-start: 0;
4575
5086
  }
4576
- .nx-command__search {
5087
+ .nx-chat-bubble__content {
4577
5088
  display: flex;
4578
- align-items: center;
4579
- gap: 10px;
4580
- padding: 14px 16px;
4581
- border-bottom: 1px solid var(--color-neutral-200, #e5e5e5);
4582
- flex-shrink: 0;
5089
+ flex-direction: column;
5090
+ max-inline-size: min(480px, 75%);
4583
5091
  }
4584
- .nx-command__search-icon {
4585
- flex-shrink: 0;
4586
- color: var(--color-neutral-400, #a3a3a3);
5092
+ .nx-chat-bubble--end .nx-chat-bubble__content {
5093
+ align-items: flex-end;
4587
5094
  }
4588
- .nx-command__input {
4589
- flex: 1;
4590
- border: none;
4591
- outline: none;
4592
- background: transparent;
4593
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5095
+ .nx-chat-bubble__name {
5096
+ font-size: var(--typography-sizeXs, 12px);
5097
+ font-weight: var(--typography-weightMedium, 500);
5098
+ color: var(--color-textMuted, #6b7280);
5099
+ margin-bottom: var(--spacing-xs, 4px);
5100
+ padding-inline: var(--spacing-sm, 8px);
5101
+ }
5102
+ .nx-chat-bubble__bubble {
5103
+ position: relative;
5104
+ padding: var(--spacing-sm, 8px) var(--spacing-md, 16px);
5105
+ border-radius: var(--radius-lg, 12px);
5106
+ line-height: var(--typography-lineHeightNormal, 1.5);
4594
5107
  font-size: var(--typography-sizeMd, 16px);
4595
- color: var(--color-neutral-900, #171717);
5108
+ word-break: break-word;
5109
+ white-space: pre-wrap;
4596
5110
  }
4597
- .nx-command__input::placeholder {
4598
- color: var(--color-neutral-400, #a3a3a3);
5111
+ .nx-chat-bubble__bubble--solid,
5112
+ .nx-chat-bubble__bubble--soft {
5113
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
4599
5114
  }
4600
- .nx-command__list {
4601
- overflow-y: auto;
4602
- padding: 8px;
5115
+ .nx-chat-bubble__bubble--solid,
5116
+ .nx-chat-bubble__bubble--soft,
5117
+ .nx-chat-bubble__bubble--outline {
5118
+ box-shadow: var(--shadow-sm, none);
4603
5119
  }
4604
- .nx-command__group + .nx-command__group {
4605
- margin-top: 4px;
5120
+ .nx-chat-bubble__bubble--solid {
5121
+ background: var(--color-brand-500, #6366f1);
5122
+ color: var(--color-brand-onAccent, #ffffff);
4606
5123
  }
4607
- .nx-command__group-label {
4608
- padding: 6px 8px 4px;
4609
- font-size: var(--typography-sizeXs, 12px);
4610
- font-weight: var(--typography-weightMedium, 500);
4611
- color: var(--color-neutral-400, #a3a3a3);
4612
- text-transform: uppercase;
4613
- letter-spacing: 0.04em;
5124
+ .nx-chat-bubble--start .nx-chat-bubble__bubble--solid {
5125
+ background: var(--color-surfaceRaised, #f3f4f6);
5126
+ color: var(--color-text, #111827);
5127
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
5128
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
4614
5129
  }
4615
- .nx-command__item {
4616
- display: flex;
4617
- align-items: center;
4618
- gap: 10px;
4619
- padding: 9px 10px;
4620
- border-radius: var(--radius-sm, 4px);
4621
- font-family: var(--typography-fontSans, system-ui, sans-serif);
4622
- font-size: var(--typography-sizeSm, 14px);
4623
- color: var(--color-neutral-800, #262626);
4624
- cursor: pointer;
4625
- }
4626
- .nx-command__item--active {
4627
- background: var(--color-brand-50, #eef2ff);
5130
+ .nx-chat-bubble__bubble--soft {
5131
+ background: var(--color-brand-50, #f0f4ff);
4628
5132
  color: var(--color-brand-700, #4338ca);
4629
5133
  }
4630
- .nx-command__item--disabled {
4631
- opacity: 0.5;
4632
- cursor: not-allowed;
5134
+ .nx-chat-bubble--start .nx-chat-bubble__bubble--soft {
5135
+ background: var(--color-surfaceRaised, #f3f4f6);
5136
+ color: var(--color-text, #111827);
5137
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
5138
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
4633
5139
  }
4634
- .nx-command__item-label {
4635
- flex: 1;
4636
- overflow: hidden;
4637
- white-space: nowrap;
4638
- text-overflow: ellipsis;
5140
+ .nx-chat-bubble__bubble--outline {
5141
+ background: transparent;
5142
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5143
+ color: var(--color-text, #111827);
4639
5144
  }
4640
- .nx-command__item-description {
4641
- color: var(--color-neutral-400, #a3a3a3);
4642
- font-size: 0.9em;
4643
- overflow: hidden;
4644
- white-space: nowrap;
4645
- text-overflow: ellipsis;
5145
+ .nx-chat-bubble__bubble--ghost {
5146
+ background: transparent;
5147
+ color: var(--color-text, #111827);
4646
5148
  }
4647
- .nx-command__item-shortcut {
4648
- flex-shrink: 0;
4649
- padding: 2px 6px;
4650
- border-radius: var(--radius-sm, 4px);
4651
- background: var(--color-neutral-100, #f5f5f5);
4652
- color: var(--color-neutral-500, #737373);
4653
- font-size: var(--typography-sizeXs, 12px);
4654
- font-family: var(--typography-fontMono, ui-monospace, monospace);
5149
+ .nx-chat-bubble__bubble--tail-end {
5150
+ border-end-end-radius: 4px;
4655
5151
  }
4656
- .nx-command__item--active .nx-command__item-shortcut {
4657
- background: var(--color-neutral-0, #ffffff);
5152
+ .nx-chat-bubble__bubble--tail-start {
5153
+ border-end-start-radius: 4px;
4658
5154
  }
4659
- .nx-command__empty {
4660
- padding: 24px 8px;
4661
- text-align: center;
4662
- color: var(--color-neutral-400, #a3a3a3);
4663
- font-size: var(--typography-sizeSm, 14px);
5155
+ .nx-chat-bubble__bubble--tail-start::before,
5156
+ .nx-chat-bubble__bubble--tail-end::before {
5157
+ content: "";
5158
+ position: absolute;
5159
+ bottom: 0;
5160
+ inline-size: 12px;
5161
+ block-size: 16px;
5162
+ background: inherit;
4664
5163
  }
4665
- @media (prefers-reduced-motion: reduce) {
4666
- .nx-command__backdrop,
4667
- .nx-command {
4668
- animation-duration: 0.01ms;
4669
- }
5164
+ .nx-chat-bubble__bubble--tail-end::before {
5165
+ inset-inline-end: -8px;
5166
+ clip-path: polygon(0 0, 100% 55%, 65% 100%, 0 100%);
4670
5167
  }
4671
-
4672
- /* src/react/NumberInput.css */
4673
- .nx-number-input-wrapper {
4674
- display: flex;
4675
- align-items: stretch;
4676
- background: var(--color-surface, #ffffff);
4677
- border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
4678
- border-radius: var(--radius-md, 8px);
4679
- box-shadow: var(--shadow-xs, none);
4680
- overflow: hidden;
4681
- transition: border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5168
+ .nx-chat-bubble__bubble--tail-start::before {
5169
+ inset-inline-start: -8px;
5170
+ clip-path: polygon(100% 0, 0 55%, 35% 100%, 100% 100%);
4682
5171
  }
4683
- .nx-number-input-wrapper:focus-within {
4684
- border-color: var(--color-brand-500, #6366f1);
4685
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand-500, #6366f1) 20%, transparent);
5172
+ .nx-chat-bubble__meta {
5173
+ display: flex;
5174
+ align-items: center;
5175
+ gap: var(--spacing-xs, 4px);
5176
+ margin-top: var(--spacing-xs, 4px);
5177
+ padding-inline: var(--spacing-sm, 8px);
5178
+ font-size: var(--typography-sizeXs, 12px);
5179
+ color: var(--color-textMuted, #6b7280);
4686
5180
  }
4687
- .nx-number-input-wrapper--invalid {
4688
- border-color: var(--color-danger-base, #ef4444);
5181
+ .nx-chat-bubble__status {
5182
+ display: inline-flex;
5183
+ align-items: center;
5184
+ color: var(--color-textMuted, #6b7280);
4689
5185
  }
4690
- .nx-number-input-wrapper--invalid:focus-within {
4691
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-danger-base, #ef4444) 20%, transparent);
5186
+ .nx-chat-bubble__status[data-status=read] {
5187
+ color: var(--color-info-base, #3b82f6);
4692
5188
  }
4693
- .nx-number-input-wrapper--disabled {
4694
- opacity: 0.5;
4695
- cursor: not-allowed;
4696
- background: var(--color-neutral-50, #f9fafb);
5189
+ .nx-chat-bubble__reactions {
5190
+ display: flex;
5191
+ flex-wrap: wrap;
5192
+ align-items: center;
5193
+ gap: var(--spacing-xs, 4px);
5194
+ margin-top: var(--spacing-xs, 4px);
5195
+ padding-inline: var(--spacing-sm, 8px);
4697
5196
  }
4698
- .nx-number-input {
4699
- flex: 1;
4700
- min-width: 0;
4701
- border: none;
4702
- outline: none;
4703
- background: transparent;
4704
- padding: 8px 12px;
4705
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5197
+ .nx-chat-bubble__reaction {
5198
+ appearance: none;
5199
+ cursor: pointer;
5200
+ display: inline-flex;
5201
+ align-items: center;
5202
+ gap: 4px;
5203
+ padding: 2px 8px;
5204
+ border-radius: var(--radius-full, 9999px);
5205
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5206
+ background: var(--color-surfaceRaised, #f3f4f6);
4706
5207
  color: var(--color-text, #111827);
4707
- }
4708
- .nx-number-input:disabled {
4709
- cursor: not-allowed;
4710
- }
4711
- .nx-number-input-wrapper--xs {
4712
5208
  font-size: var(--typography-sizeXs, 12px);
5209
+ line-height: 1;
5210
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4713
5211
  }
4714
- .nx-number-input-wrapper--sm {
4715
- font-size: var(--typography-sizeSm, 14px);
5212
+ .nx-chat-bubble__reaction:hover {
5213
+ background: var(--color-brand-50, #f0f4ff);
4716
5214
  }
4717
- .nx-number-input-wrapper--md {
4718
- font-size: var(--typography-sizeMd, 16px);
5215
+ .nx-chat-bubble__reaction--active {
5216
+ background: var(--color-brand-50, #f0f4ff);
5217
+ border-color: var(--color-brand-500, #6366f1);
5218
+ color: var(--color-brand-700, #4338ca);
4719
5219
  }
4720
- .nx-number-input-wrapper--lg {
4721
- font-size: var(--typography-sizeLg, 18px);
5220
+ .nx-chat-bubble__reaction:focus-visible {
5221
+ outline: 2px solid var(--color-brand-500, #6366f1);
5222
+ outline-offset: 2px;
4722
5223
  }
4723
- .nx-number-input-wrapper--xl {
4724
- font-size: var(--typography-sizeXl, 22px);
5224
+ .nx-chat-bubble__add-reaction {
5225
+ appearance: none;
5226
+ cursor: pointer;
5227
+ display: inline-flex;
5228
+ align-items: center;
5229
+ justify-content: center;
5230
+ inline-size: 24px;
5231
+ block-size: 24px;
5232
+ border-radius: var(--radius-full, 9999px);
5233
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5234
+ background: transparent;
5235
+ color: var(--color-textMuted, #6b7280);
5236
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4725
5237
  }
4726
- .nx-number-input--xs,
4727
- .nx-number-input--sm,
4728
- .nx-number-input--md,
4729
- .nx-number-input--lg,
4730
- .nx-number-input--xl {
4731
- font-size: inherit;
5238
+ .nx-chat-bubble__add-reaction:hover {
5239
+ background: var(--color-surfaceRaised, #f3f4f6);
5240
+ color: var(--color-text, #111827);
4732
5241
  }
4733
- .nx-number-input__stepper {
4734
- display: flex;
4735
- flex-direction: column;
4736
- flex-shrink: 0;
4737
- border-left: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5242
+ .nx-chat-bubble__add-reaction:focus-visible {
5243
+ outline: 2px solid var(--color-brand-500, #6366f1);
5244
+ outline-offset: 2px;
4738
5245
  }
4739
- .nx-number-input__stepper-btn {
4740
- flex: 1;
4741
- display: flex;
4742
- align-items: center;
4743
- justify-content: center;
4744
- min-width: 1.75em;
5246
+ .nx-chat-bubble__reaction-picker {
5247
+ display: grid;
5248
+ grid-template-columns: repeat(6, 1fr);
5249
+ gap: 4px;
5250
+ padding: 4px;
5251
+ }
5252
+ .nx-chat-bubble__reaction-option {
5253
+ appearance: none;
5254
+ cursor: pointer;
4745
5255
  border: none;
4746
5256
  background: transparent;
4747
- color: var(--color-textMuted, #6b7280);
4748
- font-family: inherit;
4749
- font-size: inherit;
5257
+ border-radius: var(--radius-sm, 6px);
5258
+ font-size: var(--typography-sizeLg, 18px);
4750
5259
  line-height: 1;
4751
- cursor: pointer;
4752
- padding: 0 8px;
4753
- transition: background var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4754
- }
4755
- .nx-number-input__stepper-btn:first-child {
4756
- border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5260
+ padding: 6px;
5261
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4757
5262
  }
4758
- .nx-number-input__stepper-btn:not(:disabled):hover {
4759
- background: var(--color-neutral-100, #f3f4f6);
4760
- color: var(--color-text, #111827);
5263
+ .nx-chat-bubble__reaction-option:hover,
5264
+ .nx-chat-bubble__reaction-option:focus-visible {
5265
+ background: var(--color-surfaceRaised, #f3f4f6);
5266
+ outline: none;
4761
5267
  }
4762
- .nx-number-input__stepper-btn:disabled {
4763
- opacity: 0.35;
4764
- cursor: not-allowed;
5268
+ @media (prefers-reduced-motion: reduce) {
5269
+ .nx-chat-bubble__reaction,
5270
+ .nx-chat-bubble__add-reaction,
5271
+ .nx-chat-bubble__reaction-option {
5272
+ transition: none;
5273
+ }
4765
5274
  }
4766
5275
 
4767
- /* src/react/FileUpload.css */
4768
- .nx-file-upload {
4769
- position: relative;
5276
+ /* src/react/ResizablePanel.css */
5277
+ .nx-resizable-group {
4770
5278
  display: flex;
4771
- flex-direction: column;
4772
- align-items: center;
4773
- justify-content: center;
4774
- gap: var(--spacing-sm, 8px);
4775
5279
  inline-size: 100%;
4776
- box-sizing: border-box;
4777
- padding: var(--spacing-lg, 24px);
4778
- border: var(--border-widthMedium, 2px) dashed var(--color-border, #e5e7eb);
4779
- border-radius: var(--radius-lg, 12px);
4780
- background: var(--color-surface, #ffffff);
4781
- text-align: center;
4782
- transition: border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), background var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5280
+ block-size: 100%;
5281
+ overflow: hidden;
5282
+ color: var(--color-text, #111827);
5283
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
4783
5284
  }
4784
- .nx-file-upload--dragging {
4785
- border-color: var(--color-brand-500, #6366f1);
4786
- background: color-mix(in srgb, var(--color-brand-500, #6366f1) 6%, var(--color-surface, #ffffff));
5285
+ .nx-resizable-group--horizontal {
5286
+ flex-direction: row;
4787
5287
  }
4788
- .nx-file-upload--invalid {
4789
- border-color: var(--color-danger-base, #ef4444);
5288
+ .nx-resizable-group--vertical {
5289
+ flex-direction: column;
4790
5290
  }
4791
- .nx-file-upload--disabled {
4792
- opacity: 0.5;
4793
- cursor: not-allowed;
5291
+ .nx-resizable-panel {
5292
+ min-inline-size: 0;
5293
+ min-block-size: 0;
5294
+ overflow: auto;
4794
5295
  }
4795
- .nx-file-upload--xs,
4796
- .nx-file-upload--sm {
4797
- padding: var(--spacing-md, 16px);
5296
+ .nx-resizable-handle {
5297
+ position: relative;
5298
+ flex: 0 0 auto;
5299
+ background: var(--color-border, #e5e7eb);
5300
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4798
5301
  }
4799
- .nx-file-upload--lg,
4800
- .nx-file-upload--xl {
4801
- padding: var(--spacing-xl, 32px);
5302
+ .nx-resizable-handle--horizontal {
5303
+ inline-size: var(--border-widthThin, 1px);
5304
+ cursor: col-resize;
5305
+ touch-action: none;
4802
5306
  }
4803
- .nx-file-upload__input {
5307
+ .nx-resizable-handle--vertical {
5308
+ block-size: var(--border-widthThin, 1px);
5309
+ cursor: row-resize;
5310
+ touch-action: none;
5311
+ }
5312
+ .nx-resizable-handle--horizontal::before {
5313
+ content: "";
4804
5314
  position: absolute;
4805
- width: 1px;
4806
- height: 1px;
4807
- padding: 0;
4808
- margin: -1px;
4809
- overflow: hidden;
4810
- clip: rect(0, 0, 0, 0);
4811
- white-space: nowrap;
4812
- border: 0;
5315
+ inset-block: 0;
5316
+ inset-inline-start: -4px;
5317
+ inset-inline-end: -4px;
4813
5318
  }
4814
- .nx-file-upload__prompt {
4815
- display: flex;
4816
- flex-direction: column;
4817
- align-items: center;
4818
- gap: var(--spacing-sm, 8px);
5319
+ .nx-resizable-handle--vertical::before {
5320
+ content: "";
5321
+ position: absolute;
5322
+ inset-inline: 0;
5323
+ inset-block-start: -4px;
5324
+ inset-block-end: -4px;
4819
5325
  }
4820
- .nx-file-upload__hint {
4821
- margin: 0;
4822
- font-family: var(--typography-fontSans, system-ui, sans-serif);
4823
- font-size: var(--typography-sizeSm, 14px);
4824
- color: var(--color-textMuted, #6b7280);
5326
+ .nx-resizable-handle:hover:not(.nx-resizable-handle--disabled),
5327
+ .nx-resizable-handle--dragging {
5328
+ background: var(--color-brand-500, #6366f1);
4825
5329
  }
4826
- .nx-file-upload__list {
4827
- list-style: none;
4828
- margin: var(--spacing-sm, 8px) 0 0;
4829
- padding: 0;
4830
- display: flex;
4831
- flex-direction: column;
4832
- gap: var(--spacing-xs, 4px);
5330
+ .nx-resizable-handle:focus-visible {
5331
+ outline: 2px solid var(--color-brand-500, #6366f1);
5332
+ outline-offset: 2px;
4833
5333
  }
4834
- .nx-file-upload__item {
5334
+ .nx-resizable-handle--disabled {
5335
+ cursor: not-allowed;
5336
+ opacity: 0.5;
5337
+ }
5338
+ @media (prefers-reduced-motion: reduce) {
5339
+ .nx-resizable-handle {
5340
+ transition: none;
5341
+ }
5342
+ }
5343
+
5344
+ /* src/react/Sidebar.css */
5345
+ .nx-sidebar {
4835
5346
  display: flex;
4836
- align-items: center;
4837
- gap: var(--spacing-sm, 8px);
4838
- padding: 6px 10px;
4839
- border-radius: var(--radius-sm, 4px);
4840
- background: var(--color-neutral-50, #f9fafb);
5347
+ flex-direction: column;
5348
+ inline-size: 240px;
5349
+ block-size: 100%;
5350
+ background: var(--color-surface, #ffffff);
5351
+ border-inline-end: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5352
+ box-shadow: var(--shadow-sm, none);
5353
+ clip-path: inset(0 -32px 0 0);
5354
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
5355
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
4841
5356
  font-family: var(--typography-fontSans, system-ui, sans-serif);
4842
- font-size: var(--typography-sizeSm, 14px);
4843
- }
4844
- .nx-file-upload__item-name {
4845
- flex: 1;
4846
- min-width: 0;
4847
- overflow: hidden;
4848
- text-overflow: ellipsis;
4849
- white-space: nowrap;
4850
5357
  color: var(--color-text, #111827);
5358
+ transition: inline-size var(--motion-durationNormal, 200ms) var(--motion-easeStandard, ease);
5359
+ box-sizing: border-box;
5360
+ overflow-x: hidden;
4851
5361
  }
4852
- .nx-file-upload__item-size {
4853
- flex-shrink: 0;
4854
- color: var(--color-textMuted, #6b7280);
5362
+ .nx-sidebar:dir(rtl) {
5363
+ clip-path: inset(0 0 0 -32px);
5364
+ }
5365
+ .nx-sidebar--sm {
5366
+ inline-size: 200px;
5367
+ }
5368
+ .nx-sidebar--sm .nx-sidebar__nav-item {
4855
5369
  font-size: var(--typography-sizeXs, 12px);
5370
+ padding: 6px 8px;
4856
5371
  }
4857
- .nx-file-upload__item-remove {
5372
+ .nx-sidebar--sm .nx-sidebar__nav-item-icon {
5373
+ inline-size: 16px;
5374
+ block-size: 16px;
5375
+ }
5376
+ .nx-sidebar--lg {
5377
+ inline-size: 280px;
5378
+ }
5379
+ .nx-sidebar--lg .nx-sidebar__nav-item {
5380
+ font-size: var(--typography-sizeMd, 16px);
5381
+ padding: 10px 12px;
5382
+ }
5383
+ .nx-sidebar--lg .nx-sidebar__nav-item-icon {
5384
+ inline-size: 24px;
5385
+ block-size: 24px;
5386
+ }
5387
+ .nx-sidebar--collapsed {
5388
+ inline-size: 64px;
5389
+ }
5390
+ .nx-sidebar__header,
5391
+ .nx-sidebar__footer {
5392
+ display: flex;
5393
+ align-items: center;
5394
+ padding: var(--spacing-md, 16px);
4858
5395
  flex-shrink: 0;
4859
- border: none;
5396
+ }
5397
+ .nx-sidebar__header {
5398
+ border-block-end: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5399
+ }
5400
+ .nx-sidebar__footer {
5401
+ border-block-start: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5402
+ margin-block-start: auto;
5403
+ }
5404
+ .nx-sidebar__toggle {
5405
+ appearance: none;
4860
5406
  background: transparent;
5407
+ border: none;
4861
5408
  cursor: pointer;
5409
+ display: inline-flex;
5410
+ align-items: center;
5411
+ justify-content: center;
5412
+ inline-size: 32px;
5413
+ block-size: 32px;
5414
+ border-radius: var(--radius-md, 8px);
4862
5415
  color: var(--color-textMuted, #6b7280);
4863
- font-size: var(--typography-sizeMd, 16px);
4864
- line-height: 1;
4865
- padding: 0 4px;
5416
+ flex-shrink: 0;
5417
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4866
5418
  }
4867
- .nx-file-upload__item-remove:hover {
4868
- color: var(--color-danger-base, #ef4444);
5419
+ .nx-sidebar__toggle:hover {
5420
+ background: var(--color-surfaceRaised, #f3f4f6);
5421
+ color: var(--color-text, #111827);
4869
5422
  }
4870
- .nx-file-upload__item-remove:disabled {
4871
- cursor: not-allowed;
4872
- opacity: 0.5;
5423
+ .nx-sidebar__toggle:focus-visible {
5424
+ outline: 2px solid var(--color-brand-500, #6366f1);
5425
+ outline-offset: 2px;
4873
5426
  }
4874
-
4875
- /* src/react/Pagination.css */
4876
- .nx-pagination {
4877
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5427
+ .nx-sidebar__nav {
5428
+ display: flex;
5429
+ flex-direction: column;
5430
+ gap: var(--spacing-xs, 4px);
5431
+ padding: var(--spacing-sm, 8px);
5432
+ overflow-y: auto;
5433
+ flex: 1;
4878
5434
  }
4879
- .nx-pagination__list {
5435
+ .nx-sidebar__section {
4880
5436
  display: flex;
4881
- align-items: center;
4882
- flex-wrap: wrap;
5437
+ flex-direction: column;
4883
5438
  gap: var(--spacing-xs, 4px);
4884
- list-style: none;
4885
- margin: 0;
4886
- padding: 0;
4887
5439
  }
4888
- .nx-pagination__item {
4889
- display: inline-flex;
5440
+ .nx-sidebar__section + .nx-sidebar__section {
5441
+ margin-block-start: var(--spacing-md, 16px);
5442
+ }
5443
+ .nx-sidebar__section-label {
5444
+ padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);
5445
+ font-size: var(--typography-sizeXs, 12px);
5446
+ font-weight: var(--typography-weightMedium, 500);
5447
+ color: var(--color-textMuted, #6b7280);
5448
+ text-transform: uppercase;
5449
+ letter-spacing: 0.04em;
5450
+ white-space: nowrap;
5451
+ }
5452
+ .nx-sidebar__section-label--hidden {
5453
+ position: absolute;
5454
+ inline-size: 1px;
5455
+ block-size: 1px;
5456
+ overflow: hidden;
5457
+ clip: rect(0, 0, 0, 0);
5458
+ white-space: nowrap;
5459
+ }
5460
+ .nx-sidebar__nav-item {
5461
+ appearance: none;
5462
+ background: transparent;
5463
+ border: none;
5464
+ margin: 0;
5465
+ cursor: pointer;
5466
+ text-decoration: none;
5467
+ font-family: inherit;
5468
+ font-size: var(--typography-sizeSm, 14px);
5469
+ font-weight: var(--typography-weightMedium, 500);
5470
+ line-height: var(--typography-lineHeightTight, 1.2);
5471
+ color: var(--color-textMuted, #6b7280);
5472
+ display: flex;
4890
5473
  align-items: center;
4891
- justify-content: center;
4892
- min-width: 2.25em;
4893
- height: 2.25em;
4894
- padding: 0 8px;
4895
- border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5474
+ gap: var(--spacing-sm, 8px);
5475
+ padding: 8px 10px;
4896
5476
  border-radius: var(--radius-md, 8px);
4897
- background: transparent;
4898
- backdrop-filter: blur(var(--effects-backdropBlur, 0px));
4899
- -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
4900
- box-shadow: var(--shadow-xs, none);
5477
+ white-space: nowrap;
5478
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5479
+ }
5480
+ .nx-sidebar__nav-item:hover:not(.nx-sidebar__nav-item--disabled) {
5481
+ background: var(--color-surfaceRaised, #f3f4f6);
4901
5482
  color: var(--color-text, #111827);
4902
- font-family: inherit;
4903
- font-size: inherit;
4904
- cursor: pointer;
4905
- transition:
4906
- background var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
4907
- color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
4908
- border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
4909
- box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
4910
- transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4911
5483
  }
4912
- .nx-pagination__item:not(:disabled):not(.nx-pagination__item--active):hover {
4913
- background: var(--color-neutral-100, #f3f4f6);
5484
+ .nx-sidebar__nav-item--selected {
5485
+ background: var(--color-brand-50, #f0f4ff);
5486
+ color: var(--color-brand-700, #4338ca);
5487
+ box-shadow: var(--shadow-sm, none);
4914
5488
  }
4915
- .nx-pagination__item:not(:disabled):active {
4916
- box-shadow: none;
4917
- transform: translate(1px, 1px);
5489
+ .nx-sidebar__nav-item--selected:hover {
5490
+ background: var(--color-brand-50, #f0f4ff);
4918
5491
  }
4919
- .nx-pagination__item--active {
4920
- background: var(--color-brand-500, #6366f1);
4921
- border-color: var(--color-brand-500, #6366f1);
4922
- color: var(--color-brand-onAccent, #ffffff);
4923
- box-shadow: var(--shadow-sm, none);
5492
+ .nx-sidebar__nav-item:focus-visible {
5493
+ outline: 2px solid var(--color-brand-500, #6366f1);
5494
+ outline-offset: -2px;
4924
5495
  }
4925
- .nx-pagination__item:disabled,
4926
- .nx-pagination__item--disabled {
4927
- opacity: 0.4;
5496
+ .nx-sidebar__nav-item--disabled {
5497
+ opacity: 0.5;
4928
5498
  cursor: not-allowed;
4929
5499
  }
4930
- .nx-pagination__ellipsis {
5500
+ .nx-sidebar__nav-item-icon {
4931
5501
  display: inline-flex;
4932
5502
  align-items: center;
4933
5503
  justify-content: center;
4934
- min-width: 2.25em;
4935
- height: 2.25em;
4936
- color: var(--color-textMuted, #6b7280);
5504
+ flex-shrink: 0;
5505
+ inline-size: 20px;
5506
+ block-size: 20px;
4937
5507
  }
4938
- .nx-pagination--xs {
4939
- font-size: var(--typography-sizeXs, 12px);
5508
+ .nx-sidebar__nav-item-label {
5509
+ overflow: hidden;
5510
+ text-overflow: ellipsis;
4940
5511
  }
4941
- .nx-pagination--sm {
4942
- font-size: var(--typography-sizeSm, 14px);
5512
+ .nx-sidebar__nav-item--collapsed {
5513
+ justify-content: center;
5514
+ padding-inline: 0;
4943
5515
  }
4944
- .nx-pagination--md {
4945
- font-size: var(--typography-sizeMd, 16px);
5516
+ .nx-sidebar--collapsed .nx-sidebar__nav-item-label {
5517
+ position: absolute;
5518
+ inline-size: 1px;
5519
+ block-size: 1px;
5520
+ overflow: hidden;
5521
+ clip: rect(0, 0, 0, 0);
5522
+ white-space: nowrap;
4946
5523
  }
4947
- .nx-pagination--lg {
4948
- font-size: var(--typography-sizeLg, 18px);
5524
+ .nx-sidebar__group {
5525
+ display: flex;
5526
+ flex-direction: column;
4949
5527
  }
4950
- .nx-pagination--xl {
4951
- font-size: var(--typography-sizeXl, 22px);
5528
+ .nx-sidebar__group-header-row {
5529
+ display: flex;
5530
+ align-items: center;
5531
+ gap: var(--spacing-xs, 4px);
4952
5532
  }
4953
- .nx-pagination--disabled {
4954
- opacity: 0.6;
5533
+ .nx-sidebar__group-header-row > .nx-sidebar__nav-item--group {
5534
+ flex: 1;
5535
+ min-inline-size: 0;
4955
5536
  }
4956
-
4957
- /* src/react/Breadcrumb.css */
4958
- .nx-breadcrumb {
4959
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5537
+ .nx-sidebar__nav-item--group {
5538
+ justify-content: flex-start;
4960
5539
  }
4961
- .nx-breadcrumb__list {
4962
- display: flex;
4963
- align-items: center;
4964
- flex-wrap: wrap;
4965
- list-style: none;
4966
- margin: 0;
4967
- padding: 0;
5540
+ .nx-sidebar__group-chevron {
5541
+ flex-shrink: 0;
5542
+ margin-inline-start: auto;
5543
+ transition: transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4968
5544
  }
4969
- .nx-breadcrumb__item {
5545
+ .nx-sidebar__group-chevron--open {
5546
+ transform: rotate(90deg);
5547
+ }
5548
+ .nx-sidebar__group-toggle .nx-sidebar__group-chevron {
5549
+ margin-inline-start: 0;
5550
+ }
5551
+ .nx-sidebar__group-toggle {
5552
+ appearance: none;
5553
+ background: transparent;
5554
+ border: none;
5555
+ margin: 0;
5556
+ padding: 2px;
4970
5557
  display: inline-flex;
4971
5558
  align-items: center;
4972
- color: var(--color-textMuted, #6b7280);
5559
+ justify-content: center;
5560
+ flex-shrink: 0;
5561
+ color: inherit;
5562
+ cursor: pointer;
5563
+ border-radius: var(--radius-sm, 6px);
4973
5564
  }
4974
- .nx-breadcrumb__item--current {
4975
- color: var(--color-text, #111827);
4976
- font-weight: var(--typography-weightMedium, 500);
5565
+ .nx-sidebar__group-toggle:hover {
5566
+ background: var(--color-surfaceRaised, #f3f4f6);
4977
5567
  }
4978
- .nx-breadcrumb__item--disabled {
5568
+ .nx-sidebar__group-toggle:focus-visible {
5569
+ outline: 2px solid var(--color-brand-500, #6366f1);
5570
+ outline-offset: 1px;
5571
+ }
5572
+ .nx-sidebar__group-toggle:disabled {
5573
+ cursor: not-allowed;
4979
5574
  opacity: 0.5;
4980
5575
  }
4981
- .nx-breadcrumb__label,
4982
- .nx-breadcrumb__link {
4983
- display: inline-flex;
4984
- align-items: center;
4985
- gap: 6px;
4986
- padding: 2px 8px;
4987
- border-radius: var(--radius-sm, 4px);
4988
- border: var(--border-widthThin, 1px) var(--border-style, solid) transparent;
4989
- transition:
4990
- background var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
4991
- border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
4992
- box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
4993
- color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
4994
- }
4995
- .nx-breadcrumb__link {
4996
- color: inherit;
4997
- text-decoration: none;
4998
- cursor: pointer;
4999
- }
5000
- .nx-breadcrumb__link:hover {
5001
- color: var(--color-brand-500, #6366f1);
5002
- background: var(--color-neutral-100, #f3f4f6);
5003
- border-color: var(--color-border, transparent);
5576
+ .nx-sidebar__group-children {
5577
+ display: flex;
5578
+ flex-direction: column;
5579
+ gap: var(--spacing-xs, 4px);
5580
+ padding-inline-start: var(--spacing-lg, 24px);
5581
+ margin-block-start: var(--spacing-xs, 4px);
5004
5582
  }
5005
- .nx-breadcrumb__link:focus-visible {
5006
- outline: 2px solid var(--color-brand-500, #6366f1);
5007
- outline-offset: 2px;
5583
+ @media (prefers-reduced-motion: reduce) {
5584
+ .nx-sidebar,
5585
+ .nx-sidebar__toggle,
5586
+ .nx-sidebar__nav-item,
5587
+ .nx-sidebar__group-chevron {
5588
+ transition: none;
5589
+ }
5008
5590
  }
5009
- .nx-breadcrumb__item--current .nx-breadcrumb__label {
5010
- background: var(--color-surfaceRaised, #f3f4f6);
5011
- border-color: var(--color-border, transparent);
5012
- box-shadow: var(--shadow-xs, none);
5013
- backdrop-filter: blur(var(--effects-backdropBlur, 0px));
5014
- -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
5591
+
5592
+ /* src/react/SpeedDial.css */
5593
+ .nx-speed-dial {
5594
+ display: inline-flex;
5015
5595
  }
5016
- .nx-breadcrumb__icon {
5596
+ .nx-speed-dial__fab {
5597
+ appearance: none;
5598
+ cursor: pointer;
5017
5599
  display: inline-flex;
5018
5600
  align-items: center;
5601
+ justify-content: center;
5602
+ border-radius: var(--radius-full, 9999px);
5603
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5604
+ background: var(--color-brand-500, #6366f1);
5605
+ color: var(--color-brand-onAccent, #ffffff);
5606
+ box-shadow: var(--shadow-lg, 0 10px 24px rgba(0, 0, 0, 0.18));
5607
+ transition:
5608
+ transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
5609
+ background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
5610
+ box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5019
5611
  }
5020
- .nx-breadcrumb__separator {
5021
- margin: 0 8px;
5022
- color: var(--color-textMuted, #6b7280);
5023
- }
5024
- .nx-breadcrumb--xs {
5025
- font-size: var(--typography-sizeXs, 12px);
5026
- }
5027
- .nx-breadcrumb--sm {
5028
- font-size: var(--typography-sizeSm, 14px);
5029
- }
5030
- .nx-breadcrumb--md {
5031
- font-size: var(--typography-sizeMd, 16px);
5612
+ .nx-speed-dial__fab:hover {
5613
+ background: var(--color-brand-600, #4f46e5);
5032
5614
  }
5033
- .nx-breadcrumb--lg {
5034
- font-size: var(--typography-sizeLg, 18px);
5615
+ .nx-speed-dial__fab:active {
5616
+ box-shadow: var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));
5035
5617
  }
5036
- .nx-breadcrumb--xl {
5037
- font-size: var(--typography-sizeXl, 22px);
5618
+ .nx-speed-dial__fab:focus-visible {
5619
+ outline: 2px solid var(--color-brand-700, #4338ca);
5620
+ outline-offset: 2px;
5038
5621
  }
5039
-
5040
- /* src/react/Skeleton.css */
5041
- .nx-skeleton {
5042
- display: block;
5043
- background: color-mix(in srgb, var(--color-text, #111827) 12%, var(--color-surface, #ffffff));
5044
- position: relative;
5045
- overflow: hidden;
5622
+ .nx-speed-dial__fab--open {
5623
+ transform: rotate(45deg);
5046
5624
  }
5047
- .nx-skeleton--text {
5048
- border-radius: var(--radius-sm, 4px);
5049
- block-size: 1em;
5050
- inline-size: 100%;
5625
+ .nx-speed-dial__fab--xs {
5626
+ inline-size: 32px;
5627
+ block-size: 32px;
5051
5628
  }
5052
- .nx-skeleton--circular {
5053
- border-radius: var(--radius-full, 999px);
5629
+ .nx-speed-dial__fab--sm {
5054
5630
  inline-size: 40px;
5055
5631
  block-size: 40px;
5056
5632
  }
5057
- .nx-skeleton--rectangular {
5058
- border-radius: var(--radius-md, 8px);
5059
- inline-size: 100%;
5060
- block-size: 100px;
5633
+ .nx-speed-dial__fab--md {
5634
+ inline-size: 56px;
5635
+ block-size: 56px;
5061
5636
  }
5062
- .nx-skeleton-group {
5637
+ .nx-speed-dial__fab--lg {
5638
+ inline-size: 68px;
5639
+ block-size: 68px;
5640
+ }
5641
+ .nx-speed-dial__fab--xl {
5642
+ inline-size: 80px;
5643
+ block-size: 80px;
5644
+ }
5645
+ .nx-speed-dial__list {
5646
+ z-index: var(--elevation-dropdown, 1050);
5063
5647
  display: flex;
5648
+ gap: var(--spacing-md, 16px);
5649
+ padding: 0;
5650
+ margin: 0;
5651
+ animation: nx-speed-dial-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5652
+ }
5653
+ .nx-speed-dial__list--vertical {
5064
5654
  flex-direction: column;
5065
- gap: var(--spacing-xs, 4px);
5655
+ align-items: center;
5066
5656
  }
5067
- .nx-skeleton--pulse {
5068
- animation: nx-skeleton-pulse var(--motion-durationSlow, 1.5s) var(--motion-easeStandard, ease) infinite;
5657
+ .nx-speed-dial__list--horizontal {
5658
+ flex-direction: row;
5659
+ align-items: center;
5069
5660
  }
5070
- @keyframes nx-skeleton-pulse {
5071
- 0%, 100% {
5072
- opacity: 1;
5661
+ @keyframes nx-speed-dial-in {
5662
+ from {
5663
+ opacity: 0;
5664
+ transform: scale(0.9);
5073
5665
  }
5074
- 50% {
5075
- opacity: 0.4;
5666
+ to {
5667
+ opacity: 1;
5668
+ transform: scale(1);
5076
5669
  }
5077
5670
  }
5078
- .nx-skeleton--wave::after {
5079
- content: "";
5080
- position: absolute;
5081
- inset: 0;
5082
- background:
5083
- linear-gradient(
5084
- 90deg,
5085
- transparent,
5086
- color-mix(in srgb, var(--color-surface, #ffffff) 50%, transparent),
5087
- transparent);
5088
- animation: nx-skeleton-wave var(--motion-durationSlow, 1.5s) linear infinite;
5671
+ .nx-speed-dial__action-wrapper {
5672
+ position: relative;
5673
+ display: flex;
5674
+ align-items: center;
5089
5675
  }
5090
- @keyframes nx-skeleton-wave {
5091
- 0% {
5092
- transform: translateX(-100%);
5093
- }
5094
- 100% {
5095
- transform: translateX(100%);
5096
- }
5676
+ .nx-speed-dial__list--vertical .nx-speed-dial__action-wrapper {
5677
+ flex-direction: row-reverse;
5678
+ justify-content: flex-end;
5097
5679
  }
5098
- .nx-skeleton--shine {
5099
- background:
5100
- linear-gradient(
5101
- 110deg,
5102
- color-mix(in srgb, var(--color-text, #111827) 12%, var(--color-surface, #ffffff)) 35%,
5103
- color-mix(in srgb, var(--color-surface, #ffffff) 65%, var(--color-text, #111827) 12%) 50%,
5104
- color-mix(in srgb, var(--color-text, #111827) 12%, var(--color-surface, #ffffff)) 65%);
5105
- background-size: 300% 100%;
5106
- animation: nx-skeleton-shine var(--motion-durationSlow, 1.5s) ease-in-out infinite;
5680
+ .nx-speed-dial__list--horizontal .nx-speed-dial__action-wrapper {
5681
+ flex-direction: column-reverse;
5107
5682
  }
5108
- @keyframes nx-skeleton-shine {
5109
- 0% {
5110
- background-position: 150% 0;
5111
- }
5112
- 100% {
5113
- background-position: -50% 0;
5114
- }
5683
+ .nx-speed-dial__action {
5684
+ appearance: none;
5685
+ cursor: pointer;
5686
+ display: inline-flex;
5687
+ align-items: center;
5688
+ justify-content: center;
5689
+ border-radius: var(--radius-full, 9999px);
5690
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5691
+ background: var(--color-surface, #ffffff);
5692
+ color: var(--color-text, #111827);
5693
+ box-shadow: var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));
5694
+ transition:
5695
+ background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
5696
+ box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
5697
+ transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5115
5698
  }
5116
- .nx-skeleton--glow {
5117
- animation: nx-skeleton-glow var(--motion-durationSlow, 1.5s) var(--motion-easeStandard, ease) infinite;
5699
+ .nx-speed-dial__action:hover:not(.nx-speed-dial__action--disabled),
5700
+ .nx-speed-dial__action:focus-visible {
5701
+ background: var(--color-brand-50, #f0f4ff);
5702
+ color: var(--color-brand-700, #4338ca);
5118
5703
  }
5119
- @keyframes nx-skeleton-glow {
5120
- 0%, 100% {
5121
- box-shadow: 0 0 0 0 color-mix(in srgb, var(--color-brand-500, #6366f1) 35%, transparent);
5122
- }
5123
- 50% {
5124
- box-shadow: 0 0 12px 4px color-mix(in srgb, var(--color-brand-500, #6366f1) 35%, transparent);
5125
- }
5704
+ .nx-speed-dial__action:active:not(.nx-speed-dial__action--disabled) {
5705
+ box-shadow: var(--shadow-xs, 0 1px 3px rgba(0, 0, 0, 0.1));
5706
+ transform: translate(1px, 1px);
5126
5707
  }
5127
- @media (prefers-reduced-motion: reduce) {
5128
- .nx-skeleton--pulse,
5129
- .nx-skeleton--wave::after,
5130
- .nx-skeleton--shine,
5131
- .nx-skeleton--glow {
5132
- animation: none;
5133
- }
5708
+ .nx-speed-dial__action:focus-visible {
5709
+ outline: 2px solid var(--color-brand-500, #6366f1);
5710
+ outline-offset: 2px;
5134
5711
  }
5135
-
5136
- /* src/react/Table.css */
5137
- .nx-table-wrapper {
5138
- width: 100%;
5139
- overflow: auto;
5140
- border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5141
- border-radius: var(--radius-md, 8px);
5142
- background: var(--color-surface, #ffffff);
5143
- box-shadow: var(--shadow-sm, none);
5712
+ .nx-speed-dial__action--disabled {
5713
+ opacity: 0.5;
5714
+ cursor: not-allowed;
5144
5715
  }
5145
- .nx-table {
5146
- width: 100%;
5147
- border-collapse: collapse;
5148
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5149
- color: var(--color-text, #111827);
5716
+ .nx-speed-dial__action--xs {
5717
+ inline-size: 26px;
5718
+ block-size: 26px;
5150
5719
  }
5151
- .nx-table__caption {
5152
- caption-side: top;
5153
- text-align: left;
5154
- padding: var(--spacing-sm, 8px) var(--spacing-md, 16px);
5155
- font-size: var(--typography-sizeSm, 14px);
5156
- color: var(--color-textMuted, #6b7280);
5720
+ .nx-speed-dial__action--sm {
5721
+ inline-size: 32px;
5722
+ block-size: 32px;
5157
5723
  }
5158
- .nx-table__caption--sr-only {
5159
- position: absolute;
5160
- width: 1px;
5161
- height: 1px;
5162
- padding: 0;
5163
- margin: -1px;
5164
- overflow: hidden;
5165
- clip: rect(0, 0, 0, 0);
5166
- white-space: nowrap;
5167
- border: 0;
5724
+ .nx-speed-dial__action--md {
5725
+ inline-size: 40px;
5726
+ block-size: 40px;
5168
5727
  }
5169
- .nx-table__header {
5170
- background: var(--color-surfaceRaised, #f9fafb);
5728
+ .nx-speed-dial__action--lg {
5729
+ inline-size: 48px;
5730
+ block-size: 48px;
5171
5731
  }
5172
- .nx-table--sticky-header .nx-table__header {
5173
- position: sticky;
5174
- top: 0;
5175
- z-index: 1;
5732
+ .nx-speed-dial__action--xl {
5733
+ inline-size: 56px;
5734
+ block-size: 56px;
5176
5735
  }
5177
- .nx-table__head-cell {
5178
- text-align: left;
5179
- font-weight: var(--typography-weightMedium, 500);
5180
- color: var(--color-textMuted, #6b7280);
5181
- border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5736
+ .nx-speed-dial__action-label {
5182
5737
  white-space: nowrap;
5738
+ padding: 4px 10px;
5739
+ border-radius: var(--radius-sm, 6px);
5740
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5741
+ background: var(--color-surfaceRaised, #f3f4f6);
5742
+ color: var(--color-text, #111827);
5743
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
5744
+ font-size: var(--typography-sizeSm, 14px);
5745
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.1));
5183
5746
  }
5184
- .nx-table__head-cell-content {
5185
- display: inline-flex;
5186
- align-items: center;
5187
- gap: 0.35em;
5747
+ .nx-speed-dial__list--vertical .nx-speed-dial__action-label {
5748
+ margin-inline-end: var(--spacing-sm, 8px);
5188
5749
  }
5189
- .nx-table__head-cell--sortable {
5190
- cursor: pointer;
5191
- user-select: none;
5192
- outline: none;
5750
+ .nx-speed-dial__list--horizontal .nx-speed-dial__action-label {
5751
+ margin-block-end: var(--spacing-sm, 8px);
5193
5752
  }
5194
- .nx-table__head-cell--sortable:hover {
5195
- color: var(--color-text, #111827);
5753
+ @media (prefers-reduced-motion: reduce) {
5754
+ .nx-speed-dial__fab,
5755
+ .nx-speed-dial__list,
5756
+ .nx-speed-dial__action {
5757
+ transition: none;
5758
+ animation-duration: 0.01ms;
5759
+ }
5196
5760
  }
5197
- .nx-table__head-cell--sortable:focus-visible {
5198
- outline: 2px solid var(--color-brand-500, #6366f1);
5761
+
5762
+ /* src/react/CommandPalette.css */
5763
+ .nx-command__backdrop {
5764
+ position: fixed;
5765
+ inset: 0;
5766
+ z-index: var(--elevation-modal, 1000);
5767
+ display: flex;
5768
+ justify-content: center;
5769
+ padding-top: 12vh;
5770
+ padding-inline: var(--spacing-lg, 24px);
5771
+ background: rgba(0, 0, 0, 0.5);
5772
+ backdrop-filter: blur(2px);
5773
+ animation: nx-command-backdrop-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5774
+ }
5775
+ @keyframes nx-command-backdrop-in {
5776
+ from {
5777
+ opacity: 0;
5778
+ }
5779
+ to {
5780
+ opacity: 1;
5781
+ }
5782
+ }
5783
+ .nx-command {
5784
+ display: flex;
5785
+ flex-direction: column;
5786
+ inline-size: 100%;
5787
+ max-inline-size: 640px;
5788
+ max-block-size: min(480px, 70vh);
5789
+ background: var(--color-neutral-0, #ffffff);
5790
+ border-radius: var(--radius-lg, 14px);
5791
+ box-shadow: var(--shadow-xl, 0 20px 40px rgba(0, 0, 0, 0.25));
5792
+ border: 1px solid var(--color-neutral-200, #e5e5e5);
5793
+ overflow: hidden;
5794
+ outline: none;
5795
+ animation: nx-command-panel-in var(--motion-durationNormal, 180ms) var(--motion-easeEmphasized, ease);
5796
+ }
5797
+ @keyframes nx-command-panel-in {
5798
+ from {
5799
+ opacity: 0;
5800
+ transform: translateY(-8px) scale(0.98);
5801
+ }
5802
+ to {
5803
+ opacity: 1;
5804
+ transform: translateY(0) scale(1);
5805
+ }
5806
+ }
5807
+ .nx-command__search {
5808
+ display: flex;
5809
+ align-items: center;
5810
+ gap: 10px;
5811
+ padding: 14px 16px;
5812
+ border-bottom: 1px solid var(--color-neutral-200, #e5e5e5);
5813
+ flex-shrink: 0;
5814
+ }
5815
+ .nx-command__search-icon {
5816
+ flex-shrink: 0;
5817
+ color: var(--color-neutral-400, #a3a3a3);
5818
+ }
5819
+ .nx-command__input {
5820
+ flex: 1;
5821
+ border: none;
5822
+ outline: none;
5823
+ background: transparent;
5824
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
5825
+ font-size: var(--typography-sizeMd, 16px);
5826
+ color: var(--color-neutral-900, #171717);
5827
+ }
5828
+ .nx-command__input::placeholder {
5829
+ color: var(--color-neutral-400, #a3a3a3);
5830
+ }
5831
+ .nx-command__list {
5832
+ overflow-y: auto;
5833
+ padding: 8px;
5834
+ }
5835
+ .nx-command__group + .nx-command__group {
5836
+ margin-top: 4px;
5837
+ }
5838
+ .nx-command__group-label {
5839
+ padding: 6px 8px 4px;
5840
+ font-size: var(--typography-sizeXs, 12px);
5841
+ font-weight: var(--typography-weightMedium, 500);
5842
+ color: var(--color-neutral-400, #a3a3a3);
5843
+ text-transform: uppercase;
5844
+ letter-spacing: 0.04em;
5845
+ }
5846
+ .nx-command__item {
5847
+ display: flex;
5848
+ align-items: center;
5849
+ gap: 10px;
5850
+ padding: 9px 10px;
5851
+ border-radius: var(--radius-sm, 4px);
5852
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
5853
+ font-size: var(--typography-sizeSm, 14px);
5854
+ color: var(--color-neutral-800, #262626);
5855
+ cursor: pointer;
5856
+ }
5857
+ .nx-command__item--active {
5858
+ background: var(--color-brand-50, #eef2ff);
5859
+ color: var(--color-brand-700, #4338ca);
5860
+ }
5861
+ .nx-command__item--disabled {
5862
+ opacity: 0.5;
5863
+ cursor: not-allowed;
5864
+ }
5865
+ .nx-command__item-label {
5866
+ flex: 1;
5867
+ overflow: hidden;
5868
+ white-space: nowrap;
5869
+ text-overflow: ellipsis;
5870
+ }
5871
+ .nx-command__item-description {
5872
+ color: var(--color-neutral-400, #a3a3a3);
5873
+ font-size: 0.9em;
5874
+ overflow: hidden;
5875
+ white-space: nowrap;
5876
+ text-overflow: ellipsis;
5877
+ }
5878
+ .nx-command__item-shortcut {
5879
+ flex-shrink: 0;
5880
+ padding: 2px 6px;
5881
+ border-radius: var(--radius-sm, 4px);
5882
+ background: var(--color-neutral-100, #f5f5f5);
5883
+ color: var(--color-neutral-500, #737373);
5884
+ font-size: var(--typography-sizeXs, 12px);
5885
+ font-family: var(--typography-fontMono, ui-monospace, monospace);
5886
+ }
5887
+ .nx-command__item--active .nx-command__item-shortcut {
5888
+ background: var(--color-neutral-0, #ffffff);
5889
+ }
5890
+ .nx-command__empty {
5891
+ padding: 24px 8px;
5892
+ text-align: center;
5893
+ color: var(--color-neutral-400, #a3a3a3);
5894
+ font-size: var(--typography-sizeSm, 14px);
5895
+ }
5896
+ @media (prefers-reduced-motion: reduce) {
5897
+ .nx-command__backdrop,
5898
+ .nx-command {
5899
+ animation-duration: 0.01ms;
5900
+ }
5901
+ }
5902
+
5903
+ /* src/react/NumberInput.css */
5904
+ .nx-number-input-wrapper {
5905
+ display: flex;
5906
+ align-items: stretch;
5907
+ background: var(--color-surface, #ffffff);
5908
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5909
+ border-radius: var(--radius-md, 8px);
5910
+ box-shadow: var(--shadow-xs, none);
5911
+ overflow: hidden;
5912
+ transition: border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5913
+ }
5914
+ .nx-number-input-wrapper:focus-within {
5915
+ border-color: var(--color-brand-500, #6366f1);
5916
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand-500, #6366f1) 20%, transparent);
5917
+ }
5918
+ .nx-number-input-wrapper--invalid {
5919
+ border-color: var(--color-danger-base, #ef4444);
5920
+ }
5921
+ .nx-number-input-wrapper--invalid:focus-within {
5922
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-danger-base, #ef4444) 20%, transparent);
5923
+ }
5924
+ .nx-number-input-wrapper--disabled {
5925
+ opacity: 0.5;
5926
+ cursor: not-allowed;
5927
+ background: var(--color-neutral-50, #f9fafb);
5928
+ }
5929
+ .nx-number-input {
5930
+ flex: 1;
5931
+ min-width: 0;
5932
+ border: none;
5933
+ outline: none;
5934
+ background: transparent;
5935
+ padding: 8px 12px;
5936
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
5937
+ color: var(--color-text, #111827);
5938
+ }
5939
+ .nx-number-input:disabled {
5940
+ cursor: not-allowed;
5941
+ }
5942
+ .nx-number-input-wrapper--xs {
5943
+ font-size: var(--typography-sizeXs, 12px);
5944
+ }
5945
+ .nx-number-input-wrapper--sm {
5946
+ font-size: var(--typography-sizeSm, 14px);
5947
+ }
5948
+ .nx-number-input-wrapper--md {
5949
+ font-size: var(--typography-sizeMd, 16px);
5950
+ }
5951
+ .nx-number-input-wrapper--lg {
5952
+ font-size: var(--typography-sizeLg, 18px);
5953
+ }
5954
+ .nx-number-input-wrapper--xl {
5955
+ font-size: var(--typography-sizeXl, 22px);
5956
+ }
5957
+ .nx-number-input--xs,
5958
+ .nx-number-input--sm,
5959
+ .nx-number-input--md,
5960
+ .nx-number-input--lg,
5961
+ .nx-number-input--xl {
5962
+ font-size: inherit;
5963
+ }
5964
+ .nx-number-input__stepper {
5965
+ display: flex;
5966
+ flex-direction: column;
5967
+ flex-shrink: 0;
5968
+ border-left: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5969
+ }
5970
+ .nx-number-input__stepper-btn {
5971
+ flex: 1;
5972
+ display: flex;
5973
+ align-items: center;
5974
+ justify-content: center;
5975
+ min-width: 1.75em;
5976
+ border: none;
5977
+ background: transparent;
5978
+ color: var(--color-textMuted, #6b7280);
5979
+ font-family: inherit;
5980
+ font-size: inherit;
5981
+ line-height: 1;
5982
+ cursor: pointer;
5983
+ padding: 0 8px;
5984
+ transition: background var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5985
+ }
5986
+ .nx-number-input__stepper-btn:first-child {
5987
+ border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5988
+ }
5989
+ .nx-number-input__stepper-btn:not(:disabled):hover {
5990
+ background: var(--color-neutral-100, #f3f4f6);
5991
+ color: var(--color-text, #111827);
5992
+ }
5993
+ .nx-number-input__stepper-btn:disabled {
5994
+ opacity: 0.35;
5995
+ cursor: not-allowed;
5996
+ }
5997
+
5998
+ /* src/react/FileUpload.css */
5999
+ .nx-file-upload {
6000
+ position: relative;
6001
+ display: flex;
6002
+ flex-direction: column;
6003
+ align-items: center;
6004
+ justify-content: center;
6005
+ gap: var(--spacing-sm, 8px);
6006
+ inline-size: 100%;
6007
+ box-sizing: border-box;
6008
+ padding: var(--spacing-lg, 24px);
6009
+ border: var(--border-widthMedium, 2px) dashed var(--color-border, #e5e7eb);
6010
+ border-radius: var(--radius-lg, 12px);
6011
+ background: var(--color-surface, #ffffff);
6012
+ text-align: center;
6013
+ transition: border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), background var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
6014
+ }
6015
+ .nx-file-upload--dragging {
6016
+ border-color: var(--color-brand-500, #6366f1);
6017
+ background: color-mix(in srgb, var(--color-brand-500, #6366f1) 6%, var(--color-surface, #ffffff));
6018
+ }
6019
+ .nx-file-upload--invalid {
6020
+ border-color: var(--color-danger-base, #ef4444);
6021
+ }
6022
+ .nx-file-upload--disabled {
6023
+ opacity: 0.5;
6024
+ cursor: not-allowed;
6025
+ }
6026
+ .nx-file-upload--xs,
6027
+ .nx-file-upload--sm {
6028
+ padding: var(--spacing-md, 16px);
6029
+ }
6030
+ .nx-file-upload--lg,
6031
+ .nx-file-upload--xl {
6032
+ padding: var(--spacing-xl, 32px);
6033
+ }
6034
+ .nx-file-upload__input {
6035
+ position: absolute;
6036
+ width: 1px;
6037
+ height: 1px;
6038
+ padding: 0;
6039
+ margin: -1px;
6040
+ overflow: hidden;
6041
+ clip: rect(0, 0, 0, 0);
6042
+ white-space: nowrap;
6043
+ border: 0;
6044
+ }
6045
+ .nx-file-upload__prompt {
6046
+ display: flex;
6047
+ flex-direction: column;
6048
+ align-items: center;
6049
+ gap: var(--spacing-sm, 8px);
6050
+ }
6051
+ .nx-file-upload__hint {
6052
+ margin: 0;
6053
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6054
+ font-size: var(--typography-sizeSm, 14px);
6055
+ color: var(--color-textMuted, #6b7280);
6056
+ }
6057
+ .nx-file-upload__list {
6058
+ list-style: none;
6059
+ margin: var(--spacing-sm, 8px) 0 0;
6060
+ padding: 0;
6061
+ display: flex;
6062
+ flex-direction: column;
6063
+ gap: var(--spacing-xs, 4px);
6064
+ }
6065
+ .nx-file-upload__item {
6066
+ display: flex;
6067
+ align-items: center;
6068
+ gap: var(--spacing-sm, 8px);
6069
+ padding: 6px 10px;
6070
+ border-radius: var(--radius-sm, 4px);
6071
+ background: var(--color-neutral-50, #f9fafb);
6072
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6073
+ font-size: var(--typography-sizeSm, 14px);
6074
+ }
6075
+ .nx-file-upload__item-name {
6076
+ flex: 1;
6077
+ min-width: 0;
6078
+ overflow: hidden;
6079
+ text-overflow: ellipsis;
6080
+ white-space: nowrap;
6081
+ color: var(--color-text, #111827);
6082
+ }
6083
+ .nx-file-upload__item-size {
6084
+ flex-shrink: 0;
6085
+ color: var(--color-textMuted, #6b7280);
6086
+ font-size: var(--typography-sizeXs, 12px);
6087
+ }
6088
+ .nx-file-upload__item-remove {
6089
+ flex-shrink: 0;
6090
+ border: none;
6091
+ background: transparent;
6092
+ cursor: pointer;
6093
+ color: var(--color-textMuted, #6b7280);
6094
+ font-size: var(--typography-sizeMd, 16px);
6095
+ line-height: 1;
6096
+ padding: 0 4px;
6097
+ }
6098
+ .nx-file-upload__item-remove:hover {
6099
+ color: var(--color-danger-base, #ef4444);
6100
+ }
6101
+ .nx-file-upload__item-remove:disabled {
6102
+ cursor: not-allowed;
6103
+ opacity: 0.5;
6104
+ }
6105
+
6106
+ /* src/react/Pagination.css */
6107
+ .nx-pagination {
6108
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6109
+ }
6110
+ .nx-pagination__list {
6111
+ display: flex;
6112
+ align-items: center;
6113
+ flex-wrap: wrap;
6114
+ gap: var(--spacing-xs, 4px);
6115
+ list-style: none;
6116
+ margin: 0;
6117
+ padding: 0;
6118
+ }
6119
+ .nx-pagination__item {
6120
+ display: inline-flex;
6121
+ align-items: center;
6122
+ justify-content: center;
6123
+ min-width: 2.25em;
6124
+ height: 2.25em;
6125
+ padding: 0 8px;
6126
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
6127
+ border-radius: var(--radius-md, 8px);
6128
+ background: transparent;
6129
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
6130
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
6131
+ box-shadow: var(--shadow-xs, none);
6132
+ color: var(--color-text, #111827);
6133
+ font-family: inherit;
6134
+ font-size: inherit;
6135
+ cursor: pointer;
6136
+ transition:
6137
+ background var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
6138
+ color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
6139
+ border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
6140
+ box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
6141
+ transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
6142
+ }
6143
+ .nx-pagination__item:not(:disabled):not(.nx-pagination__item--active):hover {
6144
+ background: var(--color-neutral-100, #f3f4f6);
6145
+ }
6146
+ .nx-pagination__item:not(:disabled):active {
6147
+ box-shadow: none;
6148
+ transform: translate(1px, 1px);
6149
+ }
6150
+ .nx-pagination__item--active {
6151
+ background: var(--color-brand-500, #6366f1);
6152
+ border-color: var(--color-brand-500, #6366f1);
6153
+ color: var(--color-brand-onAccent, #ffffff);
6154
+ box-shadow: var(--shadow-sm, none);
6155
+ }
6156
+ .nx-pagination__item:disabled,
6157
+ .nx-pagination__item--disabled {
6158
+ opacity: 0.4;
6159
+ cursor: not-allowed;
6160
+ }
6161
+ .nx-pagination__ellipsis {
6162
+ display: inline-flex;
6163
+ align-items: center;
6164
+ justify-content: center;
6165
+ min-width: 2.25em;
6166
+ height: 2.25em;
6167
+ color: var(--color-textMuted, #6b7280);
6168
+ }
6169
+ .nx-pagination--xs {
6170
+ font-size: var(--typography-sizeXs, 12px);
6171
+ }
6172
+ .nx-pagination--sm {
6173
+ font-size: var(--typography-sizeSm, 14px);
6174
+ }
6175
+ .nx-pagination--md {
6176
+ font-size: var(--typography-sizeMd, 16px);
6177
+ }
6178
+ .nx-pagination--lg {
6179
+ font-size: var(--typography-sizeLg, 18px);
6180
+ }
6181
+ .nx-pagination--xl {
6182
+ font-size: var(--typography-sizeXl, 22px);
6183
+ }
6184
+ .nx-pagination--disabled {
6185
+ opacity: 0.6;
6186
+ }
6187
+
6188
+ /* src/react/Breadcrumb.css */
6189
+ .nx-breadcrumb {
6190
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6191
+ }
6192
+ .nx-breadcrumb__list {
6193
+ display: flex;
6194
+ align-items: center;
6195
+ flex-wrap: wrap;
6196
+ list-style: none;
6197
+ margin: 0;
6198
+ padding: 0;
6199
+ }
6200
+ .nx-breadcrumb__item {
6201
+ display: inline-flex;
6202
+ align-items: center;
6203
+ color: var(--color-textMuted, #6b7280);
6204
+ }
6205
+ .nx-breadcrumb__item--current {
6206
+ color: var(--color-text, #111827);
6207
+ font-weight: var(--typography-weightMedium, 500);
6208
+ }
6209
+ .nx-breadcrumb__item--disabled {
6210
+ opacity: 0.5;
6211
+ }
6212
+ .nx-breadcrumb__label,
6213
+ .nx-breadcrumb__link {
6214
+ display: inline-flex;
6215
+ align-items: center;
6216
+ gap: 6px;
6217
+ padding: 2px 8px;
6218
+ border-radius: var(--radius-sm, 4px);
6219
+ border: var(--border-widthThin, 1px) var(--border-style, solid) transparent;
6220
+ transition:
6221
+ background var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
6222
+ border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
6223
+ box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease),
6224
+ color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
6225
+ }
6226
+ .nx-breadcrumb__link {
6227
+ color: inherit;
6228
+ text-decoration: none;
6229
+ cursor: pointer;
6230
+ }
6231
+ .nx-breadcrumb__link:hover {
6232
+ color: var(--color-brand-500, #6366f1);
6233
+ background: var(--color-neutral-100, #f3f4f6);
6234
+ border-color: var(--color-border, transparent);
6235
+ }
6236
+ .nx-breadcrumb__link:focus-visible {
6237
+ outline: 2px solid var(--color-brand-500, #6366f1);
6238
+ outline-offset: 2px;
6239
+ }
6240
+ .nx-breadcrumb__item--current .nx-breadcrumb__label {
6241
+ background: var(--color-surfaceRaised, #f3f4f6);
6242
+ border-color: var(--color-border, transparent);
6243
+ box-shadow: var(--shadow-xs, none);
6244
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
6245
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
6246
+ }
6247
+ .nx-breadcrumb__icon {
6248
+ display: inline-flex;
6249
+ align-items: center;
6250
+ }
6251
+ .nx-breadcrumb__separator {
6252
+ margin: 0 8px;
6253
+ color: var(--color-textMuted, #6b7280);
6254
+ }
6255
+ .nx-breadcrumb--xs {
6256
+ font-size: var(--typography-sizeXs, 12px);
6257
+ }
6258
+ .nx-breadcrumb--sm {
6259
+ font-size: var(--typography-sizeSm, 14px);
6260
+ }
6261
+ .nx-breadcrumb--md {
6262
+ font-size: var(--typography-sizeMd, 16px);
6263
+ }
6264
+ .nx-breadcrumb--lg {
6265
+ font-size: var(--typography-sizeLg, 18px);
6266
+ }
6267
+ .nx-breadcrumb--xl {
6268
+ font-size: var(--typography-sizeXl, 22px);
6269
+ }
6270
+
6271
+ /* src/react/Skeleton.css */
6272
+ .nx-skeleton {
6273
+ display: block;
6274
+ background: color-mix(in srgb, var(--color-text, #111827) 12%, var(--color-surface, #ffffff));
6275
+ position: relative;
6276
+ overflow: hidden;
6277
+ }
6278
+ .nx-skeleton--text {
6279
+ border-radius: var(--radius-sm, 4px);
6280
+ block-size: 1em;
6281
+ inline-size: 100%;
6282
+ }
6283
+ .nx-skeleton--circular {
6284
+ border-radius: var(--radius-full, 999px);
6285
+ inline-size: 40px;
6286
+ block-size: 40px;
6287
+ }
6288
+ .nx-skeleton--rectangular {
6289
+ border-radius: var(--radius-md, 8px);
6290
+ inline-size: 100%;
6291
+ block-size: 100px;
6292
+ }
6293
+ .nx-skeleton-group {
6294
+ display: flex;
6295
+ flex-direction: column;
6296
+ gap: var(--spacing-xs, 4px);
6297
+ }
6298
+ .nx-skeleton--pulse {
6299
+ animation: nx-skeleton-pulse var(--motion-durationSlow, 1.5s) var(--motion-easeStandard, ease) infinite;
6300
+ }
6301
+ @keyframes nx-skeleton-pulse {
6302
+ 0%, 100% {
6303
+ opacity: 1;
6304
+ }
6305
+ 50% {
6306
+ opacity: 0.4;
6307
+ }
6308
+ }
6309
+ .nx-skeleton--wave::after {
6310
+ content: "";
6311
+ position: absolute;
6312
+ inset: 0;
6313
+ background:
6314
+ linear-gradient(
6315
+ 90deg,
6316
+ transparent,
6317
+ color-mix(in srgb, var(--color-surface, #ffffff) 50%, transparent),
6318
+ transparent);
6319
+ animation: nx-skeleton-wave var(--motion-durationSlow, 1.5s) linear infinite;
6320
+ }
6321
+ @keyframes nx-skeleton-wave {
6322
+ 0% {
6323
+ transform: translateX(-100%);
6324
+ }
6325
+ 100% {
6326
+ transform: translateX(100%);
6327
+ }
6328
+ }
6329
+ .nx-skeleton--shine {
6330
+ background:
6331
+ linear-gradient(
6332
+ 110deg,
6333
+ color-mix(in srgb, var(--color-text, #111827) 12%, var(--color-surface, #ffffff)) 35%,
6334
+ color-mix(in srgb, var(--color-surface, #ffffff) 65%, var(--color-text, #111827) 12%) 50%,
6335
+ color-mix(in srgb, var(--color-text, #111827) 12%, var(--color-surface, #ffffff)) 65%);
6336
+ background-size: 300% 100%;
6337
+ animation: nx-skeleton-shine var(--motion-durationSlow, 1.5s) ease-in-out infinite;
6338
+ }
6339
+ @keyframes nx-skeleton-shine {
6340
+ 0% {
6341
+ background-position: 150% 0;
6342
+ }
6343
+ 100% {
6344
+ background-position: -50% 0;
6345
+ }
6346
+ }
6347
+ .nx-skeleton--glow {
6348
+ animation: nx-skeleton-glow var(--motion-durationSlow, 1.5s) var(--motion-easeStandard, ease) infinite;
6349
+ }
6350
+ @keyframes nx-skeleton-glow {
6351
+ 0%, 100% {
6352
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--color-brand-500, #6366f1) 35%, transparent);
6353
+ }
6354
+ 50% {
6355
+ box-shadow: 0 0 12px 4px color-mix(in srgb, var(--color-brand-500, #6366f1) 35%, transparent);
6356
+ }
6357
+ }
6358
+ @media (prefers-reduced-motion: reduce) {
6359
+ .nx-skeleton--pulse,
6360
+ .nx-skeleton--wave::after,
6361
+ .nx-skeleton--shine,
6362
+ .nx-skeleton--glow {
6363
+ animation: none;
6364
+ }
6365
+ }
6366
+
6367
+ /* src/react/Table.css */
6368
+ .nx-table-wrapper {
6369
+ width: 100%;
6370
+ overflow: auto;
6371
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
6372
+ border-radius: var(--radius-md, 8px);
6373
+ background: var(--color-surface, #ffffff);
6374
+ box-shadow: var(--shadow-sm, none);
6375
+ }
6376
+ .nx-table {
6377
+ width: 100%;
6378
+ border-collapse: collapse;
6379
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6380
+ color: var(--color-text, #111827);
6381
+ }
6382
+ .nx-table__caption {
6383
+ caption-side: top;
6384
+ text-align: left;
6385
+ padding: var(--spacing-sm, 8px) var(--spacing-md, 16px);
6386
+ font-size: var(--typography-sizeSm, 14px);
6387
+ color: var(--color-textMuted, #6b7280);
6388
+ }
6389
+ .nx-table__caption--sr-only {
6390
+ position: absolute;
6391
+ width: 1px;
6392
+ height: 1px;
6393
+ padding: 0;
6394
+ margin: -1px;
6395
+ overflow: hidden;
6396
+ clip: rect(0, 0, 0, 0);
6397
+ white-space: nowrap;
6398
+ border: 0;
6399
+ }
6400
+ .nx-table__header {
6401
+ background: var(--color-surfaceRaised, #f9fafb);
6402
+ }
6403
+ .nx-table--sticky-header .nx-table__header {
6404
+ position: sticky;
6405
+ top: 0;
6406
+ z-index: 1;
6407
+ }
6408
+ .nx-table__head-cell {
6409
+ text-align: left;
6410
+ font-weight: var(--typography-weightMedium, 500);
6411
+ color: var(--color-textMuted, #6b7280);
6412
+ border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
6413
+ white-space: nowrap;
6414
+ }
6415
+ .nx-table__head-cell-content {
6416
+ display: inline-flex;
6417
+ align-items: center;
6418
+ gap: 0.35em;
6419
+ }
6420
+ .nx-table__head-cell--sortable {
6421
+ cursor: pointer;
6422
+ user-select: none;
6423
+ outline: none;
6424
+ }
6425
+ .nx-table__head-cell--sortable:hover {
6426
+ color: var(--color-text, #111827);
6427
+ }
6428
+ .nx-table__head-cell--sortable:focus-visible {
6429
+ outline: 2px solid var(--color-brand-500, #6366f1);
6430
+ outline-offset: -2px;
6431
+ }
6432
+ .nx-table__sort-icon {
6433
+ display: inline-flex;
6434
+ flex-direction: column;
6435
+ width: 10px;
6436
+ height: 12px;
6437
+ }
6438
+ .nx-table__sort-arrow-up,
6439
+ .nx-table__sort-arrow-down {
6440
+ opacity: 0.25;
6441
+ }
6442
+ .nx-table__sort-icon[data-direction=asc] .nx-table__sort-arrow-up {
6443
+ opacity: 1;
6444
+ }
6445
+ .nx-table__sort-icon[data-direction=desc] .nx-table__sort-arrow-down {
6446
+ opacity: 1;
6447
+ }
6448
+ .nx-table__body .nx-table__row {
6449
+ border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
6450
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
6451
+ }
6452
+ .nx-table__body .nx-table__row:last-child {
6453
+ border-bottom: none;
6454
+ }
6455
+ .nx-table--striped .nx-table__body .nx-table__row:nth-child(even) {
6456
+ background: var(--color-surfaceRaised, #f9fafb);
6457
+ }
6458
+ .nx-table__row--clickable {
6459
+ cursor: pointer;
6460
+ }
6461
+ .nx-table__row--clickable:hover {
6462
+ background: var(--color-neutral-100, #f3f4f6);
6463
+ }
6464
+ .nx-table__row--selected {
6465
+ background: var(--color-brand-50, #eef2ff);
6466
+ }
6467
+ .nx-table__row--selected.nx-table__row--clickable:hover {
6468
+ background: var(--color-brand-50, #eef2ff);
6469
+ }
6470
+ .nx-table__cell {
6471
+ vertical-align: middle;
6472
+ }
6473
+ .nx-table__empty-cell {
6474
+ text-align: center;
6475
+ padding: var(--spacing-xl, 32px) var(--spacing-md, 16px);
6476
+ color: var(--color-textMuted, #6b7280);
6477
+ }
6478
+ .nx-table__cell .nx-field,
6479
+ .nx-table__head-cell .nx-field {
6480
+ display: inline-flex;
6481
+ }
6482
+ .nx-table--bordered .nx-table__head-cell,
6483
+ .nx-table--bordered .nx-table__cell {
6484
+ border-right: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
6485
+ }
6486
+ .nx-table--bordered .nx-table__head-cell:last-child,
6487
+ .nx-table--bordered .nx-table__cell:last-child {
6488
+ border-right: none;
6489
+ }
6490
+ .nx-table--xs .nx-table__head-cell,
6491
+ .nx-table--xs .nx-table__cell {
6492
+ padding: 6px 10px;
6493
+ font-size: var(--typography-sizeXs, 12px);
6494
+ }
6495
+ .nx-table--sm .nx-table__head-cell,
6496
+ .nx-table--sm .nx-table__cell {
6497
+ padding: 8px 12px;
6498
+ font-size: var(--typography-sizeSm, 14px);
6499
+ }
6500
+ .nx-table--md .nx-table__head-cell,
6501
+ .nx-table--md .nx-table__cell {
6502
+ padding: 10px 16px;
6503
+ font-size: var(--typography-sizeSm, 14px);
6504
+ }
6505
+ .nx-table--lg .nx-table__head-cell,
6506
+ .nx-table--lg .nx-table__cell {
6507
+ padding: 12px 18px;
6508
+ font-size: var(--typography-sizeMd, 16px);
6509
+ }
6510
+ .nx-table--xl .nx-table__head-cell,
6511
+ .nx-table--xl .nx-table__cell {
6512
+ padding: 14px 20px;
6513
+ font-size: var(--typography-sizeLg, 18px);
6514
+ }
6515
+ @media (prefers-reduced-motion: reduce) {
6516
+ .nx-table__row {
6517
+ transition: none;
6518
+ }
6519
+ }
6520
+
6521
+ /* src/react/Kanban.css */
6522
+ .nx-kanban {
6523
+ position: relative;
6524
+ display: flex;
6525
+ align-items: flex-start;
6526
+ gap: var(--spacing-md, 16px);
6527
+ overflow-x: auto;
6528
+ padding-block-end: var(--spacing-sm, 8px);
6529
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6530
+ }
6531
+ .nx-kanban__sr-only {
6532
+ position: absolute;
6533
+ width: 1px;
6534
+ height: 1px;
6535
+ padding: 0;
6536
+ margin: -1px;
6537
+ overflow: hidden;
6538
+ clip: rect(0, 0, 0, 0);
6539
+ white-space: nowrap;
6540
+ border: 0;
6541
+ }
6542
+ .nx-kanban__column {
6543
+ display: flex;
6544
+ flex-direction: column;
6545
+ flex-shrink: 0;
6546
+ width: var(--kanban-column-width, 280px);
6547
+ max-height: inherit;
6548
+ background: var(--color-surfaceRaised, #f9fafb);
6549
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
6550
+ border-radius: var(--radius-lg, 14px);
6551
+ box-shadow: var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.08));
6552
+ transition: border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
6553
+ }
6554
+ .nx-kanban__column--drop-target {
6555
+ border-color: var(--color-brand-500, #6366f1);
6556
+ box-shadow: 0 0 0 2px var(--color-brand-100, #e0e7ff), var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.08));
6557
+ }
6558
+ .nx-kanban__column--dragging {
6559
+ opacity: 0.5;
6560
+ }
6561
+ .nx-kanban__column-drop-indicator {
6562
+ align-self: stretch;
6563
+ width: 3px;
6564
+ min-height: 80px;
6565
+ flex-shrink: 0;
6566
+ border-radius: var(--radius-full, 9999px);
6567
+ background: var(--color-brand-500, #6366f1);
6568
+ }
6569
+ .nx-kanban__column-header {
6570
+ display: flex;
6571
+ align-items: flex-start;
6572
+ justify-content: space-between;
6573
+ gap: var(--spacing-sm, 8px);
6574
+ padding: var(--spacing-sm, 8px) var(--spacing-md, 16px);
6575
+ border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
6576
+ cursor: grab;
6577
+ outline: none;
6578
+ }
6579
+ .nx-kanban__column-heading {
6580
+ display: flex;
6581
+ flex-direction: column;
6582
+ gap: 2px;
6583
+ min-width: 0;
6584
+ }
6585
+ .nx-kanban__column-header-end {
6586
+ display: flex;
6587
+ align-items: center;
6588
+ gap: var(--spacing-xs, 4px);
6589
+ flex-shrink: 0;
6590
+ }
6591
+ .nx-kanban__column-description {
6592
+ font-size: var(--typography-sizeXs, 12px);
6593
+ color: var(--color-textMuted, #6b7280);
6594
+ overflow: hidden;
6595
+ text-overflow: ellipsis;
6596
+ white-space: nowrap;
6597
+ }
6598
+ .nx-kanban__column-header:focus-visible,
6599
+ .nx-kanban__column-header--picked-up {
6600
+ outline: 2px solid var(--color-brand-500, #6366f1);
5199
6601
  outline-offset: -2px;
6602
+ border-radius: var(--radius-lg, 14px) var(--radius-lg, 14px) 0 0;
6603
+ }
6604
+ .nx-kanban--compact .nx-kanban__column-header {
6605
+ padding: var(--spacing-xs, 4px) var(--spacing-sm, 8px);
6606
+ }
6607
+ .nx-kanban__column-title {
6608
+ font-weight: var(--typography-weightMedium, 500);
6609
+ font-size: var(--typography-sizeSm, 14px);
6610
+ color: var(--color-text, #111827);
6611
+ overflow: hidden;
6612
+ text-overflow: ellipsis;
6613
+ white-space: nowrap;
6614
+ }
6615
+ .nx-kanban__column-count {
6616
+ display: inline-flex;
6617
+ align-items: center;
6618
+ flex-shrink: 0;
6619
+ line-height: var(--typography-lineHeightTight, 1.2);
6620
+ font-size: var(--typography-sizeXs, 12px);
6621
+ font-weight: var(--typography-weightMedium, 500);
6622
+ color: var(--color-textMuted, #6b7280);
6623
+ background: var(--color-neutral-100, #f3f4f6);
6624
+ border-radius: var(--radius-full, 9999px);
6625
+ padding: 2px var(--spacing-sm, 8px);
6626
+ }
6627
+ .nx-kanban__column-count--over-limit {
6628
+ color: var(--color-danger-deeper, #7f1d1d);
6629
+ background: var(--color-danger-light, #fee2e2);
6630
+ }
6631
+ .nx-kanban__column-body {
6632
+ display: flex;
6633
+ flex-direction: column;
6634
+ gap: var(--spacing-sm, 8px);
6635
+ padding: var(--spacing-md, 16px);
6636
+ overflow-y: auto;
6637
+ min-height: 60px;
6638
+ flex: 1;
6639
+ }
6640
+ .nx-kanban--compact .nx-kanban__column-body {
6641
+ gap: var(--spacing-xs, 4px);
6642
+ padding: var(--spacing-sm, 8px);
6643
+ }
6644
+ .nx-kanban__column-footer {
6645
+ padding: var(--spacing-sm, 8px) var(--spacing-md, 16px);
6646
+ border-top: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
6647
+ }
6648
+ .nx-kanban__empty-state {
6649
+ font-size: var(--typography-sizeSm, 14px);
6650
+ color: var(--color-textMuted, #6b7280);
6651
+ text-align: center;
6652
+ padding: var(--spacing-md, 16px) var(--spacing-sm, 8px);
6653
+ }
6654
+ .nx-kanban__drop-indicator {
6655
+ height: 3px;
6656
+ border-radius: var(--radius-full, 9999px);
6657
+ background: var(--color-brand-500, #6366f1);
6658
+ flex-shrink: 0;
6659
+ }
6660
+ .nx-kanban__card {
6661
+ cursor: grab;
6662
+ outline: none;
6663
+ border-radius: var(--radius-lg, 14px);
6664
+ }
6665
+ .nx-kanban__card:focus-visible {
6666
+ outline: 2px solid var(--color-brand-500, #6366f1);
6667
+ outline-offset: 2px;
6668
+ }
6669
+ .nx-kanban__card-chrome {
6670
+ cursor: inherit;
6671
+ }
6672
+ .nx-kanban__card--picked-up {
6673
+ outline: 2px solid var(--color-brand-500, #6366f1);
6674
+ outline-offset: 2px;
6675
+ }
6676
+ .nx-kanban__card--picked-up .nx-kanban__card-chrome {
6677
+ box-shadow: var(--shadow-lg, 0 8px 20px rgba(0, 0, 0, 0.12));
6678
+ }
6679
+ .nx-kanban__card--dragging {
6680
+ display: none;
6681
+ }
6682
+ .nx-kanban__card--disabled {
6683
+ cursor: not-allowed;
6684
+ opacity: 0.5;
6685
+ }
6686
+ .nx-kanban__ghost {
6687
+ z-index: 1300;
6688
+ pointer-events: none;
6689
+ cursor: grabbing;
6690
+ }
6691
+ .nx-kanban__ghost .nx-card {
6692
+ box-shadow: var(--shadow-lg, 0 12px 28px rgba(0, 0, 0, 0.18));
6693
+ opacity: 0.95;
6694
+ transform: rotate(-1.5deg);
6695
+ }
6696
+ .nx-kanban__column-ghost {
6697
+ z-index: 1300;
6698
+ pointer-events: none;
6699
+ cursor: grabbing;
6700
+ }
6701
+ .nx-kanban__column-ghost .nx-card {
6702
+ box-shadow: var(--shadow-lg, 0 12px 28px rgba(0, 0, 0, 0.18));
6703
+ opacity: 0.95;
6704
+ font-weight: var(--typography-weightMedium, 500);
6705
+ font-size: var(--typography-sizeSm, 14px);
6706
+ }
6707
+ @media (prefers-reduced-motion: reduce) {
6708
+ .nx-kanban__column {
6709
+ transition: none;
6710
+ }
6711
+ }
6712
+
6713
+ /* src/react/Drawer.css */
6714
+ .nx-drawer-backdrop {
6715
+ position: fixed;
6716
+ inset: 0;
6717
+ z-index: var(--elevation-modal, 1000);
6718
+ background: rgba(0, 0, 0, 0.5);
6719
+ backdrop-filter: blur(2px);
6720
+ animation: nx-drawer-backdrop-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
6721
+ }
6722
+ @keyframes nx-drawer-backdrop-in {
6723
+ from {
6724
+ opacity: 0;
6725
+ }
6726
+ to {
6727
+ opacity: 1;
6728
+ }
6729
+ }
6730
+ .nx-drawer {
6731
+ position: fixed;
6732
+ box-sizing: border-box;
6733
+ display: flex;
6734
+ flex-direction: column;
6735
+ background: var(--color-surface, #ffffff);
6736
+ box-shadow: var(--shadow-xl, 0 20px 40px rgba(0, 0, 0, 0.2));
6737
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
6738
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
6739
+ outline: none;
6740
+ animation-duration: var(--motion-durationNormal, 220ms);
6741
+ animation-timing-function: var(--motion-easeEmphasized, ease);
6742
+ animation-fill-mode: both;
6743
+ }
6744
+ .nx-drawer--left,
6745
+ .nx-drawer--right {
6746
+ top: 0;
6747
+ bottom: 0;
6748
+ max-width: calc(100vw - var(--spacing-lg, 24px));
6749
+ }
6750
+ .nx-drawer--left {
6751
+ left: 0;
6752
+ border-right: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
6753
+ animation-name: nx-drawer-slide-left-in;
6754
+ }
6755
+ .nx-drawer--right {
6756
+ right: 0;
6757
+ border-left: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
6758
+ animation-name: nx-drawer-slide-right-in;
6759
+ }
6760
+ .nx-drawer--top,
6761
+ .nx-drawer--bottom {
6762
+ left: 0;
6763
+ right: 0;
6764
+ max-height: calc(100vh - var(--spacing-lg, 24px));
6765
+ }
6766
+ .nx-drawer--top {
6767
+ top: 0;
6768
+ border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
6769
+ animation-name: nx-drawer-slide-top-in;
6770
+ }
6771
+ .nx-drawer--bottom {
6772
+ bottom: 0;
6773
+ border-top: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
6774
+ animation-name: nx-drawer-slide-bottom-in;
6775
+ }
6776
+ @keyframes nx-drawer-slide-left-in {
6777
+ from {
6778
+ transform: translateX(-100%);
6779
+ opacity: 0;
6780
+ }
6781
+ to {
6782
+ transform: translateX(0);
6783
+ opacity: 1;
6784
+ }
6785
+ }
6786
+ @keyframes nx-drawer-slide-right-in {
6787
+ from {
6788
+ transform: translateX(100%);
6789
+ opacity: 0;
6790
+ }
6791
+ to {
6792
+ transform: translateX(0);
6793
+ opacity: 1;
6794
+ }
6795
+ }
6796
+ @keyframes nx-drawer-slide-top-in {
6797
+ from {
6798
+ transform: translateY(-100%);
6799
+ opacity: 0;
6800
+ }
6801
+ to {
6802
+ transform: translateY(0);
6803
+ opacity: 1;
6804
+ }
6805
+ }
6806
+ @keyframes nx-drawer-slide-bottom-in {
6807
+ from {
6808
+ transform: translateY(100%);
6809
+ opacity: 0;
6810
+ }
6811
+ to {
6812
+ transform: translateY(0);
6813
+ opacity: 1;
6814
+ }
6815
+ }
6816
+ .nx-drawer--left.nx-drawer--xs,
6817
+ .nx-drawer--right.nx-drawer--xs {
6818
+ width: 280px;
6819
+ }
6820
+ .nx-drawer--left.nx-drawer--sm,
6821
+ .nx-drawer--right.nx-drawer--sm {
6822
+ width: 360px;
6823
+ }
6824
+ .nx-drawer--left.nx-drawer--md,
6825
+ .nx-drawer--right.nx-drawer--md {
6826
+ width: 420px;
6827
+ }
6828
+ .nx-drawer--left.nx-drawer--lg,
6829
+ .nx-drawer--right.nx-drawer--lg {
6830
+ width: 520px;
6831
+ }
6832
+ .nx-drawer--left.nx-drawer--xl,
6833
+ .nx-drawer--right.nx-drawer--xl {
6834
+ width: 640px;
6835
+ }
6836
+ .nx-drawer--left.nx-drawer--full,
6837
+ .nx-drawer--right.nx-drawer--full {
6838
+ width: 100vw;
6839
+ max-width: none;
6840
+ }
6841
+ .nx-drawer--top.nx-drawer--xs,
6842
+ .nx-drawer--bottom.nx-drawer--xs {
6843
+ height: 200px;
6844
+ }
6845
+ .nx-drawer--top.nx-drawer--sm,
6846
+ .nx-drawer--bottom.nx-drawer--sm {
6847
+ height: 280px;
6848
+ }
6849
+ .nx-drawer--top.nx-drawer--md,
6850
+ .nx-drawer--bottom.nx-drawer--md {
6851
+ height: 360px;
6852
+ }
6853
+ .nx-drawer--top.nx-drawer--lg,
6854
+ .nx-drawer--bottom.nx-drawer--lg {
6855
+ height: 460px;
6856
+ }
6857
+ .nx-drawer--top.nx-drawer--xl,
6858
+ .nx-drawer--bottom.nx-drawer--xl {
6859
+ height: 560px;
6860
+ }
6861
+ .nx-drawer--top.nx-drawer--full,
6862
+ .nx-drawer--bottom.nx-drawer--full {
6863
+ height: 100vh;
6864
+ max-height: none;
6865
+ }
6866
+ .nx-drawer__header {
6867
+ display: flex;
6868
+ align-items: flex-start;
6869
+ justify-content: space-between;
6870
+ gap: var(--spacing-md, 16px);
6871
+ padding: var(--spacing-lg, 24px) var(--spacing-lg, 24px) 0;
6872
+ flex-shrink: 0;
6873
+ }
6874
+ .nx-drawer__title {
6875
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6876
+ font-size: var(--typography-sizeLg, 18px);
6877
+ font-weight: var(--typography-weightBold, 700);
6878
+ color: var(--color-text, #111827);
6879
+ }
6880
+ .nx-drawer__close {
6881
+ flex-shrink: 0;
6882
+ display: inline-flex;
6883
+ align-items: center;
6884
+ justify-content: center;
6885
+ width: 28px;
6886
+ height: 28px;
6887
+ border: none;
6888
+ background: transparent;
6889
+ color: var(--color-textMuted, #6b7280);
6890
+ cursor: pointer;
6891
+ border-radius: var(--radius-sm, 6px);
6892
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
6893
+ }
6894
+ .nx-drawer__close:hover {
6895
+ background: var(--color-surfaceRaised, #f3f4f6);
6896
+ color: var(--color-text, #111827);
6897
+ }
6898
+ .nx-drawer__close:focus-visible {
6899
+ outline: 2px solid var(--color-brand-500, #6366f1);
6900
+ outline-offset: 2px;
6901
+ }
6902
+ .nx-drawer__body {
6903
+ flex: 1;
6904
+ overflow-y: auto;
6905
+ padding: var(--spacing-lg, 24px);
6906
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6907
+ font-size: var(--typography-sizeSm, 14px);
6908
+ line-height: var(--typography-lineHeightNormal, 1.5);
6909
+ color: var(--color-text, #111827);
6910
+ }
6911
+ .nx-drawer__footer {
6912
+ display: flex;
6913
+ align-items: center;
6914
+ justify-content: flex-end;
6915
+ gap: var(--spacing-sm, 8px);
6916
+ padding: 0 var(--spacing-lg, 24px) var(--spacing-lg, 24px);
6917
+ flex-shrink: 0;
6918
+ }
6919
+ @media (prefers-reduced-motion: reduce) {
6920
+ .nx-drawer-backdrop,
6921
+ .nx-drawer {
6922
+ animation-duration: 0.01ms;
6923
+ }
6924
+ }
6925
+
6926
+ /* src/react/Rating.css */
6927
+ .nx-rating {
6928
+ display: inline-flex;
6929
+ align-items: center;
6930
+ gap: calc(var(--spacing-xs, 4px) / 2);
6931
+ outline: none;
6932
+ border-radius: var(--radius-sm, 4px);
6933
+ }
6934
+ .nx-rating:focus-visible {
6935
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand-500, #6366f1) 25%, transparent);
6936
+ }
6937
+ .nx-rating--disabled {
6938
+ opacity: 0.5;
6939
+ cursor: not-allowed;
6940
+ }
6941
+ .nx-rating--readonly {
6942
+ cursor: default;
6943
+ }
6944
+ .nx-rating__star {
6945
+ display: inline-flex;
6946
+ cursor: pointer;
6947
+ color: var(--color-textMuted, #d1d5db);
6948
+ transition: color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
6949
+ }
6950
+ .nx-rating--disabled .nx-rating__star,
6951
+ .nx-rating--readonly .nx-rating__star {
6952
+ cursor: inherit;
6953
+ }
6954
+ .nx-rating__star--half,
6955
+ .nx-rating__star--full {
6956
+ color: var(--color-brand-500, #6366f1);
6957
+ }
6958
+ .nx-rating:not(.nx-rating--disabled):not(.nx-rating--readonly) .nx-rating__star:hover {
6959
+ transform: scale(1.08);
6960
+ }
6961
+ .nx-rating--xs .nx-rating__star-icon {
6962
+ width: 14px;
6963
+ height: 14px;
6964
+ }
6965
+ .nx-rating--sm .nx-rating__star-icon {
6966
+ width: 16px;
6967
+ height: 16px;
6968
+ }
6969
+ .nx-rating--md .nx-rating__star-icon {
6970
+ width: 20px;
6971
+ height: 20px;
6972
+ }
6973
+ .nx-rating--lg .nx-rating__star-icon {
6974
+ width: 26px;
6975
+ height: 26px;
6976
+ }
6977
+ .nx-rating--xl .nx-rating__star-icon {
6978
+ width: 32px;
6979
+ height: 32px;
6980
+ }
6981
+ [data-theme=neobrutalism] .nx-rating__star-icon {
6982
+ stroke: #000000;
6983
+ }
6984
+
6985
+ /* src/react/OTPInput.css */
6986
+ .nx-otp-input {
6987
+ display: inline-flex;
6988
+ gap: var(--spacing-sm, 8px);
6989
+ }
6990
+ .nx-otp-input--disabled {
6991
+ opacity: 0.5;
6992
+ }
6993
+ .nx-otp-input__box {
6994
+ text-align: center;
6995
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
6996
+ font-weight: var(--typography-weightMedium, 500);
6997
+ color: var(--color-text, #111827);
6998
+ background: var(--color-surface, #ffffff);
6999
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7000
+ border-radius: var(--radius-md, 8px);
7001
+ outline: none;
7002
+ transition: border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5200
7003
  }
5201
- .nx-table__sort-icon {
5202
- display: inline-flex;
7004
+ .nx-otp-input__box:disabled {
7005
+ cursor: not-allowed;
7006
+ background: var(--color-neutral-50, #f9fafb);
7007
+ }
7008
+ .nx-otp-input__box:focus {
7009
+ border-color: var(--color-brand-500, #6366f1);
7010
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand-500, #6366f1) 20%, transparent);
7011
+ }
7012
+ .nx-otp-input__box--filled {
7013
+ border-color: var(--color-brand-500, #6366f1);
7014
+ }
7015
+ .nx-otp-input__box--invalid {
7016
+ border-color: var(--color-danger-base, #ef4444);
7017
+ }
7018
+ .nx-otp-input__box--invalid:focus {
7019
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-danger-base, #ef4444) 20%, transparent);
7020
+ }
7021
+ .nx-otp-input--xs .nx-otp-input__box {
7022
+ width: 28px;
7023
+ height: 32px;
7024
+ font-size: var(--typography-sizeSm, 14px);
7025
+ }
7026
+ .nx-otp-input--sm .nx-otp-input__box {
7027
+ width: 34px;
7028
+ height: 38px;
7029
+ font-size: var(--typography-sizeMd, 16px);
7030
+ }
7031
+ .nx-otp-input--md .nx-otp-input__box {
7032
+ width: 42px;
7033
+ height: 48px;
7034
+ font-size: var(--typography-sizeLg, 18px);
7035
+ }
7036
+ .nx-otp-input--lg .nx-otp-input__box {
7037
+ width: 50px;
7038
+ height: 56px;
7039
+ font-size: var(--typography-sizeXl, 22px);
7040
+ }
7041
+ .nx-otp-input--xl .nx-otp-input__box {
7042
+ width: 58px;
7043
+ height: 64px;
7044
+ font-size: var(--typography-sizeXl, 22px);
7045
+ }
7046
+
7047
+ /* src/react/PhoneInput.css */
7048
+ .nx-phone-input__country-select {
7049
+ inline-size: 104px;
7050
+ max-inline-size: 104px;
7051
+ flex: none;
7052
+ }
7053
+ .nx-phone-input__country-select .nx-select__trigger {
7054
+ border: none;
7055
+ box-shadow: none !important;
7056
+ background: transparent;
7057
+ padding-inline-end: var(--spacing-xs, 4px);
7058
+ padding-inline-start: 0;
7059
+ border-inline-end: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7060
+ border-radius: 0;
7061
+ }
7062
+ .nx-phone-input__country-select .nx-select__value {
7063
+ overflow: hidden;
7064
+ text-overflow: ellipsis;
7065
+ white-space: nowrap;
7066
+ }
7067
+
7068
+ /* src/react/StatCard.css */
7069
+ .nx-stat-card {
7070
+ display: flex;
5203
7071
  flex-direction: column;
5204
- width: 10px;
5205
- height: 12px;
7072
+ gap: var(--spacing-xs, 4px);
5206
7073
  }
5207
- .nx-table__sort-arrow-up,
5208
- .nx-table__sort-arrow-down {
5209
- opacity: 0.25;
7074
+ .nx-stat-card__header {
7075
+ display: flex;
7076
+ align-items: center;
7077
+ gap: var(--spacing-sm, 8px);
7078
+ color: var(--color-textMuted, #6b7280);
5210
7079
  }
5211
- .nx-table__sort-icon[data-direction=asc] .nx-table__sort-arrow-up {
5212
- opacity: 1;
7080
+ .nx-stat-card__icon {
7081
+ display: inline-flex;
7082
+ flex: none;
7083
+ color: var(--color-brand-500, #6366f1);
5213
7084
  }
5214
- .nx-table__sort-icon[data-direction=desc] .nx-table__sort-arrow-down {
5215
- opacity: 1;
7085
+ .nx-stat-card__label {
7086
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
7087
+ font-size: var(--typography-sizeSm, 14px);
7088
+ font-weight: var(--typography-weightMedium, 500);
5216
7089
  }
5217
- .nx-table__body .nx-table__row {
7090
+ .nx-stat-card__value {
7091
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
7092
+ font-size: var(--typography-sizeXl, 22px);
7093
+ font-weight: var(--typography-weightBold, 700);
7094
+ line-height: var(--typography-lineHeightTight, 1.2);
7095
+ color: var(--color-text, #111827);
7096
+ }
7097
+ .nx-stat-card__trend {
7098
+ display: flex;
7099
+ align-items: center;
7100
+ gap: var(--spacing-xs, 4px);
7101
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
7102
+ font-size: var(--typography-sizeSm, 14px);
7103
+ font-weight: var(--typography-weightMedium, 500);
7104
+ }
7105
+ .nx-stat-card__trend-icon {
7106
+ inline-size: 1em;
7107
+ block-size: 1em;
7108
+ }
7109
+ .nx-stat-card__trend--up {
7110
+ color: var(--color-success-base, #10b981);
7111
+ }
7112
+ .nx-stat-card__trend--down {
7113
+ color: var(--color-danger-base, #ef4444);
7114
+ }
7115
+ .nx-stat-card__trend--flat {
7116
+ color: var(--color-textMuted, #6b7280);
7117
+ }
7118
+ .nx-stat-card__trend-label {
7119
+ color: var(--color-textMuted, #6b7280);
7120
+ font-weight: var(--typography-weightNormal, 400);
7121
+ }
7122
+
7123
+ /* src/react/CodeBlock.css */
7124
+ .nx-code-block {
7125
+ width: 100%;
7126
+ position: relative;
7127
+ border-radius: var(--radius-md);
7128
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7129
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.06));
7130
+ background: var(--color-surfaceRaised, var(--color-surface));
7131
+ color: var(--color-text);
7132
+ font-family: var(--typography-fontMono, ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace);
7133
+ font-size: var(--typography-sizeSm, 0.875rem);
7134
+ line-height: var(--typography-lineHeightNormal, 1.6);
7135
+ overflow: hidden;
7136
+ transition: border-color var(--motion-durationFast, 150ms) var(--motion-easeStandard, ease);
7137
+ }
7138
+ .nx-code-block--sm {
7139
+ font-size: var(--typography-sizeXs, 0.75rem);
7140
+ }
7141
+ .nx-code-block--lg {
7142
+ font-size: var(--typography-sizeMd, 1rem);
7143
+ }
7144
+ .nx-code-block__header {
7145
+ display: flex;
7146
+ align-items: center;
7147
+ justify-content: space-between;
7148
+ gap: var(--spacing-sm);
7149
+ padding: var(--spacing-xs) var(--spacing-md);
5218
7150
  border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5219
- transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
7151
+ background: var(--color-surface);
5220
7152
  }
5221
- .nx-table__body .nx-table__row:last-child {
5222
- border-bottom: none;
7153
+ .nx-code-block__filename {
7154
+ font-size: var(--typography-sizeXs, 0.75rem);
7155
+ color: var(--color-textMuted, var(--color-text));
7156
+ overflow: hidden;
7157
+ text-overflow: ellipsis;
7158
+ white-space: nowrap;
7159
+ }
7160
+ .nx-code-block__copy-button {
7161
+ display: inline-flex;
7162
+ align-items: center;
7163
+ justify-content: center;
7164
+ width: 1.75rem;
7165
+ height: 1.75rem;
7166
+ border: none;
7167
+ border-radius: var(--radius-sm);
7168
+ background: transparent;
7169
+ color: var(--color-textMuted, var(--color-text));
7170
+ cursor: pointer;
7171
+ transition: background var(--motion-durationFast, 150ms) var(--motion-easeStandard, ease);
7172
+ }
7173
+ .nx-code-block__copy-button:hover {
7174
+ background: var(--color-surfaceRaised, #f3f4f6);
7175
+ }
7176
+ .nx-code-block__copy-button:focus-visible {
7177
+ outline: 2px solid var(--color-brand-500);
7178
+ outline-offset: 2px;
7179
+ }
7180
+ .nx-code-block__pre {
7181
+ margin: 0;
7182
+ padding: var(--spacing-md);
7183
+ overflow-x: auto;
7184
+ }
7185
+ .nx-code-block--wrap .nx-code-block__pre {
7186
+ white-space: pre-wrap;
7187
+ word-break: break-word;
7188
+ overflow-x: hidden;
7189
+ }
7190
+ .nx-code-block__code {
7191
+ display: block;
7192
+ }
7193
+ .nx-code-block__line {
7194
+ display: block;
7195
+ }
7196
+ .nx-code-block__line--highlighted {
7197
+ background: color-mix(in srgb, var(--color-brand-500) 12%, transparent);
7198
+ margin-inline: calc(var(--spacing-md) * -1);
7199
+ padding-inline: var(--spacing-md);
7200
+ }
7201
+ .nx-code-block__line-number {
7202
+ display: inline-block;
7203
+ inline-size: 2.25em;
7204
+ margin-inline-end: var(--spacing-sm);
7205
+ color: var(--color-textMuted, var(--color-text));
7206
+ opacity: 0.5;
7207
+ text-align: right;
7208
+ user-select: none;
7209
+ }
7210
+ .nx-code-token--keyword {
7211
+ color: var(--nx-code-keyword, #c678dd);
7212
+ }
7213
+ .nx-code-token--string {
7214
+ color: var(--nx-code-string, #98c379);
7215
+ }
7216
+ .nx-code-token--comment {
7217
+ color: var(--nx-code-comment, #7f848e);
7218
+ font-style: italic;
7219
+ }
7220
+ .nx-code-token--number {
7221
+ color: var(--nx-code-number, #d19a66);
7222
+ }
7223
+ .nx-code-token--function {
7224
+ color: var(--nx-code-function, #61afef);
7225
+ }
7226
+ .nx-code-token--builtin {
7227
+ color: var(--nx-code-builtin, #56b6c2);
7228
+ }
7229
+ .nx-code-token--tag {
7230
+ color: var(--nx-code-tag, #e06c75);
7231
+ }
7232
+ .nx-code-token--attrName {
7233
+ color: var(--nx-code-attr, #d19a66);
7234
+ }
7235
+ .nx-code-token--property {
7236
+ color: var(--nx-code-property, #e5c07b);
7237
+ }
7238
+ .nx-code-token--selector {
7239
+ color: var(--nx-code-selector, #e06c75);
7240
+ }
7241
+ .nx-code-token--atrule {
7242
+ color: var(--nx-code-atrule, #c678dd);
7243
+ }
7244
+ .nx-code-token--variable {
7245
+ color: var(--nx-code-variable, #e06c75);
7246
+ }
7247
+ .nx-code-token--boolean {
7248
+ color: var(--nx-code-boolean, #d19a66);
7249
+ }
7250
+ .nx-code-token--regex {
7251
+ color: var(--nx-code-regex, #56b6c2);
7252
+ }
7253
+ .nx-code-token--decorator {
7254
+ color: var(--nx-code-decorator, #e5c07b);
7255
+ }
7256
+ .nx-code-token--pseudo {
7257
+ color: var(--nx-code-pseudo, #56b6c2);
7258
+ }
7259
+ .nx-code-token--punctuation {
7260
+ color: var(--nx-code-punctuation, var(--color-textMuted, currentColor));
7261
+ }
7262
+ .nx-code-token--plain {
7263
+ color: inherit;
7264
+ }
7265
+
7266
+ /* src/react/RichTextEditor.css */
7267
+ .nx-rich-text {
7268
+ width: 100%;
7269
+ border-radius: var(--radius-md);
7270
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7271
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.06));
7272
+ background: var(--color-surface);
7273
+ color: var(--color-text);
7274
+ overflow: hidden;
7275
+ transition: border-color var(--motion-durationFast, 150ms) var(--motion-easeStandard, ease);
7276
+ }
7277
+ .nx-rich-text--sm {
7278
+ font-size: var(--typography-sizeSm, 0.875rem);
7279
+ }
7280
+ .nx-rich-text--lg {
7281
+ font-size: var(--typography-sizeLg, 1.125rem);
7282
+ }
7283
+ .nx-rich-text--disabled {
7284
+ opacity: 0.6;
7285
+ }
7286
+ .nx-rich-text--readonly {
7287
+ background: var(--color-surfaceRaised, var(--color-surface));
7288
+ }
7289
+ .nx-rich-text__toolbar {
7290
+ display: flex;
7291
+ flex-wrap: wrap;
7292
+ gap: var(--spacing-xs);
7293
+ padding: var(--spacing-xs) var(--spacing-sm);
7294
+ border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7295
+ background: var(--color-surfaceRaised, var(--color-surface));
7296
+ }
7297
+ .nx-rich-text__toolbar-button {
7298
+ display: inline-flex;
7299
+ align-items: center;
7300
+ justify-content: center;
7301
+ width: 2rem;
7302
+ height: 2rem;
7303
+ border: none;
7304
+ border-radius: var(--radius-sm);
7305
+ background: transparent;
7306
+ color: var(--color-text);
7307
+ cursor: pointer;
7308
+ font-size: var(--typography-sizeSm, 0.875rem);
7309
+ transition: background var(--motion-durationFast, 150ms) var(--motion-easeStandard, ease);
7310
+ }
7311
+ .nx-rich-text__toolbar-button:hover:not(:disabled) {
7312
+ background: var(--color-brand-50, #f0f4ff);
7313
+ }
7314
+ .nx-rich-text__toolbar-button:focus-visible {
7315
+ outline: 2px solid var(--color-brand-500);
7316
+ outline-offset: 2px;
7317
+ }
7318
+ .nx-rich-text__toolbar-button[data-active=true] {
7319
+ background: color-mix(in srgb, var(--color-brand-500) 16%, transparent);
7320
+ color: var(--color-brand-500);
7321
+ }
7322
+ .nx-rich-text__toolbar-button:disabled {
7323
+ cursor: not-allowed;
7324
+ opacity: 0.4;
7325
+ }
7326
+ .nx-rich-text__glyph {
7327
+ display: inline-flex;
7328
+ font-size: 0.8em;
7329
+ line-height: 1;
7330
+ }
7331
+ .nx-rich-text__content {
7332
+ min-height: 8em;
7333
+ padding: var(--spacing-md);
7334
+ outline: none;
7335
+ line-height: var(--typography-lineHeightNormal, 1.6);
7336
+ }
7337
+ .nx-rich-text__content:empty::before {
7338
+ content: attr(data-placeholder);
7339
+ color: var(--color-textMuted, var(--color-text));
7340
+ opacity: 0.5;
7341
+ pointer-events: none;
7342
+ }
7343
+ .nx-rich-text__content h1,
7344
+ .nx-rich-text__content h2,
7345
+ .nx-rich-text__content h3 {
7346
+ margin: 0.6em 0 0.3em;
7347
+ line-height: 1.25;
7348
+ }
7349
+ .nx-rich-text__content p {
7350
+ margin: 0 0 0.6em;
7351
+ }
7352
+ .nx-rich-text__content p:last-child {
7353
+ margin-bottom: 0;
7354
+ }
7355
+ .nx-rich-text__content blockquote {
7356
+ margin: 0 0 0.6em;
7357
+ padding-inline-start: var(--spacing-md);
7358
+ border-inline-start: var(--border-widthThick, 3px) var(--border-style, solid) var(--color-border, #e5e7eb);
7359
+ color: var(--color-textMuted, var(--color-text));
7360
+ }
7361
+ .nx-rich-text__content ul,
7362
+ .nx-rich-text__content ol {
7363
+ margin: 0 0 0.6em;
7364
+ padding-inline-start: 1.5em;
7365
+ }
7366
+ .nx-rich-text__content code {
7367
+ font-family: var(--typography-fontMono, ui-monospace, monospace);
7368
+ background: var(--color-surfaceRaised, var(--color-surface));
7369
+ border-radius: var(--radius-sm);
7370
+ padding: 0.1em 0.35em;
7371
+ }
7372
+ .nx-rich-text__content a {
7373
+ color: var(--color-brand-500);
7374
+ text-decoration: underline;
7375
+ }
7376
+ .nx-rich-text__link-popover {
7377
+ padding: var(--spacing-sm);
7378
+ }
7379
+ .nx-rich-text__link-input {
7380
+ width: 16rem;
7381
+ max-width: 100%;
7382
+ padding: var(--spacing-xs) var(--spacing-sm);
7383
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7384
+ border-radius: var(--radius-sm);
7385
+ background: var(--color-surface);
7386
+ color: var(--color-text);
7387
+ font-size: var(--typography-sizeSm, 0.875rem);
7388
+ }
7389
+ .nx-rich-text__link-input:focus-visible {
7390
+ outline: 2px solid var(--color-brand-500);
7391
+ outline-offset: 2px;
7392
+ }
7393
+ .nx-rich-text__color-popover {
7394
+ display: flex;
7395
+ align-items: center;
7396
+ gap: var(--spacing-sm);
7397
+ padding: var(--spacing-sm);
7398
+ }
7399
+ .nx-rich-text__color-input {
7400
+ width: 2.25rem;
7401
+ height: 2.25rem;
7402
+ padding: 0;
7403
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7404
+ border-radius: var(--radius-sm);
7405
+ background: none;
7406
+ cursor: pointer;
7407
+ }
7408
+ .nx-rich-text__color-input::-webkit-color-swatch-wrapper {
7409
+ padding: 0;
7410
+ }
7411
+ .nx-rich-text__color-input::-webkit-color-swatch {
7412
+ border: none;
7413
+ border-radius: var(--radius-sm);
5223
7414
  }
5224
- .nx-table--striped .nx-table__body .nx-table__row:nth-child(even) {
5225
- background: var(--color-surfaceRaised, #f9fafb);
7415
+ .nx-rich-text__color-input::-moz-color-swatch {
7416
+ border: none;
7417
+ border-radius: var(--radius-sm);
5226
7418
  }
5227
- .nx-table__row--clickable {
7419
+ .nx-rich-text__color-clear {
7420
+ padding: var(--spacing-xs) var(--spacing-sm);
7421
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7422
+ border-radius: var(--radius-sm);
7423
+ background: var(--color-surface);
7424
+ color: var(--color-text);
7425
+ font-size: var(--typography-sizeXs, 0.75rem);
5228
7426
  cursor: pointer;
5229
7427
  }
5230
- .nx-table__row--clickable:hover {
5231
- background: var(--color-neutral-100, #f3f4f6);
7428
+ .nx-rich-text__color-clear:hover {
7429
+ background: var(--color-surfaceRaised, #f3f4f6);
5232
7430
  }
5233
- .nx-table__row--selected {
5234
- background: var(--color-brand-50, #eef2ff);
7431
+ .nx-rich-text__color-clear:focus-visible {
7432
+ outline: 2px solid var(--color-brand-500);
7433
+ outline-offset: 2px;
5235
7434
  }
5236
- .nx-table__row--selected.nx-table__row--clickable:hover {
5237
- background: var(--color-brand-50, #eef2ff);
7435
+
7436
+ /* src/react/Image.css */
7437
+ .nx-image {
7438
+ position: relative;
7439
+ display: block;
7440
+ inline-size: 100%;
7441
+ overflow: hidden;
7442
+ background: var(--color-neutral-100, #f3f4f6);
7443
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7444
+ border-radius: var(--radius-md, 8px);
7445
+ box-shadow: var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.08));
7446
+ line-height: 0;
5238
7447
  }
5239
- .nx-table__cell {
5240
- vertical-align: middle;
7448
+ .nx-image__img {
7449
+ display: block;
7450
+ inline-size: 100%;
7451
+ block-size: 100%;
7452
+ transition: opacity var(--motion-durationNormal, 200ms) var(--motion-easeStandard, ease);
5241
7453
  }
5242
- .nx-table__empty-cell {
5243
- text-align: center;
5244
- padding: var(--spacing-xl, 32px) var(--spacing-md, 16px);
5245
- color: var(--color-textMuted, #6b7280);
7454
+ .nx-image--loading .nx-image__img {
7455
+ opacity: 0;
5246
7456
  }
5247
- .nx-table__cell .nx-field,
5248
- .nx-table__head-cell .nx-field {
5249
- display: inline-flex;
7457
+ .nx-image--loaded .nx-image__img {
7458
+ opacity: 1;
5250
7459
  }
5251
- .nx-table--bordered .nx-table__head-cell,
5252
- .nx-table--bordered .nx-table__cell {
5253
- border-right: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7460
+ .nx-image__img--cover {
7461
+ object-fit: cover;
5254
7462
  }
5255
- .nx-table--bordered .nx-table__head-cell:last-child,
5256
- .nx-table--bordered .nx-table__cell:last-child {
5257
- border-right: none;
7463
+ .nx-image__img--contain {
7464
+ object-fit: contain;
5258
7465
  }
5259
- .nx-table--xs .nx-table__head-cell,
5260
- .nx-table--xs .nx-table__cell {
5261
- padding: 6px 10px;
5262
- font-size: var(--typography-sizeXs, 12px);
7466
+ .nx-image__img--fill {
7467
+ object-fit: fill;
5263
7468
  }
5264
- .nx-table--sm .nx-table__head-cell,
5265
- .nx-table--sm .nx-table__cell {
5266
- padding: 8px 12px;
5267
- font-size: var(--typography-sizeSm, 14px);
7469
+ .nx-image__img--none {
7470
+ object-fit: none;
5268
7471
  }
5269
- .nx-table--md .nx-table__head-cell,
5270
- .nx-table--md .nx-table__cell {
5271
- padding: 10px 16px;
5272
- font-size: var(--typography-sizeSm, 14px);
7472
+ .nx-image__img--scale-down {
7473
+ object-fit: scale-down;
5273
7474
  }
5274
- .nx-table--lg .nx-table__head-cell,
5275
- .nx-table--lg .nx-table__cell {
5276
- padding: 12px 18px;
5277
- font-size: var(--typography-sizeMd, 16px);
7475
+ .nx-image__placeholder {
7476
+ position: absolute;
7477
+ inset: 0;
5278
7478
  }
5279
- .nx-table--xl .nx-table__head-cell,
5280
- .nx-table--xl .nx-table__cell {
5281
- padding: 14px 20px;
5282
- font-size: var(--typography-sizeLg, 18px);
7479
+ .nx-image__fallback {
7480
+ position: absolute;
7481
+ inset: 0;
7482
+ display: flex;
7483
+ flex-direction: column;
7484
+ align-items: center;
7485
+ justify-content: center;
7486
+ gap: var(--spacing-xs, 6px);
7487
+ color: var(--color-textMuted, #9ca3af);
7488
+ background: var(--color-neutral-100, #f3f4f6);
5283
7489
  }
5284
- @media (prefers-reduced-motion: reduce) {
5285
- .nx-table__row {
5286
- transition: none;
5287
- }
7490
+ .nx-image__fallback-text {
7491
+ font-size: var(--typography-sizeXs, 12px);
7492
+ font-family: var(--typography-fontSans, inherit);
5288
7493
  }
5289
7494
 
5290
- /* src/react/Drawer.css */
5291
- .nx-drawer-backdrop {
7495
+ /* src/react/Lightbox.css */
7496
+ .nx-lightbox-backdrop {
5292
7497
  position: fixed;
5293
7498
  inset: 0;
5294
- z-index: 1000;
5295
- background: rgba(0, 0, 0, 0.5);
5296
- backdrop-filter: blur(2px);
5297
- animation: nx-drawer-backdrop-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
7499
+ z-index: var(--elevation-toast, 1200);
7500
+ display: flex;
7501
+ flex-direction: column;
7502
+ background: rgba(0, 0, 0, 0.92);
7503
+ animation: nx-lightbox-backdrop-in var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5298
7504
  }
5299
- @keyframes nx-drawer-backdrop-in {
7505
+ @keyframes nx-lightbox-backdrop-in {
5300
7506
  from {
5301
7507
  opacity: 0;
5302
7508
  }
@@ -5304,396 +7510,718 @@
5304
7510
  opacity: 1;
5305
7511
  }
5306
7512
  }
5307
- .nx-drawer {
5308
- position: fixed;
5309
- box-sizing: border-box;
7513
+ .nx-lightbox {
5310
7514
  display: flex;
5311
7515
  flex-direction: column;
5312
- background: var(--color-surface, #ffffff);
5313
- box-shadow: var(--shadow-xl, 0 20px 40px rgba(0, 0, 0, 0.2));
7516
+ flex: 1;
7517
+ min-height: 0;
7518
+ outline: none;
7519
+ animation: nx-lightbox-in var(--motion-durationNormal, 180ms) var(--motion-easeEmphasized, ease);
7520
+ }
7521
+ @keyframes nx-lightbox-in {
7522
+ from {
7523
+ opacity: 0;
7524
+ transform: scale(0.98);
7525
+ }
7526
+ to {
7527
+ opacity: 1;
7528
+ transform: scale(1);
7529
+ }
7530
+ }
7531
+ .nx-lightbox__toolbar {
7532
+ display: flex;
7533
+ align-items: center;
7534
+ justify-content: space-between;
7535
+ flex-shrink: 0;
7536
+ padding: var(--spacing-md, 16px) var(--spacing-lg, 24px);
5314
7537
  backdrop-filter: blur(var(--effects-backdropBlur, 0px));
5315
7538
  -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
5316
- outline: none;
5317
- animation-duration: var(--motion-durationNormal, 220ms);
5318
- animation-timing-function: var(--motion-easeEmphasized, ease);
5319
- animation-fill-mode: both;
5320
7539
  }
5321
- .nx-drawer--left,
5322
- .nx-drawer--right {
5323
- top: 0;
5324
- bottom: 0;
5325
- max-width: calc(100vw - var(--spacing-lg, 24px));
7540
+ .nx-lightbox__counter {
7541
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
7542
+ font-size: var(--typography-sizeSm, 14px);
7543
+ color: var(--color-neutral-0, #ffffff);
7544
+ opacity: 0.85;
5326
7545
  }
5327
- .nx-drawer--left {
5328
- left: 0;
5329
- border-right: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5330
- animation-name: nx-drawer-slide-left-in;
7546
+ .nx-lightbox__actions {
7547
+ display: flex;
7548
+ align-items: center;
7549
+ gap: var(--spacing-xs, 6px);
5331
7550
  }
5332
- .nx-drawer--right {
5333
- right: 0;
5334
- border-left: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5335
- animation-name: nx-drawer-slide-right-in;
7551
+ .nx-lightbox__icon-btn {
7552
+ display: inline-flex;
7553
+ align-items: center;
7554
+ justify-content: center;
7555
+ width: 36px;
7556
+ height: 36px;
7557
+ border: var(--border-widthThin, 1px) var(--border-style, solid) rgba(255, 255, 255, 0.16);
7558
+ border-radius: var(--radius-md, 8px);
7559
+ background: rgba(255, 255, 255, 0.06);
7560
+ color: var(--color-neutral-0, #ffffff);
7561
+ cursor: pointer;
7562
+ text-decoration: none;
7563
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5336
7564
  }
5337
- .nx-drawer--top,
5338
- .nx-drawer--bottom {
5339
- left: 0;
5340
- right: 0;
5341
- max-height: calc(100vh - var(--spacing-lg, 24px));
7565
+ .nx-lightbox__icon-btn:hover {
7566
+ background: rgba(255, 255, 255, 0.14);
5342
7567
  }
5343
- .nx-drawer--top {
5344
- top: 0;
5345
- border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5346
- animation-name: nx-drawer-slide-top-in;
7568
+ .nx-lightbox__icon-btn:focus-visible {
7569
+ outline: 2px solid var(--color-brand-400, #818cf8);
7570
+ outline-offset: 2px;
5347
7571
  }
5348
- .nx-drawer--bottom {
5349
- bottom: 0;
5350
- border-top: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
5351
- animation-name: nx-drawer-slide-bottom-in;
7572
+ .nx-lightbox__stage {
7573
+ position: relative;
7574
+ display: flex;
7575
+ align-items: center;
7576
+ justify-content: center;
7577
+ flex: 1;
7578
+ min-height: 0;
7579
+ padding: 0 var(--spacing-2xl, 32px) var(--spacing-lg, 24px);
5352
7580
  }
5353
- @keyframes nx-drawer-slide-left-in {
5354
- from {
5355
- transform: translateX(-100%);
5356
- opacity: 0;
5357
- }
5358
- to {
5359
- transform: translateX(0);
5360
- opacity: 1;
5361
- }
7581
+ .nx-lightbox__image.nx-image {
7582
+ border: none;
7583
+ background: transparent;
5362
7584
  }
5363
- @keyframes nx-drawer-slide-right-in {
5364
- from {
5365
- transform: translateX(100%);
5366
- opacity: 0;
5367
- }
5368
- to {
5369
- transform: translateX(0);
5370
- opacity: 1;
5371
- }
7585
+ .nx-lightbox__image {
7586
+ max-width: 100%;
7587
+ max-height: 100%;
7588
+ width: auto;
7589
+ height: auto;
7590
+ background: transparent;
7591
+ box-shadow: var(--shadow-xl, 0 20px 48px rgba(0, 0, 0, 0.4));
5372
7592
  }
5373
- @keyframes nx-drawer-slide-top-in {
5374
- from {
5375
- transform: translateY(-100%);
5376
- opacity: 0;
5377
- }
5378
- to {
5379
- transform: translateY(0);
5380
- opacity: 1;
7593
+ .nx-lightbox__image .nx-image__img {
7594
+ max-width: 100%;
7595
+ max-height: calc(100vh - 160px);
7596
+ width: auto;
7597
+ height: auto;
7598
+ inline-size: auto;
7599
+ block-size: auto;
7600
+ }
7601
+ .nx-lightbox__nav {
7602
+ position: absolute;
7603
+ top: 50%;
7604
+ transform: translateY(-50%);
7605
+ display: inline-flex;
7606
+ align-items: center;
7607
+ justify-content: center;
7608
+ width: 44px;
7609
+ height: 44px;
7610
+ border: var(--border-widthThin, 1px) var(--border-style, solid) rgba(255, 255, 255, 0.2);
7611
+ border-radius: var(--radius-full, 999px);
7612
+ background: rgba(255, 255, 255, 0.08);
7613
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
7614
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
7615
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.2));
7616
+ color: var(--color-neutral-0, #ffffff);
7617
+ cursor: pointer;
7618
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
7619
+ z-index: 1;
7620
+ }
7621
+ .nx-lightbox__nav:hover {
7622
+ background: rgba(255, 255, 255, 0.2);
7623
+ }
7624
+ .nx-lightbox__nav:focus-visible {
7625
+ outline: 2px solid var(--color-brand-400, #818cf8);
7626
+ outline-offset: 2px;
7627
+ }
7628
+ .nx-lightbox__nav--prev {
7629
+ left: var(--spacing-md, 16px);
7630
+ }
7631
+ .nx-lightbox__nav--next {
7632
+ right: var(--spacing-md, 16px);
7633
+ }
7634
+ .nx-lightbox__caption {
7635
+ flex-shrink: 0;
7636
+ padding: var(--spacing-sm, 8px) var(--spacing-lg, 24px) var(--spacing-lg, 24px);
7637
+ text-align: center;
7638
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
7639
+ font-size: var(--typography-sizeSm, 14px);
7640
+ color: var(--color-neutral-0, #ffffff);
7641
+ opacity: 0.85;
7642
+ }
7643
+ @media (prefers-reduced-motion: reduce) {
7644
+ .nx-lightbox-backdrop,
7645
+ .nx-lightbox {
7646
+ animation-duration: 0.01ms;
5381
7647
  }
5382
7648
  }
5383
- @keyframes nx-drawer-slide-bottom-in {
5384
- from {
5385
- transform: translateY(100%);
5386
- opacity: 0;
5387
- }
5388
- to {
5389
- transform: translateY(0);
5390
- opacity: 1;
5391
- }
7649
+
7650
+ /* src/react/Gallery.css */
7651
+ .nx-gallery {
7652
+ display: grid;
7653
+ inline-size: 100%;
7654
+ gap: var(--spacing-sm, 8px);
7655
+ }
7656
+ .nx-gallery--grid {
7657
+ grid-template-columns: repeat(var(--nx-gallery-columns, 3), 1fr);
7658
+ grid-auto-rows: 1fr;
7659
+ }
7660
+ .nx-gallery--grid .nx-gallery__item {
7661
+ aspect-ratio: 1 / 1;
7662
+ }
7663
+ .nx-gallery--masonry {
7664
+ display: block;
7665
+ column-count: var(--nx-gallery-columns, 3);
7666
+ column-gap: var(--spacing-sm, 8px);
7667
+ }
7668
+ .nx-gallery--masonry .nx-gallery__item {
7669
+ display: block;
7670
+ width: 100%;
7671
+ break-inside: avoid;
7672
+ margin-bottom: var(--spacing-sm, 8px);
7673
+ }
7674
+ .nx-gallery--justified {
7675
+ display: flex;
7676
+ flex-direction: column;
7677
+ }
7678
+ .nx-gallery__row {
7679
+ display: flex;
7680
+ }
7681
+ .nx-gallery--justified .nx-gallery__row:not(:last-child) {
7682
+ margin-bottom: var(--spacing-sm, 8px);
7683
+ }
7684
+ .nx-gallery--justified .nx-gallery__item {
7685
+ flex-shrink: 0;
7686
+ }
7687
+ .nx-gallery__item .nx-image {
7688
+ border: none;
7689
+ border-radius: 0;
7690
+ background: transparent;
7691
+ }
7692
+ .nx-gallery__item {
7693
+ position: relative;
7694
+ display: block;
7695
+ overflow: hidden;
7696
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7697
+ padding: 0;
7698
+ margin: 0;
7699
+ cursor: pointer;
7700
+ background: transparent;
7701
+ border-radius: var(--radius-md, 8px);
7702
+ box-shadow: var(--shadow-xs, 0 1px 2px rgba(0, 0, 0, 0.06));
7703
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
7704
+ transition: transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
7705
+ }
7706
+ .nx-gallery__item:hover {
7707
+ transform: scale(1.02);
7708
+ box-shadow: var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));
7709
+ }
7710
+ .nx-gallery__item:focus-visible {
7711
+ outline: 2px solid var(--color-brand-500, #6366f1);
7712
+ outline-offset: 2px;
7713
+ }
7714
+ .nx-gallery__image {
7715
+ width: 100%;
7716
+ height: 100%;
5392
7717
  }
5393
- .nx-drawer--left.nx-drawer--xs,
5394
- .nx-drawer--right.nx-drawer--xs {
5395
- width: 280px;
7718
+
7719
+ /* src/react/VideoPlayer.css */
7720
+ .nx-video-player {
7721
+ position: relative;
7722
+ display: block;
7723
+ inline-size: 100%;
7724
+ background: #000;
7725
+ border-radius: var(--radius-md, 8px);
7726
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #1f2937);
7727
+ box-shadow: var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));
7728
+ overflow: hidden;
7729
+ container-type: inline-size;
7730
+ container-name: nx-video-player;
5396
7731
  }
5397
- .nx-drawer--left.nx-drawer--sm,
5398
- .nx-drawer--right.nx-drawer--sm {
5399
- width: 360px;
7732
+ .nx-video-player__video {
7733
+ display: block;
7734
+ width: 100%;
7735
+ height: auto;
7736
+ max-height: 100%;
5400
7737
  }
5401
- .nx-drawer--left.nx-drawer--md,
5402
- .nx-drawer--right.nx-drawer--md {
5403
- width: 420px;
7738
+ .nx-video-player__video:focus-visible {
7739
+ outline: 2px solid var(--color-brand-400, #818cf8);
7740
+ outline-offset: -2px;
5404
7741
  }
5405
- .nx-drawer--left.nx-drawer--lg,
5406
- .nx-drawer--right.nx-drawer--lg {
5407
- width: 520px;
7742
+ .nx-video-player:fullscreen .nx-video-player__video {
7743
+ height: 100%;
7744
+ object-fit: contain;
5408
7745
  }
5409
- .nx-drawer--left.nx-drawer--xl,
5410
- .nx-drawer--right.nx-drawer--xl {
5411
- width: 640px;
7746
+ .nx-video-player__controls {
7747
+ position: absolute;
7748
+ left: 0;
7749
+ right: 0;
7750
+ bottom: 0;
7751
+ display: flex;
7752
+ flex-direction: column;
7753
+ gap: var(--spacing-sm, 8px);
7754
+ padding: var(--spacing-sm, 8px) var(--spacing-md, 16px) var(--spacing-md, 16px);
7755
+ background:
7756
+ linear-gradient(
7757
+ to top,
7758
+ rgba(0, 0, 0, 0.75),
7759
+ transparent);
7760
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
7761
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
5412
7762
  }
5413
- .nx-drawer--left.nx-drawer--full,
5414
- .nx-drawer--right.nx-drawer--full {
5415
- width: 100vw;
5416
- max-width: none;
7763
+ .nx-video-player__progress {
7764
+ position: relative;
7765
+ height: 4px;
7766
+ border-radius: var(--radius-full, 999px);
7767
+ background: rgba(255, 255, 255, 0.25);
7768
+ cursor: pointer;
7769
+ touch-action: none;
5417
7770
  }
5418
- .nx-drawer--top.nx-drawer--xs,
5419
- .nx-drawer--bottom.nx-drawer--xs {
5420
- height: 200px;
7771
+ .nx-video-player__progress:focus-visible {
7772
+ outline: 2px solid var(--color-brand-400, #818cf8);
7773
+ outline-offset: 3px;
5421
7774
  }
5422
- .nx-drawer--top.nx-drawer--sm,
5423
- .nx-drawer--bottom.nx-drawer--sm {
5424
- height: 280px;
7775
+ .nx-video-player__progress-buffered,
7776
+ .nx-video-player__progress-played {
7777
+ position: absolute;
7778
+ top: 0;
7779
+ left: 0;
7780
+ bottom: 0;
7781
+ border-radius: var(--radius-full, 999px);
5425
7782
  }
5426
- .nx-drawer--top.nx-drawer--md,
5427
- .nx-drawer--bottom.nx-drawer--md {
5428
- height: 360px;
7783
+ .nx-video-player__progress-buffered {
7784
+ background: rgba(255, 255, 255, 0.4);
5429
7785
  }
5430
- .nx-drawer--top.nx-drawer--lg,
5431
- .nx-drawer--bottom.nx-drawer--lg {
5432
- height: 460px;
7786
+ .nx-video-player__progress-played {
7787
+ background: var(--color-brand-500, #6366f1);
5433
7788
  }
5434
- .nx-drawer--top.nx-drawer--xl,
5435
- .nx-drawer--bottom.nx-drawer--xl {
5436
- height: 560px;
7789
+ .nx-video-player__progress-thumb {
7790
+ position: absolute;
7791
+ top: 50%;
7792
+ width: 14px;
7793
+ height: 14px;
7794
+ box-sizing: border-box;
7795
+ border-radius: var(--radius-full, 999px);
7796
+ background: var(--color-surface, #ffffff);
7797
+ border: var(--border-widthMedium, 2px) var(--border-style, solid) var(--color-brand-500, #6366f1);
7798
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.25));
7799
+ transform: translate(-50%, -50%);
7800
+ transition: transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
7801
+ pointer-events: none;
5437
7802
  }
5438
- .nx-drawer--top.nx-drawer--full,
5439
- .nx-drawer--bottom.nx-drawer--full {
5440
- height: 100vh;
5441
- max-height: none;
7803
+ .nx-video-player__progress:focus-visible .nx-video-player__progress-thumb {
7804
+ box-shadow: 0 0 0 4px var(--color-brand-100, #e0e7ff);
5442
7805
  }
5443
- .nx-drawer__header {
7806
+ .nx-video-player__progress:active .nx-video-player__progress-thumb {
7807
+ transform: translate(-50%, -50%) scale(1.1);
7808
+ }
7809
+ .nx-video-player__row {
5444
7810
  display: flex;
5445
- align-items: flex-start;
5446
- justify-content: space-between;
5447
- gap: var(--spacing-md, 16px);
5448
- padding: var(--spacing-lg, 24px) var(--spacing-lg, 24px) 0;
5449
- flex-shrink: 0;
7811
+ align-items: center;
7812
+ gap: var(--spacing-sm, 8px);
7813
+ flex-wrap: wrap;
7814
+ row-gap: var(--spacing-xs, 6px);
5450
7815
  }
5451
- .nx-drawer__title {
5452
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5453
- font-size: var(--typography-sizeLg, 18px);
5454
- font-weight: var(--typography-weightBold, 700);
5455
- color: var(--color-text, #111827);
7816
+ @container nx-video-player (max-width: 560px) {
7817
+ .nx-video-player__time {
7818
+ display: none;
7819
+ }
5456
7820
  }
5457
- .nx-drawer__close {
5458
- flex-shrink: 0;
7821
+ .nx-video-player__icon-btn {
5459
7822
  display: inline-flex;
5460
7823
  align-items: center;
5461
7824
  justify-content: center;
5462
- width: 28px;
5463
- height: 28px;
5464
- border: none;
7825
+ width: 32px;
7826
+ height: 32px;
7827
+ flex-shrink: 0;
7828
+ box-sizing: border-box;
7829
+ border: var(--border-widthThin, 1px) var(--border-style, solid) transparent;
7830
+ border-radius: var(--radius-md, 8px);
5465
7831
  background: transparent;
5466
- color: var(--color-textMuted, #6b7280);
7832
+ color: var(--color-neutral-0, #ffffff);
5467
7833
  cursor: pointer;
5468
- border-radius: var(--radius-sm, 6px);
5469
- transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
7834
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5470
7835
  }
5471
- .nx-drawer__close:hover {
5472
- background: var(--color-surfaceRaised, #f3f4f6);
5473
- color: var(--color-text, #111827);
7836
+ .nx-video-player__icon-btn:hover {
7837
+ background: color-mix(in srgb, var(--color-brand-500, #6366f1) 35%, transparent);
7838
+ border-color: color-mix(in srgb, var(--color-brand-300, #a5b4fc) 50%, transparent);
5474
7839
  }
5475
- .nx-drawer__close:focus-visible {
5476
- outline: 2px solid var(--color-brand-500, #6366f1);
7840
+ .nx-video-player__icon-btn:disabled {
7841
+ opacity: 0.45;
7842
+ cursor: not-allowed;
7843
+ }
7844
+ .nx-video-player__icon-btn:disabled:hover {
7845
+ background: transparent;
7846
+ border-color: transparent;
7847
+ }
7848
+ .nx-video-player__icon-btn:focus-visible {
7849
+ outline: 2px solid var(--color-brand-400, #818cf8);
5477
7850
  outline-offset: 2px;
5478
7851
  }
5479
- .nx-drawer__body {
5480
- flex: 1;
5481
- overflow-y: auto;
5482
- padding: var(--spacing-lg, 24px);
5483
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5484
- font-size: var(--typography-sizeSm, 14px);
5485
- line-height: var(--typography-lineHeightNormal, 1.5);
5486
- color: var(--color-text, #111827);
7852
+ .nx-video-player__icon-btn--play {
7853
+ background: var(--color-brand-500, #6366f1);
7854
+ border-color: var(--color-border, transparent);
7855
+ color: var(--color-neutral-0, #ffffff);
7856
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.25));
5487
7857
  }
5488
- .nx-drawer__footer {
7858
+ .nx-video-player__icon-btn--play:hover {
7859
+ background: var(--color-brand-600, #4f46e5);
7860
+ border-color: var(--color-border, transparent);
7861
+ }
7862
+ .nx-video-player__icon-btn--play:active {
7863
+ box-shadow: var(--shadow-xs, 0 1px 2px rgba(0, 0, 0, 0.25));
7864
+ transform: translate(1px, 1px);
7865
+ }
7866
+ .nx-video-player__volume {
5489
7867
  display: flex;
5490
7868
  align-items: center;
5491
- justify-content: flex-end;
5492
- gap: var(--spacing-sm, 8px);
5493
- padding: 0 var(--spacing-lg, 24px) var(--spacing-lg, 24px);
7869
+ gap: var(--spacing-xs, 6px);
7870
+ }
7871
+ .nx-video-player__volume-track {
7872
+ position: relative;
7873
+ height: 4px;
7874
+ border-radius: var(--radius-full, 999px);
7875
+ background: rgba(255, 255, 255, 0.25);
7876
+ cursor: pointer;
7877
+ touch-action: none;
5494
7878
  flex-shrink: 0;
5495
7879
  }
5496
- @media (prefers-reduced-motion: reduce) {
5497
- .nx-drawer-backdrop,
5498
- .nx-drawer {
5499
- animation-duration: 0.01ms;
5500
- }
7880
+ .nx-video-player__volume-track:focus-visible {
7881
+ outline: 2px solid var(--color-brand-400, #818cf8);
7882
+ outline-offset: 3px;
7883
+ }
7884
+ .nx-video-player__volume-fill {
7885
+ position: absolute;
7886
+ top: 0;
7887
+ left: 0;
7888
+ bottom: 0;
7889
+ border-radius: var(--radius-full, 999px);
7890
+ background: var(--color-brand-500, #6366f1);
7891
+ }
7892
+ .nx-video-player__volume-thumb {
7893
+ position: absolute;
7894
+ top: 50%;
7895
+ width: 12px;
7896
+ height: 12px;
7897
+ box-sizing: border-box;
7898
+ border-radius: var(--radius-full, 999px);
7899
+ background: var(--color-surface, #ffffff);
7900
+ border: var(--border-widthMedium, 2px) var(--border-style, solid) var(--color-brand-500, #6366f1);
7901
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.25));
7902
+ transform: translate(-50%, -50%);
7903
+ pointer-events: none;
7904
+ }
7905
+ .nx-video-player__volume-track:focus-visible .nx-video-player__volume-thumb {
7906
+ box-shadow: 0 0 0 4px var(--color-brand-100, #e0e7ff);
7907
+ }
7908
+ .nx-video-player__time {
7909
+ margin-inline-start: var(--spacing-xs, 6px);
7910
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
7911
+ font-size: var(--typography-sizeXs, 12px);
7912
+ color: var(--color-neutral-0, #ffffff);
7913
+ white-space: nowrap;
7914
+ }
7915
+ .nx-video-player__spacer {
7916
+ flex: 1;
5501
7917
  }
5502
7918
 
5503
- /* src/react/Rating.css */
5504
- .nx-rating {
5505
- display: inline-flex;
7919
+ /* src/react/AudioPlayer.css */
7920
+ .nx-audio-player {
7921
+ display: flex;
7922
+ flex-direction: column;
7923
+ gap: var(--spacing-sm, 8px);
7924
+ width: 100%;
7925
+ padding: var(--spacing-md, 16px);
7926
+ border-radius: var(--radius-lg, 14px);
7927
+ background: var(--color-surface, #ffffff);
7928
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
7929
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.08));
7930
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
7931
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
7932
+ }
7933
+ .nx-audio-player:focus-visible {
7934
+ outline: 2px solid var(--color-brand-500, #6366f1);
7935
+ outline-offset: 2px;
7936
+ }
7937
+ .nx-audio-player__top {
7938
+ display: flex;
5506
7939
  align-items: center;
5507
- gap: calc(var(--spacing-xs, 4px) / 2);
5508
- outline: none;
5509
- border-radius: var(--radius-sm, 4px);
7940
+ gap: var(--spacing-sm, 8px);
5510
7941
  }
5511
- .nx-rating:focus-visible {
5512
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand-500, #6366f1) 25%, transparent);
7942
+ .nx-audio-player__cover {
7943
+ width: 44px;
7944
+ height: 44px;
7945
+ flex-shrink: 0;
7946
+ box-shadow: var(--shadow-xs, 0 1px 2px rgba(0, 0, 0, 0.08));
5513
7947
  }
5514
- .nx-rating--disabled {
5515
- opacity: 0.5;
5516
- cursor: not-allowed;
7948
+ .nx-audio-player__meta {
7949
+ flex: 1;
7950
+ min-width: 0;
7951
+ display: flex;
7952
+ flex-direction: column;
7953
+ line-height: 1.25;
5517
7954
  }
5518
- .nx-rating--readonly {
5519
- cursor: default;
7955
+ .nx-audio-player__title {
7956
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
7957
+ font-size: var(--typography-sizeSm, 14px);
7958
+ font-weight: var(--typography-weightMedium, 500);
7959
+ color: var(--color-text, #111827);
7960
+ white-space: nowrap;
7961
+ overflow: hidden;
7962
+ text-overflow: ellipsis;
5520
7963
  }
5521
- .nx-rating__star {
5522
- display: inline-flex;
7964
+ .nx-audio-player__artist {
7965
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
7966
+ font-size: var(--typography-sizeXs, 12px);
7967
+ color: var(--color-textMuted, #6b7280);
7968
+ white-space: nowrap;
7969
+ overflow: hidden;
7970
+ text-overflow: ellipsis;
7971
+ }
7972
+ .nx-audio-player__progress {
7973
+ position: relative;
7974
+ height: 6px;
7975
+ border-radius: var(--radius-full, 999px);
7976
+ background: var(--color-neutral-200, #e5e7eb);
5523
7977
  cursor: pointer;
5524
- color: var(--color-textMuted, #d1d5db);
5525
- transition: color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), transform var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
7978
+ touch-action: none;
5526
7979
  }
5527
- .nx-rating--disabled .nx-rating__star,
5528
- .nx-rating--readonly .nx-rating__star {
5529
- cursor: inherit;
7980
+ .nx-audio-player__progress:focus-visible {
7981
+ outline: 2px solid var(--color-brand-500, #6366f1);
7982
+ outline-offset: 3px;
5530
7983
  }
5531
- .nx-rating__star--half,
5532
- .nx-rating__star--full {
5533
- color: var(--color-brand-500, #6366f1);
7984
+ .nx-audio-player__progress-buffered,
7985
+ .nx-audio-player__progress-played {
7986
+ position: absolute;
7987
+ top: 0;
7988
+ left: 0;
7989
+ bottom: 0;
7990
+ border-radius: var(--radius-full, 999px);
5534
7991
  }
5535
- .nx-rating:not(.nx-rating--disabled):not(.nx-rating--readonly) .nx-rating__star:hover {
5536
- transform: scale(1.08);
7992
+ .nx-audio-player__progress-buffered {
7993
+ background: var(--color-neutral-300, #d1d5db);
5537
7994
  }
5538
- .nx-rating--xs .nx-rating__star-icon {
5539
- width: 14px;
5540
- height: 14px;
7995
+ .nx-audio-player__progress-played {
7996
+ background: var(--color-brand-500, #6366f1);
5541
7997
  }
5542
- .nx-rating--sm .nx-rating__star-icon {
5543
- width: 16px;
5544
- height: 16px;
7998
+ .nx-audio-player__progress-thumb {
7999
+ position: absolute;
8000
+ top: 50%;
8001
+ width: 12px;
8002
+ height: 12px;
8003
+ border-radius: 50%;
8004
+ background: var(--color-brand-500, #6366f1);
8005
+ transform: translate(-50%, -50%);
8006
+ box-shadow: 0 0 0 2px var(--color-surface, #fff);
5545
8007
  }
5546
- .nx-rating--md .nx-rating__star-icon {
5547
- width: 20px;
5548
- height: 20px;
8008
+ .nx-audio-player__times {
8009
+ display: flex;
8010
+ justify-content: space-between;
8011
+ font-family: var(--typography-fontSans, system-ui, sans-serif);
8012
+ font-size: var(--typography-sizeXs, 12px);
8013
+ color: var(--color-textMuted, #6b7280);
8014
+ margin-top: -2px;
5549
8015
  }
5550
- .nx-rating--lg .nx-rating__star-icon {
5551
- width: 26px;
5552
- height: 26px;
8016
+ .nx-audio-player__row {
8017
+ position: relative;
8018
+ display: flex;
8019
+ align-items: center;
8020
+ justify-content: space-between;
8021
+ gap: var(--spacing-xs, 6px);
8022
+ min-height: 38px;
5553
8023
  }
5554
- .nx-rating--xl .nx-rating__star-icon {
5555
- width: 32px;
5556
- height: 32px;
8024
+ .nx-audio-player__transport {
8025
+ display: flex;
8026
+ align-items: center;
8027
+ gap: var(--spacing-xs, 6px);
8028
+ position: absolute;
8029
+ left: 50%;
8030
+ top: 50%;
8031
+ transform: translate(-50%, -50%);
5557
8032
  }
5558
- [data-theme=neobrutalism] .nx-rating__star-icon {
5559
- stroke: #000000;
8033
+ .nx-audio-player__settings-btn {
8034
+ flex-shrink: 0;
5560
8035
  }
5561
-
5562
- /* src/react/OTPInput.css */
5563
- .nx-otp-input {
8036
+ .nx-audio-player__icon-btn {
5564
8037
  display: inline-flex;
5565
- gap: var(--spacing-sm, 8px);
5566
- }
5567
- .nx-otp-input--disabled {
5568
- opacity: 0.5;
5569
- }
5570
- .nx-otp-input__box {
5571
- text-align: center;
5572
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5573
- font-weight: var(--typography-weightMedium, 500);
5574
- color: var(--color-text, #111827);
5575
- background: var(--color-surface, #ffffff);
5576
- border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
8038
+ align-items: center;
8039
+ justify-content: center;
8040
+ width: 30px;
8041
+ height: 30px;
8042
+ flex-shrink: 0;
8043
+ box-sizing: border-box;
8044
+ border: none;
5577
8045
  border-radius: var(--radius-md, 8px);
5578
- outline: none;
5579
- transition: border-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease), box-shadow var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
8046
+ background: transparent;
8047
+ color: var(--color-text, #111827);
8048
+ cursor: pointer;
8049
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5580
8050
  }
5581
- .nx-otp-input__box:disabled {
8051
+ .nx-audio-player__icon-btn:hover {
8052
+ background: color-mix(in srgb, var(--color-brand-500, #6366f1) 12%, transparent);
8053
+ }
8054
+ .nx-audio-player__icon-btn:disabled {
8055
+ opacity: 0.4;
5582
8056
  cursor: not-allowed;
5583
- background: var(--color-neutral-50, #f9fafb);
5584
8057
  }
5585
- .nx-otp-input__box:focus {
5586
- border-color: var(--color-brand-500, #6366f1);
5587
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-brand-500, #6366f1) 20%, transparent);
8058
+ .nx-audio-player__icon-btn:disabled:hover {
8059
+ background: transparent;
5588
8060
  }
5589
- .nx-otp-input__box--filled {
5590
- border-color: var(--color-brand-500, #6366f1);
8061
+ .nx-audio-player__icon-btn:focus-visible {
8062
+ outline: 2px solid var(--color-brand-500, #6366f1);
8063
+ outline-offset: 2px;
5591
8064
  }
5592
- .nx-otp-input__box--invalid {
5593
- border-color: var(--color-danger-base, #ef4444);
8065
+ .nx-audio-player__icon-btn--play {
8066
+ width: 38px;
8067
+ height: 38px;
8068
+ border-radius: var(--radius-full, 999px);
8069
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, transparent);
8070
+ background: var(--color-brand-500, #6366f1);
8071
+ color: var(--color-neutral-0, #ffffff);
8072
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.08));
5594
8073
  }
5595
- .nx-otp-input__box--invalid:focus {
5596
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-danger-base, #ef4444) 20%, transparent);
8074
+ .nx-audio-player__icon-btn--play:hover {
8075
+ background: var(--color-brand-600, #4f46e5);
5597
8076
  }
5598
- .nx-otp-input--xs .nx-otp-input__box {
5599
- width: 28px;
5600
- height: 32px;
5601
- font-size: var(--typography-sizeSm, 14px);
8077
+ .nx-audio-player__icon-btn--play:active {
8078
+ box-shadow: var(--shadow-xs, 0 1px 2px rgba(0, 0, 0, 0.08));
8079
+ transform: translate(1px, 1px);
5602
8080
  }
5603
- .nx-otp-input--sm .nx-otp-input__box {
5604
- width: 34px;
5605
- height: 38px;
5606
- font-size: var(--typography-sizeMd, 16px);
8081
+ .nx-audio-player__volume {
8082
+ display: flex;
8083
+ align-items: center;
8084
+ gap: var(--spacing-xs, 6px);
5607
8085
  }
5608
- .nx-otp-input--md .nx-otp-input__box {
5609
- width: 42px;
5610
- height: 48px;
5611
- font-size: var(--typography-sizeLg, 18px);
8086
+ .nx-audio-player__volume-track {
8087
+ position: relative;
8088
+ height: 4px;
8089
+ border-radius: var(--radius-full, 999px);
8090
+ background: var(--color-neutral-200, #e5e7eb);
8091
+ cursor: pointer;
8092
+ touch-action: none;
8093
+ flex-shrink: 0;
5612
8094
  }
5613
- .nx-otp-input--lg .nx-otp-input__box {
5614
- width: 50px;
5615
- height: 56px;
5616
- font-size: var(--typography-sizeXl, 22px);
8095
+ .nx-audio-player__volume-track:focus-visible {
8096
+ outline: 2px solid var(--color-brand-500, #6366f1);
8097
+ outline-offset: 3px;
5617
8098
  }
5618
- .nx-otp-input--xl .nx-otp-input__box {
5619
- width: 58px;
5620
- height: 64px;
5621
- font-size: var(--typography-sizeXl, 22px);
8099
+ .nx-audio-player__volume-fill {
8100
+ position: absolute;
8101
+ top: 0;
8102
+ left: 0;
8103
+ bottom: 0;
8104
+ border-radius: var(--radius-full, 999px);
8105
+ background: var(--color-brand-500, #6366f1);
8106
+ }
8107
+ .nx-audio-player__volume-thumb {
8108
+ position: absolute;
8109
+ top: 50%;
8110
+ width: 9px;
8111
+ height: 9px;
8112
+ border-radius: 50%;
8113
+ background: var(--color-brand-500, #6366f1);
8114
+ transform: translate(-50%, -50%);
8115
+ box-shadow: 0 0 0 2px var(--color-surface, #fff);
5622
8116
  }
5623
8117
 
5624
- /* src/react/PhoneInput.css */
5625
- .nx-phone-input__country-select {
5626
- inline-size: 104px;
5627
- max-inline-size: 104px;
5628
- flex: none;
8118
+ /* src/react/PdfViewer.css */
8119
+ .nx-pdf-viewer {
8120
+ display: flex;
8121
+ flex-direction: column;
8122
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
8123
+ border-radius: var(--radius-md, 8px);
8124
+ box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.08));
8125
+ backdrop-filter: blur(var(--effects-backdropBlur, 0px));
8126
+ -webkit-backdrop-filter: blur(var(--effects-backdropBlur, 0px));
8127
+ overflow: hidden;
8128
+ background: var(--color-surface, #ffffff);
5629
8129
  }
5630
- .nx-phone-input__country-select .nx-select__trigger {
8130
+ .nx-pdf-viewer__toolbar {
8131
+ flex-shrink: 0;
8132
+ }
8133
+ .nx-pdf-viewer__frame {
8134
+ width: 100%;
8135
+ flex: 1 1 auto;
8136
+ min-height: 0;
8137
+ max-height: 90vh;
5631
8138
  border: none;
5632
- box-shadow: none !important;
5633
- background: transparent;
5634
- padding-inline-end: var(--spacing-xs, 4px);
5635
- padding-inline-start: 0;
5636
- border-inline-end: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
5637
- border-radius: 0;
8139
+ display: block;
8140
+ background: var(--color-neutral-100, #f3f4f6);
5638
8141
  }
5639
- .nx-phone-input__country-select .nx-select__value {
5640
- overflow: hidden;
5641
- text-overflow: ellipsis;
5642
- white-space: nowrap;
8142
+ @supports not (aspect-ratio: 1) {
8143
+ .nx-pdf-viewer__frame {
8144
+ height: 600px;
8145
+ }
5643
8146
  }
5644
-
5645
- /* src/react/StatCard.css */
5646
- .nx-stat-card {
8147
+ .nx-pdf-viewer__toolbar {
5647
8148
  display: flex;
5648
- flex-direction: column;
5649
- gap: var(--spacing-xs, 4px);
8149
+ align-items: center;
8150
+ gap: var(--spacing-md, 16px);
8151
+ padding: var(--spacing-xs, 6px) var(--spacing-sm, 8px);
8152
+ border-bottom: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
8153
+ background: var(--color-surfaceRaised, #f9fafb);
8154
+ flex-wrap: wrap;
5650
8155
  }
5651
- .nx-stat-card__header {
8156
+ .nx-pdf-viewer__nav,
8157
+ .nx-pdf-viewer__zoom {
5652
8158
  display: flex;
5653
8159
  align-items: center;
5654
- gap: var(--spacing-sm, 8px);
5655
- color: var(--color-textMuted, #6b7280);
8160
+ gap: var(--spacing-xs, 6px);
5656
8161
  }
5657
- .nx-stat-card__icon {
5658
- display: inline-flex;
5659
- flex: none;
5660
- color: var(--color-brand-500, #6366f1);
8162
+ .nx-pdf-viewer__page-input {
8163
+ width: 52px;
5661
8164
  }
5662
- .nx-stat-card__label {
8165
+ .nx-pdf-viewer__zoom-level {
5663
8166
  font-family: var(--typography-fontSans, system-ui, sans-serif);
5664
8167
  font-size: var(--typography-sizeSm, 14px);
5665
- font-weight: var(--typography-weightMedium, 500);
5666
- }
5667
- .nx-stat-card__value {
5668
- font-family: var(--typography-fontSans, system-ui, sans-serif);
5669
- font-size: var(--typography-sizeXl, 22px);
5670
- font-weight: var(--typography-weightBold, 700);
5671
- line-height: var(--typography-lineHeightTight, 1.2);
5672
- color: var(--color-text, #111827);
8168
+ color: var(--color-textMuted, #6b7280);
8169
+ min-width: 40px;
8170
+ text-align: center;
5673
8171
  }
5674
- .nx-stat-card__trend {
5675
- display: flex;
8172
+ .nx-pdf-viewer__fit-btn {
8173
+ display: inline-flex;
5676
8174
  align-items: center;
5677
- gap: var(--spacing-xs, 4px);
8175
+ justify-content: center;
8176
+ height: 28px;
8177
+ padding: 0 var(--spacing-sm, 8px);
8178
+ flex-shrink: 0;
8179
+ box-sizing: border-box;
8180
+ border: var(--border-widthThin, 1px) var(--border-style, solid) var(--color-border, #e5e7eb);
8181
+ border-radius: var(--radius-sm, 4px);
8182
+ background: transparent;
8183
+ color: var(--color-text, #111827);
5678
8184
  font-family: var(--typography-fontSans, system-ui, sans-serif);
5679
8185
  font-size: var(--typography-sizeSm, 14px);
5680
- font-weight: var(--typography-weightMedium, 500);
8186
+ cursor: pointer;
8187
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5681
8188
  }
5682
- .nx-stat-card__trend-icon {
5683
- inline-size: 1em;
5684
- block-size: 1em;
8189
+ .nx-pdf-viewer__fit-btn:hover:not(:disabled) {
8190
+ background: color-mix(in srgb, var(--color-brand-500, #6366f1) 12%, transparent);
5685
8191
  }
5686
- .nx-stat-card__trend--up {
5687
- color: var(--color-success-base, #10b981);
8192
+ .nx-pdf-viewer__fit-btn:disabled {
8193
+ color: var(--color-neutral-300, #d1d5db);
8194
+ border-color: var(--color-neutral-200, #e5e7eb);
8195
+ cursor: not-allowed;
5688
8196
  }
5689
- .nx-stat-card__trend--down {
5690
- color: var(--color-danger-base, #ef4444);
8197
+ .nx-pdf-viewer__fit-btn:focus-visible {
8198
+ outline: 2px solid var(--color-brand-500, #6366f1);
8199
+ outline-offset: 2px;
5691
8200
  }
5692
- .nx-stat-card__trend--flat {
5693
- color: var(--color-textMuted, #6b7280);
8201
+ .nx-pdf-viewer__icon-btn {
8202
+ display: inline-flex;
8203
+ align-items: center;
8204
+ justify-content: center;
8205
+ width: 28px;
8206
+ height: 28px;
8207
+ flex-shrink: 0;
8208
+ border: none;
8209
+ border-radius: var(--radius-sm, 4px);
8210
+ background: transparent;
8211
+ color: var(--color-text, #111827);
8212
+ cursor: pointer;
8213
+ text-decoration: none;
8214
+ transition: background-color var(--motion-durationFast, 120ms) var(--motion-easeStandard, ease);
5694
8215
  }
5695
- .nx-stat-card__trend-label {
5696
- color: var(--color-textMuted, #6b7280);
5697
- font-weight: var(--typography-weightNormal, 400);
8216
+ .nx-pdf-viewer__icon-btn:hover:not(:disabled) {
8217
+ background: color-mix(in srgb, var(--color-brand-500, #6366f1) 12%, transparent);
8218
+ }
8219
+ .nx-pdf-viewer__icon-btn:disabled {
8220
+ color: var(--color-neutral-300, #d1d5db);
8221
+ cursor: not-allowed;
8222
+ }
8223
+ .nx-pdf-viewer__icon-btn:focus-visible {
8224
+ outline: 2px solid var(--color-brand-500, #6366f1);
8225
+ outline-offset: 2px;
5698
8226
  }
5699
8227
  /*# sourceMappingURL=index.css.map */