From 260d17ee8b7f8a6d34a9d7379e6956bef376e963 Mon Sep 17 00:00:00 2001 From: sanbuphy Date: Tue, 24 Feb 2026 08:34:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E9=99=84=E5=BD=95=E4=BA=A4=E4=BA=92=E5=BC=8F=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=92=8C=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加浏览器前端组件:无障碍访问、国际化、实时通信 - 添加 Transformer 注意力机制系列组件 - 更新 Canvas、数据追踪等现有组件 - 修复 ESLint 变量名冲突问题 - 完善相关附录文档 --- .../browser-frontend/A11yScreenReaderDemo.vue | 246 ++ .../browser-frontend/AccessibilityDemo.vue | 309 ++ .../browser-frontend/I18nFormatDemo.vue | 303 ++ .../InternationalizationDemo.vue | 465 +++ .../appendix/browser-frontend/PollingDemo.vue | 249 ++ .../appendix/browser-frontend/SSEDemo.vue | 257 ++ .../browser-frontend/WebSocketDemo.vue | 308 ++ .../canvas-intro/AnimationLoopDemo.vue | 117 +- .../canvas-intro/CanvasBasicsDemo.vue | 69 +- .../canvas-intro/CoordinateSystemDemo.vue | 132 +- .../canvas-intro/EventHandlingDemo.vue | 84 +- .../canvas-intro/ParticleSystemDemo.vue | 116 +- .../appendix/canvas-intro/PerformanceDemo.vue | 88 +- .../appendix/data/ABTestingDemo.vue | 58 +- .../appendix/data/DataAnalysisDemo.vue | 37 +- .../appendix/data/DataModelsDemo.vue | 1404 +------- .../appendix/data/DataTrackingDemo.vue | 490 +++ .../AttentionDecompositionDemo.vue | 124 + .../MultiHeadAttentionDemo.vue | 34 + .../PositionalEncodingDemo.vue | 40 + .../QKVMechanismDemo.vue | 41 + .../RnnVsTransformerDemo.vue | 39 + .../SelfAttentionDemo.vue | 44 + .../TransformerArchitectureDemo.vue | 81 + .../TransformerQuickStartDemo.vue | 30 + .../web-basics/BrowserRenderingDemo.vue | 826 +---- .../appendix/web-basics/DnsLookupDemo.vue | 397 ++- .../appendix/web-basics/HttpExchangeDemo.vue | 576 +--- .../appendix/web-basics/TcpHandshakeDemo.vue | 604 ++-- .../appendix/web-basics/UrlParserDemo.vue | 433 +-- docs/.vitepress/theme/index.js | 31 + .../3-browser-and-frontend/a11n-i18n.md | 83 +- .../graphics-animation.md | 140 +- .../realtime-communication.md | 76 +- .../4-server-and-backend/client-languages.md | 142 +- .../4-server-and-backend/cross-platform.md | 96 +- docs/zh-cn/appendix/5-data/ab-testing.md | 2573 +-------------- docs/zh-cn/appendix/5-data/data-analysis.md | 2021 +----------- docs/zh-cn/appendix/5-data/data-models.md | 2924 +---------------- docs/zh-cn/appendix/5-data/data-tracking.md | 1108 +------ .../transformer-attention.md | 259 +- .../1.1-introduction-to-ai-ide/index.md | 9 + 42 files changed, 5290 insertions(+), 12173 deletions(-) create mode 100644 docs/.vitepress/theme/components/appendix/browser-frontend/A11yScreenReaderDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/browser-frontend/AccessibilityDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/browser-frontend/I18nFormatDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/browser-frontend/InternationalizationDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/browser-frontend/PollingDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/browser-frontend/SSEDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/browser-frontend/WebSocketDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/data/DataTrackingDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/transformer-attention/AttentionDecompositionDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/transformer-attention/MultiHeadAttentionDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/transformer-attention/PositionalEncodingDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/transformer-attention/QKVMechanismDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/transformer-attention/RnnVsTransformerDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/transformer-attention/SelfAttentionDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/transformer-attention/TransformerArchitectureDemo.vue create mode 100644 docs/.vitepress/theme/components/appendix/transformer-attention/TransformerQuickStartDemo.vue diff --git a/docs/.vitepress/theme/components/appendix/browser-frontend/A11yScreenReaderDemo.vue b/docs/.vitepress/theme/components/appendix/browser-frontend/A11yScreenReaderDemo.vue new file mode 100644 index 0000000..e8a5da9 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-frontend/A11yScreenReaderDemo.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/browser-frontend/AccessibilityDemo.vue b/docs/.vitepress/theme/components/appendix/browser-frontend/AccessibilityDemo.vue new file mode 100644 index 0000000..0a3b34b --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-frontend/AccessibilityDemo.vue @@ -0,0 +1,309 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/browser-frontend/I18nFormatDemo.vue b/docs/.vitepress/theme/components/appendix/browser-frontend/I18nFormatDemo.vue new file mode 100644 index 0000000..90eba5a --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-frontend/I18nFormatDemo.vue @@ -0,0 +1,303 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/browser-frontend/InternationalizationDemo.vue b/docs/.vitepress/theme/components/appendix/browser-frontend/InternationalizationDemo.vue new file mode 100644 index 0000000..15a7afa --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-frontend/InternationalizationDemo.vue @@ -0,0 +1,465 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/browser-frontend/PollingDemo.vue b/docs/.vitepress/theme/components/appendix/browser-frontend/PollingDemo.vue new file mode 100644 index 0000000..7398d04 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-frontend/PollingDemo.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/browser-frontend/SSEDemo.vue b/docs/.vitepress/theme/components/appendix/browser-frontend/SSEDemo.vue new file mode 100644 index 0000000..fe33417 --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-frontend/SSEDemo.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/browser-frontend/WebSocketDemo.vue b/docs/.vitepress/theme/components/appendix/browser-frontend/WebSocketDemo.vue new file mode 100644 index 0000000..679b08e --- /dev/null +++ b/docs/.vitepress/theme/components/appendix/browser-frontend/WebSocketDemo.vue @@ -0,0 +1,308 @@ + + + + + diff --git a/docs/.vitepress/theme/components/appendix/canvas-intro/AnimationLoopDemo.vue b/docs/.vitepress/theme/components/appendix/canvas-intro/AnimationLoopDemo.vue index f2db1dd..cf573ea 100644 --- a/docs/.vitepress/theme/components/appendix/canvas-intro/AnimationLoopDemo.vue +++ b/docs/.vitepress/theme/components/appendix/canvas-intro/AnimationLoopDemo.vue @@ -90,41 +90,11 @@ /> -
-

Animation Loop Code / 动画循环代码

-
{{ animationCode }}
-
+ -
-

Animation Principles / 动画原理

- -
+ -
-

- 💡 - 提示: - 动画的本质是快速连续绘制静态画面。Canvas 每秒可以绘制 60 - 帧(60FPS),形成流畅的动画效果。 -

-
+ @@ -565,11 +535,12 @@ onUnmounted(() => { display: flex; justify-content: center; margin: 1.5rem 0; - padding: 1.5rem; + padding: 1rem; background: var(--vp-c-bg); border-radius: 12px; border: 2px solid var(--vp-c-divider); box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.05); + overflow-x: auto; } canvas { @@ -577,83 +548,7 @@ canvas { border-radius: 6px; background: #ffffff; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); -} - -.code-display { - margin-top: 1.5rem; - padding: 1.25rem; - background: #1e293b; - border-radius: 12px; - overflow-x: auto; - border: 2px solid #334155; -} - -.code-display h4 { - color: #f8fafc; - margin: 0 0 0.75rem 0; - font-size: 0.875rem; - font-weight: 600; -} - -.code-display pre { - margin: 0; -} - -.code-display code { - color: #e2e8f0; - font-family: var(--vp-font-family-mono); - font-size: 0.75rem; - line-height: 1.7; -} - -.explanation { - margin: 1.5rem 0; - padding: 1.25rem; - background: var(--vp-c-bg); - border-radius: 6px; - border: 1px solid var(--vp-c-divider); -} - -.explanation h4 { - margin: 0 0 0.75rem 0; - color: var(--vp-c-text-1); - font-size: 0.875rem; - font-weight: 600; -} - -.explanation ul { - margin: 0; - padding-left: 1.25rem; -} - -.explanation li { - margin-bottom: 0.5rem; - color: var(--vp-c-text-2); - font-size: 0.875rem; - line-height: 1.6; -} - -.info-box { - margin-top: 1.5rem; - padding: 1rem 1.25rem; - background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); - border-radius: 12px; - border-left: 4px solid #f59e0b; - box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2); -} - -.info-box p { - margin: 0; - font-size: 0.875rem; - color: #92400e; - display: flex; - align-items: flex-start; - gap: 0.5rem; - line-height: 1.6; -} - -.info-box .icon { - font-size: 1.125rem; flex-shrink: 0; } + diff --git a/docs/.vitepress/theme/components/appendix/canvas-intro/CanvasBasicsDemo.vue b/docs/.vitepress/theme/components/appendix/canvas-intro/CanvasBasicsDemo.vue index 033c34e..df9a6e5 100644 --- a/docs/.vitepress/theme/components/appendix/canvas-intro/CanvasBasicsDemo.vue +++ b/docs/.vitepress/theme/components/appendix/canvas-intro/CanvasBasicsDemo.vue @@ -127,16 +127,10 @@ /> -
-

Code / 代码

-
{{ currentCode }}
-
+ -
- 💡 - 核心思想:Canvas 是一个位图画布,所有绘制都是像素操作。绘制后无法修改已有内容,只能覆盖或清除重绘。 -
+ @@ -433,75 +427,20 @@ onMounted(() => { display: flex; justify-content: center; margin: 1.5rem 0; - padding: 1.5rem; + padding: 1rem; background: var(--vp-c-bg); border-radius: 12px; border: 2px solid var(--vp-c-divider); box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.05); + overflow-x: auto; } canvas { border: 3px solid var(--vp-c-divider); border-radius: 6px; background: #ffffff; - max-width: 100%; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); -} - -.code-display { - margin-top: 1.5rem; - padding: 1.25rem; - background: #1e293b; - border-radius: 12px; - overflow-x: auto; - border: 2px solid #334155; -} - -.code-display h4 { - color: #f8fafc; - margin: 0 0 0.75rem 0; - font-size: 0.875rem; - font-weight: 600; -} - -.code-display pre { - margin: 0; -} - -.code-display code { - color: #e2e8f0; - font-family: var(--vp-font-family-mono); - font-size: 0.75rem; - line-height: 1.7; -} - -.info-box { - margin-top: 1.5rem; - background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); - padding: 1rem 1.25rem; - border-radius: 12px; - font-size: 0.875rem; - color: #92400e; - border-left: 4px solid #f59e0b; - display: flex; - gap: 0.5rem; - box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2); -} - -.info-box p { - margin: 0; - display: flex; - align-items: flex-start; - gap: 0.625rem; - line-height: 1.6; -} - -.info-box .icon { - font-size: 1.125rem; flex-shrink: 0; } -.info-box strong { - color: #78350f; -} diff --git a/docs/.vitepress/theme/components/appendix/canvas-intro/CoordinateSystemDemo.vue b/docs/.vitepress/theme/components/appendix/canvas-intro/CoordinateSystemDemo.vue index 0bf09ba..7ed2d22 100644 --- a/docs/.vitepress/theme/components/appendix/canvas-intro/CoordinateSystemDemo.vue +++ b/docs/.vitepress/theme/components/appendix/canvas-intro/CoordinateSystemDemo.vue @@ -74,56 +74,11 @@ /> -
-

Canvas Coordinate System / Canvas 坐标系统

- -
+ -
-

Example Code / 示例代码

-
// 绘制坐标轴
-const canvas = document.getElementById('myCanvas')
-const ctx = canvas.getContext('2d')
+    
 
-// X 轴(红色)
-ctx.strokeStyle = '#e74c3c'
-ctx.lineWidth = 2
-ctx.beginPath()
-ctx.moveTo(0, 0)
-ctx.lineTo(canvas.width, 0)
-ctx.stroke()
-
-// Y 轴(蓝色)
-ctx.strokeStyle = '#3498db'
-ctx.beginPath()
-ctx.moveTo(0, 0)
-ctx.lineTo(0, canvas.height)
-ctx.stroke()
-
-// 绘制点
-ctx.fillStyle = '#2ecc71'
-ctx.beginPath()
-ctx.arc({{ Math.round(selectedPoint?.x || 100) }}, {{ Math.round(selectedPoint?.y || 100) }}, 5, 0, Math.PI * 2)
-ctx.fill()
-
- -
-

- 💡 - 提示: - Canvas 的 Y - 轴方向与传统数学坐标系相反,向下为正。这在处理图形定位时需要特别注意。 -

-
+ @@ -360,11 +315,12 @@ onMounted(() => { display: flex; justify-content: center; margin: 1.5rem 0; - padding: 1.5rem; + padding: 1rem; background: var(--vp-c-bg); border-radius: 12px; border: 2px solid var(--vp-c-divider); box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.05); + overflow-x: auto; } canvas { @@ -373,83 +329,7 @@ canvas { cursor: crosshair; background: #ffffff; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); -} - -.explanation { - margin: 1.5rem 0; - padding: 1.25rem; - background: var(--vp-c-bg); - border-radius: 6px; - border: 1px solid var(--vp-c-divider); -} - -.explanation h4 { - margin: 0 0 0.75rem 0; - color: var(--vp-c-text-1); - font-size: 0.875rem; - font-weight: 600; -} - -.explanation ul { - margin: 0; - padding-left: 1.25rem; -} - -.explanation li { - margin-bottom: 0.5rem; - color: var(--vp-c-text-2); - font-size: 0.875rem; - line-height: 1.6; -} - -.code-display { - margin-top: 1.5rem; - padding: 1.25rem; - background: #1e293b; - border-radius: 12px; - overflow-x: auto; - border: 2px solid #334155; -} - -.code-display h4 { - color: #f8fafc; - margin: 0 0 0.75rem 0; - font-size: 0.875rem; - font-weight: 600; -} - -.code-display pre { - margin: 0; -} - -.code-display code { - color: #e2e8f0; - font-family: var(--vp-font-family-mono); - font-size: 0.75rem; - line-height: 1.7; -} - -.info-box { - margin-top: 1.5rem; - padding: 1rem 1.25rem; - background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); - border-radius: 12px; - border-left: 4px solid #f59e0b; - box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2); -} - -.info-box p { - margin: 0; - font-size: 0.875rem; - color: #92400e; - display: flex; - align-items: flex-start; - gap: 0.5rem; - line-height: 1.6; -} - -.info-box .icon { - font-size: 1.125rem; flex-shrink: 0; } + diff --git a/docs/.vitepress/theme/components/appendix/canvas-intro/EventHandlingDemo.vue b/docs/.vitepress/theme/components/appendix/canvas-intro/EventHandlingDemo.vue index 7c5bc45..a47ba31 100644 --- a/docs/.vitepress/theme/components/appendix/canvas-intro/EventHandlingDemo.vue +++ b/docs/.vitepress/theme/components/appendix/canvas-intro/EventHandlingDemo.vue @@ -87,32 +87,9 @@ /> -
-

Event Handling Code / 事件处理代码

-
{{ currentCode }}
-
+ -
-

Event Handling Tips / 事件处理要点

- -
+ @@ -647,11 +624,12 @@ onMounted(() => { display: flex; justify-content: center; margin: 1.5rem 0; - padding: 1.5rem; + padding: 1rem; background: var(--vp-c-bg); border-radius: 12px; border: 2px solid var(--vp-c-divider); box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.05); + overflow-x: auto; } canvas { @@ -661,63 +639,11 @@ canvas { outline: none; background: #ffffff; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); + flex-shrink: 0; } canvas:focus { border-color: var(--vp-c-brand); } -.code-display { - margin-top: 1.5rem; - padding: 1.25rem; - background: #1e293b; - border-radius: 12px; - overflow-x: auto; - border: 2px solid #334155; -} - -.code-display h4 { - color: #f8fafc; - margin: 0 0 0.75rem 0; - font-size: 0.875rem; - font-weight: 600; -} - -.code-display pre { - margin: 0; -} - -.code-display code { - color: #e2e8f0; - font-family: var(--vp-font-family-mono); - font-size: 0.75rem; - line-height: 1.7; -} - -.explanation { - margin: 1.5rem 0; - padding: 1.25rem; - background: var(--vp-c-bg); - border-radius: 6px; - border: 1px solid var(--vp-c-divider); -} - -.explanation h4 { - margin: 0 0 0.75rem 0; - color: var(--vp-c-text-1); - font-size: 0.875rem; - font-weight: 600; -} - -.explanation ul { - margin: 0; - padding-left: 1.25rem; -} - -.explanation li { - margin-bottom: 0.5rem; - color: var(--vp-c-text-2); - font-size: 0.875rem; - line-height: 1.6; -} diff --git a/docs/.vitepress/theme/components/appendix/canvas-intro/ParticleSystemDemo.vue b/docs/.vitepress/theme/components/appendix/canvas-intro/ParticleSystemDemo.vue index f343392..2c02269 100644 --- a/docs/.vitepress/theme/components/appendix/canvas-intro/ParticleSystemDemo.vue +++ b/docs/.vitepress/theme/components/appendix/canvas-intro/ParticleSystemDemo.vue @@ -102,40 +102,11 @@ /> -
-

Particle System Code / 粒子系统代码

-
{{ particleCode }}
-
+ -
-

Particle System Tips / 粒子系统要点

- -
+ -
-

- 💡 - 提示: - 移动鼠标或点击画布来产生粒子!不同的效果有不同的交互方式。 -

-
+ @@ -513,11 +484,12 @@ onUnmounted(() => { display: flex; justify-content: center; margin: 1.5rem 0; - padding: 1.5rem; + padding: 1rem; background: var(--vp-c-bg); border-radius: 12px; border: 2px solid var(--vp-c-divider); box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.05); + overflow-x: auto; } canvas { @@ -526,83 +498,7 @@ canvas { cursor: crosshair; background: #ffffff; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); -} - -.code-display { - margin-top: 1.5rem; - padding: 1.25rem; - background: #1e293b; - border-radius: 12px; - overflow-x: auto; - border: 2px solid #334155; -} - -.code-display h4 { - color: #f8fafc; - margin: 0 0 0.75rem 0; - font-size: 0.875rem; - font-weight: 600; -} - -.code-display pre { - margin: 0; -} - -.code-display code { - color: #e2e8f0; - font-family: var(--vp-font-family-mono); - font-size: 0.75rem; - line-height: 1.7; -} - -.explanation { - margin: 1.5rem 0; - padding: 1.25rem; - background: var(--vp-c-bg); - border-radius: 6px; - border: 1px solid var(--vp-c-divider); -} - -.explanation h4 { - margin: 0 0 0.75rem 0; - color: var(--vp-c-text-1); - font-size: 0.875rem; - font-weight: 600; -} - -.explanation ul { - margin: 0; - padding-left: 1.25rem; -} - -.explanation li { - margin-bottom: 0.5rem; - color: var(--vp-c-text-2); - font-size: 0.875rem; - line-height: 1.6; -} - -.info-box { - margin-top: 1.5rem; - padding: 1rem 1.25rem; - background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); - border-radius: 12px; - border-left: 4px solid #f59e0b; - box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2); -} - -.info-box p { - margin: 0; - font-size: 0.875rem; - color: #92400e; - display: flex; - align-items: flex-start; - gap: 0.5rem; - line-height: 1.6; -} - -.info-box .icon { - font-size: 1.125rem; flex-shrink: 0; } + diff --git a/docs/.vitepress/theme/components/appendix/canvas-intro/PerformanceDemo.vue b/docs/.vitepress/theme/components/appendix/canvas-intro/PerformanceDemo.vue index 50539bd..0e57395 100644 --- a/docs/.vitepress/theme/components/appendix/canvas-intro/PerformanceDemo.vue +++ b/docs/.vitepress/theme/components/appendix/canvas-intro/PerformanceDemo.vue @@ -174,36 +174,9 @@ -
-

Optimization Code / 优化代码

-
{{ optimizationCode }}
-
+ -
-

Performance Tips / 性能优化要点

- -
+ @@ -755,11 +728,12 @@ onUnmounted(() => { display: flex; justify-content: center; margin: 1.5rem 0; - padding: 1.5rem; + padding: 1rem; background: var(--vp-c-bg); border-radius: 12px; border: 2px solid var(--vp-c-divider); box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.05); + overflow-x: auto; } canvas { @@ -767,6 +741,7 @@ canvas { border-radius: 6px; background: #ffffff; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); + flex-shrink: 0; } .comparison { @@ -812,57 +787,4 @@ canvas { color: var(--vp-c-text-2); } -.code-display { - margin-top: 1.5rem; - padding: 1.25rem; - background: #1e293b; - border-radius: 12px; - overflow-x: auto; - border: 2px solid #334155; -} - -.code-display h4 { - color: #f8fafc; - margin: 0 0 0.75rem 0; - font-size: 0.875rem; - font-weight: 600; -} - -.code-display pre { - margin: 0; -} - -.code-display code { - color: #e2e8f0; - font-family: var(--vp-font-family-mono); - font-size: 0.75rem; - line-height: 1.7; -} - -.explanation { - margin: 1.5rem 0; - padding: 1.25rem; - background: var(--vp-c-bg); - border-radius: 6px; - border: 1px solid var(--vp-c-divider); -} - -.explanation h4 { - margin: 0 0 0.75rem 0; - color: var(--vp-c-text-1); - font-size: 0.875rem; - font-weight: 600; -} - -.explanation ul { - margin: 0; - padding-left: 1.25rem; -} - -.explanation li { - margin-bottom: 0.5rem; - color: var(--vp-c-text-2); - font-size: 0.875rem; - line-height: 1.6; -} diff --git a/docs/.vitepress/theme/components/appendix/data/ABTestingDemo.vue b/docs/.vitepress/theme/components/appendix/data/ABTestingDemo.vue index 54ba30d..ffe0c7b 100644 --- a/docs/.vitepress/theme/components/appendix/data/ABTestingDemo.vue +++ b/docs/.vitepress/theme/components/appendix/data/ABTestingDemo.vue @@ -1,18 +1,17 @@