dreamcontext 0.5.0
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.
- package/LICENSE +21 -0
- package/README.md +523 -0
- package/agents/dreamcontext-explore.md +137 -0
- package/agents/dreamcontext-initializer.md +169 -0
- package/agents/sleep-product.md +268 -0
- package/agents/sleep-state.md +270 -0
- package/agents/sleep-tasks.md +134 -0
- package/dist/agents/dreamcontext-explore.md +137 -0
- package/dist/agents/dreamcontext-initializer.md +169 -0
- package/dist/agents/sleep-product.md +268 -0
- package/dist/agents/sleep-state.md +270 -0
- package/dist/agents/sleep-tasks.md +134 -0
- package/dist/dashboard/assets/BrainCanvas3D-BLJ4_SqE.js +5126 -0
- package/dist/dashboard/assets/_baseUniq-DpaDAx_H.js +1 -0
- package/dist/dashboard/assets/arc-JvK3Ik1p.js +1 -0
- package/dist/dashboard/assets/architectureDiagram-Q4EWVU46-CCvw4XFg.js +36 -0
- package/dist/dashboard/assets/blockDiagram-DXYQGD6D-DMobz1n7.js +132 -0
- package/dist/dashboard/assets/c4Diagram-AHTNJAMY-FwcHT5er.js +10 -0
- package/dist/dashboard/assets/channel-D6954IHZ.js +1 -0
- package/dist/dashboard/assets/chunk-4BX2VUAB-B5kYwmBa.js +1 -0
- package/dist/dashboard/assets/chunk-4TB4RGXK-0ot1eS0J.js +206 -0
- package/dist/dashboard/assets/chunk-55IACEB6-24ngcLgH.js +1 -0
- package/dist/dashboard/assets/chunk-EDXVE4YY-DATt1OUl.js +1 -0
- package/dist/dashboard/assets/chunk-FMBD7UC4-BprbGSJw.js +15 -0
- package/dist/dashboard/assets/chunk-OYMX7WX6-CJJhpKWP.js +231 -0
- package/dist/dashboard/assets/chunk-QZHKN3VN-Cisp65Vq.js +1 -0
- package/dist/dashboard/assets/chunk-YZCP3GAM-DtMk33tU.js +1 -0
- package/dist/dashboard/assets/classDiagram-6PBFFD2Q-Bk4KDqBj.js +1 -0
- package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-Bk4KDqBj.js +1 -0
- package/dist/dashboard/assets/clone-C9Yhti5q.js +1 -0
- package/dist/dashboard/assets/cose-bilkent-S5V4N54A-BxYomDLe.js +1 -0
- package/dist/dashboard/assets/cytoscape.esm-D_LviqZs.js +331 -0
- package/dist/dashboard/assets/dagre-KV5264BT-CsX1ZayG.js +4 -0
- package/dist/dashboard/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/dashboard/assets/diagram-5BDNPKRD-B2G4mPPw.js +10 -0
- package/dist/dashboard/assets/diagram-G4DWMVQ6-C8nxN9ZB.js +24 -0
- package/dist/dashboard/assets/diagram-MMDJMWI5-DaYymOrR.js +43 -0
- package/dist/dashboard/assets/diagram-TYMM5635-BpiYFv-I.js +24 -0
- package/dist/dashboard/assets/erDiagram-SMLLAGMA-C6pE7F61.js +85 -0
- package/dist/dashboard/assets/flowDiagram-DWJPFMVM-jdNEPVFq.js +162 -0
- package/dist/dashboard/assets/ganttDiagram-T4ZO3ILL-C8GoRj1C.js +292 -0
- package/dist/dashboard/assets/gitGraphDiagram-UUTBAWPF-SiRn7RJ8.js +106 -0
- package/dist/dashboard/assets/graph-9wbTW7ld.js +1 -0
- package/dist/dashboard/assets/index-BHp63EMw.js +475 -0
- package/dist/dashboard/assets/index-CdnDt_7U.css +1 -0
- package/dist/dashboard/assets/infoDiagram-42DDH7IO-DcDC8M1a.js +2 -0
- package/dist/dashboard/assets/ishikawaDiagram-UXIWVN3A-UjyrPeaS.js +70 -0
- package/dist/dashboard/assets/journeyDiagram-VCZTEJTY-CXJPYMxN.js +139 -0
- package/dist/dashboard/assets/kanban-definition-6JOO6SKY-Cm1n9eat.js +89 -0
- package/dist/dashboard/assets/katex-DkKDou_j.js +257 -0
- package/dist/dashboard/assets/layout-w8zmQGXp.js +1 -0
- package/dist/dashboard/assets/linear-CMNvIisH.js +1 -0
- package/dist/dashboard/assets/min-BqXwiqEr.js +1 -0
- package/dist/dashboard/assets/mindmap-definition-QFDTVHPH-tksxnjhx.js +96 -0
- package/dist/dashboard/assets/pieDiagram-DEJITSTG-lIVvnPyq.js +30 -0
- package/dist/dashboard/assets/quadrantDiagram-34T5L4WZ-DSMB57t5.js +7 -0
- package/dist/dashboard/assets/requirementDiagram-MS252O5E-NG99tgmc.js +84 -0
- package/dist/dashboard/assets/sankeyDiagram-XADWPNL6-C6EkbQKo.js +10 -0
- package/dist/dashboard/assets/sequenceDiagram-FGHM5R23-ASU7Zp6_.js +157 -0
- package/dist/dashboard/assets/stateDiagram-FHFEXIEX-DHklUzce.js +1 -0
- package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-BZXFb2Fh.js +1 -0
- package/dist/dashboard/assets/timeline-definition-GMOUNBTQ-B37xNhjS.js +120 -0
- package/dist/dashboard/assets/vennDiagram-DHZGUBPP-D28OvWbm.js +34 -0
- package/dist/dashboard/assets/wardley-RL74JXVD-BQdaLyVb.js +162 -0
- package/dist/dashboard/assets/wardleyDiagram-NUSXRM2D-D0vChrnT.js +20 -0
- package/dist/dashboard/assets/xychartDiagram-5P7HB3ND-BzSx7EpJ.js +7 -0
- package/dist/dashboard/favicon.svg +14 -0
- package/dist/dashboard/index.html +18 -0
- package/dist/hooks/marketing-binary-guard.sh +18 -0
- package/dist/index.js +15881 -0
- package/dist/skill-packs/agents/biv-customer-analyst.md +140 -0
- package/dist/skill-packs/agents/biv-decision-gate.md +147 -0
- package/dist/skill-packs/agents/biv-financial-analyst.md +128 -0
- package/dist/skill-packs/agents/biv-market-analyst.md +103 -0
- package/dist/skill-packs/agents/biv-researcher.md +140 -0
- package/dist/skill-packs/agents/biv-strategist.md +164 -0
- package/dist/skill-packs/agents/council-persona.md +142 -0
- package/dist/skill-packs/agents/council-synthesizer.md +208 -0
- package/dist/skill-packs/agents/discover-brand.md +216 -0
- package/dist/skill-packs/agents/goal-implementer.md +70 -0
- package/dist/skill-packs/agents/goal-plan-reviewer.md +68 -0
- package/dist/skill-packs/agents/goal-planner.md +75 -0
- package/dist/skill-packs/agents/goal-validator.md +68 -0
- package/dist/skill-packs/agents/marketing-creative.md +85 -0
- package/dist/skill-packs/agents/marketing-monitor.md +143 -0
- package/dist/skill-packs/agents/marketing-strategy.md +139 -0
- package/dist/skill-packs/agents/review-cloud-functions.md +158 -0
- package/dist/skill-packs/agents/review-edge-cases.md +147 -0
- package/dist/skill-packs/agents/review-frontend.md +134 -0
- package/dist/skill-packs/agents/review-router.md +165 -0
- package/dist/skill-packs/agents/review-security.md +139 -0
- package/dist/skill-packs/agents/reviewer.md +152 -0
- package/dist/skill-packs/brand-voice/SKILL.md +115 -0
- package/dist/skill-packs/brand-voice/discover-brand.md +126 -0
- package/dist/skill-packs/brand-voice/guideline-generation.md +154 -0
- package/dist/skill-packs/brand-voice/references/before-after-examples.md +194 -0
- package/dist/skill-packs/brand-voice/references/confidence-scoring.md +128 -0
- package/dist/skill-packs/brand-voice/references/guideline-template.md +241 -0
- package/dist/skill-packs/brand-voice/references/search-strategies.md +271 -0
- package/dist/skill-packs/brand-voice/references/source-ranking.md +248 -0
- package/dist/skill-packs/brand-voice/references/voice-constant-tone-flexes.md +115 -0
- package/dist/skill-packs/business-idea-discovery/SKILL.md +452 -0
- package/dist/skill-packs/business-idea-validation/SKILL.md +209 -0
- package/dist/skill-packs/business-idea-validation/stage-definitions.md +658 -0
- package/dist/skill-packs/catalog.json +657 -0
- package/dist/skill-packs/council/SKILL.md +134 -0
- package/dist/skill-packs/council/debate-protocol.md +90 -0
- package/dist/skill-packs/design/SKILL.md +301 -0
- package/dist/skill-packs/design/design-mobile.md +207 -0
- package/dist/skill-packs/design/design-web.md +148 -0
- package/dist/skill-packs/design/frontend-principles.md +157 -0
- package/dist/skill-packs/design/onboarding-design.md +230 -0
- package/dist/skill-packs/engineering/SKILL.md +155 -0
- package/dist/skill-packs/engineering/backend-principles.md +233 -0
- package/dist/skill-packs/engineering/firebase-cloud-functions/SKILL.md +44 -0
- package/dist/skill-packs/engineering/firebase-cloud-functions/references/gen_comparison.md +45 -0
- package/dist/skill-packs/engineering/firebase-cloud-functions/references/idempotency.md +145 -0
- package/dist/skill-packs/engineering/firebase-cloud-functions/references/local_testing.md +218 -0
- package/dist/skill-packs/engineering/firebase-cloud-functions/references/scaling.md +128 -0
- package/dist/skill-packs/engineering/firebase-cloud-functions/references/secrets.md +70 -0
- package/dist/skill-packs/engineering/firebase-cloud-functions/references/triggers_and_deployment.md +139 -0
- package/dist/skill-packs/engineering/firebase-firestore/SKILL.md +50 -0
- package/dist/skill-packs/engineering/firebase-firestore/references/indexes.md +96 -0
- package/dist/skill-packs/engineering/firebase-firestore/references/provisioning.md +101 -0
- package/dist/skill-packs/engineering/firebase-firestore/references/query_mechanics.md +182 -0
- package/dist/skill-packs/engineering/firebase-firestore/references/security_rules.md +299 -0
- package/dist/skill-packs/engineering/firebase-firestore/references/web_sdk_usage.md +265 -0
- package/dist/skill-packs/engineering/web-app-frontend.md +187 -0
- package/dist/skill-packs/goal-skill/SKILL.md +203 -0
- package/dist/skill-packs/growth/SKILL.md +480 -0
- package/dist/skill-packs/growth/lean-analytics-experiments.md +341 -0
- package/dist/skill-packs/growth/lean-analytics-metrics.md +295 -0
- package/dist/skill-packs/growth/performance-marketing.md +337 -0
- package/dist/skill-packs/meta-marketing/SKILL.md +423 -0
- package/dist/skill-packs/meta-marketing/account-ops.md +190 -0
- package/dist/skill-packs/meta-marketing/api-reference.md +535 -0
- package/dist/skill-packs/meta-marketing/copy-formulas.md +123 -0
- package/dist/skill-packs/meta-marketing/council-personas/creative-director.md +76 -0
- package/dist/skill-packs/meta-marketing/council-personas/performance-monitor.md +71 -0
- package/dist/skill-packs/meta-marketing/council-personas/risk-officer.md +79 -0
- package/dist/skill-packs/meta-marketing/council-personas/strategy-optimizer.md +76 -0
- package/dist/skill-packs/meta-marketing/creative-frameworks.md +176 -0
- package/dist/skill-packs/meta-marketing/mistakes.md +154 -0
- package/dist/skill-packs/meta-marketing/platform-state.md +63 -0
- package/dist/skill-packs/multi-review/REVIEWER_SHARED.md +143 -0
- package/dist/skill-packs/multi-review/SKILL.md +182 -0
- package/dist/skill-packs/system-prompts/SKILL.md +472 -0
- package/dist/templates/AGENTS.md +84 -0
- package/dist/templates/CLAUDE.md +84 -0
- package/dist/templates/council-debate.md +20 -0
- package/dist/templates/council-final-report.md +34 -0
- package/dist/templates/council-persona.md +10 -0
- package/dist/templates/council-report.md +6 -0
- package/dist/templates/feature.md +38 -0
- package/dist/templates/init/0.soul.md +33 -0
- package/dist/templates/init/1.user.md +29 -0
- package/dist/templates/init/2.memory.md +21 -0
- package/dist/templates/init/3.style_guide_and_branding.md +18 -0
- package/dist/templates/init/4.tech_stack.md +22 -0
- package/dist/templates/init/CHANGELOG.json +1 -0
- package/dist/templates/init/RELEASES.json +1 -0
- package/dist/templates/init/data-structures/default.md +35 -0
- package/dist/templates/knowledge.md +10 -0
- package/dist/templates/obsidian/app.json +15 -0
- package/dist/templates/obsidian/appearance.json +4 -0
- package/dist/templates/obsidian/graph.json +58 -0
- package/dist/templates/task.md +70 -0
- package/install.sh +73 -0
- package/package.json +58 -0
- package/skill/SKILL.md +529 -0
- package/skill-packs/agents/biv-customer-analyst.md +140 -0
- package/skill-packs/agents/biv-decision-gate.md +147 -0
- package/skill-packs/agents/biv-financial-analyst.md +128 -0
- package/skill-packs/agents/biv-market-analyst.md +103 -0
- package/skill-packs/agents/biv-researcher.md +140 -0
- package/skill-packs/agents/biv-strategist.md +164 -0
- package/skill-packs/agents/council-persona.md +142 -0
- package/skill-packs/agents/council-synthesizer.md +208 -0
- package/skill-packs/agents/discover-brand.md +216 -0
- package/skill-packs/agents/goal-implementer.md +70 -0
- package/skill-packs/agents/goal-plan-reviewer.md +68 -0
- package/skill-packs/agents/goal-planner.md +75 -0
- package/skill-packs/agents/goal-validator.md +68 -0
- package/skill-packs/agents/marketing-creative.md +85 -0
- package/skill-packs/agents/marketing-monitor.md +143 -0
- package/skill-packs/agents/marketing-strategy.md +139 -0
- package/skill-packs/agents/review-cloud-functions.md +158 -0
- package/skill-packs/agents/review-edge-cases.md +147 -0
- package/skill-packs/agents/review-frontend.md +134 -0
- package/skill-packs/agents/review-router.md +165 -0
- package/skill-packs/agents/review-security.md +139 -0
- package/skill-packs/agents/reviewer.md +152 -0
- package/skill-packs/brand-voice/SKILL.md +115 -0
- package/skill-packs/brand-voice/discover-brand.md +126 -0
- package/skill-packs/brand-voice/guideline-generation.md +154 -0
- package/skill-packs/brand-voice/references/before-after-examples.md +194 -0
- package/skill-packs/brand-voice/references/confidence-scoring.md +128 -0
- package/skill-packs/brand-voice/references/guideline-template.md +241 -0
- package/skill-packs/brand-voice/references/search-strategies.md +271 -0
- package/skill-packs/brand-voice/references/source-ranking.md +248 -0
- package/skill-packs/brand-voice/references/voice-constant-tone-flexes.md +115 -0
- package/skill-packs/business-idea-discovery/SKILL.md +452 -0
- package/skill-packs/business-idea-validation/SKILL.md +209 -0
- package/skill-packs/business-idea-validation/stage-definitions.md +658 -0
- package/skill-packs/catalog.json +657 -0
- package/skill-packs/council/SKILL.md +134 -0
- package/skill-packs/council/debate-protocol.md +90 -0
- package/skill-packs/design/SKILL.md +301 -0
- package/skill-packs/design/design-mobile.md +207 -0
- package/skill-packs/design/design-web.md +148 -0
- package/skill-packs/design/frontend-principles.md +157 -0
- package/skill-packs/design/onboarding-design.md +230 -0
- package/skill-packs/engineering/SKILL.md +155 -0
- package/skill-packs/engineering/backend-principles.md +233 -0
- package/skill-packs/engineering/firebase-cloud-functions/SKILL.md +44 -0
- package/skill-packs/engineering/firebase-cloud-functions/references/gen_comparison.md +45 -0
- package/skill-packs/engineering/firebase-cloud-functions/references/idempotency.md +145 -0
- package/skill-packs/engineering/firebase-cloud-functions/references/local_testing.md +218 -0
- package/skill-packs/engineering/firebase-cloud-functions/references/scaling.md +128 -0
- package/skill-packs/engineering/firebase-cloud-functions/references/secrets.md +70 -0
- package/skill-packs/engineering/firebase-cloud-functions/references/triggers_and_deployment.md +139 -0
- package/skill-packs/engineering/firebase-firestore/SKILL.md +50 -0
- package/skill-packs/engineering/firebase-firestore/references/indexes.md +96 -0
- package/skill-packs/engineering/firebase-firestore/references/provisioning.md +101 -0
- package/skill-packs/engineering/firebase-firestore/references/query_mechanics.md +182 -0
- package/skill-packs/engineering/firebase-firestore/references/security_rules.md +299 -0
- package/skill-packs/engineering/firebase-firestore/references/web_sdk_usage.md +265 -0
- package/skill-packs/engineering/web-app-frontend.md +187 -0
- package/skill-packs/goal-skill/SKILL.md +203 -0
- package/skill-packs/growth/SKILL.md +480 -0
- package/skill-packs/growth/lean-analytics-experiments.md +341 -0
- package/skill-packs/growth/lean-analytics-metrics.md +295 -0
- package/skill-packs/growth/performance-marketing.md +337 -0
- package/skill-packs/meta-marketing/SKILL.md +423 -0
- package/skill-packs/meta-marketing/account-ops.md +190 -0
- package/skill-packs/meta-marketing/api-reference.md +535 -0
- package/skill-packs/meta-marketing/copy-formulas.md +123 -0
- package/skill-packs/meta-marketing/council-personas/creative-director.md +76 -0
- package/skill-packs/meta-marketing/council-personas/performance-monitor.md +71 -0
- package/skill-packs/meta-marketing/council-personas/risk-officer.md +79 -0
- package/skill-packs/meta-marketing/council-personas/strategy-optimizer.md +76 -0
- package/skill-packs/meta-marketing/creative-frameworks.md +176 -0
- package/skill-packs/meta-marketing/mistakes.md +154 -0
- package/skill-packs/meta-marketing/platform-state.md +63 -0
- package/skill-packs/multi-review/REVIEWER_SHARED.md +143 -0
- package/skill-packs/multi-review/SKILL.md +182 -0
- package/skill-packs/system-prompts/SKILL.md +472 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.header{display:flex;align-items:center;justify-content:space-between;height:var(--header-height);padding:0 var(--space-4);border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary);position:sticky;top:0;z-index:10}.header-left{display:flex;align-items:center;gap:var(--space-3)}.agent-avatar{position:relative;width:28px;height:28px;display:flex;align-items:center;justify-content:center;transition:opacity var(--transition-normal)}.agent-avatar--must_sleep{animation:pulse-slow 2s ease-in-out infinite}.zzz{position:absolute;top:-4px;right:-8px;font-size:9px;font-weight:var(--font-weight-bold);color:var(--color-text-tertiary);animation:float 2s ease-in-out infinite}@keyframes pulse-slow{0%,to{opacity:.4}50%{opacity:.7}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.header-brand{display:flex;align-items:center;gap:var(--space-2)}.brand-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-tight);color:var(--color-text)}.sleep-badge{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);padding:2px var(--space-2);border-radius:var(--radius-sm);white-space:nowrap;letter-spacing:var(--letter-spacing-caption);border:1px solid transparent}.sleep-badge--alert{background:var(--color-success-subtle);color:var(--color-success);border-color:var(--color-success)}.sleep-badge--drowsy{background:var(--color-warning-subtle);color:var(--color-warning);border-color:var(--color-warning)}.sleep-badge--sleepy{background:var(--color-accent-soft);color:var(--color-accent)}[data-theme=dark] .sleep-badge--sleepy{color:var(--color-accent)}.sleep-badge--must_sleep{background:var(--color-error-subtle);color:var(--color-error);border-color:var(--color-error)}.header-right{display:flex;align-items:center;gap:var(--space-1)}.zoom-controls{display:flex;align-items:center;gap:2px;margin-right:var(--space-2);padding:2px;border-radius:var(--radius-md);background:var(--color-bg-tertiary);border:1px solid var(--color-border)}.zoom-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.zoom-btn:hover:not(:disabled){background:var(--color-bg);color:var(--color-text)}.zoom-btn:disabled{opacity:.3;cursor:default}.zoom-label{font-size:var(--font-size-xs);color:var(--color-text-secondary);min-width:32px;text-align:center;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums}.theme-toggle{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-md);color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.theme-toggle:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.sidebar{width:var(--sidebar-width);height:calc(100vh - var(--header-height));border-right:1px solid var(--color-border);background:var(--color-bg-secondary);padding:var(--space-2);overflow-y:auto;flex-shrink:0}.sidebar-nav{display:flex;flex-direction:column;gap:2px}.sidebar-item{position:relative;display:flex;align-items:center;gap:var(--space-2);width:100%;padding:6px var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:1.2;color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer;text-align:left;transition:background var(--transition-fast),color var(--transition-fast)}.sidebar-item:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.sidebar-item--active{background:var(--color-bg-tertiary);color:var(--color-text);font-weight:var(--font-weight-semibold)}.sidebar-item--active:before{content:"";position:absolute;left:-2px;top:6px;bottom:6px;width:2px;border-radius:var(--radius-full);background:var(--color-accent)}.sidebar-item--active .sidebar-icon{color:var(--color-accent)}.sidebar-icon{font-size:var(--font-size-base);width:18px;text-align:center;flex-shrink:0;color:var(--color-text-tertiary);transition:color var(--transition-fast)}.sidebar-item:hover .sidebar-icon{color:var(--color-text)}.sidebar-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:var(--letter-spacing-body)}.shell{display:flex;flex-direction:column;height:100vh;overflow:hidden}.shell-body{display:flex;flex:1;overflow:hidden}.shell-main{flex:1;overflow-y:auto;padding:var(--space-4);background:transparent}.task-card{background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-3);cursor:grab;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none;box-shadow:var(--shadow-sm)}.task-card:hover{border-color:var(--color-accent);box-shadow:var(--shadow-md);transform:translateY(-1px)}.task-card:active{cursor:grabbing;box-shadow:var(--shadow-xl);transform:scale(.98)}.task-card-header{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.priority-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.priority-dot--critical{background:var(--color-priority-critical)}.priority-dot--high{background:var(--color-priority-high)}.priority-dot--medium{background:var(--color-priority-medium)}.priority-dot--low{background:var(--color-priority-low)}.urgency-bar{width:3px;height:14px;border-radius:2px;flex-shrink:0}.urgency-bar--critical{background:var(--color-urgency-critical)}.urgency-bar--high{background:var(--color-urgency-high)}.urgency-bar--low{background:var(--color-urgency-low)}.task-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-card-desc{font-size:var(--font-size-xs);color:var(--color-text-tertiary);line-height:var(--line-height-normal);margin-bottom:var(--space-2)}.task-card-footer{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.task-card-tags{display:flex;gap:var(--space-1);flex-wrap:wrap}.task-tag{font-size:10px;font-weight:var(--font-weight-medium);padding:2px 8px;border-radius:var(--radius-full);background:var(--color-bg-tertiary);color:var(--color-text-tertiary);border:1px solid transparent;letter-spacing:var(--letter-spacing-caption);line-height:1.4;white-space:nowrap}.task-tag[data-hue="0"]{background:#ede9fe;color:#5b21b6;border-color:#ddd6fe}.task-tag[data-hue="1"]{background:#dbeafe;color:#1d4ed8;border-color:#bfdbfe}.task-tag[data-hue="2"]{background:#fee2e2;color:#b91c1c;border-color:#fecaca}.task-tag[data-hue="3"]{background:#dcfce7;color:#15803d;border-color:#bbf7d0}.task-tag[data-hue="4"]{background:#ffedd5;color:#c2410c;border-color:#fed7aa}.task-tag[data-hue="5"]{background:#fae8ff;color:#86198f;border-color:#f5d0fe}.task-tag[data-hue="6"]{background:#ccfbf1;color:#0f766e;border-color:#99f6e4}.task-tag[data-hue="7"]{background:#fce7f3;color:#be185d;border-color:#fbcfe8}.task-tag[data-hue="8"]{background:#e0e7ff;color:#4338ca;border-color:#c7d2fe}.task-tag[data-hue="9"]{background:#fef3c7;color:#a16207;border-color:#fde68a}[data-theme=dark] .task-tag[data-hue="0"]{background:#9d8cff29;color:#c4b5fd;border-color:#9d8cff47}[data-theme=dark] .task-tag[data-hue="1"]{background:#60a5fa29;color:#93c5fd;border-color:#60a5fa47}[data-theme=dark] .task-tag[data-hue="2"]{background:#f8717129;color:#fca5a5;border-color:#f8717147}[data-theme=dark] .task-tag[data-hue="3"]{background:#4ade8024;color:#86efac;border-color:#4ade8042}[data-theme=dark] .task-tag[data-hue="4"]{background:#fb923c29;color:#fdba74;border-color:#fb923c47}[data-theme=dark] .task-tag[data-hue="5"]{background:#d946ef29;color:#f0abfc;border-color:#d946ef47}[data-theme=dark] .task-tag[data-hue="6"]{background:#2dd4bf29;color:#5eead4;border-color:#2dd4bf47}[data-theme=dark] .task-tag[data-hue="7"]{background:#f472b629;color:#f9a8d4;border-color:#f472b647}[data-theme=dark] .task-tag[data-hue="8"]{background:#818cf829;color:#a5b4fc;border-color:#818cf847}[data-theme=dark] .task-tag[data-hue="9"]{background:#fbbf2429;color:#fcd34d;border-color:#fbbf2447}.task-card-date{font-size:10px;color:var(--color-text-tertiary);white-space:nowrap}.sub-group{margin-bottom:var(--space-2)}.sub-group-header{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);border:none;border-radius:var(--radius-sm);background:transparent;cursor:pointer;width:100%;transition:background var(--transition-fast);font-family:var(--font-family)}.sub-group-header:hover{background:var(--color-bg-secondary)}.sub-group-chevron{transition:transform var(--transition-fast);color:var(--color-text-tertiary);flex-shrink:0}.sub-group-chevron--open{transform:rotate(90deg)}.sub-group-dot{width:6px;height:6px;border-radius:var(--radius-full);flex-shrink:0}.sub-group-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.sub-group-count{font-size:10px;color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:0 var(--space-1);border-radius:var(--radius-full);min-width:16px;text-align:center}.sub-group-cards{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-1) 0 0 var(--space-4)}.kanban-column{flex:1;min-width:280px;max-width:400px;display:flex;flex-direction:column;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-3);box-shadow:var(--shadow-md);transition:background var(--transition-fast),box-shadow var(--transition-fast)}.kanban-column--dragover{background:var(--color-accent-soft)}.kanban-column-header{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-2) var(--space-3)}.kanban-column-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.kanban-column-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.kanban-column-count{font-size:var(--font-size-xs);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:0 var(--space-2);border-radius:var(--radius-full);min-width:20px;text-align:center}.kanban-column-cards{display:flex;flex-direction:column;gap:var(--space-2);flex:1;overflow-y:auto}.filter-popover{position:relative;display:inline-flex}.filter-popover-dropdown{position:absolute;top:calc(100% + 6px);z-index:200;min-width:180px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:var(--space-1);animation:popover-enter .15s cubic-bezier(.2,0,.13,1.5)}.filter-popover-dropdown--left{left:0}.filter-popover-dropdown--right{right:0}@keyframes popover-enter{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.filter-option-list{display:flex;flex-direction:column;gap:1px}.filter-option{display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-2);border-radius:6px;font-size:var(--font-size-sm);color:var(--color-text);cursor:pointer;border:none;background:none;width:100%;text-align:left;transition:background .1s}.filter-option:hover{background:var(--color-bg-secondary)}.filter-option--selected{color:var(--color-accent);font-weight:var(--font-weight-medium)}.filter-option-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.filter-option-check{margin-left:auto;color:var(--color-accent);flex-shrink:0}.filter-option-label{flex:1}.filter-popover-section{padding:6px var(--space-2) 2px;font-size:10px;font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.filter-popover-divider{height:1px;background:var(--color-border);margin:var(--space-1) 0}.multi-select-list{padding:var(--space-1);min-width:180px}.multi-select-search-wrap{padding:var(--space-1) var(--space-2)}.multi-select-search{width:100%;padding:5px var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text);outline:none;transition:border-color var(--transition-fast)}.multi-select-search:focus{border-color:var(--color-accent)}.multi-select-options{max-height:200px;overflow-y:auto}.multi-select-no-results{padding:var(--space-2) var(--space-3);font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-align:center}.multi-select-actions{display:flex;gap:var(--space-1);padding:var(--space-1) var(--space-2);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-1)}.multi-select-action{padding:2px var(--space-2);border:none;border-radius:var(--radius-sm);background:transparent;font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text-tertiary);cursor:pointer;transition:color var(--transition-fast),background var(--transition-fast)}.multi-select-action:hover{color:var(--color-accent);background:var(--color-bg-secondary)}.multi-select-option{display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-2);border-radius:6px;cursor:pointer;font-size:var(--font-size-sm);font-family:var(--font-family);color:var(--color-text);transition:background var(--transition-fast);-webkit-user-select:none;user-select:none}.multi-select-option:hover{background:var(--color-bg-secondary)}.multi-select-option input[type=checkbox]{accent-color:var(--color-accent);width:14px;height:14px;flex-shrink:0}.mini-cal{width:296px;padding:var(--space-3)}.mini-cal-field-toggle{display:flex;gap:2px;margin-bottom:var(--space-2);background:var(--color-bg-tertiary);border-radius:var(--radius-md);padding:2px}.mini-cal-field-btn{flex:1;padding:5px var(--space-2);border:none;border-radius:6px;background:transparent;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);cursor:pointer;transition:all var(--transition-fast)}.mini-cal-field-btn--active{background:var(--color-bg-elevated);color:var(--color-text);box-shadow:var(--shadow-sm)}.mini-cal-presets{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:var(--space-2)}.mini-cal-preset{padding:3px 10px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:transparent;font-size:10px;font-weight:var(--font-weight-medium);color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.mini-cal-preset:hover{border-color:var(--color-accent);color:var(--color-accent)}.mini-cal-preset--active{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-text-on-brand)}.mini-cal-divider{height:1px;background:var(--color-border);margin:var(--space-1) 0 var(--space-2)}.mini-cal-nav-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-2)}.mini-cal-nav-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast)}.mini-cal-nav-btn:hover{background:var(--color-bg-secondary);color:var(--color-text)}.mini-cal-month-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.mini-cal-grid{display:grid;grid-template-columns:repeat(7,1fr)}.mini-cal-day-label{display:flex;align-items:center;justify-content:center;height:28px;font-size:10px;font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.03em}.mini-cal-day{display:flex;align-items:center;justify-content:center;height:32px;border:none;background:transparent;font-size:var(--font-size-xs);color:var(--color-text);cursor:pointer;transition:background 80ms;position:relative}.mini-cal-day:hover{background:var(--color-bg-secondary)}.mini-cal-day--outside{color:var(--color-text-tertiary);opacity:.5}.mini-cal-day--today{font-weight:var(--font-weight-bold);color:var(--color-accent)}.mini-cal-day--today:after{content:"";position:absolute;bottom:3px;left:50%;transform:translate(-50%);width:4px;height:4px;border-radius:var(--radius-full);background:var(--color-accent)}.mini-cal-day--in-range{background:var(--color-accent-soft);border-radius:0}.mini-cal-day--in-range:hover{background:var(--color-accent-soft)}.mini-cal-day--selected{background:var(--color-accent);color:var(--color-text-on-brand);font-weight:var(--font-weight-semibold)}.mini-cal-day--selected:hover{background:var(--color-accent)}.mini-cal-day--selected.mini-cal-day--today:after{background:var(--color-text-on-brand)}.mini-cal-day--range-start{border-radius:var(--radius-sm) 0 0 var(--radius-sm)}.mini-cal-day--range-end{border-radius:0 var(--radius-sm) var(--radius-sm) 0}.mini-cal-day--single,.mini-cal-day--range-start.mini-cal-day--range-end{border-radius:var(--radius-sm)}.mini-cal-footer{display:flex;align-items:center;justify-content:space-between;margin-top:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--color-border)}.mini-cal-range-text{display:flex;align-items:center;gap:var(--space-1);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text)}.mini-cal-arrow{color:var(--color-text-tertiary)}.mini-cal-hint{color:var(--color-text-tertiary);font-weight:var(--font-weight-normal);font-style:italic}.mini-cal-clear-btn{padding:3px 10px;border:none;border-radius:var(--radius-sm);background:transparent;font-size:var(--font-size-xs);color:var(--color-text-tertiary);cursor:pointer;transition:color var(--transition-fast)}.mini-cal-clear-btn:hover{color:var(--color-error)}.filter-bar{display:flex;align-items:center;gap:6px;margin-bottom:var(--space-5);flex-wrap:wrap;min-height:36px}.filter-bar-divider{width:1px;height:20px;background:var(--color-border);margin:0 2px;flex-shrink:0}.filter-bar-spacer{flex:1;min-width:var(--space-2)}.filter-search{display:flex;align-items:center;gap:var(--space-1);padding:5px 10px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);color:var(--color-text-tertiary);transition:border-color var(--transition-fast),box-shadow var(--transition-fast);min-width:160px;max-width:220px}.filter-search:focus-within{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-soft)}.filter-search-input{border:none;background:none;outline:none;font-size:var(--font-size-xs);color:var(--color-text);width:100%;font-family:var(--font-family)}.filter-search-input::placeholder{color:var(--color-text-tertiary)}.filter-search-clear{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-tertiary);cursor:pointer;flex-shrink:0;transition:color var(--transition-fast)}.filter-search-clear:hover{color:var(--color-text)}.filter-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);font-family:var(--font-family);color:var(--color-text-secondary);cursor:pointer;white-space:nowrap;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none}.filter-chip:hover{border-color:var(--color-border-hover);color:var(--color-text);background:var(--color-bg-secondary)}.filter-chip--active{border-color:var(--color-accent);color:var(--color-text);background:var(--color-accent-soft)}.filter-chip--active:hover{background:var(--color-accent-soft)}.filter-chip--subtle{border-color:transparent;background:transparent}.filter-chip--subtle:hover{background:var(--color-bg-secondary);border-color:var(--color-border)}.filter-chip-dot{width:7px;height:7px;border-radius:var(--radius-full);flex-shrink:0}.filter-chip-label{line-height:1}.filter-chip-chevron{transition:transform var(--transition-fast);opacity:.5;flex-shrink:0}.filter-chip-chevron--open{transform:rotate(180deg)}.filter-chip-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:var(--radius-full);background:var(--color-accent);color:var(--color-text-on-brand);font-size:9px;font-weight:var(--font-weight-bold);line-height:1}.filter-tag-wrap{display:flex;align-items:center;position:relative}.filter-tag-input{padding:5px 10px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text);width:90px;transition:border-color var(--transition-fast),width var(--transition-normal)}.filter-tag-input:focus{border-color:var(--color-accent);outline:none;width:120px}.filter-tag-input::placeholder{color:var(--color-text-tertiary)}.filter-tag-clear{position:absolute;right:4px;display:flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-tertiary);cursor:pointer}.filter-tag-clear:hover{color:var(--color-text)}.filter-clear-all{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border:none;border-radius:var(--radius-md);background:transparent;font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text-tertiary);cursor:pointer;transition:color var(--transition-fast);white-space:nowrap}.filter-clear-all:hover{color:var(--color-accent)}.filter-clear-count{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:var(--radius-full);background:var(--color-bg-tertiary);font-size:9px;font-weight:var(--font-weight-bold);color:var(--color-text-secondary)}.filter-views{padding:var(--space-1)}.filter-views-empty{padding:var(--space-3) var(--space-2);text-align:center;font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.filter-views-list{display:flex;flex-direction:column;gap:1px;max-height:200px;overflow-y:auto}.filter-views-item{display:flex;align-items:center;gap:var(--space-1)}.filter-views-load{flex:1;padding:6px var(--space-2);border:none;border-radius:6px;background:none;font-size:var(--font-size-sm);font-family:var(--font-family);color:var(--color-text);text-align:left;cursor:pointer;transition:background var(--transition-fast)}.filter-views-load:hover{background:var(--color-bg-secondary)}.filter-views-delete{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-tertiary);cursor:pointer;flex-shrink:0;transition:color var(--transition-fast)}.filter-views-delete:hover{color:var(--color-error)}.filter-views-save{display:flex;gap:var(--space-1);padding:var(--space-1) 0 0}.filter-views-input{flex:1;padding:5px 8px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-bg-secondary);font-size:var(--font-size-xs);font-family:var(--font-family);color:var(--color-text)}.filter-views-input:focus{outline:none;border-color:var(--color-accent)}.filter-views-input::placeholder{color:var(--color-text-tertiary)}.filter-views-save-btn{padding:5px 10px;border:none;border-radius:6px;background:var(--color-accent);color:var(--color-text-on-brand);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);font-family:var(--font-family);cursor:pointer;transition:opacity var(--transition-fast);white-space:nowrap}.filter-views-save-btn:disabled{opacity:.4;cursor:default}.filter-views-save-btn:not(:disabled):hover{opacity:.9}.filter-view-toggle{display:inline-flex;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.filter-view-btn{display:flex;align-items:center;justify-content:center;width:32px;height:28px;border:none;background:var(--color-bg-elevated);color:var(--color-text-tertiary);cursor:pointer;transition:all var(--transition-fast)}.filter-view-btn:not(:last-child){border-right:1px solid var(--color-border)}.filter-view-btn:hover{color:var(--color-text);background:var(--color-bg-secondary)}.filter-view-btn--active{color:var(--color-accent);background:var(--color-accent-soft)}.filter-view-btn--active:hover{background:var(--color-accent-soft)}.filter-create-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border:none;border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-accent-text);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);font-family:var(--font-family);cursor:pointer;transition:opacity var(--transition-fast),box-shadow var(--transition-fast);white-space:nowrap}.filter-create-btn:hover{opacity:.92;box-shadow:var(--shadow-md)}[data-theme=dark] .filter-chip--active,[data-theme=dark] .filter-chip--active:hover{background:var(--color-accent-soft)}.filter-min-rice{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3)}.filter-min-rice-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.filter-min-rice-clear{align-self:flex-end;padding:2px 8px;border:none;background:transparent;color:var(--color-accent);font-size:var(--font-size-xs);cursor:pointer}.filter-min-rice-clear:hover{text-decoration:underline}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100;animation:fade-in .12s ease}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal{background:var(--color-bg-elevated);border:1px solid var(--color-border);border-top:1px solid hsl(0 0% 100% / .15);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl),0 0 0 1px #0003;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;animation:scale-in .2s cubic-bezier(.34,1.56,.64,1)}@keyframes scale-in{0%{transform:scale(.96);opacity:0}to{transform:scale(1);opacity:1}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border)}.modal-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.modal-close{font-size:20px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);color:var(--color-text-tertiary)}.modal-close:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.modal-body{padding:var(--space-5);display:flex;flex-direction:column;gap:var(--space-4)}.field{display:flex;flex-direction:column;gap:var(--space-1)}.field-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.field-input,.field-textarea,.field-select{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);font-size:var(--font-size-sm);color:var(--color-text);box-shadow:inset 0 2px 4px #0000000d;transition:border-color var(--transition-fast),box-shadow var(--transition-bounce)}.field-input:focus,.field-textarea:focus,.field-select:focus{border-color:var(--color-accent);outline:none;box-shadow:inset 0 2px 4px #0000000d,var(--shadow-glow)}.field-textarea{resize:vertical;min-height:72px}.modal-actions{display:flex;justify-content:flex-end;gap:var(--space-2);padding-top:var(--space-2)}.btn{padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:all var(--transition-bounce);cursor:pointer}.btn:active:not(:disabled){transform:scale(.96)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--color-accent);color:var(--color-accent-text);border:none;box-shadow:0 4px 12px var(--color-accent-soft)}.btn--primary:hover:not(:disabled){box-shadow:0 8px 24px var(--color-accent-soft);transform:translateY(-1px)}.btn--ghost{color:var(--color-text-secondary);background:transparent;border:1px solid transparent}.btn--ghost:hover:not(:disabled){background:var(--color-bg-tertiary);color:var(--color-text);border-color:var(--color-border)}.detail-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;display:flex;justify-content:flex-end;z-index:100;animation:fade-in .12s ease;transition:background var(--transition-normal)}.detail-overlay--fullscreen{background:var(--color-bg)}.detail-panel{width:100%;max-width:680px;height:100vh;background:var(--color-bg-elevated);border-left:1px solid var(--color-border);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;animation:slide-in .2s ease;transition:max-width var(--transition-normal)}.detail-panel--fullscreen{max-width:100vw;border-left:none;box-shadow:none}.detail-panel--fullscreen .detail-body{padding-left:0;padding-right:0}.detail-panel--fullscreen .detail-header,.detail-panel--fullscreen .detail-body>*{max-width:1100px;margin-left:auto;margin-right:auto;width:100%}.detail-panel--fullscreen .detail-header{padding-left:var(--space-6);padding-right:var(--space-6)}@keyframes slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.detail-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border);gap:var(--space-3)}.detail-header-actions{display:flex;align-items:center;gap:var(--space-1);flex-shrink:0}.detail-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;background:transparent;border:none;border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.detail-icon-btn:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.detail-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.detail-body{flex:1;overflow-y:auto;padding:var(--space-5);display:flex;flex-direction:column;gap:var(--space-4)}.detail-empty{font-size:var(--font-size-sm);color:var(--color-text-tertiary);font-style:italic}.detail-divider{border:none;border-top:1px solid var(--color-border);margin:var(--space-1) 0}.props-block{display:flex;flex-direction:column;border:1px solid var(--color-border);border-radius:var(--radius-md)}.prop-row{display:grid;grid-template-columns:140px 1fr;min-height:36px;align-items:start;border-bottom:1px solid var(--color-border);transition:background var(--transition-fast)}.prop-row:last-child{border-bottom:none}.prop-row:hover{background:var(--color-bg-secondary)}.prop-label{padding:var(--space-2) var(--space-3);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;-webkit-user-select:none;user-select:none;line-height:20px}.prop-value{padding:var(--space-2) var(--space-3);font-size:var(--font-size-sm);color:var(--color-text);min-width:0;overflow-wrap:break-word;line-height:20px}.prop-select{border:none;background:transparent;box-shadow:none;padding:var(--space-1) var(--space-2);font-size:var(--font-size-sm);cursor:pointer;border-radius:var(--radius-sm);color:var(--color-text)}.prop-select:hover{background:var(--color-bg-tertiary)}.prop-select:focus{outline:none;box-shadow:0 0 0 2px var(--color-accent)}.prop-tags{display:flex;gap:var(--space-1);flex-wrap:wrap}.prop-feature{color:var(--color-accent);font-weight:var(--font-weight-medium)}.prop-text{color:var(--color-text-secondary);line-height:var(--line-height-relaxed)}.prop-text--clamped{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.prop-expandable{cursor:pointer;display:block}.prop-expand-hint{display:inline;font-size:var(--font-size-xs);color:var(--color-accent);margin-left:var(--space-1)}.prop-date{font-variant-numeric:tabular-nums;color:var(--color-text-secondary)}.prop-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:1px var(--space-1);border-radius:var(--radius-sm)}.markdown-body{font-size:var(--font-size-sm);color:var(--color-text);line-height:var(--line-height-relaxed);word-break:break-word}.markdown-body>:first-child{margin-top:0}.markdown-body>:last-child{margin-bottom:0}.markdown-body h1{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin-top:var(--space-6);margin-bottom:var(--space-3);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border)}.markdown-body h2{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin-top:var(--space-5);margin-bottom:var(--space-2)}.markdown-body h3{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin-top:var(--space-4);margin-bottom:var(--space-2)}.markdown-body h4,.markdown-body h5,.markdown-body h6{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-top:var(--space-3);margin-bottom:var(--space-1)}.markdown-body p{margin-bottom:var(--space-3)}.markdown-body ul,.markdown-body ol{padding-left:var(--space-5);margin-bottom:var(--space-3)}.markdown-body ul{list-style-type:disc}.markdown-body ol{list-style-type:decimal}.markdown-body li{margin-bottom:var(--space-1);line-height:var(--line-height-relaxed)}.markdown-body li>ul,.markdown-body li>ol{margin-top:var(--space-1);margin-bottom:0}.markdown-body li input[type=checkbox]{margin-right:var(--space-2);accent-color:var(--color-accent)}.markdown-body code{font-family:var(--font-mono);font-size:.9em;background:var(--color-bg-tertiary);padding:1px var(--space-1);border-radius:var(--radius-sm)}.markdown-body pre{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);overflow-x:auto;margin-bottom:var(--space-3);font-size:var(--font-size-xs);line-height:var(--line-height-relaxed)}.markdown-body pre code{background:none;padding:0;font-size:inherit}.markdown-body table{width:100%;border-collapse:collapse;margin-bottom:var(--space-3);font-size:var(--font-size-xs)}.markdown-body th,.markdown-body td{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);text-align:left}.markdown-body th{background:var(--color-bg-secondary);font-weight:var(--font-weight-semibold)}.markdown-body tr:hover{background:var(--color-bg-secondary)}.markdown-body blockquote{border-left:3px solid var(--color-accent);padding-left:var(--space-4);margin:var(--space-3) 0;color:var(--color-text-secondary);font-style:italic}.markdown-body hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-4) 0}.markdown-body a{color:var(--color-accent);text-decoration:underline;text-underline-offset:2px}.markdown-body a:hover{color:var(--color-accent)}.markdown-body strong{font-weight:var(--font-weight-semibold)}.markdown-body img{max-width:100%;border-radius:var(--radius-md)}.changelog-section{display:flex;flex-direction:column;gap:var(--space-3)}.changelog-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.changelog-add{display:flex;gap:var(--space-2)}.changelog-add .field-input{flex:1}.markdown-body .mermaid-rendered{position:relative;margin:var(--space-3) 0;background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg, 12px);overflow:hidden;height:70vh;max-height:720px;min-height:420px;box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-fast),border-color var(--transition-fast)}.markdown-body .mermaid-rendered:hover{border-color:var(--color-border-hover);box-shadow:var(--shadow-md)}.markdown-body .mermaid-stage{width:100%;height:100%;cursor:grab;overflow:hidden}.markdown-body .mermaid-stage:active{cursor:grabbing}.markdown-body .mermaid-stage>svg{width:100%;height:100%;display:block}.markdown-body .mermaid-controls{position:absolute;bottom:12px;right:12px;display:flex;gap:4px;background:var(--glass-bg);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:var(--radius-md);padding:4px;z-index:2}.markdown-body .mermaid-controls button{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--color-text);font-size:16px;font-weight:var(--font-weight-semibold);cursor:pointer;border-radius:var(--radius-sm);transition:background var(--transition-fast),color var(--transition-fast)}.markdown-body .mermaid-controls button:hover{background:var(--color-accent-soft);color:var(--color-accent)}.markdown-body .mermaid-error{color:var(--color-error);background:var(--color-error-subtle);border:1px solid var(--color-error);padding:var(--space-3);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:var(--font-size-xs);white-space:pre-wrap;word-break:break-word}.markdown-body .mermaid-rendered svg{max-width:100%;height:auto;border-radius:8px;font-size:.85em;white-space:pre-wrap}.rice-block{width:100%;display:flex;flex-direction:column}.rice-header{display:inline-flex;align-items:center;gap:var(--space-2);padding:2px 6px;border:none;background:transparent;cursor:pointer;border-radius:var(--radius-sm);color:var(--color-text);font-size:var(--font-size-sm)}.rice-header:hover{background:var(--color-bg-tertiary)}.rice-header-label{font-weight:var(--font-weight-medium)}.rice-score-badge{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:22px;padding:0 8px;border-radius:11px;font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);font-variant-numeric:tabular-nums;background:var(--color-bg-tertiary);color:var(--color-text-secondary);border:1px solid var(--color-border)}.rice-score-badge.rice-score--low{background:#d9262626;color:#c32222;border-color:#d926264d}.rice-score-badge.rice-score--mid{background:#f2a60d26;color:#ae6e13;border-color:#f2a60d4d}.rice-score-badge.rice-score--high{background:#2eb85c2e;color:#1b7e3c;border-color:#2eb85c59}[data-theme=dark] .rice-score-badge.rice-score--low{color:#ef8f8f}[data-theme=dark] .rice-score-badge.rice-score--mid{color:#f7c96e}[data-theme=dark] .rice-score-badge.rice-score--high{color:#85e0a3}.rice-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2);margin-top:var(--space-2);padding:var(--space-2);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md)}.rice-field{display:flex;flex-direction:column;gap:2px}.rice-field-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.rice-input{width:100%;font-variant-numeric:tabular-nums}.rice-clear-btn{grid-column:1 / -1;justify-self:end;padding:4px 10px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);font-size:var(--font-size-xs);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition-fast)}.rice-clear-btn:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.eisenhower{display:flex;flex-direction:column;flex:1;gap:var(--space-2);overflow:auto}.eisenhower-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:var(--space-3);flex:1;min-height:400px}.eisenhower-quadrant{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-lg);background:var(--color-bg-elevated);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);overflow-y:auto}.eisenhower-quadrant--do{border-top:3px solid var(--color-quadrant-do)}.eisenhower-quadrant--schedule{border-top:3px solid var(--color-quadrant-schedule)}.eisenhower-quadrant--delegate{border-top:3px solid var(--color-quadrant-delegate)}.eisenhower-quadrant--eliminate{border-top:3px solid var(--color-quadrant-eliminate)}.eisenhower-quadrant-header{display:flex;align-items:center;gap:var(--space-2)}.eisenhower-quadrant-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.eisenhower-quadrant-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.eisenhower-quadrant-count{font-size:var(--font-size-xs);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:0 var(--space-2);border-radius:var(--radius-full);min-width:20px;text-align:center}.eisenhower-quadrant-subtitle{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-bottom:var(--space-1)}.eisenhower-quadrant-cards{display:flex;flex-direction:column;gap:var(--space-2);flex:1}.eisenhower-y-label{display:flex;flex-direction:column;justify-content:space-around;position:absolute;left:-4px;top:0;bottom:0;pointer-events:none}.eisenhower-x-label{display:flex;justify-content:space-around;padding:var(--space-1) 0 0}.eisenhower-axis-hi,.eisenhower-axis-lo{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-tertiary);font-weight:var(--font-weight-medium)}.eisenhower-y-label{display:none}.rice-scatter{position:relative;width:100%;display:flex;flex-direction:column;gap:var(--space-3)}.rice-scatter-svg{width:100%;height:auto;display:block;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg)}.rice-axis{stroke:var(--color-border);stroke-width:1}.rice-tick{font-size:11px;fill:var(--color-text-tertiary);font-variant-numeric:tabular-nums}.rice-axis-label{font-size:12px;fill:var(--color-text-secondary);font-weight:var(--font-weight-medium)}.rice-quad{fill:var(--color-bg-secondary);fill-opacity:.4}.rice-quad--quick-wins{fill:#2eb85c;fill-opacity:.06}.rice-quad--big-bets{fill:#306ee8;fill-opacity:.06}.rice-quad--fill-ins{fill:#f4af25;fill-opacity:.06}.rice-quad--time-sinks{fill:#dd3c3c;fill-opacity:.05}.rice-quad-divider{stroke:var(--color-border);stroke-width:1;stroke-dasharray:3 4}.rice-quad-label{font-size:10px;font-weight:var(--font-weight-semibold);fill:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.06em;pointer-events:none}.rice-dot{cursor:pointer;transition:stroke-width var(--transition-fast),fill-opacity var(--transition-fast);outline:none}.rice-dot:hover{fill-opacity:1!important}.rice-dot:focus-visible{stroke:var(--color-accent);stroke-width:2.5}.rice-scatter-sr-list{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.rice-unscored{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated)}.rice-unscored-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;padding:var(--space-3);background:transparent;border:none;cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.rice-unscored-toggle:hover{background:var(--color-bg-tertiary)}.rice-unscored-cards{display:flex;gap:var(--space-2);padding:var(--space-3);border-top:1px solid var(--color-border);overflow-x:auto}.rice-unscored-cards>*{flex:0 0 220px}.rice-chevron{transition:transform var(--transition-fast);color:var(--color-text-tertiary)}.rice-chevron--open{transform:rotate(180deg)}.version-manager-modal{max-width:680px}.version-manager-body{display:flex;flex-direction:column;gap:var(--space-3)}.version-stats{display:flex;gap:var(--space-4);padding:var(--space-3);background:var(--color-bg-secondary);border-radius:var(--radius-md)}.version-stat{display:flex;flex-direction:column;align-items:center;gap:2px}.version-stat-count{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--color-text)}.version-stat-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em}.version-manager-loading,.version-manager-empty{font-size:var(--font-size-sm);color:var(--color-text-tertiary);text-align:center;padding:var(--space-3)}.version-section{display:flex;flex-direction:column;gap:var(--space-2)}.version-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.04em;margin:0}.version-item{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--space-2)}.version-item--released{opacity:.7}.version-item-info{display:flex;align-items:center;gap:var(--space-2)}.version-item-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text)}.version-item-count{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-left:auto}.version-item-date{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.version-item-desc{font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:var(--line-height-normal)}.version-status-badge{font-size:10px;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.04em;padding:1px var(--space-2);border-radius:var(--radius-full)}.version-status-badge--planning{background:var(--color-warning-subtle, hsl(45 80% 92%));color:var(--color-warning, hsl(35 80% 45%))}.version-status-badge--released{background:var(--color-success-subtle);color:var(--color-success)}.version-item-actions{display:flex;justify-content:flex-end}.version-release-btn{font-size:var(--font-size-xs)!important;padding:var(--space-1) var(--space-3)!important}.version-create-form{display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--color-border)}.kanban-board{height:100%;display:flex;flex-direction:column}.kanban-columns{display:flex;gap:var(--space-4);flex:1;overflow-x:auto;padding-bottom:var(--space-4)}.loading{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.task-list{display:flex;flex-direction:column;gap:var(--space-2)}.task-list>*{width:100%}.sleep-page{max-width:800px}.sleep-overview{display:flex;gap:var(--space-8);align-items:flex-start;margin-bottom:var(--space-8)}.sleep-gauge{display:flex;flex-direction:column;align-items:center;justify-content:center;width:120px;height:120px;border-radius:var(--radius-xl);flex-shrink:0;box-shadow:var(--shadow-md);transition:transform var(--transition-bounce),box-shadow var(--transition-fast)}.sleep-gauge:hover{transform:translateY(-4px) scale(1.02);box-shadow:var(--shadow-xl)}.sleep-gauge--alert{background:var(--color-success-subtle);color:var(--color-success)}.sleep-gauge--drowsy{background:var(--color-warning-subtle);color:var(--color-warning)}.sleep-gauge--sleepy{background:var(--color-accent-soft);color:var(--color-accent)}.sleep-gauge--must_sleep{background:var(--color-error-subtle);color:var(--color-error)}.sleep-gauge-number{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);line-height:1}.sleep-gauge-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);margin-top:var(--space-1)}.sleep-details{display:flex;flex-direction:column;gap:var(--space-4);flex:1}.sleep-detail{display:flex;flex-direction:column;gap:var(--space-1)}.sleep-detail-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.sleep-detail-value{font-size:var(--font-size-sm);color:var(--color-text)}.sleep-detail-value--summary{color:var(--color-text-secondary);line-height:var(--line-height-relaxed)}.sleep-section{margin-bottom:var(--space-8)}.sleep-section-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-4)}.session-list{display:flex;flex-direction:column;gap:var(--space-2)}.session-item{padding:var(--space-3);background:var(--color-bg-elevated);border-radius:var(--radius-md);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);transition:all var(--transition-bounce)}.session-item:hover{transform:translate(4px);box-shadow:var(--shadow-md);border-color:var(--color-accent)}.session-header{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-1)}.session-time{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-family:var(--font-mono)}.session-score{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-warning)}.session-changes{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.session-message{font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:var(--line-height-normal)}.sql-preview{position:relative;padding:var(--space-4);overflow:auto;flex:1;background-image:radial-gradient(circle,var(--color-border) 1px,transparent 1px);background-size:24px 24px;border-radius:var(--radius-md);border:1px solid var(--color-border)}.sql-preview-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.sql-preview-svg{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0}.sql-preview-line{fill:none;stroke:var(--color-aether-blue);stroke-width:2;opacity:.6}.sql-preview-line-label{font-size:10px;font-family:var(--font-mono);font-weight:600;fill:var(--color-text-secondary)}.sql-preview-line-label-bg{fill:var(--color-bg);rx:3;ry:3}.sql-preview-arrowhead{fill:var(--color-aether-blue);opacity:.6}.sql-preview-grid{position:relative;z-index:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--space-6)}.entity-card{background:var(--color-bg);border-radius:var(--radius-lg);border:1px solid var(--color-border);box-shadow:var(--shadow-md);overflow:hidden;transition:box-shadow var(--transition-fast)}.entity-card:hover{box-shadow:var(--shadow-lg)}.entity-card-header{padding:var(--space-3) var(--space-4);background:var(--color-accent-soft);border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2)}.entity-card-title-group{display:flex;align-items:center;gap:var(--space-2);min-width:0}.entity-card-category-icon{font-size:10px;font-family:var(--font-mono);color:var(--color-text-tertiary);flex-shrink:0}.entity-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);color:var(--color-text);letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entity-card-badge{font-size:10px;font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.05em;padding:2px 6px;border-radius:var(--radius-sm);flex-shrink:0}.entity-card-badge[data-storage=file]{background:#2a6df41f;color:#2a6df4}.entity-card-badge[data-storage=json]{background:#e69b191f;color:#e69b19}.entity-card-badge[data-storage=table]{background:#1eae531f;color:#1eae53}.entity-card-path{padding:var(--space-1) var(--space-4);font-size:10px;font-family:var(--font-mono);color:var(--color-text-tertiary);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.entity-card-managed{padding:var(--space-1) var(--space-4);font-size:10px;color:var(--color-text-tertiary);background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border)}.entity-fields{padding:var(--space-2) 0}.entity-field{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-4);font-size:var(--font-size-xs);font-family:var(--font-mono);line-height:1.6;transition:background var(--transition-fast)}.entity-field:hover{background:var(--color-bg-secondary)}.entity-field--expandable{cursor:pointer}.entity-field--expandable:hover{background:#741ba70f}.entity-field--nested{padding-left:calc(var(--space-4) + 18px + var(--space-2));opacity:.85;border-left:2px solid hsl(278 72% 38% / .15);margin-left:var(--space-4)}.entity-field-name--nested{color:var(--color-text-secondary)!important;font-weight:var(--font-weight-normal)!important}.entity-field-icon{width:18px;flex-shrink:0;text-align:center;font-size:9px;font-weight:var(--font-weight-bold);opacity:.8}.entity-field-icon--key{color:#e69b19}.entity-field-icon--ref{color:var(--color-accent)}.entity-field-name{min-width:90px;color:var(--color-text);font-weight:var(--font-weight-medium)}.entity-field-type{color:var(--color-text-tertiary);flex-shrink:0}.entity-field-type[data-type=enum]{color:var(--color-aether-blue)}.entity-field-type[data-type=array]{color:#2a6df4}.entity-field-type[data-type=boolean]{color:#1eae53}.entity-field-type[data-type=number]{color:#ee7c2b}.entity-field-type[data-type=json]{color:#a23adf}.entity-field-type[data-type=nullable]{color:var(--color-text-tertiary);font-style:italic}.entity-field-type[data-type=date]{color:#7a47d1}.entity-field-toggle{display:flex;align-items:center;gap:4px;margin-left:auto;flex-shrink:0}.entity-field-toggle-arrow{font-size:8px;color:var(--color-text-tertiary);transition:transform .15s ease;display:inline-block}.entity-field-toggle-arrow--open{transform:rotate(90deg)}.entity-field-toggle-count{font-size:9px;font-family:var(--font-mono);color:var(--color-text-tertiary);background:#741ba71a;padding:0 5px;border-radius:3px;line-height:1.6}.entity-field-enum-group{display:flex;flex-wrap:wrap;gap:3px}.entity-field-enum-pill{padding:0 5px;border-radius:3px;font-size:9px;font-family:var(--font-mono);background:#741ba71a;color:var(--color-aether-blue);line-height:1.6;white-space:nowrap}.entity-field-desc{color:var(--color-text-tertiary);font-family:var(--font-family);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.entity-card-notes{padding:var(--space-2) var(--space-4);border-top:1px solid var(--color-border);background:var(--color-bg-secondary)}.entity-card-note{display:block;font-size:10px;color:var(--color-text-tertiary);line-height:1.5;font-style:italic}.sql-preview-legend{position:relative;z-index:1;margin-top:var(--space-5);padding:var(--space-3) var(--space-4);background:var(--color-bg);border-radius:var(--radius-md);border:1px solid var(--color-border)}.sql-preview-legend-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-2)}.sql-preview-legend-items{display:flex;flex-wrap:wrap;gap:var(--space-3)}.sql-preview-legend-item{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-xs);color:var(--color-text-secondary)}.sql-preview-legend-line{width:24px;height:2px;background:var(--color-aether-blue);opacity:.6;border-radius:1px}.sql-preview-legend-cardinality{font-size:10px;font-family:var(--font-mono);font-weight:var(--font-weight-semibold);color:var(--color-accent);padding:1px 4px;background:var(--color-accent-soft);border-radius:3px}.json-preview{flex:1;overflow:auto;padding:var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg)}.json-preview-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.json-preview-header{margin-bottom:var(--space-4);padding-bottom:var(--space-3);border-bottom:1px solid var(--color-border)}.json-preview-stats{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2)}.json-preview-total{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text);margin-right:var(--space-2)}.json-stat-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--color-text-secondary);border:1px solid var(--color-border);background:transparent;cursor:pointer;transition:all var(--transition-fast)}.json-stat-chip:hover{background:var(--color-bg-tertiary)}.json-stat-chip--active{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-text)}.json-type-badge{display:inline-block;padding:1px 6px;border-radius:3px;font-size:10px;font-family:var(--font-mono);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.03em;flex-shrink:0;background:#8080801a;color:var(--color-text-secondary)}.type--feat{background:#1eae531f;color:#1eae53}.type--fix{background:#ee7c2b1f;color:#ee7c2b}.type--refactor{background:#2a6df41f;color:#2a6df4}.type--chore{background:#8c8c8c1f;color:var(--color-text-tertiary)}.type--docs{background:#7a47d11f;color:#7a47d1}.type--test{background:#15a4c11f;color:#15a4c1}.type--perf{background:#e69b191f;color:#e69b19}.json-breaking-badge{display:inline-block;padding:1px 5px;border-radius:3px;font-size:9px;font-family:var(--font-mono);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:.05em;background:#db242426;color:#db2424;flex-shrink:0}.json-timeline{display:flex;flex-direction:column;gap:var(--space-4)}.json-date-group{position:relative}.json-date-marker{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.json-date-dot{width:8px;height:8px;border-radius:50%;background:var(--color-accent);flex-shrink:0}.json-date-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);font-family:var(--font-mono);color:var(--color-text)}.json-date-count{font-size:10px;font-family:var(--font-mono);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:0 6px;border-radius:var(--radius-full)}.json-date-entries{display:flex;flex-direction:column;gap:var(--space-1);margin-left:3px;padding-left:var(--space-4);border-left:2px solid var(--color-border)}.json-entry{padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast)}.json-entry:hover{background:var(--color-bg-tertiary)}.json-entry--expanded{background:var(--color-bg-secondary)}.json-entry-header{display:flex;align-items:center;gap:var(--space-2);margin-bottom:2px}.json-entry-scope{font-size:11px;font-family:var(--font-mono);color:var(--color-text-tertiary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.json-entry-desc{font-size:var(--font-size-xs);line-height:var(--line-height-relaxed);color:var(--color-text-secondary)}.json-entry-desc--clamped{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.json-releases{display:flex;flex-direction:column;gap:var(--space-3)}.json-release{border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;transition:box-shadow var(--transition-fast)}.json-release:hover{box-shadow:var(--shadow-md)}.json-release-header{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);background:var(--color-accent-soft);cursor:pointer;transition:background var(--transition-fast)}.json-release-header:hover{filter:brightness(.97)}.json-release-version{font-size:var(--font-size-base);font-weight:var(--font-weight-bold);font-family:var(--font-mono);color:var(--color-text)}.json-release-date{font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--color-text-tertiary)}.json-release-meta{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-left:auto}.json-release-chevron{font-size:10px;color:var(--color-text-tertiary);transition:transform .15s ease;display:inline-block;flex-shrink:0}.json-release-chevron--open{transform:rotate(90deg)}.json-release-body{padding:var(--space-4)}.json-release-summary{font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);color:var(--color-text-secondary);margin-bottom:var(--space-4)}.json-release-section{margin-bottom:var(--space-4)}.json-release-section:last-child{margin-bottom:0}.json-release-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-secondary);margin-bottom:var(--space-2)}.json-release-ids{display:flex;flex-wrap:wrap;gap:var(--space-1)}.json-id-chip{padding:2px 8px;border-radius:var(--radius-sm);font-size:10px;font-family:var(--font-mono);font-weight:var(--font-weight-medium)}.json-id-chip--feature{background:#741ba71a;color:var(--color-aether-blue)}.json-id-chip--task{background:#2a6df41a;color:#2a6df4}.json-release-changelog{display:flex;flex-direction:column;gap:var(--space-1)}.json-release-cl-entry{display:flex;align-items:flex-start;gap:var(--space-2);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-size:var(--font-size-xs);transition:background var(--transition-fast)}.json-release-cl-entry:hover{background:var(--color-bg-tertiary)}.json-release-cl-scope{font-family:var(--font-mono);color:var(--color-text-tertiary);flex-shrink:0;font-size:10px;padding-top:1px}.json-release-cl-desc{color:var(--color-text-secondary);line-height:var(--line-height-relaxed)}.json-generic-list{display:flex;flex-direction:column;gap:var(--space-2)}.json-generic-item{font-size:var(--font-size-xs);font-family:var(--font-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-word;padding:var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg-secondary)}.md-preview{flex:1;overflow:auto;padding:var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg)}.md-frontmatter{margin-bottom:var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-bg-secondary)}.md-fm-row{display:flex;align-items:baseline;gap:var(--space-3);padding:var(--space-1) 0;font-size:var(--font-size-xs)}.md-fm-row+.md-fm-row{border-top:1px solid var(--color-border)}.md-fm-key{width:100px;flex-shrink:0;font-family:var(--font-mono);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary)}.md-fm-value{color:var(--color-text);word-break:break-word}.md-preview .markdown-body{font-size:var(--font-size-sm);color:var(--color-text);line-height:var(--line-height-relaxed)}.md-preview .markdown-body>:first-child{margin-top:0}.md-preview .markdown-body>:last-child{margin-bottom:0}.md-preview .markdown-body h1{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin-top:var(--space-6);margin-bottom:var(--space-3);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border)}.md-preview .markdown-body h2{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin-top:var(--space-5);margin-bottom:var(--space-3)}.md-preview .markdown-body h3{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);margin-top:var(--space-4);margin-bottom:var(--space-2)}.md-preview .markdown-body h4,.md-preview .markdown-body h5,.md-preview .markdown-body h6{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-top:var(--space-4);margin-bottom:var(--space-2)}.md-preview .markdown-body p{margin-bottom:var(--space-3)}.md-preview .markdown-body ul,.md-preview .markdown-body ol{padding-left:var(--space-5);margin-bottom:var(--space-3)}.md-preview .markdown-body ul{list-style-type:disc}.md-preview .markdown-body ol{list-style-type:decimal}.md-preview .markdown-body li{margin-bottom:var(--space-1);line-height:var(--line-height-relaxed)}.md-preview .markdown-body li>ul,.md-preview .markdown-body li>ol{margin-top:var(--space-1);margin-bottom:0}.md-preview .markdown-body li input[type=checkbox]{margin-right:var(--space-2);accent-color:var(--color-accent)}.md-preview .markdown-body code{font-family:var(--font-mono);font-size:.9em;background:var(--color-bg-secondary);padding:1px 4px;border-radius:3px}.md-preview .markdown-body pre{background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);overflow-x:auto;margin-bottom:var(--space-3)}.md-preview .markdown-body pre code{background:none;padding:0;font-size:var(--font-size-xs)}.md-preview .markdown-body table{width:100%;border-collapse:collapse;margin-bottom:var(--space-3);font-size:var(--font-size-xs)}.md-preview .markdown-body th,.md-preview .markdown-body td{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);text-align:left}.md-preview .markdown-body th{background:var(--color-bg-secondary);font-weight:var(--font-weight-semibold)}.md-preview .markdown-body tr:hover{background:var(--color-bg-secondary)}.md-preview .markdown-body blockquote{border-left:3px solid var(--color-accent);padding-left:var(--space-4);margin:0 0 var(--space-3) 0;color:var(--color-text-secondary);font-style:italic}.md-preview .markdown-body hr{border:none;border-top:1px solid var(--color-border);margin:var(--space-4) 0}.md-preview .markdown-body a{color:var(--color-accent);text-decoration:underline;text-underline-offset:2px}.md-preview .markdown-body a:hover{color:var(--color-accent)}.md-preview .markdown-body strong{font-weight:var(--font-weight-semibold)}.md-preview .markdown-body img{max-width:100%;border-radius:var(--radius-md)}.md-preview .markdown-body .mermaid-rendered{margin:var(--space-4) 0;padding:var(--space-4);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden;position:relative;transition:box-shadow var(--transition-fast),border-color var(--transition-fast)}.md-preview .markdown-body .mermaid-rendered:hover{border-color:var(--color-border-hover);box-shadow:var(--shadow-md)}.md-preview .markdown-body .mermaid-stage{display:flex;align-items:center;justify-content:center;min-height:200px;width:100%;overflow:auto}.md-preview .markdown-body .mermaid-stage>svg{max-width:100%;height:auto;display:block}.md-preview .markdown-body .mermaid-error{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-error);background:var(--color-error-subtle);border:1px solid var(--color-error);border-radius:var(--radius-md);padding:var(--space-3);white-space:pre-wrap;word-break:break-word}.core-page{height:100%;display:flex;flex-direction:column}.core-layout{display:flex;gap:var(--space-4);flex:1;min-height:0}.core-list{width:240px;flex-shrink:0;display:flex;flex-direction:column;gap:var(--space-1)}.core-list-item{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);text-align:left;transition:all var(--transition-bounce)}.core-list-item:hover{background:var(--color-bg-tertiary);transform:translate(4px)}.core-list-item--active{background:var(--color-accent-soft);box-shadow:inset 4px 0 0 0 var(--color-accent)}.core-list-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.core-list-type{font-family:var(--font-mono);font-size:10px;font-weight:var(--font-weight-medium);padding:2px 8px;border-radius:var(--radius-full);background:var(--color-bg-tertiary);color:var(--color-text-tertiary);border:1px solid var(--color-border);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}.core-detail{flex:1;min-width:0}.core-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.core-viewer,.core-editor{display:flex;flex-direction:column;height:100%}.core-viewer-header,.core-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-4)}.core-viewer-title{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold)}.core-viewer-actions{display:flex;align-items:center;gap:var(--space-3)}.core-tabs{display:flex;gap:0;border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.core-tab{padding:var(--space-1) var(--space-3);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);transition:all var(--transition-fast);border-right:1px solid var(--color-border)}.core-tab:last-child{border-right:none}.core-tab:hover{background:var(--color-bg-tertiary)}.core-tab--active{background:var(--color-accent-soft);color:var(--color-text);font-weight:var(--font-weight-semibold)}.core-editor-actions{display:flex;gap:var(--space-2)}.core-viewer-content{font-size:var(--font-size-sm);font-family:var(--font-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-word;background:var(--color-bg-elevated);padding:var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);overflow-y:auto;flex:1}.core-editor-split{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);flex:1;min-height:0}.core-editor-textarea{font-size:var(--font-size-sm);font-family:var(--font-mono);line-height:var(--line-height-relaxed);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-elevated);box-shadow:inset 0 2px 4px #0000000d;resize:none;overflow-y:auto;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.core-editor-textarea:focus{border-color:var(--color-accent);outline:none}.core-editor-preview{font-size:var(--font-size-sm);font-family:var(--font-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-word;background:var(--color-bg-elevated);padding:var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);overflow-y:auto}.knowledge-page{height:100%;display:flex;flex-direction:column}.knowledge-search{width:100%;max-width:400px;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);font-size:var(--font-size-sm);margin-bottom:var(--space-4);transition:border-color var(--transition-fast)}.knowledge-search:focus{border-color:var(--color-accent);outline:none}.knowledge-layout{display:flex;gap:var(--space-4);flex:1;min-height:0}.knowledge-list{width:320px;flex-shrink:0;display:flex;flex-direction:column;gap:var(--space-2);overflow-y:auto}.knowledge-card{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);text-align:left;background:var(--color-bg);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.knowledge-card:hover{border-color:var(--color-border-hover)}.knowledge-card--active{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent)}.knowledge-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-1)}.knowledge-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.pin-btn{font-size:var(--font-size-sm);color:var(--color-text-tertiary);padding:2px;border-radius:var(--radius-sm);transition:color var(--transition-fast)}.pin-btn:hover,.pin-btn--active{color:var(--color-accent)}.knowledge-card-desc{font-size:var(--font-size-xs);color:var(--color-text-tertiary);line-height:var(--line-height-normal);margin-bottom:var(--space-2)}.knowledge-card-tags{display:flex;gap:var(--space-1);flex-wrap:wrap}.knowledge-detail{flex:1;min-width:0}.features-page{height:100%;display:flex;flex-direction:column}.features-layout{display:flex;gap:var(--space-4);flex:1;min-height:0}.features-list{width:280px;flex-shrink:0;display:flex;flex-direction:column;gap:var(--space-2);overflow-y:auto}.feature-card{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);text-align:left;background:var(--color-bg-elevated);transition:all var(--transition-bounce)}.feature-card:hover{border-color:var(--color-accent);box-shadow:var(--shadow-lg);transform:translate(4px)}.feature-card--active{border-color:var(--color-accent);box-shadow:inset 4px 0 0 0 var(--color-accent),var(--shadow-md);background:var(--color-accent-soft)}.feature-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-2)}.feature-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text)}.feature-status{font-size:10px;padding:2px 8px;border-radius:var(--radius-full);font-weight:var(--font-weight-semibold);letter-spacing:.04em;text-transform:uppercase;border:1px solid transparent;white-space:nowrap}.feature-status--active,.feature-status--planning{background:#dcfce7;color:#15803d;border-color:#bbf7d0}.feature-status--in_review{background:#dbeafe;color:#1d4ed8;border-color:#bfdbfe}.feature-status--in_progress{background:#ffedd5;color:#c2410c;border-color:#fed7aa}.feature-status--shipped,.feature-status--archived{background:var(--color-bg-tertiary);color:var(--color-text-tertiary);border-color:var(--color-border)}[data-theme=dark] .feature-status--active,[data-theme=dark] .feature-status--planning{background:#4ade8024;color:#86efac;border-color:#4ade8047}[data-theme=dark] .feature-status--in_review{background:#60a5fa29;color:#93c5fd;border-color:#60a5fa47}[data-theme=dark] .feature-status--in_progress{background:#fb923c29;color:#fdba74;border-color:#fb923c47}.features-detail{flex:1;min-width:0;overflow-y:auto}.feature-viewer{display:flex;flex-direction:column;gap:var(--space-4)}.feature-meta{display:flex;gap:var(--space-4);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.feature-tasks{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.feature-section{border-top:1px solid var(--color-border);padding-top:var(--space-4)}.feature-section-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);margin-bottom:var(--space-2)}.feature-section-content{font-size:var(--font-size-sm);font-family:var(--font-mono);line-height:var(--line-height-relaxed);white-space:pre-wrap;word-break:break-word;color:var(--color-text-secondary)}.brain-page{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--color-bg);position:relative}.brain-header{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-5);border-bottom:1px solid var(--color-border);background:var(--color-bg);z-index:2;flex-shrink:0}.brain-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);letter-spacing:-.01em;margin:0;display:flex;align-items:center;gap:var(--space-2)}.brain-title-mark{font-size:var(--font-size-xl);background:var(--gradient-brand);-webkit-background-clip:text;background-clip:text;color:transparent}.brain-stats{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-variant-numeric:tabular-nums;margin-left:var(--space-2)}.brain-search{flex:1;max-width:280px;padding:var(--space-2) var(--space-3);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--color-text);transition:border-color var(--transition-fast)}.brain-search:focus{outline:none;border-color:var(--color-accent)}.brain-header-actions{display:flex;align-items:center;gap:var(--space-2);margin-left:auto}.brain-btn{padding:var(--space-2) var(--space-3);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast);display:inline-flex;align-items:center;gap:var(--space-1)}.brain-btn:hover{background:var(--color-bg-tertiary);border-color:var(--color-border-hover);color:var(--color-text)}.brain-btn--active{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-accent)}.brain-canvas-wrap{flex:1;min-height:0;position:relative;overflow:hidden;background:var(--color-bg)}[data-theme=dark] .brain-canvas-wrap{background:#151518}.brain-canvas-wrap canvas{display:block}.brain-empty,.brain-loading{display:flex;align-items:center;justify-content:center;height:100%;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.brain-settings{position:absolute;top:var(--space-3);left:var(--space-3);bottom:var(--space-3);width:280px;background:var(--brain-panel-bg);border:1px solid var(--brain-panel-border);border-radius:var(--radius-md);color:var(--color-text);font-size:var(--font-size-sm);display:flex;flex-direction:column;z-index:5;box-shadow:var(--shadow-lg);--brain-panel-bg: hsl(0 0% 100% / .92);--brain-panel-border: var(--color-border);--brain-panel-divider: var(--color-border);--brain-panel-hover: hsl(0 0% 0% / .04);--brain-panel-hint: var(--color-text-tertiary);--brain-panel-input-bg: var(--color-bg-secondary);--brain-panel-input-border: var(--color-border);--brain-panel-input-text: var(--color-text);--brain-panel-label: var(--color-text-secondary);--brain-panel-toggle-off: hsl(0 0% 0% / .18);--brain-panel-code-bg: hsl(0 0% 0% / .06)}[data-theme=dark] .brain-settings{--brain-panel-bg: rgba(22, 22, 26, .92);--brain-panel-border: rgba(255, 255, 255, .08);--brain-panel-divider: rgba(255, 255, 255, .06);--brain-panel-hover: rgba(255, 255, 255, .04);--brain-panel-hint: rgba(235, 240, 250, .45);--brain-panel-input-bg: rgba(255, 255, 255, .05);--brain-panel-input-border: rgba(255, 255, 255, .1);--brain-panel-input-text: rgba(235, 240, 250, .95);--brain-panel-label: rgba(235, 240, 250, .6);--brain-panel-toggle-off: rgba(255, 255, 255, .15);--brain-panel-code-bg: rgba(255, 255, 255, .08)}.brain-settings-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--brain-panel-divider)}.brain-settings-title{font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-secondary)}.brain-settings-header-actions{display:flex;gap:var(--space-1)}.brain-settings-mini-btn{width:24px;height:24px;background:transparent;border:1px solid var(--brain-panel-input-border);border-radius:var(--radius-sm);color:var(--color-text-secondary);cursor:pointer;font-size:13px;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:all var(--transition-fast)}.brain-settings-mini-btn:hover{background:var(--brain-panel-hover);border-color:var(--color-border-hover);color:var(--color-text)}.brain-settings-body{flex:1;overflow-y:auto;padding:var(--space-2) 0}.brain-section{border-bottom:1px solid var(--brain-panel-divider)}.brain-section:last-child{border-bottom:none}.brain-section-header{width:100%;padding:var(--space-2) var(--space-4);background:transparent;border:none;color:var(--color-text);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:.08em;display:flex;align-items:center;gap:var(--space-2);cursor:pointer;-webkit-user-select:none;user-select:none}.brain-section-header:hover{background:var(--brain-panel-hover)}.brain-section-caret{color:var(--color-text-tertiary);font-size:11px;width:12px;display:inline-block}.brain-section-body{padding:var(--space-2) var(--space-4) var(--space-3);display:flex;flex-direction:column;gap:var(--space-2)}.brain-settings-label{font-size:var(--font-size-xs);color:var(--brain-panel-label);text-transform:uppercase;letter-spacing:.06em}.brain-settings-input{background:var(--brain-panel-input-bg);border:1px solid var(--brain-panel-input-border);border-radius:var(--radius-sm);color:var(--brain-panel-input-text);padding:var(--space-2);font-size:var(--font-size-sm);outline:none;transition:border-color var(--transition-fast);width:100%;font-family:inherit}.brain-settings-input:focus{border-color:var(--color-accent)}.brain-settings-hint{font-size:11px;color:var(--brain-panel-hint);margin:0;line-height:1.5}.brain-settings-hint code{font-family:var(--font-mono);font-size:10px;background:var(--brain-panel-code-bg);padding:1px 4px;border-radius:3px;color:var(--color-text-secondary)}.brain-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:var(--font-size-sm);color:var(--color-text);padding:2px 0;cursor:pointer}.brain-toggle{width:30px;height:16px;border-radius:999px;background:var(--brain-panel-toggle-off);position:relative;cursor:pointer;transition:background var(--transition-fast);flex-shrink:0}.brain-toggle--on{background:var(--color-accent)}.brain-toggle-knob{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform var(--transition-fast)}.brain-toggle--on .brain-toggle-knob{transform:translate(14px)}.brain-segmented-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:var(--font-size-sm);color:var(--color-text);padding:2px 0 6px}.brain-segmented-label{font-size:12px;color:var(--color-text-secondary)}.brain-segmented{display:inline-flex;background:var(--brain-panel-toggle-off);border-radius:6px;padding:2px;gap:2px}.brain-segmented-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;color:var(--color-text-secondary);font-size:11px;font-weight:600;letter-spacing:.04em;padding:3px 10px;border-radius:4px;cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}.brain-segmented-btn:hover{color:var(--color-text)}.brain-segmented-btn--active{background:var(--color-accent);color:#fff}.brain-segmented-btn--active:hover{color:#fff}.brain-slider-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);font-size:var(--font-size-sm);color:var(--color-text)}.brain-slider-row input[type=range]{flex:1;max-width:140px;accent-color:var(--color-accent)}.brain-slider-label-text{font-size:12px;color:var(--color-text-secondary)}.brain-groups-list{display:flex;flex-direction:column;gap:var(--space-1)}.brain-group-row{display:flex;align-items:center;gap:var(--space-2);position:relative}.brain-group-color{width:16px;height:16px;border-radius:50%;border:1px solid var(--brain-panel-input-border);cursor:pointer;flex-shrink:0;padding:0}.brain-group-input{flex:1;padding:var(--space-1) var(--space-2);font-size:12px}.brain-swatch-picker{position:absolute;left:0;top:calc(100% + 4px);display:grid;grid-template-columns:repeat(5,1fr);gap:4px;padding:6px;background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-sm);z-index:10;box-shadow:var(--shadow-md)}.brain-swatch{width:18px;height:18px;border-radius:50%;border:1px solid var(--color-border);cursor:pointer;padding:0}.brain-swatch:hover{transform:scale(1.15)}.brain-group-add{display:flex;gap:var(--space-1);margin-top:var(--space-2)}.brain-settings-btn{padding:var(--space-2) var(--space-3);background:var(--color-accent-soft);border:1px solid var(--color-accent);border-radius:var(--radius-sm);color:var(--color-accent);font-size:12px;font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.brain-settings-btn:hover:not(:disabled){background:var(--color-accent);color:var(--color-accent-text);border-color:var(--color-accent)}.brain-settings-btn:disabled{opacity:.4;cursor:not-allowed}.brain-legend{position:absolute;bottom:var(--space-4);left:var(--space-4);background:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);display:flex;flex-wrap:wrap;gap:var(--space-3);font-size:var(--font-size-xs);color:var(--color-text);max-width:calc(100% - var(--space-8));box-shadow:var(--shadow-md);z-index:3}.brain-legend-item{display:inline-flex;align-items:center;gap:var(--space-1);cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm);transition:background-color var(--transition-fast);-webkit-user-select:none;user-select:none}.brain-legend-item:hover{background:var(--color-bg-tertiary)}.brain-legend-item--off{opacity:.4}.brain-legend-dot{width:10px;height:10px;border-radius:var(--radius-full);flex-shrink:0}.brain-drawer{position:absolute;top:0;right:0;bottom:0;width:380px;background:var(--color-bg-elevated);border-left:1px solid var(--color-border);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;z-index:4;transform:translate(100%);transition:transform var(--transition-normal)}.brain-drawer--open{transform:translate(0)}.brain-drawer-header{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border);display:flex;flex-direction:column;gap:var(--space-2)}.brain-drawer-close{position:absolute;top:var(--space-3);right:var(--space-3);background:transparent;border:none;color:var(--color-text-tertiary);cursor:pointer;font-size:var(--font-size-lg);line-height:1;padding:var(--space-1);border-radius:var(--radius-sm);transition:background-color var(--transition-fast)}.brain-drawer-close:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.brain-drawer-group-badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:2px var(--space-2);border-radius:var(--radius-full);background:var(--color-bg-secondary);border:1px solid var(--color-border);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);width:fit-content;text-transform:uppercase;letter-spacing:.05em}.brain-drawer-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0;color:var(--color-text);line-height:var(--line-height-tight)}.brain-drawer-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary);word-break:break-all}.brain-drawer-body{flex:1;overflow-y:auto;padding:var(--space-4) var(--space-5);display:flex;flex-direction:column;gap:var(--space-4)}.brain-drawer-section{display:flex;flex-direction:column;gap:var(--space-2)}.brain-drawer-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.06em;margin:0}.brain-meta-grid{display:grid;grid-template-columns:max-content 1fr;gap:var(--space-1) var(--space-3);font-size:var(--font-size-sm)}.brain-meta-key{color:var(--color-text-tertiary);font-variant-numeric:tabular-nums}.brain-meta-val{color:var(--color-text);word-break:break-word}.brain-tag-list{display:flex;flex-wrap:wrap;gap:var(--space-1)}.brain-tag{padding:2px var(--space-2);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-full);font-size:var(--font-size-xs);color:var(--color-text-secondary)}.brain-description{font-size:var(--font-size-sm);color:var(--color-text-secondary);line-height:var(--line-height-relaxed);margin:0}.brain-related-list{display:flex;flex-direction:column;gap:var(--space-1)}.brain-related-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:transparent;border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;font-size:var(--font-size-sm);color:var(--color-text);text-align:left;transition:all var(--transition-fast)}.brain-related-item:hover{background:var(--color-bg-secondary);border-color:var(--color-border-hover)}.brain-related-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.brain-related-kind{margin-left:auto;font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.brain-drawer-footer{padding:var(--space-3) var(--space-5);border-top:1px solid var(--color-border);display:flex;gap:var(--space-2)}.brain-drawer-footer .brain-btn{flex:1;justify-content:center;background:var(--color-accent);color:var(--color-accent-text);border-color:transparent;font-weight:var(--font-weight-semibold)}.brain-drawer-footer .brain-btn:hover{filter:brightness(1.08);color:var(--color-accent-text)}.council-page{height:100%;display:flex;flex-direction:column;min-height:0;gap:var(--space-3)}.council-page--detail{gap:0}.council-hall{display:flex;flex-direction:column;gap:var(--space-3);min-height:0;flex:1;overflow:hidden}.council-hall-bar{display:flex;align-items:center;gap:var(--space-2)}.council-hall-search{flex:1;display:flex;align-items:center;gap:var(--space-2);padding:8px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);max-width:520px}.council-hall-search:focus-within{border-color:var(--color-accent)}.council-hall-search input{flex:1;border:0;outline:none;background:transparent;color:var(--color-text);font-size:var(--font-size-sm);min-width:0}.council-hall-filter{padding:8px var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);font-size:var(--font-size-xs)}.council-hall-count{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-left:auto}.council-hall-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-3);overflow-y:auto;padding:2px}.council-hall-card{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);text-align:left;cursor:pointer;color:var(--color-text);min-height:140px;transition:border-color var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.council-hall-card:hover{border-color:var(--color-accent);transform:translateY(-2px);box-shadow:var(--shadow-md)}.council-hall-card-head{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2)}.council-hall-status{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;font-weight:var(--font-weight-semibold);padding:1px 6px;border-radius:var(--radius-full)}.council-hall-status-dot{width:6px;height:6px;border-radius:50%}.council-hall-status--complete{background:#1eae531f;color:#188c42}.council-hall-status--complete .council-hall-status-dot{background:#1eae53}.council-hall-status--running{background:#2a6df41f;color:#0b4bcb}.council-hall-status--running .council-hall-status-dot{background:#2a6df4}.council-hall-status--synth{background:var(--color-accent-soft);color:var(--color-accent)}.council-hall-status--synth .council-hall-status-dot{background:var(--color-accent)}.council-hall-status--pending{background:var(--color-bg-tertiary);color:var(--color-text-secondary)}.council-hall-status--pending .council-hall-status-dot{background:var(--color-text-tertiary)}.council-hall-rounds{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.council-hall-topic{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);line-height:1.4;color:var(--color-text);margin:0;flex:1;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.council-hall-foot{display:flex;align-items:center;gap:var(--space-2);margin-top:auto}.council-hall-avatars{display:flex;align-items:center}.council-hall-avatar-wrap{display:inline-flex;margin-right:-6px;border:2px solid var(--color-bg);border-radius:50%;position:relative}.council-hall-avatar-more{margin-left:8px;font-family:var(--font-mono);font-size:10px;color:var(--color-text-tertiary)}.council-hall-date{margin-left:auto;font-family:var(--font-mono);font-size:10px;color:var(--color-text-tertiary)}.council-hall-promoted{font-size:14px}.council-empty{padding:var(--space-6);text-align:center;color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.council-detail{display:flex;flex-direction:column;gap:var(--space-2);flex:1;min-height:0}.council-detail-head{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding-bottom:var(--space-2)}.council-detail-back{display:inline-flex;align-items:center;gap:4px;padding:6px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast)}.council-detail-back:hover{border-color:var(--color-accent);background:var(--color-bg-secondary)}.council-detail-meta{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;font-size:var(--font-size-xs);color:var(--color-text-secondary)}.council-detail-rounds{font-family:var(--font-mono);color:var(--color-text-secondary)}.council-detail-date,.council-session-dot{color:var(--color-text-tertiary)}.council-session-id{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary);background:var(--color-bg-tertiary);padding:1px 6px;border:0;border-radius:var(--radius-sm);cursor:pointer}.council-session-id:hover{color:var(--color-text)}.council-detail-body{flex:1;min-height:0;overflow:auto;padding-top:var(--space-3)}.council-tabs{display:flex;gap:var(--space-1);border-bottom:1px solid var(--color-border)}.council-tab{padding:8px var(--space-4);border:0;border-bottom:2px solid transparent;background:transparent;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);cursor:pointer;margin-bottom:-1px;transition:color var(--transition-fast),border-color var(--transition-fast)}.council-tab:hover{color:var(--color-text)}.council-tab.is-active{color:var(--color-accent);border-bottom-color:var(--color-accent)}.council-ov{display:flex;flex-direction:column;gap:var(--space-4);max-width:960px;margin:0 auto;padding:var(--space-3) var(--space-2) var(--space-6)}.council-ov-label{font-family:var(--font-mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--color-accent);margin-bottom:6px}.council-ov-problem{padding:var(--space-3) var(--space-4);border-left:3px solid var(--color-accent);background:var(--color-accent-soft);border-radius:var(--radius-sm)}.council-ov-topic{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);line-height:1.4;color:var(--color-text);margin:0}.council-ov-promoted{display:inline-flex;align-items:center;gap:var(--space-1);margin-top:var(--space-2);font-size:var(--font-size-xs);color:#ab7a07}.council-ov-verdict{padding:var(--space-4);border:1px solid var(--color-border);border-top:3px solid var(--color-accent);border-radius:var(--radius-sm);background:var(--color-bg)}.council-ov-verdict-text{font-size:var(--font-size-base);line-height:1.6;color:var(--color-text)}.council-ov-verdict-text p{margin:0}.council-ov-verdict-text p+p{margin-top:var(--space-3)}.council-ov-verdict-text strong{font-weight:var(--font-weight-semibold);color:var(--color-text)}.council-ov-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:6px}.council-ov-sections{display:flex;flex-direction:column;gap:var(--space-3)}.council-ov-card{padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg)}.council-ov-card h3{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-secondary);margin:0 0 var(--space-2)}.council-ov-card--why h3{color:var(--color-accent)}.council-ov-card--minority{border-color:#a73cdd4d;background:#a73cdd05}.council-ov-card--risks{border-color:#f59f0a4d;background:#f59f0a05}.council-ov-pending{padding:var(--space-4);text-align:center;border:1px dashed var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-secondary);color:var(--color-text-secondary)}.council-ov-pending p{margin:0 0 var(--space-3)}.council-ov-appendix{padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-secondary)}.council-ov-appendix summary{cursor:pointer;font-family:var(--font-mono);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);letter-spacing:.08em;text-transform:uppercase}.council-ov-appendix[open] summary{margin-bottom:var(--space-3)}.council-matrix{display:flex;flex-direction:column;gap:var(--space-2);height:100%}.council-matrix-bar{display:flex;align-items:center;gap:var(--space-3)}.council-matrix-search-input{flex:1;display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);max-width:480px}.council-matrix-search-input:focus-within{border-color:var(--color-accent)}.council-matrix-search-input input{flex:1;border:0;outline:none;background:transparent;color:var(--color-text);font-size:var(--font-size-sm);min-width:0}.council-matrix-search-icon{font-size:12px;color:var(--color-text-tertiary)}.council-matrix-search-clear{border:0;background:transparent;color:var(--color-text-tertiary);font-size:16px;cursor:pointer;padding:0 4px}.council-matrix-search-clear:hover{color:var(--color-text)}.council-matrix-count{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.council-matrix-scroll{flex:1;min-height:0;overflow:auto;padding:2px}.council-matrix-grid{display:grid;gap:6px;align-items:start}.council-matrix-corner{min-height:28px}.council-round-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:center;padding:4px var(--space-2);border-radius:var(--radius-sm);background:var(--color-bg-secondary);border:1px solid var(--color-border);font-family:var(--font-mono);font-size:10px;font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);letter-spacing:.08em;text-transform:uppercase}.council-round-head.is-done{background:#1eae530f;border-color:#1eae5333;color:#16833e}.council-round-head.is-running{background:#2a6df414;border-color:#2a6df44d;color:#0a47c2}.council-matrix-row-head{position:sticky;left:0;z-index:1;display:flex;align-items:center;gap:6px;padding:6px var(--space-2);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--radius-sm);min-width:180px;height:fit-content}.council-matrix-row-id{display:flex;flex-direction:column;gap:2px;min-width:0}.council-matrix-row-name{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:140px}.council-cell{display:flex;flex-direction:column;gap:6px;padding:8px var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);text-align:left;cursor:pointer;color:var(--color-text);min-height:56px;max-height:140px;overflow:hidden;position:relative;transition:border-color var(--transition-fast),opacity var(--transition-fast),max-height var(--transition-fast)}.council-cell:hover{border-color:var(--color-border-hover)}.council-cell.is-active{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent);max-height:none;background:var(--color-bg);grid-column:auto}.council-cell.is-dimmed{opacity:.25}.council-cell--empty{background:repeating-linear-gradient(135deg,transparent,transparent 6px,var(--color-bg-secondary) 6px,var(--color-bg-secondary) 12px);border-style:dashed;cursor:default;display:flex;align-items:center;justify-content:center;min-height:56px}.council-cell-empty-label{font-family:var(--font-mono);font-size:9px;color:var(--color-text-tertiary);letter-spacing:.08em}.council-cell-top{display:flex;align-items:center;justify-content:space-between;gap:6px}.council-cell-meta{font-family:var(--font-mono);font-size:9px;color:var(--color-text-tertiary)}.council-cell-exec{font-size:var(--font-size-xs);line-height:1.5;color:var(--color-text);margin:0;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden}.council-cell-full{display:flex;flex-direction:column;gap:var(--space-2);font-size:var(--font-size-xs);line-height:1.55}.council-cell-sub{display:flex;flex-direction:column;gap:4px}.council-cell-sub h5{font-family:var(--font-mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-tertiary);margin:0}.council-cell-sub-body p{margin:0 0 4px}.council-cell-sub-body p:last-child{margin-bottom:0}.council-cell-sub-body ul,.council-cell-sub-body ol{margin:0 0 4px;padding-left:var(--space-4)}.council-cell-sub-body li{margin-bottom:2px}.council-cell-sub-body strong{font-weight:var(--font-weight-semibold)}.council-cell-sub-body code{font-family:var(--font-mono);font-size:.92em;background:var(--color-bg-tertiary);padding:0 3px;border-radius:2px}.council-cell-react-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.council-cell-react-chip{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-bg-secondary);font-size:10px;color:var(--color-text)}.council-chip-pos{display:inline-flex;align-items:center;padding:1px 5px;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:9px;font-weight:var(--font-weight-bold);letter-spacing:.05em;line-height:1.4;background:var(--color-bg-tertiary);color:var(--color-text-secondary);border:1px solid var(--color-border)}.council-chip-pos--go{background:#1eae531a;color:#1a9948;border-color:#1eae534d}.council-chip-pos--defer{background:#f59f0a1a;color:#c47f08;border-color:#f59f0a4d}.council-chip-pos--hold{background:#ef43431a;color:#eb1414;border-color:#ef43434d}.council-chip-pos--pivot{background:#2a6df41a;color:#0c56e9;border-color:#2a6df44d}.council-transcript{display:flex;flex-direction:column;gap:var(--space-3);max-width:1000px;margin:0 auto;padding-bottom:var(--space-6)}.council-transcript-searchbar{display:flex;align-items:center;gap:var(--space-3)}.council-transcript-search{flex:1;display:flex;align-items:center;gap:var(--space-2);padding:6px var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);max-width:520px}.council-transcript-search input{flex:1;border:0;outline:none;background:transparent;color:var(--color-text);font-size:var(--font-size-sm);min-width:0}.council-transcript-count{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.council-transcript-body{display:flex;flex-direction:column;gap:var(--space-3)}.council-transcript-block{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);overflow:hidden}.council-transcript-block.is-highlighted{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent)}.council-transcript-block-head{display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);cursor:pointer;background:var(--color-bg-secondary)}.council-transcript-block-head:hover{background:var(--color-bg-tertiary)}.council-transcript-block-title{display:flex;align-items:center;gap:var(--space-2);min-width:0}.council-transcript-block-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text);margin:0 0 2px}.council-transcript-block-meta{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.council-transcript-chev{font-size:var(--font-size-lg);color:var(--color-text-tertiary);transition:transform var(--transition-fast)}.council-transcript-chev.is-open{transform:rotate(90deg)}.council-transcript-block-body{padding:var(--space-2) var(--space-3);display:flex;flex-direction:column;gap:var(--space-2);border-top:1px solid var(--color-border)}.council-sheet-section{display:flex;flex-direction:column;gap:var(--space-2)}.council-sheet-section h4{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-tertiary);margin:0}.council-sheet-prose{font-size:var(--font-size-xs);line-height:1.6;color:var(--color-text)}.council-sheet-prose p{margin:0 0 var(--space-2)}.council-sheet-prose p:last-child{margin-bottom:0}.council-sheet-prose ul,.council-sheet-prose ol{margin:0 0 var(--space-2);padding-left:var(--space-5)}.council-sheet-prose li{margin-bottom:2px}.council-sheet-prose code{font-family:var(--font-mono);font-size:.9em;background:var(--color-bg-tertiary);padding:1px 4px;border-radius:3px}.council-sheet-prose strong{font-weight:var(--font-weight-semibold)}.council-sheet-prose mark{background:#fad33859;color:var(--color-text);padding:0 2px;border-radius:2px}.council-sheet-empty{padding:var(--space-3);text-align:center;color:var(--color-text-tertiary);font-size:var(--font-size-sm);font-style:italic}.council-round-panel{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg-secondary);display:flex;flex-direction:column;gap:var(--space-2)}.council-round-panel-head{display:flex;justify-content:space-between;align-items:center}.council-round-panel-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text);margin:0}.council-round-sub{display:flex;flex-direction:column;gap:4px}.council-round-sub-title{font-family:var(--font-mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-tertiary);margin:0}.council-crosscontext{margin:0;padding:var(--space-2) var(--space-3);border-left:3px solid var(--color-accent);background:var(--color-accent-soft);border-radius:var(--radius-sm);font-size:var(--font-size-xs)}.council-crosscontext strong{display:block;margin-bottom:4px;font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--color-accent)}.council-research-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.council-research-list li{display:flex;justify-content:space-between;padding:4px var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);font-size:var(--font-size-xs)}.council-research-date{font-family:var(--font-mono);color:var(--color-text-tertiary)}.council-roundlog{text-align:left;padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg)}.council-avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);color:#fff;font-weight:var(--font-weight-bold);line-height:1;flex-shrink:0;box-shadow:inset 0 0 0 1px #fff3}.council-model-badge{display:inline-flex;align-items:center;padding:0 5px;border:1px solid;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:9px;font-weight:var(--font-weight-semibold);letter-spacing:.04em;line-height:1.5;text-transform:lowercase;white-space:nowrap}.council-aspect{font-family:var(--font-mono);font-size:9px;padding:0 5px;border-radius:var(--radius-sm);background:var(--color-bg-tertiary);color:var(--color-text-secondary);white-space:nowrap;line-height:1.5}.council-status{display:inline-flex;align-items:center;gap:4px;padding:1px var(--space-2);border-radius:var(--radius-full);font-family:var(--font-mono);font-size:10px;font-weight:var(--font-weight-medium);letter-spacing:.04em}.council-status--sm{font-size:10px}.council-status-dot{width:6px;height:6px;border-radius:50%}.council-status--running{background:#2a6df41f;color:#0b50da}.council-status--running .council-status-dot{background:#2a6df4}.council-status--complete{background:#1eae531f;color:#1a9948}.council-status--complete .council-status-dot{background:#1eae53}.council-status--synth{background:var(--color-accent-soft);color:var(--color-accent)}.council-status--synth .council-status-dot{background:var(--color-accent)}.council-status--pending{background:var(--color-bg-tertiary);color:var(--color-text-secondary)}.council-status--pending .council-status-dot{background:var(--color-text-tertiary)}.council-stat-tile{padding:4px 6px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);text-align:center}.council-stat-tile--warning{border-color:#f59f0a4d;background:#f59f0a0a}.council-stat-tile--dissent{border-color:#a73cdd4d;background:#a73cdd0a}.council-stat-tile--brand{border-color:var(--color-accent-soft);background:var(--color-accent-soft)}.council-stat-value{font-family:var(--font-mono);font-size:var(--font-size-base);font-weight:var(--font-weight-bold);color:var(--color-text);line-height:1}.council-stat-tile--warning .council-stat-value{color:#c47f08}.council-stat-tile--dissent .council-stat-value{color:#9725d0}.council-stat-tile--brand .council-stat-value{color:var(--color-accent)}.council-stat-label{font-family:var(--font-mono);font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-tertiary);margin-top:1px}.council-cite-chip{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-bg-secondary);font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--color-text);cursor:pointer;margin:0 2px;vertical-align:baseline}.council-cite-chip:hover{border-color:var(--color-accent);background:var(--color-accent-soft)}.council-cite-round{font-weight:var(--font-weight-bold);color:var(--color-accent)}.council-inline-slug{display:inline;padding:1px 6px;border-radius:var(--radius-sm);background:var(--color-accent-soft);color:var(--color-accent);font-family:var(--font-mono);font-size:11px;font-weight:var(--font-weight-semibold);border:1px solid var(--color-accent-soft);cursor:pointer;margin:0 1px;vertical-align:baseline}.council-inline-slug:hover{background:var(--color-accent-soft)}.council-citation-prose{line-height:1.75}@media(prefers-reduced-motion:reduce){.council-hall-card,.council-cell,.council-transcript-chev{transition:none!important;transform:none!important}}:root{--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 28px;--space-8: 32px;--space-10: 40px;--space-11: 44px;--space-12: 48px;--space-13: 52px;--space-16: 76px;--space-20: 80px;--space-24: 120px;--space-28: 144px;--font-family-display: "Plus Jakarta Sans", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Inter Variable", "Inter", "Segoe UI", Roboto, sans-serif;--font-family-text: "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-family: var(--font-family-text);--font-mono: "Sometype Mono", "JetBrains Mono", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--zoom: 1;--font-size-xs: calc(12px * var(--zoom));--font-size-sm: calc(14px * var(--zoom));--font-size-base: calc(16px * var(--zoom));--font-size-lg: calc(20px * var(--zoom));--font-size-xl: calc(26px * var(--zoom));--font-size-2xl: calc(40px * var(--zoom));--font-size-3xl: calc(52px * var(--zoom));--font-size-display: calc(76px * var(--zoom));--font-weight-light: 300;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-display: 1.05;--line-height-tight: 1.12;--line-height-snug: 1.14;--line-height-heading-sm: 1.18;--line-height-normal: 1.5;--line-height-relaxed: 1.43;--letter-spacing-display: -3.8px;--letter-spacing-heading-lg: -1.82px;--letter-spacing-heading: -1.6px;--letter-spacing-heading-sm: -1.19px;--letter-spacing-subheading: -.91px;--letter-spacing-tight: -.26px;--letter-spacing-body: -.26px;--letter-spacing-caption: -.14px;--radius-sm: 6px;--radius-md: 9px;--radius-lg: 12px;--radius-xl: 16px;--radius-2xl: 24px;--radius-full: 999px;--radius-nav: 9px;--color-ink: #292d34;--color-deep-space: #090c1d;--color-onyx: #202023;--color-graphite: #646464;--color-smoke: #b3b3b3;--color-ash: #e8e8e8;--color-snow: #ffffff;--color-fog: #e9ebf0;--color-tint-blue: #edf6fd;--color-deep-violet: #7b68ee;--color-vivid-purple: #6647f0;--color-rich-plum: #514b81;--color-electric-blue: #0091ff;--color-warm-coral: #ff5b36;--color-obsidian: #000000;--color-porcelain: #f7f8f8;--color-aether-blue: var(--color-electric-blue);--color-azure: var(--color-electric-blue);--color-cobalt-link: var(--color-deep-violet);--color-emerald: hsl(142 71% 40%);--color-cyan-spark: var(--color-electric-blue);--color-amethyst: var(--color-deep-violet);--color-caution: #ff7a00;--color-silver-mist: var(--color-ash);--color-slate: #474747;--color-citrus-finish: #dddc8c;--color-blush-finish: #e8d0d0;--color-indigo-finish: #596680;--color-silver-finish: #e3e4e5;--gradient-citrus: linear-gradient(184deg, #292d34 0%, #dfe74f 33%, #5e9c2a 66%, #0a8619 95%);--gradient-indigo: linear-gradient(184deg, #292d34 20%, #a8d3fb 43%, #0012f9 76%, #2535e2 95%);--gradient-blush: linear-gradient(184deg, #292d34 20%, #f3c4f6 43%, #f500b4 76%, #cc29bc 95%);--gradient-warm-fade: linear-gradient(rgba(246, 233, 232, 0), rgba(255, 91, 54, .23));--gradient-dark-onyx: linear-gradient(97deg, rgb(32, 32, 32) 43.17%, rgb(143, 143, 143) 110.86%);--color-brand-deep: var(--color-vivid-purple);--color-brand-mid: var(--color-deep-violet);--color-brand-vivid: var(--color-deep-violet);--color-brand-hot: var(--color-electric-blue);--gradient-brand: linear-gradient(135deg, #6647f0, #7b68ee);--gradient-brand-subtle: linear-gradient(135deg, rgba(123, 104, 238, .08), rgba(0, 145, 255, .08));--color-bg: var(--color-snow);--color-bg-secondary: var(--color-snow);--color-bg-tertiary: var(--color-fog);--color-bg-elevated: var(--color-snow);--color-text: var(--color-ink);--color-text-secondary: var(--color-graphite);--color-text-tertiary: var(--color-slate);--color-text-on-brand: var(--color-snow);--color-border: var(--color-ash);--color-border-hover: #d4d4d4;--color-border-focus: var(--color-deep-violet);--color-accent: var(--color-deep-violet);--color-accent-text: var(--color-snow);--color-accent-soft: rgba(123, 104, 238, .12);--color-success: hsl(142 71% 40%);--color-success-subtle: hsl(142 71% 95%);--color-warning: var(--color-caution);--color-warning-subtle: hsl(22 100% 95%);--color-error: hsl(0 72% 51%);--color-error-subtle: hsl(0 72% 96%);--color-priority-critical: hsl(0 72% 51%);--color-priority-high: var(--color-caution);--color-priority-medium: var(--color-graphite);--color-priority-low: var(--color-smoke);--color-urgency-critical: hsl(0 72% 51%);--color-urgency-high: var(--color-caution);--color-urgency-medium: var(--color-graphite);--color-urgency-low: var(--color-smoke);--color-quadrant-do: hsl(0 72% 51%);--color-quadrant-schedule: var(--color-deep-violet);--color-quadrant-delegate: var(--color-caution);--color-quadrant-eliminate: var(--color-graphite);--color-status-todo: var(--color-caution);--color-status-in-progress: var(--color-deep-violet);--color-status-in-review: var(--color-vivid-purple);--color-status-completed: hsl(142 71% 40%);--shadow-sm: rgba(13, 21, 48, .04) 0px 4px 4px 0px;--shadow-md: rgba(0, 0, 0, .1) 0px 1px 3px 0px, rgba(0, 0, 0, .1) 0px 1px 2px -1px;--shadow-lg: rgba(18, 43, 165, .04) 0px 1px 1px -.5px, rgba(18, 43, 165, .04) 0px 3px 3px -1.5px, rgba(18, 43, 165, .04) 0px 6px 6px -3px, rgba(18, 43, 165, .04) 0px 12px 12px -6px;--shadow-xl: rgba(0, 0, 0, .12) 0px 12px 32px -8px, rgba(0, 0, 0, .06) 0px 4px 12px -4px;--shadow-inset: inset 0 1px 2px rgba(0, 0, 0, .04);--shadow-glow: 0 0 0 3px rgba(123, 104, 238, .18);--glass-bg: rgba(255, 255, 255, .84);--glass-bg-hover: rgba(255, 255, 255, .94);--glass-border: rgba(232, 232, 232, .8);--glass-blur: blur(16px);--transition-fast: .12s ease;--transition-normal: .24s ease;--transition-slow: .4s ease;--transition-bounce: .5s cubic-bezier(.34, 1.56, .64, 1);--sidebar-width: 220px;--header-height: 52px;--page-max-width: 1200px;--card-padding: 12px}[data-theme=dark]{--color-bg: #14171f;--color-bg-secondary: #1c1f2a;--color-bg-tertiary: #2a2f3d;--color-bg-elevated: #1c1f2a;--color-text: #f5f6fa;--color-text-secondary: #c8ccd9;--color-text-tertiary: #9aa0b3;--color-text-on-brand: var(--color-snow);--color-border: #2f3445;--color-border-hover: #3d4358;--color-border-focus: #9d8cff;--color-accent: #9d8cff;--color-accent-text: var(--color-snow);--color-accent-soft: rgba(157, 140, 255, .18);--gradient-brand: linear-gradient(135deg, #6647f0, #9d8cff);--gradient-brand-subtle: linear-gradient(135deg, rgba(157, 140, 255, .16), rgba(0, 145, 255, .16));--color-success: hsl(142 71% 55%);--color-success-subtle: rgba(39, 200, 90, .14);--color-warning: #ffae3b;--color-warning-subtle: rgba(255, 174, 59, .14);--color-error: #ff5a5f;--color-error-subtle: rgba(255, 90, 95, .14);--color-caution: #ffae3b;--color-status-todo: #ffae3b;--color-status-in-progress: #9d8cff;--color-status-in-review: #c4b5fd;--color-status-completed: #4ade80;--color-priority-critical: #ff5a5f;--color-priority-high: #ffae3b;--color-priority-medium: #c8ccd9;--color-priority-low: #6e7388;--color-urgency-critical: #ff5a5f;--color-urgency-high: #ffae3b;--color-urgency-medium: #c8ccd9;--color-urgency-low: #6e7388;--color-quadrant-do: #ff5a5f;--color-quadrant-schedule: #9d8cff;--color-quadrant-delegate: #ffae3b;--color-quadrant-eliminate: #9aa0b3;--shadow-sm: rgba(0, 0, 0, .32) 0px 1px 2px 0px;--shadow-md: rgba(0, 0, 0, .4) 0px 2px 8px -2px, rgba(0, 0, 0, .28) 0px 1px 3px -1px;--shadow-lg: rgba(0, 0, 0, .5) 0px 8px 24px -8px, rgba(0, 0, 0, .32) 0px 4px 8px -4px;--shadow-xl: rgba(0, 0, 0, .6) 0px 16px 40px -12px, rgba(0, 0, 0, .4) 0px 6px 16px -6px;--shadow-inset: inset 0 1px 2px rgba(0, 0, 0, .32);--shadow-glow: 0 0 0 3px rgba(157, 140, 255, .28);--glass-bg: rgba(28, 31, 42, .78);--glass-bg-hover: rgba(28, 31, 42, .92);--glass-border: rgba(255, 255, 255, .08)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{font-family:var(--font-family);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text);background:var(--color-bg)}a{color:inherit;text-decoration:none}button{border:none;background:none;cursor:pointer;font:inherit;color:inherit}input,textarea,select{font:inherit;color:inherit}ul,ol{list-style:none}img,svg{display:block;max-width:100%}:focus-visible{outline:2px solid var(--color-border-focus);outline-offset:2px}html,body{font-family:var(--font-family);font-feature-settings:"calt" 0,"clig" 0,"liga" 0;letter-spacing:var(--letter-spacing-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{background-color:var(--color-bg);color:var(--color-text);overflow:hidden}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-border-hover)}::selection{background:var(--color-accent-soft);color:var(--color-text)}[data-theme=dark] ::selection{background:#9d8cff52;color:var(--color-snow)}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--radius-md)}button,input,textarea,select{font-family:inherit;letter-spacing:inherit}.page-title{font-family:var(--font-family-display);font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);line-height:var(--line-height-snug);letter-spacing:var(--letter-spacing-heading);margin-bottom:var(--space-5);color:var(--color-text)}[data-theme=dark] .page-title{color:var(--color-text)}.error-state{padding:var(--space-4);border-radius:var(--radius-md);background:var(--color-error-subtle);color:var(--color-error);border:1px solid var(--color-error);font-size:var(--font-size-sm)}.error-boundary{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;padding:var(--space-6);text-align:center;color:var(--color-text);background:var(--color-bg)}.error-boundary h1{font-size:var(--font-size-xl);margin-bottom:var(--space-3)}.error-boundary p{color:var(--color-text-secondary);margin-bottom:var(--space-4);max-width:480px;word-break:break-word}.error-boundary button{padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-accent-text);border:none;cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold)}.error-boundary button:hover{opacity:.9}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.mermaid-stage svg .node rect,.mermaid-stage svg .node polygon,.mermaid-stage svg .node path,.mermaid-stage svg .node circle{stroke-width:1.5px!important}.mermaid-stage svg .node.done>rect,.mermaid-stage svg .node.done>polygon,.mermaid-stage svg .node.done>path{fill:#dcfce7!important;stroke:#15803d!important}.mermaid-stage svg .node.done foreignObject *,.mermaid-stage svg .node.done text{color:#14532d!important;fill:#14532d!important}.mermaid-stage svg .node.active>rect,.mermaid-stage svg .node.active>polygon,.mermaid-stage svg .node.active>path{fill:#fef3c7!important;stroke:#a16207!important}.mermaid-stage svg .node.active foreignObject *,.mermaid-stage svg .node.active text{color:#713f12!important;fill:#713f12!important}.mermaid-stage svg .node.todo>rect,.mermaid-stage svg .node.todo>polygon,.mermaid-stage svg .node.todo>path{fill:#f3f4f6!important;stroke:#6b7280!important}.mermaid-stage svg .node.todo foreignObject *,.mermaid-stage svg .node.todo text{color:#374151!important;fill:#374151!important}.mermaid-stage svg .node.blocked>rect,.mermaid-stage svg .node.blocked>polygon,.mermaid-stage svg .node.blocked>path{fill:#fee2e2!important;stroke:#b91c1c!important}.mermaid-stage svg .node.blocked foreignObject *,.mermaid-stage svg .node.blocked text{color:#7f1d1d!important;fill:#7f1d1d!important}.mermaid-stage svg .cluster rect,.mermaid-stage svg .cluster polygon{fill:var(--color-bg-tertiary)!important;stroke:var(--color-border)!important;stroke-width:1px!important;rx:12!important;ry:12!important}.mermaid-stage svg .cluster-label foreignObject *,.mermaid-stage svg .cluster-label text{color:var(--color-text-secondary)!important;fill:var(--color-text-secondary)!important;font-weight:600!important}.mermaid-stage svg .edgeLabel,.mermaid-stage svg .edgeLabel rect,.mermaid-stage svg .edgeLabel foreignObject *,.mermaid-stage svg .edgeLabel text{background:var(--color-bg-secondary)!important;color:var(--color-text-secondary)!important;fill:var(--color-text-secondary)!important}.mermaid-stage svg .edgePath path{stroke:var(--color-text-tertiary)!important;stroke-width:1.5px!important}.mermaid-stage svg .arrowheadPath,.mermaid-stage svg .marker{fill:var(--color-text-tertiary)!important;stroke:var(--color-text-tertiary)!important}[data-theme=dark] .mermaid-stage svg .node.done>rect,[data-theme=dark] .mermaid-stage svg .node.done>polygon,[data-theme=dark] .mermaid-stage svg .node.done>path{fill:#4ade8029!important;stroke:#4ade80!important}[data-theme=dark] .mermaid-stage svg .node.done foreignObject *,[data-theme=dark] .mermaid-stage svg .node.done text{color:#86efac!important;fill:#86efac!important}[data-theme=dark] .mermaid-stage svg .node.active>rect,[data-theme=dark] .mermaid-stage svg .node.active>polygon,[data-theme=dark] .mermaid-stage svg .node.active>path{fill:#fbbf2429!important;stroke:#fbbf24!important}[data-theme=dark] .mermaid-stage svg .node.active foreignObject *,[data-theme=dark] .mermaid-stage svg .node.active text{color:#fcd34d!important;fill:#fcd34d!important}[data-theme=dark] .mermaid-stage svg .node.todo>rect,[data-theme=dark] .mermaid-stage svg .node.todo>polygon,[data-theme=dark] .mermaid-stage svg .node.todo>path{fill:#9aa0b31f!important;stroke:#6e7388!important}[data-theme=dark] .mermaid-stage svg .node.todo foreignObject *,[data-theme=dark] .mermaid-stage svg .node.todo text{color:#c8ccd9!important;fill:#c8ccd9!important}[data-theme=dark] .mermaid-stage svg .node.blocked>rect,[data-theme=dark] .mermaid-stage svg .node.blocked>polygon,[data-theme=dark] .mermaid-stage svg .node.blocked>path{fill:#f8717129!important;stroke:#f87171!important}[data-theme=dark] .mermaid-stage svg .node.blocked foreignObject *,[data-theme=dark] .mermaid-stage svg .node.blocked text{color:#fca5a5!important;fill:#fca5a5!important}.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>rect,.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>polygon,.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>path{fill:#ede9fe!important;stroke:#7b68ee!important}.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked) foreignObject *,.mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked) text{color:#5b21b6!important;fill:#5b21b6!important}[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>rect,[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>polygon,[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked)>path{fill:#9d8cff2e!important;stroke:#9d8cff!important}[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked) foreignObject *,[data-theme=dark] .mermaid-stage svg .node:not(.done):not(.active):not(.todo):not(.blocked) text{color:#c4b5fd!important;fill:#c4b5fd!important}@keyframes slide-up-fade{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.animate-stagger{animation:slide-up-fade .28s cubic-bezier(.4,0,.2,1) both}.animate-stagger-1{animation-delay:30ms}.animate-stagger-2{animation-delay:60ms}.animate-stagger-3{animation-delay:90ms}.animate-stagger-4{animation-delay:.12s}.animate-stagger-5{animation-delay:.15s}.animate-stagger-6{animation-delay:.18s}.animate-stagger-7{animation-delay:.21s}.animate-stagger-8{animation-delay:.24s}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{_ as a,l as s,I as n,e as i}from"./index-BHp63EMw.js";import{p}from"./wardley-RL74JXVD-BQdaLyVb.js";import"./min-BqXwiqEr.js";import"./_baseUniq-DpaDAx_H.js";var g={parse:a(async r=>{const e=await p("info",r);s.debug(e)},"parse")},v={version:"11.14.0"},d=a(()=>v.version,"getVersion"),m={getVersion:d},c=a((r,e,o)=>{s.debug(`rendering info diagram
|
|
2
|
+
`+r);const t=n(e);i(t,100,400,!0),t.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${o}`)},"draw"),l={draw:c},w={parser:g,db:m,renderer:l};export{w as diagram};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import{_ as o,c as ot,N as ut,I as dt,as as yt,z as ft,k as pt,p as it,a as gt,b as kt,g as wt,s as mt,q as _t,e as bt}from"./index-BHp63EMw.js";var tt=(function(){var e=o(function(M,t,s,i){for(s=s||{},i=M.length;i--;s[M[i]]=t);return s},"o"),h=[1,4],r=[1,14],a=[1,12],l=[1,13],y=[6,7,8],f=[1,20],d=[1,18],w=[1,19],c=[6,7,11],k=[1,6,13,14],g=[1,23],_=[1,24],x=[1,6,7,11,13,14],B={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ishikawa:4,spaceLines:5,SPACELINE:6,NL:7,ISHIKAWA:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,TEXT:14,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"ISHIKAWA",11:"EOF",13:"SPACELIST",14:"TEXT"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,1],[12,1],[12,1]],performAction:o(function(t,s,i,u,p,n,v){var m=n.length-1;switch(p){case 6:case 7:return u;case 15:u.addNode(n[m-1].length,n[m].trim());break;case 16:u.addNode(0,n[m].trim());break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:h},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:h},{6:r,7:[1,10],9:9,12:11,13:a,14:l},e(y,[2,3]),{1:[2,2]},e(y,[2,4]),e(y,[2,5]),{1:[2,6],6:r,12:15,13:a,14:l},{6:r,9:16,12:11,13:a,14:l},{6:f,7:d,10:17,11:w},e(c,[2,18],{14:[1,21]}),e(c,[2,16]),e(c,[2,17]),{6:f,7:d,10:22,11:w},{1:[2,7],6:r,12:15,13:a,14:l},e(k,[2,14],{7:g,11:_}),e(x,[2,8]),e(x,[2,9]),e(x,[2,10]),e(c,[2,15]),e(k,[2,13],{7:g,11:_}),e(x,[2,11]),e(x,[2,12])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(t,s){if(s.recoverable)this.trace(t);else{var i=new Error(t);throw i.hash=s,i}},"parseError"),parse:o(function(t){var s=this,i=[0],u=[],p=[null],n=[],v=this.table,m="",I=0,S=0,L=2,E=1,R=n.slice.call(arguments,1),b=Object.create(this.lexer),C={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(C.yy[z]=this.yy[z]);b.setInput(t,C.yy),C.yy.lexer=b,C.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var T=b.yylloc;n.push(T);var D=b.options&&b.options.ranges;typeof C.yy.parseError=="function"?this.parseError=C.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function F(N){i.length=i.length-2*N,p.length=p.length-N,n.length=n.length-N}o(F,"popStack");function j(){var N;return N=u.pop()||b.lex()||E,typeof N!="number"&&(N instanceof Array&&(u=N,N=u.pop()),N=s.symbols_[N]||N),N}o(j,"lex");for(var A,W,P,K,H={},X,V,et,Y;;){if(W=i[i.length-1],this.defaultActions[W]?P=this.defaultActions[W]:((A===null||typeof A>"u")&&(A=j()),P=v[W]&&v[W][A]),typeof P>"u"||!P.length||!P[0]){var Q="";Y=[];for(X in v[W])this.terminals_[X]&&X>L&&Y.push("'"+this.terminals_[X]+"'");b.showPosition?Q="Parse error on line "+(I+1)+`:
|
|
2
|
+
`+b.showPosition()+`
|
|
3
|
+
Expecting `+Y.join(", ")+", got '"+(this.terminals_[A]||A)+"'":Q="Parse error on line "+(I+1)+": Unexpected "+(A==E?"end of input":"'"+(this.terminals_[A]||A)+"'"),this.parseError(Q,{text:b.match,token:this.terminals_[A]||A,line:b.yylineno,loc:T,expected:Y})}if(P[0]instanceof Array&&P.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+A);switch(P[0]){case 1:i.push(A),p.push(b.yytext),n.push(b.yylloc),i.push(P[1]),A=null,S=b.yyleng,m=b.yytext,I=b.yylineno,T=b.yylloc;break;case 2:if(V=this.productions_[P[1]][1],H.$=p[p.length-V],H._$={first_line:n[n.length-(V||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(V||1)].first_column,last_column:n[n.length-1].last_column},D&&(H._$.range=[n[n.length-(V||1)].range[0],n[n.length-1].range[1]]),K=this.performAction.apply(H,[m,S,I,C.yy,P[1],p,n].concat(R)),typeof K<"u")return K;V&&(i=i.slice(0,-1*V*2),p=p.slice(0,-1*V),n=n.slice(0,-1*V)),i.push(this.productions_[P[1]][0]),p.push(H.$),n.push(H._$),et=v[i[i.length-2]][i[i.length-1]],i.push(et);break;case 3:return!0}}return!0},"parse")},O=(function(){var M={EOF:1,parseError:o(function(s,i){if(this.yy.parser)this.yy.parser.parseError(s,i);else throw new Error(s)},"parseError"),setInput:o(function(t,s){return this.yy=s||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var s=t.match(/(?:\r\n?|\n).*/g);return s?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},"input"),unput:o(function(t){var s=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-s),this.offset-=s;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===u.length?this.yylloc.first_column:0)+u[u.length-i.length].length-i[0].length:this.yylloc.first_column-s},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-s]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
|
+
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(t){this.unput(this.match.slice(t))},"less"),pastInput:o(function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var t=this.pastInput(),s=new Array(t.length+1).join("-");return t+this.upcomingInput()+`
|
|
5
|
+
`+s+"^"},"showPosition"),test_match:o(function(t,s){var i,u,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),u=t[0].match(/(?:\r\n?|\n).*/g),u&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,s,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var n in p)this[n]=p[n];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,s,i,u;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),n=0;n<p.length;n++)if(i=this._input.match(this.rules[p[n]]),i&&(!s||i[0].length>s[0].length)){if(s=i,u=n,this.options.backtrack_lexer){if(t=this.test_match(i,p[n]),t!==!1)return t;if(this._backtrack){s=!1;continue}else return!1}else if(!this.options.flex)break}return s?(t=this.test_match(s,p[u]),t!==!1?t:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
|
|
6
|
+
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var s=this.next();return s||this.lex()},"lex"),begin:o(function(s){this.conditionStack.push(s)},"begin"),popState:o(function(){var s=this.conditionStack.length-1;return s>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(s){return s=this.conditionStack.length-1-Math.abs(s||0),s>=0?this.conditionStack[s]:"INITIAL"},"topState"),pushState:o(function(s){this.begin(s)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(s,i,u,p){switch(u){case 0:return 6;case 1:return 8;case 2:return 8;case 3:return 6;case 4:return 7;case 5:return 13;case 6:return 14;case 7:return 11}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:ishikawa-beta\b)/i,/^(?:ishikawa\b)/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:[^\n]+)/i,/^(?:$)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return M})();B.lexer=O;function $(){this.yy={}}return o($,"Parser"),$.prototype=B,B.Parser=$,new $})();tt.parser=tt;var xt=tt,Z,vt=(Z=class{constructor(){this.stack=[],this.clear=this.clear.bind(this),this.addNode=this.addNode.bind(this),this.getRoot=this.getRoot.bind(this)}clear(){this.root=void 0,this.stack=[],this.baseLevel=void 0,ft()}getRoot(){return this.root}addNode(h,r){const a=pt.sanitizeText(r,ot());if(!this.root){this.root={text:a,children:[]},this.stack=[{level:0,node:this.root}],it(a);return}this.baseLevel??(this.baseLevel=h);let l=h-this.baseLevel+1;for(l<=0&&(l=1);this.stack.length>1&&this.stack[this.stack.length-1].level>=l;)this.stack.pop();const y=this.stack[this.stack.length-1].node,f={text:a,children:[]};y.children.push(f),this.stack.push({level:l,node:f})}getAccTitle(){return gt()}setAccTitle(h){kt(h)}getAccDescription(){return wt()}setAccDescription(h){mt(h)}getDiagramTitle(){return _t()}setDiagramTitle(h){it(h)}},o(Z,"IshikawaDB"),Z),St=14,G=250,$t=30,Et=60,At=5,ht=82*Math.PI/180,st=Math.cos(ht),nt=Math.sin(ht),at=o((e,h,r)=>{const a=e.node().getBBox(),l=a.width+h*2,y=a.height+h*2;bt(e,y,l,r),e.attr("viewBox",`${a.x-h} ${a.y-h} ${l} ${y}`)},"applyPaddedViewBox"),It=o((e,h,r,a)=>{var C,z;const y=a.db.getRoot();if(!y)return;const f=ot(),{look:d,handDrawnSeed:w,themeVariables:c}=f,k=ut(f.fontSize)[0]??St,g=d==="handDrawn",_=y.children??[],x=((C=f.ishikawa)==null?void 0:C.diagramPadding)??20,B=((z=f.ishikawa)==null?void 0:z.useMaxWidth)??!1,O=dt(h),$=O.append("g").attr("class","ishikawa"),M=g?yt.svg(O.node()):void 0,t=M?{roughSvg:M,seed:w??0,lineColor:(c==null?void 0:c.lineColor)??"#333",fillColor:(c==null?void 0:c.mainBkg)??"#fff"}:void 0,s=`ishikawa-arrow-${h}`;g||$.append("defs").append("marker").attr("id",s).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 Z").attr("class","ishikawa-arrow");let i=0,u=G;const p=g?void 0:U($,i,u,i,u,"ishikawa-spine");if(Lt($,i,u,y.text,k,t),!_.length){g&&U($,i,u,i,u,"ishikawa-spine",t),at(O,x,B);return}i-=20;const n=_.filter((T,D)=>D%2===0),v=_.filter((T,D)=>D%2===1),m=rt(n),I=rt(v),S=m.total+I.total;let L=G,E=G;if(S>0){const T=G*2,D=G*.3;L=Math.max(D,T*(m.total/S)),E=Math.max(D,T*(I.total/S))}const R=k*2;L=Math.max(L,m.max*R),E=Math.max(E,I.max*R),u=Math.max(L,G),p&&p.attr("y1",u).attr("y2",u),$.select(".ishikawa-head-group").attr("transform",`translate(0,${u})`);const b=Math.ceil(_.length/2);for(let T=0;T<b;T++){const D=$.append("g").attr("class","ishikawa-pair");for(const[F,j,A]of[[_[T*2],-1,L],[_[T*2+1],1,E]])F&&Nt(D,F,i,u,j,A,k,t);i=D.selectAll("text").nodes().reduce((F,j)=>Math.min(F,j.getBBox().x),1/0)}if(g)U($,i,u,0,u,"ishikawa-spine",t);else{p.attr("x1",i);const T=`url(#${s})`;$.selectAll("line.ishikawa-branch, line.ishikawa-sub-branch").attr("marker-start",T)}at(O,x,B)},"draw"),rt=o(e=>{const h=o(r=>r.children.reduce((a,l)=>a+1+h(l),0),"countDescendants");return e.reduce((r,a)=>{const l=h(a);return r.total+=l,r.max=Math.max(r.max,l),r},{total:0,max:0})},"sideStats"),Lt=o((e,h,r,a,l,y)=>{const f=Math.max(6,Math.floor(110/(l*.6))),d=e.append("g").attr("class","ishikawa-head-group").attr("transform",`translate(${h},${r})`),w=q(d,ct(a,f),0,0,"ishikawa-head-label","start",l),c=w.node().getBBox(),k=Math.max(60,c.width+6),g=Math.max(40,c.height*2+40),_=`M 0 ${-g/2} L 0 ${g/2} Q ${k*2.4} 0 0 ${-g/2} Z`;if(y){const x=y.roughSvg.path(_,{roughness:1.5,seed:y.seed,fill:y.fillColor,fillStyle:"hachure",fillWeight:2.5,hachureGap:5,stroke:y.lineColor,strokeWidth:2});d.insert(()=>x,":first-child").attr("class","ishikawa-head")}else d.insert("path",":first-child").attr("class","ishikawa-head").attr("d",_);w.attr("transform",`translate(${(k-c.width)/2-c.x+3},${-c.y-c.height/2})`)},"drawHead"),Tt=o((e,h)=>{const r=[],a=[],l=o((y,f,d)=>{const w=h===-1?[...y].reverse():y;for(const c of w){const k=r.length,g=c.children??[];r.push({depth:d,text:ct(c.text,15),parentIndex:f,childCount:g.length}),d%2===0?(a.push(k),g.length&&l(g,k,d+1)):(g.length&&l(g,k,d+1),a.push(k))}},"walk");return l(e,-1,2),{entries:r,yOrder:a}},"flattenTree"),Mt=o((e,h,r,a,l,y,f)=>{const d=e.append("g").attr("class","ishikawa-label-group"),c=q(d,h,r,a+11*l,"ishikawa-label cause","middle",y).node().getBBox();if(f){const k=f.roughSvg.rectangle(c.x-20,c.y-2,c.width+40,c.height+4,{roughness:1.5,seed:f.seed,fill:f.fillColor,fillStyle:"hachure",fillWeight:2.5,hachureGap:5,stroke:f.lineColor,strokeWidth:2});d.insert(()=>k,":first-child").attr("class","ishikawa-label-box")}else d.insert("rect",":first-child").attr("class","ishikawa-label-box").attr("x",c.x-20).attr("y",c.y-2).attr("width",c.width+40).attr("height",c.height+4)},"drawCauseLabel"),J=o((e,h,r,a,l,y)=>{const f=Math.sqrt(a*a+l*l);if(f===0)return;const d=a/f,w=l/f,c=6,k=-w*c,g=d*c,_=h,x=r,B=`M ${_} ${x} L ${_-d*c*2+k} ${x-w*c*2+g} L ${_-d*c*2-k} ${x-w*c*2-g} Z`,O=y.roughSvg.path(B,{roughness:1,seed:y.seed,fill:y.lineColor,fillStyle:"solid",stroke:y.lineColor,strokeWidth:1});e.append(()=>O)},"drawArrowMarker"),Nt=o((e,h,r,a,l,y,f,d)=>{const w=h.children??[],c=y*(w.length?1:.2),k=-st*c,g=nt*c*l,_=r+k,x=a+g;if(U(e,r,a,_,x,"ishikawa-branch",d),d&&J(e,r,a,r-_,a-x,d),Mt(e,h.text,_,x,l,f,d),!w.length)return;const{entries:B,yOrder:O}=Tt(w,l),$=B.length,M=new Array($);for(const[p,n]of O.entries())M[n]=a+g*((p+1)/($+1));const t=new Map;t.set(-1,{x0:r,y0:a,x1:_,y1:x,childCount:w.length,childrenDrawn:0});const s=-st,i=nt*l,u=l<0?"ishikawa-label up":"ishikawa-label down";for(const[p,n]of B.entries()){const v=M[p],m=t.get(n.parentIndex),I=e.append("g").attr("class","ishikawa-sub-group");let S=0,L=0,E=0;if(n.depth%2===0){const R=m.y1-m.y0;S=lt(m.x0,m.x1,R?(v-m.y0)/R:.5),L=v,E=S-(n.childCount>0?Et+n.childCount*At:$t),U(I,S,v,E,v,"ishikawa-sub-branch",d),d&&J(I,S,v,1,0,d),q(I,n.text,E,v,"ishikawa-label align","end",f)}else{const R=m.childrenDrawn++;S=lt(m.x0,m.x1,(m.childCount-R)/(m.childCount+1)),L=m.y0,E=S+s*((v-L)/i),U(I,S,L,E,v,"ishikawa-sub-branch",d),d&&J(I,S,L,S-E,L-v,d),q(I,n.text,E,v,u,"end",f)}n.childCount>0&&t.set(p,{x0:S,y0:L,x1:E,y1:v,childCount:n.childCount,childrenDrawn:0})}},"drawBranch"),Pt=o(e=>e.split(/<br\s*\/?>|\n/),"splitLines"),ct=o((e,h)=>{if(e.length<=h)return e;const r=[];for(const a of e.split(/\s+/)){const l=r.length-1;l>=0&&r[l].length+1+a.length<=h?r[l]+=" "+a:r.push(a)}return r.join(`
|
|
7
|
+
`)},"wrapText"),q=o((e,h,r,a,l,y,f)=>{const d=Pt(h),w=f*1.05,c=e.append("text").attr("class",l).attr("text-anchor",y).attr("x",r).attr("y",a-(d.length-1)*w/2);for(const[k,g]of d.entries())c.append("tspan").attr("x",r).attr("dy",k===0?0:w).text(g);return c},"drawMultilineText"),lt=o((e,h,r)=>e+(h-e)*r,"lerp"),U=o((e,h,r,a,l,y,f)=>{if(f){const d=f.roughSvg.line(h,r,a,l,{roughness:1.5,seed:f.seed,stroke:f.lineColor,strokeWidth:2});e.append(()=>d).attr("class",y);return}return e.append("line").attr("class",y).attr("x1",h).attr("y1",r).attr("x2",a).attr("y2",l)},"drawLine"),Bt={draw:It},Dt=o(e=>`
|
|
8
|
+
.ishikawa .ishikawa-spine,
|
|
9
|
+
.ishikawa .ishikawa-branch,
|
|
10
|
+
.ishikawa .ishikawa-sub-branch {
|
|
11
|
+
stroke: ${e.lineColor};
|
|
12
|
+
stroke-width: 2;
|
|
13
|
+
fill: none;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.ishikawa .ishikawa-sub-branch {
|
|
17
|
+
stroke-width: 1;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.ishikawa .ishikawa-arrow {
|
|
21
|
+
fill: ${e.lineColor};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.ishikawa .ishikawa-head {
|
|
25
|
+
fill: ${e.mainBkg};
|
|
26
|
+
stroke: ${e.lineColor};
|
|
27
|
+
stroke-width: 2;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.ishikawa .ishikawa-label-box {
|
|
31
|
+
fill: ${e.mainBkg};
|
|
32
|
+
stroke: ${e.lineColor};
|
|
33
|
+
stroke-width: 2;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.ishikawa text {
|
|
37
|
+
font-family: ${e.fontFamily};
|
|
38
|
+
font-size: ${e.fontSize};
|
|
39
|
+
fill: ${e.textColor};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ishikawa .ishikawa-head-label {
|
|
43
|
+
font-weight: 600;
|
|
44
|
+
text-anchor: middle;
|
|
45
|
+
dominant-baseline: middle;
|
|
46
|
+
font-size: 14px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.ishikawa .ishikawa-label {
|
|
50
|
+
text-anchor: end;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.ishikawa .ishikawa-label.cause {
|
|
54
|
+
text-anchor: middle;
|
|
55
|
+
dominant-baseline: middle;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.ishikawa .ishikawa-label.align {
|
|
59
|
+
text-anchor: end;
|
|
60
|
+
dominant-baseline: middle;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.ishikawa .ishikawa-label.up {
|
|
64
|
+
dominant-baseline: baseline;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.ishikawa .ishikawa-label.down {
|
|
68
|
+
dominant-baseline: hanging;
|
|
69
|
+
}
|
|
70
|
+
`,"getStyles"),Ot=Dt,Rt={parser:xt,get db(){return new vt},renderer:Bt,styles:Ot};export{Rt as diagram};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import{g as gt}from"./chunk-FMBD7UC4-BprbGSJw.js";import{a as mt,g as lt,h as xt,d as kt}from"./chunk-YZCP3GAM-DtMk33tU.js";import{g as _t,s as vt,a as bt,b as wt,q as Tt,p as St,_ as s,c as R,d as X,e as $t,z as Mt}from"./index-BHp63EMw.js";import{d as it}from"./arc-JvK3Ik1p.js";var U=(function(){var t=s(function(h,r,n,l){for(n=n||{},l=h.length;l--;n[h[l]]=r);return n},"o"),e=[6,8,10,11,12,14,16,17,18],a=[1,9],f=[1,10],i=[1,11],u=[1,12],p=[1,13],o=[1,14],g={trace:s(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:s(function(r,n,l,y,d,c,v){var k=c.length-1;switch(d){case 1:return c[k-1];case 2:this.$=[];break;case 3:c[k-1].push(c[k]),this.$=c[k-1];break;case 4:case 5:this.$=c[k];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(c[k].substr(6)),this.$=c[k].substr(6);break;case 9:this.$=c[k].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=c[k].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(c[k].substr(8)),this.$=c[k].substr(8);break;case 13:y.addTask(c[k-1],c[k]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:a,12:f,14:i,16:u,17:p,18:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:a,12:f,14:i,16:u,17:p,18:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:s(function(r,n){if(n.recoverable)this.trace(r);else{var l=new Error(r);throw l.hash=n,l}},"parseError"),parse:s(function(r){var n=this,l=[0],y=[],d=[null],c=[],v=this.table,k="",C=0,Q=0,yt=2,D=1,dt=c.slice.call(arguments,1),_=Object.create(this.lexer),I={yy:{}};for(var O in this.yy)Object.prototype.hasOwnProperty.call(this.yy,O)&&(I.yy[O]=this.yy[O]);_.setInput(r,I.yy),I.yy.lexer=_,I.yy.parser=this,typeof _.yylloc>"u"&&(_.yylloc={});var Y=_.yylloc;c.push(Y);var ft=_.options&&_.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pt(w){l.length=l.length-2*w,d.length=d.length-w,c.length=c.length-w}s(pt,"popStack");function tt(){var w;return w=y.pop()||_.lex()||D,typeof w!="number"&&(w instanceof Array&&(y=w,w=y.pop()),w=n.symbols_[w]||w),w}s(tt,"lex");for(var b,A,T,q,F={},N,M,et,z;;){if(A=l[l.length-1],this.defaultActions[A]?T=this.defaultActions[A]:((b===null||typeof b>"u")&&(b=tt()),T=v[A]&&v[A][b]),typeof T>"u"||!T.length||!T[0]){var H="";z=[];for(N in v[A])this.terminals_[N]&&N>yt&&z.push("'"+this.terminals_[N]+"'");_.showPosition?H="Parse error on line "+(C+1)+`:
|
|
2
|
+
`+_.showPosition()+`
|
|
3
|
+
Expecting `+z.join(", ")+", got '"+(this.terminals_[b]||b)+"'":H="Parse error on line "+(C+1)+": Unexpected "+(b==D?"end of input":"'"+(this.terminals_[b]||b)+"'"),this.parseError(H,{text:_.match,token:this.terminals_[b]||b,line:_.yylineno,loc:Y,expected:z})}if(T[0]instanceof Array&&T.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+b);switch(T[0]){case 1:l.push(b),d.push(_.yytext),c.push(_.yylloc),l.push(T[1]),b=null,Q=_.yyleng,k=_.yytext,C=_.yylineno,Y=_.yylloc;break;case 2:if(M=this.productions_[T[1]][1],F.$=d[d.length-M],F._$={first_line:c[c.length-(M||1)].first_line,last_line:c[c.length-1].last_line,first_column:c[c.length-(M||1)].first_column,last_column:c[c.length-1].last_column},ft&&(F._$.range=[c[c.length-(M||1)].range[0],c[c.length-1].range[1]]),q=this.performAction.apply(F,[k,Q,C,I.yy,T[1],d,c].concat(dt)),typeof q<"u")return q;M&&(l=l.slice(0,-1*M*2),d=d.slice(0,-1*M),c=c.slice(0,-1*M)),l.push(this.productions_[T[1]][0]),d.push(F.$),c.push(F._$),et=v[l[l.length-2]][l[l.length-1]],l.push(et);break;case 3:return!0}}return!0},"parse")},m=(function(){var h={EOF:1,parseError:s(function(n,l){if(this.yy.parser)this.yy.parser.parseError(n,l);else throw new Error(n)},"parseError"),setInput:s(function(r,n){return this.yy=n||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:s(function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var n=r.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},"input"),unput:s(function(r){var n=r.length,l=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var d=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===y.length?this.yylloc.first_column:0)+y[y.length-l.length].length-l[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[d[0],d[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},"unput"),more:s(function(){return this._more=!0,this},"more"),reject:s(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
|
+
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:s(function(r){this.unput(this.match.slice(r))},"less"),pastInput:s(function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:s(function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:s(function(){var r=this.pastInput(),n=new Array(r.length+1).join("-");return r+this.upcomingInput()+`
|
|
5
|
+
`+n+"^"},"showPosition"),test_match:s(function(r,n){var l,y,d;if(this.options.backtrack_lexer&&(d={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(d.yylloc.range=this.yylloc.range.slice(0))),y=r[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+r[0].length},this.yytext+=r[0],this.match+=r[0],this.matches=r,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(r[0].length),this.matched+=r[0],l=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),l)return l;if(this._backtrack){for(var c in d)this[c]=d[c];return!1}return!1},"test_match"),next:s(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var r,n,l,y;this._more||(this.yytext="",this.match="");for(var d=this._currentRules(),c=0;c<d.length;c++)if(l=this._input.match(this.rules[d[c]]),l&&(!n||l[0].length>n[0].length)){if(n=l,y=c,this.options.backtrack_lexer){if(r=this.test_match(l,d[c]),r!==!1)return r;if(this._backtrack){n=!1;continue}else return!1}else if(!this.options.flex)break}return n?(r=this.test_match(n,d[y]),r!==!1?r:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
|
|
6
|
+
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:s(function(){var n=this.next();return n||this.lex()},"lex"),begin:s(function(n){this.conditionStack.push(n)},"begin"),popState:s(function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:s(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:s(function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},"topState"),pushState:s(function(n){this.begin(n)},"pushState"),stateStackSize:s(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:s(function(n,l,y,d){switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return h})();g.lexer=m;function x(){this.yy={}}return s(x,"Parser"),x.prototype=g,g.Parser=x,new x})();U.parser=U;var Et=U,V="",J=[],L=[],B=[],Ct=s(function(){J.length=0,L.length=0,V="",B.length=0,Mt()},"clear"),Pt=s(function(t){V=t,J.push(t)},"addSection"),It=s(function(){return J},"getSections"),At=s(function(){let t=rt();const e=100;let a=0;for(;!t&&a<e;)t=rt(),a++;return L.push(...B),L},"getTasks"),Ft=s(function(){const t=[];return L.forEach(a=>{a.people&&t.push(...a.people)}),[...new Set(t)].sort()},"updateActors"),Vt=s(function(t,e){const a=e.substr(1).split(":");let f=0,i=[];a.length===1?(f=Number(a[0]),i=[]):(f=Number(a[0]),i=a[1].split(","));const u=i.map(o=>o.trim()),p={section:V,type:V,people:u,task:t,score:f};B.push(p)},"addTask"),Rt=s(function(t){const e={section:V,type:V,description:t,task:t,classes:[]};L.push(e)},"addTaskOrg"),rt=s(function(){const t=s(function(a){return B[a].processed},"compileTask");let e=!0;for(const[a,f]of B.entries())t(a),e=e&&f.processed;return e},"compileTasks"),Lt=s(function(){return Ft()},"getActors"),nt={getConfig:s(()=>R().journey,"getConfig"),clear:Ct,setDiagramTitle:St,getDiagramTitle:Tt,setAccTitle:wt,getAccTitle:bt,setAccDescription:vt,getAccDescription:_t,addSection:Pt,getSections:It,getTasks:At,addTask:Vt,addTaskOrg:Rt,getActors:Lt},Bt=s(t=>`.label {
|
|
7
|
+
font-family: ${t.fontFamily};
|
|
8
|
+
color: ${t.textColor};
|
|
9
|
+
}
|
|
10
|
+
.mouth {
|
|
11
|
+
stroke: #666;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
line {
|
|
15
|
+
stroke: ${t.textColor}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.legend {
|
|
19
|
+
fill: ${t.textColor};
|
|
20
|
+
font-family: ${t.fontFamily};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.label text {
|
|
24
|
+
fill: #333;
|
|
25
|
+
}
|
|
26
|
+
.label {
|
|
27
|
+
color: ${t.textColor}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.face {
|
|
31
|
+
${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};
|
|
32
|
+
stroke: #999;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.node rect,
|
|
36
|
+
.node circle,
|
|
37
|
+
.node ellipse,
|
|
38
|
+
.node polygon,
|
|
39
|
+
.node path {
|
|
40
|
+
fill: ${t.mainBkg};
|
|
41
|
+
stroke: ${t.nodeBorder};
|
|
42
|
+
stroke-width: 1px;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.node .label {
|
|
46
|
+
text-align: center;
|
|
47
|
+
}
|
|
48
|
+
.node.clickable {
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.arrowheadPath {
|
|
53
|
+
fill: ${t.arrowheadColor};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.edgePath .path {
|
|
57
|
+
stroke: ${t.lineColor};
|
|
58
|
+
stroke-width: 1.5px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.flowchart-link {
|
|
62
|
+
stroke: ${t.lineColor};
|
|
63
|
+
fill: none;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.edgeLabel {
|
|
67
|
+
background-color: ${t.edgeLabelBackground};
|
|
68
|
+
rect {
|
|
69
|
+
opacity: 0.5;
|
|
70
|
+
}
|
|
71
|
+
text-align: center;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.cluster rect {
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.cluster text {
|
|
78
|
+
fill: ${t.titleColor};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
div.mermaidTooltip {
|
|
82
|
+
position: absolute;
|
|
83
|
+
text-align: center;
|
|
84
|
+
max-width: 200px;
|
|
85
|
+
padding: 2px;
|
|
86
|
+
font-family: ${t.fontFamily};
|
|
87
|
+
font-size: 12px;
|
|
88
|
+
background: ${t.tertiaryColor};
|
|
89
|
+
border: 1px solid ${t.border2};
|
|
90
|
+
border-radius: 2px;
|
|
91
|
+
pointer-events: none;
|
|
92
|
+
z-index: 100;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.task-type-0, .section-type-0 {
|
|
96
|
+
${t.fillType0?`fill: ${t.fillType0}`:""};
|
|
97
|
+
}
|
|
98
|
+
.task-type-1, .section-type-1 {
|
|
99
|
+
${t.fillType0?`fill: ${t.fillType1}`:""};
|
|
100
|
+
}
|
|
101
|
+
.task-type-2, .section-type-2 {
|
|
102
|
+
${t.fillType0?`fill: ${t.fillType2}`:""};
|
|
103
|
+
}
|
|
104
|
+
.task-type-3, .section-type-3 {
|
|
105
|
+
${t.fillType0?`fill: ${t.fillType3}`:""};
|
|
106
|
+
}
|
|
107
|
+
.task-type-4, .section-type-4 {
|
|
108
|
+
${t.fillType0?`fill: ${t.fillType4}`:""};
|
|
109
|
+
}
|
|
110
|
+
.task-type-5, .section-type-5 {
|
|
111
|
+
${t.fillType0?`fill: ${t.fillType5}`:""};
|
|
112
|
+
}
|
|
113
|
+
.task-type-6, .section-type-6 {
|
|
114
|
+
${t.fillType0?`fill: ${t.fillType6}`:""};
|
|
115
|
+
}
|
|
116
|
+
.task-type-7, .section-type-7 {
|
|
117
|
+
${t.fillType0?`fill: ${t.fillType7}`:""};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.actor-0 {
|
|
121
|
+
${t.actor0?`fill: ${t.actor0}`:""};
|
|
122
|
+
}
|
|
123
|
+
.actor-1 {
|
|
124
|
+
${t.actor1?`fill: ${t.actor1}`:""};
|
|
125
|
+
}
|
|
126
|
+
.actor-2 {
|
|
127
|
+
${t.actor2?`fill: ${t.actor2}`:""};
|
|
128
|
+
}
|
|
129
|
+
.actor-3 {
|
|
130
|
+
${t.actor3?`fill: ${t.actor3}`:""};
|
|
131
|
+
}
|
|
132
|
+
.actor-4 {
|
|
133
|
+
${t.actor4?`fill: ${t.actor4}`:""};
|
|
134
|
+
}
|
|
135
|
+
.actor-5 {
|
|
136
|
+
${t.actor5?`fill: ${t.actor5}`:""};
|
|
137
|
+
}
|
|
138
|
+
${gt()}
|
|
139
|
+
`,"getStyles"),jt=Bt,K=s(function(t,e){return kt(t,e)},"drawRect"),Nt=s(function(t,e){const f=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function u(g){const m=it().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);g.append("path").attr("class","mouth").attr("d",m).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}s(u,"smile");function p(g){const m=it().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);g.append("path").attr("class","mouth").attr("d",m).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}s(p,"sad");function o(g){g.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return s(o,"ambivalent"),e.score>3?u(i):e.score<3?p(i):o(i),f},"drawFace"),ot=s(function(t,e){const a=t.append("circle");return a.attr("cx",e.cx),a.attr("cy",e.cy),a.attr("class","actor-"+e.pos),a.attr("fill",e.fill),a.attr("stroke",e.stroke),a.attr("r",e.r),a.class!==void 0&&a.attr("class",a.class),e.title!==void 0&&a.append("title").text(e.title),a},"drawCircle"),ct=s(function(t,e){return xt(t,e)},"drawText"),zt=s(function(t,e){function a(i,u,p,o,g){return i+","+u+" "+(i+p)+","+u+" "+(i+p)+","+(u+o-g)+" "+(i+p-g*1.2)+","+(u+o)+" "+i+","+(u+o)}s(a,"genPoints");const f=t.append("polygon");f.attr("points",a(e.x,e.y,50,20,7)),f.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,ct(t,e)},"drawLabel"),Wt=s(function(t,e,a){const f=t.append("g"),i=lt();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=a.width*e.taskCount+a.diagramMarginX*(e.taskCount-1),i.height=a.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,K(f,i),ht(a)(e.text,f,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},a,e.colour)},"drawSection"),Z=-1,Ot=s(function(t,e,a,f){const i=e.x+a.width/2,u=t.append("g");Z++,u.append("line").attr("id",f+"-task"+Z).attr("x1",i).attr("y1",e.y).attr("x2",i).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Nt(u,{cx:i,cy:300+(5-e.score)*30,score:e.score});const o=lt();o.x=e.x,o.y=e.y,o.fill=e.fill,o.width=a.width,o.height=a.height,o.class="task task-type-"+e.num,o.rx=3,o.ry=3,K(u,o);let g=e.x+14;e.people.forEach(m=>{const x=e.actors[m].color,h={cx:g,cy:e.y,r:7,fill:x,stroke:"#000",title:m,pos:e.actors[m].position};ot(u,h),g+=10}),ht(a)(e.task,u,o.x,o.y,o.width,o.height,{class:"task"},a,e.colour)},"drawTask"),Yt=s(function(t,e){mt(t,e)},"drawBackgroundRect"),ht=(function(){function t(i,u,p,o,g,m,x,h){const r=u.append("text").attr("x",p+g/2).attr("y",o+m/2+5).style("font-color",h).style("text-anchor","middle").text(i);f(r,x)}s(t,"byText");function e(i,u,p,o,g,m,x,h,r){const{taskFontSize:n,taskFontFamily:l}=h,y=i.split(/<br\s*\/?>/gi);for(let d=0;d<y.length;d++){const c=d*n-n*(y.length-1)/2,v=u.append("text").attr("x",p+g/2).attr("y",o).attr("fill",r).style("text-anchor","middle").style("font-size",n).style("font-family",l);v.append("tspan").attr("x",p+g/2).attr("dy",c).text(y[d]),v.attr("y",o+m/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),f(v,x)}}s(e,"byTspan");function a(i,u,p,o,g,m,x,h){const r=u.append("switch"),l=r.append("foreignObject").attr("x",p).attr("y",o).attr("width",g).attr("height",m).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");l.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,r,p,o,g,m,x,h),f(l,x)}s(a,"byFo");function f(i,u){for(const p in u)p in u&&i.attr(p,u[p])}return s(f,"_setTextAttrs"),function(i){return i.textPlacement==="fo"?a:i.textPlacement==="old"?t:e}})(),qt=s(function(t,e){Z=-1,t.append("defs").append("marker").attr("id",e+"-arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},"initGraphics"),j={drawRect:K,drawCircle:ot,drawSection:Wt,drawText:ct,drawLabel:zt,drawTask:Ot,drawBackgroundRect:Yt,initGraphics:qt},Ht=s(function(t){Object.keys(t).forEach(function(a){$[a]=t[a]})},"setConf"),E={},W=0;function ut(t){const e=R().journey,a=e.maxLabelWidth;W=0;let f=60;Object.keys(E).forEach(i=>{const u=E[i].color,p={cx:20,cy:f,r:7,fill:u,stroke:"#000",pos:E[i].position};j.drawCircle(t,p);let o=t.append("text").attr("visibility","hidden").text(i);const g=o.node().getBoundingClientRect().width;o.remove();let m=[];if(g<=a)m=[i];else{const x=i.split(" ");let h="";o=t.append("text").attr("visibility","hidden"),x.forEach(r=>{const n=h?`${h} ${r}`:r;if(o.text(n),o.node().getBoundingClientRect().width>a){if(h&&m.push(h),h=r,o.text(r),o.node().getBoundingClientRect().width>a){let y="";for(const d of r)y+=d,o.text(y+"-"),o.node().getBoundingClientRect().width>a&&(m.push(y.slice(0,-1)+"-"),y=d);h=y}}else h=n}),h&&m.push(h),o.remove()}m.forEach((x,h)=>{const r={x:40,y:f+7+h*20,fill:"#666",text:x,textMargin:e.boxTextMargin??5},l=j.drawText(t,r).node().getBoundingClientRect().width;l>W&&l>e.leftMargin-l&&(W=l)}),f+=Math.max(20,m.length*20)})}s(ut,"drawActorLegend");var $=R().journey,P=0,Xt=s(function(t,e,a,f){const i=R(),u=i.journey.titleColor,p=i.journey.titleFontSize,o=i.journey.titleFontFamily,g=i.securityLevel;let m;g==="sandbox"&&(m=X("#i"+e));const x=g==="sandbox"?X(m.nodes()[0].contentDocument.body):X("body");S.init();const h=x.select("#"+e);j.initGraphics(h,e);const r=f.db.getTasks(),n=f.db.getDiagramTitle(),l=f.db.getActors();for(const C in E)delete E[C];let y=0;l.forEach(C=>{E[C]={color:$.actorColours[y%$.actorColours.length],position:y},y++}),ut(h),P=$.leftMargin+W,S.insert(0,0,P,Object.keys(E).length*50),Gt(h,r,0,e);const d=S.getBounds();n&&h.append("text").text(n).attr("x",P).attr("font-size",p).attr("font-weight","bold").attr("y",25).attr("fill",u).attr("font-family",o);const c=d.stopy-d.starty+2*$.diagramMarginY,v=P+d.stopx+2*$.diagramMarginX;$t(h,c,v,$.useMaxWidth),h.append("line").attr("x1",P).attr("y1",$.height*4).attr("x2",v-P-4).attr("y2",$.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#"+e+"-arrowhead)");const k=n?70:0;h.attr("viewBox",`${d.startx} -25 ${v} ${c+k}`),h.attr("preserveAspectRatio","xMinYMin meet"),h.attr("height",c+k+25)},"draw"),S={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:s(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:s(function(t,e,a,f){t[e]===void 0?t[e]=a:t[e]=f(a,t[e])},"updateVal"),updateBounds:s(function(t,e,a,f){const i=R().journey,u=this;let p=0;function o(g){return s(function(x){p++;const h=u.sequenceItems.length-p+1;u.updateVal(x,"starty",e-h*i.boxMargin,Math.min),u.updateVal(x,"stopy",f+h*i.boxMargin,Math.max),u.updateVal(S.data,"startx",t-h*i.boxMargin,Math.min),u.updateVal(S.data,"stopx",a+h*i.boxMargin,Math.max),g!=="activation"&&(u.updateVal(x,"startx",t-h*i.boxMargin,Math.min),u.updateVal(x,"stopx",a+h*i.boxMargin,Math.max),u.updateVal(S.data,"starty",e-h*i.boxMargin,Math.min),u.updateVal(S.data,"stopy",f+h*i.boxMargin,Math.max))},"updateItemBounds")}s(o,"updateFn"),this.sequenceItems.forEach(o())},"updateBounds"),insert:s(function(t,e,a,f){const i=Math.min(t,a),u=Math.max(t,a),p=Math.min(e,f),o=Math.max(e,f);this.updateVal(S.data,"startx",i,Math.min),this.updateVal(S.data,"starty",p,Math.min),this.updateVal(S.data,"stopx",u,Math.max),this.updateVal(S.data,"stopy",o,Math.max),this.updateBounds(i,p,u,o)},"insert"),bumpVerticalPos:s(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:s(function(){return this.verticalPos},"getVerticalPos"),getBounds:s(function(){return this.data},"getBounds")},G=$.sectionFills,st=$.sectionColours,Gt=s(function(t,e,a,f){const i=R().journey;let u="";const p=i.height*2+i.diagramMarginY,o=a+p;let g=0,m="#CCC",x="black",h=0;for(const[r,n]of e.entries()){if(u!==n.section){m=G[g%G.length],h=g%G.length,x=st[g%st.length];let y=0;const d=n.section;for(let v=r;v<e.length&&e[v].section==d;v++)y=y+1;const c={x:r*i.taskMargin+r*i.width+P,y:50,text:n.section,fill:m,num:h,colour:x,taskCount:y};j.drawSection(t,c,i),u=n.section,g++}const l=n.people.reduce((y,d)=>(E[d]&&(y[d]=E[d]),y),{});n.x=r*i.taskMargin+r*i.width+P,n.y=o,n.width=i.diagramMarginX,n.height=i.diagramMarginY,n.colour=x,n.fill=m,n.num=h,n.actors=l,j.drawTask(t,n,i,f),S.insert(n.x,n.y,n.x+n.width+i.taskMargin,450)}},"drawTasks"),at={setConf:Ht,draw:Xt},Qt={parser:Et,db:nt,renderer:at,styles:jt,init:s(t=>{at.setConf(t.journey),nt.clear()},"init")};export{Qt as diagram};
|