@q1travel/design-system 0.27.2 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,9 @@
1
1
  /* q1travel design system — 发布样式(tokens + 字体兜底 + foundations + components + 组件独立样式)。构建产物,勿手改。 */
2
- :root {
2
+ /* 局部主题子树:子树根元素设置 data-q1-theme="light" 或 "dark" 后,在该元素上重新声明全部 token,
3
+ var() 引用就地按子树主题解析,颜色、阴影与 auth 域色板整体固定为该主题,不随根元素主题切换。 */
4
+ :root,
5
+ [data-q1-theme='light'],
6
+ [data-q1-theme='dark'] {
3
7
  /* color-scheme 不在此声明:tokens.css 随包发布,全局副作用交消费方应用掌管(门户侧在 global.css)。 */
4
8
  --q1-color-background-100: #ffffff;
5
9
  --q1-color-background-200: #fafafa;
@@ -311,7 +315,6 @@
311
315
  --q1-doc-page-footer-min-height: 112px;
312
316
  --q1-doc-page-footer-padding: 28px var(--q1-space-8) 48px;
313
317
  --q1-doc-intro-footer-padding: 28px 48px;
314
- --q1-doc-page-footer-action-min-width: 72px;
315
318
  --q1-radius-1: 4px;
316
319
  --q1-radius-2: 6px;
317
320
  --q1-radius-3: 8px;
@@ -349,7 +352,8 @@
349
352
  --q1-z-toast: 1400;
350
353
  }
351
354
 
352
- :root[data-theme='dark'] {
355
+ :root[data-theme='dark'],
356
+ [data-q1-theme='dark'] {
353
357
  --q1-shadow-popover:
354
358
  0 0 0 1px var(--q1-color-gray-alpha-200),
355
359
  0 4px 8px -4px color-mix(in srgb, var(--q1-color-shadow) 12%, transparent),
@@ -549,39 +553,6 @@
549
553
  --q1-color-action-text: var(--q1-color-primary-900);
550
554
  }
551
555
 
552
- /* 固定浅色子树:在任意子树根元素上设置 data-q1-theme="light",
553
- 子树内的 auth 域色板固定取浅色值,不随根元素主题切换;只覆盖 auth 组,中性链照常跟随主题。
554
- 取值与 :root 中的 auth 浅色值逐项一致,由构建与 check:token-package 校验。 */
555
- [data-q1-theme='light'] {
556
- --q1-color-auth-text-primary: #061b31;
557
- --q1-color-auth-text-secondary: #273951;
558
- --q1-color-auth-text-muted: #64748d;
559
- --q1-color-auth-border-strong: #d6dde6;
560
- --q1-color-auth-surface-card: #ffffff;
561
- --q1-color-auth-surface-subtle: #f8fafc;
562
- --q1-color-auth-surface-input: #ffffff;
563
- --q1-color-auth-surface-hover: #f6f9fc;
564
- --q1-color-auth-surface-disabled: #f6f9fc;
565
- --q1-color-auth-surface-media: #04050a;
566
- --q1-color-auth-action-hover: #4434d4;
567
- --q1-color-auth-action-press: #2e2b8c;
568
- --q1-color-auth-action-disabled-bg: #c7c9cc;
569
- --q1-color-auth-action-disabled-border: #c7c9cc;
570
- --q1-color-auth-action-disabled-text: #ffffff;
571
- --q1-color-auth-focus-ring: rgba(83, 58, 253, 0.42);
572
- --q1-color-auth-danger-border: #d92d20;
573
- --q1-color-auth-danger-surface: #fff8f7;
574
- --q1-color-auth-error-text: #be123c;
575
- --q1-color-auth-field-error-text: #d32f2f;
576
- --q1-color-auth-notice-border: #b9b9f9;
577
- --q1-color-auth-notice-surface: #efebff;
578
- --q1-color-auth-notice-text: #2e2b8c;
579
- --q1-color-auth-media-overlay: rgba(4, 5, 10, 0.46);
580
- --q1-color-auth-media-overlay-hover: rgba(4, 5, 10, 0.66);
581
- --q1-color-auth-on-media-border: rgba(255, 255, 255, 0.22);
582
- --q1-color-auth-on-media-border-hover: rgba(255, 255, 255, 0.34);
583
- }
584
-
585
556
  /* 字体继承兜底(:where 零特异度,消费方自己的 body 样式可无条件覆盖)。 */
586
557
  :where(body) {
587
558
  font-family: var(--q1-font-sans);
@@ -925,7 +896,7 @@
925
896
 
926
897
  /* Rounded:药丸形 + 柔和抬起阴影(恒黑 shadow token,暗色不泛白)。 */
927
898
  .button--rounded {
928
- border-radius: 9999px;
899
+ border-radius: var(--q1-radius-full);
929
900
  box-shadow:
930
901
  0 1px 2px color-mix(in srgb, var(--q1-color-shadow) 10%, transparent),
931
902
  0 6px 16px color-mix(in srgb, var(--q1-color-shadow) 14%, transparent);
@@ -953,7 +924,9 @@
953
924
 
954
925
  /* —— 统一着色配方 tone-surface——
955
926
  Banner/Note/ProjectBanner/状态块共享同一套,消除各自 color-mix 配方漂移;主题自适应,消费方无需 dark 块。 */
956
- :root {
927
+ :root,
928
+ [data-q1-theme='light'],
929
+ [data-q1-theme='dark'] {
957
930
  --q1-tone-bg-info: oklch(from var(--q1-color-status-info) 0.96 0.03 h);
958
931
  --q1-tone-border-info: oklch(from var(--q1-color-status-info) 0.86 0.06 h);
959
932
  --q1-tone-fg-info: oklch(from var(--q1-color-status-info) 0.47 0.13 h);
@@ -968,7 +941,8 @@
968
941
  --q1-tone-fg-danger: oklch(from var(--q1-color-status-danger) 0.47 0.13 h);
969
942
  }
970
943
 
971
- :root[data-theme='dark'] {
944
+ :root[data-theme='dark'],
945
+ [data-q1-theme='dark'] {
972
946
  --q1-tone-bg-info: oklch(from var(--q1-color-status-info) 0.24 0.04 h);
973
947
  --q1-tone-border-info: oklch(from var(--q1-color-status-info) 0.34 0.06 h);
974
948
  --q1-tone-fg-info: oklch(from var(--q1-color-status-info) 0.72 0.14 h);
@@ -983,6 +957,17 @@
983
957
  --q1-tone-fg-danger: oklch(from var(--q1-color-status-danger) 0.72 0.14 h);
984
958
  }
985
959
 
960
+ /* 局部主题子树根元素:原生控件与继承文字色随子树主题,不沿用页面主题。 */
961
+ [data-q1-theme='light'] {
962
+ color-scheme: light;
963
+ color: var(--q1-color-text-primary);
964
+ }
965
+
966
+ [data-q1-theme='dark'] {
967
+ color-scheme: dark;
968
+ color: var(--q1-color-text-primary);
969
+ }
970
+
986
971
  .form-field {
987
972
  position: relative;
988
973
  display: grid;
@@ -1246,7 +1231,7 @@
1246
1231
 
1247
1232
  /* 药丸形;双类压过 :has 尺寸档的圆角设定。 */
1248
1233
  .input-control.input-control--rounded {
1249
- border-radius: 9999px;
1234
+ border-radius: var(--q1-radius-full);
1250
1235
  }
1251
1236
 
1252
1237
 
@@ -1444,6 +1429,12 @@
1444
1429
  min-height: 48px;
1445
1430
  }
1446
1431
 
1432
+ /* Textarea 同为可编辑控件:触屏端字号不足 16px 时 iOS 聚焦会自动放大页面,与 Input 同档。 */
1433
+ .form-control--textarea {
1434
+ font-size: var(--q1-font-size-copy-16);
1435
+ line-height: var(--q1-line-height-heading-16);
1436
+ }
1437
+
1447
1438
  /* 外框内的 input 不带自身最小高度:lg 档 48px 会把外框撑到 50px,高出同档普通 Input。 */
1448
1439
  .input-control .form-control--input {
1449
1440
  min-height: 0;
@@ -1537,7 +1528,7 @@
1537
1528
  }
1538
1529
 
1539
1530
  .control-option__visual--radio {
1540
- border-radius: 999px;
1531
+ border-radius: var(--q1-radius-full);
1541
1532
  /* Radio :16px 控件、未选中环用更亮的 muted 灰。
1542
1533
  环色过渡原为 cubic-bezier(0.4,0,1,1)(ease-in),与紧邻的 Checkbox 环色 cubic-bezier(0.4,0,0.2,1)
1543
1534
  不一致——同一族控件不会有意分叉两条曲线,判定为笔误而非实测差异,随 token 化统一到 standard。 */
@@ -1555,7 +1546,7 @@
1555
1546
  left: 3px;
1556
1547
  width: 8px;
1557
1548
  height: 8px;
1558
- border-radius: 999px;
1549
+ border-radius: var(--q1-radius-full);
1559
1550
  background: var(--q1-color-text-primary);
1560
1551
  opacity: 0;
1561
1552
  }
@@ -1771,6 +1762,11 @@
1771
1762
  .menu__trigger-label {
1772
1763
  display: contents;
1773
1764
  }
1765
+ /* 带末尾 chevron 时结束侧收一档,抵消图标框自带空白,左右视觉留白对称。 */
1766
+ .menu__trigger:not(.menu__trigger--icon):has(> svg:last-child) {
1767
+ padding-inline-end: var(--q1-space-3-5);
1768
+ }
1769
+
1774
1770
  .menu__trigger:hover:not(:disabled) {
1775
1771
  background: color-mix(in srgb, var(--q1-color-text-primary) 4%, transparent);
1776
1772
  }
@@ -1954,15 +1950,6 @@
1954
1950
  margin: var(--q1-space-1) 0;
1955
1951
  background: var(--q1-color-border);
1956
1952
  }
1957
- .menu__shortcut {
1958
- padding: 1px 6px;
1959
- border-radius: var(--q1-radius-1);
1960
- background: color-mix(in srgb, var(--q1-color-text-primary) 8%, transparent);
1961
- color: var(--q1-color-text-secondary);
1962
- font-family: var(--q1-font-mono);
1963
- font-size: 11px;
1964
- line-height: 1.6;
1965
- }
1966
1953
  @media (pointer: coarse) {
1967
1954
  .menu__trigger[data-pressed='true'] {
1968
1955
  background: color-mix(in srgb, var(--q1-color-text-primary) 8%, transparent);
@@ -2255,7 +2242,7 @@
2255
2242
  margin-block-end: var(--q1-space-3);
2256
2243
  }
2257
2244
 
2258
- @media (pointer: coarse) {
2245
+ @media (pointer: coarse), (any-pointer: coarse) {
2259
2246
  .table__checkbox-control,
2260
2247
  .table__sort {
2261
2248
  min-width: 44px;
@@ -2318,8 +2305,8 @@
2318
2305
  text-transform: uppercase;
2319
2306
  }
2320
2307
 
2321
- :root[data-theme='dark'] .avatar--letter,
2322
- :root[data-theme='dark'] .avatar--glyph {
2308
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .avatar--letter:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
2309
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .avatar--glyph:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2323
2310
  background: var(--q1-color-gray-500);
2324
2311
  }
2325
2312
 
@@ -2377,7 +2364,7 @@
2377
2364
  z-index: 1;
2378
2365
  }
2379
2366
 
2380
- :root[data-theme='dark'] .avatar__badge {
2367
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .avatar__badge:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2381
2368
  --q1-avatar-badge-bg: var(--q1-color-gray-500);
2382
2369
  }
2383
2370
 
@@ -2426,7 +2413,7 @@
2426
2413
  align-items: center;
2427
2414
  gap: var(--q1-space-1);
2428
2415
  height: 24px;
2429
- border-radius: 999px;
2416
+ border-radius: var(--q1-radius-full);
2430
2417
  padding: 2px var(--q1-space-3);
2431
2418
  font-size: 12px;
2432
2419
  font-weight: var(--q1-font-weight-medium);
@@ -2507,7 +2494,7 @@
2507
2494
  color: oklch(from var(--q1-color-gray-700) 0.42 0 0);
2508
2495
  }
2509
2496
 
2510
- :root[data-theme='dark'] .badge--neutral-subtle {
2497
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--neutral-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2511
2498
  background: oklch(from var(--q1-color-gray-700) 0.26 0 0);
2512
2499
  color: oklch(from var(--q1-color-gray-700) 0.84 0 0);
2513
2500
  }
@@ -2533,22 +2520,22 @@
2533
2520
  }
2534
2521
 
2535
2522
  /* subtle 暗色:暗底 + 亮字(oklch L0.26 底 / L0.74 字)。 */
2536
- :root[data-theme='dark'] .badge--info-subtle {
2523
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--info-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2537
2524
  background: oklch(from var(--q1-color-status-info) 0.26 0.045 h);
2538
2525
  color: oklch(from var(--q1-color-status-info) 0.74 0.16 h);
2539
2526
  }
2540
2527
 
2541
- :root[data-theme='dark'] .badge--success-subtle {
2528
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--success-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2542
2529
  background: oklch(from var(--q1-color-status-success) 0.26 0.045 h);
2543
2530
  color: oklch(from var(--q1-color-status-success) 0.74 0.16 h);
2544
2531
  }
2545
2532
 
2546
- :root[data-theme='dark'] .badge--warning-subtle {
2533
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--warning-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2547
2534
  background: oklch(from var(--q1-color-status-warning) 0.26 0.045 h);
2548
2535
  color: oklch(from var(--q1-color-status-warning) 0.74 0.16 h);
2549
2536
  }
2550
2537
 
2551
- :root[data-theme='dark'] .badge--danger-subtle {
2538
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--danger-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2552
2539
  background: oklch(from var(--q1-color-status-danger) 0.26 0.045 h);
2553
2540
  color: oklch(from var(--q1-color-status-danger) 0.74 0.16 h);
2554
2541
  }
@@ -2573,7 +2560,7 @@
2573
2560
  min-height: 32px;
2574
2561
  }
2575
2562
 
2576
- :root[data-theme='dark'] .badge--quiet {
2563
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--quiet:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2577
2564
  background: oklch(from var(--q1-color-gray-700) 0.26 0 0);
2578
2565
  color: oklch(from var(--q1-color-gray-700) 0.84 0 0);
2579
2566
  }
@@ -2609,7 +2596,7 @@
2609
2596
  gap: var(--q1-space-1);
2610
2597
  height: 24px;
2611
2598
  padding: 2px var(--q1-space-3);
2612
- border-radius: 999px;
2599
+ border-radius: var(--q1-radius-full);
2613
2600
  background: var(--q1-color-background-200);
2614
2601
  box-shadow: inset 0 0 0 1px var(--q1-color-border-overlay);
2615
2602
  }
@@ -2712,9 +2699,10 @@
2712
2699
  align-items: center;
2713
2700
  gap: 6px;
2714
2701
  height: 32px;
2715
- padding: 0 var(--q1-space-3);
2702
+ /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
2703
+ padding: 0 var(--q1-space-2) 0 var(--q1-space-3);
2716
2704
  border: 1px solid var(--q1-color-border);
2717
- border-radius: 999px;
2705
+ border-radius: var(--q1-radius-full);
2718
2706
  background: var(--q1-color-bg-panel);
2719
2707
  font-size: var(--q1-font-size-label-14);
2720
2708
  font-weight: var(--q1-font-weight-medium);
@@ -2756,7 +2744,7 @@
2756
2744
  align-items: center;
2757
2745
  height: 32px;
2758
2746
  padding: 0 var(--q1-space-3);
2759
- border-radius: 999px;
2747
+ border-radius: var(--q1-radius-full);
2760
2748
  /* q1-lint-disable Q1-DS-501 页顶公告的恒深药丸:两主题同值,不参与主题翻转 */
2761
2749
  background: oklch(0.15 0 0);
2762
2750
  color: oklch(0.94 0 0);
@@ -2878,19 +2866,19 @@
2878
2866
  .banner__progress {
2879
2867
  overflow: hidden;
2880
2868
  height: 6px;
2881
- border-radius: 999px;
2869
+ border-radius: var(--q1-radius-full);
2882
2870
  background: oklch(from var(--banner-progress-color) 0.86 0.06 h);
2883
2871
  }
2884
2872
 
2885
2873
  .banner__progress-bar {
2886
2874
  width: 100%;
2887
2875
  height: 100%;
2888
- border-radius: 999px;
2876
+ border-radius: var(--q1-radius-full);
2889
2877
  background: var(--banner-progress-color);
2890
2878
  transition: transform var(--q1-duration-fast) var(--q1-ease-out);
2891
2879
  }
2892
2880
 
2893
- :root[data-theme='dark'] .banner__progress {
2881
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .banner__progress:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2894
2882
  background: oklch(from var(--banner-progress-color) 0.34 0.06 h);
2895
2883
  }
2896
2884
 
@@ -3267,7 +3255,7 @@ a.breadcrumb__link:hover {
3267
3255
  .browser__dot {
3268
3256
  width: 12px;
3269
3257
  height: 12px;
3270
- border-radius: 9999px;
3258
+ border-radius: var(--q1-radius-full);
3271
3259
  }
3272
3260
 
3273
3261
  /* 字面量 macOS 交通灯配色:
@@ -3305,7 +3293,7 @@ a.breadcrumb__link:hover {
3305
3293
  max-width: 20rem;
3306
3294
  padding: 4px 8px 4px 12px;
3307
3295
  border: 1px solid var(--browser-border, var(--q1-color-border));
3308
- border-radius: 9999px;
3296
+ border-radius: var(--q1-radius-full);
3309
3297
  background: var(--browser-surface, var(--q1-color-bg-panel));
3310
3298
  color: var(--browser-fg, var(--q1-color-text-primary));
3311
3299
  }
@@ -3479,14 +3467,17 @@ a.breadcrumb__link:hover {
3479
3467
  双层外阴影随宽度缩放、左缘 8.2% 书脊沟线、排版=宽度线性缩放 0.0836/0.061);
3480
3468
  只有真实链接在精细指针悬停时绕 Y 轴翻开(rotateY -20° + scale 1.066,横移按书宽等比缩放);
3481
3469
  裸 Book 静止,触屏与减动模式不触发翻书。 */
3482
- :root {
3470
+ :root,
3471
+ [data-q1-theme='light'],
3472
+ [data-q1-theme='dark'] {
3483
3473
  --q1-book-cover: var(--q1-color-bg-subtle);
3484
3474
  /* q1-lint-disable-next-line Q1-DS-501 书封琥珀带:装帧用色,不是语义色,故不走 token */
3485
3475
  --q1-book-band: oklch(0.8 0.195 73.6);
3486
3476
  --q1-book-sheen: none;
3487
3477
  }
3488
3478
 
3489
- :root[data-theme='dark'] {
3479
+ :root[data-theme='dark'],
3480
+ [data-q1-theme='dark'] {
3490
3481
  --q1-book-cover: var(--q1-color-gray-200);
3491
3482
  /* q1-lint-disable Q1-DS-501 书封琥珀带与暗色微光:装帧用色;微光的白是光照模拟,不是前景色 */
3492
3483
  --q1-book-band: oklch(0.75 0.174 74.5);
@@ -3733,8 +3724,13 @@ a[href]:has(> .book):focus-visible {
3733
3724
  right: 36px;
3734
3725
  }
3735
3726
 
3727
+ /* chevron 图标框自带空白,比文字侧内边距收一档,左右视觉留白对称。 */
3736
3728
  .select-control__chevron {
3737
- right: 12px;
3729
+ right: var(--q1-space-2-5);
3730
+ }
3731
+
3732
+ .select-control:has(.form-control--xs) .select-control__chevron {
3733
+ right: var(--q1-space-1-5);
3738
3734
  }
3739
3735
 
3740
3736
  .select-control:has(.form-control--select:disabled) .select-control__prefix,
@@ -3761,8 +3757,8 @@ a[href]:has(> .book):focus-visible {
3761
3757
 
3762
3758
  @media (hover: none), (pointer: coarse), (any-pointer: coarse) {
3763
3759
  .select-control .form-control--select {
3764
- min-height: 44px;
3765
- font-size: 16px;
3760
+ min-height: var(--q1-touch-target-min);
3761
+ font-size: var(--q1-font-size-copy-16);
3766
3762
  }
3767
3763
  }
3768
3764
 
@@ -3895,11 +3891,12 @@ a[href]:has(> .book):focus-visible {
3895
3891
  }
3896
3892
  }
3897
3893
 
3894
+ /* 粗指针下外框与分段保持 sm32/md40/lg48 视觉尺寸,纵向命中区由共享 TouchTarget 扩到 44px。 */
3898
3895
  @media (pointer: coarse), (any-pointer: coarse) {
3899
- .switch-control { height: auto; }
3900
3896
  .switch-control__option {
3897
+ position: relative;
3898
+ --touch-target-border-width: calc(var(--q1-space-1) * 0);
3901
3899
  min-width: var(--q1-touch-target-min);
3902
- min-height: var(--q1-touch-target-min);
3903
3900
  }
3904
3901
  }
3905
3902
 
@@ -4069,14 +4066,9 @@ a[href]:has(> .book):focus-visible {
4069
4066
  border-bottom-color: transparent;
4070
4067
  }
4071
4068
 
4069
+ /* 面板承载任意内容:文字样式继承所在页面,自身不加内边距;与标签栏的间距由 .tabs-root 的 gap 提供,左缘与标签栏对齐。 */
4072
4070
  .tabs-control__panel {
4073
- min-height: 96px;
4074
4071
  border-radius: var(--q1-radius-3);
4075
- color: var(--q1-color-text-secondary);
4076
- font-size: 14px;
4077
- line-height: 1.7;
4078
- /* 正文左缘与标签文字左缘对齐 */
4079
- padding: var(--q1-space-4) var(--q1-space-1);
4080
4072
  }
4081
4073
 
4082
4074
  .tabs-control__panel[hidden] {
@@ -4098,63 +4090,19 @@ a[href]:has(> .book):focus-visible {
4098
4090
  }
4099
4091
  }
4100
4092
 
4101
- .tabs-demo__actions {
4102
- display: flex;
4103
- flex-wrap: wrap;
4104
- gap: var(--q1-space-2);
4105
- margin-top: var(--q1-space-4);
4106
- }
4107
-
4108
- .tabs-demo__status {
4109
- margin: var(--q1-space-3) 0 0;
4110
- color: var(--q1-color-text-secondary);
4111
- font-size: var(--q1-font-size-label-13);
4112
- line-height: var(--q1-line-height-label-13);
4113
- }
4114
-
4115
- .tabs-line-demo {
4116
- display: grid;
4117
- gap: var(--q1-space-4);
4118
- }
4119
-
4120
- .tabs-line-demo__header {
4121
- display: grid;
4122
- gap: var(--q1-space-1);
4123
- }
4124
-
4125
- .tabs-line-demo__title {
4126
- margin: 0;
4127
- color: var(--q1-color-text-primary);
4128
- font-size: var(--q1-font-size-heading-20);
4129
- font-weight: var(--q1-font-weight-heading-20);
4130
- line-height: var(--q1-line-height-heading-20);
4131
- }
4132
-
4133
- .tabs-line-demo__description,
4134
- .tabs-line-demo__section-body {
4135
- margin: 0;
4136
- color: var(--q1-color-text-secondary);
4137
- font-size: var(--q1-font-size-label-14);
4138
- line-height: var(--q1-line-height-label-14);
4139
- }
4140
-
4141
- .tabs-line-demo__sections {
4142
- display: grid;
4143
- gap: var(--q1-space-6);
4144
- }
4145
-
4146
- .tabs-line-demo__section {
4147
- display: grid;
4148
- gap: var(--q1-space-1);
4149
- scroll-margin-top: var(--q1-space-6);
4150
- }
4093
+ /* 粗指针按输入方式而非视口宽度补足命中区(含宽于 820px 的平板横屏):每个标签不小于触控最小尺寸,文字在标签内居中。 */
4094
+ @media (pointer: coarse), (any-pointer: coarse) {
4095
+ .tabs-control__tab {
4096
+ justify-content: center;
4097
+ min-width: var(--q1-touch-target-min);
4098
+ min-height: var(--q1-touch-target-min);
4099
+ }
4151
4100
 
4152
- .tabs-line-demo__section-title {
4153
- margin: 0;
4154
- color: var(--q1-color-text-primary);
4155
- font-size: var(--q1-font-size-heading-16);
4156
- font-weight: var(--q1-font-weight-heading-16);
4157
- line-height: var(--q1-line-height-heading-16);
4101
+ /* 次级药丸以底色表达选中,去掉透明底边占位,文字在药丸内上下居中。 */
4102
+ .tabs-control--secondary .tabs-control__tab {
4103
+ min-height: var(--q1-touch-target-min);
4104
+ border-bottom-width: 0;
4105
+ }
4158
4106
  }
4159
4107
 
4160
4108
  @media (prefers-reduced-motion: reduce) {
@@ -4217,7 +4165,7 @@ a[href]:has(> .book):focus-visible {
4217
4165
  height: var(--cal-field-height);
4218
4166
  display: flex;
4219
4167
  align-items: center;
4220
- box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-color-border);
4168
+ box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-input-border, var(--q1-color-border-control));
4221
4169
  border-radius: var(--q1-radius-2);
4222
4170
  background: var(--q1-color-bg-panel);
4223
4171
  }
@@ -4234,17 +4182,6 @@ a[href]:has(> .book):focus-visible {
4234
4182
  --cal-field-height: calc(var(--q1-control-height-default) + var(--q1-space-2));
4235
4183
  }
4236
4184
 
4237
- .cal-field__control--filled {
4238
- box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-color-border-strong);
4239
- }
4240
-
4241
- .cal-field__control--compact .cal-field__label {
4242
- max-width: 96px;
4243
- overflow: hidden;
4244
- text-overflow: ellipsis;
4245
- white-space: nowrap;
4246
- }
4247
-
4248
4185
  .cal-field__trigger {
4249
4186
  display: inline-flex;
4250
4187
  align-items: center;
@@ -4280,7 +4217,8 @@ a[href]:has(> .book):focus-visible {
4280
4217
  }
4281
4218
 
4282
4219
  .cal-field__caret {
4283
- border-left: 1px solid var(--q1-color-border);
4220
+ border-left: calc(var(--q1-space-1) / 4) solid var(--q1-input-border, var(--q1-color-border-control));
4221
+ border-radius: 0 var(--q1-radius-2) var(--q1-radius-2) 0;
4284
4222
  }
4285
4223
 
4286
4224
  .cal-field__clear:hover,
@@ -4294,14 +4232,15 @@ a[href]:has(> .book):focus-visible {
4294
4232
  left: 0;
4295
4233
  width: max-content;
4296
4234
  display: flex;
4297
- gap: var(--q1-space-6);
4298
- padding: var(--q1-space-4);
4299
- border-radius: var(--q1-radius-3);
4235
+ gap: var(--q1-space-3);
4236
+ padding: var(--q1-space-3);
4237
+ border-radius: var(--q1-radius-4);
4300
4238
  background: var(--q1-color-bg-overlay);
4301
4239
  box-shadow: var(--q1-shadow-popover);
4302
4240
  }
4303
4241
 
4304
4242
  .cal-popover--vertical {
4243
+ width: calc(4 * var(--q1-space-16) + var(--q1-space-6));
4305
4244
  flex-direction: column;
4306
4245
  }
4307
4246
 
@@ -4315,7 +4254,9 @@ a[href]:has(> .book):focus-visible {
4315
4254
  display: flex;
4316
4255
  flex-direction: column;
4317
4256
  gap: var(--q1-space-3);
4318
- min-width: 200px;
4257
+ width: calc(4 * var(--q1-space-16));
4258
+ max-width: 100%;
4259
+ flex: none;
4319
4260
  }
4320
4261
 
4321
4262
  .cal-inputs__field {
@@ -4325,7 +4266,8 @@ a[href]:has(> .book):focus-visible {
4325
4266
  }
4326
4267
 
4327
4268
  .cal-inputs__label {
4328
- font-size: 12px;
4269
+ font-size: var(--q1-font-size-label-12);
4270
+ line-height: var(--q1-line-height-label-12);
4329
4271
  color: var(--q1-color-text-muted);
4330
4272
  }
4331
4273
 
@@ -4334,41 +4276,8 @@ a[href]:has(> .book):focus-visible {
4334
4276
  gap: var(--q1-space-2);
4335
4277
  }
4336
4278
 
4337
- .cal-inputs__value {
4338
- flex: 1;
4339
- padding-block: var(--q1-space-1);
4340
- font-size: 13px;
4341
- color: var(--q1-color-text-primary);
4342
- }
4343
-
4344
4279
  .cal-inputs__apply {
4345
- display: flex;
4346
- align-items: center;
4347
- justify-content: center;
4348
- gap: var(--q1-space-2);
4349
- padding: var(--q1-space-2);
4350
- border: 1px solid var(--q1-color-border);
4351
- border-radius: var(--q1-radius-2);
4352
- background: var(--q1-color-bg-subtle);
4353
- color: var(--q1-color-text-primary);
4354
- font-size: 13px;
4355
- cursor: pointer;
4356
- }
4357
-
4358
- .cal-inputs__apply:hover {
4359
- border-color: var(--q1-color-border-strong);
4360
- }
4361
-
4362
- .cal-inputs__apply:disabled {
4363
- border-color: var(--q1-color-border);
4364
- color: var(--q1-color-text-muted);
4365
- cursor: not-allowed;
4366
- }
4367
-
4368
- .cal-inputs__apply kbd {
4369
- font-family: var(--q1-font-mono);
4370
- font-size: 11px;
4371
- color: var(--q1-color-text-muted);
4280
+ width: 100%;
4372
4281
  }
4373
4282
 
4374
4283
  .cal-inputs__tz {
@@ -4379,19 +4288,20 @@ a[href]:has(> .book):focus-visible {
4379
4288
  border: none;
4380
4289
  background: transparent;
4381
4290
  color: var(--q1-color-text-muted);
4382
- font-size: 12px;
4291
+ font-size: var(--q1-font-size-label-12);
4292
+ line-height: var(--q1-line-height-label-12);
4383
4293
  cursor: default;
4384
4294
  }
4385
4295
 
4386
4296
  /* —— 日历网格 —— */
4387
4297
  .calendar--large {
4388
- --cal-cell: 40px;
4389
- --cal-font: 14px;
4298
+ --cal-cell: calc(4 * var(--q1-space-16) / 7);
4299
+ --cal-font: var(--q1-font-size-label-14);
4390
4300
  }
4391
4301
 
4392
4302
  .calendar--small {
4393
- --cal-cell: 32px;
4394
- --cal-font: 13px;
4303
+ --cal-cell: var(--q1-space-8);
4304
+ --cal-font: var(--q1-font-size-label-13);
4395
4305
  }
4396
4306
 
4397
4307
  .calendar__header {
@@ -4402,7 +4312,8 @@ a[href]:has(> .book):focus-visible {
4402
4312
  }
4403
4313
 
4404
4314
  .calendar__month {
4405
- font-size: var(--cal-font);
4315
+ font-size: var(--q1-font-size-label-14);
4316
+ line-height: var(--q1-line-height-label-14);
4406
4317
  font-weight: var(--q1-font-weight-medium);
4407
4318
  color: var(--q1-color-text-primary);
4408
4319
  }
@@ -4443,8 +4354,9 @@ a[href]:has(> .book):focus-visible {
4443
4354
  .calendar__weekday {
4444
4355
  display: grid;
4445
4356
  place-items: center;
4446
- font-size: 12px;
4447
- color: var(--q1-color-text-muted);
4357
+ font-size: var(--q1-font-size-label-12);
4358
+ line-height: var(--q1-line-height-label-12);
4359
+ color: var(--q1-color-text-secondary);
4448
4360
  }
4449
4361
 
4450
4362
  .calendar__grid {
@@ -4476,13 +4388,15 @@ a[href]:has(> .book):focus-visible {
4476
4388
  position: relative;
4477
4389
  display: grid;
4478
4390
  place-items: center;
4479
- width: calc(var(--cal-cell) - 6px);
4480
- height: calc(var(--cal-cell) - 6px);
4391
+ width: calc(var(--cal-cell) - var(--q1-space-1-5));
4392
+ height: calc(var(--cal-cell) - var(--q1-space-1-5));
4481
4393
  border: 1px solid transparent;
4482
4394
  border-radius: var(--q1-radius-2);
4483
4395
  background: transparent;
4484
4396
  color: var(--q1-color-text-primary);
4485
4397
  font-size: var(--cal-font);
4398
+ font-weight: var(--q1-font-weight-regular);
4399
+ line-height: var(--q1-line-height-label-14);
4486
4400
  cursor: pointer;
4487
4401
  }
4488
4402
 
@@ -4536,8 +4450,9 @@ a[href]:has(> .book):focus-visible {
4536
4450
  align-items: center;
4537
4451
  gap: var(--q1-space-2);
4538
4452
  min-width: 180px;
4539
- padding: var(--q1-space-2) var(--q1-space-3);
4540
- border: 1px solid var(--q1-color-border);
4453
+ /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
4454
+ padding: var(--q1-space-2) var(--q1-space-2-5) var(--q1-space-2) var(--q1-space-3);
4455
+ border: calc(var(--q1-space-1) / 4) solid var(--q1-input-border, var(--q1-color-border-control));
4541
4456
  border-radius: var(--q1-radius-2);
4542
4457
  background: var(--q1-color-bg-panel);
4543
4458
  color: var(--q1-color-text-primary);
@@ -4760,7 +4675,7 @@ a[href]:has(> .book):focus-visible {
4760
4675
  border-radius: var(--q1-radius-2);
4761
4676
  }
4762
4677
 
4763
- .skeleton--pill { border-radius: 999px; }
4678
+ .skeleton--pill { border-radius: var(--q1-radius-full); }
4764
4679
  .skeleton--squared { border-radius: 0; }
4765
4680
 
4766
4681
  .skeleton::before,
@@ -5237,7 +5152,6 @@ a[href]:has(> .book):focus-visible {
5237
5152
  gap: var(--q1-space-2);
5238
5153
  /* 图标没有文字基线,以底边参与对齐;下移使 16px 图标中心落在正文光学中心(13/14px 正文 3px,15px 正文 2px)。 */
5239
5154
  --q1-note-icon-optical-y: 3px;
5240
- max-width: 560px;
5241
5155
  padding: var(--q1-space-3) var(--q1-space-4);
5242
5156
  border: 1px solid var(--q1-color-border);
5243
5157
  border-radius: var(--q1-radius-2);
@@ -5666,22 +5580,6 @@ a[href]:has(> .book):focus-visible {
5666
5580
  margin-top: var(--q1-space-3);
5667
5581
  }
5668
5582
 
5669
- .error-card-retry-demo {
5670
- display: grid;
5671
- width: 100%;
5672
- gap: var(--q1-space-3);
5673
- }
5674
-
5675
- .error-card-retry-demo > .button {
5676
- justify-self: center;
5677
- }
5678
-
5679
- .error-card-retry-demo:focus-visible {
5680
- border-radius: var(--q1-radius-3);
5681
- outline: none;
5682
- box-shadow: var(--q1-shadow-focus);
5683
- }
5684
-
5685
5583
  .context-card-wrap {
5686
5584
  position: relative;
5687
5585
  display: inline-block;
@@ -6268,8 +6166,10 @@ a.context-card__trigger {
6268
6166
  border-color: transparent;
6269
6167
  }
6270
6168
 
6271
- /* 聚焦型账户入口:结构固定,文案与副作用由消费方控制。 */
6169
+ /* 聚焦型账户入口:结构固定,文案与副作用由消费方控制。
6170
+ 账户入口域:颜色只取 auth 域色板,不与中性链混用。 */
6272
6171
  .auth-card {
6172
+ background: var(--q1-color-auth-surface-card);
6273
6173
  display: grid;
6274
6174
  gap: 0;
6275
6175
  grid-template-rows: minmax(0, 1fr) auto;
@@ -6286,7 +6186,7 @@ a.context-card__trigger {
6286
6186
  }
6287
6187
 
6288
6188
  .auth-card__copy h1 {
6289
- color: var(--q1-color-text-primary);
6189
+ color: var(--q1-color-auth-text-primary);
6290
6190
  font-size: var(--q1-font-size-heading-24);
6291
6191
  font-weight: var(--q1-font-weight-heading-24);
6292
6192
  letter-spacing: -0.025em;
@@ -6295,7 +6195,7 @@ a.context-card__trigger {
6295
6195
  }
6296
6196
 
6297
6197
  .auth-card__copy p {
6298
- color: var(--q1-color-text-secondary);
6198
+ color: var(--q1-color-auth-text-secondary);
6299
6199
  font-size: var(--q1-font-size-copy-14);
6300
6200
  line-height: 1.6;
6301
6201
  margin-top: var(--q1-space-4);
@@ -6303,7 +6203,7 @@ a.context-card__trigger {
6303
6203
  }
6304
6204
 
6305
6205
  .auth-card__actions {
6306
- border-top: 1px solid var(--q1-color-border);
6206
+ border-top: 1px solid var(--q1-color-auth-border-strong);
6307
6207
  display: grid;
6308
6208
  padding-top: var(--q1-space-6);
6309
6209
  width: 100%;
@@ -6655,9 +6555,10 @@ a.q1-card:focus-visible {
6655
6555
  align-items: center;
6656
6556
  gap: var(--q1-space-1);
6657
6557
  min-height: 32px;
6658
- padding: 0 var(--q1-space-3);
6558
+ /* 末尾 chevron 的 16px 图标框自带约 3px 空白,结束侧收一档,左右视觉留白对称。 */
6559
+ padding: 0 var(--q1-space-2-5) 0 var(--q1-space-3);
6659
6560
  border: 1px solid var(--q1-color-border);
6660
- border-radius: 999px;
6561
+ border-radius: var(--q1-radius-full);
6661
6562
  background: var(--q1-color-bg-panel);
6662
6563
  font-size: var(--q1-font-size-label-14);
6663
6564
  font-weight: var(--q1-font-weight-medium);
@@ -6992,7 +6893,7 @@ a.q1-card:focus-visible {
6992
6893
  position: relative;
6993
6894
  flex: none;
6994
6895
  display: inline-block;
6995
- border-radius: 999px;
6896
+ border-radius: var(--q1-radius-full);
6996
6897
  background: var(--q1-color-gray-400);
6997
6898
  border: 0;
6998
6899
  transform: scale(1);
@@ -7204,7 +7105,7 @@ a.q1-card:focus-visible {
7204
7105
  color: var(--q1-color-text-muted);
7205
7106
  text-align: center;
7206
7107
  }
7207
- @media (pointer: coarse) {
7108
+ @media (pointer: coarse), (any-pointer: coarse) {
7208
7109
  .pagination__button {
7209
7110
  min-width: 44px;
7210
7111
  min-height: 44px;
@@ -7241,7 +7142,9 @@ a.q1-card:focus-visible {
7241
7142
  display: none;
7242
7143
  }
7243
7144
 
7244
- /* 文档顺序导航:裸轨,无外框/背景;图标锚在标题文字块内。 */
7145
+ /* 文档顺序导航:裸轨,无外框/背景。标签与标题行贴齐所在内容列的左右边缘:
7146
+ 链接保留内边距承载焦点环,再以等量负外边距外挂,文字不因内边距内缩;
7147
+ 箭头与标题同处一行,朝外一侧的图标留白以负外边距抵消,使箭头笔画与标签边缘光学对齐。 */
7245
7148
  .docs-pagination {
7246
7149
  display: flex;
7247
7150
  flex-wrap: wrap;
@@ -7256,11 +7159,11 @@ a.q1-card:focus-visible {
7256
7159
  text-decoration: none;
7257
7160
  }
7258
7161
  .docs-pagination__link--prev {
7259
- padding-left: 28px;
7162
+ margin-left: calc(var(--q1-space-2) * -1);
7260
7163
  }
7261
7164
  .docs-pagination__link--next {
7262
- padding-right: 28px;
7263
7165
  margin-left: auto;
7166
+ margin-right: calc(var(--q1-space-2) * -1);
7264
7167
  text-align: right;
7265
7168
  }
7266
7169
  .docs-pagination__link:focus-visible {
@@ -7277,12 +7180,13 @@ a.q1-card:focus-visible {
7277
7180
  color: var(--q1-color-text-primary);
7278
7181
  }
7279
7182
  .docs-pagination__title-frame {
7280
- position: relative;
7281
- display: inline-block;
7183
+ display: inline-flex;
7184
+ align-items: center;
7282
7185
  max-width: 20em;
7283
7186
  }
7284
7187
  .docs-pagination__title {
7285
7188
  display: block;
7189
+ min-width: 0;
7286
7190
  overflow: hidden;
7287
7191
  white-space: nowrap;
7288
7192
  text-overflow: ellipsis;
@@ -7292,16 +7196,17 @@ a.q1-card:focus-visible {
7292
7196
  color: var(--q1-color-text-primary);
7293
7197
  }
7294
7198
  .docs-pagination__chevron-slot {
7295
- position: absolute;
7296
- top: 2px;
7297
7199
  display: block;
7200
+ flex: none;
7298
7201
  color: var(--q1-color-text-secondary);
7299
7202
  }
7203
+ /* 20px 箭头图标朝外一侧约 6.7px 留白,抵消 6px 后笔画与标签边缘对齐(误差小于 1px)。 */
7300
7204
  .docs-pagination__link--prev .docs-pagination__chevron-slot {
7301
- left: -26px;
7205
+ order: -1;
7206
+ margin-left: calc(var(--q1-space-1) * -1.5);
7302
7207
  }
7303
7208
  .docs-pagination__link--next .docs-pagination__chevron-slot {
7304
- right: -26px;
7209
+ margin-right: calc(var(--q1-space-1) * -1.5);
7305
7210
  }
7306
7211
  .docs-pagination__link:hover .docs-pagination__chevron-slot {
7307
7212
  color: var(--q1-color-text-primary);
@@ -7314,6 +7219,14 @@ a.q1-card:focus-visible {
7314
7219
  .docs-pagination__slot {
7315
7220
  display: block;
7316
7221
  }
7222
+ /* 中间插槽:位于上一页与下一页之间,两侧自动留白使其居中,宽度由内容决定。 */
7223
+ .docs-pagination__middle {
7224
+ align-self: center;
7225
+ margin-inline: auto;
7226
+ }
7227
+ .docs-pagination__middle + .docs-pagination__link--next {
7228
+ margin-left: 0;
7229
+ }
7317
7230
  .scroller {
7318
7231
  border: 1px solid var(--q1-color-border);
7319
7232
  border-radius: var(--q1-radius-3);
@@ -7481,7 +7394,7 @@ a.q1-card:focus-visible {
7481
7394
  margin: 0;
7482
7395
  padding: 0;
7483
7396
  border: 1px solid var(--q1-color-border);
7484
- border-radius: 999px;
7397
+ border-radius: var(--q1-radius-full);
7485
7398
  background: var(--q1-color-bg-panel);
7486
7399
  }
7487
7400
  .theme-switcher__option {
@@ -7489,7 +7402,7 @@ a.q1-card:focus-visible {
7489
7402
  place-items: center;
7490
7403
  width: 32px;
7491
7404
  height: 32px;
7492
- border-radius: 999px;
7405
+ border-radius: var(--q1-radius-full);
7493
7406
  color: var(--q1-color-text-secondary);
7494
7407
  cursor: pointer;
7495
7408
  }
@@ -7557,14 +7470,14 @@ a.q1-card:focus-visible {
7557
7470
  transform: translateX(-50%);
7558
7471
  width: 30%;
7559
7472
  height: 27px;
7560
- border-radius: 999px;
7473
+ border-radius: var(--q1-radius-full);
7561
7474
  background: oklch(0 0 0);
7562
7475
  z-index: 2;
7563
7476
  }
7564
7477
  .phone__btn {
7565
7478
  position: absolute;
7566
7479
  width: 2px;
7567
- border-radius: 999px;
7480
+ border-radius: var(--q1-radius-full);
7568
7481
  background: oklch(0.32 0 0);
7569
7482
  }
7570
7483
  /* q1-lint-enable Q1-DS-501 */
@@ -7609,7 +7522,7 @@ a.q1-card:focus-visible {
7609
7522
  transform: translateX(-50%);
7610
7523
  width: 34%;
7611
7524
  height: 4px;
7612
- border-radius: 999px;
7525
+ border-radius: var(--q1-radius-full);
7613
7526
  background: var(--q1-color-text-primary);
7614
7527
  z-index: 2;
7615
7528
  }
@@ -7942,12 +7855,12 @@ a.q1-card:focus-visible {
7942
7855
  }
7943
7856
  .slider-input::-webkit-slider-runnable-track {
7944
7857
  height: 8px;
7945
- border-radius: 999px;
7858
+ border-radius: var(--q1-radius-full);
7946
7859
  background: var(--q1-color-bg-subtle);
7947
7860
  }
7948
7861
  .slider-input::-moz-range-track {
7949
7862
  height: 8px;
7950
- border-radius: 999px;
7863
+ border-radius: var(--q1-radius-full);
7951
7864
  background: var(--q1-color-bg-subtle);
7952
7865
  }
7953
7866
  /* 竖条拇指:6×14 白色小竖条 + 定义环;action-on-primary 两主题恒白(拇指骑在 primary 填充上)。 */
@@ -8097,7 +8010,7 @@ a.q1-card:focus-visible {
8097
8010
  left: 0;
8098
8011
  right: 0;
8099
8012
  height: 8px;
8100
- border-radius: 999px;
8013
+ border-radius: var(--q1-radius-full);
8101
8014
  background: var(--q1-color-bg-subtle);
8102
8015
  transform: translateY(-50%);
8103
8016
  }
@@ -8107,7 +8020,7 @@ a.q1-card:focus-visible {
8107
8020
  left: var(--low);
8108
8021
  right: calc(100% - var(--high));
8109
8022
  height: 8px;
8110
- border-radius: 999px;
8023
+ border-radius: var(--q1-radius-full);
8111
8024
  background: var(--q1-color-action-primary);
8112
8025
  transform: translateY(-50%);
8113
8026
  }
@@ -8279,20 +8192,26 @@ a.q1-card:focus-visible {
8279
8192
  .split-button__icon--loading {
8280
8193
  visibility: hidden;
8281
8194
  }
8282
- /* 变体 */
8195
+ /* 变体:default 是浅灰底 + border-strong 外框,分割线与外框同为 border-strong,在浅灰底上保持清晰;
8196
+ secondary 是面板底 + 与 Button 次要档一致的 border 外框,分割线与外框同色同粗,强调层级低于 default。 */
8283
8197
  .split-button--default .split-button__primary,
8284
8198
  .split-button--default .split-button__toggle {
8285
8199
  background: var(--q1-color-bg-subtle);
8286
8200
  }
8287
8201
  .split-button--secondary .split-button__primary,
8288
8202
  .split-button--secondary .split-button__toggle {
8203
+ border-color: var(--q1-color-border);
8289
8204
  background: var(--q1-color-bg-panel);
8290
8205
  }
8291
8206
  @media (hover: hover) and (pointer: fine) {
8292
- .split-button__primary:hover:not(:disabled, [aria-disabled='true']),
8293
- .split-button__toggle:hover:not(:disabled, [aria-disabled='true']) {
8207
+ .split-button--default .split-button__primary:hover:not(:disabled, [aria-disabled='true']),
8208
+ .split-button--default .split-button__toggle:hover:not(:disabled, [aria-disabled='true']) {
8294
8209
  background: color-mix(in srgb, var(--q1-color-text-primary) 7%, transparent);
8295
8210
  }
8211
+ .split-button--secondary .split-button__primary:hover:not(:disabled, [aria-disabled='true']),
8212
+ .split-button--secondary .split-button__toggle:hover:not(:disabled, [aria-disabled='true']) {
8213
+ background: var(--q1-color-bg-hover);
8214
+ }
8296
8215
  }
8297
8216
  .split-button__primary:disabled,
8298
8217
  .split-button__toggle:disabled {
@@ -8409,7 +8328,8 @@ a.q1-card:focus-visible {
8409
8328
  /* md 默认 40px,与家族刻度 sm32/md40/lg48(Input/Select/Button 同体系)一致。 */
8410
8329
  min-height: 40px;
8411
8330
  padding: 0 var(--q1-space-3);
8412
- border: 1px solid var(--q1-color-border-strong);
8331
+ /* 与 Input(.form-control / .input-control)同走控件边界角色,同一表单里边框深浅一致。 */
8332
+ border: 1px solid var(--q1-color-border-control);
8413
8333
  border-radius: var(--q1-radius-2);
8414
8334
  background: var(--q1-color-bg-sunken);
8415
8335
  }
@@ -8428,6 +8348,12 @@ a.q1-card:focus-visible {
8428
8348
  font-size: var(--q1-font-size-copy-16);
8429
8349
  line-height: var(--q1-line-height-heading-16);
8430
8350
  }
8351
+ /* 悬停加深与 Input(.input-control:hover)同档同条件;聚焦、禁用、错误态不加深。 */
8352
+ .combobox__control:hover:not(:focus-within):not(:has(:disabled, [aria-invalid='true'])):not(.combobox--error .combobox__control):not(
8353
+ .combobox--disabled .combobox__control
8354
+ ) {
8355
+ border-color: var(--q1-color-gray-800);
8356
+ }
8431
8357
  .combobox__control:has(.combobox__input:focus) {
8432
8358
  box-shadow: var(--q1-shadow-focus-input);
8433
8359
  }
@@ -8580,8 +8506,9 @@ a.q1-card:focus-visible {
8580
8506
  justify-content: space-between;
8581
8507
  gap: var(--q1-space-3);
8582
8508
  min-width: 200px;
8583
- padding: var(--q1-space-2) var(--q1-space-3);
8584
- border: 1px solid var(--q1-color-border-strong);
8509
+ /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
8510
+ padding: var(--q1-space-2) var(--q1-space-2-5) var(--q1-space-2) var(--q1-space-3);
8511
+ border: 1px solid var(--q1-color-border-control);
8585
8512
  border-radius: var(--q1-radius-2);
8586
8513
  background: var(--q1-color-bg-sunken);
8587
8514
  color: var(--q1-color-text-primary);
@@ -8766,13 +8693,15 @@ a.q1-card:focus-visible {
8766
8693
  display: flex;
8767
8694
  align-items: flex-start;
8768
8695
  justify-content: center;
8769
- padding: var(--q1-space-6) var(--q1-space-4);
8696
+ /* 面板落在视口上部约 18% 处、不贴顶:上限 144px(1.5 × space-24),矮视口按比例收紧。 */
8697
+ --search-dialog-offset-top: min(18vh, calc(var(--q1-space-24) * 1.5));
8698
+ padding: var(--search-dialog-offset-top) var(--q1-space-4) var(--q1-space-4);
8770
8699
  }
8700
+ /* 遮罩颜色与 Modal 同源,见 overlay-surfaces.css:浅色为白纱,暗色压暗。 */
8771
8701
  .search-dialog__backdrop {
8772
8702
  position: absolute;
8773
8703
  inset: 0;
8774
8704
  border: 0;
8775
- background: color-mix(in srgb, var(--q1-color-shadow) 45%, transparent);
8776
8705
  cursor: default;
8777
8706
  }
8778
8707
  .search-dialog__panel {
@@ -8780,37 +8709,33 @@ a.q1-card:focus-visible {
8780
8709
  display: flex;
8781
8710
  flex-direction: column;
8782
8711
  width: min(640px, calc(100vw - 2 * var(--q1-space-4)));
8783
- max-height: calc(100dvh - 2 * var(--q1-space-6));
8712
+ max-height: calc(100dvh - var(--search-dialog-offset-top) - var(--q1-space-4));
8784
8713
  overflow: hidden;
8785
8714
  border-radius: var(--q1-radius-4);
8786
8715
  background: var(--q1-color-bg-raised);
8787
8716
  box-shadow: var(--q1-shadow-modal);
8788
8717
  }
8718
+ /* 融合式输入:输入框不加描边与焦点环,和弹层头部连成一体,下方一条分隔线;
8719
+ 焦点由插入光标与模态弹层本身表达(打开即聚焦输入框)。 */
8789
8720
  .search-dialog__search {
8790
8721
  display: flex;
8791
8722
  flex: none;
8792
8723
  align-items: center;
8793
8724
  gap: var(--q1-space-3);
8794
- padding: var(--q1-space-3) var(--q1-space-4);
8725
+ padding: var(--q1-space-2) var(--q1-space-3) var(--q1-space-2) var(--q1-space-4);
8795
8726
  border-bottom: 1px solid var(--q1-color-border);
8796
8727
  }
8797
8728
  .search-dialog__field {
8798
8729
  display: flex;
8799
8730
  min-width: 0;
8800
- min-height: 44px;
8731
+ min-height: var(--q1-space-10);
8801
8732
  flex: 1 1 auto;
8802
8733
  align-items: center;
8803
- gap: var(--q1-space-2);
8804
- padding-inline: var(--q1-space-3);
8805
- border-radius: var(--q1-radius-2);
8734
+ gap: var(--q1-space-3);
8806
8735
  color: var(--q1-color-text-secondary);
8807
8736
  }
8808
- .search-dialog__field:focus-within {
8809
- box-shadow: var(--q1-shadow-focus-input);
8810
- }
8811
8737
  .search-dialog__input {
8812
8738
  min-width: 0;
8813
- min-height: 44px;
8814
8739
  flex: 1 1 auto;
8815
8740
  padding: 0;
8816
8741
  border: 0;
@@ -8823,18 +8748,20 @@ a.q1-card:focus-visible {
8823
8748
  outline: none;
8824
8749
  box-shadow: none;
8825
8750
  }
8751
+ /* 关闭入口以 Esc 键帽呈现:键盘优先、视觉更轻;粗指针下由 TouchTarget 扩展到 44px 命中区。 */
8826
8752
  .search-dialog__close {
8827
- display: grid;
8828
- width: 44px;
8829
- height: 44px;
8753
+ position: relative;
8754
+ display: inline-flex;
8830
8755
  flex: none;
8831
- place-items: center;
8756
+ align-items: center;
8757
+ padding: 0;
8832
8758
  border: 0;
8833
- border-radius: var(--q1-radius-2);
8759
+ border-radius: var(--q1-radius-1);
8834
8760
  background: transparent;
8835
8761
  color: var(--q1-color-text-secondary);
8836
8762
  cursor: pointer;
8837
8763
  transition: transform var(--q1-duration-press) var(--q1-ease-out);
8764
+ --touch-target-border-width: 0px;
8838
8765
  }
8839
8766
  .search-dialog__close:focus-visible,
8840
8767
  .search-dialog__clear:focus-visible,
@@ -8865,7 +8792,7 @@ a.q1-card:focus-visible {
8865
8792
  isolation: isolate;
8866
8793
  display: flex;
8867
8794
  width: 100%;
8868
- min-height: 44px;
8795
+ min-height: calc(var(--q1-space-8) + var(--q1-space-1));
8869
8796
  flex-direction: column;
8870
8797
  justify-content: center;
8871
8798
  gap: 0;
@@ -8896,11 +8823,10 @@ a.q1-card:focus-visible {
8896
8823
  background: var(--q1-color-bg-subtle);
8897
8824
  }
8898
8825
  @media (hover: hover) and (pointer: fine) {
8899
- .search-dialog__close:hover,
8900
8826
  .search-dialog__clear:hover {
8901
8827
  background: var(--q1-color-bg-subtle);
8902
8828
  }
8903
- .search-dialog__close:hover {
8829
+ .search-dialog__close:hover .q1-kbd {
8904
8830
  color: var(--q1-color-text-primary);
8905
8831
  }
8906
8832
  .search-dialog__body[data-search-dialog-pointer-navigation='true'] .search-dialog__option:hover:not(:disabled) {
@@ -8926,6 +8852,20 @@ a.q1-card:focus-visible {
8926
8852
  font-size: var(--q1-font-size-label-13);
8927
8853
  line-height: var(--q1-line-height-label-13);
8928
8854
  }
8855
+ /* 当前项:右侧勾选标记,与键盘活动项的底色高亮相互独立;标记不进入可访问名称,语义由 aria-current 提供。 */
8856
+ .search-dialog__option[aria-current] {
8857
+ padding-inline-end: calc(var(--q1-space-2) + var(--q1-space-4) + var(--q1-space-2));
8858
+ }
8859
+ .search-dialog__option-current {
8860
+ position: absolute;
8861
+ z-index: 1;
8862
+ top: 50%;
8863
+ right: var(--q1-space-2);
8864
+ width: var(--q1-space-4);
8865
+ height: var(--q1-space-4);
8866
+ color: var(--q1-color-text-primary);
8867
+ translate: 0 -50%;
8868
+ }
8929
8869
  .search-dialog__empty {
8930
8870
  display: grid;
8931
8871
  justify-items: center;
@@ -8948,12 +8888,17 @@ a.q1-card:focus-visible {
8948
8888
  cursor: pointer;
8949
8889
  transition: transform var(--q1-duration-press) var(--q1-ease-out);
8950
8890
  }
8891
+ /* 粗指针:输入行与结果行回到 44px 触控高度。 */
8892
+ @media (pointer: coarse), (any-pointer: coarse) {
8893
+ .search-dialog__field,
8894
+ .search-dialog__option {
8895
+ min-height: var(--q1-touch-target-min);
8896
+ }
8897
+ }
8898
+ /* 窄屏:软键盘会占去下半屏,面板贴近顶部,把高度留给结果列表。 */
8951
8899
  @media (max-width: 480px) {
8952
8900
  .search-dialog {
8953
- padding: var(--q1-space-4);
8954
- }
8955
- .search-dialog__panel {
8956
- max-height: calc(100dvh - 2 * var(--q1-space-4));
8901
+ --search-dialog-offset-top: var(--q1-space-4);
8957
8902
  }
8958
8903
  .search-dialog__trigger-control {
8959
8904
  min-width: 44px;
@@ -9013,25 +8958,15 @@ a.q1-card:focus-visible {
9013
8958
  color: var(--q1-color-text-muted);
9014
8959
  background: transparent;
9015
8960
  }
9016
- .modal-btn--primary {
9017
- border-color: var(--q1-color-action-primary);
9018
- background: var(--q1-color-action-primary);
9019
- color: var(--q1-color-action-on-primary);
9020
- }
9021
- .modal-btn--primary:hover {
9022
- background: var(--q1-color-action-primary-hover, var(--q1-color-action-primary));
9023
- }
9024
8961
  /* 禁用主按钮。这是实心 CTA 按钮,
9025
8962
  沿用 Input/Select 已建立的「底色抬灰」表单控件禁用配方,而非 Radio 的描边控件配方——
9026
8963
  gray-500 实底配 bg-canvas 字在暗色主题对比度不足,bg-subtle + text-muted 双主题都可读。 */
9027
- .modal-btn--primary:disabled,
9028
8964
  .modal-btn--danger:disabled {
9029
8965
  border-color: var(--q1-color-border);
9030
8966
  background: var(--q1-color-bg-subtle);
9031
8967
  color: var(--q1-color-text-muted);
9032
8968
  cursor: not-allowed;
9033
8969
  }
9034
- .modal-btn--primary:disabled:hover,
9035
8970
  .modal-btn--danger:disabled:hover {
9036
8971
  background: var(--q1-color-bg-subtle);
9037
8972
  }
@@ -9250,7 +9185,7 @@ a.q1-card:focus-visible {
9250
9185
  .drawer__grabber {
9251
9186
  width: 36px;
9252
9187
  height: 4px;
9253
- border-radius: 999px;
9188
+ border-radius: var(--q1-radius-full);
9254
9189
  background: var(--q1-color-border-strong);
9255
9190
  }
9256
9191
  .drawer__title {
@@ -9847,12 +9782,14 @@ a.q1-card:focus-visible {
9847
9782
  padding: 0 var(--q1-space-2);
9848
9783
  }
9849
9784
 
9785
+ /* 分区标题比条目小一档、加粗,并取主文字色:条目默认为次级文字色,标题若同为次级色,
9786
+ 层级只剩字重差,扫读时容易和条目混在一起。 */
9850
9787
  .q1-navigation__section-heading {
9851
9788
  flex: 1 1 auto;
9852
9789
  min-width: 0;
9853
9790
  overflow: hidden;
9854
9791
  margin: 0;
9855
- color: var(--q1-color-text-secondary);
9792
+ color: var(--q1-color-text-primary);
9856
9793
  font-size: var(--q1-font-size-label-13);
9857
9794
  font-weight: var(--q1-font-weight-semibold);
9858
9795
  line-height: var(--q1-line-height-label-13);
@@ -9945,7 +9882,7 @@ a.q1-navigation__item[aria-disabled='true'] {
9945
9882
  width: 16px;
9946
9883
  height: 16px;
9947
9884
  stroke: currentColor;
9948
- stroke-width: 1.8;
9885
+ stroke-width: 2;
9949
9886
  translate: 0 var(--q1-optical-icon-shift-cjk-label);
9950
9887
  }
9951
9888
 
@@ -10175,7 +10112,8 @@ a.q1-navigation__item[aria-disabled='true'] {
10175
10112
  border: 1px solid var(--q1-color-border);
10176
10113
  border-radius: var(--q1-radius-3);
10177
10114
  background: var(--q1-color-bg-panel);
10178
- padding: var(--q1-space-1) var(--q1-space-2);
10115
+ /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
10116
+ padding: var(--q1-space-1) var(--q1-space-1) var(--q1-space-1) var(--q1-space-2);
10179
10117
  color: var(--q1-color-text-primary);
10180
10118
  font: inherit;
10181
10119
  text-align: start;
@@ -10825,12 +10763,6 @@ a.q1-navigation__item[aria-disabled='true'] {
10825
10763
  display: block;
10826
10764
  margin-left: 0.4em;
10827
10765
  }
10828
- .json-view-boundary-stack {
10829
- display: grid;
10830
- min-width: 0;
10831
- gap: var(--q1-space-3);
10832
- }
10833
-
10834
10766
  @media (pointer: coarse), (any-pointer: coarse) {
10835
10767
  .q1-json-view__summary {
10836
10768
  box-sizing: border-box;
@@ -11132,8 +11064,7 @@ a.q1-navigation__item[aria-disabled='true'] {
11132
11064
  .search-dialog__input:focus-visible,
11133
11065
  .command-palette .command-palette__search input:focus,
11134
11066
  .control-option:has(input:focus-visible) .control-option__visual,
11135
- .theme-switcher__option:has(input:focus-visible),
11136
- .radio-headless-card:has(input:focus-visible) {
11067
+ .theme-switcher__option:has(input:focus-visible) {
11137
11068
  outline: 2px solid Highlight;
11138
11069
  outline-offset: 2px;
11139
11070
  }
@@ -11343,7 +11274,6 @@ a.q1-navigation__item[aria-disabled='true'] {
11343
11274
 
11344
11275
  .cal-field__clear:focus-visible,
11345
11276
  .cal-field__caret:focus-visible,
11346
- .cal-inputs__apply:focus-visible,
11347
11277
  .cal-period__option:focus-visible {
11348
11278
  outline: none;
11349
11279
  box-shadow: var(--q1-shadow-focus);
@@ -11374,6 +11304,26 @@ a.q1-navigation__item[aria-disabled='true'] {
11374
11304
  font-weight: var(--q1-font-weight-medium);
11375
11305
  }
11376
11306
 
11307
+ .calendar {
11308
+ flex: none;
11309
+ }
11310
+
11311
+ .cal-popover--vertical > .calendar {
11312
+ align-self: center;
11313
+ }
11314
+
11315
+ .cal-popover--vertical > .calendar--large {
11316
+ width: 100%;
11317
+ }
11318
+
11319
+ .cal-popover--vertical .calendar--large .calendar__grid {
11320
+ grid-template-columns: repeat(7, minmax(0, 1fr));
11321
+ }
11322
+
11323
+ .cal-popover--vertical .calendar--large .calendar__cell {
11324
+ width: 100%;
11325
+ }
11326
+
11377
11327
  .cal-popover {
11378
11328
  box-sizing: border-box;
11379
11329
  max-width: calc(100vw - var(--q1-space-2));
@@ -11443,6 +11393,10 @@ a.q1-navigation__item[aria-disabled='true'] {
11443
11393
  }
11444
11394
 
11445
11395
  @media (pointer: coarse), (any-pointer: coarse) {
11396
+ .cal-popover--vertical {
11397
+ width: calc(7 * var(--q1-touch-target-min) + 2 * var(--q1-space-3));
11398
+ }
11399
+
11446
11400
  .cal-inputs__apply,
11447
11401
  .cal-period__trigger,
11448
11402
  .cal-period__option {
@@ -11467,21 +11421,94 @@ a.q1-navigation__item[aria-disabled='true'] {
11467
11421
  }
11468
11422
  }
11469
11423
 
11470
- /* 时间输入复用 Input 的 .form-control 皮肤与 sm 高度档;宽度按 HH:mm 五个等宽字符加左右内边距。 */
11424
+ .cal-field__control:has(.cal-field__trigger[aria-invalid='true']:not(:disabled)) {
11425
+ box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-color-status-danger);
11426
+ }
11427
+
11428
+ .cal-field__clear:disabled {
11429
+ color: var(--q1-color-text-muted);
11430
+ cursor: not-allowed;
11431
+ }
11432
+
11433
+ .sheet__panel:has(.cal-sheet) {
11434
+ overflow-y: auto;
11435
+ }
11436
+
11437
+ .sheet__panel:has(.cal-sheet) > .sheet__body {
11438
+ flex: none;
11439
+ overflow: visible;
11440
+ padding: var(--q1-space-2);
11441
+ }
11442
+
11443
+ .cal-sheet {
11444
+ display: flex;
11445
+ flex-direction: column;
11446
+ align-items: center;
11447
+ gap: var(--q1-space-4);
11448
+ }
11449
+
11450
+ .cal-field__control:has(.cal-field__trigger[aria-invalid='true']:not(:disabled)):focus-within {
11451
+ box-shadow: var(--q1-shadow-focus-input-danger);
11452
+ }
11453
+
11454
+ /* 日期与时间复用 Input 的 sm 档,日期填满时间框以外的行宽。 */
11471
11455
  .cal-time-input {
11472
11456
  flex: none;
11473
- width: calc(6ch + 2 * var(--q1-space-3));
11457
+ width: calc(var(--q1-space-16) + var(--q1-space-6));
11474
11458
  font-variant-numeric: tabular-nums;
11475
11459
  }
11476
11460
  @media (pointer: coarse), (any-pointer: coarse) {
11477
11461
  .cal-time-input { min-height: var(--q1-touch-target-min); font-size: var(--q1-font-size-copy-16); }
11478
11462
  }
11479
11463
 
11480
- /* Calendar 触发器:与 Select 一样铺满所在列,长值截断;禁用态对齐 Select(浅灰底、弱边界、弱化文字)。 */
11464
+ .cal-date-input {
11465
+ flex: 1;
11466
+ min-width: 0;
11467
+ width: 0;
11468
+ font-variant-numeric: tabular-nums;
11469
+ }
11470
+
11471
+ .cal-inputs__error {
11472
+ color: var(--q1-color-status-danger);
11473
+ font-size: var(--q1-font-size-label-12);
11474
+ line-height: var(--q1-line-height-label-12);
11475
+ }
11476
+
11477
+ .cal-inputs__timezone .form-field {
11478
+ width: 100%;
11479
+ }
11480
+
11481
+ .cal-inputs__timezone .form-control--select {
11482
+ color: var(--q1-color-text-secondary);
11483
+ }
11484
+
11485
+ @media (pointer: coarse), (any-pointer: coarse) {
11486
+ .cal-date-input {
11487
+ min-height: var(--q1-touch-target-min);
11488
+ font-size: var(--q1-font-size-copy-16);
11489
+ }
11490
+ }
11491
+
11492
+ /* 与 Input 共用静息描边;宽度由现有控制高度和间距刻度组合。 */
11493
+ .cal-field {
11494
+ min-width: min(100%, calc(6 * var(--q1-control-height-default) + var(--q1-space-2)));
11495
+ }
11496
+
11497
+ .cal-field__control:not(.cal-field__control--filled) .cal-field__trigger {
11498
+ color: var(--q1-color-text-muted);
11499
+ }
11500
+
11481
11501
  .cal-field__trigger {
11482
11502
  min-width: 0;
11503
+ border-radius: inherit;
11483
11504
  }
11484
11505
 
11506
+ .cal-field__control--compact .cal-field__trigger {
11507
+ border-start-end-radius: 0;
11508
+ border-end-end-radius: 0;
11509
+ }
11510
+
11511
+
11485
11512
  .cal-field__label {
11486
11513
  min-width: 0;
11487
11514
  overflow: hidden;
@@ -11500,6 +11527,96 @@ a.q1-navigation__item[aria-disabled='true'] {
11500
11527
  cursor: not-allowed;
11501
11528
  }
11502
11529
 
11530
+ /* 复用 Input 的共用外框与内部分隔线,以及 SplitButton 的外侧圆角和焦点层级。 */
11531
+ .cal-field-group {
11532
+ display: grid;
11533
+ grid-template-columns: repeat(2, minmax(0, 1fr));
11534
+ width: calc(12 * var(--q1-control-height-default) + 2 * var(--q1-space-2));
11535
+ max-width: 100%;
11536
+ border-radius: var(--q1-radius-2);
11537
+ background: var(--q1-color-bg-panel);
11538
+ box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-input-border, var(--q1-color-border-control));
11539
+ }
11540
+
11541
+ .cal-field-group--stacked {
11542
+ grid-template-columns: minmax(0, 1fr);
11543
+ width: calc(6 * var(--q1-control-height-default) + var(--q1-space-2));
11544
+ }
11545
+
11546
+ .cal-field-group > .cal-period,
11547
+ .cal-field-group > .cal-field {
11548
+ min-width: 0;
11549
+ }
11550
+
11551
+ .cal-field-group > .cal-period:focus-within,
11552
+ .cal-field-group > .cal-field:focus-within {
11553
+ z-index: 1;
11554
+ }
11555
+
11556
+ .cal-field-group > .cal-period > .cal-period__trigger {
11557
+ box-sizing: border-box;
11558
+ width: 100%;
11559
+ min-width: 0;
11560
+ height: 100%;
11561
+ min-height: var(--q1-control-height-default);
11562
+ border: 0;
11563
+ border-inline-end: calc(var(--q1-space-1) / 4) solid var(--q1-input-border, var(--q1-color-border-control));
11564
+ border-radius: var(--q1-radius-2) 0 0 var(--q1-radius-2);
11565
+ background: transparent;
11566
+ color: var(--q1-color-text-muted);
11567
+ }
11568
+
11569
+ .cal-field-group > .cal-field > .cal-field__control {
11570
+ box-shadow: none;
11571
+ background: transparent;
11572
+ border-radius: 0 var(--q1-radius-2) var(--q1-radius-2) 0;
11573
+ }
11574
+
11575
+ .cal-field-group--stacked > .cal-period > .cal-period__trigger {
11576
+ border-inline-end: 0;
11577
+ border-block-end: calc(var(--q1-space-1) / 4) solid var(--q1-input-border, var(--q1-color-border-control));
11578
+ border-radius: var(--q1-radius-2) var(--q1-radius-2) 0 0;
11579
+ }
11580
+
11581
+ .cal-field-group--stacked > .cal-field > .cal-field__control {
11582
+ border-radius: 0 0 var(--q1-radius-2) var(--q1-radius-2);
11583
+ }
11584
+
11585
+ .cal-field-group > .cal-field > .cal-field__control:has(:focus-visible) {
11586
+ box-shadow: var(--q1-shadow-focus-input);
11587
+ }
11588
+
11589
+ .cal-field-group .cal-field__trigger:focus-visible,
11590
+ .cal-field-group .cal-field__caret:focus-visible,
11591
+ .cal-field-group .cal-field__clear:focus-visible {
11592
+ box-shadow: none;
11593
+ border-radius: inherit;
11594
+ }
11595
+
11596
+ .cal-field-group .cal-field__control--compact .cal-field__trigger:focus-visible {
11597
+ border-start-end-radius: 0;
11598
+ border-end-end-radius: 0;
11599
+ }
11600
+
11601
+ .cal-field-group--small .cal-field__control {
11602
+ --cal-field-height: var(--q1-space-8);
11603
+ }
11604
+
11605
+ .cal-field-group--small > .cal-period > .cal-period__trigger {
11606
+ min-height: var(--q1-space-8);
11607
+ padding-block: 0;
11608
+ }
11609
+
11610
+ @media (hover: none), (pointer: coarse), (any-pointer: coarse) {
11611
+ .cal-field-group--small .cal-field__control {
11612
+ --cal-field-height: var(--q1-touch-target-min);
11613
+ }
11614
+
11615
+ .cal-field-group > .cal-period > .cal-period__trigger {
11616
+ min-height: var(--q1-touch-target-min);
11617
+ }
11618
+ }
11619
+
11503
11620
  @media (max-width: 40rem) {
11504
11621
  .sheet__panel.sheet__panel--mobile-fullscreen {
11505
11622
  inset: 0;
@@ -13103,7 +13220,7 @@ a.q1-navigation__item[aria-disabled='true'] {
13103
13220
  }
13104
13221
 
13105
13222
  @media (pointer: coarse), (any-pointer: coarse) {
13106
- :where(:is(.button, .copy-button, .menu__trigger, .dots-menu__trigger, .description__hint, .description__hint-close, .theme-switch button, .twc__copy, .docs-navigation-full-link, .docs-sidebar-options, .docs-mobile-navigation__trigger, a.sidebar__link):has(.q1-touch-target)) {
13223
+ :where(:is(.button, .copy-button, .menu__trigger, .dots-menu__trigger, .description__hint, .description__hint-close, .twc__copy):has(.q1-touch-target)) {
13107
13224
  position: relative;
13108
13225
  }
13109
13226
 
@@ -13112,7 +13229,7 @@ a.q1-navigation__item[aria-disabled='true'] {
13112
13229
  --touch-target-border-width: calc(var(--q1-space-1) / 4);
13113
13230
  }
13114
13231
 
13115
- :where(.dots-menu__trigger, .description__hint, .description__hint-close, .theme-switch button, .twc__copy, .docs-navigation-full-link, .docs-sidebar-options, .docs-mobile-navigation__trigger, a.sidebar__link) {
13232
+ :where(.dots-menu__trigger, .description__hint, .description__hint-close, .twc__copy) {
13116
13233
  --touch-target-border-width: 0px;
13117
13234
  }
13118
13235
 
@@ -13135,6 +13252,62 @@ a.q1-navigation__item[aria-disabled='true'] {
13135
13252
  }
13136
13253
  }
13137
13254
 
13255
+ .q1-corner-anchor {
13256
+ position: relative;
13257
+ display: inline-flex;
13258
+ vertical-align: middle;
13259
+ }
13260
+
13261
+ .corner-remove-button {
13262
+ position: absolute;
13263
+ top: 0;
13264
+ right: 0;
13265
+ transform: translate(50%, -50%);
13266
+ --touch-target-border-width: calc(var(--q1-space-1) / 4);
13267
+ box-sizing: border-box;
13268
+ display: grid;
13269
+ place-items: center;
13270
+ flex-shrink: 0;
13271
+ width: var(--q1-space-6);
13272
+ height: var(--q1-space-6);
13273
+ padding: 0;
13274
+ border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border-overlay);
13275
+ border-radius: var(--q1-radius-full);
13276
+ background: var(--q1-color-bg-overlay);
13277
+ color: var(--q1-color-text-primary);
13278
+ box-shadow: var(--q1-shadow-popover);
13279
+ cursor: pointer;
13280
+ }
13281
+
13282
+ /* 圆周 45°:距外框两边均为 (1 - 1 / √2) / 2。 */
13283
+ .q1-corner-anchor--round > .corner-remove-button {
13284
+ top: calc(50% - 50% / sqrt(2));
13285
+ right: calc(50% - 50% / sqrt(2));
13286
+ }
13287
+
13288
+ .corner-remove-button > svg {
13289
+ width: var(--q1-space-4);
13290
+ height: var(--q1-space-4);
13291
+ pointer-events: none;
13292
+ }
13293
+
13294
+ .corner-remove-button:focus-visible {
13295
+ outline: calc(var(--q1-space-1) / 2) solid var(--q1-color-focus);
13296
+ outline-offset: var(--q1-space-1);
13297
+ box-shadow: var(--q1-shadow-focus), var(--q1-shadow-popover);
13298
+ }
13299
+
13300
+ @media (hover: hover) and (pointer: fine) {
13301
+ .corner-remove-button:hover:not(:disabled) {
13302
+ background: var(--q1-color-bg-hover);
13303
+ }
13304
+ }
13305
+
13306
+ .corner-remove-button:disabled {
13307
+ cursor: not-allowed;
13308
+ color: var(--q1-color-text-muted);
13309
+ }
13310
+
13138
13311
  /* Private geometry derives from existing spacing; no new consumer token surface. */
13139
13312
  .control-option.checkbox-circle {
13140
13313
  --checkbox-circle-diameter: calc(var(--q1-space-4) + var(--q1-space-1) / 2);
@@ -13320,8 +13493,10 @@ a.q1-navigation__item[aria-disabled='true'] {
13320
13493
  cursor: pointer;
13321
13494
  transition: color var(--q1-duration-fast);
13322
13495
  }
13323
- .filter-chip__clear { flex-shrink: 0; width: var(--q1-space-6); padding: 0; margin-inline-start: var(--q1-space-1); }
13496
+ .filter-chip__clear { flex-shrink: 0; width: var(--q1-space-6); padding: 0; margin-inline-start: var(--q1-space-1-5); }
13324
13497
  .filter-chip__clear + .filter-chip__picker { padding-inline-start: var(--q1-space-1); }
13498
+ /* 已设值时末尾是 chevron:结束侧收一档,抵消图标框自带空白;起始侧的清除按钮同理多留半档。 */
13499
+ .filter-chip--set .filter-chip__picker { padding-inline-end: var(--q1-space-2); }
13325
13500
  .filter-chip svg, .filter-chip__label, .filter-chip__separator { flex-shrink: 0; }
13326
13501
  .filter-chip svg { color: var(--q1-color-text-secondary); transition: color var(--q1-duration-fast); }
13327
13502
  .filter-chip__separator {
@@ -13366,6 +13541,7 @@ a.q1-navigation__item[aria-disabled='true'] {
13366
13541
  /* lg 高 48:短文案时横向内边距随档放宽,避免胶囊被压成近正圆。 */
13367
13542
  .filter-chip--lg .filter-chip__picker { padding-inline: var(--q1-space-3); }
13368
13543
  .filter-chip--lg .filter-chip__clear + .filter-chip__picker { padding-inline-start: var(--q1-space-1); }
13544
+ .filter-chip--lg.filter-chip--set .filter-chip__picker { padding-inline-end: var(--q1-space-2-5); }
13369
13545
 
13370
13546
  .popover-trigger { display: inline-flex; }
13371
13547
  .popover-panel {
@@ -13481,6 +13657,117 @@ a.q1-navigation__item[aria-disabled='true'] {
13481
13657
  .toggle-group { gap: var(--q1-space-4); padding: var(--q1-space-2); }
13482
13658
  }
13483
13659
 
13660
+ /* Region Error State:区块加载失败的原地错误态。中性表面,危险色只落在图标上;标题与说明沿用正文色阶。
13661
+ 根节点是宽度容器:inline 版在容器变窄时把重试按钮折到说明下方,按卡片实际宽度而非视口判断。 */
13662
+ .region-error-state {
13663
+ container: region-error-state / inline-size;
13664
+ }
13665
+
13666
+ .region-error-state__status {
13667
+ display: flex;
13668
+ min-width: 0;
13669
+ }
13670
+
13671
+ .region-error-state__icon {
13672
+ display: inline-flex;
13673
+ flex: none;
13674
+ align-items: center;
13675
+ justify-content: center;
13676
+ color: var(--q1-color-status-danger);
13677
+ }
13678
+
13679
+ .region-error-state__body {
13680
+ min-width: 0;
13681
+ }
13682
+
13683
+ .region-error-state__title,
13684
+ .region-error-state__description {
13685
+ margin: 0;
13686
+ overflow-wrap: anywhere;
13687
+ }
13688
+
13689
+ .region-error-state__title {
13690
+ color: var(--q1-color-text-primary);
13691
+ }
13692
+
13693
+ .region-error-state__description {
13694
+ font-size: var(--q1-font-size-label-14);
13695
+ font-weight: var(--q1-font-weight-regular);
13696
+ line-height: var(--q1-line-height-label-14);
13697
+ color: var(--q1-color-text-secondary);
13698
+ }
13699
+
13700
+ /* center:表格主体与大区块的居中占位。上下留白取 space-16,连同内容约等于五行表格的高度,
13701
+ 宿主保留表头时表格不塌缩。 */
13702
+ .region-error-state--center {
13703
+ display: flex;
13704
+ flex-direction: column;
13705
+ align-items: center;
13706
+ gap: var(--q1-space-4);
13707
+ padding: var(--q1-space-16) var(--q1-space-6);
13708
+ text-align: center;
13709
+ }
13710
+
13711
+ .region-error-state--center .region-error-state__status {
13712
+ flex-direction: column;
13713
+ align-items: center;
13714
+ gap: var(--q1-space-3);
13715
+ max-width: 32em;
13716
+ }
13717
+
13718
+ .region-error-state--center .region-error-state__icon {
13719
+ width: var(--q1-space-10);
13720
+ height: var(--q1-space-10);
13721
+ border-radius: var(--q1-radius-3);
13722
+ background: var(--q1-color-bg-subtle);
13723
+ }
13724
+
13725
+ .region-error-state--center .region-error-state__title {
13726
+ font-size: var(--q1-font-size-heading-16);
13727
+ font-weight: var(--q1-font-weight-heading-16);
13728
+ line-height: var(--q1-line-height-heading-16);
13729
+ }
13730
+
13731
+ .region-error-state--center .region-error-state__description {
13732
+ margin-top: var(--q1-space-1);
13733
+ }
13734
+
13735
+ /* inline:卡片与页面分区里的紧凑行。小号图标与标题首行同高居中;重试在行尾,容器变窄时折到说明下方。 */
13736
+ .region-error-state--inline {
13737
+ display: flex;
13738
+ flex-wrap: wrap;
13739
+ align-items: center;
13740
+ gap: var(--q1-space-3) var(--q1-space-4);
13741
+ }
13742
+
13743
+ .region-error-state--inline .region-error-state__status {
13744
+ flex: 1 1 0;
13745
+ align-items: flex-start;
13746
+ gap: var(--q1-space-3);
13747
+ }
13748
+
13749
+ .region-error-state--inline .region-error-state__icon {
13750
+ width: var(--q1-space-4);
13751
+ height: var(--q1-line-height-heading-14);
13752
+ }
13753
+
13754
+ .region-error-state--inline .region-error-state__title {
13755
+ font-size: var(--q1-font-size-heading-14);
13756
+ font-weight: var(--q1-font-weight-heading-14);
13757
+ line-height: var(--q1-line-height-heading-14);
13758
+ }
13759
+
13760
+ .region-error-state--inline .region-error-state__actions {
13761
+ flex: none;
13762
+ }
13763
+
13764
+ @container region-error-state (max-width: 30rem) {
13765
+ .region-error-state--inline .region-error-state__actions {
13766
+ flex-basis: 100%;
13767
+ padding-inline-start: calc(var(--q1-space-4) + var(--q1-space-3));
13768
+ }
13769
+ }
13770
+
13484
13771
  .hover-card-trigger { display: inline-flex; }
13485
13772
  .hover-card {
13486
13773
  max-width: min(calc(100vw - var(--q1-space-6)), calc(var(--q1-space-8) * 9));
@@ -13891,16 +14178,18 @@ a.q1-navigation__item[aria-disabled='true'] {
13891
14178
  /* 浅色白纱保留底层可读性;暗色沿用各浮层既有压暗强度。 */
13892
14179
  .modal__backdrop,
13893
14180
  .drawer__backdrop,
13894
- .sheet__backdrop {
14181
+ .sheet__backdrop,
14182
+ .search-dialog__backdrop {
13895
14183
  background: color-mix(in srgb, var(--q1-color-gray-100) 80%, transparent);
13896
14184
  }
13897
14185
 
13898
- [data-theme='dark'] .modal__backdrop,
13899
- [data-theme='dark'] .sheet__backdrop {
14186
+ :is([data-theme='dark'], [data-q1-theme='dark']) .modal__backdrop:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14187
+ :is([data-theme='dark'], [data-q1-theme='dark']) .sheet__backdrop:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14188
+ :is([data-theme='dark'], [data-q1-theme='dark']) .search-dialog__backdrop:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
13900
14189
  background: color-mix(in srgb, var(--q1-color-shadow) 45%, transparent);
13901
14190
  }
13902
14191
 
13903
- [data-theme='dark'] .drawer__backdrop {
14192
+ :is([data-theme='dark'], [data-q1-theme='dark']) .drawer__backdrop:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
13904
14193
  background: color-mix(in srgb, var(--q1-color-shadow) 28%, transparent);
13905
14194
  }
13906
14195
 
@@ -14066,25 +14355,25 @@ a.q1-navigation__item[aria-disabled='true'] {
14066
14355
 
14067
14356
  /* Form boundaries and brand graphics: owner-approved dark/mobile audit roles.
14068
14357
  Checkbox Circle keeps its own tone stroke (status-* / text-muted), so it is excluded here. */
14069
- :root[data-theme='dark'] :is(
14358
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14070
14359
  .form-control:not(.input-control .form-control):not(.textarea-control .form-control):not(:disabled):not([aria-invalid='true']):not(.form-field--error .form-control),
14071
14360
  .input-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .input-control),
14072
14361
  .textarea-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .textarea-control)
14073
- ) {
14362
+ ):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14074
14363
  border-color: var(--q1-input-border, var(--q1-color-border-control));
14075
14364
  }
14076
14365
 
14077
- :root[data-theme='dark'] :is(
14366
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14078
14367
  .form-control:not(.input-control .form-control):not(.textarea-control .form-control):not(:disabled):not([aria-invalid='true']):not(.form-field--error .form-control):focus,
14079
14368
  .input-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .input-control):focus-within
14080
- ) {
14369
+ ):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14081
14370
  border-color: var(--q1-input-border-focus, var(--q1-input-border, var(--q1-color-border-control)));
14082
14371
  }
14083
14372
 
14084
- :root[data-theme='dark'] :is(
14373
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14085
14374
  .combobox__control:not(:has(:disabled, [aria-invalid='true'])),
14375
+ .multi-select__trigger:not(:disabled),
14086
14376
  .composer__box:not(:has(textarea:disabled)),
14087
- .cal-period__trigger,
14088
14377
  .feedback__select:not(:disabled),
14089
14378
  .feedback__textarea:not(:disabled),
14090
14379
  .range-slider__number:not(:disabled),
@@ -14092,12 +14381,11 @@ a.q1-navigation__item[aria-disabled='true'] {
14092
14381
  .choicebox:not(:has(:checked, :disabled)),
14093
14382
  .choicebox:not(:has(:checked, :disabled)) .choicebox__indicator,
14094
14383
  .control-option:not(.checkbox-circle):has(input:not(:checked):not(:indeterminate):not(:disabled)) .control-option__visual
14095
- ) {
14384
+ ):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14096
14385
  border-color: var(--q1-color-border-control);
14097
14386
  }
14098
14387
 
14099
- /* 亮色 OTP 格子、时段触发器、Choicebox 未选中卡同样走控件边界角色,不再用 8% 黑分隔线。 */
14100
- .cal-period__trigger,
14388
+ /* 亮色 OTP 格子、Choicebox 未选中卡同样走控件边界角色,不再用 8% 黑分隔线。 */
14101
14389
  .q1-verification-code:not(:has(:disabled, [aria-invalid='true'])) .q1-verification-code__slot,
14102
14390
  .choicebox:not(:has(:checked, :disabled)) {
14103
14391
  border-color: var(--q1-color-border-control);
@@ -14113,26 +14401,23 @@ a.q1-navigation__item[aria-disabled='true'] {
14113
14401
  .textarea-control:has(.form-control:disabled):not(:has([aria-invalid='true'])):not(.form-field--error .textarea-control),
14114
14402
  .feedback__select:disabled,
14115
14403
  .feedback__textarea:disabled,
14116
- .range-slider__number:disabled {
14404
+ .range-slider__number:disabled,
14405
+ .multi-select__trigger:disabled {
14117
14406
  border-color: var(--q1-color-border);
14118
14407
  }
14119
14408
 
14120
- :root[data-theme='dark'] .cal-field__control {
14121
- box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-color-border-control);
14122
- }
14123
-
14124
14409
  @media (hover: hover) and (pointer: fine) {
14125
- :root[data-theme='dark'] :is(
14410
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14126
14411
  .form-control:not(.input-control .form-control):not(.textarea-control .form-control):not(:disabled):not([aria-invalid='true']):not(.form-field--error .form-control),
14127
14412
  .input-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .input-control),
14128
14413
  .textarea-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .textarea-control),
14129
14414
  .combobox__control:not(:has(:disabled, [aria-invalid='true'])),
14130
14415
  .choicebox:not(:has(:checked, :disabled))
14131
- ):hover:not(:focus-within) {
14416
+ ):hover:not(:focus-within):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14132
14417
  border-color: var(--q1-color-gray-700);
14133
14418
  }
14134
14419
 
14135
- :root[data-theme='dark'] .control-option:not(.checkbox-circle):has(input:not(:checked):not(:indeterminate):not(:disabled)):hover .control-option__visual {
14420
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .control-option:not(.checkbox-circle):has(input:not(:checked):not(:indeterminate):not(:disabled)):hover .control-option__visual:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14136
14421
  border-color: var(--q1-color-text-secondary);
14137
14422
  }
14138
14423
  }
@@ -14142,25 +14427,25 @@ a.q1-navigation__item[aria-disabled='true'] {
14142
14427
  }
14143
14428
 
14144
14429
  @media (hover: hover) and (pointer: fine) {
14145
- :root[data-theme='dark'] .toggle-field[aria-checked='true']:hover:not(:disabled) .toggle {
14430
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .toggle-field[aria-checked='true']:hover:not(:disabled) .toggle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14146
14431
  background: var(--toggle-on, var(--q1-color-primary-1000));
14147
14432
  }
14148
14433
  }
14149
14434
 
14150
- :root[data-theme='dark'] .slider-input:not(.range-slider__thumb):not(:disabled)::-webkit-slider-runnable-track,
14151
- :root[data-theme='dark'] .range-slider:not(.range-slider--disabled) .range-slider__rail {
14435
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .slider-input:not(.range-slider__thumb):not(:disabled):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *))::-webkit-slider-runnable-track,
14436
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .range-slider:not(.range-slider--disabled) .range-slider__rail:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14152
14437
  background: var(--q1-color-border-control);
14153
14438
  }
14154
14439
 
14155
- :root[data-theme='dark'] .slider-input:not(.range-slider__thumb):not(:disabled)::-moz-range-track {
14440
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .slider-input:not(.range-slider__thumb):not(:disabled):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *))::-moz-range-track {
14156
14441
  background: var(--q1-color-border-control);
14157
14442
  }
14158
14443
 
14159
- :root[data-theme='dark'] .slider-input--filled:not(.range-slider__thumb):not(:disabled)::-webkit-slider-runnable-track {
14444
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .slider-input--filled:not(.range-slider__thumb):not(:disabled):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *))::-webkit-slider-runnable-track {
14160
14445
  background: linear-gradient(to right, var(--q1-color-accent-graphic) var(--slider-pct), var(--q1-color-border-control) var(--slider-pct));
14161
14446
  }
14162
14447
 
14163
- :root[data-theme='dark'] .slider-input--filled:not(.range-slider__thumb):not(:disabled)::-moz-range-track {
14448
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .slider-input--filled:not(.range-slider__thumb):not(:disabled):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *))::-moz-range-track {
14164
14449
  background: linear-gradient(to right, var(--q1-color-accent-graphic) var(--slider-pct), var(--q1-color-border-control) var(--slider-pct));
14165
14450
  }
14166
14451
 
@@ -14174,16 +14459,16 @@ a.q1-navigation__item[aria-disabled='true'] {
14174
14459
  }
14175
14460
 
14176
14461
  /* 暗色表面抬升:亮色下靠恒深底色或投影成立的轮廓,暗色下与底色同色而消失。
14177
- 只在 :root[data-theme='dark'] 分支改,亮色外观不变;统一走面板底色 + 1px hairline。 */
14462
+ 只在暗色分支(页面暗色或 data-q1-theme="dark" 子树)改,亮色外观不变;统一走面板底色 + 1px hairline。 */
14178
14463
 
14179
14464
  /* 无框卡片:亮色靠投影浮起;暗色投影不可见,补 hairline 保住卡片边界。 */
14180
- :root[data-theme='dark'] .q1-card--borderless {
14465
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .q1-card--borderless:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14181
14466
  border-color: var(--q1-color-border);
14182
14467
  }
14183
14468
 
14184
14469
  /* +N 收纳芯片与页顶公告药丸:恒深底色在暗色画布上与底同色,改面板底 + hairline + 主文字色。 */
14185
- :root[data-theme='dark'] .avatar--overflow,
14186
- :root[data-theme='dark'] .banner__cta {
14470
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .avatar--overflow:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14471
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .banner__cta:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14187
14472
  border: 1px solid var(--q1-color-border);
14188
14473
  background: var(--q1-color-bg-panel);
14189
14474
  color: var(--q1-color-text-primary);
@@ -14191,31 +14476,31 @@ a.q1-navigation__item[aria-disabled='true'] {
14191
14476
 
14192
14477
  @media (hover: hover) and (pointer: fine) {
14193
14478
  /* 悬停与同族 .banner__action 一致:底色换 bg-subtle。 */
14194
- :root[data-theme='dark'] .banner__cta:hover {
14479
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .banner__cta:hover:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14195
14480
  background: var(--q1-color-bg-subtle);
14196
14481
  }
14197
14482
  }
14198
14483
 
14199
14484
  /* Badge Pill:亮色 background-200 是近白浅底,暗色同一 token 翻成纯黑,在面板上成黑块;改面板底色;
14200
14485
  :where 把特异性压回基础规则,悬停/按下态照常覆盖。 */
14201
- :where(:root[data-theme='dark']) .badge__pill-visual {
14486
+ :where(:root[data-theme='dark'], [data-q1-theme='dark']) .badge__pill-visual:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14202
14487
  background: var(--q1-color-bg-panel);
14203
14488
  }
14204
14489
 
14205
14490
  /* Filter Chip:暗色 bg-canvas 比示例面板更深,成黑块;改面板底色(同上用 :where 保留悬停态)。 */
14206
- :where(:root[data-theme='dark']) .filter-chip {
14491
+ :where(:root[data-theme='dark'], [data-q1-theme='dark']) .filter-chip:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14207
14492
  background: var(--q1-color-bg-panel);
14208
14493
  }
14209
14494
 
14210
14495
  /* 虚线占位(Filter Chip 未设值、Context Menu 触发区):暗色 border-strong 与面板仅约 1.4:1,
14211
14496
  先用 text-muted 拉到 ≥ 3:1;border-strong 取值定案后再统一回归。 */
14212
- :root[data-theme='dark'] .filter-chip:not(.filter-chip--set):not([data-disabled]),
14213
- :root[data-theme='dark'] .context-menu__area {
14497
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .filter-chip:not(.filter-chip--set):not([data-disabled]):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14498
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .context-menu__area:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14214
14499
  border-color: var(--q1-color-text-muted);
14215
14500
  }
14216
14501
 
14217
14502
  /* Multi Select 未选中勾选框:暗色 border-strong 落在浮层底上约 1.1:1;改控件边界角色 border-control。 */
14218
- :root[data-theme='dark'] .multi-select__check:not(.multi-select__check--on) {
14503
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .multi-select__check:not(.multi-select__check--on):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14219
14504
  border-color: var(--q1-color-border-control);
14220
14505
  }
14221
14506
 
@@ -14247,13 +14532,13 @@ a.q1-navigation__item[aria-disabled='true'] {
14247
14532
  }
14248
14533
 
14249
14534
  /* 暗色选中浅底:bg-subtle 在暗色是 gray-50,比面板更深,改用抬升一档的 bg-raised,覆盖上面全部选中态。 */
14250
- :root[data-theme='dark'] :is(
14535
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14251
14536
  .choicebox:has(.choicebox__input:checked:not(:disabled)),
14252
14537
  .pagination__button--current:not(:disabled, [aria-disabled='true']),
14253
14538
  .toggle-group__item[aria-pressed='true']:not(:focus-visible),
14254
14539
  .switch-control__option[aria-checked='true']:not(:focus-visible) .switch-control__visual,
14255
14540
  .page-feedback__option[aria-pressed='true']:not(:focus-visible),
14256
14541
  .q1-json-view__row--highlight
14257
- ) {
14542
+ ):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14258
14543
  background: var(--q1-color-bg-raised);
14259
14544
  }