Просмотр исходного кода

refactor(beautify): D36 第八轮令牌收割 (hex 570->493)

- 新增 d36-round8-rules.js:自动比对 uni.scss 令牌表与残留 style hex,登记 40 条等值映射
- replace-hex-to-token.js 第八轮规则(\-green-base-2/\-violet-deep/\-primary-2/
  \-success-strong/\-3-*/\-gold-ink/\-wisdom-tint-5 等)
- 跳过 8 位带 alpha 的 hex(如 #F9731622),避免丢失透明度
- 58 文件 82 处收编;58 个 style 块 dart-sass 编译全部通过
- 全站硬编码色 570 -> 493;335 页最高债务 15
liaoxg 6 дней назад
Родитель
Сommit
7527a521db
59 измененных файлов с 230 добавлено и 76 удалено
  1. 1 1
      cfc-frontend/components/DimensionActivities.vue
  2. 2 2
      cfc-frontend/components/HealthBadge.vue
  3. 1 1
      cfc-frontend/components/report-upload-card.vue
  4. 2 2
      cfc-frontend/pages/ai/chat.vue
  5. 1 1
      cfc-frontend/pages/article-center/article-detail.vue
  6. 1 1
      cfc-frontend/pages/assessment/execution.vue
  7. 1 1
      cfc-frontend/pages/child/tasks.vue
  8. 1 1
      cfc-frontend/pages/cognitive-test/spatial-test.vue
  9. 1 1
      cfc-frontend/pages/diet/index.vue
  10. 1 1
      cfc-frontend/pages/diet/meal-config.vue
  11. 1 1
      cfc-frontend/pages/diet/recommendation.vue
  12. 1 1
      cfc-frontend/pages/diet/records.vue
  13. 1 1
      cfc-frontend/pages/discover-detail/product-detail/product-detail.vue
  14. 1 1
      cfc-frontend/pages/discover/create-circle.vue
  15. 1 1
      cfc-frontend/pages/family/manual-score-entry.vue
  16. 1 1
      cfc-frontend/pages/family/mbti-entry.vue
  17. 1 1
      cfc-frontend/pages/family/self-check-ai.vue
  18. 1 1
      cfc-frontend/pages/growth/caution-detail.vue
  19. 1 1
      cfc-frontend/pages/growth/create.vue
  20. 4 4
      cfc-frontend/pages/growth/detail.vue
  21. 1 1
      cfc-frontend/pages/growth/supplement.vue
  22. 1 1
      cfc-frontend/pages/growth/upload.vue
  23. 1 1
      cfc-frontend/pages/health/components/ComprehensiveSurvey.vue
  24. 1 1
      cfc-frontend/pages/health/doa-index.vue
  25. 2 2
      cfc-frontend/pages/health/doa-stage-detail.vue
  26. 2 2
      cfc-frontend/pages/health/gut-flora-foods-detail.vue
  27. 1 1
      cfc-frontend/pages/health/gut-flora-risks-detail.vue
  28. 1 1
      cfc-frontend/pages/health/health-survey.vue
  29. 2 2
      cfc-frontend/pages/health/indicator-curve.vue
  30. 1 1
      cfc-frontend/pages/health/my-feedback.vue
  31. 4 4
      cfc-frontend/pages/health/report-survey.vue
  32. 1 1
      cfc-frontend/pages/health/report-upload.vue
  33. 1 1
      cfc-frontend/pages/membership/upgrade.vue
  34. 1 1
      cfc-frontend/pages/mind-detail/emotion-trend.vue
  35. 2 2
      cfc-frontend/pages/parent/wishes/index.vue
  36. 1 1
      cfc-frontend/pages/profile-extra/coupons.vue
  37. 1 1
      cfc-frontend/pages/profile-extra/family-members.vue
  38. 1 1
      cfc-frontend/pages/profile-extra/gates.vue
  39. 1 1
      cfc-frontend/pages/profile/report-detail.vue
  40. 1 1
      cfc-frontend/pages/profile/report-management.vue
  41. 3 3
      cfc-frontend/pages/profile/service-role-apply.vue
  42. 1 1
      cfc-frontend/pages/promotion/index.vue
  43. 1 1
      cfc-frontend/pages/psych-assessment/index.vue
  44. 2 2
      cfc-frontend/pages/share/index.vue
  45. 1 1
      cfc-frontend/pages/shop/cart/cart.vue
  46. 1 1
      cfc-frontend/pages/shop/checkout/checkout.vue
  47. 3 3
      cfc-frontend/pages/shop/index/index.vue
  48. 2 2
      cfc-frontend/pages/shop/logistics/logistics.vue
  49. 1 1
      cfc-frontend/pages/shop/order-detail/order-detail.vue
  50. 1 1
      cfc-frontend/pages/shop/order-list/order-list.vue
  51. 1 1
      cfc-frontend/pages/stats/index.vue
  52. 1 1
      cfc-frontend/pages/vendor/center.vue
  53. 1 1
      cfc-frontend/pages/vendor/orders/orders.vue
  54. 1 1
      cfc-frontend/pages/vendor/products/products.vue
  55. 1 1
      cfc-frontend/pages/wishes/create.vue
  56. 1 1
      cfc-frontend/pages/wishes/detail.vue
  57. 2 2
      cfc-frontend/pages/wishes/index.vue
  58. 73 0
      cfc-frontend/scripts/d36-round8-rules.js
  59. 81 0
      cfc-frontend/scripts/replace-hex-to-token.js

+ 1 - 1
cfc-frontend/components/DimensionActivities.vue

@@ -242,7 +242,7 @@ export default {
   width: 44rpx;
   height: 44rpx;
   border-radius: 12rpx;
-  background: linear-gradient(135deg, $dim-mind, #FF8FB1);
+  background: linear-gradient(135deg, $dim-mind, $dim-mind-light-2);
   display: flex;
   align-items: center;
   justify-content: center;

+ 2 - 2
cfc-frontend/components/HealthBadge.vue

@@ -54,7 +54,7 @@ export default {
   flex-shrink: 0;
 }
 .badge-lv-1 { background: $status-success-soft; }
-.badge-lv-2 { background: #A7F3D0; }
+.badge-lv-2 { background: $status-success-light; }
 .badge-lv-3 { background: $status-warning-soft; }
 .badge-lv-4 { background: $brand-primary-light-2; }
 .badge-lv-5 { background: #FECDD3; }
@@ -63,7 +63,7 @@ export default {
 .badge-title {
   font-size: 28rpx;
   font-weight: 700;
-  color: #065F46;
+  color: $status-success-strong;
 }
 .badge-level-row {
   display: flex;

+ 1 - 1
cfc-frontend/components/report-upload-card.vue

@@ -87,7 +87,7 @@ export default {
 }
 .report-upload-arrow {
   font-size: 40rpx;
-  color: #A5D6A7;
+  color: $mat-green-soft;
   margin-left: 12rpx;
 }
 </style>

+ 2 - 2
cfc-frontend/pages/ai/chat.vue

@@ -530,7 +530,7 @@ export default {
 }
 
 .chat-nav.mascot-xibao {
-  background: linear-gradient(135deg, $uni-primary-pale 0%, #FFE4CC 100%);
+  background: linear-gradient(135deg, $uni-primary-pale 0%, $tint-warm-edge 100%);
   border-bottom-color: $dim-body;
 }
 .chat-nav.mascot-xibao .chat-nav.mascot-fubao {
@@ -738,7 +738,7 @@ export default {
 }
 
 .mascot-xibao .message-avatar {
-  background: linear-gradient(135deg, $uni-primary-pale 0%, #FFE4CC 100%);
+  background: linear-gradient(135deg, $uni-primary-pale 0%, $tint-warm-edge 100%);
   border: 2rpx solid $dim-body;
 }
 .mascot-fubao .message-avatar {

+ 1 - 1
cfc-frontend/pages/article-center/article-detail.vue

@@ -474,7 +474,7 @@ export default {
 .detail-summary { padding: 20rpx 30rpx; }
 .detail-summary-text { font-size: calc(26rpx * var(--font-scale, 1)); color: $facade-text-faint; line-height: 1.7; display: block; border-left: 4rpx solid $brand-primary; padding-left: 20rpx; }
 .divider { height: 1rpx; background: $facade-hairline-2; margin: 24rpx 30rpx; }
-.detail-body { padding: 0 30rpx; font-size: calc(32rpx * var(--font-scale, 1)); color: #444; line-height: 1.8; }
+.detail-body { padding: 0 30rpx; font-size: calc(32rpx * var(--font-scale, 1)); color: $facade-text-deep-2; line-height: 1.8; }
 
 .detail-footer { position: fixed; bottom: 0; left: 0; right: 0; background: $app-surface; padding: 20rpx 30rpx; display: flex; align-items: center; gap: 16rpx; box-shadow: 0 -2rpx 10rpx rgba(0,0,0,0.06); z-index: 10; }
 .share-btn { height: 72rpx; padding: 0 30rpx; background: linear-gradient(135deg, $brand-primary, $brand-primary-light); border-radius: 36rpx; display: flex; align-items: center; justify-content: center; border: none; }

+ 1 - 1
cfc-frontend/pages/assessment/execution.vue

@@ -346,7 +346,7 @@ export default {
 }
 
 .status-icon.completed {
-  background: linear-gradient(135deg, $mat-green-100, #a5d6a7);
+  background: linear-gradient(135deg, $mat-green-100, $mat-green-soft);
 }
 
 .status-icon.completed .icon-circle {

+ 1 - 1
cfc-frontend/pages/child/tasks.vue

@@ -571,7 +571,7 @@ export default {
 
 .task-card--completed .task-icon {
   background: linear-gradient(145deg, $status-success-tint-2, $status-success-soft-2);
-  border-color: #BBF7D0;
+  border-color: $tint-green-line;
 }
 
 .task-card--overdue .task-icon {

+ 1 - 1
cfc-frontend/pages/cognitive-test/spatial-test.vue

@@ -436,7 +436,7 @@ export default {
   color: $status-success-light-3;
 }
 .feedback-wrong {
-  color: #F87171;
+  color: $status-danger-light;
 }
 .feedback-timeout {
   color: rgba(255, 255, 255, 0.5);

+ 1 - 1
cfc-frontend/pages/diet/index.vue

@@ -405,7 +405,7 @@ export default {
 /* ===== 页面令牌(暖灶·家的味道) ===== */
 .diet-page {
   min-height: 100vh;
-  background: linear-gradient(180deg, $uni-primary-pale 0%, #FFF3E6 100%);
+  background: linear-gradient(180deg, $uni-primary-pale 0%, $warm-cream 100%);
   overflow: hidden;
 }
 .dining-hero {

+ 1 - 1
cfc-frontend/pages/diet/meal-config.vue

@@ -249,7 +249,7 @@ export default {
 .meal-icon-wrap { width: 72rpx; height: 72rpx; border-radius: 22rpx; display: flex; align-items: center; justify-content: center; margin-right: 16rpx; }
 .meal-icon-breakfast { background: linear-gradient(135deg, $status-info-light, $tint-sky-line); }
 .meal-icon-lunch     { background: linear-gradient(135deg, $status-warning, $accent-amber-light); }
-.meal-icon-dinner    { background: linear-gradient(135deg, #A78BFA, #C4B5FD); }
+.meal-icon-dinner    { background: linear-gradient(135deg, $facade-violet-light, #C4B5FD); }
 .meal-count { font-size: 24rpx; color: $brand-primary; margin-left: auto; }
 .meal-name {
   font-size: 28rpx;

+ 1 - 1
cfc-frontend/pages/diet/recommendation.vue

@@ -342,7 +342,7 @@ export default {
 .meal-icon-wrap { width: 64rpx; height: 64rpx; border-radius: 20rpx; display: flex; align-items: center; justify-content: center; margin-right: 16rpx; }
 .meal-icon-breakfast { background: linear-gradient(135deg, $dim-body-light, #FFD48A); }
 .meal-icon-lunch     { background: linear-gradient(135deg, $status-warning, $accent-amber-light); }
-.meal-icon-dinner    { background: linear-gradient(135deg, #A78BFA, #C4B5FD); }
+.meal-icon-dinner    { background: linear-gradient(135deg, $facade-violet-light, #C4B5FD); }
 .meal-icon {
   font-size: 36rpx;
   margin-right: 12rpx;

+ 1 - 1
cfc-frontend/pages/diet/records.vue

@@ -478,7 +478,7 @@ export default {
 .meal-badge { padding: 6rpx 18rpx; border-radius: 20rpx; font-size: 24rpx; font-weight: 600; }
 .meal-breakfast { background: $fortune-1-tint; color: $mat-orange-strong; }
 .meal-lunch     { background: $mat-amber-tint; color: $mat-orange-700; }
-.meal-dinner    { background: #F3E5F5; color: #7B1FA2; }
+.meal-dinner    { background: $fortune-3-tint; color: $fortune-3-ink; }
 .meal-snack     { background: $mat-green-tint; color: $mat-green-strong; }
 .record-meta { display: flex; align-items: center; gap: 12rpx; }
 .record-time { font-size: 24rpx; color: $facade-text-muted; }

+ 1 - 1
cfc-frontend/pages/discover-detail/product-detail/product-detail.vue

@@ -803,7 +803,7 @@ export default {
   margin-top: 12rpx;
   padding: 6rpx 16rpx;
   font-size: 22rpx;
-  color: #b8860b;
+  color: $hint-gold-ink;
   background: $brand-primary-tint-2;
   border: 1rpx solid #f0d9a8;
   border-radius: 8rpx;

+ 1 - 1
cfc-frontend/pages/discover/create-circle.vue

@@ -166,7 +166,7 @@ export default {
   display: flex; align-items: center; padding: 20rpx;
   background: $facade-fill-ghost; border-radius: 12rpx; border: 2rpx solid transparent;
 }
-.join-active { border-color: $dim-body; background: #FFF8F0; }
+.join-active { border-color: $dim-body; background: $dim-body-tint; }
 .jo-icon { font-size: 36rpx; margin-right: 16rpx; }
 .jo-label { font-size: 26rpx; font-weight: 600; color: $facade-text-strong; margin-right: 16rpx; }
 .jo-desc { font-size: 22rpx; color: $facade-text-muted; }

+ 1 - 1
cfc-frontend/pages/family/manual-score-entry.vue

@@ -119,7 +119,7 @@ export default {
 .mse-member-role { font-size: 20rpx; padding: 2rpx 10rpx; border-radius: 10rpx; display: inline-block }
 .role-parent { background: $uni-primary-pale; color: $mat-orange-strong }
 .role-child { background: $mat-green-tint; color: $mat-green-strong }
-.role-teacher { background: $accent-indigo-tint; color: #3730A3 }
+.role-teacher { background: $accent-indigo-tint; color: $dim-wisdom-ink }
 .mse-member-check { margin-top: 8rpx; font-size: 24rpx; color: $brand-primary }
 .mse-slider-item { margin-bottom: 28rpx }
 .mse-slider-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8rpx }

+ 1 - 1
cfc-frontend/pages/family/mbti-entry.vue

@@ -88,7 +88,7 @@ export default {
 .mbe-member-role { font-size: 20rpx; padding: 2rpx 10rpx; border-radius: 10rpx; display: inline-block }
 .role-parent { background: $uni-primary-pale; color: $mat-orange-strong }
 .role-child { background: $mat-green-tint; color: $mat-green-strong }
-.role-teacher { background: $accent-indigo-tint; color: #3730A3 }
+.role-teacher { background: $accent-indigo-tint; color: $dim-wisdom-ink }
 .mbe-member-check { margin-top: 8rpx; font-size: 24rpx; color: $dim-wisdom }
 .mbe-footer { position: fixed; bottom: 0; left: 0; right: 0; padding: 20rpx 30rpx; background: $app-surface; border-top: 1rpx solid $facade-fill; box-sizing: border-box }
 .mbe-btn { width: 100%; height: 88rpx; line-height: 88rpx; font-size: 30rpx; border-radius: 44rpx; border: none; text-align: center }

+ 1 - 1
cfc-frontend/pages/family/self-check-ai.vue

@@ -318,7 +318,7 @@ export default {
 }
 .sc-rationale-text {
   font-size: 24rpx;
-  color: #4F46E5;
+  color: $dim-wisdom-deep;
   flex: 1;
   line-height: 1.6;
 }

+ 1 - 1
cfc-frontend/pages/growth/caution-detail.vue

@@ -240,7 +240,7 @@ export default {
 <style scoped lang="scss">
 .page {
   min-height: 100vh;
-  background: #f5f6fa;
+  background: $app-bg-2;
 }
 .nav-placeholder { width: 80rpx; }
 

+ 1 - 1
cfc-frontend/pages/growth/create.vue

@@ -279,7 +279,7 @@ export default {
 }
 .source-active {
   border-color: $accent-indigo;
-  background: #f5f3ff;
+  background: $facade-violet-tint-2;
 }
 .source-icon {
   font-size: 48rpx;

+ 4 - 4
cfc-frontend/pages/growth/detail.vue

@@ -383,7 +383,7 @@ export default {
   gap: 16rpx;
 }
 .score-item {
-  background: #f5f3ff;
+  background: $facade-violet-tint-2;
   border-radius: 12rpx;
   padding: 16rpx 20rpx;
   min-width: 140rpx;
@@ -410,7 +410,7 @@ export default {
   width: 100%;
   height: 60rpx;
   line-height: 60rpx;
-  background: #f0f0ff;
+  background: $dim-wisdom-tint;
   color: $accent-indigo;
   border-radius: 10rpx;
   font-size: 26rpx;
@@ -418,7 +418,7 @@ export default {
   margin-top: 20rpx;
 }
 .supplement-card {
-  background: #f9f9ff;
+  background: $dim-wisdom-tint-5;
   border-radius: 12rpx;
   padding: 20rpx;
   margin-bottom: 12rpx;
@@ -437,7 +437,7 @@ export default {
 .supplement-source {
   font-size: 22rpx;
   color: $accent-indigo;
-  background: #f0f0ff;
+  background: $dim-wisdom-tint;
   padding: 2rpx 10rpx;
   border-radius: 8rpx;
 }

+ 1 - 1
cfc-frontend/pages/growth/supplement.vue

@@ -273,7 +273,7 @@ export default {
   opacity: 0.5;
 }
 .preview-card {
-  background: #f9f9ff;
+  background: $dim-wisdom-tint-5;
   border-radius: 12rpx;
   padding: 24rpx;
   margin-bottom: 30rpx;

+ 1 - 1
cfc-frontend/pages/growth/upload.vue

@@ -389,7 +389,7 @@ export default {
   opacity: 0.5;
 }
 .preview-card {
-  background: #f9f9ff;
+  background: $dim-wisdom-tint-5;
   border-radius: 12rpx;
   padding: 24rpx;
   margin-bottom: 30rpx;

+ 1 - 1
cfc-frontend/pages/health/components/ComprehensiveSurvey.vue

@@ -1078,7 +1078,7 @@ export default {
 
 <style scoped lang="scss">
 // ===== 问卷页专属色阶(单页专用,同值全局令牌已在其它页复用;约定见 uni.scss §14)=====
-$c-survey-warm:      #FFF3E6; // 浅橙底(输入区 / 选中态)
+$c-survey-warm:      $warm-cream; // 浅橙底(输入区 / 选中态)
 $c-survey-warm-soft: #FFE6D2; // 浅橙描边·最浅档
 $c-survey-warm-line: #FFD4B8; // 浅橙描边·副档(虚线 / 主描边)
 $c-survey-ink:       #4A3728; // 深棕主文字(标题 / 输入值)

+ 1 - 1
cfc-frontend/pages/health/doa-index.vue

@@ -146,7 +146,7 @@ export default {
 .domain-health { border-color: $dim-body !important; color: $brand-primary-deep !important; }
 .domain-wealth { border-color: $dim-wealth !important; color: $status-warning-strong-2 !important; }
 .domain-family { border-color: $status-success !important; color: $status-success-deep-2 !important; }
-.domain-social { border-color: $dim-wisdom !important; color: #4338CA !important; }
+.domain-social { border-color: $dim-wisdom !important; color: $accent-indigo-ink !important; }
 .domain-help { border-color: $dim-mind !important; color: #BE185D !important; }
 .week-progress { margin-top: 12rpx; }
 .week-text { font-size: 22rpx; color: $status-success; font-weight: 600; }

+ 2 - 2
cfc-frontend/pages/health/doa-stage-detail.vue

@@ -180,7 +180,7 @@ export default {
 .domain-health { border-color: $dim-body !important; color: $brand-primary-deep !important; }
 .domain-wealth { border-color: $dim-wealth !important; color: $status-warning-strong-2 !important; }
 .domain-family { border-color: $status-success !important; color: $status-success-deep-2 !important; }
-.domain-social { border-color: $dim-wisdom !important; color: #4338CA !important; }
+.domain-social { border-color: $dim-wisdom !important; color: $accent-indigo-ink !important; }
 .domain-help { border-color: $dim-mind !important; color: #BE185D !important; }
 .goal-content { font-size: 26rpx; color: $facade-text-slate-700; flex: 1; }
 .week-card { background: $facade-fill-slate-50; border-radius: 12rpx; padding: 20rpx; margin-bottom: 12rpx; }
@@ -189,7 +189,7 @@ export default {
 .week-dates { font-size: 20rpx; color: $app-text-subtle; margin-right: 12rpx; }
 .week-status { font-size: 20rpx; padding: 4rpx 12rpx; border-radius: 20rpx; }
 .ws-pending { background: $facade-fill-slate; color: $uni-text-color-secondary; }
-.ws-planned { background: $status-info-soft; color: #1D4ED8; }
+.ws-planned { background: $status-info-soft; color: $status-info-deep-3; }
 .ws-reviewed { background: $status-success-soft-2; color: $status-success-strong-2; }
 .week-body { margin-top: 16rpx; border-top: 2rpx solid $uni-border-color-light; padding-top: 16rpx; }
 .week-block { margin-bottom: 16rpx; }

+ 2 - 2
cfc-frontend/pages/health/gut-flora-foods-detail.vue

@@ -446,7 +446,7 @@ methods: {
 .food-card.band-neg3, .food-card.band-neg2 { border-left-color: $status-danger-strong-2; }
 .food-card.band-neg1, .food-card.band-neg0 { border-left-color: $mat-orange-700; }
 .food-card.band-pos0, .food-card.band-pos1 { border-left-color: #AFB42B; }
-.food-card.band-pos2, .food-card.band-pos3 { border-left-color: #43A047; }
+.food-card.band-pos2, .food-card.band-pos3 { border-left-color: $mat-green-base-2; }
 .food-card.band-null { border-left-color: $facade-text-ghost; }
 
 .food-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8rpx; }
@@ -485,7 +485,7 @@ methods: {
 .score-bar-wrap { display: flex; align-items: center; gap: 12rpx; margin-bottom: 10rpx; }
 .score-bar-bg { flex: 1; height: 12rpx; background: $status-danger-soft; border-radius: 6rpx; overflow: hidden; }
 .score-bar-fill { height: 100%; border-radius: 6rpx; transition: width 0.3s ease; }
-.score-bar-fill.safe   { background: #43A047; }
+.score-bar-fill.safe   { background: $mat-green-base-2; }
 .score-bar-fill.mild   { background: #AFB42B; }
 .score-bar-fill.warn   { background: $mat-orange-700; }
 .score-bar-fill.danger { background: $status-danger-strong-2; }

+ 1 - 1
cfc-frontend/pages/health/gut-flora-risks-detail.vue

@@ -332,7 +332,7 @@ export default {
 </script>
 
 <style scoped lang="scss">
-.page { min-height: 100vh; background: #f5f6fa; }
+.page { min-height: 100vh; background: $app-bg-2; }
 .nav-edit { font-size: calc(28rpx * var(--font-scale, 1)); color: $brand-primary; padding: 10rpx 30rpx; text-align: right; display: block; }
 
 /* ===== 头部摘要 ===== */

+ 1 - 1
cfc-frontend/pages/health/health-survey.vue

@@ -307,7 +307,7 @@ export default {
 </script>
 
 <style lang="scss">
-.survey-page { min-height: 100vh; background: linear-gradient(180deg, $uni-primary-pale, #FFF3E6); }
+.survey-page { min-height: 100vh; background: linear-gradient(180deg, $uni-primary-pale, $warm-cream); }
 .loading-state { padding: 200rpx 0; text-align: center; }
 .loading-text { font-size: 28rpx; color: #B08968; }
 </style>

+ 2 - 2
cfc-frontend/pages/health/indicator-curve.vue

@@ -329,7 +329,7 @@ export default {
   padding: 10rpx 24rpx;
   margin-right: 16rpx;
   border-radius: 32rpx;
-  background-color: #EDF2F7;
+  background-color: $uni-bg-color-grey;
   font-size: 24rpx;
   color: $uni-text-color-secondary;
 }
@@ -392,7 +392,7 @@ export default {
   border-radius: 24rpx;
   font-size: 24rpx;
   color: $uni-text-color-secondary;
-  background-color: #EDF2F7;
+  background-color: $uni-bg-color-grey;
 }
 
 .sort-active {

+ 1 - 1
cfc-frontend/pages/health/my-feedback.vue

@@ -94,7 +94,7 @@ export default {
 <style scoped lang="scss">
 .mf-page {
   min-height: 100vh;
-  background: #F7F8FA;
+  background: $app-surface-subtle;
   padding: 20rpx;
   box-sizing: border-box;
 }

+ 4 - 4
cfc-frontend/pages/health/report-survey.vue

@@ -778,7 +778,7 @@ export default {
 }
 .progress-fill {
   height: 100%;
-  background: linear-gradient(90deg, #66BB6A, #43A047);
+  background: linear-gradient(90deg, $mat-green-light-2, $mat-green-base-2);
   border-radius: 3rpx;
   transition: width 0.3s;
 }
@@ -821,7 +821,7 @@ export default {
 }
 .q-number {
   font-size: 20rpx;
-  color: #66BB6A;
+  color: $mat-green-light-2;
   font-weight: bold;
   display: block;
   margin-bottom: 8rpx;
@@ -853,7 +853,7 @@ export default {
 }
 .q-selected {
   background: $mat-green-tint;
-  border-color: #66BB6A;
+  border-color: $mat-green-light-2;
 }
 .q-option:active { opacity: 0.7; }
 .q-icon { font-size: 32rpx; flex-shrink: 0; }
@@ -912,7 +912,7 @@ export default {
 }
 
 .submit-btn {
-  background: linear-gradient(135deg, #43A047, $mat-green-strong);
+  background: linear-gradient(135deg, $mat-green-base-2, $mat-green-strong);
   color: $app-surface;
   font-size: 30rpx;
   font-weight: bold;

+ 1 - 1
cfc-frontend/pages/health/report-upload.vue

@@ -732,7 +732,7 @@ if (options.type === 'a2' || options.reportKind === 'a2') {
 
 /* 责任声明 */
 .disclaimer-box {
-  background: #FFF8F0;
+  background: $dim-body-tint;
   border: 2rpx solid $status-warning-light;
 }
 .disclaimer-check {

+ 1 - 1
cfc-frontend/pages/membership/upgrade.vue

@@ -355,7 +355,7 @@ export default {
   color: $app-surface;
 }
 .badge-lifetime {
-  background: linear-gradient(135deg, $facade-violet 0%, #A855F7 100%);
+  background: linear-gradient(135deg, $facade-violet 0%, $facade-violet-light-2 100%);
   color: $app-surface;
 }
 .badge-icon {

+ 1 - 1
cfc-frontend/pages/mind-detail/emotion-trend.vue

@@ -558,7 +558,7 @@ $c-et-heat-1: $flat-danger-line; // 热力档 1(最浅红,与 $flat-danger-l
 $c-et-heat-2: #FFB0B0; // 热力档 2(浅红)
 $c-et-heat-3: #FFD9A0; // 热力档 3(浅橙)
 $c-et-heat-4: $mat-green-100; // 热力档 4(浅绿)
-$c-et-heat-5: #81C784; // 热力档 5(中绿)
+$c-et-heat-5: $mat-green-light; // 热力档 5(中绿)
 $c-canvas-bg: #FCFCFC; // 画布近白
 
 .legend-step-1 { background: $c-et-heat-1; }

+ 2 - 2
cfc-frontend/pages/parent/wishes/index.vue

@@ -379,7 +379,7 @@ export default {
 .wish-child {
   font-size: 24rpx;
   color: $brand-primary;
-  background: #FFF5F5;
+  background: $status-danger-tint;
   padding: 4rpx 12rpx;
   border-radius: 10rpx;
   margin-right: 10rpx;
@@ -430,7 +430,7 @@ export default {
 .wish-status.pending_exchange { background: $status-warning-soft; color: $status-warning-deep; }
 .wish-status.approved { background: $status-info-soft; color: $status-info-deep; }
 .wish-status.exchanging { background: $status-info-soft; color: $status-info-deep; }
-.wish-status.fulfilled { background: $violet-tint-100; color: #7C3AED; }
+.wish-status.fulfilled { background: $violet-tint-100; color: $facade-violet-deep; }
 
 .wish-actions {
   display: flex;

+ 1 - 1
cfc-frontend/pages/profile-extra/coupons.vue

@@ -447,7 +447,7 @@ export default {
 }
 
 .card-status-badge.status-expired {
-  background: #fff1f0;
+  background: $status-danger-tint-3;
   color: $status-danger-2;
 }
 

+ 1 - 1
cfc-frontend/pages/profile-extra/family-members.vue

@@ -788,7 +788,7 @@ $c-fam-line:         #F0EAE2; // 暖分隔线
 $c-fam-tint:         #FFF1E8; // 浅橙底
 $c-fam-violet-text:  $violet-700; // 紫罗兰文字
 $c-fam-violet-bg:    $violet-tint-100; // 紫罗兰底
-$c-fam-violet-line:  #C7D2FE; // 紫罗兰深底(亲密条)
+$c-fam-violet-line:  $tint-indigo-line; // 紫罗兰深底(亲密条)
 $c-elm-info-bg:      $tint-sky-soft; // Element UI 信息浅底
 $c-elm-info-bg-2:    #EEF0FF; // Element UI 蓝浅底
 $c-elm-success-bg:   #f0f9eb; // Element UI 成功浅底

+ 1 - 1
cfc-frontend/pages/profile-extra/gates.vue

@@ -232,7 +232,7 @@ export default {
   padding: 2rpx 10rpx;
   border-radius: 12rpx;
 }
-.reward-points { color: #B8860B; background: rgba(255,215,0,0.15); }
+.reward-points { color: $hint-gold-ink; background: rgba(255,215,0,0.15); }
 .reward-energy { color: $uni-info; background: rgba(14,165,233,0.15); }
 .gate-action {
   flex-shrink: 0;

+ 1 - 1
cfc-frontend/pages/profile/report-detail.vue

@@ -171,7 +171,7 @@ var res = await getReferralCode()
 
 .badge-gut_flora { background: $mat-green-tint; color: $mat-green-strong; }
 .badge-physical_exam { background: $mat-blue-tint; color: $mat-blue-strong; }
-.badge-dan { background: #F3E5F5; color: #7B1FA2; }
+.badge-dan { background: $fortune-3-tint; color: $fortune-3-ink; }
 .badge-insurance { background: $fortune-1-tint; color: $mat-orange-strong; }
 .badge-fortune { background: #FCE4EC; color: $status-danger-strong-2; }
 

+ 1 - 1
cfc-frontend/pages/profile/report-management.vue

@@ -219,7 +219,7 @@ export default {
 
 .badge-gut_flora { background: $mat-green-tint; color: $mat-green-strong; }
 .badge-physical_exam { background: $mat-blue-tint; color: $mat-blue-strong; }
-.badge-dan { background: #F3E5F5; color: #7B1FA2; }
+.badge-dan { background: $fortune-3-tint; color: $fortune-3-ink; }
 .badge-insurance { background: $fortune-1-tint; color: $mat-orange-strong; }
 .badge-fortune { background: #FCE4EC; color: $status-danger-strong-2; }
 

+ 3 - 3
cfc-frontend/pages/profile/service-role-apply.vue

@@ -773,15 +773,15 @@ export default {
   color: $facade-text-gray-400;
 }
 .multi-role-hint {
-  background: linear-gradient(135deg, #EFF6FF, $status-info-soft);
-  border: 2rpx solid #BFDBFE;
+  background: linear-gradient(135deg, $status-info-tint, $status-info-soft);
+  border: 2rpx solid $tint-blue-line;
   border-radius: 12rpx;
   padding: 18rpx 24rpx;
   margin-bottom: 20rpx;
 }
 .multi-role-hint text {
   font-size: 26rpx;
-  color: #1D4ED8;
+  color: $status-info-deep-3;
 }
 .btn-add-role {
   background: linear-gradient(135deg, $dim-wisdom, $dim-wisdom-light);

+ 1 - 1
cfc-frontend/pages/promotion/index.vue

@@ -973,7 +973,7 @@ export default {
 .icon-withdraw { background: $status-info-soft; }
 .icon-invite { background: $status-success-soft; }
 .icon-share { background: $tint-sky-tint; }
-.icon-team { background: #FCE7F3; }
+.icon-team { background: $accent-pink-tint; }
 .icon-leaderboard { background: #FFF3CD; }
 .icon-records { background: $violet-tint-100; }
 .menu-icon-text {

+ 1 - 1
cfc-frontend/pages/psych-assessment/index.vue

@@ -463,7 +463,7 @@ export default {
 
 .score-badge-severe {
   background: rgba(124,58,237,0.1);
-  color: #7C3AED;
+  color: $facade-violet-deep;
 }
 
 .score-row {

+ 2 - 2
cfc-frontend/pages/share/index.vue

@@ -76,7 +76,7 @@ export default {
 .sp-title {
   font-size: 36rpx;
   font-weight: 700;
-  color: #065F46;
+  color: $status-success-strong;
 }
 .sp-body {
   background: $app-surface;
@@ -123,7 +123,7 @@ export default {
 }
 .sp-slogan {
   font-size: 28rpx;
-  color: #065F46;
+  color: $status-success-strong;
   font-weight: 600;
 }
 .sp-qr {

+ 1 - 1
cfc-frontend/pages/shop/cart/cart.vue

@@ -812,7 +812,7 @@ export default {
   align-items: center;
   padding: 20rpx 30rpx;
   background: $status-success-tint-2;
-  border-top: 2rpx solid #BBF7D0;
+  border-top: 2rpx solid $tint-green-line;
 }
 .gift-granted-icon {
   font-size: 32rpx;

+ 1 - 1
cfc-frontend/pages/shop/checkout/checkout.vue

@@ -1874,7 +1874,7 @@ showOnlineSlotPicker: function() {
 .gift-granted-section {
   background: $status-success-tint-2;
   border-radius: 16rpx;
-  border: 2rpx solid #BBF7D0;
+  border: 2rpx solid $tint-green-line;
 }
 .gift-granted-row {
   display: flex;

+ 3 - 3
cfc-frontend/pages/shop/index/index.vue

@@ -546,12 +546,12 @@ export default {
 .login-hint-bar {
   text-align: center;
   padding: 20rpx;
-  background: #fef9e7;
-  border-top: 1rpx solid #f0e6c0;
+  background: $hint-cream-bg;
+  border-top: 1rpx solid $hint-cream-border;
 }
 .login-hint-text {
   font-size: 24rpx;
-  color: #b8860b;
+  color: $hint-gold-ink;
 }
 .bottom-spacer {
   height: 120rpx;

+ 2 - 2
cfc-frontend/pages/shop/logistics/logistics.vue

@@ -184,7 +184,7 @@ export default {
 }
 .status-pending {
   background: $brand-primary-tint-2;
-  color: #fa8c16;
+  color: $brand-primary-2;
 }
 .status-shipped {
   background: $status-info-tint-3;
@@ -193,7 +193,7 @@ export default {
 .status-pending_receipt,
 .status-signing {
   background: $brand-primary-tint-2;
-  color: #fa8c16;
+  color: $brand-primary-2;
 }
 .status-completed {
   background: $status-success-tint-3;

+ 1 - 1
cfc-frontend/pages/shop/order-detail/order-detail.vue

@@ -413,7 +413,7 @@ export default {
 .order-status-section .status-refunding { background: linear-gradient(135deg, $status-warning-deep, $status-warning); }
 .order-status-section .status-refunded { background: linear-gradient(135deg, $facade-text-slate, $facade-text-gray-400); }
 .order-status-section .status-cancelled { background: linear-gradient(135deg, $facade-text-slate, $facade-text-gray-400); }
-.order-status-section .status-refund-rejected { background: linear-gradient(135deg, $status-danger-deep, #F87171); }
+.order-status-section .status-refund-rejected { background: linear-gradient(135deg, $status-danger-deep, $status-danger-light); }
 .order-status-section .status-pending_receipt { background: linear-gradient(135deg, $status-info-deep-2, $status-info-light); }
 .order-status-section .status-confirmed_by_vendor { background: linear-gradient(135deg, $status-info-deep-2, $status-info-light); }
 .order-status-section .status-received_by_user { background: linear-gradient(135deg, $status-success-strong-2, #4ADE80); }

+ 1 - 1
cfc-frontend/pages/shop/order-list/order-list.vue

@@ -567,7 +567,7 @@ export default {
   font-size: 20rpx;
 }
 .type-activity { background: $brand-primary-tint-2; color: $brand-primary; }
-.type-course { background: $violet-tint-100; color: #7C3AED; }
+.type-course { background: $violet-tint-100; color: $facade-violet-deep; }
 .type-physical { background: $tint-sky-tint; color: $status-info-deep-2; }
 .type-digital { background: $status-success-tint-2; color: $status-success-strong-2; }
 .type-service { background: $status-warning-soft; color: $status-warning-deep; }

+ 1 - 1
cfc-frontend/pages/stats/index.vue

@@ -291,7 +291,7 @@ export default {
 .stat-chip.pending { background: $status-warning-soft; }
 .stat-chip.review { background: $status-info-soft; }
 .stat-chip.done { background: $status-success-soft; }
-.stat-chip.game { background: #f3e8ff; }
+.stat-chip.game { background: $tint-purple-soft; }
 .chip-num {
   display: block;
   font-size: 32rpx;

+ 1 - 1
cfc-frontend/pages/vendor/center.vue

@@ -172,7 +172,7 @@ export default {
   color: $facade-text-slate;
 }
 .status-badge.badge-planner { background: $status-success-tint; color: $status-success-deep; }
-.status-badge.badge-activity_provider { background: #EFF6FF; color: $status-info-deep; }
+.status-badge.badge-activity_provider { background: $status-info-tint; color: $status-info-deep; }
 .status-badge.badge-product_supplier { background: $uni-primary-pale; color: $brand-primary-dark; }
 
 /* 信息卡片 */

+ 1 - 1
cfc-frontend/pages/vendor/orders/orders.vue

@@ -238,7 +238,7 @@ export default {
   padding: 4rpx 16rpx;
   border-radius: 20rpx;
 }
-.status-pending { background: $brand-primary-tint-2; color: #fa8c16; }
+.status-pending { background: $brand-primary-tint-2; color: $brand-primary-2; }
 .status-paid { background: $status-info-tint-3; color: $status-info-3; }
 .status-completed { background: $status-success-tint-3; color: $status-success-3; }
 .order-body {

+ 1 - 1
cfc-frontend/pages/vendor/products/products.vue

@@ -272,7 +272,7 @@ export default {
   border-radius: 20rpx;
 }
 .status-draft { background: $facade-fill-2; color: $facade-text-muted; }
-.status-pending { background: $brand-primary-tint-2; color: #fa8c16; }
+.status-pending { background: $brand-primary-tint-2; color: $brand-primary-2; }
 .status-approved { background: $status-success-tint-3; color: $status-success-3; }
 .status-rejected { background: #fff2f0; color: $status-danger-2; }
 .status-on_shelf { background: $status-info-tint-3; color: $status-info-3; }

+ 1 - 1
cfc-frontend/pages/wishes/create.vue

@@ -182,7 +182,7 @@ export default {
 .form-tip {
   display: flex;
   align-items: center;
-  background: #FFF5F5;
+  background: $status-danger-tint;
   padding: 20rpx;
   border-radius: 15rpx;
   margin-top: 20rpx;

+ 1 - 1
cfc-frontend/pages/wishes/detail.vue

@@ -257,7 +257,7 @@ export default {
 .wish-status.active { background: $status-success-soft; color: $status-success-deep; }
 .wish-status.pending_exchange { background: $status-warning-soft; color: $status-warning-deep; }
 .wish-status.exchanging { background: $status-info-soft; color: $status-info-deep; }
-.wish-status.fulfilled { background: $violet-tint-100; color: #7C3AED; }
+.wish-status.fulfilled { background: $violet-tint-100; color: $facade-violet-deep; }
 
 .category-tag {
   font-size: 24rpx;

+ 2 - 2
cfc-frontend/pages/wishes/index.vue

@@ -618,7 +618,7 @@ export default {
   padding: 32rpx 36rpx 28rpx;
   border-radius: 32rpx;
   border: 4rpx solid var(--border, $uni-border-color);
-  background: linear-gradient(145deg, $app-surface, var(--bg-grey, #EDF2F7));
+  background: linear-gradient(145deg, $app-surface, var(--bg-grey, $uni-bg-color-grey));
   box-shadow:
     inset -4rpx -4rpx 12rpx rgba(249,115,22,0.05),
     6rpx 6rpx 18rpx rgba(249,115,22,0.10);
@@ -1019,7 +1019,7 @@ export default {
 }
 
 .emoji-item--active {
-  background: linear-gradient(145deg, $app-surface, var(--bg-grey, #EDF2F7));
+  background: linear-gradient(145deg, $app-surface, var(--bg-grey, $uni-bg-color-grey));
   border-color: var(--color-primary, $brand-primary);
   box-shadow: 0 4rpx 12rpx rgba(249,115,22,0.15);
 }

+ 73 - 0
cfc-frontend/scripts/d36-round8-rules.js

@@ -0,0 +1,73 @@
+#!/usr/bin/env node
+/**
+ * D36: 第八轮令牌收割(仅登记 uni.scss 已有等值令牌的残留 hex)
+ * 排除 8 位带 alpha 的 hex(如 #F9731622),避免丢失透明度
+ */
+const fs = require('fs');
+const path = require('path');
+
+function norm(h) {
+  const x = h.toUpperCase();
+  const body = x.slice(1);
+  if (body.length === 3) return '#' + body.split('').map(c => c + c).join('');
+  return x;
+}
+
+const scss = fs.readFileSync('uni.scss', 'utf8');
+const byHex = {};
+for (const line of scss.split(/\r?\n/)) {
+  const m = line.match(/^\s*(\$[\w-]+)\s*:\s*(#[0-9a-fA-F]{3,8})\s*;/);
+  if (m) {
+    const k = norm(m[2]);
+    (byHex[k] = byHex[k] || []).push(m[1]);
+  }
+}
+
+const RULES_FILE = 'scripts/replace-hex-to-token.js';
+let ruleSrc = fs.readFileSync(RULES_FILE, 'utf8');
+const ruleUpper = ruleSrc.toUpperCase();
+
+const HEX = /#[0-9a-fA-F]{3,8}\b/g;
+const counts = new Map();
+function walk(d) {
+  for (const n of fs.readdirSync(d)) {
+    if (['node_modules', 'dist', 'unpackage', '.git', 'scripts', '.tmp_equiv'].includes(n)) continue;
+    const p = path.join(d, n);
+    const st = fs.statSync(p);
+    if (st.isDirectory()) walk(p);
+    else if (n.endsWith('.vue')) {
+      const s = fs.readFileSync(p, 'utf8');
+      const si = s.search(/<style/);
+      if (si === -1) continue;
+      (s.slice(si).match(HEX) || []).forEach(h => counts.set(h.toUpperCase(), (counts.get(h.toUpperCase()) || 0) + 1));
+    }
+  }
+}
+walk('.');
+
+const pairs = [];
+for (const [hex, cnt] of counts) {
+  if (hex.slice(1).length === 8) continue;            // 带 alpha,跳过
+  const tokens = byHex[norm(hex)];
+  if (!tokens) continue;
+  if (ruleUpper.includes("'" + hex + "'")) continue;   // 已登记
+  pairs.push({ hex, token: tokens[0], cnt });
+}
+pairs.sort((a, b) => b.cnt - a.cnt);
+
+if (!pairs.length) {
+  console.log('无新增可映射 hex');
+  process.exit(0);
+}
+
+const lines = pairs.map(p =>
+  "  ['" + p.hex + "', '" + p.token + "'],\n  ['" + p.hex.toLowerCase() + "', '" + p.token + "'],"
+).join('\n');
+
+ruleSrc = ruleSrc.replace(
+  /\n\]\.sort\(\(a, b\) => b\[0\]\.length - a\[0\]\.length\)/,
+  '\n  // ---- 第八轮(uni.scss 已有令牌补登记,2026-10-21)----\n' + lines + '\n].sort((a, b) => b[0].length - a[0].length)'
+);
+fs.writeFileSync(RULES_FILE, ruleSrc);
+console.log('登记规则数:', pairs.length);
+console.log(pairs.map(p => p.hex + ' x' + p.cnt + ' -> ' + p.token).join('\n'));

+ 81 - 0
cfc-frontend/scripts/replace-hex-to-token.js

@@ -356,6 +356,87 @@ const ALL_RULES = [
   ['#d6eaf8', '$tint-sky-blue'],
   ['#FF4444', '$danger-bright'],
   ['#ff4444', '$danger-bright'],
+  // ---- 第八轮(uni.scss 已有令牌补登记,2026-10-21)----
+  ['#43A047', '$mat-green-base-2'],
+  ['#43a047', '$mat-green-base-2'],
+  ['#EDF2F7', '$uni-bg-color-grey'],
+  ['#edf2f7', '$uni-bg-color-grey'],
+  ['#7C3AED', '$facade-violet-deep'],
+  ['#7c3aed', '$facade-violet-deep'],
+  ['#FA8C16', '$brand-primary-2'],
+  ['#fa8c16', '$brand-primary-2'],
+  ['#065F46', '$status-success-strong'],
+  ['#065f46', '$status-success-strong'],
+  ['#BBF7D0', '$tint-green-line'],
+  ['#bbf7d0', '$tint-green-line'],
+  ['#FFF3E6', '$warm-cream'],
+  ['#fff3e6', '$warm-cream'],
+  ['#F3E5F5', '$fortune-3-tint'],
+  ['#f3e5f5', '$fortune-3-tint'],
+  ['#7B1FA2', '$fortune-3-ink'],
+  ['#7b1fa2', '$fortune-3-ink'],
+  ['#B8860B', '$hint-gold-ink'],
+  ['#b8860b', '$hint-gold-ink'],
+  ['#F9F9FF', '$dim-wisdom-tint-5'],
+  ['#f9f9ff', '$dim-wisdom-tint-5'],
+  ['#66BB6A', '$mat-green-light-2'],
+  ['#66bb6a', '$mat-green-light-2'],
+  ['#A5D6A7', '$mat-green-soft'],
+  ['#a5d6a7', '$mat-green-soft'],
+  ['#FFE4CC', '$tint-warm-edge'],
+  ['#ffe4cc', '$tint-warm-edge'],
+  ['#F87171', '$status-danger-light'],
+  ['#f87171', '$status-danger-light'],
+  ['#A78BFA', '$facade-violet-light'],
+  ['#a78bfa', '$facade-violet-light'],
+  ['#FFF8F0', '$dim-body-tint'],
+  ['#fff8f0', '$dim-body-tint'],
+  ['#3730A3', '$dim-wisdom-ink'],
+  ['#3730a3', '$dim-wisdom-ink'],
+  ['#F5F6FA', '$app-bg-2'],
+  ['#f5f6fa', '$app-bg-2'],
+  ['#F5F3FF', '$facade-violet-tint-2'],
+  ['#f5f3ff', '$facade-violet-tint-2'],
+  ['#F0F0FF', '$dim-wisdom-tint'],
+  ['#f0f0ff', '$dim-wisdom-tint'],
+  ['#4338CA', '$accent-indigo-ink'],
+  ['#4338ca', '$accent-indigo-ink'],
+  ['#1D4ED8', '$status-info-deep-3'],
+  ['#1d4ed8', '$status-info-deep-3'],
+  ['#FFF5F5', '$status-danger-tint'],
+  ['#fff5f5', '$status-danger-tint'],
+  ['#EFF6FF', '$status-info-tint'],
+  ['#eff6ff', '$status-info-tint'],
+  ['#F08A7A', '$uni-warm'],
+  ['#f08a7a', '$uni-warm'],
+  ['#FF8FB1', '$dim-mind-light-2'],
+  ['#ff8fb1', '$dim-mind-light-2'],
+  ['#A7F3D0', '$status-success-light'],
+  ['#a7f3d0', '$status-success-light'],
+  ['#444', '$facade-text-deep-2'],
+  ['#444', '$facade-text-deep-2'],
+  ['#4F46E5', '$dim-wisdom-deep'],
+  ['#4f46e5', '$dim-wisdom-deep'],
+  ['#F7F8FA', '$app-surface-subtle'],
+  ['#f7f8fa', '$app-surface-subtle'],
+  ['#A855F7', '$facade-violet-light-2'],
+  ['#a855f7', '$facade-violet-light-2'],
+  ['#81C784', '$mat-green-light'],
+  ['#81c784', '$mat-green-light'],
+  ['#BFDBFE', '$tint-blue-line'],
+  ['#bfdbfe', '$tint-blue-line'],
+  ['#FFF1F0', '$status-danger-tint-3'],
+  ['#fff1f0', '$status-danger-tint-3'],
+  ['#C7D2FE', '$tint-indigo-line'],
+  ['#c7d2fe', '$tint-indigo-line'],
+  ['#FCE7F3', '$accent-pink-tint'],
+  ['#fce7f3', '$accent-pink-tint'],
+  ['#FEF9E7', '$hint-cream-bg'],
+  ['#fef9e7', '$hint-cream-bg'],
+  ['#F0E6C0', '$hint-cream-border'],
+  ['#f0e6c0', '$hint-cream-border'],
+  ['#F3E8FF', '$tint-purple-soft'],
+  ['#f3e8ff', '$tint-purple-soft'],
 ].sort((a, b) => b[0].length - a[0].length)
 
 const GRAY_RULES   = ALL_RULES.filter(r => { const i = ALL_RULES.indexOf(r); return i < 30 })