@q1travel/design-system 0.27.2 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
  }
@@ -2255,7 +2251,7 @@
2255
2251
  margin-block-end: var(--q1-space-3);
2256
2252
  }
2257
2253
 
2258
- @media (pointer: coarse) {
2254
+ @media (pointer: coarse), (any-pointer: coarse) {
2259
2255
  .table__checkbox-control,
2260
2256
  .table__sort {
2261
2257
  min-width: 44px;
@@ -2318,8 +2314,8 @@
2318
2314
  text-transform: uppercase;
2319
2315
  }
2320
2316
 
2321
- :root[data-theme='dark'] .avatar--letter,
2322
- :root[data-theme='dark'] .avatar--glyph {
2317
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .avatar--letter:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
2318
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .avatar--glyph:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2323
2319
  background: var(--q1-color-gray-500);
2324
2320
  }
2325
2321
 
@@ -2377,7 +2373,7 @@
2377
2373
  z-index: 1;
2378
2374
  }
2379
2375
 
2380
- :root[data-theme='dark'] .avatar__badge {
2376
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .avatar__badge:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2381
2377
  --q1-avatar-badge-bg: var(--q1-color-gray-500);
2382
2378
  }
2383
2379
 
@@ -2426,7 +2422,7 @@
2426
2422
  align-items: center;
2427
2423
  gap: var(--q1-space-1);
2428
2424
  height: 24px;
2429
- border-radius: 999px;
2425
+ border-radius: var(--q1-radius-full);
2430
2426
  padding: 2px var(--q1-space-3);
2431
2427
  font-size: 12px;
2432
2428
  font-weight: var(--q1-font-weight-medium);
@@ -2507,7 +2503,7 @@
2507
2503
  color: oklch(from var(--q1-color-gray-700) 0.42 0 0);
2508
2504
  }
2509
2505
 
2510
- :root[data-theme='dark'] .badge--neutral-subtle {
2506
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--neutral-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2511
2507
  background: oklch(from var(--q1-color-gray-700) 0.26 0 0);
2512
2508
  color: oklch(from var(--q1-color-gray-700) 0.84 0 0);
2513
2509
  }
@@ -2533,22 +2529,22 @@
2533
2529
  }
2534
2530
 
2535
2531
  /* subtle 暗色:暗底 + 亮字(oklch L0.26 底 / L0.74 字)。 */
2536
- :root[data-theme='dark'] .badge--info-subtle {
2532
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--info-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2537
2533
  background: oklch(from var(--q1-color-status-info) 0.26 0.045 h);
2538
2534
  color: oklch(from var(--q1-color-status-info) 0.74 0.16 h);
2539
2535
  }
2540
2536
 
2541
- :root[data-theme='dark'] .badge--success-subtle {
2537
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--success-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2542
2538
  background: oklch(from var(--q1-color-status-success) 0.26 0.045 h);
2543
2539
  color: oklch(from var(--q1-color-status-success) 0.74 0.16 h);
2544
2540
  }
2545
2541
 
2546
- :root[data-theme='dark'] .badge--warning-subtle {
2542
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--warning-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2547
2543
  background: oklch(from var(--q1-color-status-warning) 0.26 0.045 h);
2548
2544
  color: oklch(from var(--q1-color-status-warning) 0.74 0.16 h);
2549
2545
  }
2550
2546
 
2551
- :root[data-theme='dark'] .badge--danger-subtle {
2547
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--danger-subtle:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2552
2548
  background: oklch(from var(--q1-color-status-danger) 0.26 0.045 h);
2553
2549
  color: oklch(from var(--q1-color-status-danger) 0.74 0.16 h);
2554
2550
  }
@@ -2573,7 +2569,7 @@
2573
2569
  min-height: 32px;
2574
2570
  }
2575
2571
 
2576
- :root[data-theme='dark'] .badge--quiet {
2572
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .badge--quiet:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2577
2573
  background: oklch(from var(--q1-color-gray-700) 0.26 0 0);
2578
2574
  color: oklch(from var(--q1-color-gray-700) 0.84 0 0);
2579
2575
  }
@@ -2609,7 +2605,7 @@
2609
2605
  gap: var(--q1-space-1);
2610
2606
  height: 24px;
2611
2607
  padding: 2px var(--q1-space-3);
2612
- border-radius: 999px;
2608
+ border-radius: var(--q1-radius-full);
2613
2609
  background: var(--q1-color-background-200);
2614
2610
  box-shadow: inset 0 0 0 1px var(--q1-color-border-overlay);
2615
2611
  }
@@ -2712,9 +2708,10 @@
2712
2708
  align-items: center;
2713
2709
  gap: 6px;
2714
2710
  height: 32px;
2715
- padding: 0 var(--q1-space-3);
2711
+ /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
2712
+ padding: 0 var(--q1-space-2) 0 var(--q1-space-3);
2716
2713
  border: 1px solid var(--q1-color-border);
2717
- border-radius: 999px;
2714
+ border-radius: var(--q1-radius-full);
2718
2715
  background: var(--q1-color-bg-panel);
2719
2716
  font-size: var(--q1-font-size-label-14);
2720
2717
  font-weight: var(--q1-font-weight-medium);
@@ -2756,7 +2753,7 @@
2756
2753
  align-items: center;
2757
2754
  height: 32px;
2758
2755
  padding: 0 var(--q1-space-3);
2759
- border-radius: 999px;
2756
+ border-radius: var(--q1-radius-full);
2760
2757
  /* q1-lint-disable Q1-DS-501 页顶公告的恒深药丸:两主题同值,不参与主题翻转 */
2761
2758
  background: oklch(0.15 0 0);
2762
2759
  color: oklch(0.94 0 0);
@@ -2878,19 +2875,19 @@
2878
2875
  .banner__progress {
2879
2876
  overflow: hidden;
2880
2877
  height: 6px;
2881
- border-radius: 999px;
2878
+ border-radius: var(--q1-radius-full);
2882
2879
  background: oklch(from var(--banner-progress-color) 0.86 0.06 h);
2883
2880
  }
2884
2881
 
2885
2882
  .banner__progress-bar {
2886
2883
  width: 100%;
2887
2884
  height: 100%;
2888
- border-radius: 999px;
2885
+ border-radius: var(--q1-radius-full);
2889
2886
  background: var(--banner-progress-color);
2890
2887
  transition: transform var(--q1-duration-fast) var(--q1-ease-out);
2891
2888
  }
2892
2889
 
2893
- :root[data-theme='dark'] .banner__progress {
2890
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .banner__progress:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
2894
2891
  background: oklch(from var(--banner-progress-color) 0.34 0.06 h);
2895
2892
  }
2896
2893
 
@@ -3267,7 +3264,7 @@ a.breadcrumb__link:hover {
3267
3264
  .browser__dot {
3268
3265
  width: 12px;
3269
3266
  height: 12px;
3270
- border-radius: 9999px;
3267
+ border-radius: var(--q1-radius-full);
3271
3268
  }
3272
3269
 
3273
3270
  /* 字面量 macOS 交通灯配色:
@@ -3305,7 +3302,7 @@ a.breadcrumb__link:hover {
3305
3302
  max-width: 20rem;
3306
3303
  padding: 4px 8px 4px 12px;
3307
3304
  border: 1px solid var(--browser-border, var(--q1-color-border));
3308
- border-radius: 9999px;
3305
+ border-radius: var(--q1-radius-full);
3309
3306
  background: var(--browser-surface, var(--q1-color-bg-panel));
3310
3307
  color: var(--browser-fg, var(--q1-color-text-primary));
3311
3308
  }
@@ -3479,14 +3476,17 @@ a.breadcrumb__link:hover {
3479
3476
  双层外阴影随宽度缩放、左缘 8.2% 书脊沟线、排版=宽度线性缩放 0.0836/0.061);
3480
3477
  只有真实链接在精细指针悬停时绕 Y 轴翻开(rotateY -20° + scale 1.066,横移按书宽等比缩放);
3481
3478
  裸 Book 静止,触屏与减动模式不触发翻书。 */
3482
- :root {
3479
+ :root,
3480
+ [data-q1-theme='light'],
3481
+ [data-q1-theme='dark'] {
3483
3482
  --q1-book-cover: var(--q1-color-bg-subtle);
3484
3483
  /* q1-lint-disable-next-line Q1-DS-501 书封琥珀带:装帧用色,不是语义色,故不走 token */
3485
3484
  --q1-book-band: oklch(0.8 0.195 73.6);
3486
3485
  --q1-book-sheen: none;
3487
3486
  }
3488
3487
 
3489
- :root[data-theme='dark'] {
3488
+ :root[data-theme='dark'],
3489
+ [data-q1-theme='dark'] {
3490
3490
  --q1-book-cover: var(--q1-color-gray-200);
3491
3491
  /* q1-lint-disable Q1-DS-501 书封琥珀带与暗色微光:装帧用色;微光的白是光照模拟,不是前景色 */
3492
3492
  --q1-book-band: oklch(0.75 0.174 74.5);
@@ -3733,8 +3733,13 @@ a[href]:has(> .book):focus-visible {
3733
3733
  right: 36px;
3734
3734
  }
3735
3735
 
3736
+ /* chevron 图标框自带空白,比文字侧内边距收一档,左右视觉留白对称。 */
3736
3737
  .select-control__chevron {
3737
- right: 12px;
3738
+ right: var(--q1-space-2-5);
3739
+ }
3740
+
3741
+ .select-control:has(.form-control--xs) .select-control__chevron {
3742
+ right: var(--q1-space-1-5);
3738
3743
  }
3739
3744
 
3740
3745
  .select-control:has(.form-control--select:disabled) .select-control__prefix,
@@ -3761,8 +3766,8 @@ a[href]:has(> .book):focus-visible {
3761
3766
 
3762
3767
  @media (hover: none), (pointer: coarse), (any-pointer: coarse) {
3763
3768
  .select-control .form-control--select {
3764
- min-height: 44px;
3765
- font-size: 16px;
3769
+ min-height: var(--q1-touch-target-min);
3770
+ font-size: var(--q1-font-size-copy-16);
3766
3771
  }
3767
3772
  }
3768
3773
 
@@ -3895,11 +3900,12 @@ a[href]:has(> .book):focus-visible {
3895
3900
  }
3896
3901
  }
3897
3902
 
3903
+ /* 粗指针下外框与分段保持 sm32/md40/lg48 视觉尺寸,纵向命中区由共享 TouchTarget 扩到 44px。 */
3898
3904
  @media (pointer: coarse), (any-pointer: coarse) {
3899
- .switch-control { height: auto; }
3900
3905
  .switch-control__option {
3906
+ position: relative;
3907
+ --touch-target-border-width: calc(var(--q1-space-1) * 0);
3901
3908
  min-width: var(--q1-touch-target-min);
3902
- min-height: var(--q1-touch-target-min);
3903
3909
  }
3904
3910
  }
3905
3911
 
@@ -4069,14 +4075,9 @@ a[href]:has(> .book):focus-visible {
4069
4075
  border-bottom-color: transparent;
4070
4076
  }
4071
4077
 
4078
+ /* 面板承载任意内容:文字样式继承所在页面,自身不加内边距;与标签栏的间距由 .tabs-root 的 gap 提供,左缘与标签栏对齐。 */
4072
4079
  .tabs-control__panel {
4073
- min-height: 96px;
4074
4080
  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
4081
  }
4081
4082
 
4082
4083
  .tabs-control__panel[hidden] {
@@ -4098,63 +4099,19 @@ a[href]:has(> .book):focus-visible {
4098
4099
  }
4099
4100
  }
4100
4101
 
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
- }
4102
+ /* 粗指针按输入方式而非视口宽度补足命中区(含宽于 820px 的平板横屏):每个标签不小于触控最小尺寸,文字在标签内居中。 */
4103
+ @media (pointer: coarse), (any-pointer: coarse) {
4104
+ .tabs-control__tab {
4105
+ justify-content: center;
4106
+ min-width: var(--q1-touch-target-min);
4107
+ min-height: var(--q1-touch-target-min);
4108
+ }
4151
4109
 
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);
4110
+ /* 次级药丸以底色表达选中,去掉透明底边占位,文字在药丸内上下居中。 */
4111
+ .tabs-control--secondary .tabs-control__tab {
4112
+ min-height: var(--q1-touch-target-min);
4113
+ border-bottom-width: 0;
4114
+ }
4158
4115
  }
4159
4116
 
4160
4117
  @media (prefers-reduced-motion: reduce) {
@@ -4217,7 +4174,7 @@ a[href]:has(> .book):focus-visible {
4217
4174
  height: var(--cal-field-height);
4218
4175
  display: flex;
4219
4176
  align-items: center;
4220
- box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-color-border);
4177
+ box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-input-border, var(--q1-color-border-control));
4221
4178
  border-radius: var(--q1-radius-2);
4222
4179
  background: var(--q1-color-bg-panel);
4223
4180
  }
@@ -4234,17 +4191,6 @@ a[href]:has(> .book):focus-visible {
4234
4191
  --cal-field-height: calc(var(--q1-control-height-default) + var(--q1-space-2));
4235
4192
  }
4236
4193
 
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
4194
  .cal-field__trigger {
4249
4195
  display: inline-flex;
4250
4196
  align-items: center;
@@ -4280,7 +4226,8 @@ a[href]:has(> .book):focus-visible {
4280
4226
  }
4281
4227
 
4282
4228
  .cal-field__caret {
4283
- border-left: 1px solid var(--q1-color-border);
4229
+ border-left: calc(var(--q1-space-1) / 4) solid var(--q1-input-border, var(--q1-color-border-control));
4230
+ border-radius: 0 var(--q1-radius-2) var(--q1-radius-2) 0;
4284
4231
  }
4285
4232
 
4286
4233
  .cal-field__clear:hover,
@@ -4294,14 +4241,15 @@ a[href]:has(> .book):focus-visible {
4294
4241
  left: 0;
4295
4242
  width: max-content;
4296
4243
  display: flex;
4297
- gap: var(--q1-space-6);
4298
- padding: var(--q1-space-4);
4299
- border-radius: var(--q1-radius-3);
4244
+ gap: var(--q1-space-3);
4245
+ padding: var(--q1-space-3);
4246
+ border-radius: var(--q1-radius-4);
4300
4247
  background: var(--q1-color-bg-overlay);
4301
4248
  box-shadow: var(--q1-shadow-popover);
4302
4249
  }
4303
4250
 
4304
4251
  .cal-popover--vertical {
4252
+ width: calc(4 * var(--q1-space-16) + var(--q1-space-6));
4305
4253
  flex-direction: column;
4306
4254
  }
4307
4255
 
@@ -4315,7 +4263,9 @@ a[href]:has(> .book):focus-visible {
4315
4263
  display: flex;
4316
4264
  flex-direction: column;
4317
4265
  gap: var(--q1-space-3);
4318
- min-width: 200px;
4266
+ width: calc(4 * var(--q1-space-16));
4267
+ max-width: 100%;
4268
+ flex: none;
4319
4269
  }
4320
4270
 
4321
4271
  .cal-inputs__field {
@@ -4325,7 +4275,8 @@ a[href]:has(> .book):focus-visible {
4325
4275
  }
4326
4276
 
4327
4277
  .cal-inputs__label {
4328
- font-size: 12px;
4278
+ font-size: var(--q1-font-size-label-12);
4279
+ line-height: var(--q1-line-height-label-12);
4329
4280
  color: var(--q1-color-text-muted);
4330
4281
  }
4331
4282
 
@@ -4334,41 +4285,8 @@ a[href]:has(> .book):focus-visible {
4334
4285
  gap: var(--q1-space-2);
4335
4286
  }
4336
4287
 
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
4288
  .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);
4289
+ width: 100%;
4372
4290
  }
4373
4291
 
4374
4292
  .cal-inputs__tz {
@@ -4379,19 +4297,20 @@ a[href]:has(> .book):focus-visible {
4379
4297
  border: none;
4380
4298
  background: transparent;
4381
4299
  color: var(--q1-color-text-muted);
4382
- font-size: 12px;
4300
+ font-size: var(--q1-font-size-label-12);
4301
+ line-height: var(--q1-line-height-label-12);
4383
4302
  cursor: default;
4384
4303
  }
4385
4304
 
4386
4305
  /* —— 日历网格 —— */
4387
4306
  .calendar--large {
4388
- --cal-cell: 40px;
4389
- --cal-font: 14px;
4307
+ --cal-cell: calc(4 * var(--q1-space-16) / 7);
4308
+ --cal-font: var(--q1-font-size-label-14);
4390
4309
  }
4391
4310
 
4392
4311
  .calendar--small {
4393
- --cal-cell: 32px;
4394
- --cal-font: 13px;
4312
+ --cal-cell: var(--q1-space-8);
4313
+ --cal-font: var(--q1-font-size-label-13);
4395
4314
  }
4396
4315
 
4397
4316
  .calendar__header {
@@ -4402,7 +4321,8 @@ a[href]:has(> .book):focus-visible {
4402
4321
  }
4403
4322
 
4404
4323
  .calendar__month {
4405
- font-size: var(--cal-font);
4324
+ font-size: var(--q1-font-size-label-14);
4325
+ line-height: var(--q1-line-height-label-14);
4406
4326
  font-weight: var(--q1-font-weight-medium);
4407
4327
  color: var(--q1-color-text-primary);
4408
4328
  }
@@ -4443,8 +4363,9 @@ a[href]:has(> .book):focus-visible {
4443
4363
  .calendar__weekday {
4444
4364
  display: grid;
4445
4365
  place-items: center;
4446
- font-size: 12px;
4447
- color: var(--q1-color-text-muted);
4366
+ font-size: var(--q1-font-size-label-12);
4367
+ line-height: var(--q1-line-height-label-12);
4368
+ color: var(--q1-color-text-secondary);
4448
4369
  }
4449
4370
 
4450
4371
  .calendar__grid {
@@ -4476,13 +4397,15 @@ a[href]:has(> .book):focus-visible {
4476
4397
  position: relative;
4477
4398
  display: grid;
4478
4399
  place-items: center;
4479
- width: calc(var(--cal-cell) - 6px);
4480
- height: calc(var(--cal-cell) - 6px);
4400
+ width: calc(var(--cal-cell) - var(--q1-space-1-5));
4401
+ height: calc(var(--cal-cell) - var(--q1-space-1-5));
4481
4402
  border: 1px solid transparent;
4482
4403
  border-radius: var(--q1-radius-2);
4483
4404
  background: transparent;
4484
4405
  color: var(--q1-color-text-primary);
4485
4406
  font-size: var(--cal-font);
4407
+ font-weight: var(--q1-font-weight-regular);
4408
+ line-height: var(--q1-line-height-label-14);
4486
4409
  cursor: pointer;
4487
4410
  }
4488
4411
 
@@ -4536,8 +4459,9 @@ a[href]:has(> .book):focus-visible {
4536
4459
  align-items: center;
4537
4460
  gap: var(--q1-space-2);
4538
4461
  min-width: 180px;
4539
- padding: var(--q1-space-2) var(--q1-space-3);
4540
- border: 1px solid var(--q1-color-border);
4462
+ /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
4463
+ padding: var(--q1-space-2) var(--q1-space-2-5) var(--q1-space-2) var(--q1-space-3);
4464
+ border: calc(var(--q1-space-1) / 4) solid var(--q1-input-border, var(--q1-color-border-control));
4541
4465
  border-radius: var(--q1-radius-2);
4542
4466
  background: var(--q1-color-bg-panel);
4543
4467
  color: var(--q1-color-text-primary);
@@ -4760,7 +4684,7 @@ a[href]:has(> .book):focus-visible {
4760
4684
  border-radius: var(--q1-radius-2);
4761
4685
  }
4762
4686
 
4763
- .skeleton--pill { border-radius: 999px; }
4687
+ .skeleton--pill { border-radius: var(--q1-radius-full); }
4764
4688
  .skeleton--squared { border-radius: 0; }
4765
4689
 
4766
4690
  .skeleton::before,
@@ -5237,7 +5161,6 @@ a[href]:has(> .book):focus-visible {
5237
5161
  gap: var(--q1-space-2);
5238
5162
  /* 图标没有文字基线,以底边参与对齐;下移使 16px 图标中心落在正文光学中心(13/14px 正文 3px,15px 正文 2px)。 */
5239
5163
  --q1-note-icon-optical-y: 3px;
5240
- max-width: 560px;
5241
5164
  padding: var(--q1-space-3) var(--q1-space-4);
5242
5165
  border: 1px solid var(--q1-color-border);
5243
5166
  border-radius: var(--q1-radius-2);
@@ -5666,22 +5589,6 @@ a[href]:has(> .book):focus-visible {
5666
5589
  margin-top: var(--q1-space-3);
5667
5590
  }
5668
5591
 
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
5592
  .context-card-wrap {
5686
5593
  position: relative;
5687
5594
  display: inline-block;
@@ -6268,8 +6175,10 @@ a.context-card__trigger {
6268
6175
  border-color: transparent;
6269
6176
  }
6270
6177
 
6271
- /* 聚焦型账户入口:结构固定,文案与副作用由消费方控制。 */
6178
+ /* 聚焦型账户入口:结构固定,文案与副作用由消费方控制。
6179
+ 账户入口域:颜色只取 auth 域色板,不与中性链混用。 */
6272
6180
  .auth-card {
6181
+ background: var(--q1-color-auth-surface-card);
6273
6182
  display: grid;
6274
6183
  gap: 0;
6275
6184
  grid-template-rows: minmax(0, 1fr) auto;
@@ -6286,7 +6195,7 @@ a.context-card__trigger {
6286
6195
  }
6287
6196
 
6288
6197
  .auth-card__copy h1 {
6289
- color: var(--q1-color-text-primary);
6198
+ color: var(--q1-color-auth-text-primary);
6290
6199
  font-size: var(--q1-font-size-heading-24);
6291
6200
  font-weight: var(--q1-font-weight-heading-24);
6292
6201
  letter-spacing: -0.025em;
@@ -6295,7 +6204,7 @@ a.context-card__trigger {
6295
6204
  }
6296
6205
 
6297
6206
  .auth-card__copy p {
6298
- color: var(--q1-color-text-secondary);
6207
+ color: var(--q1-color-auth-text-secondary);
6299
6208
  font-size: var(--q1-font-size-copy-14);
6300
6209
  line-height: 1.6;
6301
6210
  margin-top: var(--q1-space-4);
@@ -6303,7 +6212,7 @@ a.context-card__trigger {
6303
6212
  }
6304
6213
 
6305
6214
  .auth-card__actions {
6306
- border-top: 1px solid var(--q1-color-border);
6215
+ border-top: 1px solid var(--q1-color-auth-border-strong);
6307
6216
  display: grid;
6308
6217
  padding-top: var(--q1-space-6);
6309
6218
  width: 100%;
@@ -6655,9 +6564,10 @@ a.q1-card:focus-visible {
6655
6564
  align-items: center;
6656
6565
  gap: var(--q1-space-1);
6657
6566
  min-height: 32px;
6658
- padding: 0 var(--q1-space-3);
6567
+ /* 末尾 chevron 的 16px 图标框自带约 3px 空白,结束侧收一档,左右视觉留白对称。 */
6568
+ padding: 0 var(--q1-space-2-5) 0 var(--q1-space-3);
6659
6569
  border: 1px solid var(--q1-color-border);
6660
- border-radius: 999px;
6570
+ border-radius: var(--q1-radius-full);
6661
6571
  background: var(--q1-color-bg-panel);
6662
6572
  font-size: var(--q1-font-size-label-14);
6663
6573
  font-weight: var(--q1-font-weight-medium);
@@ -6992,7 +6902,7 @@ a.q1-card:focus-visible {
6992
6902
  position: relative;
6993
6903
  flex: none;
6994
6904
  display: inline-block;
6995
- border-radius: 999px;
6905
+ border-radius: var(--q1-radius-full);
6996
6906
  background: var(--q1-color-gray-400);
6997
6907
  border: 0;
6998
6908
  transform: scale(1);
@@ -7204,7 +7114,7 @@ a.q1-card:focus-visible {
7204
7114
  color: var(--q1-color-text-muted);
7205
7115
  text-align: center;
7206
7116
  }
7207
- @media (pointer: coarse) {
7117
+ @media (pointer: coarse), (any-pointer: coarse) {
7208
7118
  .pagination__button {
7209
7119
  min-width: 44px;
7210
7120
  min-height: 44px;
@@ -7241,7 +7151,9 @@ a.q1-card:focus-visible {
7241
7151
  display: none;
7242
7152
  }
7243
7153
 
7244
- /* 文档顺序导航:裸轨,无外框/背景;图标锚在标题文字块内。 */
7154
+ /* 文档顺序导航:裸轨,无外框/背景。标签与标题行贴齐所在内容列的左右边缘:
7155
+ 链接保留内边距承载焦点环,再以等量负外边距外挂,文字不因内边距内缩;
7156
+ 箭头与标题同处一行,朝外一侧的图标留白以负外边距抵消,使箭头笔画与标签边缘光学对齐。 */
7245
7157
  .docs-pagination {
7246
7158
  display: flex;
7247
7159
  flex-wrap: wrap;
@@ -7256,11 +7168,11 @@ a.q1-card:focus-visible {
7256
7168
  text-decoration: none;
7257
7169
  }
7258
7170
  .docs-pagination__link--prev {
7259
- padding-left: 28px;
7171
+ margin-left: calc(var(--q1-space-2) * -1);
7260
7172
  }
7261
7173
  .docs-pagination__link--next {
7262
- padding-right: 28px;
7263
7174
  margin-left: auto;
7175
+ margin-right: calc(var(--q1-space-2) * -1);
7264
7176
  text-align: right;
7265
7177
  }
7266
7178
  .docs-pagination__link:focus-visible {
@@ -7277,12 +7189,13 @@ a.q1-card:focus-visible {
7277
7189
  color: var(--q1-color-text-primary);
7278
7190
  }
7279
7191
  .docs-pagination__title-frame {
7280
- position: relative;
7281
- display: inline-block;
7192
+ display: inline-flex;
7193
+ align-items: center;
7282
7194
  max-width: 20em;
7283
7195
  }
7284
7196
  .docs-pagination__title {
7285
7197
  display: block;
7198
+ min-width: 0;
7286
7199
  overflow: hidden;
7287
7200
  white-space: nowrap;
7288
7201
  text-overflow: ellipsis;
@@ -7292,16 +7205,17 @@ a.q1-card:focus-visible {
7292
7205
  color: var(--q1-color-text-primary);
7293
7206
  }
7294
7207
  .docs-pagination__chevron-slot {
7295
- position: absolute;
7296
- top: 2px;
7297
7208
  display: block;
7209
+ flex: none;
7298
7210
  color: var(--q1-color-text-secondary);
7299
7211
  }
7212
+ /* 20px 箭头图标朝外一侧约 6.7px 留白,抵消 6px 后笔画与标签边缘对齐(误差小于 1px)。 */
7300
7213
  .docs-pagination__link--prev .docs-pagination__chevron-slot {
7301
- left: -26px;
7214
+ order: -1;
7215
+ margin-left: calc(var(--q1-space-1) * -1.5);
7302
7216
  }
7303
7217
  .docs-pagination__link--next .docs-pagination__chevron-slot {
7304
- right: -26px;
7218
+ margin-right: calc(var(--q1-space-1) * -1.5);
7305
7219
  }
7306
7220
  .docs-pagination__link:hover .docs-pagination__chevron-slot {
7307
7221
  color: var(--q1-color-text-primary);
@@ -7314,6 +7228,14 @@ a.q1-card:focus-visible {
7314
7228
  .docs-pagination__slot {
7315
7229
  display: block;
7316
7230
  }
7231
+ /* 中间插槽:位于上一页与下一页之间,两侧自动留白使其居中,宽度由内容决定。 */
7232
+ .docs-pagination__middle {
7233
+ align-self: center;
7234
+ margin-inline: auto;
7235
+ }
7236
+ .docs-pagination__middle + .docs-pagination__link--next {
7237
+ margin-left: 0;
7238
+ }
7317
7239
  .scroller {
7318
7240
  border: 1px solid var(--q1-color-border);
7319
7241
  border-radius: var(--q1-radius-3);
@@ -7481,7 +7403,7 @@ a.q1-card:focus-visible {
7481
7403
  margin: 0;
7482
7404
  padding: 0;
7483
7405
  border: 1px solid var(--q1-color-border);
7484
- border-radius: 999px;
7406
+ border-radius: var(--q1-radius-full);
7485
7407
  background: var(--q1-color-bg-panel);
7486
7408
  }
7487
7409
  .theme-switcher__option {
@@ -7489,7 +7411,7 @@ a.q1-card:focus-visible {
7489
7411
  place-items: center;
7490
7412
  width: 32px;
7491
7413
  height: 32px;
7492
- border-radius: 999px;
7414
+ border-radius: var(--q1-radius-full);
7493
7415
  color: var(--q1-color-text-secondary);
7494
7416
  cursor: pointer;
7495
7417
  }
@@ -7557,14 +7479,14 @@ a.q1-card:focus-visible {
7557
7479
  transform: translateX(-50%);
7558
7480
  width: 30%;
7559
7481
  height: 27px;
7560
- border-radius: 999px;
7482
+ border-radius: var(--q1-radius-full);
7561
7483
  background: oklch(0 0 0);
7562
7484
  z-index: 2;
7563
7485
  }
7564
7486
  .phone__btn {
7565
7487
  position: absolute;
7566
7488
  width: 2px;
7567
- border-radius: 999px;
7489
+ border-radius: var(--q1-radius-full);
7568
7490
  background: oklch(0.32 0 0);
7569
7491
  }
7570
7492
  /* q1-lint-enable Q1-DS-501 */
@@ -7609,7 +7531,7 @@ a.q1-card:focus-visible {
7609
7531
  transform: translateX(-50%);
7610
7532
  width: 34%;
7611
7533
  height: 4px;
7612
- border-radius: 999px;
7534
+ border-radius: var(--q1-radius-full);
7613
7535
  background: var(--q1-color-text-primary);
7614
7536
  z-index: 2;
7615
7537
  }
@@ -7942,12 +7864,12 @@ a.q1-card:focus-visible {
7942
7864
  }
7943
7865
  .slider-input::-webkit-slider-runnable-track {
7944
7866
  height: 8px;
7945
- border-radius: 999px;
7867
+ border-radius: var(--q1-radius-full);
7946
7868
  background: var(--q1-color-bg-subtle);
7947
7869
  }
7948
7870
  .slider-input::-moz-range-track {
7949
7871
  height: 8px;
7950
- border-radius: 999px;
7872
+ border-radius: var(--q1-radius-full);
7951
7873
  background: var(--q1-color-bg-subtle);
7952
7874
  }
7953
7875
  /* 竖条拇指:6×14 白色小竖条 + 定义环;action-on-primary 两主题恒白(拇指骑在 primary 填充上)。 */
@@ -8097,7 +8019,7 @@ a.q1-card:focus-visible {
8097
8019
  left: 0;
8098
8020
  right: 0;
8099
8021
  height: 8px;
8100
- border-radius: 999px;
8022
+ border-radius: var(--q1-radius-full);
8101
8023
  background: var(--q1-color-bg-subtle);
8102
8024
  transform: translateY(-50%);
8103
8025
  }
@@ -8107,7 +8029,7 @@ a.q1-card:focus-visible {
8107
8029
  left: var(--low);
8108
8030
  right: calc(100% - var(--high));
8109
8031
  height: 8px;
8110
- border-radius: 999px;
8032
+ border-radius: var(--q1-radius-full);
8111
8033
  background: var(--q1-color-action-primary);
8112
8034
  transform: translateY(-50%);
8113
8035
  }
@@ -8279,20 +8201,26 @@ a.q1-card:focus-visible {
8279
8201
  .split-button__icon--loading {
8280
8202
  visibility: hidden;
8281
8203
  }
8282
- /* 变体 */
8204
+ /* 变体:default 是浅灰底 + border-strong 外框,分割线与外框同为 border-strong,在浅灰底上保持清晰;
8205
+ secondary 是面板底 + 与 Button 次要档一致的 border 外框,分割线与外框同色同粗,强调层级低于 default。 */
8283
8206
  .split-button--default .split-button__primary,
8284
8207
  .split-button--default .split-button__toggle {
8285
8208
  background: var(--q1-color-bg-subtle);
8286
8209
  }
8287
8210
  .split-button--secondary .split-button__primary,
8288
8211
  .split-button--secondary .split-button__toggle {
8212
+ border-color: var(--q1-color-border);
8289
8213
  background: var(--q1-color-bg-panel);
8290
8214
  }
8291
8215
  @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']) {
8216
+ .split-button--default .split-button__primary:hover:not(:disabled, [aria-disabled='true']),
8217
+ .split-button--default .split-button__toggle:hover:not(:disabled, [aria-disabled='true']) {
8294
8218
  background: color-mix(in srgb, var(--q1-color-text-primary) 7%, transparent);
8295
8219
  }
8220
+ .split-button--secondary .split-button__primary:hover:not(:disabled, [aria-disabled='true']),
8221
+ .split-button--secondary .split-button__toggle:hover:not(:disabled, [aria-disabled='true']) {
8222
+ background: var(--q1-color-bg-hover);
8223
+ }
8296
8224
  }
8297
8225
  .split-button__primary:disabled,
8298
8226
  .split-button__toggle:disabled {
@@ -8409,7 +8337,8 @@ a.q1-card:focus-visible {
8409
8337
  /* md 默认 40px,与家族刻度 sm32/md40/lg48(Input/Select/Button 同体系)一致。 */
8410
8338
  min-height: 40px;
8411
8339
  padding: 0 var(--q1-space-3);
8412
- border: 1px solid var(--q1-color-border-strong);
8340
+ /* 与 Input(.form-control / .input-control)同走控件边界角色,同一表单里边框深浅一致。 */
8341
+ border: 1px solid var(--q1-color-border-control);
8413
8342
  border-radius: var(--q1-radius-2);
8414
8343
  background: var(--q1-color-bg-sunken);
8415
8344
  }
@@ -8428,6 +8357,12 @@ a.q1-card:focus-visible {
8428
8357
  font-size: var(--q1-font-size-copy-16);
8429
8358
  line-height: var(--q1-line-height-heading-16);
8430
8359
  }
8360
+ /* 悬停加深与 Input(.input-control:hover)同档同条件;聚焦、禁用、错误态不加深。 */
8361
+ .combobox__control:hover:not(:focus-within):not(:has(:disabled, [aria-invalid='true'])):not(.combobox--error .combobox__control):not(
8362
+ .combobox--disabled .combobox__control
8363
+ ) {
8364
+ border-color: var(--q1-color-gray-800);
8365
+ }
8431
8366
  .combobox__control:has(.combobox__input:focus) {
8432
8367
  box-shadow: var(--q1-shadow-focus-input);
8433
8368
  }
@@ -8580,8 +8515,9 @@ a.q1-card:focus-visible {
8580
8515
  justify-content: space-between;
8581
8516
  gap: var(--q1-space-3);
8582
8517
  min-width: 200px;
8583
- padding: var(--q1-space-2) var(--q1-space-3);
8584
- border: 1px solid var(--q1-color-border-strong);
8518
+ /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
8519
+ padding: var(--q1-space-2) var(--q1-space-2-5) var(--q1-space-2) var(--q1-space-3);
8520
+ border: 1px solid var(--q1-color-border-control);
8585
8521
  border-radius: var(--q1-radius-2);
8586
8522
  background: var(--q1-color-bg-sunken);
8587
8523
  color: var(--q1-color-text-primary);
@@ -8766,13 +8702,15 @@ a.q1-card:focus-visible {
8766
8702
  display: flex;
8767
8703
  align-items: flex-start;
8768
8704
  justify-content: center;
8769
- padding: var(--q1-space-6) var(--q1-space-4);
8705
+ /* 面板落在视口上部约 18% 处、不贴顶:上限 144px(1.5 × space-24),矮视口按比例收紧。 */
8706
+ --search-dialog-offset-top: min(18vh, calc(var(--q1-space-24) * 1.5));
8707
+ padding: var(--search-dialog-offset-top) var(--q1-space-4) var(--q1-space-4);
8770
8708
  }
8709
+ /* 遮罩颜色与 Modal 同源,见 overlay-surfaces.css:浅色为白纱,暗色压暗。 */
8771
8710
  .search-dialog__backdrop {
8772
8711
  position: absolute;
8773
8712
  inset: 0;
8774
8713
  border: 0;
8775
- background: color-mix(in srgb, var(--q1-color-shadow) 45%, transparent);
8776
8714
  cursor: default;
8777
8715
  }
8778
8716
  .search-dialog__panel {
@@ -8780,37 +8718,33 @@ a.q1-card:focus-visible {
8780
8718
  display: flex;
8781
8719
  flex-direction: column;
8782
8720
  width: min(640px, calc(100vw - 2 * var(--q1-space-4)));
8783
- max-height: calc(100dvh - 2 * var(--q1-space-6));
8721
+ max-height: calc(100dvh - var(--search-dialog-offset-top) - var(--q1-space-4));
8784
8722
  overflow: hidden;
8785
8723
  border-radius: var(--q1-radius-4);
8786
8724
  background: var(--q1-color-bg-raised);
8787
8725
  box-shadow: var(--q1-shadow-modal);
8788
8726
  }
8727
+ /* 融合式输入:输入框不加描边与焦点环,和弹层头部连成一体,下方一条分隔线;
8728
+ 焦点由插入光标与模态弹层本身表达(打开即聚焦输入框)。 */
8789
8729
  .search-dialog__search {
8790
8730
  display: flex;
8791
8731
  flex: none;
8792
8732
  align-items: center;
8793
8733
  gap: var(--q1-space-3);
8794
- padding: var(--q1-space-3) var(--q1-space-4);
8734
+ padding: var(--q1-space-2) var(--q1-space-3) var(--q1-space-2) var(--q1-space-4);
8795
8735
  border-bottom: 1px solid var(--q1-color-border);
8796
8736
  }
8797
8737
  .search-dialog__field {
8798
8738
  display: flex;
8799
8739
  min-width: 0;
8800
- min-height: 44px;
8740
+ min-height: var(--q1-space-10);
8801
8741
  flex: 1 1 auto;
8802
8742
  align-items: center;
8803
- gap: var(--q1-space-2);
8804
- padding-inline: var(--q1-space-3);
8805
- border-radius: var(--q1-radius-2);
8743
+ gap: var(--q1-space-3);
8806
8744
  color: var(--q1-color-text-secondary);
8807
8745
  }
8808
- .search-dialog__field:focus-within {
8809
- box-shadow: var(--q1-shadow-focus-input);
8810
- }
8811
8746
  .search-dialog__input {
8812
8747
  min-width: 0;
8813
- min-height: 44px;
8814
8748
  flex: 1 1 auto;
8815
8749
  padding: 0;
8816
8750
  border: 0;
@@ -8823,18 +8757,20 @@ a.q1-card:focus-visible {
8823
8757
  outline: none;
8824
8758
  box-shadow: none;
8825
8759
  }
8760
+ /* 关闭入口以 Esc 键帽呈现:键盘优先、视觉更轻;粗指针下由 TouchTarget 扩展到 44px 命中区。 */
8826
8761
  .search-dialog__close {
8827
- display: grid;
8828
- width: 44px;
8829
- height: 44px;
8762
+ position: relative;
8763
+ display: inline-flex;
8830
8764
  flex: none;
8831
- place-items: center;
8765
+ align-items: center;
8766
+ padding: 0;
8832
8767
  border: 0;
8833
- border-radius: var(--q1-radius-2);
8768
+ border-radius: var(--q1-radius-1);
8834
8769
  background: transparent;
8835
8770
  color: var(--q1-color-text-secondary);
8836
8771
  cursor: pointer;
8837
8772
  transition: transform var(--q1-duration-press) var(--q1-ease-out);
8773
+ --touch-target-border-width: 0px;
8838
8774
  }
8839
8775
  .search-dialog__close:focus-visible,
8840
8776
  .search-dialog__clear:focus-visible,
@@ -8865,7 +8801,7 @@ a.q1-card:focus-visible {
8865
8801
  isolation: isolate;
8866
8802
  display: flex;
8867
8803
  width: 100%;
8868
- min-height: 44px;
8804
+ min-height: calc(var(--q1-space-8) + var(--q1-space-1));
8869
8805
  flex-direction: column;
8870
8806
  justify-content: center;
8871
8807
  gap: 0;
@@ -8896,11 +8832,10 @@ a.q1-card:focus-visible {
8896
8832
  background: var(--q1-color-bg-subtle);
8897
8833
  }
8898
8834
  @media (hover: hover) and (pointer: fine) {
8899
- .search-dialog__close:hover,
8900
8835
  .search-dialog__clear:hover {
8901
8836
  background: var(--q1-color-bg-subtle);
8902
8837
  }
8903
- .search-dialog__close:hover {
8838
+ .search-dialog__close:hover .q1-kbd {
8904
8839
  color: var(--q1-color-text-primary);
8905
8840
  }
8906
8841
  .search-dialog__body[data-search-dialog-pointer-navigation='true'] .search-dialog__option:hover:not(:disabled) {
@@ -8926,6 +8861,20 @@ a.q1-card:focus-visible {
8926
8861
  font-size: var(--q1-font-size-label-13);
8927
8862
  line-height: var(--q1-line-height-label-13);
8928
8863
  }
8864
+ /* 当前项:右侧勾选标记,与键盘活动项的底色高亮相互独立;标记不进入可访问名称,语义由 aria-current 提供。 */
8865
+ .search-dialog__option[aria-current] {
8866
+ padding-inline-end: calc(var(--q1-space-2) + var(--q1-space-4) + var(--q1-space-2));
8867
+ }
8868
+ .search-dialog__option-current {
8869
+ position: absolute;
8870
+ z-index: 1;
8871
+ top: 50%;
8872
+ right: var(--q1-space-2);
8873
+ width: var(--q1-space-4);
8874
+ height: var(--q1-space-4);
8875
+ color: var(--q1-color-text-primary);
8876
+ translate: 0 -50%;
8877
+ }
8929
8878
  .search-dialog__empty {
8930
8879
  display: grid;
8931
8880
  justify-items: center;
@@ -8948,12 +8897,17 @@ a.q1-card:focus-visible {
8948
8897
  cursor: pointer;
8949
8898
  transition: transform var(--q1-duration-press) var(--q1-ease-out);
8950
8899
  }
8900
+ /* 粗指针:输入行与结果行回到 44px 触控高度。 */
8901
+ @media (pointer: coarse), (any-pointer: coarse) {
8902
+ .search-dialog__field,
8903
+ .search-dialog__option {
8904
+ min-height: var(--q1-touch-target-min);
8905
+ }
8906
+ }
8907
+ /* 窄屏:软键盘会占去下半屏,面板贴近顶部,把高度留给结果列表。 */
8951
8908
  @media (max-width: 480px) {
8952
8909
  .search-dialog {
8953
- padding: var(--q1-space-4);
8954
- }
8955
- .search-dialog__panel {
8956
- max-height: calc(100dvh - 2 * var(--q1-space-4));
8910
+ --search-dialog-offset-top: var(--q1-space-4);
8957
8911
  }
8958
8912
  .search-dialog__trigger-control {
8959
8913
  min-width: 44px;
@@ -9250,7 +9204,7 @@ a.q1-card:focus-visible {
9250
9204
  .drawer__grabber {
9251
9205
  width: 36px;
9252
9206
  height: 4px;
9253
- border-radius: 999px;
9207
+ border-radius: var(--q1-radius-full);
9254
9208
  background: var(--q1-color-border-strong);
9255
9209
  }
9256
9210
  .drawer__title {
@@ -9847,12 +9801,14 @@ a.q1-card:focus-visible {
9847
9801
  padding: 0 var(--q1-space-2);
9848
9802
  }
9849
9803
 
9804
+ /* 分区标题比条目小一档、加粗,并取主文字色:条目默认为次级文字色,标题若同为次级色,
9805
+ 层级只剩字重差,扫读时容易和条目混在一起。 */
9850
9806
  .q1-navigation__section-heading {
9851
9807
  flex: 1 1 auto;
9852
9808
  min-width: 0;
9853
9809
  overflow: hidden;
9854
9810
  margin: 0;
9855
- color: var(--q1-color-text-secondary);
9811
+ color: var(--q1-color-text-primary);
9856
9812
  font-size: var(--q1-font-size-label-13);
9857
9813
  font-weight: var(--q1-font-weight-semibold);
9858
9814
  line-height: var(--q1-line-height-label-13);
@@ -9945,7 +9901,7 @@ a.q1-navigation__item[aria-disabled='true'] {
9945
9901
  width: 16px;
9946
9902
  height: 16px;
9947
9903
  stroke: currentColor;
9948
- stroke-width: 1.8;
9904
+ stroke-width: 2;
9949
9905
  translate: 0 var(--q1-optical-icon-shift-cjk-label);
9950
9906
  }
9951
9907
 
@@ -10175,7 +10131,8 @@ a.q1-navigation__item[aria-disabled='true'] {
10175
10131
  border: 1px solid var(--q1-color-border);
10176
10132
  border-radius: var(--q1-radius-3);
10177
10133
  background: var(--q1-color-bg-panel);
10178
- padding: var(--q1-space-1) var(--q1-space-2);
10134
+ /* 末尾 chevron 一侧收一档,抵消图标框自带空白。 */
10135
+ padding: var(--q1-space-1) var(--q1-space-1) var(--q1-space-1) var(--q1-space-2);
10179
10136
  color: var(--q1-color-text-primary);
10180
10137
  font: inherit;
10181
10138
  text-align: start;
@@ -10825,12 +10782,6 @@ a.q1-navigation__item[aria-disabled='true'] {
10825
10782
  display: block;
10826
10783
  margin-left: 0.4em;
10827
10784
  }
10828
- .json-view-boundary-stack {
10829
- display: grid;
10830
- min-width: 0;
10831
- gap: var(--q1-space-3);
10832
- }
10833
-
10834
10785
  @media (pointer: coarse), (any-pointer: coarse) {
10835
10786
  .q1-json-view__summary {
10836
10787
  box-sizing: border-box;
@@ -11132,8 +11083,7 @@ a.q1-navigation__item[aria-disabled='true'] {
11132
11083
  .search-dialog__input:focus-visible,
11133
11084
  .command-palette .command-palette__search input:focus,
11134
11085
  .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) {
11086
+ .theme-switcher__option:has(input:focus-visible) {
11137
11087
  outline: 2px solid Highlight;
11138
11088
  outline-offset: 2px;
11139
11089
  }
@@ -11343,7 +11293,6 @@ a.q1-navigation__item[aria-disabled='true'] {
11343
11293
 
11344
11294
  .cal-field__clear:focus-visible,
11345
11295
  .cal-field__caret:focus-visible,
11346
- .cal-inputs__apply:focus-visible,
11347
11296
  .cal-period__option:focus-visible {
11348
11297
  outline: none;
11349
11298
  box-shadow: var(--q1-shadow-focus);
@@ -11374,6 +11323,26 @@ a.q1-navigation__item[aria-disabled='true'] {
11374
11323
  font-weight: var(--q1-font-weight-medium);
11375
11324
  }
11376
11325
 
11326
+ .calendar {
11327
+ flex: none;
11328
+ }
11329
+
11330
+ .cal-popover--vertical > .calendar {
11331
+ align-self: center;
11332
+ }
11333
+
11334
+ .cal-popover--vertical > .calendar--large {
11335
+ width: 100%;
11336
+ }
11337
+
11338
+ .cal-popover--vertical .calendar--large .calendar__grid {
11339
+ grid-template-columns: repeat(7, minmax(0, 1fr));
11340
+ }
11341
+
11342
+ .cal-popover--vertical .calendar--large .calendar__cell {
11343
+ width: 100%;
11344
+ }
11345
+
11377
11346
  .cal-popover {
11378
11347
  box-sizing: border-box;
11379
11348
  max-width: calc(100vw - var(--q1-space-2));
@@ -11443,6 +11412,10 @@ a.q1-navigation__item[aria-disabled='true'] {
11443
11412
  }
11444
11413
 
11445
11414
  @media (pointer: coarse), (any-pointer: coarse) {
11415
+ .cal-popover--vertical {
11416
+ width: calc(7 * var(--q1-touch-target-min) + 2 * var(--q1-space-3));
11417
+ }
11418
+
11446
11419
  .cal-inputs__apply,
11447
11420
  .cal-period__trigger,
11448
11421
  .cal-period__option {
@@ -11467,21 +11440,94 @@ a.q1-navigation__item[aria-disabled='true'] {
11467
11440
  }
11468
11441
  }
11469
11442
 
11470
- /* 时间输入复用 Input 的 .form-control 皮肤与 sm 高度档;宽度按 HH:mm 五个等宽字符加左右内边距。 */
11443
+ .cal-field__control:has(.cal-field__trigger[aria-invalid='true']:not(:disabled)) {
11444
+ box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-color-status-danger);
11445
+ }
11446
+
11447
+ .cal-field__clear:disabled {
11448
+ color: var(--q1-color-text-muted);
11449
+ cursor: not-allowed;
11450
+ }
11451
+
11452
+ .sheet__panel:has(.cal-sheet) {
11453
+ overflow-y: auto;
11454
+ }
11455
+
11456
+ .sheet__panel:has(.cal-sheet) > .sheet__body {
11457
+ flex: none;
11458
+ overflow: visible;
11459
+ padding: var(--q1-space-2);
11460
+ }
11461
+
11462
+ .cal-sheet {
11463
+ display: flex;
11464
+ flex-direction: column;
11465
+ align-items: center;
11466
+ gap: var(--q1-space-4);
11467
+ }
11468
+
11469
+ .cal-field__control:has(.cal-field__trigger[aria-invalid='true']:not(:disabled)):focus-within {
11470
+ box-shadow: var(--q1-shadow-focus-input-danger);
11471
+ }
11472
+
11473
+ /* 日期与时间复用 Input 的 sm 档,日期填满时间框以外的行宽。 */
11471
11474
  .cal-time-input {
11472
11475
  flex: none;
11473
- width: calc(6ch + 2 * var(--q1-space-3));
11476
+ width: calc(var(--q1-space-16) + var(--q1-space-6));
11474
11477
  font-variant-numeric: tabular-nums;
11475
11478
  }
11476
11479
  @media (pointer: coarse), (any-pointer: coarse) {
11477
11480
  .cal-time-input { min-height: var(--q1-touch-target-min); font-size: var(--q1-font-size-copy-16); }
11478
11481
  }
11479
11482
 
11480
- /* Calendar 触发器:与 Select 一样铺满所在列,长值截断;禁用态对齐 Select(浅灰底、弱边界、弱化文字)。 */
11483
+ .cal-date-input {
11484
+ flex: 1;
11485
+ min-width: 0;
11486
+ width: 0;
11487
+ font-variant-numeric: tabular-nums;
11488
+ }
11489
+
11490
+ .cal-inputs__error {
11491
+ color: var(--q1-color-status-danger);
11492
+ font-size: var(--q1-font-size-label-12);
11493
+ line-height: var(--q1-line-height-label-12);
11494
+ }
11495
+
11496
+ .cal-inputs__timezone .form-field {
11497
+ width: 100%;
11498
+ }
11499
+
11500
+ .cal-inputs__timezone .form-control--select {
11501
+ color: var(--q1-color-text-secondary);
11502
+ }
11503
+
11504
+ @media (pointer: coarse), (any-pointer: coarse) {
11505
+ .cal-date-input {
11506
+ min-height: var(--q1-touch-target-min);
11507
+ font-size: var(--q1-font-size-copy-16);
11508
+ }
11509
+ }
11510
+
11511
+ /* 与 Input 共用静息描边;宽度由现有控制高度和间距刻度组合。 */
11512
+ .cal-field {
11513
+ min-width: min(100%, calc(6 * var(--q1-control-height-default) + var(--q1-space-2)));
11514
+ }
11515
+
11516
+ .cal-field__control:not(.cal-field__control--filled) .cal-field__trigger {
11517
+ color: var(--q1-color-text-muted);
11518
+ }
11519
+
11481
11520
  .cal-field__trigger {
11482
11521
  min-width: 0;
11522
+ border-radius: inherit;
11483
11523
  }
11484
11524
 
11525
+ .cal-field__control--compact .cal-field__trigger {
11526
+ border-start-end-radius: 0;
11527
+ border-end-end-radius: 0;
11528
+ }
11529
+
11530
+
11485
11531
  .cal-field__label {
11486
11532
  min-width: 0;
11487
11533
  overflow: hidden;
@@ -11500,6 +11546,96 @@ a.q1-navigation__item[aria-disabled='true'] {
11500
11546
  cursor: not-allowed;
11501
11547
  }
11502
11548
 
11549
+ /* 复用 Input 的共用外框与内部分隔线,以及 SplitButton 的外侧圆角和焦点层级。 */
11550
+ .cal-field-group {
11551
+ display: grid;
11552
+ grid-template-columns: repeat(2, minmax(0, 1fr));
11553
+ width: calc(12 * var(--q1-control-height-default) + 2 * var(--q1-space-2));
11554
+ max-width: 100%;
11555
+ border-radius: var(--q1-radius-2);
11556
+ background: var(--q1-color-bg-panel);
11557
+ box-shadow: inset 0 0 0 calc(var(--q1-space-1) / 4) var(--q1-input-border, var(--q1-color-border-control));
11558
+ }
11559
+
11560
+ .cal-field-group--stacked {
11561
+ grid-template-columns: minmax(0, 1fr);
11562
+ width: calc(6 * var(--q1-control-height-default) + var(--q1-space-2));
11563
+ }
11564
+
11565
+ .cal-field-group > .cal-period,
11566
+ .cal-field-group > .cal-field {
11567
+ min-width: 0;
11568
+ }
11569
+
11570
+ .cal-field-group > .cal-period:focus-within,
11571
+ .cal-field-group > .cal-field:focus-within {
11572
+ z-index: 1;
11573
+ }
11574
+
11575
+ .cal-field-group > .cal-period > .cal-period__trigger {
11576
+ box-sizing: border-box;
11577
+ width: 100%;
11578
+ min-width: 0;
11579
+ height: 100%;
11580
+ min-height: var(--q1-control-height-default);
11581
+ border: 0;
11582
+ border-inline-end: calc(var(--q1-space-1) / 4) solid var(--q1-input-border, var(--q1-color-border-control));
11583
+ border-radius: var(--q1-radius-2) 0 0 var(--q1-radius-2);
11584
+ background: transparent;
11585
+ color: var(--q1-color-text-muted);
11586
+ }
11587
+
11588
+ .cal-field-group > .cal-field > .cal-field__control {
11589
+ box-shadow: none;
11590
+ background: transparent;
11591
+ border-radius: 0 var(--q1-radius-2) var(--q1-radius-2) 0;
11592
+ }
11593
+
11594
+ .cal-field-group--stacked > .cal-period > .cal-period__trigger {
11595
+ border-inline-end: 0;
11596
+ border-block-end: calc(var(--q1-space-1) / 4) solid var(--q1-input-border, var(--q1-color-border-control));
11597
+ border-radius: var(--q1-radius-2) var(--q1-radius-2) 0 0;
11598
+ }
11599
+
11600
+ .cal-field-group--stacked > .cal-field > .cal-field__control {
11601
+ border-radius: 0 0 var(--q1-radius-2) var(--q1-radius-2);
11602
+ }
11603
+
11604
+ .cal-field-group > .cal-field > .cal-field__control:has(:focus-visible) {
11605
+ box-shadow: var(--q1-shadow-focus-input);
11606
+ }
11607
+
11608
+ .cal-field-group .cal-field__trigger:focus-visible,
11609
+ .cal-field-group .cal-field__caret:focus-visible,
11610
+ .cal-field-group .cal-field__clear:focus-visible {
11611
+ box-shadow: none;
11612
+ border-radius: inherit;
11613
+ }
11614
+
11615
+ .cal-field-group .cal-field__control--compact .cal-field__trigger:focus-visible {
11616
+ border-start-end-radius: 0;
11617
+ border-end-end-radius: 0;
11618
+ }
11619
+
11620
+ .cal-field-group--small .cal-field__control {
11621
+ --cal-field-height: var(--q1-space-8);
11622
+ }
11623
+
11624
+ .cal-field-group--small > .cal-period > .cal-period__trigger {
11625
+ min-height: var(--q1-space-8);
11626
+ padding-block: 0;
11627
+ }
11628
+
11629
+ @media (hover: none), (pointer: coarse), (any-pointer: coarse) {
11630
+ .cal-field-group--small .cal-field__control {
11631
+ --cal-field-height: var(--q1-touch-target-min);
11632
+ }
11633
+
11634
+ .cal-field-group > .cal-period > .cal-period__trigger {
11635
+ min-height: var(--q1-touch-target-min);
11636
+ }
11637
+ }
11638
+
11503
11639
  @media (max-width: 40rem) {
11504
11640
  .sheet__panel.sheet__panel--mobile-fullscreen {
11505
11641
  inset: 0;
@@ -13103,7 +13239,7 @@ a.q1-navigation__item[aria-disabled='true'] {
13103
13239
  }
13104
13240
 
13105
13241
  @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)) {
13242
+ :where(:is(.button, .copy-button, .menu__trigger, .dots-menu__trigger, .description__hint, .description__hint-close, .twc__copy):has(.q1-touch-target)) {
13107
13243
  position: relative;
13108
13244
  }
13109
13245
 
@@ -13112,7 +13248,7 @@ a.q1-navigation__item[aria-disabled='true'] {
13112
13248
  --touch-target-border-width: calc(var(--q1-space-1) / 4);
13113
13249
  }
13114
13250
 
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) {
13251
+ :where(.dots-menu__trigger, .description__hint, .description__hint-close, .twc__copy) {
13116
13252
  --touch-target-border-width: 0px;
13117
13253
  }
13118
13254
 
@@ -13135,6 +13271,62 @@ a.q1-navigation__item[aria-disabled='true'] {
13135
13271
  }
13136
13272
  }
13137
13273
 
13274
+ .q1-corner-anchor {
13275
+ position: relative;
13276
+ display: inline-flex;
13277
+ vertical-align: middle;
13278
+ }
13279
+
13280
+ .corner-remove-button {
13281
+ position: absolute;
13282
+ top: 0;
13283
+ right: 0;
13284
+ transform: translate(50%, -50%);
13285
+ --touch-target-border-width: calc(var(--q1-space-1) / 4);
13286
+ box-sizing: border-box;
13287
+ display: grid;
13288
+ place-items: center;
13289
+ flex-shrink: 0;
13290
+ width: var(--q1-space-6);
13291
+ height: var(--q1-space-6);
13292
+ padding: 0;
13293
+ border: calc(var(--q1-space-1) / 4) solid var(--q1-color-border-overlay);
13294
+ border-radius: var(--q1-radius-full);
13295
+ background: var(--q1-color-bg-overlay);
13296
+ color: var(--q1-color-text-primary);
13297
+ box-shadow: var(--q1-shadow-popover);
13298
+ cursor: pointer;
13299
+ }
13300
+
13301
+ /* 圆周 45°:距外框两边均为 (1 - 1 / √2) / 2。 */
13302
+ .q1-corner-anchor--round > .corner-remove-button {
13303
+ top: calc(50% - 50% / sqrt(2));
13304
+ right: calc(50% - 50% / sqrt(2));
13305
+ }
13306
+
13307
+ .corner-remove-button > svg {
13308
+ width: var(--q1-space-4);
13309
+ height: var(--q1-space-4);
13310
+ pointer-events: none;
13311
+ }
13312
+
13313
+ .corner-remove-button:focus-visible {
13314
+ outline: calc(var(--q1-space-1) / 2) solid var(--q1-color-focus);
13315
+ outline-offset: var(--q1-space-1);
13316
+ box-shadow: var(--q1-shadow-focus), var(--q1-shadow-popover);
13317
+ }
13318
+
13319
+ @media (hover: hover) and (pointer: fine) {
13320
+ .corner-remove-button:hover:not(:disabled) {
13321
+ background: var(--q1-color-bg-hover);
13322
+ }
13323
+ }
13324
+
13325
+ .corner-remove-button:disabled {
13326
+ cursor: not-allowed;
13327
+ color: var(--q1-color-text-muted);
13328
+ }
13329
+
13138
13330
  /* Private geometry derives from existing spacing; no new consumer token surface. */
13139
13331
  .control-option.checkbox-circle {
13140
13332
  --checkbox-circle-diameter: calc(var(--q1-space-4) + var(--q1-space-1) / 2);
@@ -13320,8 +13512,10 @@ a.q1-navigation__item[aria-disabled='true'] {
13320
13512
  cursor: pointer;
13321
13513
  transition: color var(--q1-duration-fast);
13322
13514
  }
13323
- .filter-chip__clear { flex-shrink: 0; width: var(--q1-space-6); padding: 0; margin-inline-start: var(--q1-space-1); }
13515
+ .filter-chip__clear { flex-shrink: 0; width: var(--q1-space-6); padding: 0; margin-inline-start: var(--q1-space-1-5); }
13324
13516
  .filter-chip__clear + .filter-chip__picker { padding-inline-start: var(--q1-space-1); }
13517
+ /* 已设值时末尾是 chevron:结束侧收一档,抵消图标框自带空白;起始侧的清除按钮同理多留半档。 */
13518
+ .filter-chip--set .filter-chip__picker { padding-inline-end: var(--q1-space-2); }
13325
13519
  .filter-chip svg, .filter-chip__label, .filter-chip__separator { flex-shrink: 0; }
13326
13520
  .filter-chip svg { color: var(--q1-color-text-secondary); transition: color var(--q1-duration-fast); }
13327
13521
  .filter-chip__separator {
@@ -13366,6 +13560,7 @@ a.q1-navigation__item[aria-disabled='true'] {
13366
13560
  /* lg 高 48:短文案时横向内边距随档放宽,避免胶囊被压成近正圆。 */
13367
13561
  .filter-chip--lg .filter-chip__picker { padding-inline: var(--q1-space-3); }
13368
13562
  .filter-chip--lg .filter-chip__clear + .filter-chip__picker { padding-inline-start: var(--q1-space-1); }
13563
+ .filter-chip--lg.filter-chip--set .filter-chip__picker { padding-inline-end: var(--q1-space-2-5); }
13369
13564
 
13370
13565
  .popover-trigger { display: inline-flex; }
13371
13566
  .popover-panel {
@@ -13481,6 +13676,117 @@ a.q1-navigation__item[aria-disabled='true'] {
13481
13676
  .toggle-group { gap: var(--q1-space-4); padding: var(--q1-space-2); }
13482
13677
  }
13483
13678
 
13679
+ /* Region Error State:区块加载失败的原地错误态。中性表面,危险色只落在图标上;标题与说明沿用正文色阶。
13680
+ 根节点是宽度容器:inline 版在容器变窄时把重试按钮折到说明下方,按卡片实际宽度而非视口判断。 */
13681
+ .region-error-state {
13682
+ container: region-error-state / inline-size;
13683
+ }
13684
+
13685
+ .region-error-state__status {
13686
+ display: flex;
13687
+ min-width: 0;
13688
+ }
13689
+
13690
+ .region-error-state__icon {
13691
+ display: inline-flex;
13692
+ flex: none;
13693
+ align-items: center;
13694
+ justify-content: center;
13695
+ color: var(--q1-color-status-danger);
13696
+ }
13697
+
13698
+ .region-error-state__body {
13699
+ min-width: 0;
13700
+ }
13701
+
13702
+ .region-error-state__title,
13703
+ .region-error-state__description {
13704
+ margin: 0;
13705
+ overflow-wrap: anywhere;
13706
+ }
13707
+
13708
+ .region-error-state__title {
13709
+ color: var(--q1-color-text-primary);
13710
+ }
13711
+
13712
+ .region-error-state__description {
13713
+ font-size: var(--q1-font-size-label-14);
13714
+ font-weight: var(--q1-font-weight-regular);
13715
+ line-height: var(--q1-line-height-label-14);
13716
+ color: var(--q1-color-text-secondary);
13717
+ }
13718
+
13719
+ /* center:表格主体与大区块的居中占位。上下留白取 space-16,连同内容约等于五行表格的高度,
13720
+ 宿主保留表头时表格不塌缩。 */
13721
+ .region-error-state--center {
13722
+ display: flex;
13723
+ flex-direction: column;
13724
+ align-items: center;
13725
+ gap: var(--q1-space-4);
13726
+ padding: var(--q1-space-16) var(--q1-space-6);
13727
+ text-align: center;
13728
+ }
13729
+
13730
+ .region-error-state--center .region-error-state__status {
13731
+ flex-direction: column;
13732
+ align-items: center;
13733
+ gap: var(--q1-space-3);
13734
+ max-width: 32em;
13735
+ }
13736
+
13737
+ .region-error-state--center .region-error-state__icon {
13738
+ width: var(--q1-space-10);
13739
+ height: var(--q1-space-10);
13740
+ border-radius: var(--q1-radius-3);
13741
+ background: var(--q1-color-bg-subtle);
13742
+ }
13743
+
13744
+ .region-error-state--center .region-error-state__title {
13745
+ font-size: var(--q1-font-size-heading-16);
13746
+ font-weight: var(--q1-font-weight-heading-16);
13747
+ line-height: var(--q1-line-height-heading-16);
13748
+ }
13749
+
13750
+ .region-error-state--center .region-error-state__description {
13751
+ margin-top: var(--q1-space-1);
13752
+ }
13753
+
13754
+ /* inline:卡片与页面分区里的紧凑行。小号图标与标题首行同高居中;重试在行尾,容器变窄时折到说明下方。 */
13755
+ .region-error-state--inline {
13756
+ display: flex;
13757
+ flex-wrap: wrap;
13758
+ align-items: center;
13759
+ gap: var(--q1-space-3) var(--q1-space-4);
13760
+ }
13761
+
13762
+ .region-error-state--inline .region-error-state__status {
13763
+ flex: 1 1 0;
13764
+ align-items: flex-start;
13765
+ gap: var(--q1-space-3);
13766
+ }
13767
+
13768
+ .region-error-state--inline .region-error-state__icon {
13769
+ width: var(--q1-space-4);
13770
+ height: var(--q1-line-height-heading-14);
13771
+ }
13772
+
13773
+ .region-error-state--inline .region-error-state__title {
13774
+ font-size: var(--q1-font-size-heading-14);
13775
+ font-weight: var(--q1-font-weight-heading-14);
13776
+ line-height: var(--q1-line-height-heading-14);
13777
+ }
13778
+
13779
+ .region-error-state--inline .region-error-state__actions {
13780
+ flex: none;
13781
+ }
13782
+
13783
+ @container region-error-state (max-width: 30rem) {
13784
+ .region-error-state--inline .region-error-state__actions {
13785
+ flex-basis: 100%;
13786
+ padding-inline-start: calc(var(--q1-space-4) + var(--q1-space-3));
13787
+ }
13788
+ }
13789
+
13484
13790
  .hover-card-trigger { display: inline-flex; }
13485
13791
  .hover-card {
13486
13792
  max-width: min(calc(100vw - var(--q1-space-6)), calc(var(--q1-space-8) * 9));
@@ -13891,16 +14197,18 @@ a.q1-navigation__item[aria-disabled='true'] {
13891
14197
  /* 浅色白纱保留底层可读性;暗色沿用各浮层既有压暗强度。 */
13892
14198
  .modal__backdrop,
13893
14199
  .drawer__backdrop,
13894
- .sheet__backdrop {
14200
+ .sheet__backdrop,
14201
+ .search-dialog__backdrop {
13895
14202
  background: color-mix(in srgb, var(--q1-color-gray-100) 80%, transparent);
13896
14203
  }
13897
14204
 
13898
- [data-theme='dark'] .modal__backdrop,
13899
- [data-theme='dark'] .sheet__backdrop {
14205
+ :is([data-theme='dark'], [data-q1-theme='dark']) .modal__backdrop:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14206
+ :is([data-theme='dark'], [data-q1-theme='dark']) .sheet__backdrop:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14207
+ :is([data-theme='dark'], [data-q1-theme='dark']) .search-dialog__backdrop:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
13900
14208
  background: color-mix(in srgb, var(--q1-color-shadow) 45%, transparent);
13901
14209
  }
13902
14210
 
13903
- [data-theme='dark'] .drawer__backdrop {
14211
+ :is([data-theme='dark'], [data-q1-theme='dark']) .drawer__backdrop:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
13904
14212
  background: color-mix(in srgb, var(--q1-color-shadow) 28%, transparent);
13905
14213
  }
13906
14214
 
@@ -14066,25 +14374,25 @@ a.q1-navigation__item[aria-disabled='true'] {
14066
14374
 
14067
14375
  /* Form boundaries and brand graphics: owner-approved dark/mobile audit roles.
14068
14376
  Checkbox Circle keeps its own tone stroke (status-* / text-muted), so it is excluded here. */
14069
- :root[data-theme='dark'] :is(
14377
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14070
14378
  .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
14379
  .input-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .input-control),
14072
14380
  .textarea-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .textarea-control)
14073
- ) {
14381
+ ):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14074
14382
  border-color: var(--q1-input-border, var(--q1-color-border-control));
14075
14383
  }
14076
14384
 
14077
- :root[data-theme='dark'] :is(
14385
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14078
14386
  .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
14387
  .input-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .input-control):focus-within
14080
- ) {
14388
+ ):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14081
14389
  border-color: var(--q1-input-border-focus, var(--q1-input-border, var(--q1-color-border-control)));
14082
14390
  }
14083
14391
 
14084
- :root[data-theme='dark'] :is(
14392
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14085
14393
  .combobox__control:not(:has(:disabled, [aria-invalid='true'])),
14394
+ .multi-select__trigger:not(:disabled),
14086
14395
  .composer__box:not(:has(textarea:disabled)),
14087
- .cal-period__trigger,
14088
14396
  .feedback__select:not(:disabled),
14089
14397
  .feedback__textarea:not(:disabled),
14090
14398
  .range-slider__number:not(:disabled),
@@ -14092,12 +14400,11 @@ a.q1-navigation__item[aria-disabled='true'] {
14092
14400
  .choicebox:not(:has(:checked, :disabled)),
14093
14401
  .choicebox:not(:has(:checked, :disabled)) .choicebox__indicator,
14094
14402
  .control-option:not(.checkbox-circle):has(input:not(:checked):not(:indeterminate):not(:disabled)) .control-option__visual
14095
- ) {
14403
+ ):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14096
14404
  border-color: var(--q1-color-border-control);
14097
14405
  }
14098
14406
 
14099
- /* 亮色 OTP 格子、时段触发器、Choicebox 未选中卡同样走控件边界角色,不再用 8% 黑分隔线。 */
14100
- .cal-period__trigger,
14407
+ /* 亮色 OTP 格子、Choicebox 未选中卡同样走控件边界角色,不再用 8% 黑分隔线。 */
14101
14408
  .q1-verification-code:not(:has(:disabled, [aria-invalid='true'])) .q1-verification-code__slot,
14102
14409
  .choicebox:not(:has(:checked, :disabled)) {
14103
14410
  border-color: var(--q1-color-border-control);
@@ -14113,26 +14420,23 @@ a.q1-navigation__item[aria-disabled='true'] {
14113
14420
  .textarea-control:has(.form-control:disabled):not(:has([aria-invalid='true'])):not(.form-field--error .textarea-control),
14114
14421
  .feedback__select:disabled,
14115
14422
  .feedback__textarea:disabled,
14116
- .range-slider__number:disabled {
14423
+ .range-slider__number:disabled,
14424
+ .multi-select__trigger:disabled {
14117
14425
  border-color: var(--q1-color-border);
14118
14426
  }
14119
14427
 
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
14428
  @media (hover: hover) and (pointer: fine) {
14125
- :root[data-theme='dark'] :is(
14429
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14126
14430
  .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
14431
  .input-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .input-control),
14128
14432
  .textarea-control:not(:has(:disabled, [aria-invalid='true'])):not(.form-field--error .textarea-control),
14129
14433
  .combobox__control:not(:has(:disabled, [aria-invalid='true'])),
14130
14434
  .choicebox:not(:has(:checked, :disabled))
14131
- ):hover:not(:focus-within) {
14435
+ ):hover:not(:focus-within):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14132
14436
  border-color: var(--q1-color-gray-700);
14133
14437
  }
14134
14438
 
14135
- :root[data-theme='dark'] .control-option:not(.checkbox-circle):has(input:not(:checked):not(:indeterminate):not(:disabled)):hover .control-option__visual {
14439
+ :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
14440
  border-color: var(--q1-color-text-secondary);
14137
14441
  }
14138
14442
  }
@@ -14142,25 +14446,25 @@ a.q1-navigation__item[aria-disabled='true'] {
14142
14446
  }
14143
14447
 
14144
14448
  @media (hover: hover) and (pointer: fine) {
14145
- :root[data-theme='dark'] .toggle-field[aria-checked='true']:hover:not(:disabled) .toggle {
14449
+ :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
14450
  background: var(--toggle-on, var(--q1-color-primary-1000));
14147
14451
  }
14148
14452
  }
14149
14453
 
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 {
14454
+ :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,
14455
+ :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
14456
  background: var(--q1-color-border-control);
14153
14457
  }
14154
14458
 
14155
- :root[data-theme='dark'] .slider-input:not(.range-slider__thumb):not(:disabled)::-moz-range-track {
14459
+ :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
14460
  background: var(--q1-color-border-control);
14157
14461
  }
14158
14462
 
14159
- :root[data-theme='dark'] .slider-input--filled:not(.range-slider__thumb):not(:disabled)::-webkit-slider-runnable-track {
14463
+ :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
14464
  background: linear-gradient(to right, var(--q1-color-accent-graphic) var(--slider-pct), var(--q1-color-border-control) var(--slider-pct));
14161
14465
  }
14162
14466
 
14163
- :root[data-theme='dark'] .slider-input--filled:not(.range-slider__thumb):not(:disabled)::-moz-range-track {
14467
+ :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
14468
  background: linear-gradient(to right, var(--q1-color-accent-graphic) var(--slider-pct), var(--q1-color-border-control) var(--slider-pct));
14165
14469
  }
14166
14470
 
@@ -14174,16 +14478,16 @@ a.q1-navigation__item[aria-disabled='true'] {
14174
14478
  }
14175
14479
 
14176
14480
  /* 暗色表面抬升:亮色下靠恒深底色或投影成立的轮廓,暗色下与底色同色而消失。
14177
- 只在 :root[data-theme='dark'] 分支改,亮色外观不变;统一走面板底色 + 1px hairline。 */
14481
+ 只在暗色分支(页面暗色或 data-q1-theme="dark" 子树)改,亮色外观不变;统一走面板底色 + 1px hairline。 */
14178
14482
 
14179
14483
  /* 无框卡片:亮色靠投影浮起;暗色投影不可见,补 hairline 保住卡片边界。 */
14180
- :root[data-theme='dark'] .q1-card--borderless {
14484
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .q1-card--borderless:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14181
14485
  border-color: var(--q1-color-border);
14182
14486
  }
14183
14487
 
14184
14488
  /* +N 收纳芯片与页顶公告药丸:恒深底色在暗色画布上与底同色,改面板底 + hairline + 主文字色。 */
14185
- :root[data-theme='dark'] .avatar--overflow,
14186
- :root[data-theme='dark'] .banner__cta {
14489
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .avatar--overflow:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)),
14490
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .banner__cta:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14187
14491
  border: 1px solid var(--q1-color-border);
14188
14492
  background: var(--q1-color-bg-panel);
14189
14493
  color: var(--q1-color-text-primary);
@@ -14191,31 +14495,31 @@ a.q1-navigation__item[aria-disabled='true'] {
14191
14495
 
14192
14496
  @media (hover: hover) and (pointer: fine) {
14193
14497
  /* 悬停与同族 .banner__action 一致:底色换 bg-subtle。 */
14194
- :root[data-theme='dark'] .banner__cta:hover {
14498
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .banner__cta:hover:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14195
14499
  background: var(--q1-color-bg-subtle);
14196
14500
  }
14197
14501
  }
14198
14502
 
14199
14503
  /* Badge Pill:亮色 background-200 是近白浅底,暗色同一 token 翻成纯黑,在面板上成黑块;改面板底色;
14200
14504
  :where 把特异性压回基础规则,悬停/按下态照常覆盖。 */
14201
- :where(:root[data-theme='dark']) .badge__pill-visual {
14505
+ :where(:root[data-theme='dark'], [data-q1-theme='dark']) .badge__pill-visual:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14202
14506
  background: var(--q1-color-bg-panel);
14203
14507
  }
14204
14508
 
14205
14509
  /* Filter Chip:暗色 bg-canvas 比示例面板更深,成黑块;改面板底色(同上用 :where 保留悬停态)。 */
14206
- :where(:root[data-theme='dark']) .filter-chip {
14510
+ :where(:root[data-theme='dark'], [data-q1-theme='dark']) .filter-chip:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14207
14511
  background: var(--q1-color-bg-panel);
14208
14512
  }
14209
14513
 
14210
14514
  /* 虚线占位(Filter Chip 未设值、Context Menu 触发区):暗色 border-strong 与面板仅约 1.4:1,
14211
14515
  先用 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 {
14516
+ :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'] *)),
14517
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) .context-menu__area:not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14214
14518
  border-color: var(--q1-color-text-muted);
14215
14519
  }
14216
14520
 
14217
14521
  /* Multi Select 未选中勾选框:暗色 border-strong 落在浮层底上约 1.1:1;改控件边界角色 border-control。 */
14218
- :root[data-theme='dark'] .multi-select__check:not(.multi-select__check--on) {
14522
+ :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
14523
  border-color: var(--q1-color-border-control);
14220
14524
  }
14221
14525
 
@@ -14247,13 +14551,13 @@ a.q1-navigation__item[aria-disabled='true'] {
14247
14551
  }
14248
14552
 
14249
14553
  /* 暗色选中浅底:bg-subtle 在暗色是 gray-50,比面板更深,改用抬升一档的 bg-raised,覆盖上面全部选中态。 */
14250
- :root[data-theme='dark'] :is(
14554
+ :is(:root[data-theme='dark'], [data-q1-theme='dark']) :is(
14251
14555
  .choicebox:has(.choicebox__input:checked:not(:disabled)),
14252
14556
  .pagination__button--current:not(:disabled, [aria-disabled='true']),
14253
14557
  .toggle-group__item[aria-pressed='true']:not(:focus-visible),
14254
14558
  .switch-control__option[aria-checked='true']:not(:focus-visible) .switch-control__visual,
14255
14559
  .page-feedback__option[aria-pressed='true']:not(:focus-visible),
14256
14560
  .q1-json-view__row--highlight
14257
- ) {
14561
+ ):not(:where([data-q1-theme='light'], [data-q1-theme='light'] *)) {
14258
14562
  background: var(--q1-color-bg-raised);
14259
14563
  }