@tecture/web 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sources":["../src/StyleGuide.tsx","../src/architecture/nodeStyles.ts","../src/architecture/edges/utils.ts","../src/architecture/hooks/useActiveHandleSides.ts","../src/architecture/LayoutPersistenceContext.ts","../src/architecture/ArchitectureNode.tsx","../src/architecture/edgeStyles.ts","../src/architecture/Legend.tsx","../src/architecture/edges/FloatingEdge.tsx","../src/architecture/transform.ts","../src/architecture/layout.ts","../src/architecture/LoadingSplash.tsx","../src/architecture/ArchitectureBundleContext.tsx","../src/architecture/DiagramCanvas.tsx","../src/architecture/DiagramList.tsx","../src/architecture/MermaidBlock.tsx","../src/architecture/MarkdownContent.tsx","../src/architecture/NodeDetailPanel.tsx","../src/architecture/KeyboardHint.tsx","../src/architecture/ArchitectureView.tsx","../src/App.tsx"],"sourcesContent":["/* ────────────────────────────────────────────────────────────────────────────\n * Tecture IO Style Guide\n * Blueprint design system reference — standardized Inter + JetBrains Mono pairing.\n * Ported from tecture-ai/app/style-guide with a neutral type stack.\n * ──────────────────────────────────────────────────────────────────────────── */\n\nconst colors = {\n backgrounds: [\n { token: \"--bg-deep\", value: \"#0a0f1a\", label: \"Deep\" },\n { token: \"--bg-surface\", value: \"#0f1628\", label: \"Surface\" },\n { token: \"--bg-elevated\", value: \"#141d33\", label: \"Elevated\" },\n ],\n borders: [\n { token: \"--border-default\", value: \"#1e2d4a\", label: \"Default\" },\n { token: \"--border-accent\", value: \"rgba(37, 99, 235, 0.25)\", label: \"Accent\" },\n { token: \"--grid-line\", value: \"#1a2744\", label: \"Grid Line\" },\n ],\n text: [\n { token: \"--text-primary\", value: \"#e2e8f0\", label: \"Primary\" },\n { token: \"--text-secondary\", value: \"#94a3b8\", label: \"Secondary\" },\n { token: \"--text-muted\", value: \"#64748b\", label: \"Muted\" },\n ],\n accents: [\n { token: \"--accent-cyan\", value: \"#22d3ee\", label: \"Cyan\" },\n { token: \"--accent-blue\", value: \"#3b82f6\", label: \"Blue\" },\n { token: \"--accent-amber\", value: \"#f59e0b\", label: \"Amber\" },\n { token: \"--accent-amber-hover\", value: \"#fbbf24\", label: \"Amber Hover\" },\n { token: \"--accent-emerald\", value: \"#34d399\", label: \"Emerald\" },\n ],\n};\n\nconst nodeColors = [\n { type: \"System\", accent: \"#94a3b8\", bg: \"#1e293b\" },\n { type: \"Service\", accent: \"#818cf8\", bg: \"#1e1b4b\" },\n { type: \"Database\", accent: \"#34d399\", bg: \"#022c22\" },\n { type: \"Queue\", accent: \"#fbbf24\", bg: \"#1c1a00\" },\n { type: \"Gateway\", accent: \"#a78bfa\", bg: \"#1e1338\" },\n { type: \"Frontend\", accent: \"#38bdf8\", bg: \"#0c1929\" },\n { type: \"Cache\", accent: \"#fb923c\", bg: \"#1c1006\" },\n { type: \"Storage\", accent: \"#2dd4bf\", bg: \"#042f2e\" },\n { type: \"External\", accent: \"#a1a1aa\", bg: \"#1c1c1e\" },\n];\n\nfunction SectionLabel({ number, children }: { number: string; children: React.ReactNode }) {\n return (\n <div className=\"mb-10\">\n <div className=\"blueprint-annotation animate-fade-up\">{number}</div>\n <h2\n className=\"animate-fade-up delay-100 font-display mt-3 text-2xl tracking-tight\"\n style={{ color: \"var(--text-primary)\" }}\n >\n {children}\n </h2>\n </div>\n );\n}\n\nfunction ColorSwatch({ token, value, label }: { token: string; value: string; label: string }) {\n return (\n <div className=\"group relative\">\n <div\n className=\"h-20 border transition-transform duration-200 group-hover:-translate-y-1\"\n style={{ backgroundColor: value, borderColor: \"var(--border-default)\" }}\n />\n <div className=\"mt-2.5\">\n <div className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {label}\n </div>\n <div className=\"mt-0.5 font-mono text-[11px]\" style={{ color: \"var(--text-muted)\" }}>\n {token}\n </div>\n <div className=\"mt-0.5 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {value}\n </div>\n </div>\n </div>\n );\n}\n\nexport function StyleGuide() {\n return (\n <div className=\"blueprint-grid animate-grid-reveal min-h-screen relative\">\n {/* Registration marks */}\n <svg\n className=\"absolute top-6 right-6 opacity-20 pointer-events-none\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n >\n <line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"40\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" className=\"animate-draw\" />\n <line x1=\"0\" y1=\"20\" x2=\"40\" y2=\"20\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" className=\"animate-draw\" />\n <circle cx=\"20\" cy=\"20\" r=\"8\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" fill=\"none\" className=\"animate-draw\" />\n </svg>\n <svg\n className=\"absolute bottom-6 left-6 opacity-20 pointer-events-none\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n >\n <line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"40\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" className=\"animate-draw\" />\n <line x1=\"0\" y1=\"20\" x2=\"40\" y2=\"20\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" className=\"animate-draw\" />\n <circle cx=\"20\" cy=\"20\" r=\"8\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" fill=\"none\" className=\"animate-draw\" />\n </svg>\n\n {/* Nav */}\n <nav\n className=\"animate-fade-up mx-auto flex max-w-5xl items-center justify-between px-6 py-6 border-b\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div className=\"flex items-center gap-3\">\n <a href=\"/\" className=\"font-display text-xl tracking-wide\" style={{ color: \"var(--text-primary)\" }}>\n Tecture IO\n </a>\n <span className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>|</span>\n <span className=\"text-xs\" style={{ color: \"var(--text-secondary)\" }}>Style Guide</span>\n </div>\n <div className=\"blueprint-annotation\" style={{ fontSize: \"10px\" }}>\n REV 1.0\n </div>\n </nav>\n\n {/* Hero */}\n <section className=\"mx-auto max-w-5xl px-6 pt-20 pb-16\">\n <div\n className=\"animate-fade-up delay-100 mb-6 inline-flex items-center gap-2 rounded-full border px-3 py-1 text-xs\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"var(--bg-surface)\",\n color: \"var(--text-secondary)\",\n }}\n >\n <span\n className=\"h-1.5 w-1.5 rounded-full animate-pulse-glow\"\n style={{ backgroundColor: \"var(--accent-cyan)\" }}\n />\n Blueprint Design System\n </div>\n <h1\n className=\"animate-fade-up delay-200 font-display text-4xl tracking-tight sm:text-5xl md:text-6xl\"\n style={{ color: \"#e2e8f0\" }}\n >\n Style Guide\n </h1>\n <p\n className=\"animate-fade-up delay-300 mt-4 max-w-2xl text-base leading-relaxed\"\n style={{ color: \"var(--text-secondary)\" }}\n >\n A living reference for the Tecture IO blueprint design system. Use these tokens, patterns, and components to\n build cohesive interfaces across the application.\n </p>\n </section>\n\n {/* ─────────────── COLORS ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 01\">Color Palette</SectionLabel>\n\n <div className=\"space-y-12\">\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Backgrounds\n </h3>\n <div className=\"grid grid-cols-3 gap-4\">\n {colors.backgrounds.map((c) => (\n <ColorSwatch key={c.token} {...c} />\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Borders\n </h3>\n <div className=\"grid grid-cols-3 gap-4\">\n {colors.borders.map((c) => (\n <ColorSwatch key={c.token} {...c} />\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Text\n </h3>\n <div className=\"grid grid-cols-3 gap-4\">\n {colors.text.map((c) => (\n <div key={c.token} className=\"group\">\n <div\n className=\"flex h-20 items-center justify-center border\"\n style={{ backgroundColor: \"var(--bg-deep)\", borderColor: \"var(--border-default)\" }}\n >\n <span className=\"text-lg font-medium\" style={{ color: c.value }}>\n Aa\n </span>\n </div>\n <div className=\"mt-2.5\">\n <div className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {c.label}\n </div>\n <div className=\"mt-0.5 font-mono text-[11px]\" style={{ color: \"var(--text-muted)\" }}>\n {c.token}\n </div>\n <div className=\"mt-0.5 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {c.value}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Accents\n </h3>\n <div className=\"grid grid-cols-5 gap-4\">\n {colors.accents.map((c) => (\n <div key={c.token} className=\"group\">\n <div\n className=\"h-20 border transition-transform duration-200 group-hover:-translate-y-1\"\n style={{\n background: `linear-gradient(135deg, ${c.value}22, ${c.value}66)`,\n borderColor: c.value,\n }}\n />\n <div className=\"mt-2.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"h-2.5 w-2.5 rounded-full\" style={{ backgroundColor: c.value }} />\n <span className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {c.label}\n </span>\n </div>\n <div className=\"mt-0.5 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {c.value}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Diagram Node Types\n </h3>\n <div className=\"grid grid-cols-3 gap-3 sm:grid-cols-5\">\n {nodeColors.map((n) => (\n <div\n key={n.type}\n className=\"border p-3\"\n style={{ backgroundColor: n.bg, borderColor: `${n.accent}33` }}\n >\n <div className=\"mb-2 h-1 w-6\" style={{ backgroundColor: n.accent }} />\n <div className=\"text-xs font-medium\" style={{ color: n.accent }}>\n {n.type}\n </div>\n <div className=\"mt-1 font-mono text-[9px]\" style={{ color: `${n.accent}99` }}>\n {n.accent}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── TYPOGRAPHY ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 02\">Typography</SectionLabel>\n\n <div className=\"space-y-12\">\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2\">\n {[\n {\n name: \"Inter\",\n variable: \"--font-sans · --font-display\",\n usage: \"Body, UI, and display headings (600 weight, tight tracking)\",\n sample: \"Architecture\",\n style: { fontFamily: \"var(--font-sans)\", fontWeight: 600, letterSpacing: \"-0.02em\" },\n },\n {\n name: \"JetBrains Mono\",\n variable: \"--font-mono\",\n usage: \"Code, annotations, technical labels\",\n sample: \"tecture.io/api\",\n style: { fontFamily: \"var(--font-mono)\" },\n },\n ].map((font) => (\n <div\n key={font.name}\n className=\"relative border p-6 overflow-hidden\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n <div className=\"text-3xl mb-4\" style={{ ...font.style, color: \"var(--text-primary)\" }}>\n {font.sample}\n </div>\n <div className=\"text-xs font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n {font.name}\n </div>\n <div className=\"mt-1 font-mono text-[10px]\" style={{ color: \"var(--accent-cyan)\" }}>\n {font.variable}\n </div>\n <div className=\"mt-1 text-xs\" style={{ color: \"var(--text-muted)\" }}>\n {font.usage}\n </div>\n </div>\n ))}\n </div>\n\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Type Scale\n </h3>\n <div\n className=\"border p-8 space-y-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n 7xl — 72px\n </span>\n <span\n className=\"font-display text-7xl tracking-tight\"\n style={{ color: \"var(--text-primary)\" }}\n >\n Heading\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n 5xl — 48px\n </span>\n <span\n className=\"font-display text-5xl tracking-tight\"\n style={{ color: \"var(--text-primary)\" }}\n >\n Page Title\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n 2xl — 24px\n </span>\n <span\n className=\"font-display text-2xl tracking-tight\"\n style={{ color: \"var(--text-primary)\" }}\n >\n Section Heading\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n lg — 18px\n </span>\n <span className=\"text-lg font-semibold tracking-tight\" style={{ color: \"var(--text-primary)\" }}>\n App Header / Nav Title\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n sm — 14px\n </span>\n <span className=\"text-sm font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n Card Title / Label\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n sm — 14px\n </span>\n <span className=\"text-sm leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n Body text and descriptions use a relaxed line-height for comfortable reading across longer passages.\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n xs — 12px\n </span>\n <span className=\"text-xs\" style={{ color: \"var(--text-secondary)\" }}>\n Metadata · Updated Apr 18, 2026 · 3 diagrams\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n 11px mono\n </span>\n <span className=\"blueprint-annotation\">Blueprint Annotation</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── COMPONENTS ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 03\">Components</SectionLabel>\n\n <div className=\"space-y-16\">\n {/* Buttons */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Buttons\n </h3>\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex flex-wrap items-center gap-4\">\n <button\n className=\"rounded-none px-6 py-2.5 text-sm font-semibold transition-all hover:brightness-110\"\n style={{ backgroundColor: \"#f59e0b\", color: \"#0a0f1a\" }}\n >\n Primary Action\n </button>\n\n <button\n className=\"rounded-none border px-6 py-2.5 text-sm font-medium transition-all\"\n style={{ borderColor: \"rgba(34, 211, 238, 0.4)\", color: \"#22d3ee\" }}\n >\n Secondary Action\n </button>\n\n <button\n className=\"rounded-none border px-4 py-1.5 text-sm font-medium transition-all\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"var(--bg-surface)\",\n color: \"var(--text-secondary)\",\n }}\n >\n Ghost\n </button>\n\n <button\n className=\"rounded-lg border px-3 py-1.5 text-xs font-medium transition-colors\"\n style={{ borderColor: \"rgba(113, 113, 122, 0.5)\", color: \"#a1a1aa\" }}\n >\n Nav Item\n </button>\n </div>\n\n <div className=\"mt-6 grid grid-cols-2 gap-4 sm:grid-cols-4\">\n {[\n { label: \"Primary\", desc: \"Main CTA — amber bg, dark text, no border-radius\", token: \"--accent-amber\" },\n { label: \"Secondary\", desc: \"Cyan border at 40% opacity, cyan text, no border-radius\", token: \"--accent-cyan\" },\n { label: \"Ghost\", desc: \"Surface bg, default border, secondary text, no border-radius\", token: \"--border-default\" },\n { label: \"Nav Item\", desc: \"Zinc border, rounded-lg, smaller padding, xs text\", token: \"zinc-700/50\" },\n ].map((b) => (\n <div key={b.label}>\n <div className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {b.label}\n </div>\n <div className=\"mt-1 text-[11px] leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n {b.desc}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Cards */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Cards\n </h3>\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2\">\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n List Card (authenticated view)\n </div>\n <div className=\"group flex items-start gap-3 rounded-xl border border-zinc-800 bg-zinc-900/50 p-4 transition-all hover:border-zinc-600 hover:bg-zinc-900\">\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-zinc-800/80 text-zinc-500 transition-colors group-hover:bg-zinc-700/80 group-hover:text-zinc-400\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"18\" rx=\"2\" />\n <path d=\"M8 7h8M8 11h8M8 15h4\" />\n </svg>\n </div>\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-zinc-200 group-hover:text-white\">\n Example Architecture\n </div>\n <div className=\"mt-0.5 flex items-center gap-2 text-xs text-zinc-500\">\n <span>4 diagrams</span>\n <span>&middot;</span>\n <span>Updated Apr 18, 2026</span>\n </div>\n <div className=\"mt-1 truncate text-xs text-zinc-500\">\n Microservices architecture for the payment platform\n </div>\n </div>\n </div>\n </div>\n\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Feature Card (landing page)\n </div>\n <div\n className=\"relative border p-6 overflow-hidden\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div\n className=\"absolute top-3 right-4 font-mono text-[10px] select-none\"\n style={{ color: \"var(--text-muted)\" }}\n >\n FIG.01\n </div>\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n <div\n className=\"mb-3 flex h-9 w-9 items-center justify-center border\"\n style={{\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n backgroundColor: \"rgba(34, 211, 238, 0.05)\",\n color: \"var(--accent-cyan)\",\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n </div>\n <h3 className=\"text-sm font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n Feature Title\n </h3>\n <p className=\"mt-2 text-sm leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n Description text explaining the feature. Uses relaxed line-height for readability.\n </p>\n </div>\n </div>\n\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Step Card (landing page)\n </div>\n <div\n className=\"relative border p-6 overflow-hidden\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div\n className=\"absolute top-2 right-3 font-mono text-4xl font-bold select-none\"\n style={{ color: \"rgba(34, 211, 238, 0.08)\" }}\n >\n 01\n </div>\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n <div className=\"relative\">\n <h3 className=\"text-sm font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n Step Title\n </h3>\n <p className=\"mt-2 text-sm leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n Step description with instructions for the user to follow.\n </p>\n </div>\n </div>\n </div>\n\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Empty State\n </div>\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center border rounded-xl\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"mb-4 flex h-12 w-12 items-center justify-center rounded-xl bg-zinc-800/80 text-zinc-500\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" />\n </svg>\n </div>\n <p className=\"text-sm font-medium text-zinc-300\">No items yet</p>\n <p className=\"mt-1 text-xs text-zinc-500\">Description of what will appear here.</p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Badges & Pills */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Badges &amp; Indicators\n </h3>\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex flex-wrap items-center gap-4\">\n <div\n className=\"inline-flex items-center gap-2 rounded-full border px-3 py-1 text-xs\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"var(--bg-surface)\",\n color: \"var(--text-secondary)\",\n }}\n >\n <span\n className=\"h-1.5 w-1.5 rounded-full animate-pulse-glow\"\n style={{ backgroundColor: \"var(--accent-cyan)\" }}\n />\n Status Pill\n </div>\n\n <span\n className=\"border px-2 py-0.5 text-[10px] font-medium\"\n style={{\n backgroundColor: \"rgba(34, 211, 238, 0.1)\",\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n color: \"#22d3ee\",\n }}\n >\n Tag Label\n </span>\n\n <span className=\"text-xs font-medium uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Section Label\n </span>\n\n <span className=\"blueprint-annotation\">Annotation</span>\n\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n FIG.01\n </span>\n </div>\n </div>\n </div>\n\n {/* Code blocks */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Code &amp; Terminal\n </h3>\n <div className=\"border overflow-hidden\" style={{ borderColor: \"#1e2d4a\", backgroundColor: \"#0f1628\" }}>\n <div className=\"flex items-center justify-between px-4 pt-4 pb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium\" style={{ color: \"#e2e8f0\" }}>\n Terminal Command\n </span>\n <span\n className=\"border px-2 py-0.5 text-[10px] font-medium\"\n style={{\n backgroundColor: \"rgba(34, 211, 238, 0.1)\",\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n color: \"#22d3ee\",\n }}\n >\n Example\n </span>\n </div>\n </div>\n <div className=\"px-4 pb-3\">\n <p className=\"text-xs mb-2\" style={{ color: \"#64748b\" }}>\n Instruction text above the command:\n </p>\n <pre\n className=\"overflow-x-auto border px-4 py-3 text-xs leading-relaxed\"\n style={{ backgroundColor: \"#0a0f1a\", borderColor: \"#1e2d4a\", color: \"#e2e8f0\" }}\n >\n <code>\n <span style={{ color: \"rgba(34, 211, 238, 0.5)\" }}>$</span> npx @tecture/core --port 3001\n </code>\n </pre>\n </div>\n </div>\n </div>\n\n {/* Icon containers */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Icon Containers\n </h3>\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex flex-wrap items-end gap-6\">\n <div className=\"text-center\">\n <div className=\"mb-2 flex h-12 w-12 items-center justify-center rounded-xl bg-zinc-800/80 text-zinc-500\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" />\n </svg>\n </div>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 48 × 48\n </span>\n </div>\n\n <div className=\"text-center\">\n <div\n className=\"mb-2 flex h-10 w-10 items-center justify-center border\"\n style={{\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n backgroundColor: \"rgba(34, 211, 238, 0.05)\",\n color: \"var(--accent-cyan)\",\n }}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n </div>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 40 × 40\n </span>\n </div>\n\n <div className=\"text-center\">\n <div\n className=\"mb-2 flex h-9 w-9 items-center justify-center border\"\n style={{\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n backgroundColor: \"rgba(34, 211, 238, 0.05)\",\n color: \"var(--accent-cyan)\",\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n </div>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 36 × 36\n </span>\n </div>\n\n <div className=\"text-center\">\n <div className=\"mb-2 flex h-8 w-8 items-center justify-center rounded-lg bg-zinc-800/80 text-zinc-500\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"18\" rx=\"2\" />\n <path d=\"M8 7h8M8 11h8M8 15h4\" />\n </svg>\n </div>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 32 × 32\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── ANIMATION ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 04\">Animation &amp; Motion</SectionLabel>\n\n <div className=\"space-y-8\">\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"grid grid-cols-1 gap-8 sm:grid-cols-2\">\n {[\n {\n name: \"fade-up\",\n class: \"animate-fade-up\",\n duration: \"0.7s\",\n easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n desc: \"Primary entrance animation. Elements rise 24px with opacity fade.\",\n },\n {\n name: \"draw-line\",\n class: \"animate-draw\",\n duration: \"2s\",\n easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n desc: \"SVG stroke animation for blueprint lines and decorative elements.\",\n },\n {\n name: \"pulse-glow\",\n class: \"animate-pulse-glow\",\n duration: \"3s infinite\",\n easing: \"ease-in-out\",\n desc: \"Continuous cyan halo pulse for live status indicators.\",\n },\n {\n name: \"grid-reveal\",\n class: \"animate-grid-reveal\",\n duration: \"1.5s\",\n easing: \"ease-out\",\n desc: \"Background fade-in for the blueprint grid container.\",\n },\n {\n name: \"slide-in-right\",\n class: \"animate-slide-in-right\",\n duration: \"0.2s\",\n easing: \"ease-out\",\n desc: \"Panel entrance from right edge. Used for side panels and drawers.\",\n },\n ].map((anim) => (\n <div key={anim.name} className=\"flex gap-4\">\n <div\n className=\"shrink-0 flex h-10 w-10 items-center justify-center border\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n {anim.name === \"pulse-glow\" ? (\n <span\n className=\"h-3 w-3 rounded-full animate-pulse-glow\"\n style={{ backgroundColor: \"var(--accent-cyan)\" }}\n />\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M2 14L8 2L14 14\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1\" opacity=\"0.5\" />\n </svg>\n )}\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n {anim.name}\n </span>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--accent-cyan)\" }}>\n {anim.duration}\n </span>\n </div>\n <div className=\"mt-0.5 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {anim.easing}\n </div>\n <div className=\"mt-1 text-xs leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n {anim.desc}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Stagger Delays\n </h3>\n <div\n className=\"border p-6\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex gap-2\">\n {[100, 200, 300, 400, 500, 600, 700, 800].map((delay) => (\n <div key={delay} className=\"flex-1 text-center\">\n <div\n className=\"h-2 mb-2\"\n style={{\n backgroundColor: \"var(--accent-cyan)\",\n opacity: 0.15 + (delay / 800) * 0.85,\n }}\n />\n <span className=\"font-mono text-[9px]\" style={{ color: \"var(--text-muted)\" }}>\n {delay}ms\n </span>\n </div>\n ))}\n </div>\n <div className=\"mt-3 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Apply with .delay-100 through .delay-800 classes for cascading entrance effects\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── LAYOUT ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 05\">Layout &amp; Spacing</SectionLabel>\n\n <div className=\"space-y-10\">\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Container Widths\n </h3>\n <div className=\"space-y-3\">\n {[\n { label: \"max-w-5xl\", width: \"64rem (1024px)\", usage: \"Landing hero, wide layouts\" },\n { label: \"max-w-4xl\", width: \"56rem (896px)\", usage: \"Standard content sections, authenticated views\" },\n { label: \"max-w-2xl\", width: \"42rem (672px)\", usage: \"Narrow text blocks, descriptions\" },\n { label: \"max-w-xl\", width: \"36rem (576px)\", usage: \"Hero description paragraphs\" },\n ].map((c) => (\n <div key={c.label} className=\"flex items-center gap-4\">\n <span\n className=\"shrink-0 w-24 font-mono text-[11px] text-right\"\n style={{ color: \"var(--accent-cyan)\" }}\n >\n {c.label}\n </span>\n <div\n className=\"flex-1 h-6 border flex items-center px-3\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-elevated)\" }}\n >\n <span className=\"text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {c.width} — {c.usage}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Grid Patterns\n </h3>\n <div className=\"space-y-6\">\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 2 columns — sm:grid-cols-2, gap-3\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n {[1, 2].map((i) => (\n <div\n key={i}\n className=\"h-12 border flex items-center justify-center\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-elevated)\" }}\n >\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {i}\n </span>\n </div>\n ))}\n </div>\n </div>\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 3 columns — sm:grid-cols-3, gap-6\n </div>\n <div className=\"grid grid-cols-3 gap-6\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-12 border flex items-center justify-center\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-elevated)\" }}\n >\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {i}\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Common Spacing Values\n </h3>\n <div\n className=\"border p-6\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"space-y-3\">\n {[\n { label: \"px-6\", value: \"24px\", usage: \"Page horizontal padding\" },\n { label: \"py-6\", value: \"24px\", usage: \"Nav vertical padding\" },\n { label: \"p-6\", value: \"24px\", usage: \"Feature card padding\" },\n { label: \"p-4\", value: \"16px\", usage: \"List card padding\" },\n { label: \"gap-6\", value: \"24px\", usage: \"Feature card grid gap\" },\n { label: \"gap-3\", value: \"12px\", usage: \"List card grid gap, inline element gap\" },\n { label: \"gap-2\", value: \"8px\", usage: \"Tight inline spacing\" },\n { label: \"mt-12\", value: \"48px\", usage: \"Grid top margin after section header\" },\n { label: \"py-20\", value: \"80px\", usage: \"Section vertical padding\" },\n { label: \"pt-24\", value: \"96px\", usage: \"Hero top padding\" },\n ].map((s) => (\n <div key={s.label} className=\"flex items-center gap-4\">\n <span\n className=\"shrink-0 w-16 font-mono text-[11px] text-right\"\n style={{ color: \"var(--accent-cyan)\" }}\n >\n {s.label}\n </span>\n <div\n className=\"shrink-0 w-12 font-mono text-[10px]\"\n style={{ color: \"var(--text-muted)\" }}\n >\n {s.value}\n </div>\n <div className=\"flex-1 text-[11px]\" style={{ color: \"var(--text-muted)\" }}>\n {s.usage}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── DECORATIVE ELEMENTS ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 06\">Blueprint Decorations</SectionLabel>\n\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"grid grid-cols-1 gap-10 sm:grid-cols-3\">\n <div className=\"text-center\">\n <div\n className=\"mx-auto relative w-24 h-24 border\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-deep)\" }}\n >\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n </div>\n <div className=\"mt-3 text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n Corner Bracket\n </div>\n <div className=\"mt-1 text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Top-left of feature cards\n </div>\n </div>\n\n <div className=\"text-center\">\n <div\n className=\"mx-auto flex items-center justify-center w-24 h-24 border\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-deep)\" }}\n >\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\n <line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"40\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" />\n <line x1=\"0\" y1=\"20\" x2=\"40\" y2=\"20\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" />\n <circle cx=\"20\" cy=\"20\" r=\"8\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" fill=\"none\" />\n </svg>\n </div>\n <div className=\"mt-3 text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n Registration Mark\n </div>\n <div className=\"mt-1 text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Page corners at 20% opacity\n </div>\n </div>\n\n <div className=\"text-center\">\n <div\n className=\"mx-auto w-24 h-24 blueprint-grid border\"\n style={{ borderColor: \"var(--border-default)\" }}\n />\n <div className=\"mt-3 text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n Blueprint Grid\n </div>\n <div className=\"mt-1 text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 100px major / 20px minor grid\n </div>\n </div>\n </div>\n\n <div className=\"mt-10 flex justify-center\">\n <div\n className=\"inline-block border border-dashed px-8 py-4\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div\n className=\"font-mono text-[10px] tracking-widest uppercase mb-1\"\n style={{ color: \"var(--text-muted)\" }}\n >\n Title Block\n </div>\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n Used as footer element — dashed border, centered\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── USAGE NOTES ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 07\">Usage Guidelines</SectionLabel>\n\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2\">\n {[\n {\n title: \"Landing pages\",\n items: [\n \"Use blueprint-grid background with animate-grid-reveal\",\n \"Apply .font-display on hero headings (Inter 600, -0.02em tracking)\",\n \"Stagger entrance animations with delay-100 to delay-800\",\n \"Include registration marks in page corners\",\n \"Use corner brackets on feature cards\",\n \"Buttons: rounded-none (angular, blueprint aesthetic)\",\n ],\n },\n {\n title: \"Authenticated views\",\n items: [\n \"Plain bg-deep background (no blueprint grid)\",\n \"Inter for all text at normal / medium weight\",\n \"Cards: rounded-xl with zinc-800 borders\",\n \"Hover states: lighten borders and backgrounds\",\n \"Use max-w-4xl for content containers\",\n \"Buttons: rounded-lg for nav items\",\n ],\n },\n {\n title: \"Dark theme principles\",\n items: [\n \"Three-tier background depth: deep → surface → elevated\",\n \"Text hierarchy: primary → secondary → muted\",\n \"Borders at low opacity to maintain depth without harsh lines\",\n \"Accent colors at reduced opacity for backgrounds (5–10%)\",\n \"Cyan as the primary accent, amber for CTAs only\",\n ],\n },\n {\n title: \"Motion principles\",\n items: [\n \"All entrances use cubic-bezier(0.16, 1, 0.3, 1) — fast start, gentle settle\",\n \"Stagger sibling elements by 100ms increments\",\n \"Keep hover transitions simple: transition-all or transition-colors\",\n \"Reserve pulse-glow for live status indicators only\",\n \"SVG blueprint lines use animate-draw for progressive reveal\",\n ],\n },\n ].map((section) => (\n <div\n key={section.title}\n className=\"relative border p-6 overflow-hidden\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n <h3 className=\"text-sm font-semibold mb-3\" style={{ color: \"var(--text-primary)\" }}>\n {section.title}\n </h3>\n <ul className=\"space-y-1.5\">\n {section.items.map((item, i) => (\n <li\n key={i}\n className=\"flex gap-2 text-xs leading-relaxed\"\n style={{ color: \"var(--text-muted)\" }}\n >\n <span style={{ color: \"var(--accent-cyan)\" }}>·</span>\n {item}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </section>\n\n {/* Footer */}\n <footer className=\"py-12 text-center\">\n <div\n className=\"mx-auto inline-block border border-dashed px-8 py-4\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div\n className=\"font-mono text-[10px] tracking-widest uppercase mb-1\"\n style={{ color: \"var(--text-muted)\" }}\n >\n Style Guide\n </div>\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n Tecture IO Blueprint Design System — Rev 1.0\n </div>\n </div>\n </footer>\n </div>\n );\n}\n","export interface IconPath {\n d: string;\n fill?: string;\n stroke?: string;\n strokeWidth?: number;\n opacity?: number;\n}\n\nexport interface NodeStyle {\n label: string;\n bg: string;\n bgHover: string;\n border: string;\n accent: string;\n text: string;\n iconPaths: IconPath[];\n accentGlow: string;\n}\n\nconst styles: Record<string, NodeStyle> = {\n system: {\n label: \"System\",\n bg: \"#0d1320\",\n bgHover: \"#111827\",\n border: \"#1e3a5f\",\n accent: \"#94a3b8\",\n text: \"#e2e8f0\",\n iconPaths: [\n { d: \"M21 16V8a2 2 0 00-1-1.73l-7-4a2 2 0 00-2 0l-7 4A2 2 0 003 8v8a2 2 0 001 1.73l7 4a2 2 0 002 0l7-4A2 2 0 0021 16z\", fill: \"#94a3b8\", opacity: 0.1 },\n { d: \"M21 16V8a2 2 0 00-1-1.73l-7-4a2 2 0 00-2 0l-7 4A2 2 0 003 8v8a2 2 0 001 1.73l7 4a2 2 0 002 0l7-4A2 2 0 0021 16z\", stroke: \"#94a3b8\", strokeWidth: 1.5 },\n { d: \"M3.27 6.96L12 12.01l8.73-5.05\", stroke: \"#94a3b8\", strokeWidth: 1.5 },\n { d: \"M12 22.08V12\", stroke: \"#94a3b8\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(148,163,184,0.08)\",\n },\n person: {\n label: \"Person\",\n bg: \"#0f1419\",\n bgHover: \"#151c24\",\n border: \"#334155\",\n accent: \"#cbd5e1\",\n text: \"#f1f5f9\",\n iconPaths: [\n { d: \"M12 12a4 4 0 100-8 4 4 0 000 8z\", fill: \"#cbd5e1\", opacity: 0.1 },\n { d: \"M12 12a4 4 0 100-8 4 4 0 000 8z\", stroke: \"#cbd5e1\", strokeWidth: 1.5 },\n { d: \"M4 21a8 8 0 0116 0\", stroke: \"#cbd5e1\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(203,213,225,0.08)\",\n },\n service: {\n label: \"Service\",\n bg: \"#0d1025\",\n bgHover: \"#131738\",\n border: \"#252680\",\n accent: \"#818cf8\",\n text: \"#e0e7ff\",\n iconPaths: [\n { d: \"M12 15a3 3 0 100-6 3 3 0 000 6z\", fill: \"#818cf8\", opacity: 0.1 },\n { d: \"M12 15a3 3 0 100-6 3 3 0 000 6z\", stroke: \"#818cf8\", strokeWidth: 1.5 },\n { d: \"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\", stroke: \"#818cf8\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(129,140,248,0.08)\",\n },\n database: {\n label: \"Database\",\n bg: \"#081a14\",\n bgHover: \"#0c2a1e\",\n border: \"#065f46\",\n accent: \"#34d399\",\n text: \"#d1fae5\",\n iconPaths: [\n { d: \"M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4v10c0 2.21-3.582 4-8 4s-8-1.79-8-4V7z\", fill: \"#34d399\", opacity: 0.1 },\n { d: \"M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4\", stroke: \"#34d399\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(52,211,153,0.08)\",\n },\n queue: {\n label: \"Queue\",\n bg: \"#18140a\",\n bgHover: \"#241e10\",\n border: \"#854d0e\",\n accent: \"#fbbf24\",\n text: \"#fef3c7\",\n iconPaths: [\n { d: \"M4 4h16v5H4zM4 13h16v5H4z\", fill: \"#fbbf24\", opacity: 0.08 },\n { d: \"M21 12l-18 0\", stroke: \"#fbbf24\", strokeWidth: 1.5 },\n { d: \"M4 4h16v5H4zM4 13h16v5H4z\", stroke: \"#fbbf24\", strokeWidth: 1.5 },\n { d: \"M8 8h.01M8 17h.01\", stroke: \"#fbbf24\", strokeWidth: 2.5 },\n ],\n accentGlow: \"rgba(251,191,36,0.08)\",\n },\n gateway: {\n label: \"Gateway\",\n bg: \"#100d20\",\n bgHover: \"#181535\",\n border: \"#4c1d95\",\n accent: \"#a78bfa\",\n text: \"#ede9fe\",\n iconPaths: [\n { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\", fill: \"#a78bfa\", opacity: 0.1 },\n { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\", stroke: \"#a78bfa\", strokeWidth: 1.5 },\n { d: \"M9 12l2 2 4-4\", stroke: \"#a78bfa\", strokeWidth: 2 },\n ],\n accentGlow: \"rgba(167,139,250,0.08)\",\n },\n frontend: {\n label: \"Frontend\",\n bg: \"#081420\",\n bgHover: \"#0c1e35\",\n border: \"#0c4a6e\",\n accent: \"#38bdf8\",\n text: \"#e0f2fe\",\n iconPaths: [\n { d: \"M3 5a2 2 0 012-2h14a2 2 0 012 2v10a2 2 0 01-2 2H5a2 2 0 01-2-2V5z\", fill: \"#38bdf8\", opacity: 0.1 },\n { d: \"M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\", stroke: \"#38bdf8\", strokeWidth: 1.5 },\n { d: \"M3 13h18\", stroke: \"#38bdf8\", strokeWidth: 1.5 },\n { d: \"M9.75 17L9 20l-1 1h8l-1-1-.75-3\", stroke: \"#38bdf8\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(56,189,248,0.08)\",\n },\n cache: {\n label: \"Cache\",\n bg: \"#18100a\",\n bgHover: \"#241810\",\n border: \"#7c2d12\",\n accent: \"#fb923c\",\n text: \"#ffedd5\",\n iconPaths: [\n { d: \"M13 10V3L4 14h7v7l9-11h-7z\", fill: \"#fb923c\", opacity: 0.1 },\n { d: \"M13 10V3L4 14h7v7l9-11h-7z\", stroke: \"#fb923c\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(251,146,60,0.08)\",\n },\n storage: {\n label: \"Storage\",\n bg: \"#081816\",\n bgHover: \"#0c2826\",\n border: \"#134e4a\",\n accent: \"#2dd4bf\",\n text: \"#ccfbf1\",\n iconPaths: [\n { d: \"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\", fill: \"#2dd4bf\", opacity: 0.1 },\n { d: \"M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V9a2 2 0 012-2h6l2-2h6a2 2 0 012 2v12z\", stroke: \"#2dd4bf\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(45,212,191,0.08)\",\n },\n external: {\n label: \"External\",\n bg: \"#0d1118\",\n bgHover: \"#141a22\",\n border: \"#1e2d4a\",\n accent: \"#a1a1aa\",\n text: \"#e4e4e7\",\n iconPaths: [\n { d: \"M12 21a9 9 0 100-18 9 9 0 000 18z\", fill: \"#a1a1aa\", opacity: 0.08 },\n { d: \"M12 21a9 9 0 100-18 9 9 0 000 18z\", stroke: \"#a1a1aa\", strokeWidth: 1.5 },\n { d: \"M3.6 9h16.8M3.6 15h16.8\", stroke: \"#a1a1aa\", strokeWidth: 1.5 },\n { d: \"M12 3c2.2 2.5 3.5 5.5 3.5 9s-1.3 6.5-3.5 9c-2.2-2.5-3.5-5.5-3.5-9s1.3-6.5 3.5-9z\", stroke: \"#a1a1aa\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(161,161,170,0.08)\",\n },\n};\n\nconst defaultStyle: NodeStyle = {\n label: \"Component\",\n bg: \"#0a0f1a\",\n bgHover: \"#0f1628\",\n border: \"#1e2d4a\",\n accent: \"#64748b\",\n text: \"#e2e8f0\",\n iconPaths: [\n { d: \"M20 7l-8-4-8 4v10l8 4 8-4V7z\", fill: \"#64748b\", opacity: 0.1 },\n { d: \"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\", stroke: \"#64748b\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(100,116,139,0.08)\",\n};\n\nexport function getNodeStyle(type?: string): NodeStyle {\n return type ? (styles[type] ?? defaultStyle) : defaultStyle;\n}\n","import { Position, type InternalNode } from \"@xyflow/react\";\n\ntype NodeLike = Pick<InternalNode, \"internals\" | \"measured\">;\n\nfunction getNodeCenter(node: NodeLike) {\n return {\n x: node.internals.positionAbsolute.x + (node.measured?.width ?? 0) / 2,\n y: node.internals.positionAbsolute.y + (node.measured?.height ?? 0) / 2,\n };\n}\n\nexport function getClosestSide(nodeA: NodeLike, nodeB: NodeLike): Position {\n const centerA = getNodeCenter(nodeA);\n const centerB = getNodeCenter(nodeB);\n\n const horizontalDiff = Math.abs(centerA.x - centerB.x);\n const verticalDiff = Math.abs(centerA.y - centerB.y);\n\n if (horizontalDiff > verticalDiff) {\n return centerA.x > centerB.x ? Position.Left : Position.Right;\n }\n return centerA.y > centerB.y ? Position.Top : Position.Bottom;\n}\n\nfunction getParams(\n nodeA: NodeLike,\n nodeB: NodeLike,\n handleType: \"source\" | \"target\",\n): [number, number, Position] {\n const centerA = getNodeCenter(nodeA);\n const centerB = getNodeCenter(nodeB);\n\n const horizontalDiff = Math.abs(centerA.x - centerB.x);\n const verticalDiff = Math.abs(centerA.y - centerB.y);\n\n let position: Position;\n if (horizontalDiff > verticalDiff) {\n position = centerA.x > centerB.x ? Position.Left : Position.Right;\n } else {\n position = centerA.y > centerB.y ? Position.Top : Position.Bottom;\n }\n\n const [x, y] = getHandleCoordsByPosition(nodeA, position, handleType);\n return [x, y, position];\n}\n\nfunction getHandleCoordsByPosition(\n node: NodeLike,\n handlePosition: Position,\n handleType: \"source\" | \"target\",\n): [number, number] {\n const bounds = node.internals.handleBounds?.[handleType];\n const handle = bounds?.find((h) => h.position === handlePosition);\n\n if (!handle) {\n return [\n node.internals.positionAbsolute.x + (node.measured?.width ?? 0) / 2,\n node.internals.positionAbsolute.y + (node.measured?.height ?? 0) / 2,\n ];\n }\n\n let offsetX = handle.width / 2;\n let offsetY = handle.height / 2;\n\n switch (handlePosition) {\n case Position.Left:\n offsetX = 0;\n break;\n case Position.Right:\n offsetX = handle.width;\n break;\n case Position.Top:\n offsetY = 0;\n break;\n case Position.Bottom:\n offsetY = handle.height;\n break;\n }\n\n const x = node.internals.positionAbsolute.x + handle.x + offsetX;\n const y = node.internals.positionAbsolute.y + handle.y + offsetY;\n return [x, y];\n}\n\nexport function getEdgeParams(source: NodeLike, target: NodeLike) {\n const [sx, sy, sourcePos] = getParams(source, target, \"source\");\n const [tx, ty, targetPos] = getParams(target, source, \"target\");\n return { sx, sy, tx, ty, sourcePos, targetPos };\n}\n","import { useMemo } from \"react\";\nimport { useNodeId, useStore, type ReactFlowState } from \"@xyflow/react\";\nimport { getClosestSide } from \"../edges/utils\";\n\nexport function useActiveHandleSides(): Set<string> {\n const nodeId = useNodeId();\n\n const activeSides = useStore((state: ReactFlowState) => {\n if (!nodeId) return new Set<string>();\n const thisNode = state.nodeLookup.get(nodeId);\n if (!thisNode) return new Set<string>();\n\n const sides = new Set<string>();\n for (const edge of state.edges) {\n let otherNodeId: string | null = null;\n if (edge.source === nodeId) otherNodeId = edge.target;\n else if (edge.target === nodeId) otherNodeId = edge.source;\n if (!otherNodeId) continue;\n\n const otherNode = state.nodeLookup.get(otherNodeId);\n if (!otherNode) continue;\n sides.add(getClosestSide(thisNode, otherNode));\n }\n return sides;\n });\n\n return useMemo(() => activeSides, [activeSides]);\n}\n","import { createContext } from \"react\";\n\nexport interface LayoutPersistenceContextValue {\n notifyLayoutChanged: () => void;\n}\n\nexport const LayoutPersistenceContext =\n createContext<LayoutPersistenceContextValue | null>(null);\n","import { memo, useCallback, useContext } from \"react\";\nimport {\n Handle,\n NodeResizer,\n Position,\n useNodeId,\n useStore,\n type NodeProps,\n type ReactFlowState,\n} from \"@xyflow/react\";\nimport { getNodeStyle, type NodeStyle } from \"./nodeStyles\";\nimport type { ArchNodeData } from \"./transform\";\nimport { useActiveHandleSides } from \"./hooks/useActiveHandleSides\";\nimport { LayoutPersistenceContext } from \"./LayoutPersistenceContext\";\n\nconst HANDLE_SIDES = [\n { position: Position.Top, prefix: \"top\" },\n { position: Position.Bottom, prefix: \"bottom\" },\n { position: Position.Left, prefix: \"left\" },\n { position: Position.Right, prefix: \"right\" },\n] as const;\n\nfunction ArchitectureNodeInner({ data, selected }: NodeProps) {\n const d = data as ArchNodeData;\n const style = getNodeStyle(d.nodeType);\n const activeSides = useActiveHandleSides();\n\n const handleDrillDown = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (d.subDiagramId) {\n window.location.hash = `#/diagram/${d.subDiagramId}`;\n }\n };\n\n if (d.isContainer || d.hasChildren) {\n return (\n <ContainerNode\n d={d}\n style={style}\n selected={selected ?? false}\n activeSides={activeSides}\n onDrillDown={handleDrillDown}\n />\n );\n }\n\n return (\n <div\n className={`group relative border px-5 py-4 text-center ${d.hasSubDiagram ? \"transition-shadow duration-200 hover:ring-1 hover:ring-offset-1 hover:ring-offset-transparent\" : \"\"}`}\n style={{\n background: style.bg,\n borderColor: style.border,\n color: style.text,\n minWidth: 160,\n cursor: \"pointer\",\n [\"--tw-ring-color\" as string]: d.hasSubDiagram ? style.accent : undefined,\n } as React.CSSProperties}\n >\n <CornerMarks accent={style.accent} />\n\n {HANDLE_SIDES.map(({ position, prefix }) => {\n const isActive = activeSides.has(position);\n return (\n <HandlePair\n key={prefix}\n position={position}\n prefix={prefix}\n style={style}\n isActive={isActive}\n />\n );\n })}\n\n <div className=\"mx-auto mb-2.5 flex items-center justify-center\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0\"\n >\n {style.iconPaths.map((p, i) => (\n <path\n key={i}\n d={p.d}\n fill={p.fill ?? \"none\"}\n stroke={p.stroke ?? \"none\"}\n strokeWidth={p.strokeWidth ?? 0}\n opacity={p.opacity ?? 1}\n />\n ))}\n </svg>\n </div>\n\n <div\n className=\"truncate text-[13px] leading-tight font-semibold tracking-tight\"\n style={{ fontFamily: \"var(--font-sans)\" }}\n >\n {d.label}\n </div>\n\n {d.technology && (\n <div\n className=\"mx-auto mt-1 w-fit px-1.5 py-px text-[9px] leading-tight font-medium\"\n style={{\n color: `${style.accent}99`,\n fontFamily: \"var(--font-mono)\",\n letterSpacing: \"0.08em\",\n }}\n >\n {d.technology}\n </div>\n )}\n\n {d.hasSubDiagram && (\n <div\n onClick={handleDrillDown}\n className=\"mx-auto mt-2 flex w-fit cursor-pointer items-center gap-1 px-2.5 py-0.5 text-[10px] font-medium transition-opacity hover:opacity-80\"\n style={{\n background: `${style.accent}10`,\n color: style.accent,\n border: `1px solid ${style.accent}25`,\n fontFamily: \"var(--font-mono)\",\n letterSpacing: \"0.05em\",\n }}\n >\n <span>Drill down</span>\n <DrillDownChevron />\n </div>\n )}\n </div>\n );\n}\n\ninterface ContainerNodeProps {\n d: ArchNodeData;\n style: NodeStyle;\n selected: boolean;\n activeSides: Set<string>;\n onDrillDown: (e: React.MouseEvent) => void;\n}\n\nconst CONTAINER_PADDING = 16;\nconst CONTAINER_HEADER = 48;\n\nfunction ContainerNode({ d, style, selected, activeSides, onDrillDown }: ContainerNodeProps) {\n const nodeId = useNodeId();\n const persistence = useContext(LayoutPersistenceContext);\n const onResizeEnd = useCallback(() => {\n persistence?.notifyLayoutChanged();\n }, [persistence]);\n const minSize = useStore(\n useCallback(\n (state: ReactFlowState) => {\n let minWidth = 200;\n let minHeight = CONTAINER_HEADER + 40;\n if (!nodeId) return { minWidth, minHeight };\n for (const child of state.nodeLookup.values()) {\n if (child.parentId !== nodeId) continue;\n const w = child.measured?.width ?? 220;\n const h = child.measured?.height ?? 80;\n const right = (child.position?.x ?? 0) + w + CONTAINER_PADDING;\n const bottom = (child.position?.y ?? 0) + h + CONTAINER_PADDING;\n if (right > minWidth) minWidth = right;\n if (bottom > minHeight) minHeight = bottom;\n }\n return { minWidth, minHeight };\n },\n [nodeId],\n ),\n (a, b) => a.minWidth === b.minWidth && a.minHeight === b.minHeight,\n );\n\n return (\n <div\n className=\"group relative\"\n style={{\n width: \"100%\",\n height: \"100%\",\n background: `${style.accent}08`,\n border: `1.5px dashed ${style.accent}80`,\n color: style.text,\n cursor: \"pointer\",\n boxShadow: `inset 0 0 0 1px ${style.accent}14`,\n }}\n >\n <NodeResizer\n isVisible={selected}\n minWidth={minSize.minWidth}\n minHeight={minSize.minHeight}\n onResizeEnd={onResizeEnd}\n lineStyle={{\n borderColor: `${style.accent}55`,\n borderWidth: 1,\n }}\n handleStyle={{\n width: 9,\n height: 9,\n background: style.accent,\n border: `2px solid ${style.bg}`,\n borderRadius: 0,\n boxShadow: `0 0 0 1px ${style.accent}`,\n }}\n />\n <CornerMarks accent={style.accent} />\n\n {HANDLE_SIDES.map(({ position, prefix }) => {\n const isActive = activeSides.has(position);\n return (\n <HandlePair\n key={prefix}\n position={position}\n prefix={prefix}\n style={style}\n isActive={isActive}\n />\n );\n })}\n\n <div\n className=\"pointer-events-auto absolute top-0 right-0 left-0 flex items-center justify-between gap-2 px-3 py-2\"\n style={{\n borderBottom: `1px dashed ${style.accent}55`,\n background: `${style.bg}e6`,\n }}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0\"\n >\n {style.iconPaths.map((p, i) => (\n <path\n key={i}\n d={p.d}\n fill={p.fill ?? \"none\"}\n stroke={p.stroke ?? \"none\"}\n strokeWidth={p.strokeWidth ?? 0}\n opacity={p.opacity ?? 1}\n />\n ))}\n </svg>\n <div\n className=\"truncate text-[12px] leading-tight font-semibold tracking-tight\"\n style={{ fontFamily: \"var(--font-sans)\" }}\n >\n {d.label}\n </div>\n {d.technology && (\n <span\n className=\"shrink-0 text-[9px] leading-tight font-medium\"\n style={{\n color: `${style.accent}99`,\n fontFamily: \"var(--font-mono)\",\n letterSpacing: \"0.08em\",\n }}\n >\n {d.technology}\n </span>\n )}\n </div>\n {d.hasSubDiagram && (\n <div\n onClick={onDrillDown}\n className=\"flex shrink-0 cursor-pointer items-center gap-1 px-2 py-0.5 text-[10px] font-medium transition-opacity hover:opacity-80\"\n style={{\n background: `${style.accent}10`,\n color: style.accent,\n border: `1px solid ${style.accent}25`,\n fontFamily: \"var(--font-mono)\",\n letterSpacing: \"0.05em\",\n }}\n >\n <span>Drill down</span>\n <DrillDownChevron />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction CornerMarks({ accent }: { accent: string }) {\n return (\n <>\n <svg\n className=\"pointer-events-none absolute top-0 left-0\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n >\n <path\n d=\"M0 12 L0 0 L12 0\"\n stroke={accent}\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.3\"\n />\n </svg>\n <svg\n className=\"pointer-events-none absolute right-0 bottom-0\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n >\n <path\n d=\"M12 0 L12 12 L0 12\"\n stroke={accent}\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.3\"\n />\n </svg>\n </>\n );\n}\n\nfunction HandlePair({\n position,\n prefix,\n style,\n isActive,\n}: {\n position: Position;\n prefix: string;\n style: NodeStyle;\n isActive: boolean;\n}) {\n const hStyle: React.CSSProperties = {\n background: style.accent,\n width: 6,\n height: 6,\n border: `2px solid ${style.bg}`,\n boxShadow: `0 0 0 1px ${style.accent}`,\n opacity: isActive ? 1 : 0,\n transition: \"opacity 0.2s ease\",\n borderRadius: 0,\n };\n return (\n <span>\n <Handle\n type=\"source\"\n position={position}\n id={`${prefix}-source`}\n isConnectable={false}\n style={hStyle}\n />\n <Handle\n type=\"target\"\n position={position}\n id={`${prefix}-target`}\n isConnectable={false}\n style={hStyle}\n />\n </span>\n );\n}\n\nfunction DrillDownChevron() {\n return (\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\nexport const ArchitectureNode = memo(ArchitectureNodeInner);\n","export interface EdgeStyleDef {\n color: string;\n dashed: boolean;\n animated: boolean;\n label: string;\n}\n\nconst edgeStyles: Record<string, EdgeStyleDef> = {\n calls: { color: \"#818cf8\", dashed: false, animated: false, label: \"Calls\" },\n \"data-flow\": { color: \"#34d399\", dashed: false, animated: true, label: \"Data Flow\" },\n publishes: { color: \"#fbbf24\", dashed: true, animated: false, label: \"Publishes\" },\n subscribes: { color: \"#fbbf24\", dashed: true, animated: false, label: \"Subscribes\" },\n reads: { color: \"#34d399\", dashed: false, animated: false, label: \"Reads\" },\n writes: { color: \"#fb923c\", dashed: false, animated: false, label: \"Writes\" },\n};\n\nconst defaultEdgeStyle: EdgeStyleDef = {\n color: \"#22d3ee\",\n dashed: false,\n animated: false,\n label: \"Connection\",\n};\n\nexport function getEdgeStyleDef(type?: string): EdgeStyleDef {\n return type ? (edgeStyles[type] ?? defaultEdgeStyle) : defaultEdgeStyle;\n}\n","import { useMemo, useState } from \"react\";\nimport { Panel } from \"@xyflow/react\";\nimport type { ApiDiagram } from \"@tecture/shared\";\nimport { getNodeStyle, type IconPath, type NodeStyle } from \"./nodeStyles\";\nimport { getEdgeStyleDef, type EdgeStyleDef } from \"./edgeStyles\";\n\ninterface Props {\n diagram: ApiDiagram;\n}\n\nexport function Legend({ diagram }: Props) {\n const [open, setOpen] = useState(false);\n\n const { nodeTypes, edgeTypes } = useMemo(() => {\n const n = new Set<string>();\n const e = new Set<string>();\n for (const node of diagram.nodes) {\n if (typeof node.meta?.type === \"string\") n.add(node.meta.type);\n }\n for (const edge of diagram.edges) {\n if (typeof edge.meta?.type === \"string\") e.add(edge.meta.type);\n }\n return { nodeTypes: [...n].sort(), edgeTypes: [...e].sort() };\n }, [diagram]);\n\n if (nodeTypes.length === 0 && edgeTypes.length === 0) return null;\n\n return (\n <Panel position=\"top-right\" className=\"!m-3\">\n <div\n className=\"flex flex-col border shadow-lg backdrop-blur-md\"\n style={{\n background: \"rgba(10, 15, 26, 0.85)\",\n borderColor: \"#1e2d4a\",\n color: \"var(--text, #e2e8f0)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex items-center gap-2 px-3 py-1.5 text-[10px] tracking-[0.2em] uppercase transition-colors hover:text-white\"\n style={{ color: \"var(--text-muted, #94a3b8)\" }}\n aria-expanded={open}\n >\n <LegendGlyph />\n <span>Legend</span>\n <Chevron open={open} />\n </button>\n\n {open && (\n <div\n className=\"flex flex-col gap-3 border-t px-3 py-2.5\"\n style={{ borderColor: \"#1e2d4a\", minWidth: 180 }}\n >\n {nodeTypes.length > 0 && (\n <Section title=\"Nodes\">\n {nodeTypes.map((t) => (\n <NodeRow key={t} type={t} style={getNodeStyle(t)} />\n ))}\n </Section>\n )}\n {edgeTypes.length > 0 && (\n <Section title=\"Edges\">\n {edgeTypes.map((t) => (\n <EdgeRow key={t} style={getEdgeStyleDef(t)} />\n ))}\n </Section>\n )}\n </div>\n )}\n </div>\n </Panel>\n );\n}\n\nfunction Section({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div\n className=\"text-[9px] tracking-[0.25em] uppercase\"\n style={{ color: \"var(--text-muted, #64748b)\" }}\n >\n {title}\n </div>\n <div className=\"flex flex-col gap-1\">{children}</div>\n </div>\n );\n}\n\nfunction NodeRow({ type, style }: { type: string; style: NodeStyle }) {\n return (\n <div className=\"flex items-center gap-2 text-[11px]\">\n <span\n className=\"flex h-6 w-6 shrink-0 items-center justify-center border\"\n style={{ background: style.bg, borderColor: style.border }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n {style.iconPaths.map((p, i) => (\n <IconPathEl key={i} p={p} />\n ))}\n </svg>\n </span>\n <span style={{ color: style.accent }}>{style.label}</span>\n {style.label.toLowerCase() !== type && (\n <span\n className=\"text-[9px] uppercase tracking-wider\"\n style={{ color: \"var(--text-muted, #64748b)\" }}\n >\n {type}\n </span>\n )}\n </div>\n );\n}\n\nfunction EdgeRow({ style }: { style: EdgeStyleDef }) {\n const dash = style.dashed ? \"4 3\" : undefined;\n return (\n <div className=\"flex items-center gap-2 text-[11px]\">\n <svg width=\"28\" height=\"10\" className=\"shrink-0\">\n <line\n x1=\"1\"\n y1=\"5\"\n x2=\"22\"\n y2=\"5\"\n stroke={style.color}\n strokeWidth=\"1.5\"\n strokeDasharray={dash}\n />\n <polygon\n points=\"22,2 28,5 22,8\"\n fill={style.color}\n />\n {style.animated && (\n <circle cx=\"12\" cy=\"5\" r=\"1.5\" fill={style.color}>\n <animate\n attributeName=\"cx\"\n from=\"1\"\n to=\"22\"\n dur=\"1.4s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n )}\n </svg>\n <span style={{ color: style.color }}>{style.label}</span>\n </div>\n );\n}\n\nfunction IconPathEl({ p }: { p: IconPath }) {\n return (\n <path\n d={p.d}\n fill={p.fill ?? \"none\"}\n stroke={p.stroke ?? \"none\"}\n strokeWidth={p.strokeWidth ?? 0}\n opacity={p.opacity ?? 1}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n );\n}\n\nfunction LegendGlyph() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect x=\"3\" y=\"4\" width=\"7\" height=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"4\" width=\"7\" height=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" opacity=\"0.6\" />\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" opacity=\"0.35\" />\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" opacity=\"0.15\" />\n </svg>\n );\n}\n\nfunction Chevron({ open }: { open: boolean }) {\n return (\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{\n transform: `rotate(${open ? 180 : 0}deg)`,\n transition: \"transform 0.15s ease\",\n }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n","import {\n EdgeLabelRenderer,\n getSmoothStepPath,\n useInternalNode,\n type EdgeProps,\n} from \"@xyflow/react\";\nimport { getEdgeParams } from \"./utils\";\n\nexport function FloatingEdge({\n id,\n source,\n target,\n markerEnd,\n style,\n label,\n labelStyle,\n labelBgStyle,\n labelBgPadding,\n labelBgBorderRadius,\n animated,\n}: EdgeProps) {\n const sourceNode = useInternalNode(source);\n const targetNode = useInternalNode(target);\n\n if (!sourceNode || !targetNode) return null;\n\n const { sx, sy, tx, ty, sourcePos, targetPos } = getEdgeParams(\n sourceNode,\n targetNode,\n );\n\n const [edgePath, labelX, labelY] = getSmoothStepPath({\n sourceX: sx,\n sourceY: sy,\n sourcePosition: sourcePos,\n targetPosition: targetPos,\n targetX: tx,\n targetY: ty,\n borderRadius: 8,\n });\n\n return (\n <>\n <path\n id={id}\n className={`react-flow__edge-path${animated ? \" react-flow__edge-path--animated\" : \"\"}`}\n d={edgePath}\n markerEnd={markerEnd}\n style={style}\n />\n {label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%, -50%) translate(${labelX}px, ${labelY}px)`,\n pointerEvents: \"all\",\n ...(labelBgStyle\n ? {\n background: resolveLabelBg(labelBgStyle),\n borderRadius: labelBgBorderRadius ?? 4,\n padding: labelBgPadding\n ? `${(labelBgPadding as [number, number])[1]}px ${(labelBgPadding as [number, number])[0]}px`\n : \"4px 6px\",\n }\n : {}),\n }}\n >\n <span style={labelStyle as React.CSSProperties}>{label}</span>\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n\nfunction resolveLabelBg(labelBgStyle: unknown): string {\n const s = labelBgStyle as { fill?: string; fillOpacity?: number };\n const fill = s.fill ?? \"#0a0f1a\";\n const alpha = s.fillOpacity ?? 1;\n if (alpha >= 1) return fill;\n const hex = fill.replace(\"#\", \"\");\n if (hex.length !== 3 && hex.length !== 6) return fill;\n const full = hex.length === 3 ? hex.split(\"\").map((c) => c + c).join(\"\") : hex;\n const r = parseInt(full.slice(0, 2), 16);\n const g = parseInt(full.slice(2, 4), 16);\n const b = parseInt(full.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","import { MarkerType, type Edge, type Node } from \"@xyflow/react\";\nimport type { ApiDiagram, ArchitectureNode, ArchitectureEdge } from \"@tecture/shared\";\nimport { getEdgeStyleDef } from \"./edgeStyles\";\n\nexport interface ArchNodeData extends Record<string, unknown> {\n label: string;\n nodeType?: string;\n technology?: string;\n hasSubDiagram: boolean;\n subDiagramId?: string;\n isContainer: boolean;\n hasChildren: boolean;\n}\n\nexport function diagramToFlow(diagram: ApiDiagram): {\n nodes: Node<ArchNodeData>[];\n edges: Edge[];\n} {\n const nodeIds = new Set(diagram.nodes.map((n) => n.id));\n const childCounts = new Map<string, number>();\n for (const n of diagram.nodes) {\n if (n.parentId && nodeIds.has(n.parentId)) {\n childCounts.set(n.parentId, (childCounts.get(n.parentId) ?? 0) + 1);\n }\n }\n return {\n nodes: diagram.nodes.map((n) => toFlowNode(n, childCounts.has(n.id))),\n edges: diagram.edges\n .filter((e) => nodeIds.has(e.source) && nodeIds.has(e.target))\n .map(toFlowEdge),\n };\n}\n\nfunction toFlowNode(n: ArchitectureNode, hasChildren: boolean): Node<ArchNodeData> {\n const isContainer = Boolean(n.meta?.isContainer) || hasChildren;\n const data: ArchNodeData = {\n label: n.label,\n nodeType: n.meta?.type,\n technology: typeof n.meta?.technology === \"string\" ? n.meta.technology : undefined,\n hasSubDiagram: Boolean(n.subDiagramId),\n subDiagramId: n.subDiagramId ?? undefined,\n isContainer,\n hasChildren,\n };\n const node: Node<ArchNodeData> = {\n id: n.id,\n type: \"architecture\",\n position: { x: 0, y: 0 },\n data,\n };\n if (n.parentId) {\n node.parentId = n.parentId;\n node.extent = \"parent\";\n }\n return node;\n}\n\nfunction toFlowEdge(e: ArchitectureEdge): Edge {\n const def = getEdgeStyleDef(e.meta?.type);\n const style: Record<string, unknown> = { strokeWidth: 1.5, stroke: def.color };\n if (def.dashed) style.strokeDasharray = \"5 5\";\n\n return {\n id: e.id,\n source: e.source,\n target: e.target,\n type: \"floating\",\n label: e.label,\n animated: def.animated,\n style,\n markerEnd: {\n type: MarkerType.ArrowClosed,\n width: 16,\n height: 16,\n color: def.color,\n },\n labelStyle: {\n fontSize: 10,\n fill: \"#94a3b8\",\n fontWeight: 500,\n letterSpacing: \"0.04em\",\n fontFamily: \"var(--font-mono)\",\n },\n labelBgStyle: {\n fill: \"#0a0f1a\",\n fillOpacity: 0.92,\n },\n labelBgPadding: [6, 4] as [number, number],\n labelBgBorderRadius: 4,\n };\n}\n","import ELK, { type ElkNode } from \"elkjs/lib/elk.bundled.js\";\nimport type { Edge, Node } from \"@xyflow/react\";\nimport type { DiagramDirection, DiagramLayoutFile } from \"@tecture/shared\";\n\nconst elk = new ELK();\n\nconst LEAF_WIDTH = 220;\nconst LEAF_HEIGHT = 80;\n// Extra top padding reserves space for the container's header label.\nconst CONTAINER_PADDING = \"[top=48,left=16,bottom=16,right=16]\";\n\nfunction elkDirection(direction: DiagramDirection | undefined): string {\n return direction === \"LR\" ? \"RIGHT\" : \"DOWN\";\n}\n\nexport async function layoutDiagram(\n nodes: Node[],\n edges: Edge[],\n direction: DiagramDirection | undefined,\n overlay?: DiagramLayoutFile,\n): Promise<Node[]> {\n if (nodes.length === 0) return nodes;\n\n const childrenByParent = new Map<string | undefined, Node[]>();\n for (const n of nodes) {\n const key = n.parentId ?? undefined;\n const list = childrenByParent.get(key) ?? [];\n list.push(n);\n childrenByParent.set(key, list);\n }\n const isContainer = (id: string) =>\n (childrenByParent.get(id)?.length ?? 0) > 0;\n\n const buildElkNode = (n: Node): ElkNode => {\n if (isContainer(n.id)) {\n return {\n id: n.id,\n layoutOptions: { \"elk.padding\": CONTAINER_PADDING },\n children: (childrenByParent.get(n.id) ?? []).map(buildElkNode),\n };\n }\n return { id: n.id, width: LEAF_WIDTH, height: LEAF_HEIGHT };\n };\n\n const topLevel = childrenByParent.get(undefined) ?? [];\n const graph: ElkNode = {\n id: \"root\",\n layoutOptions: {\n \"elk.algorithm\": \"layered\",\n \"elk.direction\": elkDirection(direction),\n \"elk.edgeRouting\": \"ORTHOGONAL\",\n \"elk.spacing.nodeNode\": \"80\",\n \"elk.layered.spacing.nodeNodeBetweenLayers\": \"120\",\n \"elk.layered.crossingMinimization.strategy\": \"LAYER_SWEEP\",\n \"elk.hierarchyHandling\": \"INCLUDE_CHILDREN\",\n },\n children: topLevel.map(buildElkNode),\n edges: edges.map((e) => ({\n id: e.id,\n sources: [e.source],\n targets: [e.target],\n })),\n };\n\n const result = await elk.layout(graph);\n\n const positions = new Map<string, { x: number; y: number }>();\n const sizes = new Map<string, { width: number; height: number }>();\n const walk = (elkNode: ElkNode) => {\n if (elkNode.id !== \"root\") {\n positions.set(elkNode.id, { x: elkNode.x ?? 0, y: elkNode.y ?? 0 });\n if (isContainer(elkNode.id)) {\n sizes.set(elkNode.id, {\n width: elkNode.width ?? LEAF_WIDTH,\n height: elkNode.height ?? LEAF_HEIGHT,\n });\n }\n }\n for (const c of elkNode.children ?? []) walk(c);\n };\n walk(result);\n\n // ReactFlow requires parent nodes to appear before their children in the nodes array.\n const visited = new Set<string>();\n const ordered: Node[] = [];\n const emit = (n: Node) => {\n if (visited.has(n.id)) return;\n visited.add(n.id);\n const saved = overlay?.nodes[n.id];\n const position = saved\n ? { x: saved.x, y: saved.y }\n : positions.get(n.id) ?? { x: 0, y: 0 };\n const out: Node = { ...n, position };\n const elkSize = sizes.get(n.id);\n const width = saved?.width ?? elkSize?.width;\n const height = saved?.height ?? elkSize?.height;\n if (width !== undefined && height !== undefined) {\n out.style = { ...(n.style ?? {}), width, height };\n }\n ordered.push(out);\n for (const c of childrenByParent.get(n.id) ?? []) emit(c);\n };\n for (const n of topLevel) emit(n);\n for (const n of nodes) if (!visited.has(n.id)) emit(n);\n\n return ordered;\n}\n","import { useEffect, useState } from \"react\";\nimport type { BundlePhase, BundleState } from \"./ArchitectureBundleContext\";\n\nconst PHASE_LABELS: Record<BundlePhase, string> = {\n summary: \"Reading manifest\",\n diagrams: \"Loading diagrams\",\n descriptions: \"Loading node details\",\n};\n\nconst SPLASH_DELAY_MS = 150;\n\ninterface Props {\n state: Exclude<BundleState, { status: \"ready\" }>;\n}\n\nexport function LoadingSplash({ state }: Props) {\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (state.status === \"error\") {\n setShouldRender(true);\n return;\n }\n const t = setTimeout(() => setShouldRender(true), SPLASH_DELAY_MS);\n return () => clearTimeout(t);\n }, [state.status]);\n\n if (!shouldRender) {\n return (\n <div\n className=\"blueprint-grid h-screen w-screen\"\n style={{ backgroundColor: \"var(--bg-deep)\" }}\n aria-hidden\n />\n );\n }\n\n return (\n <div\n className=\"blueprint-grid flex h-screen w-screen items-center justify-center\"\n style={{ backgroundColor: \"var(--bg-deep)\" }}\n role=\"status\"\n aria-live=\"polite\"\n >\n <div\n className=\"animate-fade-up min-w-[320px] max-w-[420px] border px-6 py-5 shadow-lg backdrop-blur-md\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n }}\n >\n {state.status === \"error\" ? (\n <ErrorCard message={state.message} />\n ) : (\n <LoadingCard state={state} />\n )}\n </div>\n </div>\n );\n}\n\nfunction LoadingCard({\n state,\n}: {\n state: Extract<BundleState, { status: \"loading\" }>;\n}) {\n const { phase, done, total, archName } = state;\n const ratio = total > 0 ? Math.min(1, done / total) : 0;\n const showProgressNumbers = phase !== \"summary\";\n\n return (\n <>\n <div\n className=\"text-[9px] tracking-[0.32em] uppercase\"\n style={{ color: \"var(--text-muted)\", fontFamily: \"var(--font-mono)\" }}\n >\n Architecture\n </div>\n <div\n className=\"mt-1 truncate text-[18px] leading-tight font-semibold tracking-tight\"\n style={{ color: \"var(--text-primary)\", fontFamily: \"var(--font-sans)\" }}\n >\n {archName ?? \"Loading architecture…\"}\n </div>\n\n <div\n className=\"mt-5 flex items-center justify-between text-[10px] tracking-[0.2em] uppercase\"\n style={{ color: \"var(--text-secondary)\", fontFamily: \"var(--font-mono)\" }}\n >\n <span>{PHASE_LABELS[phase]}</span>\n {showProgressNumbers && (\n <span style={{ color: \"var(--text-muted)\" }}>\n {done} / {total}\n </span>\n )}\n </div>\n\n <div\n className=\"mt-2 h-[2px] w-full overflow-hidden\"\n style={{ backgroundColor: \"var(--border-default)\" }}\n >\n {phase === \"summary\" ? (\n <div\n className=\"h-full w-1/3\"\n style={{\n backgroundColor: \"var(--accent-cyan)\",\n animation: \"rf-edge-dash 1.2s linear infinite\",\n }}\n />\n ) : (\n <div\n className=\"h-full\"\n style={{\n width: `${ratio * 100}%`,\n backgroundColor: \"var(--accent-cyan)\",\n transition: \"width 200ms ease-out\",\n }}\n />\n )}\n </div>\n </>\n );\n}\n\nfunction ErrorCard({ message }: { message: string }) {\n return (\n <>\n <div\n className=\"text-[9px] tracking-[0.32em] uppercase\"\n style={{ color: \"var(--accent-amber)\", fontFamily: \"var(--font-mono)\" }}\n >\n Failed to load\n </div>\n <div\n className=\"mt-2 text-[14px] leading-snug\"\n style={{ color: \"var(--text-primary)\", fontFamily: \"var(--font-sans)\" }}\n >\n Could not load the architecture.\n </div>\n <div\n className=\"mt-1 text-[11px] leading-relaxed break-words\"\n style={{ color: \"var(--text-muted)\", fontFamily: \"var(--font-mono)\" }}\n >\n {message}\n </div>\n <button\n type=\"button\"\n onClick={() => window.location.reload()}\n className=\"mt-4 border px-3 py-1.5 text-[10px] tracking-[0.2em] uppercase transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--border-default)\",\n color: \"var(--accent-cyan)\",\n fontFamily: \"var(--font-mono)\",\n backgroundColor: \"transparent\",\n }}\n >\n Retry\n </button>\n </>\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport type {\n ApiArchitectureSummary,\n ApiDiagram,\n ApiDiagramLayoutUpdate,\n ApiNodeDetail,\n DiagramLayoutFile,\n} from \"@tecture/shared\";\nimport { LoadingSplash } from \"./LoadingSplash\";\nimport type { WebDataSource } from \"./dataSource\";\n\nexport interface ArchitectureBundle {\n summary: ApiArchitectureSummary;\n diagrams: Record<string, ApiDiagram>;\n layouts: Record<string, DiagramLayoutFile>;\n nodes: Record<string, ApiNodeDetail>;\n missingDescriptions: Set<string>;\n}\n\nexport type BundlePhase = \"summary\" | \"diagrams\" | \"descriptions\";\n\nexport type BundleState =\n | {\n status: \"loading\";\n phase: BundlePhase;\n done: number;\n total: number;\n archName?: string;\n }\n | { status: \"error\"; message: string }\n | { status: \"ready\"; bundle: ArchitectureBundle };\n\ninterface ContextValue {\n bundle: ArchitectureBundle;\n saveLayout: (slug: string, update: ApiDiagramLayoutUpdate) => Promise<void>;\n openInEditor?: (path: string) => void;\n reportUsage: (event: string, props?: { level?: number }) => void;\n}\n\nconst ArchitectureBundleContext = createContext<ContextValue | null>(null);\n\nexport function useArchitectureBundle(): ArchitectureBundle {\n const ctx = useContext(ArchitectureBundleContext);\n if (!ctx) {\n throw new Error(\n \"useArchitectureBundle must be used inside ArchitectureBundleProvider\",\n );\n }\n return ctx.bundle;\n}\n\nexport function useSaveLayout(): (\n slug: string,\n update: ApiDiagramLayoutUpdate,\n) => Promise<void> {\n const ctx = useContext(ArchitectureBundleContext);\n if (!ctx) {\n throw new Error(\n \"useSaveLayout must be used inside ArchitectureBundleProvider\",\n );\n }\n return ctx.saveLayout;\n}\n\n/** Returns the editor-open capability, or undefined when running in the browser. */\nexport function useOpenInEditor(): ((path: string) => void) | undefined {\n const ctx = useContext(ArchitectureBundleContext);\n if (!ctx) {\n throw new Error(\n \"useOpenInEditor must be used inside ArchitectureBundleProvider\",\n );\n }\n return ctx.openInEditor;\n}\n\n/** Returns the anonymous usage reporter (no-op when the data source omits it). */\nexport function useReportUsage(): (\n event: string,\n props?: { level?: number },\n) => void {\n const ctx = useContext(ArchitectureBundleContext);\n if (!ctx) {\n throw new Error(\n \"useReportUsage must be used inside ArchitectureBundleProvider\",\n );\n }\n return ctx.reportUsage;\n}\n\nexport interface ArchitectureBundleProviderProps {\n dataSource: WebDataSource;\n children: ReactNode;\n /** Forces a reload when the value changes. */\n reloadKey?: unknown;\n}\n\nexport function ArchitectureBundleProvider({\n dataSource,\n children,\n reloadKey,\n}: ArchitectureBundleProviderProps) {\n const [state, setState] = useState<BundleState>({\n status: \"loading\",\n phase: \"summary\",\n done: 0,\n total: 1,\n });\n\n useEffect(() => {\n let cancelled = false;\n setState({ status: \"loading\", phase: \"summary\", done: 0, total: 1 });\n void loadBundle({\n dataSource,\n onState: (next) => {\n if (!cancelled) setState(next);\n },\n isCancelled: () => cancelled,\n });\n return () => {\n cancelled = true;\n };\n }, [dataSource, reloadKey]);\n\n const saveLayout = useCallback(\n async (slug: string, update: ApiDiagramLayoutUpdate) => {\n const saved = await dataSource.saveLayout(slug, update);\n setState((prev) => {\n if (prev.status !== \"ready\") return prev;\n return {\n status: \"ready\",\n bundle: {\n ...prev.bundle,\n layouts: { ...prev.bundle.layouts, [slug]: saved },\n },\n };\n });\n },\n [dataSource],\n );\n\n const openInEditor = useMemo(\n () =>\n dataSource.openInEditor\n ? (path: string) => dataSource.openInEditor?.(path)\n : undefined,\n [dataSource],\n );\n\n const reportUsage = useCallback(\n (event: string, props?: { level?: number }) => {\n dataSource.reportUsage?.(event, props);\n },\n [dataSource],\n );\n\n const bundle = state.status === \"ready\" ? state.bundle : null;\n const contextValue = useMemo<ContextValue | null>(() => {\n if (!bundle) return null;\n return { bundle, saveLayout, openInEditor, reportUsage };\n }, [bundle, saveLayout, openInEditor, reportUsage]);\n\n if (state.status !== \"ready\") {\n return <LoadingSplash state={state} />;\n }\n if (!contextValue) return null;\n\n return (\n <ArchitectureBundleContext.Provider value={contextValue}>\n {children}\n </ArchitectureBundleContext.Provider>\n );\n}\n\ninterface LoadCallbacks {\n dataSource: WebDataSource;\n onState: (state: BundleState) => void;\n isCancelled: () => boolean;\n}\n\nasync function loadBundle({\n dataSource,\n onState,\n isCancelled,\n}: LoadCallbacks): Promise<void> {\n try {\n onState({ status: \"loading\", phase: \"summary\", done: 0, total: 1 });\n const summary = await dataSource.loadSummary();\n if (isCancelled()) return;\n\n const diagramSlugs = summary.diagrams.map((d) => d.slug);\n let diagramsDone = 0;\n const diagramTotal = diagramSlugs.length * 2;\n onState({\n status: \"loading\",\n phase: \"diagrams\",\n done: 0,\n total: diagramTotal,\n archName: summary.name,\n });\n\n const bumpDiagrams = () => {\n diagramsDone += 1;\n onState({\n status: \"loading\",\n phase: \"diagrams\",\n done: diagramsDone,\n total: diagramTotal,\n archName: summary.name,\n });\n };\n\n const diagramResults = await Promise.all(\n diagramSlugs.map(async (slug) => {\n const diagramPromise = dataSource.loadDiagram(slug).then((d) => {\n if (!isCancelled()) bumpDiagrams();\n return d;\n });\n const layoutPromise = dataSource.loadLayout(slug).then((l) => {\n if (!isCancelled()) bumpDiagrams();\n return l;\n });\n const [diagram, layout] = await Promise.all([\n diagramPromise,\n layoutPromise,\n ]);\n return { slug, diagram, layout };\n }),\n );\n if (isCancelled()) return;\n\n const diagrams: Record<string, ApiDiagram> = {};\n const layouts: Record<string, DiagramLayoutFile> = {};\n const nodeIds = new Set<string>();\n for (const { slug, diagram, layout } of diagramResults) {\n diagrams[slug] = diagram;\n layouts[slug] = layout;\n for (const node of diagram.nodes ?? []) nodeIds.add(node.id);\n }\n\n const nodeIdList = [...nodeIds];\n let nodesDone = 0;\n onState({\n status: \"loading\",\n phase: \"descriptions\",\n done: 0,\n total: nodeIdList.length,\n archName: summary.name,\n });\n\n const bumpNodes = () => {\n nodesDone += 1;\n onState({\n status: \"loading\",\n phase: \"descriptions\",\n done: nodesDone,\n total: nodeIdList.length,\n archName: summary.name,\n });\n };\n\n const nodes: Record<string, ApiNodeDetail> = {};\n const missing = new Set<string>();\n await Promise.all(\n nodeIdList.map(async (id) => {\n try {\n const detail = await dataSource.loadNodeDetail(id);\n nodes[id] = detail;\n } catch {\n missing.add(id);\n } finally {\n if (!isCancelled()) bumpNodes();\n }\n }),\n );\n if (isCancelled()) return;\n\n onState({\n status: \"ready\",\n bundle: {\n summary,\n diagrams,\n layouts,\n nodes,\n missingDescriptions: missing,\n },\n });\n } catch (err) {\n if (isCancelled()) return;\n const message = err instanceof Error ? err.message : String(err);\n onState({ status: \"error\", message });\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Background,\n BackgroundVariant,\n Controls,\n MiniMap,\n ReactFlow,\n ReactFlowProvider,\n useEdgesState,\n useNodesState,\n useReactFlow,\n type Edge,\n type Node,\n type NodeMouseHandler,\n} from \"@xyflow/react\";\nimport type {\n ApiDiagramLayoutUpdate,\n DiagramLayoutFile,\n NodeLayoutEntry,\n} from \"@tecture/shared\";\nimport { ArchitectureNode } from \"./ArchitectureNode\";\nimport { Legend } from \"./Legend\";\nimport { LayoutPersistenceContext } from \"./LayoutPersistenceContext\";\nimport { FloatingEdge } from \"./edges/FloatingEdge\";\nimport { diagramToFlow, type ArchNodeData } from \"./transform\";\nimport { layoutDiagram } from \"./layout\";\nimport {\n useArchitectureBundle,\n useSaveLayout,\n} from \"./ArchitectureBundleContext\";\n\nconst nodeTypes = { architecture: ArchitectureNode };\nconst edgeTypes = { floating: FloatingEdge };\n\ninterface Props {\n diagramId: string;\n onSelectNode: (nodeId: string | null) => void;\n onDrillIn: (diagramId: string) => void;\n}\n\nexport function DiagramCanvas(props: Props) {\n return (\n <ReactFlowProvider>\n <DiagramCanvasInner {...props} />\n </ReactFlowProvider>\n );\n}\n\nconst emptyLayout = (slug: string): DiagramLayoutFile => ({\n version: 1,\n diagramId: slug,\n updatedAt: \"\",\n nodes: {},\n});\n\nfunction collectLayoutEntries(\n nodes: Node[],\n): Record<string, NodeLayoutEntry> {\n const out: Record<string, NodeLayoutEntry> = {};\n for (const n of nodes) {\n const entry: NodeLayoutEntry = {\n x: n.position?.x ?? 0,\n y: n.position?.y ?? 0,\n };\n const w = n.width ?? (n.style?.width as number | undefined);\n const h = n.height ?? (n.style?.height as number | undefined);\n if (typeof w === \"number\" && Number.isFinite(w)) entry.width = w;\n if (typeof h === \"number\" && Number.isFinite(h)) entry.height = h;\n out[n.id] = entry;\n }\n return out;\n}\n\nfunction DiagramCanvasInner({ diagramId, onSelectNode, onDrillIn }: Props) {\n const bundle = useArchitectureBundle();\n const saveLayout = useSaveLayout();\n const diagram = bundle.diagrams[diagramId];\n\n const [nodes, setNodes, onNodesChange] = useNodesState<Node<ArchNodeData>>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [ready, setReady] = useState(false);\n const [layoutError, setLayoutError] = useState<string | null>(null);\n const { getNodes } = useReactFlow();\n const saveTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const currentDiagramIdRef = useRef(diagramId);\n currentDiagramIdRef.current = diagramId;\n const bundleRef = useRef(bundle);\n bundleRef.current = bundle;\n\n useEffect(() => {\n let cancelled = false;\n setReady(false);\n setLayoutError(null);\n onSelectNode(null);\n\n const currentBundle = bundleRef.current;\n const currentDiagram = currentBundle.diagrams[diagramId];\n if (!currentDiagram) {\n setLayoutError(`Diagram \"${diagramId}\" was not loaded`);\n setNodes([]);\n setEdges([]);\n return () => {\n cancelled = true;\n };\n }\n\n const currentLayout =\n currentBundle.layouts[diagramId] ?? emptyLayout(diagramId);\n const { nodes: rfNodes, edges: rfEdges } = diagramToFlow(currentDiagram);\n layoutDiagram(rfNodes, rfEdges, currentDiagram.meta?.direction, currentLayout)\n .then((positioned) => {\n if (cancelled) return;\n setNodes(positioned as Node<ArchNodeData>[]);\n setEdges(rfEdges);\n requestAnimationFrame(() => !cancelled && setReady(true));\n })\n .catch((err: Error) => {\n if (!cancelled) setLayoutError(err.message);\n });\n\n return () => {\n cancelled = true;\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current);\n saveTimeoutRef.current = null;\n }\n };\n }, [diagramId, onSelectNode, setEdges, setNodes]);\n\n const persistLayout = useCallback(() => {\n const slug = currentDiagramIdRef.current;\n const update: ApiDiagramLayoutUpdate = {\n nodes: collectLayoutEntries(getNodes()),\n };\n saveLayout(slug, update).catch((err) => {\n console.warn(\"[tecture] failed to persist layout\", err);\n });\n }, [getNodes, saveLayout]);\n\n const notifyLayoutChanged = useCallback(() => {\n if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);\n saveTimeoutRef.current = setTimeout(() => {\n saveTimeoutRef.current = null;\n persistLayout();\n }, 150);\n }, [persistLayout]);\n\n const persistenceValue = useMemo(\n () => ({ notifyLayoutChanged }),\n [notifyLayoutChanged],\n );\n\n const onNodeDragStop = useCallback<NodeMouseHandler>(() => {\n notifyLayoutChanged();\n }, [notifyLayoutChanged]);\n\n const onNodeClick = useMemo<NodeMouseHandler>(\n () => (_event, node) => {\n onSelectNode(node.id);\n },\n [onSelectNode],\n );\n\n const onNodeDoubleClick = useMemo<NodeMouseHandler>(\n () => (_event, node) => {\n const data = node.data as ArchNodeData;\n if (data.subDiagramId) onDrillIn(data.subDiagramId);\n },\n [onDrillIn],\n );\n\n return (\n <LayoutPersistenceContext.Provider value={persistenceValue}>\n <div className=\"relative h-full w-full\">\n <ReactFlow\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onNodeClick={onNodeClick}\n onNodeDoubleClick={onNodeDoubleClick}\n onNodeDragStop={onNodeDragStop}\n onPaneClick={() => onSelectNode(null)}\n fitView\n fitViewOptions={{ padding: 0.2 }}\n colorMode=\"dark\"\n proOptions={{ hideAttribution: true }}\n minZoom={0.1}\n maxZoom={2}\n style={{\n opacity: ready ? 1 : 0,\n transition: \"opacity 0.2s ease-in\",\n }}\n >\n <Background\n variant={BackgroundVariant.Lines}\n gap={20}\n size={1}\n color=\"rgba(34, 78, 130, 0.12)\"\n />\n <Controls showInteractive={false} position=\"bottom-right\" />\n {diagram && <Legend diagram={diagram} />}\n <MiniMap\n position=\"bottom-left\"\n pannable\n zoomable\n nodeColor=\"#22d3ee\"\n nodeStrokeColor=\"#1e2d4a\"\n maskColor=\"rgba(10, 15, 26, 0.7)\"\n />\n </ReactFlow>\n\n {layoutError && (\n <CanvasOverlay label={`Error: ${layoutError}`} />\n )}\n </div>\n </LayoutPersistenceContext.Provider>\n );\n}\n\nfunction CanvasOverlay({ label }: { label: string }) {\n return (\n <div\n className=\"pointer-events-none absolute inset-0 flex items-center justify-center\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <span className=\"text-xs tracking-[0.3em] uppercase\">{label}</span>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport type { ApiArchitectureSummary, ApiDiagramSummary } from \"@tecture/shared\";\n\ninterface Props {\n summary: ApiArchitectureSummary | null;\n currentDiagramId: string | null;\n onSelect: (slug: string) => void;\n onGoHome: () => void;\n}\n\nexport function DiagramList({\n summary,\n currentDiagramId,\n onSelect,\n onGoHome,\n}: Props) {\n const [open, setOpen] = useState(true);\n const atEntry =\n summary != null && currentDiagramId === summary.topDiagram;\n\n return (\n <div className=\"absolute top-3 left-3 z-10 w-64\">\n <div\n className=\"border shadow-lg backdrop-blur-md\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n }}\n >\n {/* Title block — architecture identity + entry return */}\n <button\n type=\"button\"\n onClick={onGoHome}\n disabled={atEntry}\n className=\"group flex w-full flex-col items-start gap-1 px-3 pt-2.5 pb-3 text-left transition-colors disabled:cursor-default\"\n style={{\n background: \"transparent\",\n border: \"none\",\n borderBottom: \"1px solid var(--border-default)\",\n cursor: atEntry ? \"default\" : \"pointer\",\n }}\n title={atEntry ? undefined : \"Return to entry diagram\"}\n aria-label={\n atEntry\n ? \"Architecture title block\"\n : \"Return to entry diagram\"\n }\n >\n <div className=\"flex w-full items-center justify-between\">\n <span\n className=\"text-[9px] tracking-[0.32em] uppercase\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n Architecture\n </span>\n {!atEntry && (\n <span\n className=\"flex items-center gap-1 text-[9px] tracking-[0.2em] uppercase opacity-0 transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100\"\n style={{\n color: \"var(--accent-cyan)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\" />\n <polyline points=\"12 19 5 12 12 5\" />\n </svg>\n Entry\n </span>\n )}\n </div>\n <span\n className=\"truncate text-[15px] leading-tight font-semibold tracking-tight transition-colors group-hover:text-white group-focus-visible:text-white\"\n style={{\n color: \"var(--text-primary)\",\n fontFamily: \"var(--font-sans)\",\n maxWidth: \"100%\",\n }}\n >\n {summary?.name ?? \"…\"}\n </span>\n </button>\n\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center justify-between px-3 py-2 transition-colors hover:text-white\"\n style={{\n color: \"var(--text-muted)\",\n background: \"transparent\",\n border: \"none\",\n borderBottom: open\n ? `1px solid var(--border-default)`\n : \"1px solid transparent\",\n }}\n aria-expanded={open}\n >\n <span\n className=\"text-[10px] tracking-[0.3em] uppercase\"\n style={{ fontFamily: \"var(--font-mono)\" }}\n >\n Diagrams {summary ? `· ${summary.diagrams.length}` : \"\"}\n </span>\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{\n transform: open ? \"rotate(90deg)\" : \"rotate(0deg)\",\n transition: \"transform 150ms ease\",\n }}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n\n {open && (\n <ul className=\"max-h-[60vh] overflow-y-auto py-1\">\n {summary?.diagrams.map((d) => (\n <DiagramRow\n key={d.slug}\n diagram={d}\n active={d.slug === currentDiagramId}\n isTop={d.slug === summary.topDiagram}\n onSelect={onSelect}\n />\n ))}\n {!summary && (\n <li\n className=\"px-3 py-2 text-[11px]\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n Loading…\n </li>\n )}\n </ul>\n )}\n </div>\n </div>\n );\n}\n\nfunction DiagramRow({\n diagram,\n active,\n isTop,\n onSelect,\n}: {\n diagram: ApiDiagramSummary;\n active: boolean;\n isTop: boolean;\n onSelect: (slug: string) => void;\n}) {\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => onSelect(diagram.slug)}\n className=\"flex w-full flex-col items-start gap-0.5 px-3 py-2 text-left transition-colors\"\n style={{\n background: active ? \"rgba(34, 211, 238, 0.08)\" : \"transparent\",\n borderLeft: active\n ? \"2px solid var(--accent-cyan)\"\n : \"2px solid transparent\",\n color: active ? \"var(--text-primary)\" : \"var(--text-secondary)\",\n cursor: \"pointer\",\n border: \"none\",\n borderLeftWidth: \"2px\",\n }}\n >\n <div className=\"flex w-full items-center gap-2\">\n <span\n className=\"text-[9px] tracking-[0.2em] uppercase\"\n style={{\n color: active ? \"var(--accent-cyan)\" : \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n L{diagram.level ?? \"?\"}\n </span>\n <span\n className=\"truncate text-[13px] leading-tight font-medium\"\n style={{ fontFamily: \"var(--font-sans)\" }}\n >\n {diagram.name}\n </span>\n {isTop && (\n <span\n className=\"ml-auto px-1 py-px text-[8px] tracking-[0.2em] uppercase\"\n style={{\n color: \"var(--accent-amber)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n Entry\n </span>\n )}\n </div>\n <span\n className=\"text-[10px] tracking-wider\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n {diagram.nodeCount}n · {diagram.edgeCount}e\n </span>\n </button>\n </li>\n );\n}\n","import { useEffect, useId, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nlet initialized = false;\n\nasync function getMermaid() {\n const mod = await import(\"mermaid\");\n const mermaid = mod.default;\n if (!initialized) {\n mermaid.initialize({\n startOnLoad: false,\n theme: \"dark\",\n securityLevel: \"strict\",\n fontFamily:\n '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n themeVariables: {\n background: \"#0a0f1a\",\n primaryColor: \"#0f1628\",\n primaryBorderColor: \"#1e3a5f\",\n primaryTextColor: \"#e2e8f0\",\n secondaryColor: \"#141d33\",\n secondaryBorderColor: \"#1e2d4a\",\n secondaryTextColor: \"#e2e8f0\",\n tertiaryColor: \"#0d1320\",\n tertiaryBorderColor: \"#1e2d4a\",\n tertiaryTextColor: \"#e2e8f0\",\n lineColor: \"#64748b\",\n textColor: \"#e2e8f0\",\n mainBkg: \"#0f1628\",\n nodeBorder: \"#1e3a5f\",\n clusterBkg: \"rgba(20, 29, 51, 0.6)\",\n clusterBorder: \"#1e2d4a\",\n actorBkg: \"#0f1628\",\n actorBorder: \"#1e3a5f\",\n actorTextColor: \"#e2e8f0\",\n actorLineColor: \"#64748b\",\n signalColor: \"#94a3b8\",\n signalTextColor: \"#e2e8f0\",\n labelBoxBkgColor: \"#141d33\",\n labelBoxBorderColor: \"#1e2d4a\",\n labelTextColor: \"#e2e8f0\",\n noteBkgColor: \"#18140a\",\n noteBorderColor: \"#854d0e\",\n noteTextColor: \"#fef3c7\",\n },\n });\n initialized = true;\n }\n return mermaid;\n}\n\ninterface Props {\n chart: string;\n}\n\ntype State =\n | { status: \"loading\" }\n | { status: \"error\"; message: string }\n | { status: \"ready\"; svg: string };\n\nexport function MermaidBlock({ chart }: Props) {\n const [state, setState] = useState<State>({ status: \"loading\" });\n const [expanded, setExpanded] = useState(false);\n const rawId = useId();\n const elementId = `mermaid-${rawId.replace(/:/g, \"\")}`;\n\n useEffect(() => {\n let cancelled = false;\n setState({ status: \"loading\" });\n\n (async () => {\n try {\n const mermaid = await getMermaid();\n await mermaid.parse(chart);\n const { svg } = await mermaid.render(elementId, chart);\n if (!cancelled) setState({ status: \"ready\", svg });\n } catch (err) {\n if (cancelled) return;\n const message =\n err instanceof Error ? err.message : \"Failed to render diagram\";\n setState({ status: \"error\", message });\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [chart, elementId]);\n\n if (state.status === \"loading\") {\n return (\n <div\n className=\"mermaid-block\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n fontSize: 11,\n }}\n >\n Rendering diagram…\n </div>\n );\n }\n\n if (state.status === \"error\") {\n return (\n <div className=\"mermaid-block\">\n <div\n className=\"mb-1\"\n style={{\n color: \"var(--accent-amber)\",\n fontFamily: \"var(--font-mono)\",\n fontSize: 11,\n }}\n >\n Mermaid error: {state.message}\n </div>\n <pre style={{ margin: 0 }}>\n <code className=\"lang-mermaid\">{chart}</code>\n </pre>\n </div>\n );\n }\n\n return (\n <>\n <div className=\"mermaid-block group relative\">\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n aria-label=\"Enlarge diagram\"\n title=\"Enlarge diagram\"\n className=\"mermaid-enlarge absolute top-2 right-2 flex h-7 w-7 items-center justify-center border transition-colors\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n color: \"var(--text-muted)\",\n backdropFilter: \"blur(6px)\",\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3\" />\n <path d=\"M21 8V5a2 2 0 0 0-2-2h-3\" />\n <path d=\"M3 16v3a2 2 0 0 0 2 2h3\" />\n <path d=\"M16 21h3a2 2 0 0 0 2-2v-3\" />\n </svg>\n </button>\n <div\n className=\"mermaid-svg\"\n style={{ overflowX: \"auto\" }}\n dangerouslySetInnerHTML={{ __html: state.svg }}\n />\n </div>\n {expanded && (\n <MermaidLightbox svg={state.svg} onClose={() => setExpanded(false)} />\n )}\n </>\n );\n}\n\nfunction MermaidLightbox({\n svg,\n onClose,\n}: {\n svg: string;\n onClose: () => void;\n}) {\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n document.body.style.overflow = prevOverflow;\n };\n }, [onClose]);\n\n return createPortal(\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Enlarged diagram\"\n onClick={onClose}\n className=\"animate-fade-up fixed inset-0 z-50 flex items-center justify-center\"\n style={{\n backgroundColor: \"rgba(10, 15, 26, 0.88)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n animationDuration: \"0.18s\",\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n className=\"relative flex flex-col border shadow-2xl\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.95)\",\n maxWidth: \"92vw\",\n maxHeight: \"90vh\",\n }}\n >\n <div\n className=\"flex items-center justify-between border-b px-5 py-3\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div\n className=\"blueprint-annotation\"\n style={{ color: \"var(--accent-cyan)\" }}\n >\n Diagram\n </div>\n <div\n className=\"flex items-center gap-3 text-[10px] tracking-[0.2em] uppercase\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <span>ESC to close</span>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close diagram\"\n className=\"flex h-7 w-7 items-center justify-center border transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--border-default)\",\n color: \"var(--text-muted)\",\n backgroundColor: \"transparent\",\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n </div>\n <div\n className=\"mermaid-lightbox-body\"\n style={{\n padding: 24,\n overflow: \"auto\",\n maxHeight: \"calc(90vh - 52px)\",\n }}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n </div>\n </div>,\n document.body,\n );\n}\n","import {\n isValidElement,\n type AnchorHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport Markdown from \"markdown-to-jsx\";\nimport { MermaidBlock } from \"./MermaidBlock\";\n\ninterface Props {\n source: string;\n}\n\nexport function MarkdownContent({ source }: Props) {\n return (\n <div className=\"prose-markdown\">\n <Markdown\n options={{\n forceBlock: true,\n overrides: {\n pre: { component: PreOverride },\n a: { component: LinkOverride },\n },\n }}\n >\n {source}\n </Markdown>\n </div>\n );\n}\n\nfunction LinkOverride({\n href,\n children,\n ...rest\n}: AnchorHTMLAttributes<HTMLAnchorElement>) {\n const isInternal =\n !href ||\n href.startsWith(\"#\") ||\n href.startsWith(\"/\") ||\n (typeof window !== \"undefined\" && href.startsWith(window.location.origin));\n return (\n <a\n href={href}\n {...rest}\n {...(isInternal ? {} : { target: \"_blank\", rel: \"noopener noreferrer\" })}\n >\n {children}\n </a>\n );\n}\n\nfunction PreOverride({ children }: { children?: ReactNode }) {\n const mermaidSource = extractMermaidSource(children);\n if (mermaidSource !== null) {\n return <MermaidBlock chart={mermaidSource} />;\n }\n return <pre>{children}</pre>;\n}\n\nfunction extractMermaidSource(node: ReactNode): string | null {\n const only = Array.isArray(node) && node.length === 1 ? node[0] : node;\n if (!isValidElement(only)) return null;\n const el = only as ReactElement<{ className?: string; children?: ReactNode }>;\n if (el.type !== \"code\") return null;\n const cn = el.props.className ?? \"\";\n const isMermaid =\n cn === \"lang-mermaid\" ||\n cn === \"language-mermaid\" ||\n cn.split(/\\s+/).includes(\"lang-mermaid\") ||\n cn.split(/\\s+/).includes(\"language-mermaid\");\n if (!isMermaid) return null;\n const inner = el.props.children;\n if (typeof inner === \"string\") return inner;\n if (Array.isArray(inner)) return inner.map((c) => String(c ?? \"\")).join(\"\");\n return String(inner ?? \"\");\n}\n","import { useCallback, useState } from \"react\";\nimport type { NodeMetaType } from \"@tecture/shared\";\nimport {\n buildDeepDivePrompt,\n buildSourceUrl,\n isDeepDivable,\n} from \"@tecture/shared\";\nimport { getNodeStyle } from \"./nodeStyles\";\nimport { MarkdownContent } from \"./MarkdownContent\";\nimport {\n useArchitectureBundle,\n useOpenInEditor,\n} from \"./ArchitectureBundleContext\";\n\ninterface Props {\n nodeId: string;\n onClose: () => void;\n}\n\nexport function NodeDetailPanel({ nodeId, onClose }: Props) {\n const bundle = useArchitectureBundle();\n const openInEditor = useOpenInEditor();\n const detail = bundle.nodes[nodeId];\n const missingDescription = bundle.missingDescriptions.has(nodeId);\n const style = getNodeStyle(detail?.meta?.type as NodeMetaType | undefined);\n const path = detail?.path;\n const sourceUrl = openInEditor\n ? undefined\n : path\n ? buildSourceUrl(bundle.summary.source, bundle.summary.sourceHost, path)\n : undefined;\n\n return (\n <aside\n className=\"animate-slide-in-right absolute top-3 right-3 z-10 flex flex-col border shadow-lg backdrop-blur-md\"\n style={{\n width: \"min(520px, calc(100vw - 24px))\",\n maxHeight: \"calc(100vh - 24px)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n borderColor: \"var(--border-default)\",\n }}\n >\n <div\n className=\"flex shrink-0 items-start justify-between border-b px-5 py-4\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div className=\"min-w-0 flex-1\">\n <div\n className=\"blueprint-annotation mb-1\"\n style={{ color: style.accent }}\n >\n {style.label}\n </div>\n <div\n className=\"truncate text-base leading-tight font-semibold tracking-tight\"\n style={{ color: \"var(--text-primary)\", fontFamily: \"var(--font-sans)\" }}\n >\n {detail?.label ?? nodeId}\n </div>\n {detail?.meta?.technology ? (\n <div\n className=\"mt-0.5 text-xs\"\n style={{ color: \"var(--text-muted)\", fontFamily: \"var(--font-mono)\" }}\n >\n {String(detail.meta.technology)}\n </div>\n ) : null}\n {path || (detail && isDeepDivable(detail)) ? (\n <div className=\"mt-1.5 flex w-full items-center gap-x-3\">\n {path ? (\n <OpenSourceAction\n path={path}\n accent={style.accent}\n onOpenInEditor={\n openInEditor ? () => openInEditor(path) : undefined\n }\n sourceUrl={sourceUrl}\n />\n ) : null}\n {detail && isDeepDivable(detail) ? (\n <CopyPromptButton\n prompt={buildDeepDivePrompt(detail)}\n accent={style.accent}\n className=\"ml-auto\"\n />\n ) : null}\n </div>\n ) : null}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close details\"\n className=\"flex h-7 w-7 shrink-0 items-center justify-center border transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--border-default)\",\n color: \"var(--text-muted)\",\n backgroundColor: \"transparent\",\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto px-5 py-4\">\n {!detail && (\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n No details available for this node.\n </div>\n )}\n {detail && missingDescription && (\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n Description not available.\n </div>\n )}\n {detail && !missingDescription &&\n (detail.description ? (\n <MarkdownContent source={detail.description} />\n ) : (\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n No description provided.\n </div>\n ))}\n </div>\n </aside>\n );\n}\n\nconst ACTION_CLASS =\n \"inline-flex items-center gap-1.5 text-xs transition-opacity hover:opacity-80\";\n\nfunction actionStyle(accent: string) {\n return {\n color: accent,\n fontFamily: \"var(--font-mono)\",\n background: \"transparent\",\n border: \"none\",\n padding: 0,\n cursor: \"pointer\",\n } as const;\n}\n\nfunction OpenSourceAction({\n path,\n accent,\n onOpenInEditor,\n sourceUrl,\n}: {\n path: string;\n accent: string;\n onOpenInEditor?: () => void;\n sourceUrl?: string;\n}) {\n const isDir = path.endsWith(\"/\");\n const icon = (\n <svg\n width=\"11\"\n height=\"11\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n );\n\n if (onOpenInEditor) {\n return (\n <button\n type=\"button\"\n className={ACTION_CLASS}\n style={actionStyle(accent)}\n onClick={onOpenInEditor}\n title={path}\n >\n {icon}\n <span>{isDir ? \"Open folder\" : \"Open file\"}</span>\n </button>\n );\n }\n if (sourceUrl) {\n return (\n <a\n className={ACTION_CLASS}\n style={actionStyle(accent)}\n href={sourceUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n title={path}\n >\n {icon}\n <span>{isDir ? \"View folder\" : \"View file\"}</span>\n </a>\n );\n }\n return null;\n}\n\n/** Copies an auto-generated, id-keyed deep-dive prompt to paste into a coding agent. */\nfunction CopyPromptButton({\n prompt,\n accent,\n className,\n}: {\n prompt: string;\n accent: string;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n const onCopy = useCallback(() => {\n void copyText(prompt).then((ok) => {\n if (!ok) return;\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n });\n }, [prompt]);\n\n return (\n <button\n type=\"button\"\n className={className ? `${ACTION_CLASS} ${className}` : ACTION_CLASS}\n style={actionStyle(accent)}\n onClick={onCopy}\n title=\"Copy a prompt to enrich this component's description with a coding agent\"\n >\n {copied ? (\n <svg\n width=\"11\"\n height=\"11\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n width=\"11\"\n height=\"11\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n <span>{copied ? \"Copied\" : \"Copy deep-dive prompt\"}</span>\n </button>\n );\n}\n\n/**\n * Copy text to the clipboard, falling back to a hidden textarea + execCommand for\n * restrictive hosts (e.g. the VS Code webview) where the async clipboard API may be\n * unavailable. Returns whether the copy succeeded.\n */\nasync function copyText(text: string): Promise<boolean> {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // fall through to the execCommand path\n }\n try {\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n textarea.style.position = \"fixed\";\n textarea.style.top = \"0\";\n textarea.style.left = \"0\";\n textarea.style.opacity = \"0\";\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n const ok = document.execCommand(\"copy\");\n document.body.removeChild(textarea);\n return ok;\n } catch {\n return false;\n }\n}\n","import { useEffect, useState } from \"react\";\n\nexport function KeyboardHint() {\n const [visible, setVisible] = useState(true);\n useEffect(() => {\n const t = setTimeout(() => setVisible(false), 3500);\n return () => clearTimeout(t);\n }, []);\n if (!visible) return null;\n return (\n <div\n className=\"pointer-events-none absolute bottom-6 left-1/2 z-10 -translate-x-1/2 border px-3 py-1.5 shadow-lg backdrop-blur-md transition-opacity duration-1000\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n fontSize: \"10px\",\n letterSpacing: \"0.05em\",\n }}\n >\n Scroll to zoom · Drag to pan · Click for details · Double-click to drill\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { DiagramCanvas } from \"./DiagramCanvas\";\nimport { DiagramList } from \"./DiagramList\";\nimport { NodeDetailPanel } from \"./NodeDetailPanel\";\nimport { KeyboardHint } from \"./KeyboardHint\";\nimport {\n useArchitectureBundle,\n useReportUsage,\n} from \"./ArchitectureBundleContext\";\n\ninterface Props {\n diagramId: string | null;\n showDiagramList?: boolean;\n}\n\n// Last diagram we reported a view for. Module-scoped (not a component ref) so a\n// StrictMode remount or any re-render can't double-count the same navigation.\nlet lastReportedDiagram: string | null = null;\n\nexport function ArchitectureView({ diagramId, showDiagramList = true }: Props) {\n const bundle = useArchitectureBundle();\n const reportUsage = useReportUsage();\n const [selectedNodeId, setSelectedNodeId] = useState<string | null>(null);\n\n useEffect(() => {\n if (diagramId) return;\n window.location.hash = `#/diagram/${bundle.summary.topDiagram}`;\n }, [diagramId, bundle.summary.topDiagram]);\n\n // Usage: one event per diagram the user actually navigates to, tagged with\n // its C4 level. This is the real \"viewed\" signal — not the bundle's\n // background prefetch of every diagram. Deduped by slug so re-renders (or a\n // changed summary reference) never double-count the same diagram.\n useEffect(() => {\n if (!diagramId || diagramId === lastReportedDiagram) return;\n lastReportedDiagram = diagramId;\n const level = bundle.summary.diagrams.find(\n (d) => d.slug === diagramId,\n )?.level;\n reportUsage(\"diagram.viewed\", typeof level === \"number\" ? { level } : {});\n }, [diagramId, bundle.summary.diagrams, reportUsage]);\n\n // Usage: fire only when the user opens a node's detail panel (a click), never\n // for the bundle's background prefetch of all node details.\n const handleSelectNode = useCallback(\n (nodeId: string | null) => {\n setSelectedNodeId(nodeId);\n if (nodeId) reportUsage(\"node.inspected\");\n },\n [reportUsage],\n );\n\n const selectDiagram = useCallback((slug: string) => {\n setSelectedNodeId(null);\n window.location.hash = `#/diagram/${slug}`;\n }, []);\n\n return (\n <div\n className=\"relative h-screen w-screen overflow-hidden\"\n style={{ backgroundColor: \"var(--bg-deep)\" }}\n >\n {diagramId ? (\n <DiagramCanvas\n key={diagramId}\n diagramId={diagramId}\n onSelectNode={handleSelectNode}\n onDrillIn={selectDiagram}\n />\n ) : (\n <CanvasPlaceholder message=\"Opening top diagram…\" />\n )}\n\n {showDiagramList && (\n <DiagramList\n summary={bundle.summary}\n currentDiagramId={diagramId}\n onSelect={selectDiagram}\n onGoHome={() => selectDiagram(bundle.summary.topDiagram)}\n />\n )}\n <KeyboardHint />\n {selectedNodeId && (\n <NodeDetailPanel\n key={selectedNodeId}\n nodeId={selectedNodeId}\n onClose={() => setSelectedNodeId(null)}\n />\n )}\n </div>\n );\n}\n\nfunction CanvasPlaceholder({ message }: { message: string }) {\n return (\n <div\n className=\"blueprint-grid pointer-events-none absolute inset-0 flex items-center justify-center\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <span className=\"text-xs tracking-[0.3em] uppercase\">{message}</span>\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { StyleGuide } from \"./StyleGuide\";\nimport { ArchitectureView } from \"./architecture/ArchitectureView\";\nimport { ArchitectureBundleProvider } from \"./architecture/ArchitectureBundleContext\";\nimport type { WebDataSource } from \"./architecture/dataSource\";\n\nfunction useHashRoute() {\n const [hash, setHash] = useState(() => window.location.hash);\n useEffect(() => {\n const onChange = () => setHash(window.location.hash);\n window.addEventListener(\"hashchange\", onChange);\n return () => window.removeEventListener(\"hashchange\", onChange);\n }, []);\n return hash;\n}\n\nfunction parseRoute(hash: string): { view: \"architecture\" | \"style-guide\"; diagramId: string | null } {\n if (hash === \"#/style-guide\") return { view: \"style-guide\", diagramId: null };\n const match = hash.match(/^#\\/diagram\\/([^/?#]+)/);\n if (match) return { view: \"architecture\", diagramId: decodeURIComponent(match[1]!) };\n return { view: \"architecture\", diagramId: null };\n}\n\nexport interface AppProps {\n dataSource: WebDataSource;\n /** Forces the bundle provider to reload when the value changes. */\n reloadKey?: unknown;\n /** Show the floating diagram list overlay. Defaults to true. */\n showDiagramList?: boolean;\n}\n\nexport function App({ dataSource, reloadKey, showDiagramList = true }: AppProps) {\n const hash = useHashRoute();\n const route = parseRoute(hash);\n if (route.view === \"style-guide\") return <StyleGuide />;\n return (\n <ArchitectureBundleProvider dataSource={dataSource} reloadKey={reloadKey}>\n <ArchitectureView\n diagramId={route.diagramId}\n showDiagramList={showDiagramList}\n />\n </ArchitectureBundleProvider>\n );\n}\n"],"names":["colors","nodeColors","SectionLabel","number","children","jsxs","jsx","ColorSwatch","token","value","label","StyleGuide","c","n","font","b","anim","delay","i","s","section","item","styles","defaultStyle","getNodeStyle","type","getNodeCenter","node","_a","_b","getClosestSide","nodeA","nodeB","centerA","centerB","horizontalDiff","verticalDiff","Position","getParams","handleType","position","x","y","getHandleCoordsByPosition","handlePosition","bounds","handle","h","_c","offsetX","offsetY","getEdgeParams","source","target","sx","sy","sourcePos","tx","ty","targetPos","useActiveHandleSides","nodeId","useNodeId","activeSides","useStore","state","thisNode","sides","edge","otherNodeId","otherNode","useMemo","LayoutPersistenceContext","createContext","HANDLE_SIDES","ArchitectureNodeInner","data","selected","d","style","handleDrillDown","e","ContainerNode","CornerMarks","prefix","isActive","HandlePair","p","DrillDownChevron","CONTAINER_PADDING","CONTAINER_HEADER","onDrillDown","persistence","useContext","onResizeEnd","useCallback","minSize","minWidth","minHeight","child","w","right","bottom","_d","a","NodeResizer","accent","Fragment","hStyle","Handle","ArchitectureNode","memo","edgeStyles","defaultEdgeStyle","getEdgeStyleDef","Legend","diagram","open","setOpen","useState","nodeTypes","edgeTypes","Panel","v","LegendGlyph","Chevron","Section","t","NodeRow","EdgeRow","title","IconPathEl","dash","FloatingEdge","id","markerEnd","labelStyle","labelBgStyle","labelBgPadding","labelBgBorderRadius","animated","sourceNode","useInternalNode","targetNode","edgePath","labelX","labelY","getSmoothStepPath","EdgeLabelRenderer","resolveLabelBg","fill","alpha","hex","full","r","g","diagramToFlow","nodeIds","childCounts","toFlowNode","toFlowEdge","hasChildren","isContainer","def","MarkerType","elk","ELK","LEAF_WIDTH","LEAF_HEIGHT","elkDirection","direction","layoutDiagram","nodes","edges","overlay","childrenByParent","key","list","buildElkNode","topLevel","graph","result","positions","sizes","walk","elkNode","visited","ordered","emit","saved","out","elkSize","width","height","PHASE_LABELS","SPLASH_DELAY_MS","LoadingSplash","shouldRender","setShouldRender","useEffect","ErrorCard","LoadingCard","phase","done","total","archName","ratio","showProgressNumbers","message","ArchitectureBundleContext","useArchitectureBundle","ctx","useSaveLayout","useOpenInEditor","useReportUsage","ArchitectureBundleProvider","dataSource","reloadKey","setState","cancelled","loadBundle","next","saveLayout","slug","update","prev","openInEditor","path","reportUsage","event","props","bundle","contextValue","onState","isCancelled","summary","diagramSlugs","diagramsDone","diagramTotal","bumpDiagrams","diagramResults","diagramPromise","layoutPromise","l","layout","diagrams","layouts","nodeIdList","nodesDone","bumpNodes","missing","detail","err","DiagramCanvas","ReactFlowProvider","DiagramCanvasInner","emptyLayout","collectLayoutEntries","entry","diagramId","onSelectNode","onDrillIn","setNodes","onNodesChange","useNodesState","setEdges","onEdgesChange","useEdgesState","ready","setReady","layoutError","setLayoutError","getNodes","useReactFlow","saveTimeoutRef","useRef","currentDiagramIdRef","bundleRef","currentBundle","currentDiagram","currentLayout","rfNodes","rfEdges","positioned","persistLayout","notifyLayoutChanged","persistenceValue","onNodeDragStop","onNodeClick","_event","onNodeDoubleClick","ReactFlow","Background","BackgroundVariant","Controls","MiniMap","CanvasOverlay","DiagramList","currentDiagramId","onSelect","onGoHome","atEntry","DiagramRow","active","isTop","initialized","getMermaid","mermaid","MermaidBlock","chart","expanded","setExpanded","elementId","useId","svg","MermaidLightbox","onClose","onKey","prevOverflow","createPortal","MarkdownContent","Markdown","PreOverride","LinkOverride","href","rest","isInternal","mermaidSource","extractMermaidSource","only","isValidElement","el","cn","inner","NodeDetailPanel","missingDescription","sourceUrl","buildSourceUrl","isDeepDivable","OpenSourceAction","CopyPromptButton","buildDeepDivePrompt","ACTION_CLASS","actionStyle","onOpenInEditor","isDir","icon","prompt","className","copied","setCopied","onCopy","copyText","ok","text","textarea","KeyboardHint","visible","setVisible","lastReportedDiagram","ArchitectureView","showDiagramList","selectedNodeId","setSelectedNodeId","level","handleSelectNode","selectDiagram","CanvasPlaceholder","useHashRoute","hash","setHash","onChange","parseRoute","match","App","route"],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sources":["../src/StyleGuide.tsx","../src/architecture/nodeStyles.ts","../src/architecture/edges/utils.ts","../src/architecture/hooks/useActiveHandleSides.ts","../src/architecture/LayoutPersistenceContext.ts","../src/architecture/ArchitectureNode.tsx","../src/architecture/edgeStyles.ts","../src/architecture/Legend.tsx","../src/architecture/edges/FloatingEdge.tsx","../src/architecture/transform.ts","../src/architecture/layout.ts","../src/architecture/LoadingSplash.tsx","../src/architecture/ArchitectureBundleContext.tsx","../src/architecture/DiagramCanvas.tsx","../src/architecture/DiagramList.tsx","../src/architecture/MermaidBlock.tsx","../src/architecture/MarkdownContent.tsx","../src/architecture/NodeDetailPanel.tsx","../src/architecture/KeyboardHint.tsx","../src/architecture/OnboardingDemos.tsx","../src/architecture/OnboardingWizard.tsx","../src/architecture/useOnboarding.ts","../src/architecture/ArchitectureView.tsx","../src/App.tsx"],"sourcesContent":["/* ────────────────────────────────────────────────────────────────────────────\n * Tecture IO Style Guide\n * Blueprint design system reference — standardized Inter + JetBrains Mono pairing.\n * Ported from tecture-ai/app/style-guide with a neutral type stack.\n * ──────────────────────────────────────────────────────────────────────────── */\n\nconst colors = {\n backgrounds: [\n { token: \"--bg-deep\", value: \"#0a0f1a\", label: \"Deep\" },\n { token: \"--bg-surface\", value: \"#0f1628\", label: \"Surface\" },\n { token: \"--bg-elevated\", value: \"#141d33\", label: \"Elevated\" },\n ],\n borders: [\n { token: \"--border-default\", value: \"#1e2d4a\", label: \"Default\" },\n { token: \"--border-accent\", value: \"rgba(37, 99, 235, 0.25)\", label: \"Accent\" },\n { token: \"--grid-line\", value: \"#1a2744\", label: \"Grid Line\" },\n ],\n text: [\n { token: \"--text-primary\", value: \"#e2e8f0\", label: \"Primary\" },\n { token: \"--text-secondary\", value: \"#94a3b8\", label: \"Secondary\" },\n { token: \"--text-muted\", value: \"#64748b\", label: \"Muted\" },\n ],\n accents: [\n { token: \"--accent-cyan\", value: \"#22d3ee\", label: \"Cyan\" },\n { token: \"--accent-blue\", value: \"#3b82f6\", label: \"Blue\" },\n { token: \"--accent-amber\", value: \"#f59e0b\", label: \"Amber\" },\n { token: \"--accent-amber-hover\", value: \"#fbbf24\", label: \"Amber Hover\" },\n { token: \"--accent-emerald\", value: \"#34d399\", label: \"Emerald\" },\n ],\n};\n\nconst nodeColors = [\n { type: \"System\", accent: \"#94a3b8\", bg: \"#1e293b\" },\n { type: \"Service\", accent: \"#818cf8\", bg: \"#1e1b4b\" },\n { type: \"Database\", accent: \"#34d399\", bg: \"#022c22\" },\n { type: \"Queue\", accent: \"#fbbf24\", bg: \"#1c1a00\" },\n { type: \"Gateway\", accent: \"#a78bfa\", bg: \"#1e1338\" },\n { type: \"Frontend\", accent: \"#38bdf8\", bg: \"#0c1929\" },\n { type: \"Cache\", accent: \"#fb923c\", bg: \"#1c1006\" },\n { type: \"Storage\", accent: \"#2dd4bf\", bg: \"#042f2e\" },\n { type: \"External\", accent: \"#a1a1aa\", bg: \"#1c1c1e\" },\n];\n\nfunction SectionLabel({ number, children }: { number: string; children: React.ReactNode }) {\n return (\n <div className=\"mb-10\">\n <div className=\"blueprint-annotation animate-fade-up\">{number}</div>\n <h2\n className=\"animate-fade-up delay-100 font-display mt-3 text-2xl tracking-tight\"\n style={{ color: \"var(--text-primary)\" }}\n >\n {children}\n </h2>\n </div>\n );\n}\n\nfunction ColorSwatch({ token, value, label }: { token: string; value: string; label: string }) {\n return (\n <div className=\"group relative\">\n <div\n className=\"h-20 border transition-transform duration-200 group-hover:-translate-y-1\"\n style={{ backgroundColor: value, borderColor: \"var(--border-default)\" }}\n />\n <div className=\"mt-2.5\">\n <div className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {label}\n </div>\n <div className=\"mt-0.5 font-mono text-[11px]\" style={{ color: \"var(--text-muted)\" }}>\n {token}\n </div>\n <div className=\"mt-0.5 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {value}\n </div>\n </div>\n </div>\n );\n}\n\nexport function StyleGuide() {\n return (\n <div className=\"blueprint-grid animate-grid-reveal min-h-screen relative\">\n {/* Registration marks */}\n <svg\n className=\"absolute top-6 right-6 opacity-20 pointer-events-none\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n >\n <line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"40\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" className=\"animate-draw\" />\n <line x1=\"0\" y1=\"20\" x2=\"40\" y2=\"20\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" className=\"animate-draw\" />\n <circle cx=\"20\" cy=\"20\" r=\"8\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" fill=\"none\" className=\"animate-draw\" />\n </svg>\n <svg\n className=\"absolute bottom-6 left-6 opacity-20 pointer-events-none\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n >\n <line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"40\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" className=\"animate-draw\" />\n <line x1=\"0\" y1=\"20\" x2=\"40\" y2=\"20\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" className=\"animate-draw\" />\n <circle cx=\"20\" cy=\"20\" r=\"8\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" fill=\"none\" className=\"animate-draw\" />\n </svg>\n\n {/* Nav */}\n <nav\n className=\"animate-fade-up mx-auto flex max-w-5xl items-center justify-between px-6 py-6 border-b\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div className=\"flex items-center gap-3\">\n <a href=\"/\" className=\"font-display text-xl tracking-wide\" style={{ color: \"var(--text-primary)\" }}>\n Tecture IO\n </a>\n <span className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>|</span>\n <span className=\"text-xs\" style={{ color: \"var(--text-secondary)\" }}>Style Guide</span>\n </div>\n <div className=\"blueprint-annotation\" style={{ fontSize: \"10px\" }}>\n REV 1.0\n </div>\n </nav>\n\n {/* Hero */}\n <section className=\"mx-auto max-w-5xl px-6 pt-20 pb-16\">\n <div\n className=\"animate-fade-up delay-100 mb-6 inline-flex items-center gap-2 rounded-full border px-3 py-1 text-xs\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"var(--bg-surface)\",\n color: \"var(--text-secondary)\",\n }}\n >\n <span\n className=\"h-1.5 w-1.5 rounded-full animate-pulse-glow\"\n style={{ backgroundColor: \"var(--accent-cyan)\" }}\n />\n Blueprint Design System\n </div>\n <h1\n className=\"animate-fade-up delay-200 font-display text-4xl tracking-tight sm:text-5xl md:text-6xl\"\n style={{ color: \"#e2e8f0\" }}\n >\n Style Guide\n </h1>\n <p\n className=\"animate-fade-up delay-300 mt-4 max-w-2xl text-base leading-relaxed\"\n style={{ color: \"var(--text-secondary)\" }}\n >\n A living reference for the Tecture IO blueprint design system. Use these tokens, patterns, and components to\n build cohesive interfaces across the application.\n </p>\n </section>\n\n {/* ─────────────── COLORS ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 01\">Color Palette</SectionLabel>\n\n <div className=\"space-y-12\">\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Backgrounds\n </h3>\n <div className=\"grid grid-cols-3 gap-4\">\n {colors.backgrounds.map((c) => (\n <ColorSwatch key={c.token} {...c} />\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Borders\n </h3>\n <div className=\"grid grid-cols-3 gap-4\">\n {colors.borders.map((c) => (\n <ColorSwatch key={c.token} {...c} />\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Text\n </h3>\n <div className=\"grid grid-cols-3 gap-4\">\n {colors.text.map((c) => (\n <div key={c.token} className=\"group\">\n <div\n className=\"flex h-20 items-center justify-center border\"\n style={{ backgroundColor: \"var(--bg-deep)\", borderColor: \"var(--border-default)\" }}\n >\n <span className=\"text-lg font-medium\" style={{ color: c.value }}>\n Aa\n </span>\n </div>\n <div className=\"mt-2.5\">\n <div className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {c.label}\n </div>\n <div className=\"mt-0.5 font-mono text-[11px]\" style={{ color: \"var(--text-muted)\" }}>\n {c.token}\n </div>\n <div className=\"mt-0.5 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {c.value}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Accents\n </h3>\n <div className=\"grid grid-cols-5 gap-4\">\n {colors.accents.map((c) => (\n <div key={c.token} className=\"group\">\n <div\n className=\"h-20 border transition-transform duration-200 group-hover:-translate-y-1\"\n style={{\n background: `linear-gradient(135deg, ${c.value}22, ${c.value}66)`,\n borderColor: c.value,\n }}\n />\n <div className=\"mt-2.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"h-2.5 w-2.5 rounded-full\" style={{ backgroundColor: c.value }} />\n <span className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {c.label}\n </span>\n </div>\n <div className=\"mt-0.5 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {c.value}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Diagram Node Types\n </h3>\n <div className=\"grid grid-cols-3 gap-3 sm:grid-cols-5\">\n {nodeColors.map((n) => (\n <div\n key={n.type}\n className=\"border p-3\"\n style={{ backgroundColor: n.bg, borderColor: `${n.accent}33` }}\n >\n <div className=\"mb-2 h-1 w-6\" style={{ backgroundColor: n.accent }} />\n <div className=\"text-xs font-medium\" style={{ color: n.accent }}>\n {n.type}\n </div>\n <div className=\"mt-1 font-mono text-[9px]\" style={{ color: `${n.accent}99` }}>\n {n.accent}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── TYPOGRAPHY ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 02\">Typography</SectionLabel>\n\n <div className=\"space-y-12\">\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2\">\n {[\n {\n name: \"Inter\",\n variable: \"--font-sans · --font-display\",\n usage: \"Body, UI, and display headings (600 weight, tight tracking)\",\n sample: \"Architecture\",\n style: { fontFamily: \"var(--font-sans)\", fontWeight: 600, letterSpacing: \"-0.02em\" },\n },\n {\n name: \"JetBrains Mono\",\n variable: \"--font-mono\",\n usage: \"Code, annotations, technical labels\",\n sample: \"tecture.io/api\",\n style: { fontFamily: \"var(--font-mono)\" },\n },\n ].map((font) => (\n <div\n key={font.name}\n className=\"relative border p-6 overflow-hidden\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n <div className=\"text-3xl mb-4\" style={{ ...font.style, color: \"var(--text-primary)\" }}>\n {font.sample}\n </div>\n <div className=\"text-xs font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n {font.name}\n </div>\n <div className=\"mt-1 font-mono text-[10px]\" style={{ color: \"var(--accent-cyan)\" }}>\n {font.variable}\n </div>\n <div className=\"mt-1 text-xs\" style={{ color: \"var(--text-muted)\" }}>\n {font.usage}\n </div>\n </div>\n ))}\n </div>\n\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Type Scale\n </h3>\n <div\n className=\"border p-8 space-y-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n 7xl — 72px\n </span>\n <span\n className=\"font-display text-7xl tracking-tight\"\n style={{ color: \"var(--text-primary)\" }}\n >\n Heading\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n 5xl — 48px\n </span>\n <span\n className=\"font-display text-5xl tracking-tight\"\n style={{ color: \"var(--text-primary)\" }}\n >\n Page Title\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n 2xl — 24px\n </span>\n <span\n className=\"font-display text-2xl tracking-tight\"\n style={{ color: \"var(--text-primary)\" }}\n >\n Section Heading\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n lg — 18px\n </span>\n <span className=\"text-lg font-semibold tracking-tight\" style={{ color: \"var(--text-primary)\" }}>\n App Header / Nav Title\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n sm — 14px\n </span>\n <span className=\"text-sm font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n Card Title / Label\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n sm — 14px\n </span>\n <span className=\"text-sm leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n Body text and descriptions use a relaxed line-height for comfortable reading across longer passages.\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n xs — 12px\n </span>\n <span className=\"text-xs\" style={{ color: \"var(--text-secondary)\" }}>\n Metadata · Updated Apr 18, 2026 · 3 diagrams\n </span>\n </div>\n <div className=\"flex items-baseline gap-6\">\n <span\n className=\"shrink-0 w-28 font-mono text-[10px] text-right\"\n style={{ color: \"var(--text-muted)\" }}\n >\n 11px mono\n </span>\n <span className=\"blueprint-annotation\">Blueprint Annotation</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── COMPONENTS ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 03\">Components</SectionLabel>\n\n <div className=\"space-y-16\">\n {/* Buttons */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Buttons\n </h3>\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex flex-wrap items-center gap-4\">\n <button\n className=\"rounded-none px-6 py-2.5 text-sm font-semibold transition-all hover:brightness-110\"\n style={{ backgroundColor: \"#f59e0b\", color: \"#0a0f1a\" }}\n >\n Primary Action\n </button>\n\n <button\n className=\"rounded-none border px-6 py-2.5 text-sm font-medium transition-all\"\n style={{ borderColor: \"rgba(34, 211, 238, 0.4)\", color: \"#22d3ee\" }}\n >\n Secondary Action\n </button>\n\n <button\n className=\"rounded-none border px-4 py-1.5 text-sm font-medium transition-all\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"var(--bg-surface)\",\n color: \"var(--text-secondary)\",\n }}\n >\n Ghost\n </button>\n\n <button\n className=\"rounded-lg border px-3 py-1.5 text-xs font-medium transition-colors\"\n style={{ borderColor: \"rgba(113, 113, 122, 0.5)\", color: \"#a1a1aa\" }}\n >\n Nav Item\n </button>\n </div>\n\n <div className=\"mt-6 grid grid-cols-2 gap-4 sm:grid-cols-4\">\n {[\n { label: \"Primary\", desc: \"Main CTA — amber bg, dark text, no border-radius\", token: \"--accent-amber\" },\n { label: \"Secondary\", desc: \"Cyan border at 40% opacity, cyan text, no border-radius\", token: \"--accent-cyan\" },\n { label: \"Ghost\", desc: \"Surface bg, default border, secondary text, no border-radius\", token: \"--border-default\" },\n { label: \"Nav Item\", desc: \"Zinc border, rounded-lg, smaller padding, xs text\", token: \"zinc-700/50\" },\n ].map((b) => (\n <div key={b.label}>\n <div className=\"text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n {b.label}\n </div>\n <div className=\"mt-1 text-[11px] leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n {b.desc}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Cards */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Cards\n </h3>\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2\">\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n List Card (authenticated view)\n </div>\n <div className=\"group flex items-start gap-3 rounded-xl border border-zinc-800 bg-zinc-900/50 p-4 transition-all hover:border-zinc-600 hover:bg-zinc-900\">\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-zinc-800/80 text-zinc-500 transition-colors group-hover:bg-zinc-700/80 group-hover:text-zinc-400\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"18\" rx=\"2\" />\n <path d=\"M8 7h8M8 11h8M8 15h4\" />\n </svg>\n </div>\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-zinc-200 group-hover:text-white\">\n Example Architecture\n </div>\n <div className=\"mt-0.5 flex items-center gap-2 text-xs text-zinc-500\">\n <span>4 diagrams</span>\n <span>&middot;</span>\n <span>Updated Apr 18, 2026</span>\n </div>\n <div className=\"mt-1 truncate text-xs text-zinc-500\">\n Microservices architecture for the payment platform\n </div>\n </div>\n </div>\n </div>\n\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Feature Card (landing page)\n </div>\n <div\n className=\"relative border p-6 overflow-hidden\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div\n className=\"absolute top-3 right-4 font-mono text-[10px] select-none\"\n style={{ color: \"var(--text-muted)\" }}\n >\n FIG.01\n </div>\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n <div\n className=\"mb-3 flex h-9 w-9 items-center justify-center border\"\n style={{\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n backgroundColor: \"rgba(34, 211, 238, 0.05)\",\n color: \"var(--accent-cyan)\",\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n </div>\n <h3 className=\"text-sm font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n Feature Title\n </h3>\n <p className=\"mt-2 text-sm leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n Description text explaining the feature. Uses relaxed line-height for readability.\n </p>\n </div>\n </div>\n\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Step Card (landing page)\n </div>\n <div\n className=\"relative border p-6 overflow-hidden\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div\n className=\"absolute top-2 right-3 font-mono text-4xl font-bold select-none\"\n style={{ color: \"rgba(34, 211, 238, 0.08)\" }}\n >\n 01\n </div>\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n <div className=\"relative\">\n <h3 className=\"text-sm font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n Step Title\n </h3>\n <p className=\"mt-2 text-sm leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n Step description with instructions for the user to follow.\n </p>\n </div>\n </div>\n </div>\n\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Empty State\n </div>\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center border rounded-xl\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"mb-4 flex h-12 w-12 items-center justify-center rounded-xl bg-zinc-800/80 text-zinc-500\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" />\n </svg>\n </div>\n <p className=\"text-sm font-medium text-zinc-300\">No items yet</p>\n <p className=\"mt-1 text-xs text-zinc-500\">Description of what will appear here.</p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Badges & Pills */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Badges &amp; Indicators\n </h3>\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex flex-wrap items-center gap-4\">\n <div\n className=\"inline-flex items-center gap-2 rounded-full border px-3 py-1 text-xs\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"var(--bg-surface)\",\n color: \"var(--text-secondary)\",\n }}\n >\n <span\n className=\"h-1.5 w-1.5 rounded-full animate-pulse-glow\"\n style={{ backgroundColor: \"var(--accent-cyan)\" }}\n />\n Status Pill\n </div>\n\n <span\n className=\"border px-2 py-0.5 text-[10px] font-medium\"\n style={{\n backgroundColor: \"rgba(34, 211, 238, 0.1)\",\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n color: \"#22d3ee\",\n }}\n >\n Tag Label\n </span>\n\n <span className=\"text-xs font-medium uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Section Label\n </span>\n\n <span className=\"blueprint-annotation\">Annotation</span>\n\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n FIG.01\n </span>\n </div>\n </div>\n </div>\n\n {/* Code blocks */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Code &amp; Terminal\n </h3>\n <div className=\"border overflow-hidden\" style={{ borderColor: \"#1e2d4a\", backgroundColor: \"#0f1628\" }}>\n <div className=\"flex items-center justify-between px-4 pt-4 pb-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium\" style={{ color: \"#e2e8f0\" }}>\n Terminal Command\n </span>\n <span\n className=\"border px-2 py-0.5 text-[10px] font-medium\"\n style={{\n backgroundColor: \"rgba(34, 211, 238, 0.1)\",\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n color: \"#22d3ee\",\n }}\n >\n Example\n </span>\n </div>\n </div>\n <div className=\"px-4 pb-3\">\n <p className=\"text-xs mb-2\" style={{ color: \"#64748b\" }}>\n Instruction text above the command:\n </p>\n <pre\n className=\"overflow-x-auto border px-4 py-3 text-xs leading-relaxed\"\n style={{ backgroundColor: \"#0a0f1a\", borderColor: \"#1e2d4a\", color: \"#e2e8f0\" }}\n >\n <code>\n <span style={{ color: \"rgba(34, 211, 238, 0.5)\" }}>$</span> npx @tecture/core --port 3001\n </code>\n </pre>\n </div>\n </div>\n </div>\n\n {/* Icon containers */}\n <div>\n <h3 className=\"mb-6 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Icon Containers\n </h3>\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex flex-wrap items-end gap-6\">\n <div className=\"text-center\">\n <div className=\"mb-2 flex h-12 w-12 items-center justify-center rounded-xl bg-zinc-800/80 text-zinc-500\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" />\n </svg>\n </div>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 48 × 48\n </span>\n </div>\n\n <div className=\"text-center\">\n <div\n className=\"mb-2 flex h-10 w-10 items-center justify-center border\"\n style={{\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n backgroundColor: \"rgba(34, 211, 238, 0.05)\",\n color: \"var(--accent-cyan)\",\n }}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n </div>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 40 × 40\n </span>\n </div>\n\n <div className=\"text-center\">\n <div\n className=\"mb-2 flex h-9 w-9 items-center justify-center border\"\n style={{\n borderColor: \"rgba(34, 211, 238, 0.2)\",\n backgroundColor: \"rgba(34, 211, 238, 0.05)\",\n color: \"var(--accent-cyan)\",\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n </svg>\n </div>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 36 × 36\n </span>\n </div>\n\n <div className=\"text-center\">\n <div className=\"mb-2 flex h-8 w-8 items-center justify-center rounded-lg bg-zinc-800/80 text-zinc-500\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"18\" rx=\"2\" />\n <path d=\"M8 7h8M8 11h8M8 15h4\" />\n </svg>\n </div>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 32 × 32\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── ANIMATION ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 04\">Animation &amp; Motion</SectionLabel>\n\n <div className=\"space-y-8\">\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"grid grid-cols-1 gap-8 sm:grid-cols-2\">\n {[\n {\n name: \"fade-up\",\n class: \"animate-fade-up\",\n duration: \"0.7s\",\n easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n desc: \"Primary entrance animation. Elements rise 24px with opacity fade.\",\n },\n {\n name: \"draw-line\",\n class: \"animate-draw\",\n duration: \"2s\",\n easing: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n desc: \"SVG stroke animation for blueprint lines and decorative elements.\",\n },\n {\n name: \"pulse-glow\",\n class: \"animate-pulse-glow\",\n duration: \"3s infinite\",\n easing: \"ease-in-out\",\n desc: \"Continuous cyan halo pulse for live status indicators.\",\n },\n {\n name: \"grid-reveal\",\n class: \"animate-grid-reveal\",\n duration: \"1.5s\",\n easing: \"ease-out\",\n desc: \"Background fade-in for the blueprint grid container.\",\n },\n {\n name: \"slide-in-right\",\n class: \"animate-slide-in-right\",\n duration: \"0.2s\",\n easing: \"ease-out\",\n desc: \"Panel entrance from right edge. Used for side panels and drawers.\",\n },\n ].map((anim) => (\n <div key={anim.name} className=\"flex gap-4\">\n <div\n className=\"shrink-0 flex h-10 w-10 items-center justify-center border\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n {anim.name === \"pulse-glow\" ? (\n <span\n className=\"h-3 w-3 rounded-full animate-pulse-glow\"\n style={{ backgroundColor: \"var(--accent-cyan)\" }}\n />\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M2 14L8 2L14 14\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1\" opacity=\"0.5\" />\n </svg>\n )}\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold\" style={{ color: \"var(--text-primary)\" }}>\n {anim.name}\n </span>\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--accent-cyan)\" }}>\n {anim.duration}\n </span>\n </div>\n <div className=\"mt-0.5 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {anim.easing}\n </div>\n <div className=\"mt-1 text-xs leading-relaxed\" style={{ color: \"var(--text-muted)\" }}>\n {anim.desc}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Stagger Delays\n </h3>\n <div\n className=\"border p-6\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"flex gap-2\">\n {[100, 200, 300, 400, 500, 600, 700, 800].map((delay) => (\n <div key={delay} className=\"flex-1 text-center\">\n <div\n className=\"h-2 mb-2\"\n style={{\n backgroundColor: \"var(--accent-cyan)\",\n opacity: 0.15 + (delay / 800) * 0.85,\n }}\n />\n <span className=\"font-mono text-[9px]\" style={{ color: \"var(--text-muted)\" }}>\n {delay}ms\n </span>\n </div>\n ))}\n </div>\n <div className=\"mt-3 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Apply with .delay-100 through .delay-800 classes for cascading entrance effects\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── LAYOUT ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 05\">Layout &amp; Spacing</SectionLabel>\n\n <div className=\"space-y-10\">\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Container Widths\n </h3>\n <div className=\"space-y-3\">\n {[\n { label: \"max-w-5xl\", width: \"64rem (1024px)\", usage: \"Landing hero, wide layouts\" },\n { label: \"max-w-4xl\", width: \"56rem (896px)\", usage: \"Standard content sections, authenticated views\" },\n { label: \"max-w-2xl\", width: \"42rem (672px)\", usage: \"Narrow text blocks, descriptions\" },\n { label: \"max-w-xl\", width: \"36rem (576px)\", usage: \"Hero description paragraphs\" },\n ].map((c) => (\n <div key={c.label} className=\"flex items-center gap-4\">\n <span\n className=\"shrink-0 w-24 font-mono text-[11px] text-right\"\n style={{ color: \"var(--accent-cyan)\" }}\n >\n {c.label}\n </span>\n <div\n className=\"flex-1 h-6 border flex items-center px-3\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-elevated)\" }}\n >\n <span className=\"text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {c.width} — {c.usage}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Grid Patterns\n </h3>\n <div className=\"space-y-6\">\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 2 columns — sm:grid-cols-2, gap-3\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n {[1, 2].map((i) => (\n <div\n key={i}\n className=\"h-12 border flex items-center justify-center\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-elevated)\" }}\n >\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {i}\n </span>\n </div>\n ))}\n </div>\n </div>\n <div>\n <div className=\"mb-2 font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 3 columns — sm:grid-cols-3, gap-6\n </div>\n <div className=\"grid grid-cols-3 gap-6\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-12 border flex items-center justify-center\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-elevated)\" }}\n >\n <span className=\"font-mono text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n {i}\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n\n <div>\n <h3 className=\"mb-4 text-xs font-semibold uppercase tracking-wider\" style={{ color: \"var(--text-muted)\" }}>\n Common Spacing Values\n </h3>\n <div\n className=\"border p-6\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"space-y-3\">\n {[\n { label: \"px-6\", value: \"24px\", usage: \"Page horizontal padding\" },\n { label: \"py-6\", value: \"24px\", usage: \"Nav vertical padding\" },\n { label: \"p-6\", value: \"24px\", usage: \"Feature card padding\" },\n { label: \"p-4\", value: \"16px\", usage: \"List card padding\" },\n { label: \"gap-6\", value: \"24px\", usage: \"Feature card grid gap\" },\n { label: \"gap-3\", value: \"12px\", usage: \"List card grid gap, inline element gap\" },\n { label: \"gap-2\", value: \"8px\", usage: \"Tight inline spacing\" },\n { label: \"mt-12\", value: \"48px\", usage: \"Grid top margin after section header\" },\n { label: \"py-20\", value: \"80px\", usage: \"Section vertical padding\" },\n { label: \"pt-24\", value: \"96px\", usage: \"Hero top padding\" },\n ].map((s) => (\n <div key={s.label} className=\"flex items-center gap-4\">\n <span\n className=\"shrink-0 w-16 font-mono text-[11px] text-right\"\n style={{ color: \"var(--accent-cyan)\" }}\n >\n {s.label}\n </span>\n <div\n className=\"shrink-0 w-12 font-mono text-[10px]\"\n style={{ color: \"var(--text-muted)\" }}\n >\n {s.value}\n </div>\n <div className=\"flex-1 text-[11px]\" style={{ color: \"var(--text-muted)\" }}>\n {s.usage}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── DECORATIVE ELEMENTS ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 06\">Blueprint Decorations</SectionLabel>\n\n <div\n className=\"border p-8\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <div className=\"grid grid-cols-1 gap-10 sm:grid-cols-3\">\n <div className=\"text-center\">\n <div\n className=\"mx-auto relative w-24 h-24 border\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-deep)\" }}\n >\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n </div>\n <div className=\"mt-3 text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n Corner Bracket\n </div>\n <div className=\"mt-1 text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Top-left of feature cards\n </div>\n </div>\n\n <div className=\"text-center\">\n <div\n className=\"mx-auto flex items-center justify-center w-24 h-24 border\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-deep)\" }}\n >\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\n <line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"40\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" />\n <line x1=\"0\" y1=\"20\" x2=\"40\" y2=\"20\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" />\n <circle cx=\"20\" cy=\"20\" r=\"8\" stroke=\"var(--accent-cyan)\" strokeWidth=\"0.5\" fill=\"none\" />\n </svg>\n </div>\n <div className=\"mt-3 text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n Registration Mark\n </div>\n <div className=\"mt-1 text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n Page corners at 20% opacity\n </div>\n </div>\n\n <div className=\"text-center\">\n <div\n className=\"mx-auto w-24 h-24 blueprint-grid border\"\n style={{ borderColor: \"var(--border-default)\" }}\n />\n <div className=\"mt-3 text-xs font-medium\" style={{ color: \"var(--text-primary)\" }}>\n Blueprint Grid\n </div>\n <div className=\"mt-1 text-[10px]\" style={{ color: \"var(--text-muted)\" }}>\n 100px major / 20px minor grid\n </div>\n </div>\n </div>\n\n <div className=\"mt-10 flex justify-center\">\n <div\n className=\"inline-block border border-dashed px-8 py-4\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div\n className=\"font-mono text-[10px] tracking-widest uppercase mb-1\"\n style={{ color: \"var(--text-muted)\" }}\n >\n Title Block\n </div>\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n Used as footer element — dashed border, centered\n </div>\n </div>\n </div>\n </div>\n </section>\n\n {/* ─────────────── USAGE NOTES ─────────────── */}\n <section className=\"mx-auto max-w-5xl px-6 py-16\">\n <SectionLabel number=\"Section 07\">Usage Guidelines</SectionLabel>\n\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2\">\n {[\n {\n title: \"Landing pages\",\n items: [\n \"Use blueprint-grid background with animate-grid-reveal\",\n \"Apply .font-display on hero headings (Inter 600, -0.02em tracking)\",\n \"Stagger entrance animations with delay-100 to delay-800\",\n \"Include registration marks in page corners\",\n \"Use corner brackets on feature cards\",\n \"Buttons: rounded-none (angular, blueprint aesthetic)\",\n ],\n },\n {\n title: \"Authenticated views\",\n items: [\n \"Plain bg-deep background (no blueprint grid)\",\n \"Inter for all text at normal / medium weight\",\n \"Cards: rounded-xl with zinc-800 borders\",\n \"Hover states: lighten borders and backgrounds\",\n \"Use max-w-4xl for content containers\",\n \"Buttons: rounded-lg for nav items\",\n ],\n },\n {\n title: \"Dark theme principles\",\n items: [\n \"Three-tier background depth: deep → surface → elevated\",\n \"Text hierarchy: primary → secondary → muted\",\n \"Borders at low opacity to maintain depth without harsh lines\",\n \"Accent colors at reduced opacity for backgrounds (5–10%)\",\n \"Cyan as the primary accent, amber for CTAs only\",\n ],\n },\n {\n title: \"Motion principles\",\n items: [\n \"All entrances use cubic-bezier(0.16, 1, 0.3, 1) — fast start, gentle settle\",\n \"Stagger sibling elements by 100ms increments\",\n \"Keep hover transitions simple: transition-all or transition-colors\",\n \"Reserve pulse-glow for live status indicators only\",\n \"SVG blueprint lines use animate-draw for progressive reveal\",\n ],\n },\n ].map((section) => (\n <div\n key={section.title}\n className=\"relative border p-6 overflow-hidden\"\n style={{ borderColor: \"var(--border-default)\", backgroundColor: \"var(--bg-surface)\" }}\n >\n <svg className=\"absolute top-0 left-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path d=\"M0 16 L0 0 L16 0\" stroke=\"var(--accent-cyan)\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.3\" />\n </svg>\n <h3 className=\"text-sm font-semibold mb-3\" style={{ color: \"var(--text-primary)\" }}>\n {section.title}\n </h3>\n <ul className=\"space-y-1.5\">\n {section.items.map((item, i) => (\n <li\n key={i}\n className=\"flex gap-2 text-xs leading-relaxed\"\n style={{ color: \"var(--text-muted)\" }}\n >\n <span style={{ color: \"var(--accent-cyan)\" }}>·</span>\n {item}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </section>\n\n {/* Footer */}\n <footer className=\"py-12 text-center\">\n <div\n className=\"mx-auto inline-block border border-dashed px-8 py-4\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div\n className=\"font-mono text-[10px] tracking-widest uppercase mb-1\"\n style={{ color: \"var(--text-muted)\" }}\n >\n Style Guide\n </div>\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n Tecture IO Blueprint Design System — Rev 1.0\n </div>\n </div>\n </footer>\n </div>\n );\n}\n","export interface IconPath {\n d: string;\n fill?: string;\n stroke?: string;\n strokeWidth?: number;\n opacity?: number;\n}\n\nexport interface NodeStyle {\n label: string;\n bg: string;\n bgHover: string;\n border: string;\n accent: string;\n text: string;\n iconPaths: IconPath[];\n accentGlow: string;\n}\n\nconst styles: Record<string, NodeStyle> = {\n system: {\n label: \"System\",\n bg: \"#0d1320\",\n bgHover: \"#111827\",\n border: \"#1e3a5f\",\n accent: \"#94a3b8\",\n text: \"#e2e8f0\",\n iconPaths: [\n { d: \"M21 16V8a2 2 0 00-1-1.73l-7-4a2 2 0 00-2 0l-7 4A2 2 0 003 8v8a2 2 0 001 1.73l7 4a2 2 0 002 0l7-4A2 2 0 0021 16z\", fill: \"#94a3b8\", opacity: 0.1 },\n { d: \"M21 16V8a2 2 0 00-1-1.73l-7-4a2 2 0 00-2 0l-7 4A2 2 0 003 8v8a2 2 0 001 1.73l7 4a2 2 0 002 0l7-4A2 2 0 0021 16z\", stroke: \"#94a3b8\", strokeWidth: 1.5 },\n { d: \"M3.27 6.96L12 12.01l8.73-5.05\", stroke: \"#94a3b8\", strokeWidth: 1.5 },\n { d: \"M12 22.08V12\", stroke: \"#94a3b8\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(148,163,184,0.08)\",\n },\n person: {\n label: \"Person\",\n bg: \"#0f1419\",\n bgHover: \"#151c24\",\n border: \"#334155\",\n accent: \"#cbd5e1\",\n text: \"#f1f5f9\",\n iconPaths: [\n { d: \"M12 12a4 4 0 100-8 4 4 0 000 8z\", fill: \"#cbd5e1\", opacity: 0.1 },\n { d: \"M12 12a4 4 0 100-8 4 4 0 000 8z\", stroke: \"#cbd5e1\", strokeWidth: 1.5 },\n { d: \"M4 21a8 8 0 0116 0\", stroke: \"#cbd5e1\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(203,213,225,0.08)\",\n },\n service: {\n label: \"Service\",\n bg: \"#0d1025\",\n bgHover: \"#131738\",\n border: \"#252680\",\n accent: \"#818cf8\",\n text: \"#e0e7ff\",\n iconPaths: [\n { d: \"M12 15a3 3 0 100-6 3 3 0 000 6z\", fill: \"#818cf8\", opacity: 0.1 },\n { d: \"M12 15a3 3 0 100-6 3 3 0 000 6z\", stroke: \"#818cf8\", strokeWidth: 1.5 },\n { d: \"M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z\", stroke: \"#818cf8\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(129,140,248,0.08)\",\n },\n database: {\n label: \"Database\",\n bg: \"#081a14\",\n bgHover: \"#0c2a1e\",\n border: \"#065f46\",\n accent: \"#34d399\",\n text: \"#d1fae5\",\n iconPaths: [\n { d: \"M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4v10c0 2.21-3.582 4-8 4s-8-1.79-8-4V7z\", fill: \"#34d399\", opacity: 0.1 },\n { d: \"M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4\", stroke: \"#34d399\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(52,211,153,0.08)\",\n },\n queue: {\n label: \"Queue\",\n bg: \"#18140a\",\n bgHover: \"#241e10\",\n border: \"#854d0e\",\n accent: \"#fbbf24\",\n text: \"#fef3c7\",\n iconPaths: [\n { d: \"M4 4h16v5H4zM4 13h16v5H4z\", fill: \"#fbbf24\", opacity: 0.08 },\n { d: \"M21 12l-18 0\", stroke: \"#fbbf24\", strokeWidth: 1.5 },\n { d: \"M4 4h16v5H4zM4 13h16v5H4z\", stroke: \"#fbbf24\", strokeWidth: 1.5 },\n { d: \"M8 8h.01M8 17h.01\", stroke: \"#fbbf24\", strokeWidth: 2.5 },\n ],\n accentGlow: \"rgba(251,191,36,0.08)\",\n },\n gateway: {\n label: \"Gateway\",\n bg: \"#100d20\",\n bgHover: \"#181535\",\n border: \"#4c1d95\",\n accent: \"#a78bfa\",\n text: \"#ede9fe\",\n iconPaths: [\n { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\", fill: \"#a78bfa\", opacity: 0.1 },\n { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\", stroke: \"#a78bfa\", strokeWidth: 1.5 },\n { d: \"M9 12l2 2 4-4\", stroke: \"#a78bfa\", strokeWidth: 2 },\n ],\n accentGlow: \"rgba(167,139,250,0.08)\",\n },\n frontend: {\n label: \"Frontend\",\n bg: \"#081420\",\n bgHover: \"#0c1e35\",\n border: \"#0c4a6e\",\n accent: \"#38bdf8\",\n text: \"#e0f2fe\",\n iconPaths: [\n { d: \"M3 5a2 2 0 012-2h14a2 2 0 012 2v10a2 2 0 01-2 2H5a2 2 0 01-2-2V5z\", fill: \"#38bdf8\", opacity: 0.1 },\n { d: \"M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\", stroke: \"#38bdf8\", strokeWidth: 1.5 },\n { d: \"M3 13h18\", stroke: \"#38bdf8\", strokeWidth: 1.5 },\n { d: \"M9.75 17L9 20l-1 1h8l-1-1-.75-3\", stroke: \"#38bdf8\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(56,189,248,0.08)\",\n },\n cache: {\n label: \"Cache\",\n bg: \"#18100a\",\n bgHover: \"#241810\",\n border: \"#7c2d12\",\n accent: \"#fb923c\",\n text: \"#ffedd5\",\n iconPaths: [\n { d: \"M13 10V3L4 14h7v7l9-11h-7z\", fill: \"#fb923c\", opacity: 0.1 },\n { d: \"M13 10V3L4 14h7v7l9-11h-7z\", stroke: \"#fb923c\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(251,146,60,0.08)\",\n },\n storage: {\n label: \"Storage\",\n bg: \"#081816\",\n bgHover: \"#0c2826\",\n border: \"#134e4a\",\n accent: \"#2dd4bf\",\n text: \"#ccfbf1\",\n iconPaths: [\n { d: \"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\", fill: \"#2dd4bf\", opacity: 0.1 },\n { d: \"M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V9a2 2 0 012-2h6l2-2h6a2 2 0 012 2v12z\", stroke: \"#2dd4bf\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(45,212,191,0.08)\",\n },\n external: {\n label: \"External\",\n bg: \"#0d1118\",\n bgHover: \"#141a22\",\n border: \"#1e2d4a\",\n accent: \"#a1a1aa\",\n text: \"#e4e4e7\",\n iconPaths: [\n { d: \"M12 21a9 9 0 100-18 9 9 0 000 18z\", fill: \"#a1a1aa\", opacity: 0.08 },\n { d: \"M12 21a9 9 0 100-18 9 9 0 000 18z\", stroke: \"#a1a1aa\", strokeWidth: 1.5 },\n { d: \"M3.6 9h16.8M3.6 15h16.8\", stroke: \"#a1a1aa\", strokeWidth: 1.5 },\n { d: \"M12 3c2.2 2.5 3.5 5.5 3.5 9s-1.3 6.5-3.5 9c-2.2-2.5-3.5-5.5-3.5-9s1.3-6.5 3.5-9z\", stroke: \"#a1a1aa\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(161,161,170,0.08)\",\n },\n};\n\nconst defaultStyle: NodeStyle = {\n label: \"Component\",\n bg: \"#0a0f1a\",\n bgHover: \"#0f1628\",\n border: \"#1e2d4a\",\n accent: \"#64748b\",\n text: \"#e2e8f0\",\n iconPaths: [\n { d: \"M20 7l-8-4-8 4v10l8 4 8-4V7z\", fill: \"#64748b\", opacity: 0.1 },\n { d: \"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\", stroke: \"#64748b\", strokeWidth: 1.5 },\n ],\n accentGlow: \"rgba(100,116,139,0.08)\",\n};\n\nexport function getNodeStyle(type?: string): NodeStyle {\n return type ? (styles[type] ?? defaultStyle) : defaultStyle;\n}\n","import { Position, type InternalNode } from \"@xyflow/react\";\n\ntype NodeLike = Pick<InternalNode, \"internals\" | \"measured\">;\n\nfunction getNodeCenter(node: NodeLike) {\n return {\n x: node.internals.positionAbsolute.x + (node.measured?.width ?? 0) / 2,\n y: node.internals.positionAbsolute.y + (node.measured?.height ?? 0) / 2,\n };\n}\n\nexport function getClosestSide(nodeA: NodeLike, nodeB: NodeLike): Position {\n const centerA = getNodeCenter(nodeA);\n const centerB = getNodeCenter(nodeB);\n\n const horizontalDiff = Math.abs(centerA.x - centerB.x);\n const verticalDiff = Math.abs(centerA.y - centerB.y);\n\n if (horizontalDiff > verticalDiff) {\n return centerA.x > centerB.x ? Position.Left : Position.Right;\n }\n return centerA.y > centerB.y ? Position.Top : Position.Bottom;\n}\n\nfunction getParams(\n nodeA: NodeLike,\n nodeB: NodeLike,\n handleType: \"source\" | \"target\",\n): [number, number, Position] {\n const centerA = getNodeCenter(nodeA);\n const centerB = getNodeCenter(nodeB);\n\n const horizontalDiff = Math.abs(centerA.x - centerB.x);\n const verticalDiff = Math.abs(centerA.y - centerB.y);\n\n let position: Position;\n if (horizontalDiff > verticalDiff) {\n position = centerA.x > centerB.x ? Position.Left : Position.Right;\n } else {\n position = centerA.y > centerB.y ? Position.Top : Position.Bottom;\n }\n\n const [x, y] = getHandleCoordsByPosition(nodeA, position, handleType);\n return [x, y, position];\n}\n\nfunction getHandleCoordsByPosition(\n node: NodeLike,\n handlePosition: Position,\n handleType: \"source\" | \"target\",\n): [number, number] {\n const bounds = node.internals.handleBounds?.[handleType];\n const handle = bounds?.find((h) => h.position === handlePosition);\n\n if (!handle) {\n return [\n node.internals.positionAbsolute.x + (node.measured?.width ?? 0) / 2,\n node.internals.positionAbsolute.y + (node.measured?.height ?? 0) / 2,\n ];\n }\n\n let offsetX = handle.width / 2;\n let offsetY = handle.height / 2;\n\n switch (handlePosition) {\n case Position.Left:\n offsetX = 0;\n break;\n case Position.Right:\n offsetX = handle.width;\n break;\n case Position.Top:\n offsetY = 0;\n break;\n case Position.Bottom:\n offsetY = handle.height;\n break;\n }\n\n const x = node.internals.positionAbsolute.x + handle.x + offsetX;\n const y = node.internals.positionAbsolute.y + handle.y + offsetY;\n return [x, y];\n}\n\nexport function getEdgeParams(source: NodeLike, target: NodeLike) {\n const [sx, sy, sourcePos] = getParams(source, target, \"source\");\n const [tx, ty, targetPos] = getParams(target, source, \"target\");\n return { sx, sy, tx, ty, sourcePos, targetPos };\n}\n","import { useMemo } from \"react\";\nimport { useNodeId, useStore, type ReactFlowState } from \"@xyflow/react\";\nimport { getClosestSide } from \"../edges/utils\";\n\nexport function useActiveHandleSides(): Set<string> {\n const nodeId = useNodeId();\n\n const activeSides = useStore((state: ReactFlowState) => {\n if (!nodeId) return new Set<string>();\n const thisNode = state.nodeLookup.get(nodeId);\n if (!thisNode) return new Set<string>();\n\n const sides = new Set<string>();\n for (const edge of state.edges) {\n let otherNodeId: string | null = null;\n if (edge.source === nodeId) otherNodeId = edge.target;\n else if (edge.target === nodeId) otherNodeId = edge.source;\n if (!otherNodeId) continue;\n\n const otherNode = state.nodeLookup.get(otherNodeId);\n if (!otherNode) continue;\n sides.add(getClosestSide(thisNode, otherNode));\n }\n return sides;\n });\n\n return useMemo(() => activeSides, [activeSides]);\n}\n","import { createContext } from \"react\";\n\nexport interface LayoutPersistenceContextValue {\n notifyLayoutChanged: () => void;\n}\n\nexport const LayoutPersistenceContext =\n createContext<LayoutPersistenceContextValue | null>(null);\n","import { memo, useCallback, useContext } from \"react\";\nimport {\n Handle,\n NodeResizer,\n Position,\n useNodeId,\n useStore,\n type NodeProps,\n type ReactFlowState,\n} from \"@xyflow/react\";\nimport { getNodeStyle, type NodeStyle } from \"./nodeStyles\";\nimport type { ArchNodeData } from \"./transform\";\nimport { useActiveHandleSides } from \"./hooks/useActiveHandleSides\";\nimport { LayoutPersistenceContext } from \"./LayoutPersistenceContext\";\n\nconst HANDLE_SIDES = [\n { position: Position.Top, prefix: \"top\" },\n { position: Position.Bottom, prefix: \"bottom\" },\n { position: Position.Left, prefix: \"left\" },\n { position: Position.Right, prefix: \"right\" },\n] as const;\n\nfunction ArchitectureNodeInner({ data, selected }: NodeProps) {\n const d = data as ArchNodeData;\n const style = getNodeStyle(d.nodeType);\n const activeSides = useActiveHandleSides();\n\n const handleDrillDown = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (d.subDiagramId) {\n window.location.hash = `#/diagram/${d.subDiagramId}`;\n }\n };\n\n if (d.isContainer || d.hasChildren) {\n return (\n <ContainerNode\n d={d}\n style={style}\n selected={selected ?? false}\n activeSides={activeSides}\n onDrillDown={handleDrillDown}\n />\n );\n }\n\n return (\n <div\n className={`group relative border px-5 py-4 text-center ${d.hasSubDiagram ? \"transition-shadow duration-200 hover:ring-1 hover:ring-offset-1 hover:ring-offset-transparent\" : \"\"}`}\n style={{\n background: style.bg,\n borderColor: style.border,\n color: style.text,\n minWidth: 160,\n cursor: \"pointer\",\n [\"--tw-ring-color\" as string]: d.hasSubDiagram ? style.accent : undefined,\n } as React.CSSProperties}\n >\n <CornerMarks accent={style.accent} />\n\n {HANDLE_SIDES.map(({ position, prefix }) => {\n const isActive = activeSides.has(position);\n return (\n <HandlePair\n key={prefix}\n position={position}\n prefix={prefix}\n style={style}\n isActive={isActive}\n />\n );\n })}\n\n <div className=\"mx-auto mb-2.5 flex items-center justify-center\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0\"\n >\n {style.iconPaths.map((p, i) => (\n <path\n key={i}\n d={p.d}\n fill={p.fill ?? \"none\"}\n stroke={p.stroke ?? \"none\"}\n strokeWidth={p.strokeWidth ?? 0}\n opacity={p.opacity ?? 1}\n />\n ))}\n </svg>\n </div>\n\n <div\n className=\"truncate text-[13px] leading-tight font-semibold tracking-tight\"\n style={{ fontFamily: \"var(--font-sans)\" }}\n >\n {d.label}\n </div>\n\n {d.technology && (\n <div\n className=\"mx-auto mt-1 w-fit px-1.5 py-px text-[9px] leading-tight font-medium\"\n style={{\n color: `${style.accent}99`,\n fontFamily: \"var(--font-mono)\",\n letterSpacing: \"0.08em\",\n }}\n >\n {d.technology}\n </div>\n )}\n\n {d.hasSubDiagram && (\n <div\n onClick={handleDrillDown}\n className=\"mx-auto mt-2 flex w-fit cursor-pointer items-center gap-1 px-2.5 py-0.5 text-[10px] font-medium transition-opacity hover:opacity-80\"\n style={{\n background: `${style.accent}10`,\n color: style.accent,\n border: `1px solid ${style.accent}25`,\n fontFamily: \"var(--font-mono)\",\n letterSpacing: \"0.05em\",\n }}\n >\n <span>Drill down</span>\n <DrillDownChevron />\n </div>\n )}\n </div>\n );\n}\n\ninterface ContainerNodeProps {\n d: ArchNodeData;\n style: NodeStyle;\n selected: boolean;\n activeSides: Set<string>;\n onDrillDown: (e: React.MouseEvent) => void;\n}\n\nconst CONTAINER_PADDING = 16;\nconst CONTAINER_HEADER = 48;\n\nfunction ContainerNode({ d, style, selected, activeSides, onDrillDown }: ContainerNodeProps) {\n const nodeId = useNodeId();\n const persistence = useContext(LayoutPersistenceContext);\n const onResizeEnd = useCallback(() => {\n persistence?.notifyLayoutChanged();\n }, [persistence]);\n const minSize = useStore(\n useCallback(\n (state: ReactFlowState) => {\n let minWidth = 200;\n let minHeight = CONTAINER_HEADER + 40;\n if (!nodeId) return { minWidth, minHeight };\n for (const child of state.nodeLookup.values()) {\n if (child.parentId !== nodeId) continue;\n const w = child.measured?.width ?? 220;\n const h = child.measured?.height ?? 80;\n const right = (child.position?.x ?? 0) + w + CONTAINER_PADDING;\n const bottom = (child.position?.y ?? 0) + h + CONTAINER_PADDING;\n if (right > minWidth) minWidth = right;\n if (bottom > minHeight) minHeight = bottom;\n }\n return { minWidth, minHeight };\n },\n [nodeId],\n ),\n (a, b) => a.minWidth === b.minWidth && a.minHeight === b.minHeight,\n );\n\n return (\n <div\n className=\"group relative\"\n style={{\n width: \"100%\",\n height: \"100%\",\n background: `${style.accent}08`,\n border: `1.5px dashed ${style.accent}80`,\n color: style.text,\n cursor: \"pointer\",\n boxShadow: `inset 0 0 0 1px ${style.accent}14`,\n }}\n >\n <NodeResizer\n isVisible={selected}\n minWidth={minSize.minWidth}\n minHeight={minSize.minHeight}\n onResizeEnd={onResizeEnd}\n lineStyle={{\n borderColor: `${style.accent}55`,\n borderWidth: 1,\n }}\n handleStyle={{\n width: 9,\n height: 9,\n background: style.accent,\n border: `2px solid ${style.bg}`,\n borderRadius: 0,\n boxShadow: `0 0 0 1px ${style.accent}`,\n }}\n />\n <CornerMarks accent={style.accent} />\n\n {HANDLE_SIDES.map(({ position, prefix }) => {\n const isActive = activeSides.has(position);\n return (\n <HandlePair\n key={prefix}\n position={position}\n prefix={prefix}\n style={style}\n isActive={isActive}\n />\n );\n })}\n\n <div\n className=\"pointer-events-auto absolute top-0 right-0 left-0 flex items-center justify-between gap-2 px-3 py-2\"\n style={{\n borderBottom: `1px dashed ${style.accent}55`,\n background: `${style.bg}e6`,\n }}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0\"\n >\n {style.iconPaths.map((p, i) => (\n <path\n key={i}\n d={p.d}\n fill={p.fill ?? \"none\"}\n stroke={p.stroke ?? \"none\"}\n strokeWidth={p.strokeWidth ?? 0}\n opacity={p.opacity ?? 1}\n />\n ))}\n </svg>\n <div\n className=\"truncate text-[12px] leading-tight font-semibold tracking-tight\"\n style={{ fontFamily: \"var(--font-sans)\" }}\n >\n {d.label}\n </div>\n {d.technology && (\n <span\n className=\"shrink-0 text-[9px] leading-tight font-medium\"\n style={{\n color: `${style.accent}99`,\n fontFamily: \"var(--font-mono)\",\n letterSpacing: \"0.08em\",\n }}\n >\n {d.technology}\n </span>\n )}\n </div>\n {d.hasSubDiagram && (\n <div\n onClick={onDrillDown}\n className=\"flex shrink-0 cursor-pointer items-center gap-1 px-2 py-0.5 text-[10px] font-medium transition-opacity hover:opacity-80\"\n style={{\n background: `${style.accent}10`,\n color: style.accent,\n border: `1px solid ${style.accent}25`,\n fontFamily: \"var(--font-mono)\",\n letterSpacing: \"0.05em\",\n }}\n >\n <span>Drill down</span>\n <DrillDownChevron />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction CornerMarks({ accent }: { accent: string }) {\n return (\n <>\n <svg\n className=\"pointer-events-none absolute top-0 left-0\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n >\n <path\n d=\"M0 12 L0 0 L12 0\"\n stroke={accent}\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.3\"\n />\n </svg>\n <svg\n className=\"pointer-events-none absolute right-0 bottom-0\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n >\n <path\n d=\"M12 0 L12 12 L0 12\"\n stroke={accent}\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.3\"\n />\n </svg>\n </>\n );\n}\n\nfunction HandlePair({\n position,\n prefix,\n style,\n isActive,\n}: {\n position: Position;\n prefix: string;\n style: NodeStyle;\n isActive: boolean;\n}) {\n const hStyle: React.CSSProperties = {\n background: style.accent,\n width: 6,\n height: 6,\n border: `2px solid ${style.bg}`,\n boxShadow: `0 0 0 1px ${style.accent}`,\n opacity: isActive ? 1 : 0,\n transition: \"opacity 0.2s ease\",\n borderRadius: 0,\n };\n return (\n <span>\n <Handle\n type=\"source\"\n position={position}\n id={`${prefix}-source`}\n isConnectable={false}\n style={hStyle}\n />\n <Handle\n type=\"target\"\n position={position}\n id={`${prefix}-target`}\n isConnectable={false}\n style={hStyle}\n />\n </span>\n );\n}\n\nfunction DrillDownChevron() {\n return (\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\nexport const ArchitectureNode = memo(ArchitectureNodeInner);\n","export interface EdgeStyleDef {\n color: string;\n dashed: boolean;\n animated: boolean;\n label: string;\n}\n\nconst edgeStyles: Record<string, EdgeStyleDef> = {\n calls: { color: \"#818cf8\", dashed: false, animated: false, label: \"Calls\" },\n \"data-flow\": { color: \"#34d399\", dashed: false, animated: true, label: \"Data Flow\" },\n publishes: { color: \"#fbbf24\", dashed: true, animated: false, label: \"Publishes\" },\n subscribes: { color: \"#fbbf24\", dashed: true, animated: false, label: \"Subscribes\" },\n reads: { color: \"#34d399\", dashed: false, animated: false, label: \"Reads\" },\n writes: { color: \"#fb923c\", dashed: false, animated: false, label: \"Writes\" },\n};\n\nconst defaultEdgeStyle: EdgeStyleDef = {\n color: \"#22d3ee\",\n dashed: false,\n animated: false,\n label: \"Connection\",\n};\n\nexport function getEdgeStyleDef(type?: string): EdgeStyleDef {\n return type ? (edgeStyles[type] ?? defaultEdgeStyle) : defaultEdgeStyle;\n}\n","import { useMemo, useState } from \"react\";\nimport { Panel } from \"@xyflow/react\";\nimport type { ApiDiagram } from \"@tecture/shared\";\nimport { getNodeStyle, type IconPath, type NodeStyle } from \"./nodeStyles\";\nimport { getEdgeStyleDef, type EdgeStyleDef } from \"./edgeStyles\";\n\ninterface Props {\n diagram: ApiDiagram;\n}\n\nexport function Legend({ diagram }: Props) {\n const [open, setOpen] = useState(false);\n\n const { nodeTypes, edgeTypes } = useMemo(() => {\n const n = new Set<string>();\n const e = new Set<string>();\n for (const node of diagram.nodes) {\n if (typeof node.meta?.type === \"string\") n.add(node.meta.type);\n }\n for (const edge of diagram.edges) {\n if (typeof edge.meta?.type === \"string\") e.add(edge.meta.type);\n }\n return { nodeTypes: [...n].sort(), edgeTypes: [...e].sort() };\n }, [diagram]);\n\n if (nodeTypes.length === 0 && edgeTypes.length === 0) return null;\n\n return (\n <Panel position=\"top-right\" className=\"!m-3\">\n <div\n className=\"flex flex-col border shadow-lg backdrop-blur-md\"\n style={{\n background: \"rgba(10, 15, 26, 0.85)\",\n borderColor: \"#1e2d4a\",\n color: \"var(--text, #e2e8f0)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex items-center gap-2 px-3 py-1.5 text-[10px] tracking-[0.2em] uppercase transition-colors hover:text-white\"\n style={{ color: \"var(--text-muted, #94a3b8)\" }}\n aria-expanded={open}\n >\n <LegendGlyph />\n <span>Legend</span>\n <Chevron open={open} />\n </button>\n\n {open && (\n <div\n className=\"flex flex-col gap-3 border-t px-3 py-2.5\"\n style={{ borderColor: \"#1e2d4a\", minWidth: 180 }}\n >\n {nodeTypes.length > 0 && (\n <Section title=\"Nodes\">\n {nodeTypes.map((t) => (\n <NodeRow key={t} type={t} style={getNodeStyle(t)} />\n ))}\n </Section>\n )}\n {edgeTypes.length > 0 && (\n <Section title=\"Edges\">\n {edgeTypes.map((t) => (\n <EdgeRow key={t} style={getEdgeStyleDef(t)} />\n ))}\n </Section>\n )}\n </div>\n )}\n </div>\n </Panel>\n );\n}\n\nfunction Section({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div\n className=\"text-[9px] tracking-[0.25em] uppercase\"\n style={{ color: \"var(--text-muted, #64748b)\" }}\n >\n {title}\n </div>\n <div className=\"flex flex-col gap-1\">{children}</div>\n </div>\n );\n}\n\nfunction NodeRow({ type, style }: { type: string; style: NodeStyle }) {\n return (\n <div className=\"flex items-center gap-2 text-[11px]\">\n <span\n className=\"flex h-6 w-6 shrink-0 items-center justify-center border\"\n style={{ background: style.bg, borderColor: style.border }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n {style.iconPaths.map((p, i) => (\n <IconPathEl key={i} p={p} />\n ))}\n </svg>\n </span>\n <span style={{ color: style.accent }}>{style.label}</span>\n {style.label.toLowerCase() !== type && (\n <span\n className=\"text-[9px] uppercase tracking-wider\"\n style={{ color: \"var(--text-muted, #64748b)\" }}\n >\n {type}\n </span>\n )}\n </div>\n );\n}\n\nfunction EdgeRow({ style }: { style: EdgeStyleDef }) {\n const dash = style.dashed ? \"4 3\" : undefined;\n return (\n <div className=\"flex items-center gap-2 text-[11px]\">\n <svg width=\"28\" height=\"10\" className=\"shrink-0\">\n <line\n x1=\"1\"\n y1=\"5\"\n x2=\"22\"\n y2=\"5\"\n stroke={style.color}\n strokeWidth=\"1.5\"\n strokeDasharray={dash}\n />\n <polygon\n points=\"22,2 28,5 22,8\"\n fill={style.color}\n />\n {style.animated && (\n <circle cx=\"12\" cy=\"5\" r=\"1.5\" fill={style.color}>\n <animate\n attributeName=\"cx\"\n from=\"1\"\n to=\"22\"\n dur=\"1.4s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n )}\n </svg>\n <span style={{ color: style.color }}>{style.label}</span>\n </div>\n );\n}\n\nfunction IconPathEl({ p }: { p: IconPath }) {\n return (\n <path\n d={p.d}\n fill={p.fill ?? \"none\"}\n stroke={p.stroke ?? \"none\"}\n strokeWidth={p.strokeWidth ?? 0}\n opacity={p.opacity ?? 1}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n );\n}\n\nfunction LegendGlyph() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect x=\"3\" y=\"4\" width=\"7\" height=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <rect x=\"14\" y=\"4\" width=\"7\" height=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" opacity=\"0.6\" />\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" opacity=\"0.35\" />\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" opacity=\"0.15\" />\n </svg>\n );\n}\n\nfunction Chevron({ open }: { open: boolean }) {\n return (\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{\n transform: `rotate(${open ? 180 : 0}deg)`,\n transition: \"transform 0.15s ease\",\n }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n","import {\n EdgeLabelRenderer,\n getSmoothStepPath,\n useInternalNode,\n type EdgeProps,\n} from \"@xyflow/react\";\nimport { getEdgeParams } from \"./utils\";\n\nexport function FloatingEdge({\n id,\n source,\n target,\n markerEnd,\n style,\n label,\n labelStyle,\n labelBgStyle,\n labelBgPadding,\n labelBgBorderRadius,\n animated,\n}: EdgeProps) {\n const sourceNode = useInternalNode(source);\n const targetNode = useInternalNode(target);\n\n if (!sourceNode || !targetNode) return null;\n\n const { sx, sy, tx, ty, sourcePos, targetPos } = getEdgeParams(\n sourceNode,\n targetNode,\n );\n\n const [edgePath, labelX, labelY] = getSmoothStepPath({\n sourceX: sx,\n sourceY: sy,\n sourcePosition: sourcePos,\n targetPosition: targetPos,\n targetX: tx,\n targetY: ty,\n borderRadius: 8,\n });\n\n return (\n <>\n <path\n id={id}\n className={`react-flow__edge-path${animated ? \" react-flow__edge-path--animated\" : \"\"}`}\n d={edgePath}\n markerEnd={markerEnd}\n style={style}\n />\n {label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%, -50%) translate(${labelX}px, ${labelY}px)`,\n pointerEvents: \"all\",\n ...(labelBgStyle\n ? {\n background: resolveLabelBg(labelBgStyle),\n borderRadius: labelBgBorderRadius ?? 4,\n padding: labelBgPadding\n ? `${(labelBgPadding as [number, number])[1]}px ${(labelBgPadding as [number, number])[0]}px`\n : \"4px 6px\",\n }\n : {}),\n }}\n >\n <span style={labelStyle as React.CSSProperties}>{label}</span>\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n\nfunction resolveLabelBg(labelBgStyle: unknown): string {\n const s = labelBgStyle as { fill?: string; fillOpacity?: number };\n const fill = s.fill ?? \"#0a0f1a\";\n const alpha = s.fillOpacity ?? 1;\n if (alpha >= 1) return fill;\n const hex = fill.replace(\"#\", \"\");\n if (hex.length !== 3 && hex.length !== 6) return fill;\n const full = hex.length === 3 ? hex.split(\"\").map((c) => c + c).join(\"\") : hex;\n const r = parseInt(full.slice(0, 2), 16);\n const g = parseInt(full.slice(2, 4), 16);\n const b = parseInt(full.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","import { MarkerType, type Edge, type Node } from \"@xyflow/react\";\nimport type { ApiDiagram, ArchitectureNode, ArchitectureEdge } from \"@tecture/shared\";\nimport { getEdgeStyleDef } from \"./edgeStyles\";\n\nexport interface ArchNodeData extends Record<string, unknown> {\n label: string;\n nodeType?: string;\n technology?: string;\n hasSubDiagram: boolean;\n subDiagramId?: string;\n isContainer: boolean;\n hasChildren: boolean;\n}\n\nexport function diagramToFlow(diagram: ApiDiagram): {\n nodes: Node<ArchNodeData>[];\n edges: Edge[];\n} {\n const nodeIds = new Set(diagram.nodes.map((n) => n.id));\n const childCounts = new Map<string, number>();\n for (const n of diagram.nodes) {\n if (n.parentId && nodeIds.has(n.parentId)) {\n childCounts.set(n.parentId, (childCounts.get(n.parentId) ?? 0) + 1);\n }\n }\n return {\n nodes: diagram.nodes.map((n) => toFlowNode(n, childCounts.has(n.id))),\n edges: diagram.edges\n .filter((e) => nodeIds.has(e.source) && nodeIds.has(e.target))\n .map(toFlowEdge),\n };\n}\n\nfunction toFlowNode(n: ArchitectureNode, hasChildren: boolean): Node<ArchNodeData> {\n const isContainer = Boolean(n.meta?.isContainer) || hasChildren;\n const data: ArchNodeData = {\n label: n.label,\n nodeType: n.meta?.type,\n technology: typeof n.meta?.technology === \"string\" ? n.meta.technology : undefined,\n hasSubDiagram: Boolean(n.subDiagramId),\n subDiagramId: n.subDiagramId ?? undefined,\n isContainer,\n hasChildren,\n };\n const node: Node<ArchNodeData> = {\n id: n.id,\n type: \"architecture\",\n position: { x: 0, y: 0 },\n data,\n };\n if (n.parentId) {\n node.parentId = n.parentId;\n node.extent = \"parent\";\n }\n return node;\n}\n\nfunction toFlowEdge(e: ArchitectureEdge): Edge {\n const def = getEdgeStyleDef(e.meta?.type);\n const style: Record<string, unknown> = { strokeWidth: 1.5, stroke: def.color };\n if (def.dashed) style.strokeDasharray = \"5 5\";\n\n return {\n id: e.id,\n source: e.source,\n target: e.target,\n type: \"floating\",\n label: e.label,\n animated: def.animated,\n style,\n markerEnd: {\n type: MarkerType.ArrowClosed,\n width: 16,\n height: 16,\n color: def.color,\n },\n labelStyle: {\n fontSize: 10,\n fill: \"#94a3b8\",\n fontWeight: 500,\n letterSpacing: \"0.04em\",\n fontFamily: \"var(--font-mono)\",\n },\n labelBgStyle: {\n fill: \"#0a0f1a\",\n fillOpacity: 0.92,\n },\n labelBgPadding: [6, 4] as [number, number],\n labelBgBorderRadius: 4,\n };\n}\n","import ELK, { type ElkNode } from \"elkjs/lib/elk.bundled.js\";\nimport type { Edge, Node } from \"@xyflow/react\";\nimport type { DiagramDirection, DiagramLayoutFile } from \"@tecture/shared\";\n\nconst elk = new ELK();\n\nconst LEAF_WIDTH = 220;\nconst LEAF_HEIGHT = 80;\n// Extra top padding reserves space for the container's header label.\nconst CONTAINER_PADDING = \"[top=48,left=16,bottom=16,right=16]\";\n\nfunction elkDirection(direction: DiagramDirection | undefined): string {\n return direction === \"LR\" ? \"RIGHT\" : \"DOWN\";\n}\n\nexport async function layoutDiagram(\n nodes: Node[],\n edges: Edge[],\n direction: DiagramDirection | undefined,\n overlay?: DiagramLayoutFile,\n): Promise<Node[]> {\n if (nodes.length === 0) return nodes;\n\n const childrenByParent = new Map<string | undefined, Node[]>();\n for (const n of nodes) {\n const key = n.parentId ?? undefined;\n const list = childrenByParent.get(key) ?? [];\n list.push(n);\n childrenByParent.set(key, list);\n }\n const isContainer = (id: string) =>\n (childrenByParent.get(id)?.length ?? 0) > 0;\n\n const buildElkNode = (n: Node): ElkNode => {\n if (isContainer(n.id)) {\n return {\n id: n.id,\n layoutOptions: { \"elk.padding\": CONTAINER_PADDING },\n children: (childrenByParent.get(n.id) ?? []).map(buildElkNode),\n };\n }\n return { id: n.id, width: LEAF_WIDTH, height: LEAF_HEIGHT };\n };\n\n const topLevel = childrenByParent.get(undefined) ?? [];\n const graph: ElkNode = {\n id: \"root\",\n layoutOptions: {\n \"elk.algorithm\": \"layered\",\n \"elk.direction\": elkDirection(direction),\n \"elk.edgeRouting\": \"ORTHOGONAL\",\n \"elk.spacing.nodeNode\": \"80\",\n \"elk.layered.spacing.nodeNodeBetweenLayers\": \"120\",\n \"elk.layered.crossingMinimization.strategy\": \"LAYER_SWEEP\",\n \"elk.hierarchyHandling\": \"INCLUDE_CHILDREN\",\n },\n children: topLevel.map(buildElkNode),\n edges: edges.map((e) => ({\n id: e.id,\n sources: [e.source],\n targets: [e.target],\n })),\n };\n\n const result = await elk.layout(graph);\n\n const positions = new Map<string, { x: number; y: number }>();\n const sizes = new Map<string, { width: number; height: number }>();\n const walk = (elkNode: ElkNode) => {\n if (elkNode.id !== \"root\") {\n positions.set(elkNode.id, { x: elkNode.x ?? 0, y: elkNode.y ?? 0 });\n if (isContainer(elkNode.id)) {\n sizes.set(elkNode.id, {\n width: elkNode.width ?? LEAF_WIDTH,\n height: elkNode.height ?? LEAF_HEIGHT,\n });\n }\n }\n for (const c of elkNode.children ?? []) walk(c);\n };\n walk(result);\n\n // ReactFlow requires parent nodes to appear before their children in the nodes array.\n const visited = new Set<string>();\n const ordered: Node[] = [];\n const emit = (n: Node) => {\n if (visited.has(n.id)) return;\n visited.add(n.id);\n const saved = overlay?.nodes[n.id];\n const position = saved\n ? { x: saved.x, y: saved.y }\n : positions.get(n.id) ?? { x: 0, y: 0 };\n const out: Node = { ...n, position };\n const elkSize = sizes.get(n.id);\n const width = saved?.width ?? elkSize?.width;\n const height = saved?.height ?? elkSize?.height;\n if (width !== undefined && height !== undefined) {\n out.style = { ...(n.style ?? {}), width, height };\n }\n ordered.push(out);\n for (const c of childrenByParent.get(n.id) ?? []) emit(c);\n };\n for (const n of topLevel) emit(n);\n for (const n of nodes) if (!visited.has(n.id)) emit(n);\n\n return ordered;\n}\n","import { useEffect, useState } from \"react\";\nimport type { BundlePhase, BundleState } from \"./ArchitectureBundleContext\";\n\nconst PHASE_LABELS: Record<BundlePhase, string> = {\n summary: \"Reading manifest\",\n diagrams: \"Loading diagrams\",\n descriptions: \"Loading node details\",\n};\n\nconst SPLASH_DELAY_MS = 150;\n\ninterface Props {\n state: Exclude<BundleState, { status: \"ready\" }>;\n}\n\nexport function LoadingSplash({ state }: Props) {\n const [shouldRender, setShouldRender] = useState(false);\n\n useEffect(() => {\n if (state.status === \"error\") {\n setShouldRender(true);\n return;\n }\n const t = setTimeout(() => setShouldRender(true), SPLASH_DELAY_MS);\n return () => clearTimeout(t);\n }, [state.status]);\n\n if (!shouldRender) {\n return (\n <div\n className=\"blueprint-grid h-screen w-screen\"\n style={{ backgroundColor: \"var(--bg-deep)\" }}\n aria-hidden\n />\n );\n }\n\n return (\n <div\n className=\"blueprint-grid flex h-screen w-screen items-center justify-center\"\n style={{ backgroundColor: \"var(--bg-deep)\" }}\n role=\"status\"\n aria-live=\"polite\"\n >\n <div\n className=\"animate-fade-up min-w-[320px] max-w-[420px] border px-6 py-5 shadow-lg backdrop-blur-md\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n }}\n >\n {state.status === \"error\" ? (\n <ErrorCard message={state.message} />\n ) : (\n <LoadingCard state={state} />\n )}\n </div>\n </div>\n );\n}\n\nfunction LoadingCard({\n state,\n}: {\n state: Extract<BundleState, { status: \"loading\" }>;\n}) {\n const { phase, done, total, archName } = state;\n const ratio = total > 0 ? Math.min(1, done / total) : 0;\n const showProgressNumbers = phase !== \"summary\";\n\n return (\n <>\n <div\n className=\"text-[9px] tracking-[0.32em] uppercase\"\n style={{ color: \"var(--text-muted)\", fontFamily: \"var(--font-mono)\" }}\n >\n Architecture\n </div>\n <div\n className=\"mt-1 truncate text-[18px] leading-tight font-semibold tracking-tight\"\n style={{ color: \"var(--text-primary)\", fontFamily: \"var(--font-sans)\" }}\n >\n {archName ?? \"Loading architecture…\"}\n </div>\n\n <div\n className=\"mt-5 flex items-center justify-between text-[10px] tracking-[0.2em] uppercase\"\n style={{ color: \"var(--text-secondary)\", fontFamily: \"var(--font-mono)\" }}\n >\n <span>{PHASE_LABELS[phase]}</span>\n {showProgressNumbers && (\n <span style={{ color: \"var(--text-muted)\" }}>\n {done} / {total}\n </span>\n )}\n </div>\n\n <div\n className=\"mt-2 h-[2px] w-full overflow-hidden\"\n style={{ backgroundColor: \"var(--border-default)\" }}\n >\n {phase === \"summary\" ? (\n <div\n className=\"h-full w-1/3\"\n style={{\n backgroundColor: \"var(--accent-cyan)\",\n animation: \"rf-edge-dash 1.2s linear infinite\",\n }}\n />\n ) : (\n <div\n className=\"h-full\"\n style={{\n width: `${ratio * 100}%`,\n backgroundColor: \"var(--accent-cyan)\",\n transition: \"width 200ms ease-out\",\n }}\n />\n )}\n </div>\n </>\n );\n}\n\nfunction ErrorCard({ message }: { message: string }) {\n return (\n <>\n <div\n className=\"text-[9px] tracking-[0.32em] uppercase\"\n style={{ color: \"var(--accent-amber)\", fontFamily: \"var(--font-mono)\" }}\n >\n Failed to load\n </div>\n <div\n className=\"mt-2 text-[14px] leading-snug\"\n style={{ color: \"var(--text-primary)\", fontFamily: \"var(--font-sans)\" }}\n >\n Could not load the architecture.\n </div>\n <div\n className=\"mt-1 text-[11px] leading-relaxed break-words\"\n style={{ color: \"var(--text-muted)\", fontFamily: \"var(--font-mono)\" }}\n >\n {message}\n </div>\n <button\n type=\"button\"\n onClick={() => window.location.reload()}\n className=\"mt-4 border px-3 py-1.5 text-[10px] tracking-[0.2em] uppercase transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--border-default)\",\n color: \"var(--accent-cyan)\",\n fontFamily: \"var(--font-mono)\",\n backgroundColor: \"transparent\",\n }}\n >\n Retry\n </button>\n </>\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport type {\n ApiArchitectureSummary,\n ApiDiagram,\n ApiDiagramLayoutUpdate,\n ApiNodeDetail,\n DiagramLayoutFile,\n} from \"@tecture/shared\";\nimport { LoadingSplash } from \"./LoadingSplash\";\nimport type { WebDataSource } from \"./dataSource\";\n\nexport interface ArchitectureBundle {\n summary: ApiArchitectureSummary;\n diagrams: Record<string, ApiDiagram>;\n layouts: Record<string, DiagramLayoutFile>;\n nodes: Record<string, ApiNodeDetail>;\n missingDescriptions: Set<string>;\n}\n\nexport type BundlePhase = \"summary\" | \"diagrams\" | \"descriptions\";\n\nexport type BundleState =\n | {\n status: \"loading\";\n phase: BundlePhase;\n done: number;\n total: number;\n archName?: string;\n }\n | { status: \"error\"; message: string }\n | { status: \"ready\"; bundle: ArchitectureBundle };\n\ninterface ContextValue {\n bundle: ArchitectureBundle;\n saveLayout: (slug: string, update: ApiDiagramLayoutUpdate) => Promise<void>;\n openInEditor?: (path: string) => void;\n reportUsage: (event: string, props?: { level?: number }) => void;\n}\n\nconst ArchitectureBundleContext = createContext<ContextValue | null>(null);\n\nexport function useArchitectureBundle(): ArchitectureBundle {\n const ctx = useContext(ArchitectureBundleContext);\n if (!ctx) {\n throw new Error(\n \"useArchitectureBundle must be used inside ArchitectureBundleProvider\",\n );\n }\n return ctx.bundle;\n}\n\nexport function useSaveLayout(): (\n slug: string,\n update: ApiDiagramLayoutUpdate,\n) => Promise<void> {\n const ctx = useContext(ArchitectureBundleContext);\n if (!ctx) {\n throw new Error(\n \"useSaveLayout must be used inside ArchitectureBundleProvider\",\n );\n }\n return ctx.saveLayout;\n}\n\n/** Returns the editor-open capability, or undefined when running in the browser. */\nexport function useOpenInEditor(): ((path: string) => void) | undefined {\n const ctx = useContext(ArchitectureBundleContext);\n if (!ctx) {\n throw new Error(\n \"useOpenInEditor must be used inside ArchitectureBundleProvider\",\n );\n }\n return ctx.openInEditor;\n}\n\n/** Returns the anonymous usage reporter (no-op when the data source omits it). */\nexport function useReportUsage(): (\n event: string,\n props?: { level?: number },\n) => void {\n const ctx = useContext(ArchitectureBundleContext);\n if (!ctx) {\n throw new Error(\n \"useReportUsage must be used inside ArchitectureBundleProvider\",\n );\n }\n return ctx.reportUsage;\n}\n\nexport interface ArchitectureBundleProviderProps {\n dataSource: WebDataSource;\n children: ReactNode;\n /** Forces a reload when the value changes. */\n reloadKey?: unknown;\n}\n\nexport function ArchitectureBundleProvider({\n dataSource,\n children,\n reloadKey,\n}: ArchitectureBundleProviderProps) {\n const [state, setState] = useState<BundleState>({\n status: \"loading\",\n phase: \"summary\",\n done: 0,\n total: 1,\n });\n\n useEffect(() => {\n let cancelled = false;\n setState({ status: \"loading\", phase: \"summary\", done: 0, total: 1 });\n void loadBundle({\n dataSource,\n onState: (next) => {\n if (!cancelled) setState(next);\n },\n isCancelled: () => cancelled,\n });\n return () => {\n cancelled = true;\n };\n }, [dataSource, reloadKey]);\n\n const saveLayout = useCallback(\n async (slug: string, update: ApiDiagramLayoutUpdate) => {\n const saved = await dataSource.saveLayout(slug, update);\n setState((prev) => {\n if (prev.status !== \"ready\") return prev;\n return {\n status: \"ready\",\n bundle: {\n ...prev.bundle,\n layouts: { ...prev.bundle.layouts, [slug]: saved },\n },\n };\n });\n },\n [dataSource],\n );\n\n const openInEditor = useMemo(\n () =>\n dataSource.openInEditor\n ? (path: string) => dataSource.openInEditor?.(path)\n : undefined,\n [dataSource],\n );\n\n const reportUsage = useCallback(\n (event: string, props?: { level?: number }) => {\n dataSource.reportUsage?.(event, props);\n },\n [dataSource],\n );\n\n const bundle = state.status === \"ready\" ? state.bundle : null;\n const contextValue = useMemo<ContextValue | null>(() => {\n if (!bundle) return null;\n return { bundle, saveLayout, openInEditor, reportUsage };\n }, [bundle, saveLayout, openInEditor, reportUsage]);\n\n if (state.status !== \"ready\") {\n return <LoadingSplash state={state} />;\n }\n if (!contextValue) return null;\n\n return (\n <ArchitectureBundleContext.Provider value={contextValue}>\n {children}\n </ArchitectureBundleContext.Provider>\n );\n}\n\ninterface LoadCallbacks {\n dataSource: WebDataSource;\n onState: (state: BundleState) => void;\n isCancelled: () => boolean;\n}\n\nasync function loadBundle({\n dataSource,\n onState,\n isCancelled,\n}: LoadCallbacks): Promise<void> {\n try {\n onState({ status: \"loading\", phase: \"summary\", done: 0, total: 1 });\n const summary = await dataSource.loadSummary();\n if (isCancelled()) return;\n\n const diagramSlugs = summary.diagrams.map((d) => d.slug);\n let diagramsDone = 0;\n const diagramTotal = diagramSlugs.length * 2;\n onState({\n status: \"loading\",\n phase: \"diagrams\",\n done: 0,\n total: diagramTotal,\n archName: summary.name,\n });\n\n const bumpDiagrams = () => {\n diagramsDone += 1;\n onState({\n status: \"loading\",\n phase: \"diagrams\",\n done: diagramsDone,\n total: diagramTotal,\n archName: summary.name,\n });\n };\n\n const diagramResults = await Promise.all(\n diagramSlugs.map(async (slug) => {\n const diagramPromise = dataSource.loadDiagram(slug).then((d) => {\n if (!isCancelled()) bumpDiagrams();\n return d;\n });\n const layoutPromise = dataSource.loadLayout(slug).then((l) => {\n if (!isCancelled()) bumpDiagrams();\n return l;\n });\n const [diagram, layout] = await Promise.all([\n diagramPromise,\n layoutPromise,\n ]);\n return { slug, diagram, layout };\n }),\n );\n if (isCancelled()) return;\n\n const diagrams: Record<string, ApiDiagram> = {};\n const layouts: Record<string, DiagramLayoutFile> = {};\n const nodeIds = new Set<string>();\n for (const { slug, diagram, layout } of diagramResults) {\n diagrams[slug] = diagram;\n layouts[slug] = layout;\n for (const node of diagram.nodes ?? []) nodeIds.add(node.id);\n }\n\n const nodeIdList = [...nodeIds];\n let nodesDone = 0;\n onState({\n status: \"loading\",\n phase: \"descriptions\",\n done: 0,\n total: nodeIdList.length,\n archName: summary.name,\n });\n\n const bumpNodes = () => {\n nodesDone += 1;\n onState({\n status: \"loading\",\n phase: \"descriptions\",\n done: nodesDone,\n total: nodeIdList.length,\n archName: summary.name,\n });\n };\n\n const nodes: Record<string, ApiNodeDetail> = {};\n const missing = new Set<string>();\n await Promise.all(\n nodeIdList.map(async (id) => {\n try {\n const detail = await dataSource.loadNodeDetail(id);\n nodes[id] = detail;\n } catch {\n missing.add(id);\n } finally {\n if (!isCancelled()) bumpNodes();\n }\n }),\n );\n if (isCancelled()) return;\n\n onState({\n status: \"ready\",\n bundle: {\n summary,\n diagrams,\n layouts,\n nodes,\n missingDescriptions: missing,\n },\n });\n } catch (err) {\n if (isCancelled()) return;\n const message = err instanceof Error ? err.message : String(err);\n onState({ status: \"error\", message });\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Background,\n BackgroundVariant,\n Controls,\n MiniMap,\n ReactFlow,\n ReactFlowProvider,\n useEdgesState,\n useNodesState,\n useReactFlow,\n type Edge,\n type Node,\n type NodeMouseHandler,\n} from \"@xyflow/react\";\nimport type {\n ApiDiagramLayoutUpdate,\n DiagramLayoutFile,\n NodeLayoutEntry,\n} from \"@tecture/shared\";\nimport { ArchitectureNode } from \"./ArchitectureNode\";\nimport { Legend } from \"./Legend\";\nimport { LayoutPersistenceContext } from \"./LayoutPersistenceContext\";\nimport { FloatingEdge } from \"./edges/FloatingEdge\";\nimport { diagramToFlow, type ArchNodeData } from \"./transform\";\nimport { layoutDiagram } from \"./layout\";\nimport {\n useArchitectureBundle,\n useSaveLayout,\n} from \"./ArchitectureBundleContext\";\n\nconst nodeTypes = { architecture: ArchitectureNode };\nconst edgeTypes = { floating: FloatingEdge };\n\ninterface Props {\n diagramId: string;\n onSelectNode: (nodeId: string | null) => void;\n onDrillIn: (diagramId: string) => void;\n}\n\nexport function DiagramCanvas(props: Props) {\n return (\n <ReactFlowProvider>\n <DiagramCanvasInner {...props} />\n </ReactFlowProvider>\n );\n}\n\nconst emptyLayout = (slug: string): DiagramLayoutFile => ({\n version: 1,\n diagramId: slug,\n updatedAt: \"\",\n nodes: {},\n});\n\nfunction collectLayoutEntries(\n nodes: Node[],\n): Record<string, NodeLayoutEntry> {\n const out: Record<string, NodeLayoutEntry> = {};\n for (const n of nodes) {\n const entry: NodeLayoutEntry = {\n x: n.position?.x ?? 0,\n y: n.position?.y ?? 0,\n };\n const w = n.width ?? (n.style?.width as number | undefined);\n const h = n.height ?? (n.style?.height as number | undefined);\n if (typeof w === \"number\" && Number.isFinite(w)) entry.width = w;\n if (typeof h === \"number\" && Number.isFinite(h)) entry.height = h;\n out[n.id] = entry;\n }\n return out;\n}\n\nfunction DiagramCanvasInner({ diagramId, onSelectNode, onDrillIn }: Props) {\n const bundle = useArchitectureBundle();\n const saveLayout = useSaveLayout();\n const diagram = bundle.diagrams[diagramId];\n\n const [nodes, setNodes, onNodesChange] = useNodesState<Node<ArchNodeData>>([]);\n const [edges, setEdges, onEdgesChange] = useEdgesState<Edge>([]);\n const [ready, setReady] = useState(false);\n const [layoutError, setLayoutError] = useState<string | null>(null);\n const { getNodes } = useReactFlow();\n const saveTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const currentDiagramIdRef = useRef(diagramId);\n currentDiagramIdRef.current = diagramId;\n const bundleRef = useRef(bundle);\n bundleRef.current = bundle;\n\n useEffect(() => {\n let cancelled = false;\n setReady(false);\n setLayoutError(null);\n onSelectNode(null);\n\n const currentBundle = bundleRef.current;\n const currentDiagram = currentBundle.diagrams[diagramId];\n if (!currentDiagram) {\n setLayoutError(`Diagram \"${diagramId}\" was not loaded`);\n setNodes([]);\n setEdges([]);\n return () => {\n cancelled = true;\n };\n }\n\n const currentLayout =\n currentBundle.layouts[diagramId] ?? emptyLayout(diagramId);\n const { nodes: rfNodes, edges: rfEdges } = diagramToFlow(currentDiagram);\n layoutDiagram(rfNodes, rfEdges, currentDiagram.meta?.direction, currentLayout)\n .then((positioned) => {\n if (cancelled) return;\n setNodes(positioned as Node<ArchNodeData>[]);\n setEdges(rfEdges);\n requestAnimationFrame(() => !cancelled && setReady(true));\n })\n .catch((err: Error) => {\n if (!cancelled) setLayoutError(err.message);\n });\n\n return () => {\n cancelled = true;\n if (saveTimeoutRef.current) {\n clearTimeout(saveTimeoutRef.current);\n saveTimeoutRef.current = null;\n }\n };\n }, [diagramId, onSelectNode, setEdges, setNodes]);\n\n const persistLayout = useCallback(() => {\n const slug = currentDiagramIdRef.current;\n const update: ApiDiagramLayoutUpdate = {\n nodes: collectLayoutEntries(getNodes()),\n };\n saveLayout(slug, update).catch((err) => {\n console.warn(\"[tecture] failed to persist layout\", err);\n });\n }, [getNodes, saveLayout]);\n\n const notifyLayoutChanged = useCallback(() => {\n if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);\n saveTimeoutRef.current = setTimeout(() => {\n saveTimeoutRef.current = null;\n persistLayout();\n }, 150);\n }, [persistLayout]);\n\n const persistenceValue = useMemo(\n () => ({ notifyLayoutChanged }),\n [notifyLayoutChanged],\n );\n\n const onNodeDragStop = useCallback<NodeMouseHandler>(() => {\n notifyLayoutChanged();\n }, [notifyLayoutChanged]);\n\n const onNodeClick = useMemo<NodeMouseHandler>(\n () => (_event, node) => {\n onSelectNode(node.id);\n },\n [onSelectNode],\n );\n\n const onNodeDoubleClick = useMemo<NodeMouseHandler>(\n () => (_event, node) => {\n const data = node.data as ArchNodeData;\n if (data.subDiagramId) onDrillIn(data.subDiagramId);\n },\n [onDrillIn],\n );\n\n return (\n <LayoutPersistenceContext.Provider value={persistenceValue}>\n <div className=\"relative h-full w-full\">\n <ReactFlow\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onNodeClick={onNodeClick}\n onNodeDoubleClick={onNodeDoubleClick}\n onNodeDragStop={onNodeDragStop}\n onPaneClick={() => onSelectNode(null)}\n fitView\n fitViewOptions={{ padding: 0.2 }}\n colorMode=\"dark\"\n proOptions={{ hideAttribution: true }}\n minZoom={0.1}\n maxZoom={2}\n style={{\n opacity: ready ? 1 : 0,\n transition: \"opacity 0.2s ease-in\",\n }}\n >\n <Background\n variant={BackgroundVariant.Lines}\n gap={20}\n size={1}\n color=\"rgba(34, 78, 130, 0.12)\"\n />\n <Controls showInteractive={false} position=\"bottom-right\" />\n {diagram && <Legend diagram={diagram} />}\n <MiniMap\n position=\"bottom-left\"\n pannable\n zoomable\n nodeColor=\"#22d3ee\"\n nodeStrokeColor=\"#1e2d4a\"\n maskColor=\"rgba(10, 15, 26, 0.7)\"\n />\n </ReactFlow>\n\n {layoutError && (\n <CanvasOverlay label={`Error: ${layoutError}`} />\n )}\n </div>\n </LayoutPersistenceContext.Provider>\n );\n}\n\nfunction CanvasOverlay({ label }: { label: string }) {\n return (\n <div\n className=\"pointer-events-none absolute inset-0 flex items-center justify-center\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <span className=\"text-xs tracking-[0.3em] uppercase\">{label}</span>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport type { ApiArchitectureSummary, ApiDiagramSummary } from \"@tecture/shared\";\n\ninterface Props {\n summary: ApiArchitectureSummary | null;\n currentDiagramId: string | null;\n onSelect: (slug: string) => void;\n onGoHome: () => void;\n}\n\nexport function DiagramList({\n summary,\n currentDiagramId,\n onSelect,\n onGoHome,\n}: Props) {\n const [open, setOpen] = useState(true);\n const atEntry =\n summary != null && currentDiagramId === summary.topDiagram;\n\n return (\n <div className=\"absolute top-3 left-3 z-10 w-64\">\n <div\n className=\"border shadow-lg backdrop-blur-md\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n }}\n >\n {/* Title block — architecture identity + entry return */}\n <button\n type=\"button\"\n onClick={onGoHome}\n disabled={atEntry}\n className=\"group flex w-full flex-col items-start gap-1 px-3 pt-2.5 pb-3 text-left transition-colors disabled:cursor-default\"\n style={{\n background: \"transparent\",\n border: \"none\",\n borderBottom: \"1px solid var(--border-default)\",\n cursor: atEntry ? \"default\" : \"pointer\",\n }}\n title={atEntry ? undefined : \"Return to entry diagram\"}\n aria-label={\n atEntry\n ? \"Architecture title block\"\n : \"Return to entry diagram\"\n }\n >\n <div className=\"flex w-full items-center justify-between\">\n <span\n className=\"text-[9px] tracking-[0.32em] uppercase\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n Architecture\n </span>\n {!atEntry && (\n <span\n className=\"flex items-center gap-1 text-[9px] tracking-[0.2em] uppercase opacity-0 transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100\"\n style={{\n color: \"var(--accent-cyan)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <svg\n width=\"8\"\n height=\"8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\" />\n <polyline points=\"12 19 5 12 12 5\" />\n </svg>\n Entry\n </span>\n )}\n </div>\n <span\n className=\"truncate text-[15px] leading-tight font-semibold tracking-tight transition-colors group-hover:text-white group-focus-visible:text-white\"\n style={{\n color: \"var(--text-primary)\",\n fontFamily: \"var(--font-sans)\",\n maxWidth: \"100%\",\n }}\n >\n {summary?.name ?? \"…\"}\n </span>\n </button>\n\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center justify-between px-3 py-2 transition-colors hover:text-white\"\n style={{\n color: \"var(--text-muted)\",\n background: \"transparent\",\n border: \"none\",\n borderBottom: open\n ? `1px solid var(--border-default)`\n : \"1px solid transparent\",\n }}\n aria-expanded={open}\n >\n <span\n className=\"text-[10px] tracking-[0.3em] uppercase\"\n style={{ fontFamily: \"var(--font-mono)\" }}\n >\n Diagrams {summary ? `· ${summary.diagrams.length}` : \"\"}\n </span>\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{\n transform: open ? \"rotate(90deg)\" : \"rotate(0deg)\",\n transition: \"transform 150ms ease\",\n }}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n\n {open && (\n <ul className=\"max-h-[60vh] overflow-y-auto py-1\">\n {summary?.diagrams.map((d) => (\n <DiagramRow\n key={d.slug}\n diagram={d}\n active={d.slug === currentDiagramId}\n isTop={d.slug === summary.topDiagram}\n onSelect={onSelect}\n />\n ))}\n {!summary && (\n <li\n className=\"px-3 py-2 text-[11px]\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n Loading…\n </li>\n )}\n </ul>\n )}\n </div>\n </div>\n );\n}\n\nfunction DiagramRow({\n diagram,\n active,\n isTop,\n onSelect,\n}: {\n diagram: ApiDiagramSummary;\n active: boolean;\n isTop: boolean;\n onSelect: (slug: string) => void;\n}) {\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => onSelect(diagram.slug)}\n className=\"flex w-full flex-col items-start gap-0.5 px-3 py-2 text-left transition-colors\"\n style={{\n background: active ? \"rgba(34, 211, 238, 0.08)\" : \"transparent\",\n borderLeft: active\n ? \"2px solid var(--accent-cyan)\"\n : \"2px solid transparent\",\n color: active ? \"var(--text-primary)\" : \"var(--text-secondary)\",\n cursor: \"pointer\",\n border: \"none\",\n borderLeftWidth: \"2px\",\n }}\n >\n <div className=\"flex w-full items-center gap-2\">\n <span\n className=\"text-[9px] tracking-[0.2em] uppercase\"\n style={{\n color: active ? \"var(--accent-cyan)\" : \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n L{diagram.level ?? \"?\"}\n </span>\n <span\n className=\"truncate text-[13px] leading-tight font-medium\"\n style={{ fontFamily: \"var(--font-sans)\" }}\n >\n {diagram.name}\n </span>\n {isTop && (\n <span\n className=\"ml-auto px-1 py-px text-[8px] tracking-[0.2em] uppercase\"\n style={{\n color: \"var(--accent-amber)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n Entry\n </span>\n )}\n </div>\n <span\n className=\"text-[10px] tracking-wider\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n {diagram.nodeCount}n · {diagram.edgeCount}e\n </span>\n </button>\n </li>\n );\n}\n","import { useEffect, useId, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nlet initialized = false;\n\nasync function getMermaid() {\n const mod = await import(\"mermaid\");\n const mermaid = mod.default;\n if (!initialized) {\n mermaid.initialize({\n startOnLoad: false,\n theme: \"dark\",\n securityLevel: \"strict\",\n fontFamily:\n '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n themeVariables: {\n background: \"#0a0f1a\",\n primaryColor: \"#0f1628\",\n primaryBorderColor: \"#1e3a5f\",\n primaryTextColor: \"#e2e8f0\",\n secondaryColor: \"#141d33\",\n secondaryBorderColor: \"#1e2d4a\",\n secondaryTextColor: \"#e2e8f0\",\n tertiaryColor: \"#0d1320\",\n tertiaryBorderColor: \"#1e2d4a\",\n tertiaryTextColor: \"#e2e8f0\",\n lineColor: \"#64748b\",\n textColor: \"#e2e8f0\",\n mainBkg: \"#0f1628\",\n nodeBorder: \"#1e3a5f\",\n clusterBkg: \"rgba(20, 29, 51, 0.6)\",\n clusterBorder: \"#1e2d4a\",\n actorBkg: \"#0f1628\",\n actorBorder: \"#1e3a5f\",\n actorTextColor: \"#e2e8f0\",\n actorLineColor: \"#64748b\",\n signalColor: \"#94a3b8\",\n signalTextColor: \"#e2e8f0\",\n labelBoxBkgColor: \"#141d33\",\n labelBoxBorderColor: \"#1e2d4a\",\n labelTextColor: \"#e2e8f0\",\n noteBkgColor: \"#18140a\",\n noteBorderColor: \"#854d0e\",\n noteTextColor: \"#fef3c7\",\n },\n });\n initialized = true;\n }\n return mermaid;\n}\n\ninterface Props {\n chart: string;\n}\n\ntype State =\n | { status: \"loading\" }\n | { status: \"error\"; message: string }\n | { status: \"ready\"; svg: string };\n\nexport function MermaidBlock({ chart }: Props) {\n const [state, setState] = useState<State>({ status: \"loading\" });\n const [expanded, setExpanded] = useState(false);\n const rawId = useId();\n const elementId = `mermaid-${rawId.replace(/:/g, \"\")}`;\n\n useEffect(() => {\n let cancelled = false;\n setState({ status: \"loading\" });\n\n (async () => {\n try {\n const mermaid = await getMermaid();\n await mermaid.parse(chart);\n const { svg } = await mermaid.render(elementId, chart);\n if (!cancelled) setState({ status: \"ready\", svg });\n } catch (err) {\n if (cancelled) return;\n const message =\n err instanceof Error ? err.message : \"Failed to render diagram\";\n setState({ status: \"error\", message });\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [chart, elementId]);\n\n if (state.status === \"loading\") {\n return (\n <div\n className=\"mermaid-block\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n fontSize: 11,\n }}\n >\n Rendering diagram…\n </div>\n );\n }\n\n if (state.status === \"error\") {\n return (\n <div className=\"mermaid-block\">\n <div\n className=\"mb-1\"\n style={{\n color: \"var(--accent-amber)\",\n fontFamily: \"var(--font-mono)\",\n fontSize: 11,\n }}\n >\n Mermaid error: {state.message}\n </div>\n <pre style={{ margin: 0 }}>\n <code className=\"lang-mermaid\">{chart}</code>\n </pre>\n </div>\n );\n }\n\n return (\n <>\n <div className=\"mermaid-block group relative\">\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n aria-label=\"Enlarge diagram\"\n title=\"Enlarge diagram\"\n className=\"mermaid-enlarge absolute top-2 right-2 flex h-7 w-7 items-center justify-center border transition-colors\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n color: \"var(--text-muted)\",\n backdropFilter: \"blur(6px)\",\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M8 3H5a2 2 0 0 0-2 2v3\" />\n <path d=\"M21 8V5a2 2 0 0 0-2-2h-3\" />\n <path d=\"M3 16v3a2 2 0 0 0 2 2h3\" />\n <path d=\"M16 21h3a2 2 0 0 0 2-2v-3\" />\n </svg>\n </button>\n <div\n className=\"mermaid-svg\"\n style={{ overflowX: \"auto\" }}\n dangerouslySetInnerHTML={{ __html: state.svg }}\n />\n </div>\n {expanded && (\n <MermaidLightbox svg={state.svg} onClose={() => setExpanded(false)} />\n )}\n </>\n );\n}\n\nfunction MermaidLightbox({\n svg,\n onClose,\n}: {\n svg: string;\n onClose: () => void;\n}) {\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n document.body.style.overflow = prevOverflow;\n };\n }, [onClose]);\n\n return createPortal(\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Enlarged diagram\"\n onClick={onClose}\n className=\"animate-fade-up fixed inset-0 z-50 flex items-center justify-center\"\n style={{\n backgroundColor: \"rgba(10, 15, 26, 0.88)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n animationDuration: \"0.18s\",\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n className=\"relative flex flex-col border shadow-2xl\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.95)\",\n maxWidth: \"92vw\",\n maxHeight: \"90vh\",\n }}\n >\n <div\n className=\"flex items-center justify-between border-b px-5 py-3\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div\n className=\"blueprint-annotation\"\n style={{ color: \"var(--accent-cyan)\" }}\n >\n Diagram\n </div>\n <div\n className=\"flex items-center gap-3 text-[10px] tracking-[0.2em] uppercase\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <span>ESC to close</span>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close diagram\"\n className=\"flex h-7 w-7 items-center justify-center border transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--border-default)\",\n color: \"var(--text-muted)\",\n backgroundColor: \"transparent\",\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n </div>\n <div\n className=\"mermaid-lightbox-body\"\n style={{\n padding: 24,\n overflow: \"auto\",\n maxHeight: \"calc(90vh - 52px)\",\n }}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n </div>\n </div>,\n document.body,\n );\n}\n","import {\n isValidElement,\n type AnchorHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport Markdown from \"markdown-to-jsx\";\nimport { MermaidBlock } from \"./MermaidBlock\";\n\ninterface Props {\n source: string;\n}\n\nexport function MarkdownContent({ source }: Props) {\n return (\n <div className=\"prose-markdown\">\n <Markdown\n options={{\n forceBlock: true,\n overrides: {\n pre: { component: PreOverride },\n a: { component: LinkOverride },\n },\n }}\n >\n {source}\n </Markdown>\n </div>\n );\n}\n\nfunction LinkOverride({\n href,\n children,\n ...rest\n}: AnchorHTMLAttributes<HTMLAnchorElement>) {\n const isInternal =\n !href ||\n href.startsWith(\"#\") ||\n href.startsWith(\"/\") ||\n (typeof window !== \"undefined\" && href.startsWith(window.location.origin));\n return (\n <a\n href={href}\n {...rest}\n {...(isInternal ? {} : { target: \"_blank\", rel: \"noopener noreferrer\" })}\n >\n {children}\n </a>\n );\n}\n\nfunction PreOverride({ children }: { children?: ReactNode }) {\n const mermaidSource = extractMermaidSource(children);\n if (mermaidSource !== null) {\n return <MermaidBlock chart={mermaidSource} />;\n }\n return <pre>{children}</pre>;\n}\n\nfunction extractMermaidSource(node: ReactNode): string | null {\n const only = Array.isArray(node) && node.length === 1 ? node[0] : node;\n if (!isValidElement(only)) return null;\n const el = only as ReactElement<{ className?: string; children?: ReactNode }>;\n if (el.type !== \"code\") return null;\n const cn = el.props.className ?? \"\";\n const isMermaid =\n cn === \"lang-mermaid\" ||\n cn === \"language-mermaid\" ||\n cn.split(/\\s+/).includes(\"lang-mermaid\") ||\n cn.split(/\\s+/).includes(\"language-mermaid\");\n if (!isMermaid) return null;\n const inner = el.props.children;\n if (typeof inner === \"string\") return inner;\n if (Array.isArray(inner)) return inner.map((c) => String(c ?? \"\")).join(\"\");\n return String(inner ?? \"\");\n}\n","import { useCallback, useState } from \"react\";\nimport type { NodeMetaType } from \"@tecture/shared\";\nimport {\n buildDeepDivePrompt,\n buildSourceUrl,\n isDeepDivable,\n} from \"@tecture/shared\";\nimport { getNodeStyle } from \"./nodeStyles\";\nimport { MarkdownContent } from \"./MarkdownContent\";\nimport {\n useArchitectureBundle,\n useOpenInEditor,\n} from \"./ArchitectureBundleContext\";\n\ninterface Props {\n nodeId: string;\n onClose: () => void;\n}\n\nexport function NodeDetailPanel({ nodeId, onClose }: Props) {\n const bundle = useArchitectureBundle();\n const openInEditor = useOpenInEditor();\n const detail = bundle.nodes[nodeId];\n const missingDescription = bundle.missingDescriptions.has(nodeId);\n const style = getNodeStyle(detail?.meta?.type as NodeMetaType | undefined);\n const path = detail?.path;\n const sourceUrl = openInEditor\n ? undefined\n : path\n ? buildSourceUrl(bundle.summary.source, bundle.summary.sourceHost, path)\n : undefined;\n\n return (\n <aside\n className=\"animate-slide-in-right absolute top-3 right-3 z-10 flex flex-col border shadow-lg backdrop-blur-md\"\n style={{\n width: \"min(520px, calc(100vw - 24px))\",\n maxHeight: \"calc(100vh - 24px)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n borderColor: \"var(--border-default)\",\n }}\n >\n <div\n className=\"flex shrink-0 items-start justify-between border-b px-5 py-4\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div className=\"min-w-0 flex-1\">\n <div\n className=\"blueprint-annotation mb-1\"\n style={{ color: style.accent }}\n >\n {style.label}\n </div>\n <div\n className=\"truncate text-base leading-tight font-semibold tracking-tight\"\n style={{ color: \"var(--text-primary)\", fontFamily: \"var(--font-sans)\" }}\n >\n {detail?.label ?? nodeId}\n </div>\n {detail?.meta?.technology ? (\n <div\n className=\"mt-0.5 text-xs\"\n style={{ color: \"var(--text-muted)\", fontFamily: \"var(--font-mono)\" }}\n >\n {String(detail.meta.technology)}\n </div>\n ) : null}\n {path || (detail && isDeepDivable(detail)) ? (\n <div className=\"mt-1.5 flex w-full items-center gap-x-3\">\n {path ? (\n <OpenSourceAction\n path={path}\n accent={style.accent}\n onOpenInEditor={\n openInEditor ? () => openInEditor(path) : undefined\n }\n sourceUrl={sourceUrl}\n />\n ) : null}\n {detail && isDeepDivable(detail) ? (\n <CopyPromptButton\n prompt={buildDeepDivePrompt(detail)}\n accent={style.accent}\n className=\"ml-auto\"\n />\n ) : null}\n </div>\n ) : null}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close details\"\n className=\"flex h-7 w-7 shrink-0 items-center justify-center border transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--border-default)\",\n color: \"var(--text-muted)\",\n backgroundColor: \"transparent\",\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto px-5 py-4\">\n {!detail && (\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n No details available for this node.\n </div>\n )}\n {detail && missingDescription && (\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n Description not available.\n </div>\n )}\n {detail && !missingDescription &&\n (detail.description ? (\n <MarkdownContent source={detail.description} />\n ) : (\n <div className=\"text-xs\" style={{ color: \"var(--text-muted)\" }}>\n No description provided.\n </div>\n ))}\n </div>\n </aside>\n );\n}\n\nconst ACTION_CLASS =\n \"inline-flex items-center gap-1.5 text-xs transition-opacity hover:opacity-80\";\n\nfunction actionStyle(accent: string) {\n return {\n color: accent,\n fontFamily: \"var(--font-mono)\",\n background: \"transparent\",\n border: \"none\",\n padding: 0,\n cursor: \"pointer\",\n } as const;\n}\n\nfunction OpenSourceAction({\n path,\n accent,\n onOpenInEditor,\n sourceUrl,\n}: {\n path: string;\n accent: string;\n onOpenInEditor?: () => void;\n sourceUrl?: string;\n}) {\n const isDir = path.endsWith(\"/\");\n const icon = (\n <svg\n width=\"11\"\n height=\"11\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n );\n\n if (onOpenInEditor) {\n return (\n <button\n type=\"button\"\n className={ACTION_CLASS}\n style={actionStyle(accent)}\n onClick={onOpenInEditor}\n title={path}\n >\n {icon}\n <span>{isDir ? \"Open folder\" : \"Open file\"}</span>\n </button>\n );\n }\n if (sourceUrl) {\n return (\n <a\n className={ACTION_CLASS}\n style={actionStyle(accent)}\n href={sourceUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n title={path}\n >\n {icon}\n <span>{isDir ? \"View folder\" : \"View file\"}</span>\n </a>\n );\n }\n return null;\n}\n\n/** Copies an auto-generated, id-keyed deep-dive prompt to paste into a coding agent. */\nfunction CopyPromptButton({\n prompt,\n accent,\n className,\n}: {\n prompt: string;\n accent: string;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n const onCopy = useCallback(() => {\n void copyText(prompt).then((ok) => {\n if (!ok) return;\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n });\n }, [prompt]);\n\n return (\n <button\n type=\"button\"\n className={className ? `${ACTION_CLASS} ${className}` : ACTION_CLASS}\n style={actionStyle(accent)}\n onClick={onCopy}\n title=\"Copy a prompt to enrich this component's description with a coding agent\"\n >\n {copied ? (\n <svg\n width=\"11\"\n height=\"11\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n width=\"11\"\n height=\"11\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n <span>{copied ? \"Copied\" : \"Copy deep-dive prompt\"}</span>\n </button>\n );\n}\n\n/**\n * Copy text to the clipboard, falling back to a hidden textarea + execCommand for\n * restrictive hosts (e.g. the VS Code webview) where the async clipboard API may be\n * unavailable. Returns whether the copy succeeded.\n */\nasync function copyText(text: string): Promise<boolean> {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // fall through to the execCommand path\n }\n try {\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n textarea.style.position = \"fixed\";\n textarea.style.top = \"0\";\n textarea.style.left = \"0\";\n textarea.style.opacity = \"0\";\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n const ok = document.execCommand(\"copy\");\n document.body.removeChild(textarea);\n return ok;\n } catch {\n return false;\n }\n}\n","import { useEffect, useState } from \"react\";\n\nexport function KeyboardHint() {\n const [visible, setVisible] = useState(true);\n useEffect(() => {\n const t = setTimeout(() => setVisible(false), 3500);\n return () => clearTimeout(t);\n }, []);\n if (!visible) return null;\n return (\n <div\n className=\"pointer-events-none absolute bottom-6 left-1/2 z-10 -translate-x-1/2 border px-3 py-1.5 shadow-lg backdrop-blur-md transition-opacity duration-1000\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n fontSize: \"10px\",\n letterSpacing: \"0.05em\",\n }}\n >\n Scroll to zoom · Drag to pan · Click for details · Double-click to drill\n </div>\n );\n}\n","// Looping, CSS-driven mini-diagrams for the onboarding wizard. The motion lives\n// in styles.css (the `ob-*` keyframes); these components only lay out the boxes,\n// cursor, and ripple in % coordinates so everything scales with the modal.\n\nfunction Cursor({ className }: { className: string }) {\n return (\n <svg className={`ob-cursor ${className}`} viewBox=\"0 0 24 24\" aria-hidden>\n <path\n d=\"M5 3 L5 19 L9.6 14.8 L12.4 21 L15 19.8 L12.2 13.9 L18 13.9 Z\"\n fill=\"#e2e8f0\"\n stroke=\"#0a0f1a\"\n strokeWidth=\"1.2\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction Box({\n label,\n style,\n className = \"\",\n children,\n}: {\n label: string;\n style: React.CSSProperties;\n className?: string;\n children?: React.ReactNode;\n}) {\n return (\n <div className={`ob-box ${className}`} style={style}>\n <span className=\"ob-box-icon\" />\n <span>{label}</span>\n {children}\n </div>\n );\n}\n\n/** Click a box → its detail panel slides in. */\nexport function ClickDemo() {\n return (\n <div className=\"ob-stage blueprint-grid\">\n <Box\n label=\"Service\"\n className=\"ob-click-target\"\n style={{ left: \"6%\", top: \"20%\", width: \"34%\", height: \"30%\" }}\n />\n <Box\n label=\"Database\"\n style={{ left: \"6%\", top: \"58%\", width: \"34%\", height: \"30%\" }}\n />\n <span\n className=\"ob-ripple ob-click-ripple\"\n style={{ left: \"23%\", top: \"35%\" }}\n />\n <div className=\"ob-click-panel ob-click-slide\">\n <div className=\"ob-line accent\" style={{ width: \"68%\" }} />\n <div className=\"ob-line\" style={{ width: \"100%\" }} />\n <div className=\"ob-line\" style={{ width: \"90%\" }} />\n <div className=\"ob-line\" style={{ width: \"58%\" }} />\n <div className=\"ob-line\" style={{ width: \"82%\" }} />\n </div>\n <Cursor className=\"ob-click-cursor\" />\n </div>\n );\n}\n\nfunction Chevron() {\n return (\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\n/** Double-click a container with a drill-down button → into its sub-diagram. */\nexport function DrillDemo() {\n return (\n <div className=\"ob-stage blueprint-grid\">\n <div className=\"ob-level-1\">\n <Box\n label=\"User\"\n style={{ left: \"34%\", top: \"3%\", width: \"24%\", height: \"20%\" }}\n />\n <Box\n label=\"Files\"\n style={{ left: \"64%\", top: \"40%\", width: \"24%\", height: \"24%\" }}\n />\n <Box\n label=\"Service\"\n style={{ left: \"28%\", top: \"33%\", width: \"30%\", height: \"42%\" }}\n >\n <span className=\"ob-pill ob-drill-pill\">\n Drill down\n <Chevron />\n </span>\n </Box>\n </div>\n <div className=\"ob-level-2\">\n <Box\n label=\"API\"\n style={{ left: \"8%\", top: \"14%\", width: \"24%\", height: \"26%\" }}\n />\n <Box\n label=\"Router\"\n style={{ left: \"40%\", top: \"8%\", width: \"24%\", height: \"26%\" }}\n />\n <Box\n label=\"Store\"\n style={{ left: \"20%\", top: \"56%\", width: \"24%\", height: \"26%\" }}\n />\n <Box\n label=\"Worker\"\n style={{ left: \"54%\", top: \"52%\", width: \"28%\", height: \"28%\" }}\n />\n </div>\n <span\n className=\"ob-ripple ob-drill-ripple\"\n style={{ left: \"43%\", top: \"64%\" }}\n />\n <Cursor className=\"ob-drill-cursor\" />\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { ClickDemo, DrillDemo } from \"./OnboardingDemos\";\n\ninterface Step {\n /** Mono eyebrow above the title. */\n eyebrow: string;\n title: string;\n blurb: string;\n /** Visual shown in the media band (a demo animation or the intro hero). */\n media: ReactNode;\n}\n\ninterface Props {\n open: boolean;\n onClose: () => void;\n architectureName: string;\n architectureDescription?: string;\n}\n\nexport function OnboardingWizard({\n open,\n onClose,\n architectureName,\n architectureDescription,\n}: Props) {\n const [step, setStep] = useState(0);\n\n // Restart at the intro every time the wizard (re)opens.\n useEffect(() => {\n if (open) setStep(0);\n }, [open]);\n\n // The manifest description can be several paragraphs — the intro only needs\n // the opening one to set context.\n const intro = (architectureDescription ?? \"\").split(/\\n\\s*\\n/)[0]?.trim();\n\n const steps: Step[] = [\n {\n eyebrow: \"Architecture\",\n title: architectureName,\n blurb:\n intro ||\n \"An interactive map of this system — its components and how they connect.\",\n media: <IntroHero name={architectureName} />,\n },\n {\n eyebrow: \"Tip · 1 of 2\",\n title: \"Click a component\",\n blurb:\n \"Click any box to open its details — the technology it uses, its source files, and a full description.\",\n media: <ClickDemo />,\n },\n {\n eyebrow: \"Tip · 2 of 2\",\n title: \"Drill down for more\",\n blurb:\n \"Boxes with a “Drill down” button go deeper — double-click one to open its sub-diagram and explore the next level.\",\n media: <DrillDemo />,\n },\n ];\n\n const last = steps.length - 1;\n const next = useCallback(() => {\n setStep((s) => {\n if (s >= steps.length - 1) {\n onClose();\n return s;\n }\n return s + 1;\n });\n }, [steps.length, onClose]);\n const back = useCallback(() => setStep((s) => Math.max(0, s - 1)), []);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n else if (e.key === \"ArrowRight\") next();\n else if (e.key === \"ArrowLeft\") back();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, onClose, next, back]);\n\n const current = steps[step] ?? steps[0];\n if (!open || !current) return null;\n\n return (\n <div\n className=\"absolute inset-0 z-50 flex items-center justify-center\"\n style={{ backgroundColor: \"rgba(5, 8, 15, 0.72)\" }}\n onClick={onClose}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"onboarding-title\"\n >\n <div\n className=\"animate-fade-up flex w-[min(640px,calc(100vw-32px))] flex-col border shadow-lg backdrop-blur-md\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.94)\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n className=\"flex items-start justify-between border-b px-6 py-4\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div className=\"min-w-0\">\n <div\n className=\"text-[9px] tracking-[0.32em] uppercase\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n {current.eyebrow}\n </div>\n <div\n id=\"onboarding-title\"\n className=\"mt-1 truncate text-[18px] leading-tight font-semibold tracking-tight\"\n style={{\n color: \"var(--text-primary)\",\n fontFamily: \"var(--font-sans)\",\n }}\n >\n {current.title}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Skip tour\"\n className=\"ml-4 flex h-7 w-7 shrink-0 items-center justify-center border transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--border-default)\",\n color: \"var(--text-muted)\",\n backgroundColor: \"transparent\",\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n\n {/* Media band */}\n <div\n className=\"border-b\"\n style={{\n borderColor: \"var(--border-default)\",\n backgroundColor: \"var(--bg-deep)\",\n }}\n >\n {current.media}\n </div>\n\n {/* Blurb */}\n <p\n className=\"px-6 py-4 text-[13px] leading-relaxed\"\n style={{\n color: \"var(--text-secondary)\",\n fontFamily: \"var(--font-sans)\",\n }}\n >\n {current.blurb}\n </p>\n\n {/* Footer */}\n <div\n className=\"flex items-center justify-between border-t px-6 py-4\"\n style={{ borderColor: \"var(--border-default)\" }}\n >\n <div className=\"flex items-center gap-2\">\n {steps.map((s, i) => (\n <span\n key={s.title}\n className=\"h-1.5 rounded-full transition-all\"\n style={{\n width: i === step ? \"18px\" : \"6px\",\n backgroundColor:\n i === step ? \"var(--accent-cyan)\" : \"var(--border-default)\",\n }}\n />\n ))}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {step > 0 && (\n <button\n type=\"button\"\n onClick={back}\n className=\"border px-3 py-1.5 text-[10px] tracking-[0.2em] uppercase transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--border-default)\",\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n backgroundColor: \"transparent\",\n }}\n >\n Back\n </button>\n )}\n <button\n type=\"button\"\n onClick={next}\n className=\"border px-4 py-1.5 text-[10px] tracking-[0.2em] uppercase transition-colors hover:text-white\"\n style={{\n borderColor: \"var(--accent-cyan)\",\n color: \"var(--accent-cyan)\",\n fontFamily: \"var(--font-mono)\",\n backgroundColor: \"transparent\",\n }}\n >\n {step === last ? \"Got it\" : \"Next\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n/** Intro media band: the architecture name set on the blueprint grid. */\nfunction IntroHero({ name }: { name: string }) {\n return (\n <div className=\"ob-stage blueprint-grid flex flex-col items-center justify-center text-center\">\n <div\n className=\"text-[9px] tracking-[0.4em] uppercase\"\n style={{ color: \"var(--accent-cyan)\", fontFamily: \"var(--font-mono)\" }}\n >\n Architecture\n </div>\n <div\n className=\"mt-2 px-6 text-[26px] leading-tight\"\n style={{ color: \"var(--text-primary)\", fontFamily: \"var(--font-display)\" }}\n >\n {name}\n </div>\n <div\n className=\"mt-3 text-[10px] tracking-[0.18em] uppercase\"\n style={{ color: \"var(--text-muted)\", fontFamily: \"var(--font-mono)\" }}\n >\n Interactive architecture diagrams\n </div>\n </div>\n );\n}\n","import { useCallback, useState } from \"react\";\n\nexport interface Onboarding {\n /** Whether the wizard should currently be shown. */\n open: boolean;\n /** Manually (re)open the tour, e.g. from the help button. */\n openWizard: () => void;\n /** Dismiss the tour for the current view. */\n closeWizard: () => void;\n}\n\n/**\n * Onboarding tour state. The wizard opens on every architecture load (this hook\n * mounts only once the bundle is ready, so \"open on mount\" = right after the\n * initial load), and `openWizard` lets the help button replay it on demand.\n */\nexport function useOnboarding(): Onboarding {\n const [open, setOpen] = useState(true);\n const openWizard = useCallback(() => setOpen(true), []);\n const closeWizard = useCallback(() => setOpen(false), []);\n return { open, openWizard, closeWizard };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { DiagramCanvas } from \"./DiagramCanvas\";\nimport { DiagramList } from \"./DiagramList\";\nimport { NodeDetailPanel } from \"./NodeDetailPanel\";\nimport { KeyboardHint } from \"./KeyboardHint\";\nimport { OnboardingWizard } from \"./OnboardingWizard\";\nimport { useOnboarding } from \"./useOnboarding\";\nimport {\n useArchitectureBundle,\n useReportUsage,\n} from \"./ArchitectureBundleContext\";\n\ninterface Props {\n diagramId: string | null;\n showDiagramList?: boolean;\n}\n\n// Last diagram we reported a view for. Module-scoped (not a component ref) so a\n// StrictMode remount or any re-render can't double-count the same navigation.\nlet lastReportedDiagram: string | null = null;\n\nexport function ArchitectureView({ diagramId, showDiagramList = true }: Props) {\n const bundle = useArchitectureBundle();\n const reportUsage = useReportUsage();\n const [selectedNodeId, setSelectedNodeId] = useState<string | null>(null);\n const onboarding = useOnboarding();\n\n useEffect(() => {\n if (diagramId) return;\n window.location.hash = `#/diagram/${bundle.summary.topDiagram}`;\n }, [diagramId, bundle.summary.topDiagram]);\n\n // Usage: one event per diagram the user actually navigates to, tagged with\n // its C4 level. This is the real \"viewed\" signal — not the bundle's\n // background prefetch of every diagram. Deduped by slug so re-renders (or a\n // changed summary reference) never double-count the same diagram.\n useEffect(() => {\n if (!diagramId || diagramId === lastReportedDiagram) return;\n lastReportedDiagram = diagramId;\n const level = bundle.summary.diagrams.find(\n (d) => d.slug === diagramId,\n )?.level;\n reportUsage(\"diagram.viewed\", typeof level === \"number\" ? { level } : {});\n }, [diagramId, bundle.summary.diagrams, reportUsage]);\n\n // Usage: fire only when the user opens a node's detail panel (a click), never\n // for the bundle's background prefetch of all node details.\n const handleSelectNode = useCallback(\n (nodeId: string | null) => {\n setSelectedNodeId(nodeId);\n if (nodeId) reportUsage(\"node.inspected\");\n },\n [reportUsage],\n );\n\n const selectDiagram = useCallback((slug: string) => {\n setSelectedNodeId(null);\n window.location.hash = `#/diagram/${slug}`;\n }, []);\n\n return (\n <div\n className=\"relative h-screen w-screen overflow-hidden\"\n style={{ backgroundColor: \"var(--bg-deep)\" }}\n >\n {diagramId ? (\n <DiagramCanvas\n key={diagramId}\n diagramId={diagramId}\n onSelectNode={handleSelectNode}\n onDrillIn={selectDiagram}\n />\n ) : (\n <CanvasPlaceholder message=\"Opening top diagram…\" />\n )}\n\n {showDiagramList && (\n <DiagramList\n summary={bundle.summary}\n currentDiagramId={diagramId}\n onSelect={selectDiagram}\n onGoHome={() => selectDiagram(bundle.summary.topDiagram)}\n />\n )}\n <KeyboardHint />\n {selectedNodeId && (\n <NodeDetailPanel\n key={selectedNodeId}\n nodeId={selectedNodeId}\n onClose={() => setSelectedNodeId(null)}\n />\n )}\n <HelpButton onClick={onboarding.openWizard} />\n <OnboardingWizard\n open={onboarding.open}\n onClose={onboarding.closeWizard}\n architectureName={bundle.summary.name}\n architectureDescription={bundle.summary.description}\n />\n </div>\n );\n}\n\nfunction HelpButton({ onClick }: { onClick: () => void }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label=\"Show getting started tour\"\n title=\"Getting started\"\n className=\"absolute right-4 z-10 flex h-8 w-8 items-center justify-center border shadow-lg backdrop-blur-md transition-colors hover:text-white\"\n style={{\n // Sit just above the @xyflow Controls cluster (bottom-right) so the\n // help affordance reads as part of the canvas controls.\n bottom: \"132px\",\n borderColor: \"var(--border-default)\",\n backgroundColor: \"rgba(10, 15, 26, 0.85)\",\n color: \"var(--text-muted)\",\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n </button>\n );\n}\n\nfunction CanvasPlaceholder({ message }: { message: string }) {\n return (\n <div\n className=\"blueprint-grid pointer-events-none absolute inset-0 flex items-center justify-center\"\n style={{\n color: \"var(--text-muted)\",\n fontFamily: \"var(--font-mono)\",\n }}\n >\n <span className=\"text-xs tracking-[0.3em] uppercase\">{message}</span>\n </div>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { StyleGuide } from \"./StyleGuide\";\nimport { ArchitectureView } from \"./architecture/ArchitectureView\";\nimport { ArchitectureBundleProvider } from \"./architecture/ArchitectureBundleContext\";\nimport type { WebDataSource } from \"./architecture/dataSource\";\n\nfunction useHashRoute() {\n const [hash, setHash] = useState(() => window.location.hash);\n useEffect(() => {\n const onChange = () => setHash(window.location.hash);\n window.addEventListener(\"hashchange\", onChange);\n return () => window.removeEventListener(\"hashchange\", onChange);\n }, []);\n return hash;\n}\n\nfunction parseRoute(hash: string): { view: \"architecture\" | \"style-guide\"; diagramId: string | null } {\n if (hash === \"#/style-guide\") return { view: \"style-guide\", diagramId: null };\n const match = hash.match(/^#\\/diagram\\/([^/?#]+)/);\n if (match) return { view: \"architecture\", diagramId: decodeURIComponent(match[1]!) };\n return { view: \"architecture\", diagramId: null };\n}\n\nexport interface AppProps {\n dataSource: WebDataSource;\n /** Forces the bundle provider to reload when the value changes. */\n reloadKey?: unknown;\n /** Show the floating diagram list overlay. Defaults to true. */\n showDiagramList?: boolean;\n}\n\nexport function App({ dataSource, reloadKey, showDiagramList = true }: AppProps) {\n const hash = useHashRoute();\n const route = parseRoute(hash);\n if (route.view === \"style-guide\") return <StyleGuide />;\n return (\n <ArchitectureBundleProvider dataSource={dataSource} reloadKey={reloadKey}>\n <ArchitectureView\n diagramId={route.diagramId}\n showDiagramList={showDiagramList}\n />\n </ArchitectureBundleProvider>\n );\n}\n"],"names":["colors","nodeColors","SectionLabel","number","children","jsxs","jsx","ColorSwatch","token","value","label","StyleGuide","c","n","font","b","anim","delay","i","s","section","item","styles","defaultStyle","getNodeStyle","type","getNodeCenter","node","_a","_b","getClosestSide","nodeA","nodeB","centerA","centerB","horizontalDiff","verticalDiff","Position","getParams","handleType","position","x","y","getHandleCoordsByPosition","handlePosition","bounds","handle","h","_c","offsetX","offsetY","getEdgeParams","source","target","sx","sy","sourcePos","tx","ty","targetPos","useActiveHandleSides","nodeId","useNodeId","activeSides","useStore","state","thisNode","sides","edge","otherNodeId","otherNode","useMemo","LayoutPersistenceContext","createContext","HANDLE_SIDES","ArchitectureNodeInner","data","selected","d","style","handleDrillDown","e","ContainerNode","CornerMarks","prefix","isActive","HandlePair","p","DrillDownChevron","CONTAINER_PADDING","CONTAINER_HEADER","onDrillDown","persistence","useContext","onResizeEnd","useCallback","minSize","minWidth","minHeight","child","w","right","bottom","_d","a","NodeResizer","accent","Fragment","hStyle","Handle","ArchitectureNode","memo","edgeStyles","defaultEdgeStyle","getEdgeStyleDef","Legend","diagram","open","setOpen","useState","nodeTypes","edgeTypes","Panel","v","LegendGlyph","Chevron","Section","t","NodeRow","EdgeRow","title","IconPathEl","dash","FloatingEdge","id","markerEnd","labelStyle","labelBgStyle","labelBgPadding","labelBgBorderRadius","animated","sourceNode","useInternalNode","targetNode","edgePath","labelX","labelY","getSmoothStepPath","EdgeLabelRenderer","resolveLabelBg","fill","alpha","hex","full","r","g","diagramToFlow","nodeIds","childCounts","toFlowNode","toFlowEdge","hasChildren","isContainer","def","MarkerType","elk","ELK","LEAF_WIDTH","LEAF_HEIGHT","elkDirection","direction","layoutDiagram","nodes","edges","overlay","childrenByParent","key","list","buildElkNode","topLevel","graph","result","positions","sizes","walk","elkNode","visited","ordered","emit","saved","out","elkSize","width","height","PHASE_LABELS","SPLASH_DELAY_MS","LoadingSplash","shouldRender","setShouldRender","useEffect","ErrorCard","LoadingCard","phase","done","total","archName","ratio","showProgressNumbers","message","ArchitectureBundleContext","useArchitectureBundle","ctx","useSaveLayout","useOpenInEditor","useReportUsage","ArchitectureBundleProvider","dataSource","reloadKey","setState","cancelled","loadBundle","next","saveLayout","slug","update","prev","openInEditor","path","reportUsage","event","props","bundle","contextValue","onState","isCancelled","summary","diagramSlugs","diagramsDone","diagramTotal","bumpDiagrams","diagramResults","diagramPromise","layoutPromise","l","layout","diagrams","layouts","nodeIdList","nodesDone","bumpNodes","missing","detail","err","DiagramCanvas","ReactFlowProvider","DiagramCanvasInner","emptyLayout","collectLayoutEntries","entry","diagramId","onSelectNode","onDrillIn","setNodes","onNodesChange","useNodesState","setEdges","onEdgesChange","useEdgesState","ready","setReady","layoutError","setLayoutError","getNodes","useReactFlow","saveTimeoutRef","useRef","currentDiagramIdRef","bundleRef","currentBundle","currentDiagram","currentLayout","rfNodes","rfEdges","positioned","persistLayout","notifyLayoutChanged","persistenceValue","onNodeDragStop","onNodeClick","_event","onNodeDoubleClick","ReactFlow","Background","BackgroundVariant","Controls","MiniMap","CanvasOverlay","DiagramList","currentDiagramId","onSelect","onGoHome","atEntry","DiagramRow","active","isTop","initialized","getMermaid","mermaid","MermaidBlock","chart","expanded","setExpanded","elementId","useId","svg","MermaidLightbox","onClose","onKey","prevOverflow","createPortal","MarkdownContent","Markdown","PreOverride","LinkOverride","href","rest","isInternal","mermaidSource","extractMermaidSource","only","isValidElement","el","cn","inner","NodeDetailPanel","missingDescription","sourceUrl","buildSourceUrl","isDeepDivable","OpenSourceAction","CopyPromptButton","buildDeepDivePrompt","ACTION_CLASS","actionStyle","onOpenInEditor","isDir","icon","prompt","className","copied","setCopied","onCopy","copyText","ok","text","textarea","KeyboardHint","visible","setVisible","Cursor","Box","ClickDemo","DrillDemo","OnboardingWizard","architectureName","architectureDescription","step","setStep","intro","steps","IntroHero","last","back","current","name","useOnboarding","openWizard","closeWizard","lastReportedDiagram","ArchitectureView","showDiagramList","selectedNodeId","setSelectedNodeId","onboarding","level","handleSelectNode","selectDiagram","CanvasPlaceholder","HelpButton","onClick","useHashRoute","hash","setHash","onChange","parseRoute","match","App","route"],"mappings":";;;;;;;AAMA,MAAMA,IAAS;AAAA,EACb,aAAa;AAAA,IACX,EAAE,OAAO,aAAa,OAAO,WAAW,OAAO,OAAA;AAAA,IAC/C,EAAE,OAAO,gBAAgB,OAAO,WAAW,OAAO,UAAA;AAAA,IAClD,EAAE,OAAO,iBAAiB,OAAO,WAAW,OAAO,WAAA;AAAA,EAAW;AAAA,EAEhE,SAAS;AAAA,IACP,EAAE,OAAO,oBAAoB,OAAO,WAAW,OAAO,UAAA;AAAA,IACtD,EAAE,OAAO,mBAAmB,OAAO,2BAA2B,OAAO,SAAA;AAAA,IACrE,EAAE,OAAO,eAAe,OAAO,WAAW,OAAO,YAAA;AAAA,EAAY;AAAA,EAE/D,MAAM;AAAA,IACJ,EAAE,OAAO,kBAAkB,OAAO,WAAW,OAAO,UAAA;AAAA,IACpD,EAAE,OAAO,oBAAoB,OAAO,WAAW,OAAO,YAAA;AAAA,IACtD,EAAE,OAAO,gBAAgB,OAAO,WAAW,OAAO,QAAA;AAAA,EAAQ;AAAA,EAE5D,SAAS;AAAA,IACP,EAAE,OAAO,iBAAiB,OAAO,WAAW,OAAO,OAAA;AAAA,IACnD,EAAE,OAAO,iBAAiB,OAAO,WAAW,OAAO,OAAA;AAAA,IACnD,EAAE,OAAO,kBAAkB,OAAO,WAAW,OAAO,QAAA;AAAA,IACpD,EAAE,OAAO,wBAAwB,OAAO,WAAW,OAAO,cAAA;AAAA,IAC1D,EAAE,OAAO,oBAAoB,OAAO,WAAW,OAAO,UAAA;AAAA,EAAU;AAEpE,GAEMC,KAAa;AAAA,EACjB,EAAE,MAAM,UAAU,QAAQ,WAAW,IAAI,UAAA;AAAA,EACzC,EAAE,MAAM,WAAW,QAAQ,WAAW,IAAI,UAAA;AAAA,EAC1C,EAAE,MAAM,YAAY,QAAQ,WAAW,IAAI,UAAA;AAAA,EAC3C,EAAE,MAAM,SAAS,QAAQ,WAAW,IAAI,UAAA;AAAA,EACxC,EAAE,MAAM,WAAW,QAAQ,WAAW,IAAI,UAAA;AAAA,EAC1C,EAAE,MAAM,YAAY,QAAQ,WAAW,IAAI,UAAA;AAAA,EAC3C,EAAE,MAAM,SAAS,QAAQ,WAAW,IAAI,UAAA;AAAA,EACxC,EAAE,MAAM,WAAW,QAAQ,WAAW,IAAI,UAAA;AAAA,EAC1C,EAAE,MAAM,YAAY,QAAQ,WAAW,IAAI,UAAA;AAC7C;AAEA,SAASC,EAAa,EAAE,QAAAC,GAAQ,UAAAC,KAA2D;AACzF,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,SACb,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,wCAAwC,UAAAH,GAAO;AAAA,IAC9D,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,sBAAA;AAAA,QAEf,UAAAF;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;AAEA,SAASG,EAAY,EAAE,OAAAC,GAAO,OAAAC,GAAO,OAAAC,KAA0D;AAC7F,SACE,gBAAAL,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,iBAAiBG,GAAO,aAAa,wBAAA;AAAA,MAAwB;AAAA,IAAA;AAAA,IAExE,gBAAAJ,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,uBAAsB,OAAO,EAAE,OAAO,sBAAA,GAClD,UAAAI,EAAA,CACH;AAAA,MACA,gBAAAJ,EAAC,SAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAC3D,UAAAE,EAAA,CACH;AAAA,MACA,gBAAAF,EAAC,SAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAC3D,UAAAG,EAAA,CACH;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEO,SAASE,KAAa;AAC3B,SACE,gBAAAN,EAAC,OAAA,EAAI,WAAU,4DAEb,UAAA;AAAA,IAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QAER,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,QAAO,sBAAqB,aAAY,OAAM,WAAU,gBAAe;AAAA,UAC5G,gBAAAA,EAAC,QAAA,EAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,QAAO,sBAAqB,aAAY,OAAM,WAAU,gBAAe;AAAA,UAC5G,gBAAAA,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,QAAO,sBAAqB,aAAY,OAAM,MAAK,QAAO,WAAU,eAAA,CAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEnH,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QAER,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,QAAO,sBAAqB,aAAY,OAAM,WAAU,gBAAe;AAAA,UAC5G,gBAAAA,EAAC,QAAA,EAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,QAAO,sBAAqB,aAAY,OAAM,WAAU,gBAAe;AAAA,UAC5G,gBAAAA,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,QAAO,sBAAqB,aAAY,OAAM,MAAK,QAAO,WAAU,eAAA,CAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAInH,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,aAAa,wBAAA;AAAA,QAEtB,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,YAAA,gBAAAC,EAAC,KAAA,EAAE,MAAK,KAAI,WAAU,sCAAqC,OAAO,EAAE,OAAO,sBAAA,GAAyB,UAAA,aAAA,CAEpG;AAAA,YACA,gBAAAA,EAAC,UAAK,WAAU,WAAU,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,IAAA,CAAC;AAAA,YAClE,gBAAAA,EAAC,UAAK,WAAU,WAAU,OAAO,EAAE,OAAO,wBAAA,GAA2B,UAAA,cAAA,CAAW;AAAA,UAAA,GAClF;AAAA,UACA,gBAAAA,EAAC,SAAI,WAAU,wBAAuB,OAAO,EAAE,UAAU,OAAA,GAAU,UAAA,UAAA,CAEnE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIF,gBAAAD,EAAC,WAAA,EAAQ,WAAU,sCACjB,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,aAAa;AAAA,YACb,iBAAiB;AAAA,YACjB,OAAO;AAAA,UAAA;AAAA,UAGT,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,iBAAiB,qBAAA;AAAA,cAAqB;AAAA,YAAA;AAAA,YAC/C;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGJ,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,OAAO,UAAA;AAAA,UACjB,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,OAAO,wBAAA;AAAA,UACjB,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAGD,GACF;AAAA,IAGA,gBAAAD,EAAC,WAAA,EAAQ,WAAU,gCACjB,UAAA;AAAA,MAAA,gBAAAC,EAACJ,GAAA,EAAa,QAAO,cAAa,UAAA,iBAAa;AAAA,MAE/C,gBAAAG,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,cAAA,CAE3G;AAAA,4BACC,OAAA,EAAI,WAAU,0BACZ,UAAAN,EAAO,YAAY,IAAI,CAACY,MACvB,gBAAAN,EAACC,KAA2B,GAAGK,EAAA,GAAbA,EAAE,KAAc,CACnC,EAAA,CACH;AAAA,QAAA,GACF;AAAA,0BAEC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAN,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,UAAA,CAE3G;AAAA,4BACC,OAAA,EAAI,WAAU,0BACZ,UAAAN,EAAO,QAAQ,IAAI,CAACY,MACnB,gBAAAN,EAACC,KAA2B,GAAGK,EAAA,GAAbA,EAAE,KAAc,CACnC,EAAA,CACH;AAAA,QAAA,GACF;AAAA,0BAEC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAN,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,OAAA,CAE3G;AAAA,UACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BACZ,UAAAN,EAAO,KAAK,IAAI,CAACY,MAChB,gBAAAP,EAAC,OAAA,EAAkB,WAAU,SAC3B,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,iBAAiB,kBAAkB,aAAa,wBAAA;AAAA,gBAEzD,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,uBAAsB,OAAO,EAAE,OAAOM,EAAE,SAAS,UAAA,KAAA,CAEjE;AAAA,cAAA;AAAA,YAAA;AAAA,YAEF,gBAAAP,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,cAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,uBAAsB,OAAO,EAAE,OAAO,sBAAA,GAClD,UAAAM,EAAE,MAAA,CACL;AAAA,cACA,gBAAAN,EAAC,OAAA,EAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAC3D,UAAAM,EAAE,MAAA,CACL;AAAA,cACA,gBAAAN,EAAC,OAAA,EAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAC3D,UAAAM,EAAE,MAAA,CACL;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,KAnBQA,EAAE,KAoBZ,CACD,EAAA,CACH;AAAA,QAAA,GACF;AAAA,0BAEC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAN,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,UAAA,CAE3G;AAAA,UACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BACZ,UAAAN,EAAO,QAAQ,IAAI,CAACY,MACnB,gBAAAP,EAAC,OAAA,EAAkB,WAAU,SAC3B,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,YAAY,2BAA2BM,EAAE,KAAK,OAAOA,EAAE,KAAK;AAAA,kBAC5D,aAAaA,EAAE;AAAA,gBAAA;AAAA,cACjB;AAAA,YAAA;AAAA,YAEF,gBAAAP,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,gBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,4BAA2B,OAAO,EAAE,iBAAiBM,EAAE,SAAS;AAAA,gBAChF,gBAAAN,EAAC,QAAA,EAAK,WAAU,uBAAsB,OAAO,EAAE,OAAO,sBAAA,GACnD,UAAAM,EAAE,MAAA,CACL;AAAA,cAAA,GACF;AAAA,cACA,gBAAAN,EAAC,OAAA,EAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAC3D,UAAAM,EAAE,MAAA,CACL;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,KAlBQA,EAAE,KAmBZ,CACD,EAAA,CACH;AAAA,QAAA,GACF;AAAA,0BAEC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAN,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,qBAAA,CAE3G;AAAA,4BACC,OAAA,EAAI,WAAU,yCACZ,UAAAL,GAAW,IAAI,CAACY,MACf,gBAAAR;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAU;AAAA,cACV,OAAO,EAAE,iBAAiBQ,EAAE,IAAI,aAAa,GAAGA,EAAE,MAAM,KAAA;AAAA,cAExD,UAAA;AAAA,gBAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,gBAAe,OAAO,EAAE,iBAAiBO,EAAE,UAAU;AAAA,gBACpE,gBAAAP,EAAC,OAAA,EAAI,WAAU,uBAAsB,OAAO,EAAE,OAAOO,EAAE,OAAA,GACpD,UAAAA,EAAE,KAAA,CACL;AAAA,gBACA,gBAAAP,EAAC,OAAA,EAAI,WAAU,6BAA4B,OAAO,EAAE,OAAO,GAAGO,EAAE,MAAM,KAAA,GACnE,YAAE,OAAA,CACL;AAAA,cAAA;AAAA,YAAA;AAAA,YAVKA,EAAE;AAAA,UAAA,CAYV,EAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGA,gBAAAR,EAAC,WAAA,EAAQ,WAAU,gCACjB,UAAA;AAAA,MAAA,gBAAAC,EAACJ,GAAA,EAAa,QAAO,cAAa,UAAA,cAAU;AAAA,MAE5C,gBAAAG,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,yCACZ,UAAA;AAAA,UACC;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,OAAO,EAAE,YAAY,oBAAoB,YAAY,KAAK,eAAe,UAAA;AAAA,UAAU;AAAA,UAErF;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,OAAO,EAAE,YAAY,mBAAA;AAAA,UAAmB;AAAA,QAC1C,EACA,IAAI,CAACQ,MACL,gBAAAT;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,YAEhE,UAAA;AAAA,cAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,yBAAwB,OAAM,MAAK,QAAO,MAAK,SAAQ,aACpE,UAAA,gBAAAA,EAAC,UAAK,GAAE,oBAAmB,QAAO,sBAAqB,aAAY,OAAM,MAAK,QAAO,SAAQ,MAAA,CAAM,EAAA,CACrG;AAAA,cACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iBAAgB,OAAO,EAAE,GAAGQ,EAAK,OAAO,OAAO,sBAAA,GAC3D,YAAK,OAAA,CACR;AAAA,cACA,gBAAAR,EAAC,OAAA,EAAI,WAAU,yBAAwB,OAAO,EAAE,OAAO,sBAAA,GACpD,UAAAQ,EAAK,KAAA,CACR;AAAA,cACA,gBAAAR,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,qBAAA,GACzD,UAAAQ,EAAK,SAAA,CACR;AAAA,cACA,gBAAAR,EAAC,OAAA,EAAI,WAAU,gBAAe,OAAO,EAAE,OAAO,oBAAA,GAC3C,UAAAQ,EAAK,MAAA,CACR;AAAA,YAAA;AAAA,UAAA;AAAA,UAlBKA,EAAK;AAAA,QAAA,CAoBb,GACH;AAAA,0BAEC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAR,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,aAAA,CAE3G;AAAA,UACA,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,cAEhE,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,sBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED,GACF;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,sBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED,GACF;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,sBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED,GACF;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA,EAAC,UAAK,WAAU,wCAAuC,OAAO,EAAE,OAAO,sBAAA,GAAyB,UAAA,yBAAA,CAEhG;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,sBAAA,GAAyB,UAAA,qBAAA,CAEjF;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA,EAAC,UAAK,WAAU,2BAA0B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,uGAAA,CAEjF;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA,EAAC,UAAK,WAAU,WAAU,OAAO,EAAE,OAAO,wBAAA,GAA2B,UAAA,+CAAA,CAErE;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA,EAAC,QAAA,EAAK,WAAU,wBAAuB,UAAA,uBAAA,CAAoB;AAAA,gBAAA,EAAA,CAC7D;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGA,gBAAAD,EAAC,WAAA,EAAQ,WAAU,gCACjB,UAAA;AAAA,MAAA,gBAAAC,EAACJ,GAAA,EAAa,QAAO,cAAa,UAAA,cAAU;AAAA,MAE5C,gBAAAG,EAAC,OAAA,EAAI,WAAU,cAEb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,UAAA,CAE3G;AAAA,UACA,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,cAEhE,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,iBAAiB,WAAW,OAAO,UAAA;AAAA,sBAC7C,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAID,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,aAAa,2BAA2B,OAAO,UAAA;AAAA,sBACzD,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAID,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO;AAAA,wBACL,aAAa;AAAA,wBACb,iBAAiB;AAAA,wBACjB,OAAO;AAAA,sBAAA;AAAA,sBAEV,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAID,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,aAAa,4BAA4B,OAAO,UAAA;AAAA,sBAC1D,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED,GACF;AAAA,gBAEA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8CACZ,UAAA;AAAA,kBACC,EAAE,OAAO,WAAW,MAAM,oDAAoD,OAAO,iBAAA;AAAA,kBACrF,EAAE,OAAO,aAAa,MAAM,2DAA2D,OAAO,gBAAA;AAAA,kBAC9F,EAAE,OAAO,SAAS,MAAM,gEAAgE,OAAO,mBAAA;AAAA,kBAC/F,EAAE,OAAO,YAAY,MAAM,qDAAqD,OAAO,cAAA;AAAA,gBAAc,EACrG,IAAI,CAACS,wBACJ,OAAA,EACC,UAAA;AAAA,kBAAA,gBAAAT,EAAC,OAAA,EAAI,WAAU,uBAAsB,OAAO,EAAE,OAAO,sBAAA,GAClD,UAAAS,EAAE,MAAA,CACL;AAAA,kBACA,gBAAAT,EAAC,OAAA,EAAI,WAAU,oCAAmC,OAAO,EAAE,OAAO,oBAAA,GAC/D,UAAAS,EAAE,KAAA,CACL;AAAA,gBAAA,KANQA,EAAE,KAOZ,CACD,EAAA,CACH;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GACF;AAAA,0BAGC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAT,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,QAAA,CAE3G;AAAA,UACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,yCACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,iCAAA,CAEnF;AAAA,cACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,4IACb,UAAA;AAAA,gBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,2KACb,UAAA,gBAAAD,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SACvI,UAAA;AAAA,kBAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,IAAA,CAAI;AAAA,kBAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAuB;AAAA,gBAAA,EAAA,CACjC,EAAA,CACF;AAAA,gBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,kBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,qEAAoE,UAAA,wBAEnF;AAAA,kBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,wDACb,UAAA;AAAA,oBAAA,gBAAAC,EAAC,UAAK,UAAA,aAAA,CAAU;AAAA,oBAChB,gBAAAA,EAAC,UAAK,UAAA,IAAA,CAAQ;AAAA,oBACd,gBAAAA,EAAC,UAAK,UAAA,uBAAA,CAAoB;AAAA,kBAAA,GAC5B;AAAA,kBACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uCAAsC,UAAA,sDAAA,CAErD;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,8BAEC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,8BAAA,CAEnF;AAAA,cACA,gBAAAD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,kBAEhE,UAAA;AAAA,oBAAA,gBAAAC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,wBACjB,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAA,EAAC,SAAI,WAAU,yBAAwB,OAAM,MAAK,QAAO,MAAK,SAAQ,aACpE,UAAA,gBAAAA,EAAC,UAAK,GAAE,oBAAmB,QAAO,sBAAqB,aAAY,OAAM,MAAK,QAAO,SAAQ,MAAA,CAAM,EAAA,CACrG;AAAA,oBACA,gBAAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,aAAa;AAAA,0BACb,iBAAiB;AAAA,0BACjB,OAAO;AAAA,wBAAA;AAAA,wBAGT,UAAA,gBAAAA,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,4BAAC,QAAA,EAAK,GAAE,sDAAqD,QAAO,gBAAe,aAAY,OAAM,MAAK,QAAO,EAAA,CACnH;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEF,gBAAAA,EAAC,QAAG,WAAU,yBAAwB,OAAO,EAAE,OAAO,sBAAA,GAAyB,UAAA,gBAAA,CAE/E;AAAA,oBACA,gBAAAA,EAAC,OAAE,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,qFAAA,CAEnF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF,GACF;AAAA,8BAEC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,2BAAA,CAEnF;AAAA,cACA,gBAAAD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,kBAEhE,UAAA;AAAA,oBAAA,gBAAAC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO,EAAE,OAAO,2BAAA;AAAA,wBACjB,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAA,EAAC,SAAI,WAAU,yBAAwB,OAAM,MAAK,QAAO,MAAK,SAAQ,aACpE,UAAA,gBAAAA,EAAC,UAAK,GAAE,oBAAmB,QAAO,sBAAqB,aAAY,OAAM,MAAK,QAAO,SAAQ,MAAA,CAAM,EAAA,CACrG;AAAA,oBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,sBAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,yBAAwB,OAAO,EAAE,OAAO,sBAAA,GAAyB,UAAA,aAAA,CAE/E;AAAA,sBACA,gBAAAA,EAAC,OAAE,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,6DAAA,CAEnF;AAAA,oBAAA,EAAA,CACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF,GACF;AAAA,8BAEC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,cAAA,CAEnF;AAAA,cACA,gBAAAD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,kBAEhE,UAAA;AAAA,oBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,2FACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SACvI,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,qDAAA,CAAqD,EAAA,CAC/D,GACF;AAAA,oBACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,qCAAoC,UAAA,gBAAY;AAAA,oBAC7D,gBAAAA,EAAC,KAAA,EAAE,WAAU,8BAA6B,UAAA,wCAAA,CAAqC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACjF,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,0BAGC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,sBAAA,CAE3G;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,cAEhE,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,gBAAA,gBAAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO;AAAA,sBACL,aAAa;AAAA,sBACb,iBAAiB;AAAA,sBACjB,OAAO;AAAA,oBAAA;AAAA,oBAGT,UAAA;AAAA,sBAAA,gBAAAC;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO,EAAE,iBAAiB,qBAAA;AAAA,wBAAqB;AAAA,sBAAA;AAAA,sBAC/C;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAIJ,gBAAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO;AAAA,sBACL,iBAAiB;AAAA,sBACjB,aAAa;AAAA,sBACb,OAAO;AAAA,oBAAA;AAAA,oBAEV,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAID,gBAAAA,EAAC,UAAK,WAAU,gDAA+C,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,gBAAA,CAEtG;AAAA,gBAEA,gBAAAA,EAAC,QAAA,EAAK,WAAU,wBAAuB,UAAA,cAAU;AAAA,gBAEjD,gBAAAA,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,SAAA,CAE/E;AAAA,cAAA,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GACF;AAAA,0BAGC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,kBAAA,CAE3G;AAAA,UACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,0BAAyB,OAAO,EAAE,aAAa,WAAW,iBAAiB,UAAA,GACxF,UAAA;AAAA,YAAA,gBAAAC,EAAC,SAAI,WAAU,oDACb,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,uBAAsB,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,mBAAA,CAEnE;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,iBAAiB;AAAA,oBACjB,aAAa;AAAA,oBACb,OAAO;AAAA,kBAAA;AAAA,kBAEV,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED,EAAA,CACF,EAAA,CACF;AAAA,YACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,cAAA,gBAAAC,EAAC,KAAA,EAAE,WAAU,gBAAe,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,sCAAA,CAEzD;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,iBAAiB,WAAW,aAAa,WAAW,OAAO,UAAA;AAAA,kBAEpE,4BAAC,QAAA,EACC,UAAA;AAAA,oBAAA,gBAAAA,EAAC,UAAK,OAAO,EAAE,OAAO,0BAAA,GAA6B,UAAA,KAAC;AAAA,oBAAO;AAAA,kBAAA,EAAA,CAC7D;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,0BAGC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,kBAAA,CAE3G;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,cAEhE,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,kBAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,2FACb,UAAA,gBAAAA,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAC5F,4BAAC,QAAA,EAAK,GAAE,qDAAA,CAAqD,EAAA,CAC/D,EAAA,CACF;AAAA,kBACA,gBAAAA,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,UAAA,CAE/E;AAAA,gBAAA,GACF;AAAA,gBAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO;AAAA,wBACL,aAAa;AAAA,wBACb,iBAAiB;AAAA,wBACjB,OAAO;AAAA,sBAAA;AAAA,sBAGT,UAAA,gBAAAA,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,4BAAC,QAAA,EAAK,GAAE,sDAAqD,QAAO,gBAAe,aAAY,OAAM,MAAK,QAAO,EAAA,CACnH;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEF,gBAAAA,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,UAAA,CAE/E;AAAA,gBAAA,GACF;AAAA,gBAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO;AAAA,wBACL,aAAa;AAAA,wBACb,iBAAiB;AAAA,wBACjB,OAAO;AAAA,sBAAA;AAAA,sBAGT,UAAA,gBAAAA,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,4BAAC,QAAA,EAAK,GAAE,sDAAqD,QAAO,gBAAe,aAAY,OAAM,MAAK,QAAO,EAAA,CACnH;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEF,gBAAAA,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,UAAA,CAE/E;AAAA,gBAAA,GACF;AAAA,gBAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,kBAAA,gBAAAC,EAAC,SAAI,WAAU,yFACb,UAAA,gBAAAD,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAC5F,UAAA;AAAA,oBAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,IAAA,CAAI;AAAA,oBAChD,gBAAAA,EAAC,QAAA,EAAK,GAAE,uBAAA,CAAuB;AAAA,kBAAA,EAAA,CACjC,EAAA,CACF;AAAA,kBACA,gBAAAA,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,UAAA,CAE/E;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGA,gBAAAD,EAAC,WAAA,EAAQ,WAAU,gCACjB,UAAA;AAAA,MAAA,gBAAAC,EAACJ,GAAA,EAAa,QAAO,cAAa,UAAA,sBAAsB;AAAA,MAExD,gBAAAG,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,YAEhE,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yCACZ,UAAA;AAAA,cACC;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,MAAM;AAAA,cAAA;AAAA,cAER;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,MAAM;AAAA,cAAA;AAAA,cAER;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,MAAM;AAAA,cAAA;AAAA,cAER;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,MAAM;AAAA,cAAA;AAAA,cAER;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,MAAM;AAAA,cAAA;AAAA,YACR,EACA,IAAI,CAACU,MACL,gBAAAX,EAAC,OAAA,EAAoB,WAAU,cAC7B,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,aAAa,wBAAA;AAAA,kBAErB,UAAAU,EAAK,SAAS,eACb,gBAAAV;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,iBAAiB,qBAAA;AAAA,oBAAqB;AAAA,kBAAA,sBAGhD,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,mBAAkB,QAAO,sBAAqB,aAAY,KAAI,SAAQ,MAAA,CAAM,EAAA,CACtF;AAAA,gBAAA;AAAA,cAAA;AAAA,gCAGH,OAAA,EACC,UAAA;AAAA,gBAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,kBAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,sBAAA,GACrD,UAAAU,EAAK,KAAA,CACR;AAAA,kBACA,gBAAAV,EAAC,QAAA,EAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,qBAAA,GACrD,UAAAU,EAAK,SAAA,CACR;AAAA,gBAAA,GACF;AAAA,gBACA,gBAAAV,EAAC,OAAA,EAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAC3D,UAAAU,EAAK,OAAA,CACR;AAAA,gBACA,gBAAAV,EAAC,OAAA,EAAI,WAAU,gCAA+B,OAAO,EAAE,OAAO,oBAAA,GAC3D,UAAAU,EAAK,KAAA,CACR;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,KA/BQA,EAAK,IAgCf,CACD,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,0BAGD,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAV,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,iBAAA,CAE3G;AAAA,UACA,gBAAAD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,cAEhE,UAAA;AAAA,gBAAA,gBAAAC,EAAC,SAAI,WAAU,cACZ,WAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,IAAI,CAACW,MAC7C,gBAAAZ,EAAC,OAAA,EAAgB,WAAU,sBACzB,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO;AAAA,wBACL,iBAAiB;AAAA,wBACjB,SAAS,OAAQW,IAAQ,MAAO;AAAA,sBAAA;AAAA,oBAClC;AAAA,kBAAA;AAAA,kBAEF,gBAAAZ,EAAC,UAAK,WAAU,wBAAuB,OAAO,EAAE,OAAO,uBACpD,UAAA;AAAA,oBAAAY;AAAA,oBAAM;AAAA,kBAAA,EAAA,CACT;AAAA,gBAAA,KAVQA,CAWV,CACD,GACH;AAAA,gBACA,gBAAAX,EAAC,SAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,kFAAA,CAEnF;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGA,gBAAAD,EAAC,WAAA,EAAQ,WAAU,gCACjB,UAAA;AAAA,MAAA,gBAAAC,EAACJ,GAAA,EAAa,QAAO,cAAa,UAAA,oBAAoB;AAAA,MAEtD,gBAAAG,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,mBAAA,CAE3G;AAAA,UACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,YACC,EAAE,OAAO,aAAa,OAAO,kBAAkB,OAAO,6BAAA;AAAA,YACtD,EAAE,OAAO,aAAa,OAAO,iBAAiB,OAAO,iDAAA;AAAA,YACrD,EAAE,OAAO,aAAa,OAAO,iBAAiB,OAAO,mCAAA;AAAA,YACrD,EAAE,OAAO,YAAY,OAAO,iBAAiB,OAAO,8BAAA;AAAA,UAA8B,EAClF,IAAI,CAACM,MACL,gBAAAP,EAAC,OAAA,EAAkB,WAAU,2BAC3B,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,OAAO,qBAAA;AAAA,gBAEf,UAAAM,EAAE;AAAA,cAAA;AAAA,YAAA;AAAA,YAEL,gBAAAN;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,qBAAA;AAAA,gBAEhE,UAAA,gBAAAD,EAAC,UAAK,WAAU,eAAc,OAAO,EAAE,OAAO,uBAC3C,UAAA;AAAA,kBAAAO,EAAE;AAAA,kBAAM;AAAA,kBAAIA,EAAE;AAAA,gBAAA,EAAA,CACjB;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,KAdQA,EAAE,KAeZ,CACD,EAAA,CACH;AAAA,QAAA,GACF;AAAA,0BAEC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAN,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,gBAAA,CAE3G;AAAA,UACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,oCAAA,CAEnF;AAAA,cACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BACZ,UAAA,CAAC,GAAG,CAAC,EAAE,IAAI,CAACY,MACX,gBAAAZ;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,qBAAA;AAAA,kBAEhE,UAAA,gBAAAA,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,uBACrD,UAAAY,EAAA,CACH;AAAA,gBAAA;AAAA,gBANKA;AAAA,cAAA,CAQR,EAAA,CACH;AAAA,YAAA,GACF;AAAA,8BACC,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAZ,EAAC,OAAA,EAAI,WAAU,8BAA6B,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,oCAAA,CAEnF;AAAA,cACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BACZ,UAAA,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAACY,MACd,gBAAAZ;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,qBAAA;AAAA,kBAEhE,UAAA,gBAAAA,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,OAAO,uBACrD,UAAAY,EAAA,CACH;AAAA,gBAAA;AAAA,gBANKA;AAAA,cAAA,CAQR,EAAA,CACH;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,0BAEC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAZ,EAAC,MAAA,EAAG,WAAU,uDAAsD,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,wBAAA,CAE3G;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,cAEhE,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,gBACC,EAAE,OAAO,QAAQ,OAAO,QAAQ,OAAO,0BAAA;AAAA,gBACvC,EAAE,OAAO,QAAQ,OAAO,QAAQ,OAAO,uBAAA;AAAA,gBACvC,EAAE,OAAO,OAAO,OAAO,QAAQ,OAAO,uBAAA;AAAA,gBACtC,EAAE,OAAO,OAAO,OAAO,QAAQ,OAAO,oBAAA;AAAA,gBACtC,EAAE,OAAO,SAAS,OAAO,QAAQ,OAAO,wBAAA;AAAA,gBACxC,EAAE,OAAO,SAAS,OAAO,QAAQ,OAAO,yCAAA;AAAA,gBACxC,EAAE,OAAO,SAAS,OAAO,OAAO,OAAO,uBAAA;AAAA,gBACvC,EAAE,OAAO,SAAS,OAAO,QAAQ,OAAO,uCAAA;AAAA,gBACxC,EAAE,OAAO,SAAS,OAAO,QAAQ,OAAO,2BAAA;AAAA,gBACxC,EAAE,OAAO,SAAS,OAAO,QAAQ,OAAO,mBAAA;AAAA,cAAmB,EAC3D,IAAI,CAACa,MACL,gBAAAd,EAAC,OAAA,EAAkB,WAAU,2BAC3B,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,qBAAA;AAAA,oBAEf,UAAAa,EAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEL,gBAAAb;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,oBAEf,UAAAa,EAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEL,gBAAAb,EAAC,OAAA,EAAI,WAAU,sBAAqB,OAAO,EAAE,OAAO,oBAAA,GACjD,UAAAa,EAAE,MAAA,CACL;AAAA,cAAA,KAfQA,EAAE,KAgBZ,CACD,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGA,gBAAAd,EAAC,WAAA,EAAQ,WAAU,gCACjB,UAAA;AAAA,MAAA,gBAAAC,EAACJ,GAAA,EAAa,QAAO,cAAa,UAAA,yBAAqB;AAAA,MAEvD,gBAAAG;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,UAEhE,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,iBAAA;AAAA,oBAEhE,UAAA,gBAAAA,EAAC,SAAI,WAAU,yBAAwB,OAAM,MAAK,QAAO,MAAK,SAAQ,aACpE,UAAA,gBAAAA,EAAC,UAAK,GAAE,oBAAmB,QAAO,sBAAqB,aAAY,OAAM,MAAK,QAAO,SAAQ,MAAA,CAAM,EAAA,CACrG;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEF,gBAAAA,EAAC,SAAI,WAAU,4BAA2B,OAAO,EAAE,OAAO,sBAAA,GAAyB,UAAA,iBAAA,CAEnF;AAAA,gBACA,gBAAAA,EAAC,SAAI,WAAU,oBAAmB,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,4BAAA,CAEzE;AAAA,cAAA,GACF;AAAA,cAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,iBAAA;AAAA,oBAEhE,4BAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAClC,UAAA;AAAA,sBAAA,gBAAAA,EAAC,QAAA,EAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,QAAO,sBAAqB,aAAY,OAAM;AAAA,sBACnF,gBAAAA,EAAC,QAAA,EAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,QAAO,sBAAqB,aAAY,OAAM;AAAA,sBACnF,gBAAAA,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,QAAO,sBAAqB,aAAY,OAAM,MAAK,OAAA,CAAO;AAAA,oBAAA,EAAA,CAC1F;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEF,gBAAAA,EAAC,SAAI,WAAU,4BAA2B,OAAO,EAAE,OAAO,sBAAA,GAAyB,UAAA,oBAAA,CAEnF;AAAA,gBACA,gBAAAA,EAAC,SAAI,WAAU,oBAAmB,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,8BAAA,CAEzE;AAAA,cAAA,GACF;AAAA,cAEA,gBAAAD,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,aAAa,wBAAA;AAAA,kBAAwB;AAAA,gBAAA;AAAA,gBAEhD,gBAAAA,EAAC,SAAI,WAAU,4BAA2B,OAAO,EAAE,OAAO,sBAAA,GAAyB,UAAA,iBAAA,CAEnF;AAAA,gBACA,gBAAAA,EAAC,SAAI,WAAU,oBAAmB,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,gCAAA,CAEzE;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAEA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,aAAa,wBAAA;AAAA,gBAEtB,UAAA;AAAA,kBAAA,gBAAAC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,sBACjB,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAA,EAAC,SAAI,WAAU,WAAU,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,mDAAA,CAEhE;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,EACF,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAGA,gBAAAD,EAAC,WAAA,EAAQ,WAAU,gCACjB,UAAA;AAAA,MAAA,gBAAAC,EAACJ,GAAA,EAAa,QAAO,cAAa,UAAA,oBAAgB;AAAA,MAElD,gBAAAI,EAAC,OAAA,EAAI,WAAU,yCACZ,UAAA;AAAA,QACC;AAAA,UACE,OAAO;AAAA,UACP,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QAEF;AAAA,UACE,OAAO;AAAA,UACP,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QAEF;AAAA,UACE,OAAO;AAAA,UACP,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QAEF;AAAA,UACE,OAAO;AAAA,UACP,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,MACF,EACA,IAAI,CAACc,MACL,gBAAAf;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UACV,OAAO,EAAE,aAAa,yBAAyB,iBAAiB,oBAAA;AAAA,UAEhE,UAAA;AAAA,YAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,yBAAwB,OAAM,MAAK,QAAO,MAAK,SAAQ,aACpE,UAAA,gBAAAA,EAAC,UAAK,GAAE,oBAAmB,QAAO,sBAAqB,aAAY,OAAM,MAAK,QAAO,SAAQ,MAAA,CAAM,EAAA,CACrG;AAAA,YACA,gBAAAA,EAAC,MAAA,EAAG,WAAU,8BAA6B,OAAO,EAAE,OAAO,sBAAA,GACxD,UAAAc,EAAQ,MAAA,CACX;AAAA,YACA,gBAAAd,EAAC,QAAG,WAAU,eACX,YAAQ,MAAM,IAAI,CAACe,GAAMH,MACxB,gBAAAb;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBACV,OAAO,EAAE,OAAO,oBAAA;AAAA,gBAEhB,UAAA;AAAA,kBAAA,gBAAAC,EAAC,UAAK,OAAO,EAAE,OAAO,qBAAA,GAAwB,UAAA,KAAC;AAAA,kBAC9Ce;AAAA,gBAAA;AAAA,cAAA;AAAA,cALIH;AAAA,YAAA,CAOR,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,QArBKE,EAAQ;AAAA,MAAA,CAuBhB,EAAA,CACH;AAAA,IAAA,GACF;AAAA,IAGA,gBAAAd,EAAC,UAAA,EAAO,WAAU,qBAChB,UAAA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,aAAa,wBAAA;AAAA,QAEtB,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,OAAO,oBAAA;AAAA,cACjB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,gBAAAA,EAAC,SAAI,WAAU,WAAU,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,+CAAA,CAEhE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;AC5oCA,MAAMgB,KAAoC;AAAA,EACxC,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,mHAAmH,MAAM,WAAW,SAAS,IAAA;AAAA,MAClJ,EAAE,GAAG,mHAAmH,QAAQ,WAAW,aAAa,IAAA;AAAA,MACxJ,EAAE,GAAG,iCAAiC,QAAQ,WAAW,aAAa,IAAA;AAAA,MACtE,EAAE,GAAG,gBAAgB,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAE3D,YAAY;AAAA,EAAA;AAAA,EAEd,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,mCAAmC,MAAM,WAAW,SAAS,IAAA;AAAA,MAClE,EAAE,GAAG,mCAAmC,QAAQ,WAAW,aAAa,IAAA;AAAA,MACxE,EAAE,GAAG,sBAAsB,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAEjE,YAAY;AAAA,EAAA;AAAA,EAEd,SAAS;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,mCAAmC,MAAM,WAAW,SAAS,IAAA;AAAA,MAClE,EAAE,GAAG,mCAAmC,QAAQ,WAAW,aAAa,IAAA;AAAA,MACxE,EAAE,GAAG,+kBAA+kB,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAE1nB,YAAY;AAAA,EAAA;AAAA,EAEd,UAAU;AAAA,IACR,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,2EAA2E,MAAM,WAAW,SAAS,IAAA;AAAA,MAC1G,EAAE,GAAG,kJAAkJ,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAE7L,YAAY;AAAA,EAAA;AAAA,EAEd,OAAO;AAAA,IACL,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,6BAA6B,MAAM,WAAW,SAAS,KAAA;AAAA,MAC5D,EAAE,GAAG,gBAAgB,QAAQ,WAAW,aAAa,IAAA;AAAA,MACrD,EAAE,GAAG,6BAA6B,QAAQ,WAAW,aAAa,IAAA;AAAA,MAClE,EAAE,GAAG,qBAAqB,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAEhE,YAAY;AAAA,EAAA;AAAA,EAEd,SAAS;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,+CAA+C,MAAM,WAAW,SAAS,IAAA;AAAA,MAC9E,EAAE,GAAG,+CAA+C,QAAQ,WAAW,aAAa,IAAA;AAAA,MACpF,EAAE,GAAG,iBAAiB,QAAQ,WAAW,aAAa,EAAA;AAAA,IAAE;AAAA,IAE1D,YAAY;AAAA,EAAA;AAAA,EAEd,UAAU;AAAA,IACR,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,qEAAqE,MAAM,WAAW,SAAS,IAAA;AAAA,MACpG,EAAE,GAAG,sEAAsE,QAAQ,WAAW,aAAa,IAAA;AAAA,MAC3G,EAAE,GAAG,YAAY,QAAQ,WAAW,aAAa,IAAA;AAAA,MACjD,EAAE,GAAG,mCAAmC,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAE9E,YAAY;AAAA,EAAA;AAAA,EAEd,OAAO;AAAA,IACL,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,8BAA8B,MAAM,WAAW,SAAS,IAAA;AAAA,MAC7D,EAAE,GAAG,8BAA8B,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAEzE,YAAY;AAAA,EAAA;AAAA,EAEd,SAAS;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,6EAA6E,MAAM,WAAW,SAAS,IAAA;AAAA,MAC5G,EAAE,GAAG,4EAA4E,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAEvH,YAAY;AAAA,EAAA;AAAA,EAEd,UAAU;AAAA,IACR,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,EAAE,GAAG,qCAAqC,MAAM,WAAW,SAAS,KAAA;AAAA,MACpE,EAAE,GAAG,qCAAqC,QAAQ,WAAW,aAAa,IAAA;AAAA,MAC1E,EAAE,GAAG,2BAA2B,QAAQ,WAAW,aAAa,IAAA;AAAA,MAChE,EAAE,GAAG,oFAAoF,QAAQ,WAAW,aAAa,IAAA;AAAA,IAAI;AAAA,IAE/H,YAAY;AAAA,EAAA;AAEhB,GAEMC,IAA0B;AAAA,EAC9B,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,WAAW;AAAA,IACT,EAAE,GAAG,gCAAgC,MAAM,WAAW,SAAS,IAAA;AAAA,IAC/D,EAAE,GAAG,mEAAmE,QAAQ,WAAW,aAAa,IAAA;AAAA,EAAI;AAAA,EAE9G,YAAY;AACd;AAEO,SAASC,EAAaC,GAA0B;AACrD,SAAOA,IAAQH,GAAOG,CAAI,KAAKF,IAAgBA;AACjD;AC/KA,SAASG,EAAcC,GAAgB;;AACrC,SAAO;AAAA,IACL,GAAGA,EAAK,UAAU,iBAAiB,OAAKC,IAAAD,EAAK,aAAL,gBAAAC,EAAe,UAAS,KAAK;AAAA,IACrE,GAAGD,EAAK,UAAU,iBAAiB,OAAKE,IAAAF,EAAK,aAAL,gBAAAE,EAAe,WAAU,KAAK;AAAA,EAAA;AAE1E;AAEO,SAASC,GAAeC,GAAiBC,GAA2B;AACzE,QAAMC,IAAUP,EAAcK,CAAK,GAC7BG,IAAUR,EAAcM,CAAK,GAE7BG,IAAiB,KAAK,IAAIF,EAAQ,IAAIC,EAAQ,CAAC,GAC/CE,IAAe,KAAK,IAAIH,EAAQ,IAAIC,EAAQ,CAAC;AAEnD,SAAIC,IAAiBC,IACZH,EAAQ,IAAIC,EAAQ,IAAIG,EAAS,OAAOA,EAAS,QAEnDJ,EAAQ,IAAIC,EAAQ,IAAIG,EAAS,MAAMA,EAAS;AACzD;AAEA,SAASC,GACPP,GACAC,GACAO,GAC4B;AAC5B,QAAMN,IAAUP,EAAcK,CAAK,GAC7BG,IAAUR,EAAcM,CAAK,GAE7BG,IAAiB,KAAK,IAAIF,EAAQ,IAAIC,EAAQ,CAAC,GAC/CE,IAAe,KAAK,IAAIH,EAAQ,IAAIC,EAAQ,CAAC;AAEnD,MAAIM;AACJ,EAAIL,IAAiBC,IACnBI,IAAWP,EAAQ,IAAIC,EAAQ,IAAIG,EAAS,OAAOA,EAAS,QAE5DG,IAAWP,EAAQ,IAAIC,EAAQ,IAAIG,EAAS,MAAMA,EAAS;AAG7D,QAAM,CAACI,GAAGC,CAAC,IAAIC,GAA0BZ,GAAOS,GAAUD,CAAU;AACpE,SAAO,CAACE,GAAGC,GAAGF,CAAQ;AACxB;AAEA,SAASG,GACPhB,GACAiB,GACAL,GACkB;;AAClB,QAAMM,KAASjB,IAAAD,EAAK,UAAU,iBAAf,gBAAAC,EAA8BW,IACvCO,IAASD,KAAA,gBAAAA,EAAQ,KAAK,CAACE,MAAMA,EAAE,aAAaH;AAElD,MAAI,CAACE;AACH,WAAO;AAAA,MACLnB,EAAK,UAAU,iBAAiB,OAAKE,IAAAF,EAAK,aAAL,gBAAAE,EAAe,UAAS,KAAK;AAAA,MAClEF,EAAK,UAAU,iBAAiB,OAAKqB,IAAArB,EAAK,aAAL,gBAAAqB,EAAe,WAAU,KAAK;AAAA,IAAA;AAIvE,MAAIC,IAAUH,EAAO,QAAQ,GACzBI,IAAUJ,EAAO,SAAS;AAE9B,UAAQF,GAAA;AAAA,IACN,KAAKP,EAAS;AACZ,MAAAY,IAAU;AACV;AAAA,IACF,KAAKZ,EAAS;AACZ,MAAAY,IAAUH,EAAO;AACjB;AAAA,IACF,KAAKT,EAAS;AACZ,MAAAa,IAAU;AACV;AAAA,IACF,KAAKb,EAAS;AACZ,MAAAa,IAAUJ,EAAO;AACjB;AAAA,EAAA;AAGJ,QAAML,IAAId,EAAK,UAAU,iBAAiB,IAAImB,EAAO,IAAIG,GACnDP,IAAIf,EAAK,UAAU,iBAAiB,IAAImB,EAAO,IAAII;AACzD,SAAO,CAACT,GAAGC,CAAC;AACd;AAEO,SAASS,GAAcC,GAAkBC,GAAkB;AAChE,QAAM,CAACC,GAAIC,GAAIC,CAAS,IAAIlB,GAAUc,GAAQC,GAAQ,QAAQ,GACxD,CAACI,GAAIC,GAAIC,CAAS,IAAIrB,GAAUe,GAAQD,GAAQ,QAAQ;AAC9D,SAAO,EAAE,IAAAE,GAAI,IAAAC,GAAI,IAAAE,GAAI,IAAAC,GAAI,WAAAF,GAAW,WAAAG,EAAA;AACtC;ACpFO,SAASC,KAAoC;AAClD,QAAMC,IAASC,GAAA,GAETC,IAAcC,GAAS,CAACC,MAA0B;AACtD,QAAI,CAACJ,EAAQ,QAAO,oBAAI,IAAA;AACxB,UAAMK,IAAWD,EAAM,WAAW,IAAIJ,CAAM;AAC5C,QAAI,CAACK,EAAU,QAAO,oBAAI,IAAA;AAE1B,UAAMC,wBAAY,IAAA;AAClB,eAAWC,KAAQH,EAAM,OAAO;AAC9B,UAAII,IAA6B;AAGjC,UAFID,EAAK,WAAWP,IAAQQ,IAAcD,EAAK,SACtCA,EAAK,WAAWP,MAAQQ,IAAcD,EAAK,SAChD,CAACC,EAAa;AAElB,YAAMC,IAAYL,EAAM,WAAW,IAAII,CAAW;AAClD,MAAKC,KACLH,EAAM,IAAIrC,GAAeoC,GAAUI,CAAS,CAAC;AAAA,IAC/C;AACA,WAAOH;AAAA,EACT,CAAC;AAED,SAAOI,EAAQ,MAAMR,GAAa,CAACA,CAAW,CAAC;AACjD;ACrBO,MAAMS,KACXC,GAAoD,IAAI,GCQpDC,KAAe;AAAA,EACnB,EAAE,UAAUrC,EAAS,KAAK,QAAQ,MAAA;AAAA,EAClC,EAAE,UAAUA,EAAS,QAAQ,QAAQ,SAAA;AAAA,EACrC,EAAE,UAAUA,EAAS,MAAM,QAAQ,OAAA;AAAA,EACnC,EAAE,UAAUA,EAAS,OAAO,QAAQ,QAAA;AACtC;AAEA,SAASsC,GAAsB,EAAE,MAAAC,GAAM,UAAAC,KAAuB;AAC5D,QAAMC,IAAIF,GACJG,IAAQvD,EAAasD,EAAE,QAAQ,GAC/Bf,IAAcH,GAAA,GAEdoB,IAAkB,CAACC,MAAwB;AAC/C,IAAAA,EAAE,gBAAA,GACEH,EAAE,iBACJ,OAAO,SAAS,OAAO,aAAaA,EAAE,YAAY;AAAA,EAEtD;AAEA,SAAIA,EAAE,eAAeA,EAAE,cAEnB,gBAAAxE;AAAA,IAAC4E;AAAA,IAAA;AAAA,MACC,GAAAJ;AAAA,MACA,OAAAC;AAAA,MACA,UAAUF,KAAY;AAAA,MACtB,aAAAd;AAAA,MACA,aAAaiB;AAAA,IAAA;AAAA,EAAA,IAMjB,gBAAA3E;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,+CAA+CyE,EAAE,gBAAgB,kGAAkG,EAAE;AAAA,MAChL,OAAO;AAAA,QACL,YAAYC,EAAM;AAAA,QAClB,aAAaA,EAAM;AAAA,QACnB,OAAOA,EAAM;AAAA,QACb,UAAU;AAAA,QACV,QAAQ;AAAA,QACP,mBAA8BD,EAAE,gBAAgBC,EAAM,SAAS;AAAA,MAAA;AAAA,MAGlE,UAAA;AAAA,QAAA,gBAAAzE,EAAC6E,IAAA,EAAY,QAAQJ,EAAM,OAAA,CAAQ;AAAA,QAElCL,GAAa,IAAI,CAAC,EAAE,UAAAlC,GAAU,QAAA4C,QAAa;AAC1C,gBAAMC,IAAWtB,EAAY,IAAIvB,CAAQ;AACzC,iBACE,gBAAAlC;AAAA,YAACgF;AAAA,YAAA;AAAA,cAEC,UAAA9C;AAAA,cACA,QAAA4C;AAAA,cACA,OAAAL;AAAA,cACA,UAAAM;AAAA,YAAA;AAAA,YAJKD;AAAA,UAAA;AAAA,QAOX,CAAC;AAAA,QAED,gBAAA9E,EAAC,OAAA,EAAI,WAAU,mDACb,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,WAAU;AAAA,YAET,UAAAyE,EAAM,UAAU,IAAI,CAACQ,GAAGrE,MACvB,gBAAAZ;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,GAAGiF,EAAE;AAAA,gBACL,MAAMA,EAAE,QAAQ;AAAA,gBAChB,QAAQA,EAAE,UAAU;AAAA,gBACpB,aAAaA,EAAE,eAAe;AAAA,gBAC9B,SAASA,EAAE,WAAW;AAAA,cAAA;AAAA,cALjBrE;AAAA,YAAA,CAOR;AAAA,UAAA;AAAA,QAAA,GAEL;AAAA,QAEA,gBAAAZ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,YAAY,mBAAA;AAAA,YAEpB,UAAAwE,EAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJA,EAAE,cACD,gBAAAxE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO,GAAGyE,EAAM,MAAM;AAAA,cACtB,YAAY;AAAA,cACZ,eAAe;AAAA,YAAA;AAAA,YAGhB,UAAAD,EAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAINA,EAAE,iBACD,gBAAAzE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS2E;AAAA,YACT,WAAU;AAAA,YACV,OAAO;AAAA,cACL,YAAY,GAAGD,EAAM,MAAM;AAAA,cAC3B,OAAOA,EAAM;AAAA,cACb,QAAQ,aAAaA,EAAM,MAAM;AAAA,cACjC,YAAY;AAAA,cACZ,eAAe;AAAA,YAAA;AAAA,YAGjB,UAAA;AAAA,cAAA,gBAAAzE,EAAC,UAAK,UAAA,aAAA,CAAU;AAAA,gCACfkF,IAAA,CAAA,CAAiB;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACpB;AAAA,IAAA;AAAA,EAAA;AAIR;AAUA,MAAMC,KAAoB,IACpBC,KAAmB;AAEzB,SAASR,GAAc,EAAE,GAAAJ,GAAG,OAAAC,GAAO,UAAAF,GAAU,aAAAd,GAAa,aAAA4B,KAAmC;AAC3F,QAAM9B,IAASC,GAAA,GACT8B,IAAcC,EAAWrB,EAAwB,GACjDsB,IAAcC,EAAY,MAAM;AACpC,IAAAH,KAAA,QAAAA,EAAa;AAAA,EACf,GAAG,CAACA,CAAW,CAAC,GACVI,IAAUhC;AAAA,IACd+B;AAAA,MACE,CAAC9B,MAA0B;;AACzB,YAAIgC,IAAW,KACXC,IAAYR,KAAmB;AACnC,YAAI,CAAC7B,EAAQ,QAAO,EAAE,UAAAoC,GAAU,WAAAC,EAAA;AAChC,mBAAWC,KAASlC,EAAM,WAAW,OAAA,GAAU;AAC7C,cAAIkC,EAAM,aAAatC,EAAQ;AAC/B,gBAAMuC,MAAIxE,IAAAuE,EAAM,aAAN,gBAAAvE,EAAgB,UAAS,KAC7BmB,MAAIlB,IAAAsE,EAAM,aAAN,gBAAAtE,EAAgB,WAAU,IAC9BwE,OAASrD,IAAAmD,EAAM,aAAN,gBAAAnD,EAAgB,MAAK,KAAKoD,IAAIX,IACvCa,OAAUC,IAAAJ,EAAM,aAAN,gBAAAI,EAAgB,MAAK,KAAKxD,IAAI0C;AAC9C,UAAIY,IAAQJ,MAAUA,IAAWI,IAC7BC,IAASJ,MAAWA,IAAYI;AAAA,QACtC;AACA,eAAO,EAAE,UAAAL,GAAU,WAAAC,EAAA;AAAA,MACrB;AAAA,MACA,CAACrC,CAAM;AAAA,IAAA;AAAA,IAET,CAAC2C,GAAGzF,MAAMyF,EAAE,aAAazF,EAAE,YAAYyF,EAAE,cAAczF,EAAE;AAAA,EAAA;AAG3D,SACE,gBAAAV;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY,GAAG0E,EAAM,MAAM;AAAA,QAC3B,QAAQ,gBAAgBA,EAAM,MAAM;AAAA,QACpC,OAAOA,EAAM;AAAA,QACb,QAAQ;AAAA,QACR,WAAW,mBAAmBA,EAAM,MAAM;AAAA,MAAA;AAAA,MAG5C,UAAA;AAAA,QAAA,gBAAAzE;AAAA,UAACmG;AAAA,UAAA;AAAA,YACC,WAAW5B;AAAA,YACX,UAAUmB,EAAQ;AAAA,YAClB,WAAWA,EAAQ;AAAA,YACnB,aAAAF;AAAA,YACA,WAAW;AAAA,cACT,aAAa,GAAGf,EAAM,MAAM;AAAA,cAC5B,aAAa;AAAA,YAAA;AAAA,YAEf,aAAa;AAAA,cACX,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,YAAYA,EAAM;AAAA,cAClB,QAAQ,aAAaA,EAAM,EAAE;AAAA,cAC7B,cAAc;AAAA,cACd,WAAW,aAAaA,EAAM,MAAM;AAAA,YAAA;AAAA,UACtC;AAAA,QAAA;AAAA,QAEF,gBAAAzE,EAAC6E,IAAA,EAAY,QAAQJ,EAAM,OAAA,CAAQ;AAAA,QAElCL,GAAa,IAAI,CAAC,EAAE,UAAAlC,GAAU,QAAA4C,QAAa;AAC1C,gBAAMC,IAAWtB,EAAY,IAAIvB,CAAQ;AACzC,iBACE,gBAAAlC;AAAA,YAACgF;AAAA,YAAA;AAAA,cAEC,UAAA9C;AAAA,cACA,QAAA4C;AAAA,cACA,OAAAL;AAAA,cACA,UAAAM;AAAA,YAAA;AAAA,YAJKD;AAAA,UAAA;AAAA,QAOX,CAAC;AAAA,QAED,gBAAA/E;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,cAAc,cAAc0E,EAAM,MAAM;AAAA,cACxC,YAAY,GAAGA,EAAM,EAAE;AAAA,YAAA;AAAA,YAGzB,UAAA;AAAA,cAAA,gBAAA1E,EAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAM;AAAA,oBACN,QAAO;AAAA,oBACP,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,eAAc;AAAA,oBACd,gBAAe;AAAA,oBACf,WAAU;AAAA,oBAET,UAAAyE,EAAM,UAAU,IAAI,CAACQ,GAAGrE,MACvB,gBAAAZ;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBAEC,GAAGiF,EAAE;AAAA,wBACL,MAAMA,EAAE,QAAQ;AAAA,wBAChB,QAAQA,EAAE,UAAU;AAAA,wBACpB,aAAaA,EAAE,eAAe;AAAA,wBAC9B,SAASA,EAAE,WAAW;AAAA,sBAAA;AAAA,sBALjBrE;AAAA,oBAAA,CAOR;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEH,gBAAAZ;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,YAAY,mBAAA;AAAA,oBAEpB,UAAAwE,EAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEJA,EAAE,cACD,gBAAAxE;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO;AAAA,sBACL,OAAO,GAAGyE,EAAM,MAAM;AAAA,sBACtB,YAAY;AAAA,sBACZ,eAAe;AAAA,oBAAA;AAAA,oBAGhB,UAAAD,EAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACL,GAEJ;AAAA,cACCA,EAAE,iBACD,gBAAAzE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAASsF;AAAA,kBACT,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,YAAY,GAAGZ,EAAM,MAAM;AAAA,oBAC3B,OAAOA,EAAM;AAAA,oBACb,QAAQ,aAAaA,EAAM,MAAM;AAAA,oBACjC,YAAY;AAAA,oBACZ,eAAe;AAAA,kBAAA;AAAA,kBAGjB,UAAA;AAAA,oBAAA,gBAAAzE,EAAC,UAAK,UAAA,aAAA,CAAU;AAAA,sCACfkF,IAAA,CAAA,CAAiB;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpB;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASL,GAAY,EAAE,QAAAuB,KAA8B;AACnD,SACE,gBAAArG,EAAAsG,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QAER,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAQoG;AAAA,YACR,aAAY;AAAA,YACZ,MAAK;AAAA,YACL,SAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MACV;AAAA,IAAA;AAAA,IAEF,gBAAApG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QAER,UAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAQoG;AAAA,YACR,aAAY;AAAA,YACZ,MAAK;AAAA,YACL,SAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MACV;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAASpB,GAAW;AAAA,EAClB,UAAA9C;AAAA,EACA,QAAA4C;AAAA,EACA,OAAAL;AAAA,EACA,UAAAM;AACF,GAKG;AACD,QAAMuB,IAA8B;AAAA,IAClC,YAAY7B,EAAM;AAAA,IAClB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,aAAaA,EAAM,EAAE;AAAA,IAC7B,WAAW,aAAaA,EAAM,MAAM;AAAA,IACpC,SAASM,IAAW,IAAI;AAAA,IACxB,YAAY;AAAA,IACZ,cAAc;AAAA,EAAA;AAEhB,2BACG,QAAA,EACC,UAAA;AAAA,IAAA,gBAAA/E;AAAA,MAACuG;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAArE;AAAA,QACA,IAAI,GAAG4C,CAAM;AAAA,QACb,eAAe;AAAA,QACf,OAAOwB;AAAA,MAAA;AAAA,IAAA;AAAA,IAET,gBAAAtG;AAAA,MAACuG;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAArE;AAAA,QACA,IAAI,GAAG4C,CAAM;AAAA,QACb,eAAe;AAAA,QACf,OAAOwB;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,GACF;AAEJ;AAEA,SAASpB,KAAmB;AAC1B,SACE,gBAAAlF;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MAEf,UAAA,gBAAAA,EAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAGxC;AAEO,MAAMwG,KAAmBC,GAAKpC,EAAqB,GCvXpDqC,KAA2C;AAAA,EAC/C,OAAO,EAAE,OAAO,WAAW,QAAQ,IAAO,UAAU,IAAO,OAAO,QAAA;AAAA,EAClE,aAAa,EAAE,OAAO,WAAW,QAAQ,IAAO,UAAU,IAAM,OAAO,YAAA;AAAA,EACvE,WAAW,EAAE,OAAO,WAAW,QAAQ,IAAM,UAAU,IAAO,OAAO,YAAA;AAAA,EACrE,YAAY,EAAE,OAAO,WAAW,QAAQ,IAAM,UAAU,IAAO,OAAO,aAAA;AAAA,EACtE,OAAO,EAAE,OAAO,WAAW,QAAQ,IAAO,UAAU,IAAO,OAAO,QAAA;AAAA,EAClE,QAAQ,EAAE,OAAO,WAAW,QAAQ,IAAO,UAAU,IAAO,OAAO,SAAA;AACrE,GAEMC,KAAiC;AAAA,EACrC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AACT;AAEO,SAASC,GAAgBzF,GAA6B;AAC3D,SAAOA,IAAQuF,GAAWvF,CAAI,KAAKwF,KAAoBA;AACzD;ACfO,SAASE,GAAO,EAAE,SAAAC,KAAkB;AACzC,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAEhC,EAAE,WAAAC,GAAW,WAAAC,EAAA,IAAclD,EAAQ,MAAM;;AAC7C,UAAM1D,wBAAQ,IAAA,GACRoE,wBAAQ,IAAA;AACd,eAAWtD,KAAQyF,EAAQ;AACzB,MAAI,SAAOxF,IAAAD,EAAK,SAAL,gBAAAC,EAAW,SAAS,YAAUf,EAAE,IAAIc,EAAK,KAAK,IAAI;AAE/D,eAAWyC,KAAQgD,EAAQ;AACzB,MAAI,SAAOvF,IAAAuC,EAAK,SAAL,gBAAAvC,EAAW,SAAS,YAAUoD,EAAE,IAAIb,EAAK,KAAK,IAAI;AAE/D,WAAO,EAAE,WAAW,CAAC,GAAGvD,CAAC,EAAE,QAAQ,WAAW,CAAC,GAAGoE,CAAC,EAAE,OAAK;AAAA,EAC5D,GAAG,CAACmC,CAAO,CAAC;AAEZ,SAAII,EAAU,WAAW,KAAKC,EAAU,WAAW,IAAU,OAG3D,gBAAAnH,EAACoH,IAAA,EAAM,UAAS,aAAY,WAAU,QACpC,UAAA,gBAAArH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,OAAO;AAAA,QACP,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA;AAAA,QAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAMiH,EAAQ,CAACK,MAAM,CAACA,CAAC;AAAA,YAChC,WAAU;AAAA,YACV,OAAO,EAAE,OAAO,6BAAA;AAAA,YAChB,iBAAeN;AAAA,YAEf,UAAA;AAAA,cAAA,gBAAA/G,EAACsH,IAAA,EAAY;AAAA,cACb,gBAAAtH,EAAC,UAAK,UAAA,SAAA,CAAM;AAAA,cACZ,gBAAAA,EAACuH,MAAQ,MAAAR,EAAA,CAAY;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGtBA,KACC,gBAAAhH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,aAAa,WAAW,UAAU,IAAA;AAAA,YAE1C,UAAA;AAAA,cAAAmH,EAAU,SAAS,KAClB,gBAAAlH,EAACwH,IAAA,EAAQ,OAAM,SACZ,UAAAN,EAAU,IAAI,CAACO,wBACbC,IAAA,EAAgB,MAAMD,GAAG,OAAOvG,EAAauG,CAAC,EAAA,GAAjCA,CAAoC,CACnD,EAAA,CACH;AAAA,cAEDN,EAAU,SAAS,uBACjBK,IAAA,EAAQ,OAAM,SACZ,UAAAL,EAAU,IAAI,CAACM,MACd,gBAAAzH,EAAC2H,MAAgB,OAAOf,GAAgBa,CAAC,EAAA,GAA3BA,CAA8B,CAC7C,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;AAEA,SAASD,GAAQ;AAAA,EACf,OAAAI;AAAA,EACA,UAAA9H;AACF,GAGG;AACD,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,6BAAA;AAAA,QAEf,UAAA4H;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAA5H,EAAC,OAAA,EAAI,WAAU,uBAAuB,UAAAF,EAAA,CAAS;AAAA,EAAA,GACjD;AAEJ;AAEA,SAAS4H,GAAQ,EAAE,MAAAvG,GAAM,OAAAsD,KAA6C;AACpE,SACE,gBAAA1E,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,YAAYyE,EAAM,IAAI,aAAaA,EAAM,OAAA;AAAA,QAElD,UAAA,gBAAAzE,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAClD,YAAM,UAAU,IAAI,CAACiF,GAAGrE,wBACtBiH,IAAA,EAAmB,GAAA5C,KAAHrE,CAAS,CAC3B,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAZ,EAAC,UAAK,OAAO,EAAE,OAAOyE,EAAM,UAAW,UAAAA,EAAM,MAAA,CAAM;AAAA,IAClDA,EAAM,MAAM,YAAA,MAAkBtD,KAC7B,gBAAAnB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,6BAAA;AAAA,QAEf,UAAAmB;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAEJ;AAEA,SAASwG,GAAQ,EAAE,OAAAlD,KAAkC;AACnD,QAAMqD,IAAOrD,EAAM,SAAS,QAAQ;AACpC,SACE,gBAAA1E,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,WAAU,YACpC,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,IAAG;AAAA,UACH,QAAQyE,EAAM;AAAA,UACd,aAAY;AAAA,UACZ,iBAAiBqD;AAAA,QAAA;AAAA,MAAA;AAAA,MAEnB,gBAAA9H;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAO;AAAA,UACP,MAAMyE,EAAM;AAAA,QAAA;AAAA,MAAA;AAAA,MAEbA,EAAM,YACL,gBAAAzE,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,KAAI,GAAE,OAAM,MAAMyE,EAAM,OACzC,UAAA,gBAAAzE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,MAAK;AAAA,UACL,IAAG;AAAA,UACH,KAAI;AAAA,UACJ,aAAY;AAAA,QAAA;AAAA,MAAA,EACd,CACF;AAAA,IAAA,GAEJ;AAAA,IACA,gBAAAA,EAAC,UAAK,OAAO,EAAE,OAAOyE,EAAM,SAAU,UAAAA,EAAM,MAAA,CAAM;AAAA,EAAA,GACpD;AAEJ;AAEA,SAASoD,GAAW,EAAE,GAAA5C,KAAsB;AAC1C,SACE,gBAAAjF;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAGiF,EAAE;AAAA,MACL,MAAMA,EAAE,QAAQ;AAAA,MAChB,QAAQA,EAAE,UAAU;AAAA,MACpB,aAAaA,EAAE,eAAe;AAAA,MAC9B,SAASA,EAAE,WAAW;AAAA,MACtB,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA;AAGrB;AAEA,SAASqC,KAAc;AACrB,SACE,gBAAAvH,EAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACnD,UAAA;AAAA,IAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,KAAI,QAAO,KAAI,QAAO,gBAAe,aAAY,OAAM;AAAA,IAC/E,gBAAAA,EAAC,QAAA,EAAK,GAAE,MAAK,GAAE,KAAI,OAAM,KAAI,QAAO,KAAI,QAAO,gBAAe,aAAY,OAAM,SAAQ,OAAM;AAAA,IAC9F,gBAAAA,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,MAAK,OAAM,KAAI,QAAO,KAAI,QAAO,gBAAe,aAAY,OAAM,SAAQ,QAAO;AAAA,IAC/F,gBAAAA,EAAC,QAAA,EAAK,GAAE,MAAK,GAAE,MAAK,OAAM,KAAI,QAAO,KAAI,QAAO,gBAAe,aAAY,OAAM,SAAQ,OAAA,CAAO;AAAA,EAAA,GAClG;AAEJ;AAEA,SAASuH,GAAQ,EAAE,MAAAR,KAA2B;AAC5C,SACE,gBAAA/G;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,OAAO;AAAA,QACL,WAAW,UAAU+G,IAAO,MAAM,CAAC;AAAA,QACnC,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA,gBAAA/G,EAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAGxC;ACjMO,SAAS+H,GAAa;AAAA,EAC3B,IAAAC;AAAA,EACA,QAAAlF;AAAA,EACA,QAAAC;AAAA,EACA,WAAAkF;AAAA,EACA,OAAAxD;AAAA,EACA,OAAArE;AAAA,EACA,YAAA8H;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,UAAAC;AACF,GAAc;AACZ,QAAMC,IAAaC,EAAgB1F,CAAM,GACnC2F,IAAaD,EAAgBzF,CAAM;AAEzC,MAAI,CAACwF,KAAc,CAACE,EAAY,QAAO;AAEvC,QAAM,EAAE,IAAAzF,GAAI,IAAAC,GAAI,IAAAE,GAAI,IAAAC,GAAI,WAAAF,GAAW,WAAAG,MAAcR;AAAA,IAC/C0F;AAAA,IACAE;AAAA,EAAA,GAGI,CAACC,GAAUC,GAAQC,CAAM,IAAIC,GAAkB;AAAA,IACnD,SAAS7F;AAAA,IACT,SAASC;AAAA,IACT,gBAAgBC;AAAA,IAChB,gBAAgBG;AAAA,IAChB,SAASF;AAAA,IACT,SAASC;AAAA,IACT,cAAc;AAAA,EAAA,CACf;AAED,SACE,gBAAArD,EAAAsG,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAAgI;AAAA,QACA,WAAW,wBAAwBM,IAAW,qCAAqC,EAAE;AAAA,QACrF,GAAGI;AAAA,QACH,WAAAT;AAAA,QACA,OAAAxD;AAAA,MAAA;AAAA,IAAA;AAAA,IAEDrE,uBACE0I,IAAA,EACC,UAAA,gBAAA9I;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,UAAU;AAAA,UACV,WAAW,mCAAmC2I,CAAM,OAAOC,CAAM;AAAA,UACjE,eAAe;AAAA,UACf,GAAIT,IACA;AAAA,YACE,YAAYY,GAAeZ,CAAY;AAAA,YACvC,cAAcE,KAAuB;AAAA,YACrC,SAASD,IACL,GAAIA,EAAoC,CAAC,CAAC,MAAOA,EAAoC,CAAC,CAAC,OACvF;AAAA,UAAA,IAEN,CAAA;AAAA,QAAC;AAAA,QAGP,UAAA,gBAAApI,EAAC,QAAA,EAAK,OAAOkI,GAAoC,UAAA9H,EAAA,CAAM;AAAA,MAAA;AAAA,IAAA,EACzD,CACF;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAAS2I,GAAeZ,GAA+B;AACrD,QAAMtH,IAAIsH,GACJa,IAAOnI,EAAE,QAAQ,WACjBoI,IAAQpI,EAAE,eAAe;AAC/B,MAAIoI,KAAS,EAAG,QAAOD;AACvB,QAAME,IAAMF,EAAK,QAAQ,KAAK,EAAE;AAChC,MAAIE,EAAI,WAAW,KAAKA,EAAI,WAAW,EAAG,QAAOF;AACjD,QAAMG,IAAOD,EAAI,WAAW,IAAIA,EAAI,MAAM,EAAE,EAAE,IAAI,CAAC5I,MAAMA,IAAIA,CAAC,EAAE,KAAK,EAAE,IAAI4I,GACrEE,IAAI,SAASD,EAAK,MAAM,GAAG,CAAC,GAAG,EAAE,GACjCE,IAAI,SAASF,EAAK,MAAM,GAAG,CAAC,GAAG,EAAE,GACjC1I,IAAI,SAAS0I,EAAK,MAAM,GAAG,CAAC,GAAG,EAAE;AACvC,SAAO,QAAQC,CAAC,KAAKC,CAAC,KAAK5I,CAAC,KAAKwI,CAAK;AACxC;AC1EO,SAASK,GAAcxC,GAG5B;AACA,QAAMyC,IAAU,IAAI,IAAIzC,EAAQ,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,GAChD0C,wBAAkB,IAAA;AACxB,aAAW,KAAK1C,EAAQ;AACtB,IAAI,EAAE,YAAYyC,EAAQ,IAAI,EAAE,QAAQ,KACtCC,EAAY,IAAI,EAAE,WAAWA,EAAY,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC;AAGtE,SAAO;AAAA,IACL,OAAO1C,EAAQ,MAAM,IAAI,CAAC,MAAM2C,GAAW,GAAGD,EAAY,IAAI,EAAE,EAAE,CAAC,CAAC;AAAA,IACpE,OAAO1C,EAAQ,MACZ,OAAO,CAACnC,MAAM4E,EAAQ,IAAI5E,EAAE,MAAM,KAAK4E,EAAQ,IAAI5E,EAAE,MAAM,CAAC,EAC5D,IAAI+E,EAAU;AAAA,EAAA;AAErB;AAEA,SAASD,GAAWlJ,GAAqBoJ,GAA0C;;AACjF,QAAMC,IAAc,IAAQtI,IAAAf,EAAE,SAAF,QAAAe,EAAQ,gBAAgBqI,GAC9CrF,IAAqB;AAAA,IACzB,OAAO/D,EAAE;AAAA,IACT,WAAUgB,IAAAhB,EAAE,SAAF,gBAAAgB,EAAQ;AAAA,IAClB,YAAY,SAAOmB,IAAAnC,EAAE,SAAF,gBAAAmC,EAAQ,eAAe,WAAWnC,EAAE,KAAK,aAAa;AAAA,IACzE,eAAe,EAAQA,EAAE;AAAA,IACzB,cAAcA,EAAE,gBAAgB;AAAA,IAChC,aAAAqJ;AAAA,IACA,aAAAD;AAAA,EAAA,GAEItI,IAA2B;AAAA,IAC/B,IAAId,EAAE;AAAA,IACN,MAAM;AAAA,IACN,UAAU,EAAE,GAAG,GAAG,GAAG,EAAA;AAAA,IACrB,MAAA+D;AAAA,EAAA;AAEF,SAAI/D,EAAE,aACJc,EAAK,WAAWd,EAAE,UAClBc,EAAK,SAAS,WAETA;AACT;AAEA,SAASqI,GAAW/E,GAA2B;;AAC7C,QAAMkF,IAAMjD,IAAgBtF,IAAAqD,EAAE,SAAF,gBAAArD,EAAQ,IAAI,GAClCmD,IAAiC,EAAE,aAAa,KAAK,QAAQoF,EAAI,MAAA;AACvE,SAAIA,EAAI,WAAQpF,EAAM,kBAAkB,QAEjC;AAAA,IACL,IAAIE,EAAE;AAAA,IACN,QAAQA,EAAE;AAAA,IACV,QAAQA,EAAE;AAAA,IACV,MAAM;AAAA,IACN,OAAOA,EAAE;AAAA,IACT,UAAUkF,EAAI;AAAA,IACd,OAAApF;AAAA,IACA,WAAW;AAAA,MACT,MAAMqF,GAAW;AAAA,MACjB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAOD,EAAI;AAAA,IAAA;AAAA,IAEb,YAAY;AAAA,MACV,UAAU;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,YAAY;AAAA,IAAA;AAAA,IAEd,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,IAEf,gBAAgB,CAAC,GAAG,CAAC;AAAA,IACrB,qBAAqB;AAAA,EAAA;AAEzB;ACtFA,MAAME,KAAM,IAAIC,GAAA,GAEVC,KAAa,KACbC,KAAc,IAEd/E,KAAoB;AAE1B,SAASgF,GAAaC,GAAiD;AACrE,SAAOA,MAAc,OAAO,UAAU;AACxC;AAEA,eAAsBC,GACpBC,GACAC,GACAH,GACAI,GACiB;AACjB,MAAIF,EAAM,WAAW,EAAG,QAAOA;AAE/B,QAAMG,wBAAuB,IAAA;AAC7B,aAAWlK,KAAK+J,GAAO;AACrB,UAAMI,IAAMnK,EAAE,YAAY,QACpBoK,IAAOF,EAAiB,IAAIC,CAAG,KAAK,CAAA;AAC1C,IAAAC,EAAK,KAAKpK,CAAC,GACXkK,EAAiB,IAAIC,GAAKC,CAAI;AAAA,EAChC;AACA,QAAMf,IAAc,CAAC5B,MAAA;;AAClB,cAAA1G,IAAAmJ,EAAiB,IAAIzC,CAAE,MAAvB,gBAAA1G,EAA0B,WAAU,KAAK;AAAA,KAEtCsJ,IAAe,CAACrK,MAChBqJ,EAAYrJ,EAAE,EAAE,IACX;AAAA,IACL,IAAIA,EAAE;AAAA,IACN,eAAe,EAAE,eAAe4E,GAAA;AAAA,IAChC,WAAWsF,EAAiB,IAAIlK,EAAE,EAAE,KAAK,CAAA,GAAI,IAAIqK,CAAY;AAAA,EAAA,IAG1D,EAAE,IAAIrK,EAAE,IAAI,OAAO0J,IAAY,QAAQC,GAAA,GAG1CW,IAAWJ,EAAiB,IAAI,MAAS,KAAK,CAAA,GAC9CK,IAAiB;AAAA,IACrB,IAAI;AAAA,IACJ,eAAe;AAAA,MACb,iBAAiB;AAAA,MACjB,iBAAiBX,GAAaC,CAAS;AAAA,MACvC,mBAAmB;AAAA,MACnB,wBAAwB;AAAA,MACxB,6CAA6C;AAAA,MAC7C,6CAA6C;AAAA,MAC7C,yBAAyB;AAAA,IAAA;AAAA,IAE3B,UAAUS,EAAS,IAAID,CAAY;AAAA,IACnC,OAAOL,EAAM,IAAI,CAAC5F,OAAO;AAAA,MACvB,IAAIA,EAAE;AAAA,MACN,SAAS,CAACA,EAAE,MAAM;AAAA,MAClB,SAAS,CAACA,EAAE,MAAM;AAAA,IAAA,EAClB;AAAA,EAAA,GAGEoG,IAAS,MAAMhB,GAAI,OAAOe,CAAK,GAE/BE,wBAAgB,IAAA,GAChBC,wBAAY,IAAA,GACZC,IAAO,CAACC,MAAqB;AACjC,IAAIA,EAAQ,OAAO,WACjBH,EAAU,IAAIG,EAAQ,IAAI,EAAE,GAAGA,EAAQ,KAAK,GAAG,GAAGA,EAAQ,KAAK,EAAA,CAAG,GAC9DvB,EAAYuB,EAAQ,EAAE,KACxBF,EAAM,IAAIE,EAAQ,IAAI;AAAA,MACpB,OAAOA,EAAQ,SAASlB;AAAA,MACxB,QAAQkB,EAAQ,UAAUjB;AAAA,IAAA,CAC3B;AAGL,eAAW5J,KAAK6K,EAAQ,YAAY,CAAA,KAAS7K,CAAC;AAAA,EAChD;AACA,EAAA4K,EAAKH,CAAM;AAGX,QAAMK,wBAAc,IAAA,GACdC,IAAkB,CAAA,GAClBC,IAAO,CAAC/K,MAAY;AACxB,QAAI6K,EAAQ,IAAI7K,EAAE,EAAE,EAAG;AACvB,IAAA6K,EAAQ,IAAI7K,EAAE,EAAE;AAChB,UAAMgL,IAAQf,KAAA,gBAAAA,EAAS,MAAMjK,EAAE,KACzB2B,IAAWqJ,IACb,EAAE,GAAGA,EAAM,GAAG,GAAGA,EAAM,EAAA,IACvBP,EAAU,IAAIzK,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,EAAA,GAChCiL,IAAY,EAAE,GAAGjL,GAAG,UAAA2B,EAAA,GACpBuJ,IAAUR,EAAM,IAAI1K,EAAE,EAAE,GACxBmL,KAAQH,KAAA,gBAAAA,EAAO,WAASE,KAAA,gBAAAA,EAAS,QACjCE,KAASJ,KAAA,gBAAAA,EAAO,YAAUE,KAAA,gBAAAA,EAAS;AACzC,IAAIC,MAAU,UAAaC,MAAW,WACpCH,EAAI,QAAQ,EAAE,GAAIjL,EAAE,SAAS,CAAA,GAAK,OAAAmL,GAAO,QAAAC,EAAA,IAE3CN,EAAQ,KAAKG,CAAG;AAChB,eAAWlL,KAAKmK,EAAiB,IAAIlK,EAAE,EAAE,KAAK,CAAA,EAAI,CAAA+K,EAAKhL,CAAC;AAAA,EAC1D;AACA,aAAWC,KAAKsK,EAAU,CAAAS,EAAK/K,CAAC;AAChC,aAAWA,KAAK+J,EAAO,CAAKc,EAAQ,IAAI7K,EAAE,EAAE,KAAG+K,EAAK/K,CAAC;AAErD,SAAO8K;AACT;ACvGA,MAAMO,KAA4C;AAAA,EAChD,SAAS;AAAA,EACT,UAAU;AAAA,EACV,cAAc;AAChB,GAEMC,KAAkB;AAMjB,SAASC,GAAc,EAAE,OAAAnI,KAAgB;AAC9C,QAAM,CAACoI,GAAcC,CAAe,IAAI/E,EAAS,EAAK;AAWtD,SATAgF,EAAU,MAAM;AACd,QAAItI,EAAM,WAAW,SAAS;AAC5B,MAAAqI,EAAgB,EAAI;AACpB;AAAA,IACF;AACA,UAAMvE,IAAI,WAAW,MAAMuE,EAAgB,EAAI,GAAGH,EAAe;AACjE,WAAO,MAAM,aAAapE,CAAC;AAAA,EAC7B,GAAG,CAAC9D,EAAM,MAAM,CAAC,GAEZoI,IAWH,gBAAA/L;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,iBAAiB,iBAAA;AAAA,MAC1B,MAAK;AAAA,MACL,aAAU;AAAA,MAEV,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,aAAa;AAAA,YACb,iBAAiB;AAAA,UAAA;AAAA,UAGlB,UAAA2D,EAAM,WAAW,UAChB,gBAAA3D,EAACkM,IAAA,EAAU,SAASvI,EAAM,QAAA,CAAS,IAEnC,gBAAA3D,EAACmM,IAAA,EAAY,OAAAxI,EAAA,CAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAE/B;AAAA,EAAA,IA3BA,gBAAA3D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,iBAAiB,iBAAA;AAAA,MAC1B,eAAW;AAAA,IAAA;AAAA,EAAA;AA2BnB;AAEA,SAASmM,GAAY;AAAA,EACnB,OAAAxI;AACF,GAEG;AACD,QAAM,EAAE,OAAAyI,GAAO,MAAAC,GAAM,OAAAC,GAAO,UAAAC,MAAa5I,GACnC6I,IAAQF,IAAQ,IAAI,KAAK,IAAI,GAAGD,IAAOC,CAAK,IAAI,GAChDG,IAAsBL,MAAU;AAEtC,SACE,gBAAArM,EAAAsG,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,qBAAqB,YAAY,mBAAA;AAAA,QAClD,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGD,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,uBAAuB,YAAY,mBAAA;AAAA,QAElD,UAAAuM,KAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAGf,gBAAAxM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,yBAAyB,YAAY,mBAAA;AAAA,QAErD,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAM,UAAA4L,GAAaQ,CAAK,EAAA,CAAE;AAAA,UAC1BK,KACC,gBAAA1M,EAAC,QAAA,EAAK,OAAO,EAAE,OAAO,uBACnB,UAAA;AAAA,YAAAsM;AAAA,YAAK;AAAA,YAAIC;AAAA,UAAA,EAAA,CACZ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIJ,gBAAAtM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,iBAAiB,wBAAA;AAAA,QAEzB,gBAAU,YACT,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,iBAAiB;AAAA,cACjB,WAAW;AAAA,YAAA;AAAA,UACb;AAAA,QAAA,IAGF,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO,GAAGwM,IAAQ,GAAG;AAAA,cACrB,iBAAiB;AAAA,cACjB,YAAY;AAAA,YAAA;AAAA,UACd;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ;AAEA,SAASN,GAAU,EAAE,SAAAQ,KAAgC;AACnD,SACE,gBAAA3M,EAAAsG,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,uBAAuB,YAAY,mBAAA;AAAA,QACpD,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGD,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,uBAAuB,YAAY,mBAAA;AAAA,QACpD,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGD,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,qBAAqB,YAAY,mBAAA;AAAA,QAEhD,UAAA0M;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAA1M;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAM,OAAO,SAAS,OAAA;AAAA,QAC/B,WAAU;AAAA,QACV,OAAO;AAAA,UACL,aAAa;AAAA,UACb,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,iBAAiB;AAAA,QAAA;AAAA,QAEpB,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAED,GACF;AAEJ;ACjHA,MAAM2M,IAA4BxI,GAAmC,IAAI;AAElE,SAASyI,IAA4C;AAC1D,QAAMC,IAAMtH,EAAWoH,CAAyB;AAChD,MAAI,CAACE;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA,EAAI;AACb;AAEO,SAASC,KAGG;AACjB,QAAMD,IAAMtH,EAAWoH,CAAyB;AAChD,MAAI,CAACE;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA,EAAI;AACb;AAGO,SAASE,KAAwD;AACtE,QAAMF,IAAMtH,EAAWoH,CAAyB;AAChD,MAAI,CAACE;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA,EAAI;AACb;AAGO,SAASG,KAGN;AACR,QAAMH,IAAMtH,EAAWoH,CAAyB;AAChD,MAAI,CAACE;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,SAAOA,EAAI;AACb;AASO,SAASI,GAA2B;AAAA,EACzC,YAAAC;AAAA,EACA,UAAApN;AAAA,EACA,WAAAqN;AACF,GAAoC;AAClC,QAAM,CAACxJ,GAAOyJ,CAAQ,IAAInG,EAAsB;AAAA,IAC9C,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,CACR;AAED,EAAAgF,EAAU,MAAM;AACd,QAAIoB,IAAY;AAChB,WAAAD,EAAS,EAAE,QAAQ,WAAW,OAAO,WAAW,MAAM,GAAG,OAAO,GAAG,GAC9DE,GAAW;AAAA,MACd,YAAAJ;AAAA,MACA,SAAS,CAACK,MAAS;AACjB,QAAKF,KAAWD,EAASG,CAAI;AAAA,MAC/B;AAAA,MACA,aAAa,MAAMF;AAAA,IAAA,CACpB,GACM,MAAM;AACX,MAAAA,IAAY;AAAA,IACd;AAAA,EACF,GAAG,CAACH,GAAYC,CAAS,CAAC;AAE1B,QAAMK,IAAa/H;AAAA,IACjB,OAAOgI,GAAcC,MAAmC;AACtD,YAAMnC,IAAQ,MAAM2B,EAAW,WAAWO,GAAMC,CAAM;AACtD,MAAAN,EAAS,CAACO,MACJA,EAAK,WAAW,UAAgBA,IAC7B;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,UACN,GAAGA,EAAK;AAAA,UACR,SAAS,EAAE,GAAGA,EAAK,OAAO,SAAS,CAACF,CAAI,GAAGlC,EAAA;AAAA,QAAM;AAAA,MACnD,CAEH;AAAA,IACH;AAAA,IACA,CAAC2B,CAAU;AAAA,EAAA,GAGPU,IAAe3J;AAAA,IACnB,MACEiJ,EAAW,eACP,CAACW;;AAAiB,cAAAvM,IAAA4L,EAAW,iBAAX,gBAAA5L,EAAA,KAAA4L,GAA0BW;AAAA,QAC5C;AAAA,IACN,CAACX,CAAU;AAAA,EAAA,GAGPY,IAAcrI;AAAA,IAClB,CAACsI,GAAeC,MAA+B;;AAC7C,OAAA1M,IAAA4L,EAAW,gBAAX,QAAA5L,EAAA,KAAA4L,GAAyBa,GAAOC;AAAA,IAClC;AAAA,IACA,CAACd,CAAU;AAAA,EAAA,GAGPe,IAAStK,EAAM,WAAW,UAAUA,EAAM,SAAS,MACnDuK,IAAejK,EAA6B,MAC3CgK,IACE,EAAE,QAAAA,GAAQ,YAAAT,GAAY,cAAAI,GAAc,aAAAE,EAAA,IADvB,MAEnB,CAACG,GAAQT,GAAYI,GAAcE,CAAW,CAAC;AAElD,SAAInK,EAAM,WAAW,UACZ,gBAAA3D,EAAC8L,MAAc,OAAAnI,GAAc,IAEjCuK,sBAGFvB,EAA0B,UAA1B,EAAmC,OAAOuB,GACxC,UAAApO,GACH,IALwB;AAO5B;AAQA,eAAewN,GAAW;AAAA,EACxB,YAAAJ;AAAA,EACA,SAAAiB;AAAA,EACA,aAAAC;AACF,GAAiC;AAC/B,MAAI;AACF,IAAAD,EAAQ,EAAE,QAAQ,WAAW,OAAO,WAAW,MAAM,GAAG,OAAO,GAAG;AAClE,UAAME,IAAU,MAAMnB,EAAW,YAAA;AACjC,QAAIkB,IAAe;AAEnB,UAAME,IAAeD,EAAQ,SAAS,IAAI,CAAC7J,MAAMA,EAAE,IAAI;AACvD,QAAI+J,IAAe;AACnB,UAAMC,IAAeF,EAAa,SAAS;AAC3C,IAAAH,EAAQ;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAOK;AAAA,MACP,UAAUH,EAAQ;AAAA,IAAA,CACnB;AAED,UAAMI,IAAe,MAAM;AACzB,MAAAF,KAAgB,GAChBJ,EAAQ;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAMI;AAAA,QACN,OAAOC;AAAA,QACP,UAAUH,EAAQ;AAAA,MAAA,CACnB;AAAA,IACH,GAEMK,IAAiB,MAAM,QAAQ;AAAA,MACnCJ,EAAa,IAAI,OAAOb,MAAS;AAC/B,cAAMkB,IAAiBzB,EAAW,YAAYO,CAAI,EAAE,KAAK,CAACjJ,OACnD4J,EAAA,KAAeK,EAAA,GACbjK,EACR,GACKoK,IAAgB1B,EAAW,WAAWO,CAAI,EAAE,KAAK,CAACoB,OACjDT,EAAA,KAAeK,EAAA,GACbI,EACR,GACK,CAAC/H,GAASgI,CAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,UAC1CH;AAAA,UACAC;AAAA,QAAA,CACD;AACD,eAAO,EAAE,MAAAnB,GAAM,SAAA3G,GAAS,QAAAgI,EAAA;AAAA,MAC1B,CAAC;AAAA,IAAA;AAEH,QAAIV,IAAe;AAEnB,UAAMW,IAAuC,CAAA,GACvCC,IAA6C,CAAA,GAC7CzF,wBAAc,IAAA;AACpB,eAAW,EAAE,MAAAkE,GAAM,SAAA3G,GAAS,QAAAgI,EAAA,KAAYJ,GAAgB;AACtD,MAAAK,EAAStB,CAAI,IAAI3G,GACjBkI,EAAQvB,CAAI,IAAIqB;AAChB,iBAAWzN,KAAQyF,EAAQ,SAAS,CAAA,EAAI,CAAAyC,EAAQ,IAAIlI,EAAK,EAAE;AAAA,IAC7D;AAEA,UAAM4N,IAAa,CAAC,GAAG1F,CAAO;AAC9B,QAAI2F,IAAY;AAChB,IAAAf,EAAQ;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAOc,EAAW;AAAA,MAClB,UAAUZ,EAAQ;AAAA,IAAA,CACnB;AAED,UAAMc,IAAY,MAAM;AACtB,MAAAD,KAAa,GACbf,EAAQ;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAMe;AAAA,QACN,OAAOD,EAAW;AAAA,QAClB,UAAUZ,EAAQ;AAAA,MAAA,CACnB;AAAA,IACH,GAEM/D,IAAuC,CAAA,GACvC8E,wBAAc,IAAA;AAapB,QAZA,MAAM,QAAQ;AAAA,MACZH,EAAW,IAAI,OAAOjH,MAAO;AAC3B,YAAI;AACF,gBAAMqH,IAAS,MAAMnC,EAAW,eAAelF,CAAE;AACjD,UAAAsC,EAAMtC,CAAE,IAAIqH;AAAA,QACd,QAAQ;AACN,UAAAD,EAAQ,IAAIpH,CAAE;AAAA,QAChB,UAAA;AACE,UAAKoG,EAAA,KAAee,EAAA;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IAAA,GAECf,IAAe;AAEnB,IAAAD,EAAQ;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN,SAAAE;AAAA,QACA,UAAAU;AAAA,QACA,SAAAC;AAAA,QACA,OAAA1E;AAAA,QACA,qBAAqB8E;AAAA,MAAA;AAAA,IACvB,CACD;AAAA,EACH,SAASE,GAAK;AACZ,QAAIlB,IAAe;AACnB,UAAM1B,IAAU4C,aAAe,QAAQA,EAAI,UAAU,OAAOA,CAAG;AAC/D,IAAAnB,EAAQ,EAAE,QAAQ,SAAS,SAAAzB,EAAA,CAAS;AAAA,EACtC;AACF;AC5QA,MAAMxF,KAAY,EAAE,cAAcV,GAAA,GAC5BW,KAAY,EAAE,UAAUY,GAAA;AAQvB,SAASwH,GAAcvB,GAAc;AAC1C,2BACGwB,IAAA,EACC,UAAA,gBAAAxP,EAACyP,IAAA,EAAoB,GAAGzB,GAAO,GACjC;AAEJ;AAEA,MAAM0B,KAAc,CAACjC,OAAqC;AAAA,EACxD,SAAS;AAAA,EACT,WAAWA;AAAA,EACX,WAAW;AAAA,EACX,OAAO,CAAA;AACT;AAEA,SAASkC,GACPrF,GACiC;;AACjC,QAAMkB,IAAuC,CAAA;AAC7C,aAAWjL,KAAK+J,GAAO;AACrB,UAAMsF,IAAyB;AAAA,MAC7B,KAAGtO,IAAAf,EAAE,aAAF,gBAAAe,EAAY,MAAK;AAAA,MACpB,KAAGC,IAAAhB,EAAE,aAAF,gBAAAgB,EAAY,MAAK;AAAA,IAAA,GAEhBuE,IAAIvF,EAAE,WAAUmC,IAAAnC,EAAE,UAAF,gBAAAmC,EAAS,QACzBD,IAAIlC,EAAE,YAAW0F,IAAA1F,EAAE,UAAF,gBAAA0F,EAAS;AAChC,IAAI,OAAOH,KAAM,YAAY,OAAO,SAASA,CAAC,QAAS,QAAQA,IAC3D,OAAOrD,KAAM,YAAY,OAAO,SAASA,CAAC,QAAS,SAASA,IAChE+I,EAAIjL,EAAE,EAAE,IAAIqP;AAAA,EACd;AACA,SAAOpE;AACT;AAEA,SAASiE,GAAmB,EAAE,WAAAI,GAAW,cAAAC,GAAc,WAAAC,KAAoB;AACzE,QAAM9B,IAASrB,EAAA,GACTY,IAAaV,GAAA,GACbhG,IAAUmH,EAAO,SAAS4B,CAAS,GAEnC,CAACvF,GAAO0F,GAAUC,CAAa,IAAIC,GAAkC,CAAA,CAAE,GACvE,CAAC3F,GAAO4F,GAAUC,CAAa,IAAIC,GAAoB,CAAA,CAAE,GACzD,CAACC,GAAOC,CAAQ,IAAItJ,EAAS,EAAK,GAClC,CAACuJ,GAAaC,CAAc,IAAIxJ,EAAwB,IAAI,GAC5D,EAAE,UAAAyJ,EAAA,IAAaC,GAAA,GACfC,IAAiBC,EAA6C,IAAI,GAClEC,IAAsBD,EAAOhB,CAAS;AAC5C,EAAAiB,EAAoB,UAAUjB;AAC9B,QAAMkB,IAAYF,EAAO5C,CAAM;AAC/B,EAAA8C,EAAU,UAAU9C,GAEpBhC,EAAU,MAAM;;AACd,QAAIoB,IAAY;AAChB,IAAAkD,EAAS,EAAK,GACdE,EAAe,IAAI,GACnBX,EAAa,IAAI;AAEjB,UAAMkB,IAAgBD,EAAU,SAC1BE,IAAiBD,EAAc,SAASnB,CAAS;AACvD,QAAI,CAACoB;AACH,aAAAR,EAAe,YAAYZ,CAAS,kBAAkB,GACtDG,EAAS,CAAA,CAAE,GACXG,EAAS,CAAA,CAAE,GACJ,MAAM;AACX,QAAA9C,IAAY;AAAA,MACd;AAGF,UAAM6D,KACJF,EAAc,QAAQnB,CAAS,KAAKH,GAAYG,CAAS,GACrD,EAAE,OAAOsB,IAAS,OAAOC,EAAA,IAAY9H,GAAc2H,CAAc;AACvE,WAAA5G,GAAc8G,IAASC,IAAS9P,IAAA2P,EAAe,SAAf,gBAAA3P,EAAqB,WAAW4P,EAAa,EAC1E,KAAK,CAACG,MAAe;AACpB,MAAIhE,MACJ2C,EAASqB,CAAkC,GAC3ClB,EAASiB,CAAO,GAChB,sBAAsB,MAAM,CAAC/D,KAAakD,EAAS,EAAI,CAAC;AAAA,IAC1D,CAAC,EACA,MAAM,CAACjB,MAAe;AACrB,MAAKjC,KAAWoD,EAAenB,EAAI,OAAO;AAAA,IAC5C,CAAC,GAEI,MAAM;AACX,MAAAjC,IAAY,IACRuD,EAAe,YACjB,aAAaA,EAAe,OAAO,GACnCA,EAAe,UAAU;AAAA,IAE7B;AAAA,EACF,GAAG,CAACf,GAAWC,GAAcK,GAAUH,CAAQ,CAAC;AAEhD,QAAMsB,IAAgB7L,EAAY,MAAM;AACtC,UAAMgI,IAAOqD,EAAoB,SAC3BpD,IAAiC;AAAA,MACrC,OAAOiC,GAAqBe,EAAA,CAAU;AAAA,IAAA;AAExC,IAAAlD,EAAWC,GAAMC,CAAM,EAAE,MAAM,CAAC4B,MAAQ;AACtC,cAAQ,KAAK,sCAAsCA,CAAG;AAAA,IACxD,CAAC;AAAA,EACH,GAAG,CAACoB,GAAUlD,CAAU,CAAC,GAEnB+D,IAAsB9L,EAAY,MAAM;AAC5C,IAAImL,EAAe,WAAS,aAAaA,EAAe,OAAO,GAC/DA,EAAe,UAAU,WAAW,MAAM;AACxC,MAAAA,EAAe,UAAU,MACzBU,EAAA;AAAA,IACF,GAAG,GAAG;AAAA,EACR,GAAG,CAACA,CAAa,CAAC,GAEZE,IAAmBvN;AAAA,IACvB,OAAO,EAAE,qBAAAsN,EAAA;AAAA,IACT,CAACA,CAAmB;AAAA,EAAA,GAGhBE,IAAiBhM,EAA8B,MAAM;AACzD,IAAA8L,EAAA;AAAA,EACF,GAAG,CAACA,CAAmB,CAAC,GAElBG,KAAczN;AAAA,IAClB,MAAM,CAAC0N,GAAQtQ,MAAS;AACtB,MAAAyO,EAAazO,EAAK,EAAE;AAAA,IACtB;AAAA,IACA,CAACyO,CAAY;AAAA,EAAA,GAGT8B,KAAoB3N;AAAA,IACxB,MAAM,CAAC0N,GAAQtQ,MAAS;AACtB,YAAMiD,IAAOjD,EAAK;AAClB,MAAIiD,EAAK,gBAAcyL,EAAUzL,EAAK,YAAY;AAAA,IACpD;AAAA,IACA,CAACyL,CAAS;AAAA,EAAA;AAGZ,SACE,gBAAA/P,EAACkE,GAAyB,UAAzB,EAAkC,OAAOsN,GAC1C,UAAA,gBAAAzR,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,IAAA,gBAAAA;AAAA,MAAC8R;AAAA,MAAA;AAAA,QACC,OAAAvH;AAAA,QACA,OAAAC;AAAA,QACA,WAAArD;AAAA,QACA,WAAAC;AAAA,QACA,eAAA8I;AAAA,QACA,eAAAG;AAAA,QACA,aAAAsB;AAAA,QACA,mBAAAE;AAAA,QACA,gBAAAH;AAAA,QACA,aAAa,MAAM3B,EAAa,IAAI;AAAA,QACpC,SAAO;AAAA,QACP,gBAAgB,EAAE,SAAS,IAAA;AAAA,QAC3B,WAAU;AAAA,QACV,YAAY,EAAE,iBAAiB,GAAA;AAAA,QAC/B,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAASQ,IAAQ,IAAI;AAAA,UACrB,YAAY;AAAA,QAAA;AAAA,QAGd,UAAA;AAAA,UAAA,gBAAAtQ;AAAA,YAAC8R;AAAA,YAAA;AAAA,cACC,SAASC,GAAkB;AAAA,cAC3B,KAAK;AAAA,cACL,MAAM;AAAA,cACN,OAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAER,gBAAA/R,EAACgS,IAAA,EAAS,iBAAiB,IAAO,UAAS,gBAAe;AAAA,UACzDlL,KAAW,gBAAA9G,EAAC6G,IAAA,EAAO,SAAAC,EAAA,CAAkB;AAAA,UACtC,gBAAA9G;AAAA,YAACiS;AAAA,YAAA;AAAA,cACC,UAAS;AAAA,cACT,UAAQ;AAAA,cACR,UAAQ;AAAA,cACR,WAAU;AAAA,cACV,iBAAgB;AAAA,cAChB,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ;AAAA,MAAA;AAAA,IAAA;AAAA,IAGDzB,KACC,gBAAAxQ,EAACkS,IAAA,EAAc,OAAO,UAAU1B,CAAW,GAAA,CAAI;AAAA,EAAA,EAAA,CAEnD,EAAA,CACA;AAEJ;AAEA,SAAS0B,GAAc,EAAE,OAAA9R,KAA4B;AACnD,SACE,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,sCAAsC,UAAAI,EAAA,CAAM;AAAA,IAAA;AAAA,EAAA;AAGlE;AChOO,SAAS+R,GAAY;AAAA,EAC1B,SAAA9D;AAAA,EACA,kBAAA+D;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACF,GAAU;AACR,QAAM,CAACvL,GAAMC,CAAO,IAAIC,EAAS,EAAI,GAC/BsL,IACJlE,KAAW,QAAQ+D,MAAqB/D,EAAQ;AAElD,SACE,gBAAArO,EAAC,OAAA,EAAI,WAAU,mCACb,UAAA,gBAAAD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,aAAa;AAAA,QACb,iBAAiB;AAAA,MAAA;AAAA,MAInB,UAAA;AAAA,QAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAASuS;AAAA,YACT,UAAUC;AAAA,YACV,WAAU;AAAA,YACV,OAAO;AAAA,cACL,YAAY;AAAA,cACZ,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,QAAQA,IAAU,YAAY;AAAA,YAAA;AAAA,YAEhC,OAAOA,IAAU,SAAY;AAAA,YAC7B,cACEA,IACI,6BACA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAxS,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO;AAAA,sBACL,OAAO;AAAA,sBACP,YAAY;AAAA,oBAAA;AAAA,oBAEf,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGA,CAACuS,KACA,gBAAAxS;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO;AAAA,sBACL,OAAO;AAAA,sBACP,YAAY;AAAA,oBAAA;AAAA,oBAGd,UAAA;AAAA,sBAAA,gBAAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAM;AAAA,0BACN,QAAO;AAAA,0BACP,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,QAAO;AAAA,0BACP,aAAY;AAAA,0BACZ,eAAc;AAAA,0BACd,gBAAe;AAAA,0BAEf,UAAA;AAAA,4BAAA,gBAAAC,EAAC,QAAA,EAAK,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAA,CAAK;AAAA,4BACrC,gBAAAA,EAAC,YAAA,EAAS,QAAO,kBAAA,CAAkB;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAC/B;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAER,GAEJ;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,OAAO;AAAA,oBACP,YAAY;AAAA,oBACZ,UAAU;AAAA,kBAAA;AAAA,kBAGX,kCAAS,SAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpB;AAAA,UAAA;AAAA,QAAA;AAAA,QAGF,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAMiH,EAAQ,CAACK,MAAM,CAACA,CAAC;AAAA,YAChC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,QAAQ;AAAA,cACR,cAAcN,IACV,oCACA;AAAA,YAAA;AAAA,YAEN,iBAAeA;AAAA,YAEf,UAAA;AAAA,cAAA,gBAAAhH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,YAAY,mBAAA;AAAA,kBACtB,UAAA;AAAA,oBAAA;AAAA,oBACWsO,IAAU,KAAKA,EAAQ,SAAS,MAAM,KAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEvD,gBAAArO;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,QAAO;AAAA,kBACP,aAAY;AAAA,kBACZ,eAAc;AAAA,kBACd,gBAAe;AAAA,kBACf,OAAO;AAAA,oBACL,WAAW+G,IAAO,kBAAkB;AAAA,oBACpC,YAAY;AAAA,kBAAA;AAAA,kBAGd,UAAA,gBAAA/G,EAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD+G,KACC,gBAAAhH,EAAC,MAAA,EAAG,WAAU,qCACX,UAAA;AAAA,UAAAsO,KAAA,gBAAAA,EAAS,SAAS,IAAI,CAAC7J,MACtB,gBAAAxE;AAAA,YAACwS;AAAA,YAAA;AAAA,cAEC,SAAShO;AAAA,cACT,QAAQA,EAAE,SAAS4N;AAAA,cACnB,OAAO5N,EAAE,SAAS6J,EAAQ;AAAA,cAC1B,UAAAgE;AAAA,YAAA;AAAA,YAJK7N,EAAE;AAAA,UAAA;AAAA,UAOV,CAAC6J,KACA,gBAAArO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,YAAY;AAAA,cAAA;AAAA,cAEf,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;AAEA,SAASwS,GAAW;AAAA,EAClB,SAAA1L;AAAA,EACA,QAAA2L;AAAA,EACA,OAAAC;AAAA,EACA,UAAAL;AACF,GAKG;AACD,2BACG,MAAA,EACC,UAAA,gBAAAtS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,MAAMsS,EAASvL,EAAQ,IAAI;AAAA,MACpC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,YAAY2L,IAAS,6BAA6B;AAAA,QAClD,YAAYA,IACR,iCACA;AAAA,QACJ,OAAOA,IAAS,wBAAwB;AAAA,QACxC,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,iBAAiB;AAAA,MAAA;AAAA,MAGnB,UAAA;AAAA,QAAA,gBAAA1S,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,OAAO0S,IAAS,uBAAuB;AAAA,gBACvC,YAAY;AAAA,cAAA;AAAA,cAEf,UAAA;AAAA,gBAAA;AAAA,gBACG3L,EAAQ,SAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAErB,gBAAA9G;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,YAAY,mBAAA;AAAA,cAEpB,UAAA8G,EAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,UAEV4L,KACC,gBAAA1S;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,YAAY;AAAA,cAAA;AAAA,cAEf,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,GAEJ;AAAA,QACA,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO;AAAA,cACP,YAAY;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA+G,EAAQ;AAAA,cAAU;AAAA,cAAKA,EAAQ;AAAA,cAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAC5C;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;ACnOA,IAAI6L,KAAc;AAElB,eAAeC,KAAa;AAE1B,QAAMC,KADM,MAAM,OAAO,SAAS,GACd;AACpB,SAAKF,OACHE,EAAQ,WAAW;AAAA,IACjB,aAAa;AAAA,IACb,OAAO;AAAA,IACP,eAAe;AAAA,IACf,YACE;AAAA,IACF,gBAAgB;AAAA,MACd,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,MACtB,oBAAoB;AAAA,MACpB,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,MACnB,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,UAAU;AAAA,MACV,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,qBAAqB;AAAA,MACrB,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,eAAe;AAAA,IAAA;AAAA,EACjB,CACD,GACDF,KAAc,KAETE;AACT;AAWO,SAASC,GAAa,EAAE,OAAAC,KAAgB;AAC7C,QAAM,CAACpP,GAAOyJ,CAAQ,IAAInG,EAAgB,EAAE,QAAQ,WAAW,GACzD,CAAC+L,GAAUC,CAAW,IAAIhM,EAAS,EAAK,GAExCiM,IAAY,WADJC,GAAA,EACqB,QAAQ,MAAM,EAAE,CAAC;AAyBpD,SAvBAlH,EAAU,MAAM;AACd,QAAIoB,IAAY;AAChB,WAAAD,EAAS,EAAE,QAAQ,WAAW,IAE7B,YAAY;AACX,UAAI;AACF,cAAMyF,IAAU,MAAMD,GAAA;AACtB,cAAMC,EAAQ,MAAME,CAAK;AACzB,cAAM,EAAE,KAAAK,EAAA,IAAQ,MAAMP,EAAQ,OAAOK,GAAWH,CAAK;AACrD,QAAK1F,KAAWD,EAAS,EAAE,QAAQ,SAAS,KAAAgG,GAAK;AAAA,MACnD,SAAS9D,GAAK;AACZ,YAAIjC,EAAW;AACf,cAAMX,IACJ4C,aAAe,QAAQA,EAAI,UAAU;AACvC,QAAAlC,EAAS,EAAE,QAAQ,SAAS,SAAAV,EAAA,CAAS;AAAA,MACvC;AAAA,IACF,GAAA,GAEO,MAAM;AACX,MAAAW,IAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC0F,GAAOG,CAAS,CAAC,GAEjBvP,EAAM,WAAW,YAEjB,gBAAA3D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,UAAU;AAAA,MAAA;AAAA,MAEb,UAAA;AAAA,IAAA;AAAA,EAAA,IAMD2D,EAAM,WAAW,UAEjB,gBAAA5D,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,IAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO;AAAA,UACL,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,QAAA;AAAA,QAEb,UAAA;AAAA,UAAA;AAAA,UACiB4D,EAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAExB,gBAAA3D,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,EAAA,GACpB,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,gBAAgB,UAAA+S,EAAA,CAAM,EAAA,CACxC;AAAA,EAAA,GACF,IAKF,gBAAAhT,EAAAsG,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAtG,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAMiT,EAAY,EAAI;AAAA,UAC/B,cAAW;AAAA,UACX,OAAM;AAAA,UACN,WAAU;AAAA,UACV,OAAO;AAAA,YACL,aAAa;AAAA,YACb,iBAAiB;AAAA,YACjB,OAAO;AAAA,YACP,gBAAgB;AAAA,UAAA;AAAA,UAGlB,UAAA,gBAAAlT;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,QAAO;AAAA,cACP,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,QAAO;AAAA,cACP,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,gBAAe;AAAA,cAEf,UAAA;AAAA,gBAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,yBAAA,CAAyB;AAAA,gBACjC,gBAAAA,EAAC,QAAA,EAAK,GAAE,2BAAA,CAA2B;AAAA,gBACnC,gBAAAA,EAAC,QAAA,EAAK,GAAE,0BAAA,CAA0B;AAAA,gBAClC,gBAAAA,EAAC,QAAA,EAAK,GAAE,4BAAA,CAA4B;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACtC;AAAA,MAAA;AAAA,MAEF,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,WAAW,OAAA;AAAA,UACpB,yBAAyB,EAAE,QAAQ2D,EAAM,IAAA;AAAA,QAAI;AAAA,MAAA;AAAA,IAC/C,GACF;AAAA,IACCqP,KACC,gBAAAhT,EAACqT,IAAA,EAAgB,KAAK1P,EAAM,KAAK,SAAS,MAAMsP,EAAY,EAAK,EAAA,CAAG;AAAA,EAAA,GAExE;AAEJ;AAEA,SAASI,GAAgB;AAAA,EACvB,KAAAD;AAAA,EACA,SAAAE;AACF,GAGG;AACD,SAAArH,EAAU,MAAM;AACd,UAAMsH,IAAQ,CAAC5O,MAAqB;AAClC,MAAIA,EAAE,QAAQ,YAAU2O,EAAA;AAAA,IAC1B;AACA,aAAS,iBAAiB,WAAWC,CAAK;AAC1C,UAAMC,IAAe,SAAS,KAAK,MAAM;AACzC,oBAAS,KAAK,MAAM,WAAW,UACxB,MAAM;AACX,eAAS,oBAAoB,WAAWD,CAAK,GAC7C,SAAS,KAAK,MAAM,WAAWC;AAAA,IACjC;AAAA,EACF,GAAG,CAACF,CAAO,CAAC,GAELG;AAAA,IACL,gBAAAzT;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAW;AAAA,QACX,cAAW;AAAA,QACX,SAASsT;AAAA,QACT,WAAU;AAAA,QACV,OAAO;AAAA,UACL,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,UAChB,sBAAsB;AAAA,UACtB,mBAAmB;AAAA,QAAA;AAAA,QAGrB,UAAA,gBAAAvT;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,CAAC4E,MAAMA,EAAE,gBAAA;AAAA,YAClB,WAAU;AAAA,YACV,OAAO;AAAA,cACL,aAAa;AAAA,cACb,iBAAiB;AAAA,cACjB,UAAU;AAAA,cACV,WAAW;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA,gBAAA5E;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,aAAa,wBAAA;AAAA,kBAEtB,UAAA;AAAA,oBAAA,gBAAAC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO,EAAE,OAAO,qBAAA;AAAA,wBACjB,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAAD;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,OAAO;AAAA,0BACP,YAAY;AAAA,wBAAA;AAAA,wBAGd,UAAA;AAAA,0BAAA,gBAAAC,EAAC,UAAK,UAAA,eAAA,CAAY;AAAA,0BAClB,gBAAAA;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,MAAK;AAAA,8BACL,SAASsT;AAAA,8BACT,cAAW;AAAA,8BACX,WAAU;AAAA,8BACV,OAAO;AAAA,gCACL,aAAa;AAAA,gCACb,OAAO;AAAA,gCACP,iBAAiB;AAAA,8BAAA;AAAA,8BAGnB,UAAA,gBAAAvT;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,OAAM;AAAA,kCACN,QAAO;AAAA,kCACP,SAAQ;AAAA,kCACR,MAAK;AAAA,kCACL,QAAO;AAAA,kCACP,aAAY;AAAA,kCACZ,eAAc;AAAA,kCACd,gBAAe;AAAA,kCAEf,UAAA;AAAA,oCAAA,gBAAAC,EAAC,QAAA,EAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAA,CAAK;AAAA,oCACpC,gBAAAA,EAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,KAAA,CAAK;AAAA,kCAAA;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACtC;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,UAAU;AAAA,oBACV,WAAW;AAAA,kBAAA;AAAA,kBAEb,yBAAyB,EAAE,QAAQoT,EAAA;AAAA,gBAAI;AAAA,cAAA;AAAA,YACzC;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAEb;AClQO,SAASM,GAAgB,EAAE,QAAA5Q,KAAiB;AACjD,SACE,gBAAA9C,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA,gBAAAA;AAAA,IAAC2T;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,WAAW;AAAA,UACT,KAAK,EAAE,WAAWC,GAAA;AAAA,UAClB,GAAG,EAAE,WAAWC,GAAA;AAAA,QAAa;AAAA,MAC/B;AAAA,MAGD,UAAA/Q;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEA,SAAS+Q,GAAa;AAAA,EACpB,MAAAC;AAAA,EACA,UAAAhU;AAAA,EACA,GAAGiU;AACL,GAA4C;AAC1C,QAAMC,IACJ,CAACF,KACDA,EAAK,WAAW,GAAG,KACnBA,EAAK,WAAW,GAAG,KAClB,OAAO,SAAW,OAAeA,EAAK,WAAW,OAAO,SAAS,MAAM;AAC1E,SACE,gBAAA9T;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAA8T;AAAA,MACC,GAAGC;AAAA,MACH,GAAIC,IAAa,CAAA,IAAK,EAAE,QAAQ,UAAU,KAAK,sBAAA;AAAA,MAE/C,UAAAlU;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS8T,GAAY,EAAE,UAAA9T,KAAsC;AAC3D,QAAMmU,IAAgBC,GAAqBpU,CAAQ;AACnD,SAAImU,MAAkB,OACb,gBAAAjU,EAAC8S,IAAA,EAAa,OAAOmB,EAAA,CAAe,IAEtC,gBAAAjU,EAAC,SAAK,UAAAF,GAAS;AACxB;AAEA,SAASoU,GAAqB7S,GAAgC;AAC5D,QAAM8S,IAAO,MAAM,QAAQ9S,CAAI,KAAKA,EAAK,WAAW,IAAIA,EAAK,CAAC,IAAIA;AAClE,MAAI,CAAC+S,GAAeD,CAAI,EAAG,QAAO;AAClC,QAAME,IAAKF;AACX,MAAIE,EAAG,SAAS,OAAQ,QAAO;AAC/B,QAAMC,IAAKD,EAAG,MAAM,aAAa;AAMjC,MAAI,EAJFC,MAAO,kBACPA,MAAO,sBACPA,EAAG,MAAM,KAAK,EAAE,SAAS,cAAc,KACvCA,EAAG,MAAM,KAAK,EAAE,SAAS,kBAAkB,GAC7B,QAAO;AACvB,QAAMC,IAAQF,EAAG,MAAM;AACvB,SAAI,OAAOE,KAAU,WAAiBA,IAClC,MAAM,QAAQA,CAAK,IAAUA,EAAM,IAAI,CAACjU,MAAM,OAAOA,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IACnE,OAAOiU,KAAS,EAAE;AAC3B;ACzDO,SAASC,GAAgB,EAAE,QAAAjR,GAAQ,SAAA+P,KAAkB;;AAC1D,QAAMrF,IAASrB,EAAA,GACTgB,IAAeb,GAAA,GACfsC,IAASpB,EAAO,MAAM1K,CAAM,GAC5BkR,IAAqBxG,EAAO,oBAAoB,IAAI1K,CAAM,GAC1DkB,IAAQvD,GAAaI,IAAA+N,KAAA,gBAAAA,EAAQ,SAAR,gBAAA/N,EAAc,IAAgC,GACnEuM,IAAOwB,KAAA,gBAAAA,EAAQ,MACfqF,IAAY9G,IACd,SACAC,IACE8G,GAAe1G,EAAO,QAAQ,QAAQA,EAAO,QAAQ,YAAYJ,CAAI,IACrE;AAEN,SACE,gBAAA9N;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO;AAAA,QACP,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,aAAa;AAAA,MAAA;AAAA,MAGf,UAAA;AAAA,QAAA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,aAAa,wBAAA;AAAA,YAEtB,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,OAAOyE,EAAM,OAAA;AAAA,oBAErB,UAAAA,EAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAET,gBAAAzE;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,uBAAuB,YAAY,mBAAA;AAAA,oBAElD,kCAAQ,UAASuD;AAAA,kBAAA;AAAA,gBAAA;AAAA,iBAEnBhC,IAAA8N,KAAA,gBAAAA,EAAQ,SAAR,QAAA9N,EAAc,aACb,gBAAAvB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,OAAO,qBAAqB,YAAY,mBAAA;AAAA,oBAEhD,UAAA,OAAOqP,EAAO,KAAK,UAAU;AAAA,kBAAA;AAAA,gBAAA,IAE9B;AAAA,gBACHxB,KAASwB,KAAUuF,EAAcvF,CAAM,IACtC,gBAAAtP,EAAC,OAAA,EAAI,WAAU,2CACZ,UAAA;AAAA,kBAAA8N,IACC,gBAAA7N;AAAA,oBAAC6U;AAAA,oBAAA;AAAA,sBACC,MAAAhH;AAAA,sBACA,QAAQpJ,EAAM;AAAA,sBACd,gBACEmJ,IAAe,MAAMA,EAAaC,CAAI,IAAI;AAAA,sBAE5C,WAAA6G;AAAA,oBAAA;AAAA,kBAAA,IAEA;AAAA,kBACHrF,KAAUuF,EAAcvF,CAAM,IAC7B,gBAAArP;AAAA,oBAAC8U;AAAA,oBAAA;AAAA,sBACC,QAAQC,GAAoB1F,CAAM;AAAA,sBAClC,QAAQ5K,EAAM;AAAA,sBACd,WAAU;AAAA,oBAAA;AAAA,kBAAA,IAEV;AAAA,gBAAA,EAAA,CACN,IACE;AAAA,cAAA,GACN;AAAA,cACA,gBAAAzE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAASsT;AAAA,kBACT,cAAW;AAAA,kBACX,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,aAAa;AAAA,oBACb,OAAO;AAAA,oBACP,iBAAiB;AAAA,kBAAA;AAAA,kBAGnB,UAAA,gBAAAvT;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAM;AAAA,sBACN,QAAO;AAAA,sBACP,SAAQ;AAAA,sBACR,MAAK;AAAA,sBACL,QAAO;AAAA,sBACP,aAAY;AAAA,sBACZ,eAAc;AAAA,sBACd,gBAAe;AAAA,sBAEf,UAAA;AAAA,wBAAA,gBAAAC,EAAC,QAAA,EAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAA,CAAK;AAAA,wBACpC,gBAAAA,EAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,KAAA,CAAK;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACtC;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA;AAAA,QAGF,gBAAAD,EAAC,OAAA,EAAI,WAAU,4CACZ,UAAA;AAAA,UAAA,CAACsP,KACA,gBAAArP,EAAC,OAAA,EAAI,WAAU,WAAU,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,sCAAA,CAEhE;AAAA,UAEDqP,KAAUoF,KACT,gBAAAzU,EAAC,OAAA,EAAI,WAAU,WAAU,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,6BAAA,CAEhE;AAAA,UAEDqP,KAAU,CAACoF,MACTpF,EAAO,cACN,gBAAArP,EAAC0T,IAAA,EAAgB,QAAQrE,EAAO,YAAA,CAAa,IAE7C,gBAAArP,EAAC,OAAA,EAAI,WAAU,WAAU,OAAO,EAAE,OAAO,oBAAA,GAAuB,UAAA,4BAEhE;AAAA,QAAA,EAAA,CAEN;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAMgV,IACJ;AAEF,SAASC,EAAY7O,GAAgB;AACnC,SAAO;AAAA,IACL,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAEZ;AAEA,SAASyO,GAAiB;AAAA,EACxB,MAAAhH;AAAA,EACA,QAAAzH;AAAA,EACA,gBAAA8O;AAAA,EACA,WAAAR;AACF,GAKG;AACD,QAAMS,IAAQtH,EAAK,SAAS,GAAG,GACzBuH,IACJ,gBAAArV;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MAEf,UAAA;AAAA,QAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,2DAAA,CAA2D;AAAA,QACnE,gBAAAA,EAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,QAClC,gBAAAA,EAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,IAAA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIzC,SAAIkV,IAEA,gBAAAnV;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWiV;AAAA,MACX,OAAOC,EAAY7O,CAAM;AAAA,MACzB,SAAS8O;AAAA,MACT,OAAOrH;AAAA,MAEN,UAAA;AAAA,QAAAuH;AAAA,QACD,gBAAApV,EAAC,QAAA,EAAM,UAAAmV,IAAQ,gBAAgB,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAI7CT,IAEA,gBAAA3U;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWiV;AAAA,MACX,OAAOC,EAAY7O,CAAM;AAAA,MACzB,MAAMsO;AAAA,MACN,QAAO;AAAA,MACP,KAAI;AAAA,MACJ,OAAO7G;AAAA,MAEN,UAAA;AAAA,QAAAuH;AAAA,QACD,gBAAApV,EAAC,QAAA,EAAM,UAAAmV,IAAQ,gBAAgB,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAI1C;AACT;AAGA,SAASL,GAAiB;AAAA,EACxB,QAAAO;AAAA,EACA,QAAAjP;AAAA,EACA,WAAAkP;AACF,GAIG;AACD,QAAM,CAACC,GAAQC,CAAS,IAAIvO,EAAS,EAAK,GACpCwO,IAAShQ,EAAY,MAAM;AAC/B,IAAKiQ,GAASL,CAAM,EAAE,KAAK,CAACM,MAAO;AACjC,MAAKA,MACLH,EAAU,EAAI,GACd,OAAO,WAAW,MAAMA,EAAU,EAAK,GAAG,IAAI;AAAA,IAChD,CAAC;AAAA,EACH,GAAG,CAACH,CAAM,CAAC;AAEX,SACE,gBAAAtV;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWuV,IAAY,GAAGN,CAAY,IAAIM,CAAS,KAAKN;AAAA,MACxD,OAAOC,EAAY7O,CAAM;AAAA,MACzB,SAASqP;AAAA,MACT,OAAM;AAAA,MAEL,UAAA;AAAA,QAAAF,IACC,gBAAAvV;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA,YAEf,UAAA,gBAAAA,EAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,UAAA;AAAA,QAAA,IAGpC,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA,YAEf,UAAA;AAAA,cAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,IAAG,KAAI;AAAA,cACvD,gBAAAA,EAAC,QAAA,EAAK,GAAE,0DAAA,CAA0D;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGtE,gBAAAA,EAAC,QAAA,EAAM,UAAAuV,IAAS,WAAW,wBAAA,CAAwB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGzD;AAOA,eAAeG,GAASE,GAAgC;;AACtD,MAAI;AACF,SAAItU,IAAA,UAAU,cAAV,QAAAA,EAAqB;AACvB,mBAAM,UAAU,UAAU,UAAUsU,CAAI,GACjC;AAAA,EAEX,QAAQ;AAAA,EAER;AACA,MAAI;AACF,UAAMC,IAAW,SAAS,cAAc,UAAU;AAClD,IAAAA,EAAS,QAAQD,GACjBC,EAAS,MAAM,WAAW,SAC1BA,EAAS,MAAM,MAAM,KACrBA,EAAS,MAAM,OAAO,KACtBA,EAAS,MAAM,UAAU,KACzB,SAAS,KAAK,YAAYA,CAAQ,GAClCA,EAAS,MAAA,GACTA,EAAS,OAAA;AACT,UAAMF,IAAK,SAAS,YAAY,MAAM;AACtC,oBAAS,KAAK,YAAYE,CAAQ,GAC3BF;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AC/SO,SAASG,KAAe;AAC7B,QAAM,CAACC,GAASC,CAAU,IAAI/O,EAAS,EAAI;AAK3C,SAJAgF,EAAU,MAAM;AACd,UAAMxE,IAAI,WAAW,MAAMuO,EAAW,EAAK,GAAG,IAAI;AAClD,WAAO,MAAM,aAAavO,CAAC;AAAA,EAC7B,GAAG,CAAA,CAAE,GACAsO,IAEH,gBAAA/V;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,eAAe;AAAA,MAAA;AAAA,MAElB,UAAA;AAAA,IAAA;AAAA,EAAA,IAZkB;AAgBvB;ACpBA,SAASiW,GAAO,EAAE,WAAAX,KAAoC;AACpD,SACE,gBAAAtV,EAAC,SAAI,WAAW,aAAasV,CAAS,IAAI,SAAQ,aAAY,eAAW,IACvE,UAAA,gBAAAtV;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,gBAAe;AAAA,IAAA;AAAA,EAAA,GAEnB;AAEJ;AAEA,SAASkW,EAAI;AAAA,EACX,OAAA9V;AAAA,EACA,OAAAqE;AAAA,EACA,WAAA6Q,IAAY;AAAA,EACZ,UAAAxV;AACF,GAKG;AACD,2BACG,OAAA,EAAI,WAAW,UAAUwV,CAAS,IAAI,OAAA7Q,GACrC,UAAA;AAAA,IAAA,gBAAAzE,EAAC,QAAA,EAAK,WAAU,cAAA,CAAc;AAAA,IAC9B,gBAAAA,EAAC,UAAM,UAAAI,EAAA,CAAM;AAAA,IACZN;AAAA,EAAA,GACH;AAEJ;AAGO,SAASqW,KAAY;AAC1B,SACE,gBAAApW,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACkW;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,WAAU;AAAA,QACV,OAAO,EAAE,MAAM,MAAM,KAAK,OAAO,OAAO,OAAO,QAAQ,MAAA;AAAA,MAAM;AAAA,IAAA;AAAA,IAE/D,gBAAAlW;AAAA,MAACkW;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,OAAO,EAAE,MAAM,MAAM,KAAK,OAAO,OAAO,OAAO,QAAQ,MAAA;AAAA,MAAM;AAAA,IAAA;AAAA,IAE/D,gBAAAlW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,MAAM,OAAO,KAAK,MAAA;AAAA,MAAM;AAAA,IAAA;AAAA,IAEnC,gBAAAD,EAAC,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAI,WAAU,kBAAiB,OAAO,EAAE,OAAO,SAAS;AAAA,MACzD,gBAAAA,EAAC,SAAI,WAAU,WAAU,OAAO,EAAE,OAAO,UAAU;AAAA,MACnD,gBAAAA,EAAC,SAAI,WAAU,WAAU,OAAO,EAAE,OAAO,SAAS;AAAA,MAClD,gBAAAA,EAAC,SAAI,WAAU,WAAU,OAAO,EAAE,OAAO,SAAS;AAAA,MAClD,gBAAAA,EAAC,SAAI,WAAU,WAAU,OAAO,EAAE,OAAO,QAAM,CAAG;AAAA,IAAA,GACpD;AAAA,IACA,gBAAAA,EAACiW,IAAA,EAAO,WAAU,kBAAA,CAAkB;AAAA,EAAA,GACtC;AAEJ;AAEA,SAAS1O,KAAU;AACjB,SACE,gBAAAvH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAW;AAAA,MAEX,UAAA,gBAAAA,EAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAGxC;AAGO,SAASoW,KAAY;AAC1B,SACE,gBAAArW,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACkW;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO,EAAE,MAAM,OAAO,KAAK,MAAM,OAAO,OAAO,QAAQ,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,MAE/D,gBAAAlW;AAAA,QAACkW;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO,EAAE,MAAM,OAAO,KAAK,OAAO,OAAO,OAAO,QAAQ,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,MAEhE,gBAAAlW;AAAA,QAACkW;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO,EAAE,MAAM,OAAO,KAAK,OAAO,OAAO,OAAO,QAAQ,MAAA;AAAA,UAExD,UAAA,gBAAAnW,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA;AAAA,YAAA;AAAA,8BAErCwH,IAAA,CAAA,CAAQ;AAAA,UAAA,EAAA,CACX;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IACA,gBAAAxH,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACkW;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO,EAAE,MAAM,MAAM,KAAK,OAAO,OAAO,OAAO,QAAQ,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,MAE/D,gBAAAlW;AAAA,QAACkW;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO,EAAE,MAAM,OAAO,KAAK,MAAM,OAAO,OAAO,QAAQ,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,MAE/D,gBAAAlW;AAAA,QAACkW;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO,EAAE,MAAM,OAAO,KAAK,OAAO,OAAO,OAAO,QAAQ,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,MAEhE,gBAAAlW;AAAA,QAACkW;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO,EAAE,MAAM,OAAO,KAAK,OAAO,OAAO,OAAO,QAAQ,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,IAChE,GACF;AAAA,IACA,gBAAAlW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,MAAM,OAAO,KAAK,MAAA;AAAA,MAAM;AAAA,IAAA;AAAA,IAEnC,gBAAAA,EAACiW,IAAA,EAAO,WAAU,kBAAA,CAAkB;AAAA,EAAA,GACtC;AAEJ;ACjHO,SAASI,GAAiB;AAAA,EAC/B,MAAAtP;AAAA,EACA,SAAAuM;AAAA,EACA,kBAAAgD;AAAA,EACA,yBAAAC;AACF,GAAU;;AACR,QAAM,CAACC,GAAMC,CAAO,IAAIxP,EAAS,CAAC;AAGlC,EAAAgF,EAAU,MAAM;AACd,IAAIlF,OAAc,CAAC;AAAA,EACrB,GAAG,CAACA,CAAI,CAAC;AAIT,QAAM2P,KAASpV,KAAAiV,KAA2B,IAAI,MAAM,SAAS,EAAE,CAAC,MAAjD,gBAAAjV,EAAoD,QAE7DqV,IAAgB;AAAA,IACpB;AAAA,MACE,SAAS;AAAA,MACT,OAAOL;AAAA,MACP,OACEI,KACA;AAAA,MACF,OAAO,gBAAA1W,EAAC4W,IAAA,EAAU,MAAMN,EAAA,CAAkB;AAAA,IAAA;AAAA,IAE5C;AAAA,MACE,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OACE;AAAA,MACF,yBAAQH,IAAA,CAAA,CAAU;AAAA,IAAA;AAAA,IAEpB;AAAA,MACE,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OACE;AAAA,MACF,yBAAQC,IAAA,CAAA,CAAU;AAAA,IAAA;AAAA,EACpB,GAGIS,IAAOF,EAAM,SAAS,GACtBpJ,IAAO9H,EAAY,MAAM;AAC7B,IAAAgR,EAAQ,CAAC5V,MACHA,KAAK8V,EAAM,SAAS,KACtBrD,EAAA,GACOzS,KAEFA,IAAI,CACZ;AAAA,EACH,GAAG,CAAC8V,EAAM,QAAQrD,CAAO,CAAC,GACpBwD,IAAOrR,EAAY,MAAMgR,EAAQ,CAAC5V,MAAM,KAAK,IAAI,GAAGA,IAAI,CAAC,CAAC,GAAG,CAAA,CAAE;AAErE,EAAAoL,EAAU,MAAM;AACd,QAAI,CAAClF,EAAM;AACX,UAAMwM,IAAQ,CAAC5O,MAAqB;AAClC,MAAIA,EAAE,QAAQ,WAAU2O,EAAA,IACf3O,EAAE,QAAQ,eAAc4I,EAAA,IACxB5I,EAAE,QAAQ,eAAamS,EAAA;AAAA,IAClC;AACA,kBAAO,iBAAiB,WAAWvD,CAAK,GACjC,MAAM,OAAO,oBAAoB,WAAWA,CAAK;AAAA,EAC1D,GAAG,CAACxM,GAAMuM,GAAS/F,GAAMuJ,CAAI,CAAC;AAE9B,QAAMC,IAAUJ,EAAMH,CAAI,KAAKG,EAAM,CAAC;AACtC,SAAI,CAAC5P,KAAQ,CAACgQ,IAAgB,OAG5B,gBAAA/W;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,iBAAiB,uBAAA;AAAA,MAC1B,SAASsT;AAAA,MACT,MAAK;AAAA,MACL,cAAW;AAAA,MACX,mBAAgB;AAAA,MAEhB,UAAA,gBAAAvT;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,aAAa;AAAA,YACb,iBAAiB;AAAA,UAAA;AAAA,UAEnB,SAAS,CAAC4E,MAAMA,EAAE,gBAAA;AAAA,UAGlB,UAAA;AAAA,YAAA,gBAAA5E;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,aAAa,wBAAA;AAAA,gBAEtB,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,oBAAA,gBAAAC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,OAAO;AAAA,0BACP,YAAY;AAAA,wBAAA;AAAA,wBAGb,UAAA+W,EAAQ;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEX,gBAAA/W;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,IAAG;AAAA,wBACH,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,OAAO;AAAA,0BACP,YAAY;AAAA,wBAAA;AAAA,wBAGb,UAAA+W,EAAQ;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACX,GACF;AAAA,kBACA,gBAAA/W;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAASsT;AAAA,sBACT,cAAW;AAAA,sBACX,WAAU;AAAA,sBACV,OAAO;AAAA,wBACL,aAAa;AAAA,wBACb,OAAO;AAAA,wBACP,iBAAiB;AAAA,sBAAA;AAAA,sBAGnB,UAAA,gBAAAvT;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAM;AAAA,0BACN,QAAO;AAAA,0BACP,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,QAAO;AAAA,0BACP,aAAY;AAAA,0BACZ,eAAc;AAAA,0BACd,gBAAe;AAAA,0BAEf,UAAA;AAAA,4BAAA,gBAAAC,EAAC,QAAA,EAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAA,CAAK;AAAA,4BACpC,gBAAAA,EAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,KAAA,CAAK;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACtC;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAIF,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,aAAa;AAAA,kBACb,iBAAiB;AAAA,gBAAA;AAAA,gBAGlB,UAAA+W,EAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,YAIX,gBAAA/W;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,OAAO;AAAA,kBACP,YAAY;AAAA,gBAAA;AAAA,gBAGb,UAAA+W,EAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,YAIX,gBAAAhX;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,aAAa,wBAAA;AAAA,gBAEtB,UAAA;AAAA,kBAAA,gBAAAC,EAAC,SAAI,WAAU,2BACZ,YAAM,IAAI,CAACa,GAAGD,MACb,gBAAAZ;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBAEC,WAAU;AAAA,sBACV,OAAO;AAAA,wBACL,OAAOY,MAAM4V,IAAO,SAAS;AAAA,wBAC7B,iBACE5V,MAAM4V,IAAO,uBAAuB;AAAA,sBAAA;AAAA,oBACxC;AAAA,oBANK3V,EAAE;AAAA,kBAAA,CAQV,GACH;AAAA,kBAEA,gBAAAd,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,oBAAAyW,IAAO,KACN,gBAAAxW;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,SAAS8W;AAAA,wBACT,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,aAAa;AAAA,0BACb,OAAO;AAAA,0BACP,YAAY;AAAA,0BACZ,iBAAiB;AAAA,wBAAA;AAAA,wBAEpB,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAIH,gBAAA9W;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,SAASuN;AAAA,wBACT,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,aAAa;AAAA,0BACb,OAAO;AAAA,0BACP,YAAY;AAAA,0BACZ,iBAAiB;AAAA,wBAAA;AAAA,wBAGlB,UAAAiJ,MAASK,IAAO,WAAW;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC9B,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AAGA,SAASD,GAAU,EAAE,MAAAI,KAA0B;AAC7C,SACE,gBAAAjX,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,sBAAsB,YAAY,mBAAA;AAAA,QACnD,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGD,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,uBAAuB,YAAY,sBAAA;AAAA,QAElD,UAAAgX;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAhX;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,qBAAqB,YAAY,mBAAA;AAAA,QAClD,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAED,GACF;AAEJ;ACnPO,SAASiX,KAA4B;AAC1C,QAAM,CAAClQ,GAAMC,CAAO,IAAIC,EAAS,EAAI,GAC/BiQ,IAAazR,EAAY,MAAMuB,EAAQ,EAAI,GAAG,CAAA,CAAE,GAChDmQ,IAAc1R,EAAY,MAAMuB,EAAQ,EAAK,GAAG,CAAA,CAAE;AACxD,SAAO,EAAE,MAAAD,GAAM,YAAAmQ,GAAY,aAAAC,EAAA;AAC7B;ACFA,IAAIC,KAAqC;AAElC,SAASC,GAAiB,EAAE,WAAAxH,GAAW,iBAAAyH,IAAkB,MAAe;AAC7E,QAAMrJ,IAASrB,EAAA,GACTkB,IAAcd,GAAA,GACd,CAACuK,GAAgBC,CAAiB,IAAIvQ,EAAwB,IAAI,GAClEwQ,IAAaR,GAAA;AAEnB,EAAAhL,EAAU,MAAM;AACd,IAAI4D,MACJ,OAAO,SAAS,OAAO,aAAa5B,EAAO,QAAQ,UAAU;AAAA,EAC/D,GAAG,CAAC4B,GAAW5B,EAAO,QAAQ,UAAU,CAAC,GAMzChC,EAAU,MAAM;;AACd,QAAI,CAAC4D,KAAaA,MAAcuH,GAAqB;AACrD,IAAAA,KAAsBvH;AACtB,UAAM6H,KAAQpW,IAAA2M,EAAO,QAAQ,SAAS;AAAA,MACpC,CAACzJ,MAAMA,EAAE,SAASqL;AAAA,IAAA,MADN,gBAAAvO,EAEX;AACH,IAAAwM,EAAY,kBAAkB,OAAO4J,KAAU,WAAW,EAAE,OAAAA,EAAA,IAAU,EAAE;AAAA,EAC1E,GAAG,CAAC7H,GAAW5B,EAAO,QAAQ,UAAUH,CAAW,CAAC;AAIpD,QAAM6J,IAAmBlS;AAAA,IACvB,CAAClC,MAA0B;AACzB,MAAAiU,EAAkBjU,CAAM,GACpBA,OAAoB,gBAAgB;AAAA,IAC1C;AAAA,IACA,CAACuK,CAAW;AAAA,EAAA,GAGR8J,IAAgBnS,EAAY,CAACgI,MAAiB;AAClD,IAAA+J,EAAkB,IAAI,GACtB,OAAO,SAAS,OAAO,aAAa/J,CAAI;AAAA,EAC1C,GAAG,CAAA,CAAE;AAEL,SACE,gBAAA1N;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,iBAAiB,iBAAA;AAAA,MAEzB,UAAA;AAAA,QAAA8P,IACC,gBAAA7P;AAAA,UAACuP;AAAA,UAAA;AAAA,YAEC,WAAAM;AAAA,YACA,cAAc8H;AAAA,YACd,WAAWC;AAAA,UAAA;AAAA,UAHN/H;AAAA,QAAA,IAMP,gBAAA7P,EAAC6X,IAAA,EAAkB,SAAQ,uBAAA,CAAuB;AAAA,QAGnDP,KACC,gBAAAtX;AAAA,UAACmS;AAAA,UAAA;AAAA,YACC,SAASlE,EAAO;AAAA,YAChB,kBAAkB4B;AAAA,YAClB,UAAU+H;AAAA,YACV,UAAU,MAAMA,EAAc3J,EAAO,QAAQ,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,0BAG1D6H,IAAA,EAAa;AAAA,QACbyB,KACC,gBAAAvX;AAAA,UAACwU;AAAA,UAAA;AAAA,YAEC,QAAQ+C;AAAA,YACR,SAAS,MAAMC,EAAkB,IAAI;AAAA,UAAA;AAAA,UAFhCD;AAAA,QAAA;AAAA,QAKT,gBAAAvX,EAAC8X,IAAA,EAAW,SAASL,EAAW,WAAA,CAAY;AAAA,QAC5C,gBAAAzX;AAAA,UAACqW;AAAA,UAAA;AAAA,YACC,MAAMoB,EAAW;AAAA,YACjB,SAASA,EAAW;AAAA,YACpB,kBAAkBxJ,EAAO,QAAQ;AAAA,YACjC,yBAAyBA,EAAO,QAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MAC1C;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAS6J,GAAW,EAAE,SAAAC,KAAoC;AACxD,SACE,gBAAA/X;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAA+X;AAAA,MACA,cAAW;AAAA,MACX,OAAM;AAAA,MACN,WAAU;AAAA,MACV,OAAO;AAAA;AAAA;AAAA,QAGL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA,gBAAAhY;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,UAEf,UAAA;AAAA,YAAA,gBAAAC,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK;AAAA,YAC/B,gBAAAA,EAAC,QAAA,EAAK,GAAE,uCAAA,CAAuC;AAAA,YAC/C,gBAAAA,EAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,SAAQ,IAAG,KAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAC3C;AAAA,EAAA;AAGN;AAEA,SAAS6X,GAAkB,EAAE,SAAAnL,KAAgC;AAC3D,SACE,gBAAA1M;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,sCAAsC,UAAA0M,EAAA,CAAQ;AAAA,IAAA;AAAA,EAAA;AAGpE;AChJA,SAASsL,KAAe;AACtB,QAAM,CAACC,GAAMC,CAAO,IAAIjR,EAAS,MAAM,OAAO,SAAS,IAAI;AAC3D,SAAAgF,EAAU,MAAM;AACd,UAAMkM,IAAW,MAAMD,EAAQ,OAAO,SAAS,IAAI;AACnD,kBAAO,iBAAiB,cAAcC,CAAQ,GACvC,MAAM,OAAO,oBAAoB,cAAcA,CAAQ;AAAA,EAChE,GAAG,CAAA,CAAE,GACEF;AACT;AAEA,SAASG,GAAWH,GAAkF;AACpG,MAAIA,MAAS,gBAAiB,QAAO,EAAE,MAAM,eAAe,WAAW,KAAA;AACvE,QAAMI,IAAQJ,EAAK,MAAM,wBAAwB;AACjD,SAAII,IAAc,EAAE,MAAM,gBAAgB,WAAW,mBAAmBA,EAAM,CAAC,CAAE,EAAA,IAC1E,EAAE,MAAM,gBAAgB,WAAW,KAAA;AAC5C;AAUO,SAASC,GAAI,EAAE,YAAApL,GAAY,WAAAC,GAAW,iBAAAmK,IAAkB,MAAkB;AAC/E,QAAMW,IAAOD,GAAA,GACPO,IAAQH,GAAWH,CAAI;AAC7B,SAAIM,EAAM,SAAS,kCAAuBlY,IAAA,EAAW,IAEnD,gBAAAL,EAACiN,IAAA,EAA2B,YAAAC,GAAwB,WAAAC,GAClD,UAAA,gBAAAnN;AAAA,IAACqX;AAAA,IAAA;AAAA,MACC,WAAWkB,EAAM;AAAA,MACjB,iBAAAjB;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;"}