.related-articles-intro[data-v-1bd32934]{color:#4b5563}.related-articles-links[data-v-1bd32934]{display:flex;flex-wrap:wrap;gap:12px}.related-article-link[data-v-1bd32934]{display:inline-flex;align-items:center;gap:8px;padding:12px 18px;background:linear-gradient(135deg,#fffffff2,#faf5fffa);border:2px solid rgba(139,92,246,.2);border-radius:10px;color:#374151;font-weight:600;text-decoration:none;transition:all .2s ease}.related-article-link[data-v-1bd32934]:hover{border-color:#8b5cf680;color:#7c3aed;background:#8b5cf60f}.related-article-title[data-v-1bd32934]{font-size:1rem}.core-concepts-intro[data-v-0e66f958]{color:#4b5563}.core-concepts-links[data-v-0e66f958]{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:12px}.core-concept-link[data-v-0e66f958]{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:linear-gradient(135deg,#fffffff2,#faf5fffa);border:2px solid rgba(139,92,246,.2);border-radius:8px;color:#374151;font-weight:600;text-decoration:none;transition:all .2s ease}.core-concept-link[data-v-0e66f958]:hover{border-color:#8b5cf680;color:#7c3aed;background:#8b5cf60f}.related-patterns-intro[data-v-c5b149e8]{color:#4b5563}.related-patterns-links[data-v-c5b149e8]{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:12px}.related-pattern-link[data-v-c5b149e8]{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;background:linear-gradient(135deg,#fffffff2,#faf5fffa);border:2px solid rgba(139,92,246,.15);border-radius:8px;color:#374151;font-weight:500;text-decoration:none;transition:all .2s ease}.related-pattern-link[data-v-c5b149e8]:hover{border-color:#8b5cf666;color:#7c3aed;background:#8b5cf60f}.article-page[data-v-c0c7dafc]{background:transparent;padding:0}.article-details[data-v-c0c7dafc]{padding-bottom:1.5rem}.article-hero[data-v-c0c7dafc]{padding-top:.5rem}.article-body[data-v-c0c7dafc]{width:100%;max-width:100%;padding-left:0;padding-right:0}.related-services-intro[data-v-c0c7dafc],.related-guides-intro[data-v-c0c7dafc]{color:#4b5563}.related-services-links[data-v-c0c7dafc],.related-guides-links[data-v-c0c7dafc]{display:flex;flex-wrap:wrap;gap:12px}.related-service-link[data-v-c0c7dafc]{display:inline-flex;align-items:center;gap:8px;padding:12px 18px;background:linear-gradient(135deg,#fffffff2,#faf5fffa);border:2px solid rgba(139,92,246,.2);border-radius:10px;color:#374151;font-weight:600;text-decoration:none;transition:all .2s ease}.related-service-link[data-v-c0c7dafc]:hover{border-color:#8b5cf680;color:#7c3aed;background:#8b5cf60f}.related-service-title[data-v-c0c7dafc]{font-size:1rem}.article-content-card[data-v-c0c7dafc] .card-header,.article-content-card[data-v-c0c7dafc] .fancy-3d-header,.article-faq-card[data-v-c0c7dafc] .card-header,.article-faq-card[data-v-c0c7dafc] .fancy-3d-header{padding-left:40px!important;padding-right:40px!important}.article-faq-card[data-v-c0c7dafc] .header-title-enhanced,.article-content-card[data-v-c0c7dafc] .header-title-enhanced{justify-content:flex-start;text-align:left}.mermaid-block[data-v-998321c5]{position:relative;margin:1.75rem 0;padding:1.75rem;background:#fafafa;border-radius:12px;border:1px solid #e5e7eb;box-shadow:0 1px 3px #0000000f}.mermaid-copy-btn[data-v-998321c5]{position:absolute;top:12px;right:12px;display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:.8125rem;font-weight:600;color:#475569;background:#fff;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;z-index:10;transition:background .2s,color .2s,border-color .2s;box-shadow:0 1px 2px #0000000d}.mermaid-copy-btn[data-v-998321c5]:hover{background:#f1f5f9;color:#334155;border-color:#cbd5e1}.mermaid-copy-btn.copied[data-v-998321c5]{color:#059669;border-color:#a7f3d0;background:#ecfdf5}.mermaid-placeholder[data-v-998321c5]{color:#6b7280;font-size:.9rem}.mermaid-output[data-v-998321c5]{overflow:visible;overflow-x:auto;min-height:180px;padding:1.25rem;display:flex;align-items:center;justify-content:center}.mermaid-output[data-v-998321c5] svg{max-width:100%;height:auto;min-width:240px;overflow:visible;filter:drop-shadow(0 1px 2px rgba(0,0,0,.04))}.mermaid-output[data-v-998321c5] rect{rx:10;ry:10}.mermaid-output[data-v-998321c5] .node rect,.mermaid-output[data-v-998321c5] .node polygon{stroke-width:2.5}.mermaid-output[data-v-998321c5] .label,.mermaid-output[data-v-998321c5] .label-group,.mermaid-output[data-v-998321c5] .markdown-node-label,.mermaid-output[data-v-998321c5] .nodeLabel{overflow:visible!important;min-width:0}.mermaid-output[data-v-998321c5] foreignObject{overflow:visible!important}.mermaid-output[data-v-998321c5] foreignObject body{padding:8px 14px;font-size:15px;line-height:1.45;text-align:left;word-wrap:break-word;overflow-wrap:break-word}.mermaid-output[data-v-998321c5] .node{min-width:130px}.mermaid-output[data-v-998321c5] .edgePath path{stroke-width:2px!important;stroke:#64748b!important}.mermaid-output[data-v-998321c5] .relation,.mermaid-output[data-v-998321c5] .dashed-line,.mermaid-output[data-v-998321c5] .dotted-line,.mermaid-output[data-v-998321c5] .edgePath .relation,.mermaid-output[data-v-998321c5] .relation-line{stroke-width:2px!important;stroke:#64748b!important}.mermaid-output[data-v-998321c5] .edgeLabel .label rect{fill:#fefce8!important;stroke:#854d0e!important;stroke-width:2px!important;rx:6!important;ry:6!important}.mermaid-output[data-v-998321c5] .edgeLabel .label span{background:transparent!important;color:#0f172a!important;font-size:11px!important;font-weight:600!important;line-height:1!important;font-family:ui-sans-serif,system-ui,Segoe UI,sans-serif!important;letter-spacing:.02em!important}.mermaid-output[data-v-998321c5] .edgeLabel .label text{fill:#0f172a!important;font-size:11px!important;font-weight:600!important;font-family:ui-sans-serif,system-ui,Segoe UI,sans-serif!important;letter-spacing:.02em!important}.mermaid-output[data-v-998321c5] .edgeLabel foreignObject{overflow:visible!important;height:20px!important;max-height:20px!important}.mermaid-output[data-v-998321c5] .edgeLabel foreignObject body{padding:2px 6px!important;background:#fefce8!important;border:2px solid #854d0e!important;border-radius:6px!important;font-size:11px!important;font-weight:600!important;font-family:ui-sans-serif,system-ui,Segoe UI,sans-serif!important;color:#0f172a!important;line-height:1!important;letter-spacing:.02em!important;box-shadow:0 1px 2px #00000014!important;min-width:0!important;min-height:0!important;display:inline-block!important;white-space:nowrap!important}.mermaid-output[data-v-998321c5] .edgeLabel rect{fill:#fefce8!important;stroke:#854d0e!important;stroke-width:2px!important;rx:6!important;ry:6!important;height:20px!important}.mermaid-output[data-v-998321c5] .edgeLabel text{fill:#0f172a!important;font-size:11px!important;font-weight:600!important;font-family:ui-sans-serif,system-ui,Segoe UI,sans-serif!important;letter-spacing:.02em!important}.mermaid-output[data-v-998321c5] text{font-size:15px;fill:#1e293b;font-weight:500}.mermaid-output[data-v-998321c5] tspan{font-size:15px}.mermaid-output[data-v-998321c5] .nodeLabel .label span:first-child,.mermaid-output[data-v-998321c5] .node .label>span:first-child{font-weight:700!important}.mermaid-output[data-v-998321c5] .interface rect,.mermaid-output[data-v-998321c5] .interface path.basic{fill:#e0e7ff!important;stroke:#4f46e5!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .interface text,.mermaid-output[data-v-998321c5] .interface tspan,.mermaid-output[data-v-998321c5] .interface span{fill:#3730a3!important;color:#3730a3!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .subject rect,.mermaid-output[data-v-998321c5] .subject path.basic,.mermaid-output[data-v-998321c5] .context rect,.mermaid-output[data-v-998321c5] .context path.basic{fill:#dbeafe!important;stroke:#2563eb!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .subject text,.mermaid-output[data-v-998321c5] .subject tspan,.mermaid-output[data-v-998321c5] .subject span,.mermaid-output[data-v-998321c5] .context text,.mermaid-output[data-v-998321c5] .context tspan,.mermaid-output[data-v-998321c5] .context span{fill:#1d4ed8!important;color:#1d4ed8!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .concrete rect,.mermaid-output[data-v-998321c5] .concrete path.basic,.mermaid-output[data-v-998321c5] .handler rect,.mermaid-output[data-v-998321c5] .handler path.basic{fill:#d1fae5!important;stroke:#059669!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .concrete text,.mermaid-output[data-v-998321c5] .concrete tspan,.mermaid-output[data-v-998321c5] .concrete span,.mermaid-output[data-v-998321c5] .handler text,.mermaid-output[data-v-998321c5] .handler tspan,.mermaid-output[data-v-998321c5] .handler span{fill:#047857!important;color:#047857!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .strategy rect,.mermaid-output[data-v-998321c5] .strategy path.basic{fill:#fef3c7!important;stroke:#d97706!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .strategy text,.mermaid-output[data-v-998321c5] .strategy tspan,.mermaid-output[data-v-998321c5] .strategy span{fill:#b45309!important;color:#b45309!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .command rect,.mermaid-output[data-v-998321c5] .command path.basic{fill:#fce7f3!important;stroke:#db2777!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .command text,.mermaid-output[data-v-998321c5] .command tspan,.mermaid-output[data-v-998321c5] .command span{fill:#be185d!important;color:#be185d!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .state rect,.mermaid-output[data-v-998321c5] .state path.basic{fill:#e0f2fe!important;stroke:#0284c7!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .state text,.mermaid-output[data-v-998321c5] .state tspan,.mermaid-output[data-v-998321c5] .state span{fill:#0369a1!important;color:#0369a1!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .abstract rect,.mermaid-output[data-v-998321c5] .abstract path.basic{fill:#f3e8ff!important;stroke:#7c3aed!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .abstract text,.mermaid-output[data-v-998321c5] .abstract tspan,.mermaid-output[data-v-998321c5] .abstract span{fill:#6d28d9!important;color:#6d28d9!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .mediator rect,.mermaid-output[data-v-998321c5] .mediator path.basic,.mermaid-output[data-v-998321c5] .originator rect,.mermaid-output[data-v-998321c5] .originator path.basic,.mermaid-output[data-v-998321c5] .aggregate rect,.mermaid-output[data-v-998321c5] .aggregate path.basic,.mermaid-output[data-v-998321c5] .terminal rect,.mermaid-output[data-v-998321c5] .terminal path.basic,.mermaid-output[data-v-998321c5] .element rect,.mermaid-output[data-v-998321c5] .element path.basic{fill:#dbeafe!important;stroke:#2563eb!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .mediator text,.mermaid-output[data-v-998321c5] .mediator tspan,.mermaid-output[data-v-998321c5] .mediator span,.mermaid-output[data-v-998321c5] .originator text,.mermaid-output[data-v-998321c5] .originator tspan,.mermaid-output[data-v-998321c5] .originator span,.mermaid-output[data-v-998321c5] .aggregate text,.mermaid-output[data-v-998321c5] .aggregate tspan,.mermaid-output[data-v-998321c5] .aggregate span,.mermaid-output[data-v-998321c5] .terminal text,.mermaid-output[data-v-998321c5] .terminal tspan,.mermaid-output[data-v-998321c5] .terminal span,.mermaid-output[data-v-998321c5] .element text,.mermaid-output[data-v-998321c5] .element tspan,.mermaid-output[data-v-998321c5] .element span{fill:#1d4ed8!important;color:#1d4ed8!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .colleague rect,.mermaid-output[data-v-998321c5] .colleague path.basic,.mermaid-output[data-v-998321c5] .caretaker rect,.mermaid-output[data-v-998321c5] .caretaker path.basic,.mermaid-output[data-v-998321c5] .iterator rect,.mermaid-output[data-v-998321c5] .iterator path.basic,.mermaid-output[data-v-998321c5] .composite rect,.mermaid-output[data-v-998321c5] .composite path.basic,.mermaid-output[data-v-998321c5] .visitor rect,.mermaid-output[data-v-998321c5] .visitor path.basic{fill:#d1fae5!important;stroke:#059669!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .colleague text,.mermaid-output[data-v-998321c5] .colleague tspan,.mermaid-output[data-v-998321c5] .colleague span,.mermaid-output[data-v-998321c5] .caretaker text,.mermaid-output[data-v-998321c5] .caretaker tspan,.mermaid-output[data-v-998321c5] .caretaker span,.mermaid-output[data-v-998321c5] .iterator text,.mermaid-output[data-v-998321c5] .iterator tspan,.mermaid-output[data-v-998321c5] .iterator span,.mermaid-output[data-v-998321c5] .composite text,.mermaid-output[data-v-998321c5] .composite tspan,.mermaid-output[data-v-998321c5] .composite span,.mermaid-output[data-v-998321c5] .visitor text,.mermaid-output[data-v-998321c5] .visitor tspan,.mermaid-output[data-v-998321c5] .visitor span{fill:#047857!important;color:#047857!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .memento rect,.mermaid-output[data-v-998321c5] .memento path.basic{fill:#fef3c7!important;stroke:#d97706!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .memento text,.mermaid-output[data-v-998321c5] .memento tspan,.mermaid-output[data-v-998321c5] .memento span{fill:#b45309!important;color:#b45309!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .target rect,.mermaid-output[data-v-998321c5] .target path.basic,.mermaid-output[data-v-998321c5] .abstraction rect,.mermaid-output[data-v-998321c5] .abstraction path.basic,.mermaid-output[data-v-998321c5] .facade rect,.mermaid-output[data-v-998321c5] .facade path.basic,.mermaid-output[data-v-998321c5] .component rect,.mermaid-output[data-v-998321c5] .component path.basic{fill:#dbeafe!important;stroke:#2563eb!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .target text,.mermaid-output[data-v-998321c5] .target tspan,.mermaid-output[data-v-998321c5] .target span,.mermaid-output[data-v-998321c5] .abstraction text,.mermaid-output[data-v-998321c5] .abstraction tspan,.mermaid-output[data-v-998321c5] .abstraction span,.mermaid-output[data-v-998321c5] .facade text,.mermaid-output[data-v-998321c5] .facade tspan,.mermaid-output[data-v-998321c5] .facade span,.mermaid-output[data-v-998321c5] .component text,.mermaid-output[data-v-998321c5] .component tspan,.mermaid-output[data-v-998321c5] .component span{fill:#1d4ed8!important;color:#1d4ed8!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .adapter rect,.mermaid-output[data-v-998321c5] .adapter path.basic,.mermaid-output[data-v-998321c5] .implementor rect,.mermaid-output[data-v-998321c5] .implementor path.basic,.mermaid-output[data-v-998321c5] .decorator rect,.mermaid-output[data-v-998321c5] .decorator path.basic,.mermaid-output[data-v-998321c5] .proxy rect,.mermaid-output[data-v-998321c5] .proxy path.basic,.mermaid-output[data-v-998321c5] .leaf rect,.mermaid-output[data-v-998321c5] .leaf path.basic{fill:#d1fae5!important;stroke:#059669!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .adapter text,.mermaid-output[data-v-998321c5] .adapter tspan,.mermaid-output[data-v-998321c5] .adapter span,.mermaid-output[data-v-998321c5] .implementor text,.mermaid-output[data-v-998321c5] .implementor tspan,.mermaid-output[data-v-998321c5] .implementor span,.mermaid-output[data-v-998321c5] .decorator text,.mermaid-output[data-v-998321c5] .decorator tspan,.mermaid-output[data-v-998321c5] .decorator span,.mermaid-output[data-v-998321c5] .proxy text,.mermaid-output[data-v-998321c5] .proxy tspan,.mermaid-output[data-v-998321c5] .proxy span,.mermaid-output[data-v-998321c5] .leaf text,.mermaid-output[data-v-998321c5] .leaf tspan,.mermaid-output[data-v-998321c5] .leaf span{fill:#047857!important;color:#047857!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .adaptee rect,.mermaid-output[data-v-998321c5] .adaptee path.basic,.mermaid-output[data-v-998321c5] .flyweight rect,.mermaid-output[data-v-998321c5] .flyweight path.basic{fill:#fef3c7!important;stroke:#d97706!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .adaptee text,.mermaid-output[data-v-998321c5] .adaptee tspan,.mermaid-output[data-v-998321c5] .adaptee span,.mermaid-output[data-v-998321c5] .flyweight text,.mermaid-output[data-v-998321c5] .flyweight tspan,.mermaid-output[data-v-998321c5] .flyweight span{fill:#b45309!important;color:#b45309!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .creator rect,.mermaid-output[data-v-998321c5] .creator path.basic,.mermaid-output[data-v-998321c5] .director rect,.mermaid-output[data-v-998321c5] .director path.basic,.mermaid-output[data-v-998321c5] .factory rect,.mermaid-output[data-v-998321c5] .factory path.basic{fill:#dbeafe!important;stroke:#2563eb!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .creator text,.mermaid-output[data-v-998321c5] .creator tspan,.mermaid-output[data-v-998321c5] .creator span,.mermaid-output[data-v-998321c5] .director text,.mermaid-output[data-v-998321c5] .director tspan,.mermaid-output[data-v-998321c5] .director span,.mermaid-output[data-v-998321c5] .factory text,.mermaid-output[data-v-998321c5] .factory tspan,.mermaid-output[data-v-998321c5] .factory span{fill:#1d4ed8!important;color:#1d4ed8!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .product rect,.mermaid-output[data-v-998321c5] .product path.basic,.mermaid-output[data-v-998321c5] .builder rect,.mermaid-output[data-v-998321c5] .builder path.basic,.mermaid-output[data-v-998321c5] .singleton rect,.mermaid-output[data-v-998321c5] .singleton path.basic{fill:#d1fae5!important;stroke:#059669!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .product text,.mermaid-output[data-v-998321c5] .product tspan,.mermaid-output[data-v-998321c5] .product span,.mermaid-output[data-v-998321c5] .builder text,.mermaid-output[data-v-998321c5] .builder tspan,.mermaid-output[data-v-998321c5] .builder span,.mermaid-output[data-v-998321c5] .singleton text,.mermaid-output[data-v-998321c5] .singleton tspan,.mermaid-output[data-v-998321c5] .singleton span{fill:#047857!important;color:#047857!important;font-weight:600!important}.mermaid-output[data-v-998321c5] .prototype rect,.mermaid-output[data-v-998321c5] .prototype path.basic{fill:#fef3c7!important;stroke:#d97706!important;stroke-width:2.5px!important}.mermaid-output[data-v-998321c5] .prototype text,.mermaid-output[data-v-998321c5] .prototype tspan,.mermaid-output[data-v-998321c5] .prototype span{fill:#b45309!important;color:#b45309!important;font-weight:600!important}.mermaid-error-block[data-v-998321c5]{padding:1rem;background:#ef44440f;border-radius:8px;border:1px solid rgba(239,68,68,.2)}.mermaid-error[data-v-998321c5]{color:#dc2626;font-size:.9rem;margin:0 0 .5rem}.mermaid-error-detail[data-v-998321c5]{color:#b91c1c;font-size:.85rem;margin:0 0 .5rem;font-family:ui-monospace,monospace}.mermaid-source-fallback[data-v-998321c5]{margin:0;font-size:.8rem;white-space:pre-wrap;word-break:break-word;color:#374151;max-height:200px;overflow:auto}.mermaid-block .mermaid-output svg g.interface rect,.mermaid-block .mermaid-output svg g.interface path{fill:#e0e7ff!important;stroke:#4f46e5!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.interface text,.mermaid-block .mermaid-output svg g.interface tspan{fill:#3730a3!important}.mermaid-block .mermaid-output svg g.subject rect,.mermaid-block .mermaid-output svg g.subject path,.mermaid-block .mermaid-output svg g.context rect,.mermaid-block .mermaid-output svg g.context path{fill:#dbeafe!important;stroke:#2563eb!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.subject text,.mermaid-block .mermaid-output svg g.subject tspan,.mermaid-block .mermaid-output svg g.context text,.mermaid-block .mermaid-output svg g.context tspan{fill:#1d4ed8!important}.mermaid-block .mermaid-output svg g.concrete rect,.mermaid-block .mermaid-output svg g.concrete path,.mermaid-block .mermaid-output svg g.handler rect,.mermaid-block .mermaid-output svg g.handler path{fill:#d1fae5!important;stroke:#059669!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.concrete text,.mermaid-block .mermaid-output svg g.concrete tspan,.mermaid-block .mermaid-output svg g.handler text,.mermaid-block .mermaid-output svg g.handler tspan{fill:#047857!important}.mermaid-block .mermaid-output svg g.strategy rect,.mermaid-block .mermaid-output svg g.strategy path{fill:#fef3c7!important;stroke:#d97706!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.strategy text,.mermaid-block .mermaid-output svg g.strategy tspan{fill:#b45309!important}.mermaid-block .mermaid-output svg g.command rect,.mermaid-block .mermaid-output svg g.command path{fill:#fce7f3!important;stroke:#db2777!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.command text,.mermaid-block .mermaid-output svg g.command tspan{fill:#be185d!important}.mermaid-block .mermaid-output svg g.state rect,.mermaid-block .mermaid-output svg g.state path{fill:#e0f2fe!important;stroke:#0284c7!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.state text,.mermaid-block .mermaid-output svg g.state tspan{fill:#0369a1!important}.mermaid-block .mermaid-output svg g.abstract rect,.mermaid-block .mermaid-output svg g.abstract path{fill:#f3e8ff!important;stroke:#7c3aed!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.abstract text,.mermaid-block .mermaid-output svg g.abstract tspan{fill:#6d28d9!important}.mermaid-block .mermaid-output svg g.mediator rect,.mermaid-block .mermaid-output svg g.mediator path,.mermaid-block .mermaid-output svg g.originator rect,.mermaid-block .mermaid-output svg g.originator path,.mermaid-block .mermaid-output svg g.aggregate rect,.mermaid-block .mermaid-output svg g.aggregate path,.mermaid-block .mermaid-output svg g.terminal rect,.mermaid-block .mermaid-output svg g.terminal path,.mermaid-block .mermaid-output svg g.element rect,.mermaid-block .mermaid-output svg g.element path{fill:#dbeafe!important;stroke:#2563eb!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.mediator text,.mermaid-block .mermaid-output svg g.mediator tspan,.mermaid-block .mermaid-output svg g.originator text,.mermaid-block .mermaid-output svg g.originator tspan,.mermaid-block .mermaid-output svg g.aggregate text,.mermaid-block .mermaid-output svg g.aggregate tspan,.mermaid-block .mermaid-output svg g.terminal text,.mermaid-block .mermaid-output svg g.terminal tspan,.mermaid-block .mermaid-output svg g.element text,.mermaid-block .mermaid-output svg g.element tspan{fill:#1d4ed8!important}.mermaid-block .mermaid-output svg g.colleague rect,.mermaid-block .mermaid-output svg g.colleague path,.mermaid-block .mermaid-output svg g.caretaker rect,.mermaid-block .mermaid-output svg g.caretaker path,.mermaid-block .mermaid-output svg g.iterator rect,.mermaid-block .mermaid-output svg g.iterator path,.mermaid-block .mermaid-output svg g.composite rect,.mermaid-block .mermaid-output svg g.composite path,.mermaid-block .mermaid-output svg g.visitor rect,.mermaid-block .mermaid-output svg g.visitor path{fill:#d1fae5!important;stroke:#059669!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.colleague text,.mermaid-block .mermaid-output svg g.colleague tspan,.mermaid-block .mermaid-output svg g.caretaker text,.mermaid-block .mermaid-output svg g.caretaker tspan,.mermaid-block .mermaid-output svg g.iterator text,.mermaid-block .mermaid-output svg g.iterator tspan,.mermaid-block .mermaid-output svg g.composite text,.mermaid-block .mermaid-output svg g.composite tspan,.mermaid-block .mermaid-output svg g.visitor text,.mermaid-block .mermaid-output svg g.visitor tspan{fill:#047857!important}.mermaid-block .mermaid-output svg g.memento rect,.mermaid-block .mermaid-output svg g.memento path{fill:#fef3c7!important;stroke:#d97706!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.memento text,.mermaid-block .mermaid-output svg g.memento tspan{fill:#b45309!important}.mermaid-block .mermaid-output svg g.target rect,.mermaid-block .mermaid-output svg g.target path,.mermaid-block .mermaid-output svg g.abstraction rect,.mermaid-block .mermaid-output svg g.abstraction path,.mermaid-block .mermaid-output svg g.facade rect,.mermaid-block .mermaid-output svg g.facade path,.mermaid-block .mermaid-output svg g.component rect,.mermaid-block .mermaid-output svg g.component path{fill:#dbeafe!important;stroke:#2563eb!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.target text,.mermaid-block .mermaid-output svg g.target tspan,.mermaid-block .mermaid-output svg g.abstraction text,.mermaid-block .mermaid-output svg g.abstraction tspan,.mermaid-block .mermaid-output svg g.facade text,.mermaid-block .mermaid-output svg g.facade tspan,.mermaid-block .mermaid-output svg g.component text,.mermaid-block .mermaid-output svg g.component tspan{fill:#1d4ed8!important}.mermaid-block .mermaid-output svg g.adapter rect,.mermaid-block .mermaid-output svg g.adapter path,.mermaid-block .mermaid-output svg g.implementor rect,.mermaid-block .mermaid-output svg g.implementor path,.mermaid-block .mermaid-output svg g.decorator rect,.mermaid-block .mermaid-output svg g.decorator path,.mermaid-block .mermaid-output svg g.proxy rect,.mermaid-block .mermaid-output svg g.proxy path,.mermaid-block .mermaid-output svg g.leaf rect,.mermaid-block .mermaid-output svg g.leaf path{fill:#d1fae5!important;stroke:#059669!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.adapter text,.mermaid-block .mermaid-output svg g.adapter tspan,.mermaid-block .mermaid-output svg g.implementor text,.mermaid-block .mermaid-output svg g.implementor tspan,.mermaid-block .mermaid-output svg g.decorator text,.mermaid-block .mermaid-output svg g.decorator tspan,.mermaid-block .mermaid-output svg g.proxy text,.mermaid-block .mermaid-output svg g.proxy tspan,.mermaid-block .mermaid-output svg g.leaf text,.mermaid-block .mermaid-output svg g.leaf tspan{fill:#047857!important}.mermaid-block .mermaid-output svg g.adaptee rect,.mermaid-block .mermaid-output svg g.adaptee path,.mermaid-block .mermaid-output svg g.flyweight rect,.mermaid-block .mermaid-output svg g.flyweight path{fill:#fef3c7!important;stroke:#d97706!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.adaptee text,.mermaid-block .mermaid-output svg g.adaptee tspan,.mermaid-block .mermaid-output svg g.flyweight text,.mermaid-block .mermaid-output svg g.flyweight tspan{fill:#b45309!important}.mermaid-block .mermaid-output svg g.creator rect,.mermaid-block .mermaid-output svg g.creator path,.mermaid-block .mermaid-output svg g.director rect,.mermaid-block .mermaid-output svg g.director path,.mermaid-block .mermaid-output svg g.factory rect,.mermaid-block .mermaid-output svg g.factory path{fill:#dbeafe!important;stroke:#2563eb!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.creator text,.mermaid-block .mermaid-output svg g.creator tspan,.mermaid-block .mermaid-output svg g.director text,.mermaid-block .mermaid-output svg g.director tspan,.mermaid-block .mermaid-output svg g.factory text,.mermaid-block .mermaid-output svg g.factory tspan{fill:#1d4ed8!important}.mermaid-block .mermaid-output svg g.product rect,.mermaid-block .mermaid-output svg g.product path,.mermaid-block .mermaid-output svg g.builder rect,.mermaid-block .mermaid-output svg g.builder path,.mermaid-block .mermaid-output svg g.singleton rect,.mermaid-block .mermaid-output svg g.singleton path{fill:#d1fae5!important;stroke:#059669!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.product text,.mermaid-block .mermaid-output svg g.product tspan,.mermaid-block .mermaid-output svg g.builder text,.mermaid-block .mermaid-output svg g.builder tspan,.mermaid-block .mermaid-output svg g.singleton text,.mermaid-block .mermaid-output svg g.singleton tspan{fill:#047857!important}.mermaid-block .mermaid-output svg g.prototype rect,.mermaid-block .mermaid-output svg g.prototype path{fill:#fef3c7!important;stroke:#d97706!important;stroke-width:2.5px!important}.mermaid-block .mermaid-output svg g.prototype text,.mermaid-block .mermaid-output svg g.prototype tspan{fill:#b45309!important}.mermaid-block .mermaid-output svg .edgePath path,.mermaid-block .mermaid-output svg .relation{stroke-width:2px!important;stroke:#64748b!important}.mermaid-block .mermaid-output svg .dashed-line,.mermaid-block .mermaid-output svg .dotted-line,.mermaid-block .mermaid-output svg .edgePath .relation,.mermaid-block .mermaid-output svg .relation-line{stroke-width:2px!important;stroke:#64748b!important}.mermaid-block .mermaid-output svg .edgeLabel .label rect,.mermaid-block .mermaid-output svg .edgeLabel rect{fill:#fefce8!important;stroke:#854d0e!important;stroke-width:2px!important;rx:6!important;ry:6!important;height:20px!important}.mermaid-block .mermaid-output svg .edgeLabel foreignObject{height:20px!important;max-height:20px!important}.mermaid-block .mermaid-output svg .edgeLabel .label span{background:transparent!important;color:#0f172a!important;font-size:11px!important;font-weight:600!important;line-height:1!important;font-family:ui-sans-serif,system-ui,Segoe UI,sans-serif!important;letter-spacing:.02em!important}.mermaid-block .mermaid-output svg .edgeLabel .label text,.mermaid-block .mermaid-output svg .edgeLabel text{fill:#0f172a!important;font-size:11px!important;font-weight:600!important;font-family:ui-sans-serif,system-ui,Segoe UI,sans-serif!important;letter-spacing:.02em!important}.mermaid-block .mermaid-output svg .edgeLabel foreignObject body{padding:2px 6px!important;background:#fefce8!important;border:2px solid #854d0e!important;border-radius:6px!important;font-size:11px!important;font-weight:600!important;font-family:ui-sans-serif,system-ui,Segoe UI,sans-serif!important;color:#0f172a!important;line-height:1!important;letter-spacing:.02em!important;box-shadow:0 1px 2px #00000014!important;min-width:0!important;min-height:0!important;display:inline-block!important;white-space:nowrap!important}.kroki-block[data-v-eaed3fec]{position:relative;margin:1.5rem 0;padding:1.5rem;background:linear-gradient(160deg,#fffffffa,#f3e8ff26,#eef2ff33);border-radius:16px;border:1px solid rgba(139,92,246,.2);box-shadow:0 4px 20px #6366f10f,0 1px 3px #0000000a}.kroki-copy-btn[data-v-eaed3fec]{position:absolute;top:10px;right:10px;display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:.85rem;font-weight:500;color:#5b21b6;background:#fffffffa;border:1px solid rgba(139,92,246,.4);border-radius:8px;cursor:pointer;z-index:10;transition:background .2s,color .2s,border-color .2s;box-shadow:0 1px 4px #00000014}.kroki-copy-btn[data-v-eaed3fec]:hover{background:#8b5cf61f;color:#4c1d95;border-color:#8b5cf680}.kroki-copy-btn.copied[data-v-eaed3fec]{color:#059669;border-color:#05966980;background:#05966914}.kroki-placeholder[data-v-eaed3fec]{color:#6b7280;font-size:.9rem}.kroki-output[data-v-eaed3fec]{overflow:visible;overflow-x:auto;min-height:140px;padding:.5rem;display:flex;align-items:center;justify-content:center}.kroki-output[data-v-eaed3fec] svg{max-width:100%;height:auto;min-width:200px;overflow:visible}.kroki-error-block[data-v-eaed3fec]{padding:1rem;background:#ef44440f;border-radius:8px;border:1px solid rgba(239,68,68,.2)}.kroki-error[data-v-eaed3fec]{color:#dc2626;font-size:.9rem;margin:0 0 .5rem}.kroki-error-detail[data-v-eaed3fec]{color:#b91c1c;font-size:.85rem;margin:0 0 .5rem;font-family:ui-monospace,monospace}.kroki-source-fallback[data-v-eaed3fec]{margin:0;font-size:.8rem;white-space:pre-wrap;word-break:break-word;color:#374151;max-height:200px;overflow:auto}.markdown-content-root[data-v-dd597e54]{min-height:1em}.markdown-loading[data-v-dd597e54]{margin:0;color:var(--default-color, #272829);font-size:var(--pf-text-base, 1rem);opacity:.85}.markdown-pipeline-fallback[data-v-dd597e54]{padding:1rem 0}.markdown-pipeline-fallback-text[data-v-dd597e54]{margin:0;line-height:1.6;color:var(--default-color, #272829);font-size:var(--pf-text-base, 1rem)}.markdown-pipeline-retry[data-v-dd597e54]{margin-left:.5rem;padding:.25rem .75rem;font:inherit;cursor:pointer;border:1px solid var(--accent-color, #0563bb);border-radius:4px;background:transparent;color:var(--accent-color, #0563bb)}.markdown-pipeline-retry[data-v-dd597e54]:hover{opacity:.9}.markdown-content[data-v-dd597e54]{line-height:1.75;color:var(--default-color, #272829);font-size:var(--pf-text-base, 1rem)}.markdown-segment[data-v-dd597e54]{margin-bottom:0}.markdown-content[data-v-dd597e54] .code-block-wrapper{position:relative;margin:1.25rem 0;background:linear-gradient(135deg,#f8f6fffa,#eef2fffa);border:1px solid rgba(139,92,246,.2);border-radius:10px;overflow:hidden;box-shadow:0 2px 10px #8b5cf614}.markdown-content[data-v-dd597e54] .code-copy-btn{position:absolute;top:10px;right:10px;display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:.85rem;font-weight:500;color:#5b21b6;background:#fffffffa;border:1px solid rgba(139,92,246,.4);border-radius:8px;cursor:pointer;z-index:10;transition:background .2s,color .2s,border-color .2s;box-shadow:0 1px 4px #00000014}.markdown-content[data-v-dd597e54] .code-copy-btn:hover{background:#8b5cf61f;color:#4c1d95;border-color:#8b5cf680}.markdown-content[data-v-dd597e54] .code-copy-btn.copied{color:#059669;border-color:#05966980;background:#05966914}.markdown-content[data-v-dd597e54] pre{background:linear-gradient(180deg,#fbfafff2,#f8fafcfa)!important;color:#1e293b!important;padding:2.75rem 1.25rem 1rem;border-radius:0 0 10px 10px;overflow-x:auto;margin:0;border:none;border-top:1px solid rgba(139,92,246,.12);text-align:left;word-wrap:break-word;white-space:pre-wrap}.markdown-content[data-v-dd597e54] pre code{background:none!important;color:inherit!important;padding:0;font-size:.9rem;line-height:1.55;font-family:Consolas,Monaco,Courier New,monospace;word-wrap:break-word;white-space:pre-wrap}.markdown-content[data-v-dd597e54] code{background:#f5f5f5;color:#c7254e;padding:.2em .4em;border-radius:4px;font-size:.88em;font-family:Consolas,Monaco,Courier New,monospace;border:1px solid #e8e8e8}.markdown-content[data-v-dd597e54] a[href^="#"]{color:#4f46e5;text-decoration:none;border-bottom:1px dotted #4f46e5;font-weight:500}.markdown-content[data-v-dd597e54] a[href^="#"]:hover{border-bottom-style:solid}.markdown-content[data-v-dd597e54] h2,.markdown-content[data-v-dd597e54] h3,.markdown-content[data-v-dd597e54] h4{display:block;width:100%;box-sizing:border-box;padding-left:1.5rem!important;padding-right:1.5rem!important;padding-top:.75rem;padding-bottom:.75rem;margin-left:0;margin-right:0;margin-bottom:0;border-radius:8px;background:linear-gradient(135deg,#4f46e51a,#8b5cf614);border-left:4px solid rgba(139,92,246,.4)}.markdown-content[data-v-dd597e54] h2{margin-top:2rem;margin-bottom:.75rem;font-size:var(--pf-text-2xl, 1.5rem);font-weight:700;color:#4f46e5;line-height:1.3}.markdown-content[data-v-dd597e54] h2:first-child{margin-top:0}.markdown-content[data-v-dd597e54] h3{margin-top:1.5rem;margin-bottom:.5rem;font-size:var(--pf-text-xl, 1.25rem);font-weight:600;color:#5b21b6;line-height:1.35}.markdown-content[data-v-dd597e54] h4{margin-top:1.25rem;margin-bottom:.5rem;font-size:var(--pf-text-lg, 1.125rem);font-weight:600;color:#6d28d9}.markdown-content[data-v-dd597e54] p{margin-bottom:1.1rem;font-size:var(--pf-text-base, 1rem);line-height:1.75}.markdown-content[data-v-dd597e54] ul,.markdown-content[data-v-dd597e54] ol{margin-bottom:1.1rem;padding-left:1.5rem;font-size:var(--pf-text-base, 1rem);line-height:1.7}.markdown-content[data-v-dd597e54] li{margin-bottom:.35rem}.markdown-content[data-v-dd597e54] blockquote{margin:1.25rem 0;padding:.75rem 1.25rem;border-left:4px solid rgba(139,92,246,.4);background:#8b5cf60f;border-radius:0 8px 8px 0;font-size:var(--pf-text-base, 1rem);color:#4b5563}.markdown-content[data-v-dd597e54] img{max-width:100%;height:auto;border-radius:8px;box-shadow:0 2px 8px #00000014}.markdown-content[data-v-dd597e54] strong{font-weight:700;color:var(--default-color, #272829)}.markdown-content[data-v-dd597e54] hr{margin:2.25rem 0;border:none;border-top:1px solid rgba(139,92,246,.2)}.markdown-content[data-v-dd597e54] .markdown-table-wrapper{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:1.5rem 0}.markdown-content[data-v-dd597e54] table,.markdown-content[data-v-dd597e54] table.content-table{width:100%;min-width:min(100%,480px);border-collapse:collapse;margin:1.5rem 0;font-size:var(--pf-text-base, 1rem);background:#fff;border:1px solid rgba(79,70,229,.35);border-radius:12px;overflow:hidden;box-shadow:0 4px 20px #4f46e51f,0 1px 3px #0000000f}.markdown-content[data-v-dd597e54] .markdown-table-wrapper table{margin:0}.markdown-content[data-v-dd597e54] thead{background:linear-gradient(135deg,#4f46e5,#6366f1,#7c3aed);border-bottom:none}.markdown-content[data-v-dd597e54] th{padding:.875rem 1.25rem;text-align:left;font-weight:700;color:#fff;font-size:var(--pf-text-sm, .875rem);letter-spacing:.03em;min-width:8rem;max-width:40rem;overflow-wrap:break-word;word-break:normal;border-bottom:2px solid rgba(255,255,255,.2)}.markdown-content[data-v-dd597e54] th:first-child,.markdown-content[data-v-dd597e54] td:first-child{min-width:8rem}.markdown-content[data-v-dd597e54] th:not(:last-child){border-right:1px solid rgba(255,255,255,.2)}.markdown-content[data-v-dd597e54] td{padding:.875rem 1.25rem;border-bottom:1px solid rgba(79,70,229,.15);border-right:1px solid rgba(79,70,229,.08);color:var(--default-color, #272829);vertical-align:top;text-align:left;min-width:6rem;max-width:40rem;overflow-wrap:break-word;word-break:normal}.markdown-content[data-v-dd597e54] td:last-child{border-right:none}.markdown-content[data-v-dd597e54] tbody tr:last-child td{border-bottom:none}.markdown-content[data-v-dd597e54] tbody tr:nth-child(odd) td{background:#fafafa}.markdown-content[data-v-dd597e54] tbody tr:nth-child(2n) td{background:#4f46e50a}.markdown-content[data-v-dd597e54] tbody tr:hover td{background:#6366f114}.markdown-content[data-v-dd597e54] tbody tr:nth-child(2n):hover td{background:#6366f11f}.markdown-content[data-v-dd597e54] table td code{background:#4f46e51a;color:#4338ca;padding:.2em .45em;border-radius:6px;font-size:.9em;border:1px solid rgba(79,70,229,.2)}.markdown-content[data-v-dd597e54] .faq-item-expanded{background:linear-gradient(145deg,#fff,#faf8ff,#f5f0ff);border:1px solid rgba(99,102,241,.28);border-left:4px solid rgba(99,102,241,.6);border-radius:12px;margin-bottom:1.5rem;overflow:hidden;transition:border-color .2s ease,box-shadow .2s ease;box-shadow:0 2px 12px #6366f114,0 1px 3px #0000000a;padding:0}.markdown-content[data-v-dd597e54] .faq-item-expanded:hover{border-left-color:#6366f1d9;box-shadow:0 4px 20px #6366f11f,0 2px 6px #0000000f}.markdown-content[data-v-dd597e54] .faq-item-expanded h2{margin:0;padding:1.25rem 1.5rem .5rem;padding-left:1.5rem!important;font-size:1.35rem;font-weight:700;color:#4338ca;letter-spacing:-.02em;border:none;background:linear-gradient(135deg,#6366f114,#8b5cf60d)}.markdown-content[data-v-dd597e54] .faq-item-expanded h3,.markdown-content[data-v-dd597e54] .faq-item-expanded h4{margin:0;padding:1rem 1.5rem .75rem;padding-left:1.5rem!important;font-size:1.1rem;font-weight:600;color:#374151;border:none;background:linear-gradient(135deg,#6366f10f,#8b5cf60a)}.markdown-content[data-v-dd597e54] .faq-item-expanded p{margin:0;padding:1rem 1.5rem 1.25rem;color:#4b5563;line-height:1.8;font-size:var(--pf-text-base, 1rem);background:transparent}.markdown-content[data-v-dd597e54] .faq-item-expanded ul,.markdown-content[data-v-dd597e54] .faq-item-expanded ol{margin:0 1.5rem 1rem;padding-left:1.5rem}.markdown-content[data-v-dd597e54] .faq-item-expanded code{background:#6366f11f;color:#4338ca;padding:.2em .5em;border-radius:6px;font-size:.9em;font-family:Consolas,Monaco,Courier New,monospace;border:1px solid rgba(99,102,241,.2)}.markdown-content[data-v-dd597e54] h3.faq-q,.markdown-content[data-v-dd597e54] h4.faq-q{font-size:var(--pf-text-lg, 1.125rem);font-weight:600;color:var(--heading-color, #45505b);margin-top:1.25rem;margin-bottom:.35rem}.markdown-content[data-v-dd597e54] blockquote.warning{border-left-color:#ef444480;background:#ef44440d}.markdown-content[data-v-dd597e54] blockquote.tip{border-left-color:#22c55e80;background:#22c55e0d}.mermaid-segment-wrapper[data-v-dd597e54]{margin:1.5rem 0;width:100%;min-height:180px}.markdown-segment.mermaid-section[data-v-dd597e54]{margin-bottom:.75rem;padding:0}.markdown-segment.mermaid-section[data-v-dd597e54] h3{display:inline-block!important;width:auto!important;margin:0!important;padding:.5rem 1.25rem!important;font-size:.875rem!important;font-weight:700;color:#1e293b!important;background:#f8fafc!important;border:2px solid #6366f1!important;border-radius:12px!important;box-shadow:0 2px 8px #6366f126;letter-spacing:.02em}.markdown-segment.mermaid-section[data-v-dd597e54] h3:empty{display:none}.markdown-segment[data-v-dd597e54]{width:100%}.article-loading[data-v-75db4e19]{min-height:12rem;display:flex;align-items:center;justify-content:center}.article-loading-text[data-v-75db4e19]{font-size:var(--pf-text-lg, 1.125rem);color:var(--pf-text-secondary, #4b5563);margin:0}.article-hero-block[data-v-75db4e19]{margin-bottom:2rem}.article-title[data-v-75db4e19]{font-size:var(--pf-text-3xl, 1.875rem);font-weight:700;color:var(--heading-color, #45505b);margin-bottom:.75rem;line-height:1.25}.article-lead[data-v-75db4e19]{font-size:var(--pf-text-lg, 1.125rem);color:var(--pf-text-secondary, #4b5563);margin-bottom:.5rem;line-height:1.6}.article-meta[data-v-75db4e19]{font-size:var(--pf-text-sm, .875rem);color:#6b7280}@media (min-width: 768px){.article-title[data-v-75db4e19]{font-size:var(--pf-text-4xl, 2.25rem)}}
