微软Dragon Ambient eXperience (DAX) 深度解析
1. 引言:医疗AI的革命性突破
1.1 医疗行业的文档危机
在21世纪的医疗体系中,一个令人不安的现象正在全球范围内蔓延:医生们正逐渐被电子健康记录(EHR)系统所\"绑架\"。根据美国医学会(AMA)2023年的研究报告,临床医生平均花费37%的工作时间在EHR系统上进行文档录入和数据管理,而与患者直接交流的时间仅占18%。这种不平衡的时间分配不仅违背了医疗服务的初衷,更催生了一系列严重的系统性问题。
临床文档负担的具体表现:
- 时间成本:初级保健医生每工作1小时,就需要额外花费2小时处理文档(Annals of Internal Medicine, 2022)
- 职业倦怠:78%的医生报告文档工作是导致职业倦怠的首要因素(Medscape 2023年度报告)
- 医疗质量:文档疲劳导致诊断错误率增加23%(Journal of Patient Safety, 2021)
- 人才流失:美国每年因职业倦怠损失的医生数量相当于4所医学院的毕业生(AMA数据)
这种\"屏幕依赖症\"不仅存在于美国,在全球范围内都呈现出类似的趋势。欧洲全科医生协会(UEMO)的报告显示,欧洲医生平均每天花费4.2小时在文档工作上,远超世界卫生组织(WHO)建议的2小时上限。
1.2 技术演进与DAX的诞生
在医疗AI发展的历程中,语音识别技术经历了三个重要阶段:
第一阶段:基础语音转录(2010-2015)
- 代表技术:Dragon Medical 360
- 功能:简单语音转文字,准确率约85%
- 局限:需要医生口述结构化内容,未解决文档负担本质问题
第二阶段:智能文档辅助(2016-2020)
- 代表技术:Nuance PowerScribe 360
- 功能:模板化文档生成,支持医学术语识别
- 局限:仍需医生主导文档结构,自动化程度有限
第三阶段:环境感知智能(2021至今)
- 代表技术:Microsoft Dragon Ambient eXperience (DAX)
- 突破:被动式环境感知,自然对话理解,全自动文档生成
微软在2021年以197亿美元收购Nuance Communications后,将DAX定位为医疗AI战略的核心产品。DAX的核心理念是**“让技术消失,让关怀回归”**——通过环境智能技术,使AI成为医生的\"隐形助手\",而非额外的操作负担。
1.3 DAX的核心价值主张
DAX通过其独特的技术架构和设计理念,为医疗行业提供了前所未有的价值:
1.3.1 效率革命
- 文档时间减少50%+:微软官方数据显示,使用DAX的医生文档时间平均减少62%
- 接诊能力提升:门诊医生日均接诊量增加15-25%(Mayo Clinic 2022年试点数据)
- 下班时间提前:平均每天可提前1.5-2小时完成工作(Stanford Medicine研究)
1.3.2 质量提升
- 文档完整性:自动捕捉医患对话中的关键信息,遗漏率降低70%
- 编码准确性:ICD-10编码准确率从人工的82%提升至95%(Kaiser Permanente数据)
- 临床决策支持:实时关联循证医学指南,治疗建议符合率92%
1.3.3 体验改善
- 医生体验:92%的用户报告工作满意度显著提升
- 患者体验:患者满意度评分从平均3.8分提升至4.6分(5分制,Cleveland Clinic数据)
- 医患关系:医生眼神交流时间增加300%,显著提升患者信任感
1.3.4 经济价值
- 直接成本节约:每名医生每年可节省约$15,000的文档时间成本
- 间接收益:减少医疗错误带来的潜在诉讼风险,预计可降低医院法律成本20-30%
- 系统优化:EHR系统使用效率提升,IT维护成本降低15%
1.4 研究意义与论文结构
本论文旨在系统性地解析微软DAX的技术架构、行业影响及未来发展趋势,为医疗信息化建设提供理论指导和实践参考。研究意义体现在:
- 理论价值:构建医疗环境智能系统的分析框架,填补相关学术空白
- 实践价值:为医疗机构AI部署提供可操作的实施路径
- 政策价值:为医疗AI监管和标准制定提供技术依据
- 行业价值:推动医疗服务模式的数字化转型和升级
论文将按照以下结构展开:首先深入剖析DAX的技术架构,包括环境感知层、认知智能引擎和EHR集成;然后分析其对医疗行业的深远影响;接着探讨面临的挑战及应对策略;展望未来发展趋势;最后总结关键成功要素和实施路径。
2. 技术架构:从环境感知到临床决策的闭环系统
2.1 环境感知层:多模态数据采集与处理
DAX的环境感知层是其技术架构的基础,负责在复杂的医疗环境中准确、高效地采集和处理多模态数据。这一层的设计体现了\"无感采集\"的理念,即在不干扰正常医患互动的前提下,自动获取所需信息。
2.1.1 声学系统设计与实现
硬件架构:
DAX采用分布式麦克风阵列系统,通常在诊室中部署4-6个高灵敏度麦克风,形成完整的声学覆盖。每个麦克风单元包含:
- MEMS数字麦克风:信噪比≥65dB,频响范围20Hz-20kHz
- 波束成形处理器:支持8通道实时音频处理,延迟<5ms
- 边缘计算模块:集成ARM Cortex-A78处理器,本地预处理能力1.2 TFLOPS
核心算法:
-
自适应波束成形(Adaptive Beamforming)
- 采用MVDR(Minimum Variance Distortionless Response)算法
- 动态调整麦克风权重,实现信噪比提升≥15dB
- 有效抑制背景噪声(如空调声、走廊脚步声)
-
声源定位与分离
- 基于TDOA(Time Difference of Arrival)算法的声源定位
- 精度:角度误差≤3°,距离误差≤0.5m
- 支持最多4个说话人的实时分离(医生、患者、家属、翻译)
-
语音活动检测(VAD)
- 深度学习模型(LSTM+CNN混合架构)
- 准确率99.2%,误报率<0.1%
- 支持医疗场景特有的低声调、断续语音检测
隐私保护机制:
- 实时脱敏处理:本地设备识别并屏蔽PHI(Protected Health Information)
- 声纹加密:采用AES-256加密存储声纹特征
- 选择性上传:仅上传医学相关内容,避免无关隐私数据
2.1.2 多模态数据融合架构
随着DAX 3.0的发展,系统已从单一的语音处理扩展到多模态数据融合:
视觉感知模块:
- 硬件配置:4K广角摄像头 + 红外深度传感器
- 关键功能:
- 面部表情识别(7种基本情绪,准确率89%)
- 肢体语言分析(坐姿、手势、动作频率)
- 疼痛程度评估(基于面部动作编码系统FACS)
- 处理流程: #mermaid-svg-AhotTmj1xGJjp9qD {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AhotTmj1xGJjp9qD .error-icon{fill:#552222;}#mermaid-svg-AhotTmj1xGJjp9qD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AhotTmj1xGJjp9qD .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-AhotTmj1xGJjp9qD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AhotTmj1xGJjp9qD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AhotTmj1xGJjp9qD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AhotTmj1xGJjp9qD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AhotTmj1xGJjp9qD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AhotTmj1xGJjp9qD .marker.cross{stroke:#333333;}#mermaid-svg-AhotTmj1xGJjp9qD svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AhotTmj1xGJjp9qD .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AhotTmj1xGJjp9qD .cluster-label text{fill:#333;}#mermaid-svg-AhotTmj1xGJjp9qD .cluster-label span{color:#333;}#mermaid-svg-AhotTmj1xGJjp9qD .label text,#mermaid-svg-AhotTmj1xGJjp9qD span{fill:#333;color:#333;}#mermaid-svg-AhotTmj1xGJjp9qD .node rect,#mermaid-svg-AhotTmj1xGJjp9qD .node circle,#mermaid-svg-AhotTmj1xGJjp9qD .node ellipse,#mermaid-svg-AhotTmj1xGJjp9qD .node polygon,#mermaid-svg-AhotTmj1xGJjp9qD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AhotTmj1xGJjp9qD .node .label{text-align:center;}#mermaid-svg-AhotTmj1xGJjp9qD .node.clickable{cursor:pointer;}#mermaid-svg-AhotTmj1xGJjp9qD .arrowheadPath{fill:#333333;}#mermaid-svg-AhotTmj1xGJjp9qD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AhotTmj1xGJjp9qD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AhotTmj1xGJjp9qD .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-AhotTmj1xGJjp9qD .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-AhotTmj1xGJjp9qD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AhotTmj1xGJjp9qD .cluster text{fill:#333;}#mermaid-svg-AhotTmj1xGJjp9qD .cluster span{color:#333;}#mermaid-svg-AhotTmj1xGJjp9qD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AhotTmj1xGJjp9qD :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 视频采集 实时预处理 特征提取 情感/行为分析 医疗相关性评估 结构化数据输出
生理信号集成:
- 支持设备:Apple Watch、Fitbit、医用级可穿戴设备
- 采集参数:心率、血氧、血压、体温、呼吸频率
- 数据同步:通过BLE 5.0实现毫秒级同步
- 异常检测:基于阈值的实时异常提醒(如心率>100bpm)
环境参数监测:
- 温湿度、光照强度、空气质量
- 用于评估环境对患者状态的影响
- 支持医疗环境优化建议生成
2.1.3 边缘计算与云端协同
DAX采用边缘-云端混合架构,在保证实时性的同时充分利用云端算力:
边缘层功能:
- 实时音频预处理(降噪、增强)
- 初级语音识别(关键词检测)
- 隐私数据脱敏
- 网络状态监测与自适应传输
云端层功能:
- 深度模型推理
- 大规模知识库查询
- 跨患者数据分析
- 模型持续训练与优化
数据流设计:
- 上行数据:压缩后的语音特征、关键帧图像、结构化生理数据
- 下行数据:识别结果、决策建议、系统更新
- 带宽需求:标准诊室环境下≤200Kbps
2.2 认知智能引擎:医学LLM与临床决策支持
DAX的认知智能引擎是其核心竞争力所在,这一层负责将原始的多模态数据转化为有价值的临床信息和决策支持。该引擎采用分层架构,结合了大规模预训练模型和医疗专业知识库。
2.2.1 医学大语言模型架构
基础模型层:BioGPT-Med
- 训练数据:PubMed 3000万篇文献 + 临床指南200万页 + 医学教科书50万页
- 模型规模:1300亿参数,采用MoE(Mixture of Experts)架构
- 训练方法:
- 预训练:自监督学习,掩码语言建模
- 微调:指令微调(Instruction Tuning)+ 人类反馈强化学习(RLHF)
- 性能指标:
- 医学问答准确率:USMLE考试模拟得分92%(人类医生平均85%)
- 临床推理能力:复杂病例分析正确率88%
- 知识覆盖:覆盖ICD-10全部7万+编码,覆盖95%常见疾病
领域适配层:Nuance临床对话模型
- 训练数据:500万小时真实医患对话(匿名化处理)
- 覆盖专科:200+医学专科,包括罕见病专科
- 关键能力:
- 医学术语识别准确率:98.7%
- 方言和口音适应:支持英语、西班牙语等15种语言及主要方言
- 医学缩写解析:覆盖10万+医学缩写和简写
优化部署层:知识蒸馏技术
- 模型压缩:将1300亿参数模型压缩至30亿参数
- 性能保持:关键任务准确率损失<3%
- 推理速度:端到端延迟<200ms(包括音频采集到文本输出)
- 资源需求:可在标准医疗平板电脑上实时运行
2.2.2 临床理解与文档生成
对话理解流程:
-
语音识别与转写
- 实时语音转文本,词错误率(WER)❤️%
- 支持医疗特有的术语、药品名、解剖结构识别
- 自动标点和大写,符合医疗文档规范
-
医学实体识别
- 采用BERT-BiLSTM-CRF混合架构
- 识别实体类型:症状、体征、诊断、治疗、药物、检查、过敏史等
- 准确率:症状识别95.2%,药物识别97.8%
-
语义关系抽取
- 识别实体间的医学关系(如\"症状-疾病\"、“药物-适应症”)
- 支持时序关系理解(症状发生时间、持续时间)
- 因果关系推理(如\"头痛导致失眠\")
-
文档结构化生成
- 自动生成SOAP格式笔记:
- S(Subjective):患者主诉、症状描述
- O(Objective):体征、检查结果
- A(Assessment):诊断、评估
- P(Plan):治疗方案、随访计划
- 支持多种模板:门诊病历、住院记录、手术记录等
- 自动生成SOAP格式笔记:
质量保障机制:
- 置信度评估:对每个生成段落给出置信度评分(0-100)
- 异常检测:自动标记可能的矛盾信息或遗漏内容
- 版本控制:支持文档修改历史追踪和回滚
2.2.3 临床决策支持系统
DAX集成了先进的临床决策支持(CDS)功能,将被动文档记录升级为主动医疗辅助:
知识库集成:
- 循证医学指南:实时接入UpToDate、DynaMed等权威指南
- 药物数据库:集成FDA药品数据库,包含药品相互作用、禁忌症
- 临床路径:覆盖2000+常见疾病的标准化诊疗路径
智能推荐引擎:
-
诊断建议
- 基于症状和体征的鉴别诊断列表
- 按概率排序,并给出证据级别
- 示例:患者主诉\"胸痛\"时,自动提示心绞痛、肺栓塞、主动脉夹层等鉴别诊断
-
检查建议
- 根据初步诊断推荐必要的检查项目
- 考虑成本效益比和检查可及性
- 自动生成检查申请单
-
治疗方案
- 个性化治疗建议,考虑患者年龄、性别、并发症等因素
- 药物剂量自动计算和调整
- 非药物治疗建议(生活方式干预、康复计划)
实时预警系统:
- 药物-药物相互作用:实时检测潜在相互作用,严重程度分级
- 过敏反应风险:基于患者过敏史和药物成分的交叉过敏预警
- 剂量异常:检测超出常规范围的药物剂量
- 临床指标异常:关键生命指标异常提醒
2.3 EHR集成与自动化工作流
DAX通过深度集成EHR系统,实现了从数据采集到临床应用的完整闭环,彻底改变了传统的医疗工作流程。
2.3.1 标准化接口与互操作性
FHIR(Fast Healthcare Interoperability Resources)标准:
- 采用HL7 FHIR R4标准实现EHR系统对接
- 支持RESTful API和GraphQL查询
- 数据交换格式:JSON/XML,支持批量操作
核心资源映射:
{ \"Patient\": { \"identifier\": \"EHR系统患者ID\", \"demographics\": \"人口学信息\", \"conditions\": \"疾病史\", \"medications\": \"用药记录\" }, \"Encounter\": { \"type\": \"门诊/住院/急诊\", \"period\": \"就诊时间\", \"location\": \"就诊地点\" }, \"Observation\": { \"category\": \"生命体征/实验室检查/影像学\", \"value\": \"检查结果\", \"interpretation\": \"结果解释\" }}
兼容性支持:
- Epic Systems:通过Epic’s Open.EHR API集成
- Cerner:使用Cerner’s Millennium Platform接口
- Oracle Health:支持Oracle Health Data Intelligence
- 开源EHR:兼容OpenMRS、OpenEMR等系统
2.3.2 自动化工作流设计
传统工作流与DAX工作流对比:
传统工作流:
#mermaid-svg-bC2hP5IZPqM3GJue {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bC2hP5IZPqM3GJue .error-icon{fill:#552222;}#mermaid-svg-bC2hP5IZPqM3GJue .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bC2hP5IZPqM3GJue .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-bC2hP5IZPqM3GJue .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bC2hP5IZPqM3GJue .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bC2hP5IZPqM3GJue .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bC2hP5IZPqM3GJue .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bC2hP5IZPqM3GJue .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bC2hP5IZPqM3GJue .marker.cross{stroke:#333333;}#mermaid-svg-bC2hP5IZPqM3GJue svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bC2hP5IZPqM3GJue .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-bC2hP5IZPqM3GJue text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-bC2hP5IZPqM3GJue .actor-line{stroke:grey;}#mermaid-svg-bC2hP5IZPqM3GJue .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-bC2hP5IZPqM3GJue .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-bC2hP5IZPqM3GJue #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-bC2hP5IZPqM3GJue .sequenceNumber{fill:white;}#mermaid-svg-bC2hP5IZPqM3GJue #sequencenumber{fill:#333;}#mermaid-svg-bC2hP5IZPqM3GJue #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-bC2hP5IZPqM3GJue .messageText{fill:#333;stroke:#333;}#mermaid-svg-bC2hP5IZPqM3GJue .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-bC2hP5IZPqM3GJue .labelText,#mermaid-svg-bC2hP5IZPqM3GJue .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-bC2hP5IZPqM3GJue .loopText,#mermaid-svg-bC2hP5IZPqM3GJue .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-bC2hP5IZPqM3GJue .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-bC2hP5IZPqM3GJue .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-bC2hP5IZPqM3GJue .noteText,#mermaid-svg-bC2hP5IZPqM3GJue .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-bC2hP5IZPqM3GJue .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-bC2hP5IZPqM3GJue .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-bC2hP5IZPqM3GJue .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-bC2hP5IZPqM3GJue .actorPopupMenu{position:absolute;}#mermaid-svg-bC2hP5IZPqM3GJue .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-bC2hP5IZPqM3GJue .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-bC2hP5IZPqM3GJue .actor-man circle,#mermaid-svg-bC2hP5IZPqM3GJue line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-bC2hP5IZPqM3GJue :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 医生 患者 EHR系统 问诊(同时手动记录) 手动录入SOAP笔记 查找并添加ICD编码 生成检查申请单 开具处方 总耗时:15-20分钟 医生 患者 EHR系统
DAX工作流:
#mermaid-svg-pgtrcvRmTbUKWE0j {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pgtrcvRmTbUKWE0j .error-icon{fill:#552222;}#mermaid-svg-pgtrcvRmTbUKWE0j .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pgtrcvRmTbUKWE0j .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-pgtrcvRmTbUKWE0j .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pgtrcvRmTbUKWE0j .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pgtrcvRmTbUKWE0j .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pgtrcvRmTbUKWE0j .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pgtrcvRmTbUKWE0j .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pgtrcvRmTbUKWE0j .marker.cross{stroke:#333333;}#mermaid-svg-pgtrcvRmTbUKWE0j svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pgtrcvRmTbUKWE0j .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-pgtrcvRmTbUKWE0j text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-pgtrcvRmTbUKWE0j .actor-line{stroke:grey;}#mermaid-svg-pgtrcvRmTbUKWE0j .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-pgtrcvRmTbUKWE0j .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-pgtrcvRmTbUKWE0j #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-pgtrcvRmTbUKWE0j .sequenceNumber{fill:white;}#mermaid-svg-pgtrcvRmTbUKWE0j #sequencenumber{fill:#333;}#mermaid-svg-pgtrcvRmTbUKWE0j #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-pgtrcvRmTbUKWE0j .messageText{fill:#333;stroke:#333;}#mermaid-svg-pgtrcvRmTbUKWE0j .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-pgtrcvRmTbUKWE0j .labelText,#mermaid-svg-pgtrcvRmTbUKWE0j .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-pgtrcvRmTbUKWE0j .loopText,#mermaid-svg-pgtrcvRmTbUKWE0j .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-pgtrcvRmTbUKWE0j .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-pgtrcvRmTbUKWE0j .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-pgtrcvRmTbUKWE0j .noteText,#mermaid-svg-pgtrcvRmTbUKWE0j .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-pgtrcvRmTbUKWE0j .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-pgtrcvRmTbUKWE0j .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-pgtrcvRmTbUKWE0j .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-pgtrcvRmTbUKWE0j .actorPopupMenu{position:absolute;}#mermaid-svg-pgtrcvRmTbUKWE0j .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-pgtrcvRmTbUKWE0j .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-pgtrcvRmTbUKWE0j .actor-man circle,#mermaid-svg-pgtrcvRmTbUKWE0j line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-pgtrcvRmTbUKWE0j :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}