noteloom 0.3.2 → 0.4.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.
Files changed (104) hide show
  1. package/README.md +344 -53
  2. package/bin/noteloom.mjs +139 -0
  3. package/dist/canvas.cjs +2 -0
  4. package/dist/canvas.cjs.map +1 -0
  5. package/dist/canvas.d.ts +2 -0
  6. package/dist/canvas.js +5 -0
  7. package/dist/canvas.js.map +1 -0
  8. package/dist/collab.cjs +2 -0
  9. package/dist/collab.cjs.map +1 -0
  10. package/dist/collab.d.ts +19 -0
  11. package/dist/collab.js +379 -0
  12. package/dist/collab.js.map +1 -0
  13. package/dist/comments.cjs +2 -0
  14. package/dist/comments.cjs.map +1 -0
  15. package/dist/comments.d.ts +17 -0
  16. package/dist/comments.js +19 -0
  17. package/dist/comments.js.map +1 -0
  18. package/dist/index.cjs +2 -0
  19. package/dist/index.cjs.map +1 -0
  20. package/dist/index.d.ts +392 -32
  21. package/dist/index.js +3983 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/persistence.cjs +2 -0
  24. package/dist/persistence.cjs.map +1 -0
  25. package/dist/persistence.d.ts +11 -0
  26. package/dist/persistence.js +12 -0
  27. package/dist/persistence.js.map +1 -0
  28. package/dist/shared/CommentAvatar-TKqsM8vG.js +53 -0
  29. package/dist/shared/CommentAvatar-TKqsM8vG.js.map +1 -0
  30. package/dist/shared/CommentAvatar-V457IgoQ.cjs +2 -0
  31. package/dist/shared/CommentAvatar-V457IgoQ.cjs.map +1 -0
  32. package/dist/shared/CommentThreadCard-CAJ3oPdr.cjs +2 -0
  33. package/dist/shared/CommentThreadCard-CAJ3oPdr.cjs.map +1 -0
  34. package/dist/shared/CommentThreadCard-Cxf8GwHJ.js +213 -0
  35. package/dist/shared/CommentThreadCard-Cxf8GwHJ.js.map +1 -0
  36. package/dist/shared/CommentsPanel-BwVVyMOC.js +76 -0
  37. package/dist/shared/CommentsPanel-BwVVyMOC.js.map +1 -0
  38. package/dist/shared/CommentsPanel-CES4uzye.cjs +2 -0
  39. package/dist/shared/CommentsPanel-CES4uzye.cjs.map +1 -0
  40. package/dist/shared/VersionHistory-Bg6fufP5.js +1120 -0
  41. package/dist/shared/VersionHistory-Bg6fufP5.js.map +1 -0
  42. package/dist/shared/VersionHistory-DELa2Wbq.cjs +12 -0
  43. package/dist/shared/VersionHistory-DELa2Wbq.cjs.map +1 -0
  44. package/dist/shared/VoiceListeningIndicator-BOfVmLK0.js +338 -0
  45. package/dist/shared/VoiceListeningIndicator-BOfVmLK0.js.map +1 -0
  46. package/dist/shared/VoiceListeningIndicator-DNX8JlQM.cjs +2 -0
  47. package/dist/shared/VoiceListeningIndicator-DNX8JlQM.cjs.map +1 -0
  48. package/dist/shared/fieldRegistry-BoYyW3GH.cjs +2 -0
  49. package/dist/shared/fieldRegistry-BoYyW3GH.cjs.map +1 -0
  50. package/dist/shared/fieldRegistry-PjJWXFoB.js +223 -0
  51. package/dist/shared/fieldRegistry-PjJWXFoB.js.map +1 -0
  52. package/dist/shared/icons-C1_s0jKK.js +4269 -0
  53. package/dist/shared/icons-C1_s0jKK.js.map +1 -0
  54. package/dist/shared/icons-DtCsXuU6.cjs +3531 -0
  55. package/dist/shared/icons-DtCsXuU6.cjs.map +1 -0
  56. package/dist/shared/index-B9jyyL8u.js +2145 -0
  57. package/dist/shared/index-B9jyyL8u.js.map +1 -0
  58. package/dist/shared/index-D9WEXpYM.cjs +2 -0
  59. package/dist/shared/index-D9WEXpYM.cjs.map +1 -0
  60. package/dist/shared/indexedDbPersistence-BKlGPFTP.js +112 -0
  61. package/dist/shared/indexedDbPersistence-BKlGPFTP.js.map +1 -0
  62. package/dist/shared/indexedDbPersistence-BWJ1h5Vp.cjs +2 -0
  63. package/dist/shared/indexedDbPersistence-BWJ1h5Vp.cjs.map +1 -0
  64. package/dist/shared/leafBlockFactory-A9eUhSe-.js +335 -0
  65. package/dist/shared/leafBlockFactory-A9eUhSe-.js.map +1 -0
  66. package/dist/shared/leafBlockFactory-Dp382eP8.cjs +2 -0
  67. package/dist/shared/leafBlockFactory-Dp382eP8.cjs.map +1 -0
  68. package/dist/shared/serialize-DWEfk0vU.cjs +3 -0
  69. package/dist/shared/serialize-DWEfk0vU.cjs.map +1 -0
  70. package/dist/shared/serialize-T9Odwx24.js +86 -0
  71. package/dist/shared/serialize-T9Odwx24.js.map +1 -0
  72. package/dist/shared/starter-kit-CY5wzYDf.js +4980 -0
  73. package/dist/shared/starter-kit-CY5wzYDf.js.map +1 -0
  74. package/dist/shared/starter-kit-lPN-NpJ5.cjs +27 -0
  75. package/dist/shared/starter-kit-lPN-NpJ5.cjs.map +1 -0
  76. package/dist/shared/usePopoverEdgeClamp-CDG26jBM.cjs +2 -0
  77. package/dist/shared/usePopoverEdgeClamp-CDG26jBM.cjs.map +1 -0
  78. package/dist/shared/usePopoverEdgeClamp-gmFm0CnI.js +109 -0
  79. package/dist/shared/usePopoverEdgeClamp-gmFm0CnI.js.map +1 -0
  80. package/dist/shared/useServiceWorkerUpdate-BduabXv6.js +94 -0
  81. package/dist/shared/useServiceWorkerUpdate-BduabXv6.js.map +1 -0
  82. package/dist/shared/useServiceWorkerUpdate-DQboGesi.cjs +2 -0
  83. package/dist/shared/useServiceWorkerUpdate-DQboGesi.cjs.map +1 -0
  84. package/dist/starter-kit.cjs +2 -0
  85. package/dist/starter-kit.cjs.map +1 -0
  86. package/dist/starter-kit.d.ts +9 -0
  87. package/dist/starter-kit.js +10 -0
  88. package/dist/starter-kit.js.map +1 -0
  89. package/dist/style.css +3529 -3200
  90. package/dist/versions.cjs +2 -0
  91. package/dist/versions.cjs.map +1 -0
  92. package/dist/versions.d.ts +11 -0
  93. package/dist/versions.js +13 -0
  94. package/dist/versions.js.map +1 -0
  95. package/dist/voice.cjs +2 -0
  96. package/dist/voice.cjs.map +1 -0
  97. package/dist/voice.d.ts +7 -0
  98. package/dist/voice.js +8 -0
  99. package/dist/voice.js.map +1 -0
  100. package/package.json +159 -92
  101. package/dist/noteloom.cjs +0 -3209
  102. package/dist/noteloom.cjs.map +0 -1
  103. package/dist/noteloom.es.js +0 -14622
  104. package/dist/noteloom.es.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons-DtCsXuU6.cjs","sources":["../../src/style.css?raw","../../src/react/injectDefaultStyles.js","../../src/react/EditorProvider.jsx","../../src/store/operations.js","../../src/utils/idGen.js","../../src/react/icons.jsx"],"sourcesContent":["export default \"/*\\n * noteloom's default theme — minimal, clean, modern SaaS-adjacent.\\n *\\n * Ships as plain CSS custom properties on :root (not scoped to a wrapper\\n * element) deliberately: several of this package's own pieces — Select's\\n * popover, SlashMenu, FloatingToolbar, the table header menu, the block\\n * gutter/range menus, Modal — are portaled to document.body, so they are\\n * NOT DOM descendants of whatever element renders the editor itself.\\n * Scoping variables to a wrapper class would silently fail to reach any\\n * of those. `--noteloom-*` is a distinctive enough prefix that defining\\n * these on :root won't collide with a host app's own custom properties.\\n *\\n * This file is auto-injected at runtime by <EditorProvider> (see\\n * react/injectDefaultStyles.js) — you do NOT need to import this\\n * yourself. It's still published standalone at `noteloom/style.css` for:\\n * - passing `theme=\\\"none\\\"` to <EditorProvider> and importing this\\n * explicitly instead (e.g. to control load order, or for SSR/CSP\\n * setups where runtime <style> injection isn't allowed)\\n * - copying as a starting point for your own from-scratch theme\\n *\\n * Retheme by overriding these variables in your own CSS (after the\\n * default theme loads) — every rule below reads from them, nothing is\\n * hardcoded. Override individual `.be-*` classes too, same as any other\\n * library's default styles.\\n */\\n\\n:root {\\n --noteloom-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Inter, sans-serif;\\n --noteloom-text: #0f172a;\\n --noteloom-text-muted: #64748b;\\n --noteloom-text-faint: #94a3b8;\\n --noteloom-bg: #ffffff;\\n --noteloom-bg-subtle: #f8fafc;\\n --noteloom-bg-hover: #f1f5f9;\\n --noteloom-border: #e2e8f0;\\n --noteloom-accent: #6366f1;\\n --noteloom-accent-text: #ffffff;\\n --noteloom-accent-soft: rgba(99, 102, 241, 0.1);\\n --noteloom-accent-soft-hover: rgba(99, 102, 241, 0.16);\\n --noteloom-danger: #dc2626;\\n --noteloom-danger-soft: #fef2f2;\\n --noteloom-radius-sm: 6px;\\n --noteloom-radius-md: 8px;\\n --noteloom-radius-lg: 12px;\\n --noteloom-radius-xl: 16px;\\n --noteloom-shadow: 0 12px 24px -8px rgba(15, 23, 42, 0.12), 0 4px 8px -4px rgba(15, 23, 42, 0.06);\\n --noteloom-code-bg: #0f172a;\\n --noteloom-code-text: #e2e8f0;\\n}\\n\\n@media (prefers-color-scheme: dark) {\\n :root {\\n --noteloom-text: #f1f5f9;\\n --noteloom-text-muted: #94a3b8;\\n --noteloom-text-faint: #64748b;\\n --noteloom-bg: #1c1932;\\n --noteloom-bg-subtle: rgba(255, 255, 255, 0.03);\\n --noteloom-bg-hover: rgba(255, 255, 255, 0.06);\\n --noteloom-border: rgba(255, 255, 255, 0.1);\\n --noteloom-accent-soft: rgba(99, 102, 241, 0.18);\\n --noteloom-accent-soft-hover: rgba(99, 102, 241, 0.26);\\n --noteloom-danger-soft: rgba(220, 38, 38, 0.15);\\n --noteloom-code-bg: #13111f;\\n }\\n}\\n\\n/* Explicit overrides win either direction — a host toggling dark mode via\\n a class rather than the OS setting can set [data-theme=\\\"dark\\\"/\\\"light\\\"]\\n on any ancestor (e.g. <html>), overriding the media query above. */\\n[data-theme='dark'] {\\n --noteloom-text: #f1f5f9;\\n --noteloom-text-muted: #94a3b8;\\n --noteloom-text-faint: #64748b;\\n --noteloom-bg: #1c1932;\\n --noteloom-bg-subtle: rgba(255, 255, 255, 0.03);\\n --noteloom-bg-hover: rgba(255, 255, 255, 0.06);\\n --noteloom-border: rgba(255, 255, 255, 0.1);\\n --noteloom-accent-soft: rgba(99, 102, 241, 0.18);\\n --noteloom-accent-soft-hover: rgba(99, 102, 241, 0.26);\\n --noteloom-danger-soft: rgba(220, 38, 38, 0.15);\\n --noteloom-code-bg: #13111f;\\n}\\n\\n[data-theme='light'] {\\n --noteloom-text: #0f172a;\\n --noteloom-text-muted: #64748b;\\n --noteloom-text-faint: #94a3b8;\\n --noteloom-bg: #ffffff;\\n --noteloom-bg-subtle: #f8fafc;\\n --noteloom-bg-hover: #f1f5f9;\\n --noteloom-border: #e2e8f0;\\n --noteloom-accent-soft: rgba(99, 102, 241, 0.1);\\n --noteloom-accent-soft-hover: rgba(99, 102, 241, 0.16);\\n --noteloom-danger-soft: #fef2f2;\\n --noteloom-code-bg: #0f172a;\\n}\\n\\n.be-root {\\n font-family: var(--noteloom-font);\\n color: var(--noteloom-text);\\n}\\n\\n.be-editable {\\n /* Block-level and full-width so the whole line (including the blank\\n trailing space after short text, and an empty line's full height) is\\n part of the actual contentEditable hit-test box. Left inline/sized to\\n content, a click on that blank area lands on the non-editable wrapper\\n div instead of this element: the browser's native \\\"nothing focused\\n yet\\\" resolution still finds it on a first click, but re-clicking the\\n same dead-zone point while this element already holds the selection\\n collapses/clears it instead, since there's nothing here to re-anchor\\n the caret onto. */\\n display: block;\\n width: 100%;\\n min-height: 1em;\\n outline: none;\\n}\\n\\n/* A run with marks.commentIds set (see src/comments/commentMarks.js) --\\n presence/absence only, no per-comment value to vary the color by.\\n cursor: pointer hints that it opens CommentPopover on click. */\\n.be-comment-highlight {\\n background: rgba(234, 179, 8, 0.2);\\n border-bottom: 2px solid rgba(234, 179, 8, 0.6);\\n cursor: pointer;\\n}\\n\\n/* Echoes a hover from the panel/popover back onto the actual text -- see useHoveredComment. */\\n.be-comment-highlight-active {\\n background: rgba(234, 179, 8, 0.4);\\n}\\n\\n/* --- basic leaf blocks --- */\\n\\n.be-paragraph {\\n position: relative;\\n margin: 0.25rem 0;\\n line-height: 1.6;\\n outline: none;\\n}\\n\\n.be-heading {\\n position: relative;\\n font-weight: 600;\\n margin: 1.25rem 0 0.25rem;\\n outline: none;\\n letter-spacing: -0.01em;\\n}\\n\\n/* Explicit per-level sizing, each in its own overridable class — without\\n this, h1/h2/h3 only differ via the browser's own UA-stylesheet defaults\\n (inconsistent across browsers, and not something a host can target\\n independently without fighting tag-selector specificity). Override just\\n one level with `.be-heading-1 { font-size: ...; }` in your own CSS, same\\n as any other .be-* class. */\\n.be-heading-1 {\\n font-size: 1.9em;\\n}\\n\\n.be-heading-2 {\\n font-size: 1.5em;\\n}\\n\\n.be-heading-3 {\\n font-size: 1.2em;\\n}\\n\\n.be-divider {\\n border: none;\\n border-top: 1px solid var(--noteloom-border);\\n margin: 1.5em 0;\\n cursor: default;\\n}\\n\\n.be-blockquote {\\n position: relative;\\n margin: 0.5em 0;\\n padding-left: 0.9em;\\n border-left: 3px solid var(--noteloom-border);\\n color: var(--noteloom-text-muted);\\n outline: none;\\n}\\n\\n.be-blockquote[dir='rtl'] {\\n padding-left: 0;\\n padding-right: 0.9em;\\n border-left: none;\\n border-right: 3px solid var(--noteloom-border);\\n}\\n\\n/* --- callout --- */\\n\\n.be-callout {\\n position: relative;\\n display: flex;\\n gap: 0.7em;\\n align-items: flex-start;\\n background: var(--noteloom-bg-subtle);\\n border-radius: var(--noteloom-radius-lg);\\n padding: 0.9em 1em;\\n margin: 0.5em 0;\\n}\\n\\n.be-callout[data-color='gray'] {\\n background: rgba(148, 163, 184, 0.16);\\n}\\n.be-callout[data-color='blue'] {\\n background: rgba(99, 102, 241, 0.12);\\n}\\n.be-callout[data-color='green'] {\\n background: rgba(34, 197, 94, 0.14);\\n}\\n.be-callout[data-color='yellow'] {\\n background: rgba(234, 179, 8, 0.16);\\n}\\n.be-callout[data-color='orange'] {\\n background: rgba(249, 115, 22, 0.14);\\n}\\n.be-callout[data-color='red'] {\\n background: rgba(239, 68, 68, 0.13);\\n}\\n.be-callout[data-color='purple'] {\\n background: rgba(168, 85, 247, 0.13);\\n}\\n.be-callout[data-color='pink'] {\\n background: rgba(236, 72, 153, 0.13);\\n}\\n\\n.be-callout-icon-wrap {\\n flex: none;\\n}\\n\\n.be-callout-icon-input,\\n.be-callout-icon {\\n width: 2em;\\n height: 2em;\\n border: none;\\n background: var(--noteloom-bg);\\n border-radius: var(--noteloom-radius-md);\\n box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);\\n font-size: 1.15em;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n cursor: pointer;\\n}\\n\\n.be-callout-icon-input {\\n outline: none;\\n text-align: center;\\n cursor: text;\\n}\\n\\n.be-callout-content {\\n flex: 1;\\n min-width: 0;\\n padding-right: 1.6em; /* keeps text from running under the color-swatch trigger */\\n}\\n\\n/* First child reads as the card's title; every child after it is the\\n description — see CalloutBlock.jsx's comment for why this is a CSS\\n convention over the content, not a separate title/description field. */\\n.be-callout-content > :first-child {\\n font-weight: 600;\\n}\\n\\n.be-callout-content > :not(:first-child) {\\n color: var(--noteloom-text-muted);\\n font-size: 0.92em;\\n}\\n\\n.be-callout-color-wrap {\\n position: absolute;\\n top: 0.6em;\\n right: 0.6em;\\n}\\n\\n.be-callout-color-trigger {\\n border: none;\\n background: none;\\n padding: 3px;\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n display: flex;\\n}\\n\\n.be-callout-color-trigger:hover {\\n background: rgba(15, 23, 42, 0.06);\\n}\\n\\n.be-callout-color-dot {\\n width: 12px;\\n height: 12px;\\n border-radius: 50%;\\n border: 1px solid rgba(15, 23, 42, 0.12);\\n}\\n\\n.be-callout-color-dot-gray {\\n background: #94a3b8;\\n}\\n.be-callout-color-dot-blue {\\n background: #6366f1;\\n}\\n.be-callout-color-dot-green {\\n background: #22c55e;\\n}\\n.be-callout-color-dot-yellow {\\n background: #eab308;\\n}\\n.be-callout-color-dot-orange {\\n background: #f97316;\\n}\\n.be-callout-color-dot-red {\\n background: #ef4444;\\n}\\n.be-callout-color-dot-purple {\\n background: #a855f7;\\n}\\n.be-callout-color-dot-pink {\\n background: #ec4899;\\n}\\n\\n.be-callout-color-picker {\\n position: absolute;\\n top: 100%;\\n right: 0;\\n margin-top: 4px;\\n z-index: 1000;\\n display: grid;\\n grid-template-columns: repeat(4, 1fr);\\n gap: 4px;\\n padding: 6px;\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n box-shadow: var(--noteloom-shadow);\\n}\\n\\n.be-callout-color-option {\\n width: 22px;\\n height: 22px;\\n border-radius: 50%;\\n border: 2px solid transparent;\\n cursor: pointer;\\n padding: 0;\\n}\\n\\n.be-callout-color-option-gray {\\n background: #94a3b8;\\n}\\n.be-callout-color-option-blue {\\n background: #6366f1;\\n}\\n.be-callout-color-option-green {\\n background: #22c55e;\\n}\\n.be-callout-color-option-yellow {\\n background: #eab308;\\n}\\n.be-callout-color-option-orange {\\n background: #f97316;\\n}\\n.be-callout-color-option-red {\\n background: #ef4444;\\n}\\n.be-callout-color-option-purple {\\n background: #a855f7;\\n}\\n.be-callout-color-option-pink {\\n background: #ec4899;\\n}\\n\\n.be-callout-color-option-active {\\n border-color: var(--noteloom-text);\\n}\\n\\n/* --- code block --- */\\n\\n.be-code-block {\\n margin: 0.6em 0;\\n border-radius: var(--noteloom-radius-lg);\\n overflow: hidden;\\n background: var(--noteloom-code-bg);\\n color: var(--noteloom-code-text);\\n}\\n\\n.be-code-block-header {\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n gap: 4px;\\n padding: 6px 10px;\\n background: rgba(255, 255, 255, 0.04);\\n}\\n\\n.be-code-block-delete {\\n appearance: none;\\n -webkit-appearance: none;\\n border: none;\\n outline: none;\\n background: transparent;\\n box-shadow: none;\\n color: var(--noteloom-text-faint);\\n width: 24px;\\n height: 24px;\\n margin: 0;\\n padding: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n}\\n\\n.be-code-block-delete:hover {\\n background: rgba(255, 255, 255, 0.1);\\n color: #fca5a5;\\n}\\n\\n.be-code-block-language {\\n background: transparent;\\n color: var(--noteloom-text-faint);\\n border: none;\\n font-size: 0.8rem;\\n cursor: pointer;\\n}\\n\\n.be-code-block-pre {\\n margin: 0;\\n padding: 0.9em 1em;\\n overflow-x: auto;\\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\\n font-size: 0.88rem;\\n outline: none;\\n}\\n\\n.be-code-block-pre code {\\n position: relative;\\n display: block;\\n}\\n\\n.be-code-block-body {\\n display: flex;\\n align-items: stretch;\\n}\\n\\n.be-code-block-gutter {\\n flex-shrink: 0;\\n display: flex;\\n flex-direction: column;\\n padding: 0.9em 0.6em 0.9em 1em;\\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\\n font-size: 0.88rem;\\n line-height: 1.5;\\n color: var(--noteloom-text-faint);\\n text-align: right;\\n user-select: none;\\n border-right: 1px solid rgba(255, 255, 255, 0.08);\\n}\\n\\n.be-code-block-body .be-code-block-pre {\\n flex: 1;\\n min-width: 0;\\n line-height: 1.5;\\n}\\n\\n/* --- list items (bulleted / numbered / to-do / toggle) --- */\\n\\n.be-list-item {\\n margin: 0.1rem 0;\\n}\\n\\n.be-list-item-row {\\n display: flex;\\n align-items: flex-start;\\n gap: 0.4em;\\n}\\n\\n.be-list-checkbox {\\n margin-top: 0.3em;\\n width: 16px;\\n height: 16px;\\n flex: none;\\n accent-color: var(--noteloom-accent);\\n cursor: pointer;\\n}\\n\\n.be-list-toggle-marker {\\n border: none;\\n background: none;\\n cursor: pointer;\\n padding: 2px;\\n margin-top: 0.1em;\\n color: var(--noteloom-text-faint);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 30px;\\n width: 30px;\\n border-radius: var(--noteloom-radius-sm);\\n}\\n\\n.be-list-toggle-marker:hover {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-list-marker {\\n min-width: 1.2em;\\n margin-top: 0.1em;\\n text-align: center;\\n color: var(--noteloom-text-faint);\\n user-select: none;\\n flex: none;\\n}\\n\\n.be-list-item-title {\\n position: relative;\\n flex: 1;\\n min-width: 0;\\n outline: none;\\n line-height: 1.6;\\n}\\n\\n.be-list-item-children {\\n margin-left: 2.1em;\\n}\\n\\n/* --- toggle heading --- */\\n\\n.be-toggle-heading {\\n margin: 1.25rem 0 0.25rem;\\n}\\n\\n.be-toggle-heading-row {\\n display: flex;\\n align-items: center;\\n gap: 0.15em;\\n}\\n\\n.be-toggle-heading-marker {\\n border: none;\\n background: none;\\n cursor: pointer;\\n color: var(--noteloom-text-faint);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 30px;\\n height: 30px;\\n border-radius: var(--noteloom-radius-sm);\\n}\\n\\n.be-toggle-heading-marker:hover {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-toggle-heading-title {\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.be-toggle-heading-children {\\n margin-left: 2.1em;\\n}\\n\\n/* --- layout (multi-column) --- */\\n\\n.be-layout {\\n margin: 0.6em 0;\\n}\\n\\n.be-layout-column {\\n flex: 1;\\n min-width: 0;\\n}\\n\\n/* --- button block --- */\\n\\n.be-button-block {\\n margin: 0.6em 0;\\n}\\n\\n.be-button-block-pill {\\n display: inline-flex;\\n align-items: center;\\n gap: 0.4em;\\n border-radius: var(--noteloom-radius-md);\\n padding: 0.5em 1em;\\n color: var(--noteloom-accent-text);\\n}\\n\\n.be-button-block-label {\\n position: relative;\\n outline: none;\\n min-width: 2em;\\n}\\n\\n/* --- generic empty-state placeholder for editable leaf content ---\\n Note: this can't use :empty — an \\\"empty\\\" run still holds a zero-width\\n space text node (see EMPTY_RUN_PLACEHOLDER) inside its host span, so the\\n wrapper element is never actually childless. data-empty (kept in sync by\\n EditableBlockContent's syncEmptyAttr against the *logical* run content,\\n not the DOM) is the real signal. */\\n\\n[data-placeholder][data-empty]:focus-within::before {\\n content: attr(data-placeholder);\\n position: absolute;\\n color: var(--noteloom-text-faint);\\n font-weight: 400;\\n font-style: normal;\\n opacity: 0.85;\\n pointer-events: none;\\n}\\n\\n.be-button-block-open,\\n.be-button-block-settings {\\n flex: none;\\n border: none;\\n background: rgba(255, 255, 255, 0.16);\\n color: inherit;\\n border-radius: var(--noteloom-radius-sm);\\n width: 24px;\\n height: 24px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n cursor: pointer;\\n}\\n\\n.be-button-block-open:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n\\n.be-button-block-open:hover:not(:disabled),\\n.be-button-block-settings:hover {\\n background: rgba(255, 255, 255, 0.28);\\n}\\n\\n/* --- embed (image/video/audio/file) --- */\\n\\n.be-embed {\\n margin: 0.6em 0;\\n}\\n\\n.be-embed-preview {\\n position: relative;\\n display: flex;\\n}\\n\\n.be-embed-align-left {\\n justify-content: flex-start;\\n}\\n\\n.be-embed-align-center {\\n justify-content: center;\\n}\\n\\n.be-embed-align-right {\\n justify-content: flex-end;\\n}\\n\\n.be-embed-frame {\\n position: relative;\\n max-width: 100%;\\n overflow: visible;\\n border-radius: var(--noteloom-radius-lg);\\n}\\n\\n.be-embed-image,\\n.be-embed-video {\\n border: 1px solid var(--noteloom-border);\\n}\\n\\n.be-embed-image,\\n.be-embed-video {\\n max-width: 100%;\\n display: block;\\n border-radius: var(--noteloom-radius-lg);\\n}\\n\\n.be-embed-audio {\\n width: 100%;\\n}\\n\\n.be-embed-oembed {\\n width: 100%;\\n aspect-ratio: 16 / 9;\\n display: block;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-lg);\\n}\\n\\n.be-embed-file-link {\\n display: flex;\\n align-items: center;\\n gap: 0.5em;\\n padding: 0.75em 1em;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-xl);\\n text-decoration: none;\\n color: var(--noteloom-accent);\\n font-weight: 500;\\n font-size: 0.9rem;\\n}\\n\\n.be-embed-file-link:hover {\\n background: var(--noteloom-bg-subtle);\\n}\\n\\n.be-embed-toolbar {\\n position: absolute;\\n top: 8px;\\n right: 8px;\\n z-index: 2;\\n display: flex;\\n align-items: center;\\n gap: 2px;\\n padding: 3px;\\n background: rgba(15, 23, 42, 0.72);\\n border-radius: var(--noteloom-radius-md);\\n opacity: 0;\\n transition: opacity 0.12s ease;\\n}\\n\\n.be-embed-preview:hover .be-embed-toolbar,\\n.be-embed-toolbar:focus-within {\\n opacity: 1;\\n}\\n\\n.be-embed-toolbar-btn {\\n border: none;\\n background: transparent;\\n width: 24px;\\n height: 24px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: rgba(255, 255, 255, 0.8);\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n}\\n\\n.be-embed-toolbar-btn:hover {\\n background: rgba(255, 255, 255, 0.16);\\n color: #fff;\\n}\\n\\n.be-embed-toolbar-btn-active {\\n background: var(--noteloom-accent);\\n color: #fff;\\n}\\n\\n.be-embed-alt-text-btn {\\n width: auto;\\n padding: 0 8px;\\n font-size: 0.75rem;\\n}\\n\\n.be-embed-remove {\\n border: none;\\n background: transparent;\\n border-radius: var(--noteloom-radius-sm);\\n padding: 0 8px;\\n height: 24px;\\n color: rgba(255, 255, 255, 0.8);\\n font-size: 0.75rem;\\n cursor: pointer;\\n}\\n\\n.be-embed-remove:hover {\\n background: rgba(255, 255, 255, 0.16);\\n color: #fff;\\n}\\n\\n.be-embed-resize-handle {\\n position: absolute;\\n bottom: 4px;\\n right: 4px;\\n width: 12px;\\n height: 12px;\\n cursor: nwse-resize;\\n border-radius: 2px;\\n border: 1px solid #fff;\\n background: var(--noteloom-accent);\\n}\\n\\n.be-embed-dropzone {\\n border: 1.5px dashed var(--noteloom-border);\\n border-radius: var(--noteloom-radius-xl);\\n padding: 2.2em;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 0.6em;\\n text-align: center;\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-embed-dropzone-active {\\n border-color: var(--noteloom-accent);\\n background: var(--noteloom-accent-soft);\\n color: var(--noteloom-accent);\\n}\\n\\n.be-embed-upload-btn {\\n background: var(--noteloom-accent);\\n color: var(--noteloom-accent-text);\\n border-radius: var(--noteloom-radius-md);\\n padding: 0.5em 1.1em;\\n cursor: pointer;\\n font-size: 0.85rem;\\n font-weight: 500;\\n}\\n\\n.be-embed-upload-btn input {\\n display: none;\\n}\\n\\n.be-embed-dropzone-hint {\\n font-size: 0.8rem;\\n color: var(--noteloom-text-faint);\\n}\\n\\n.be-embed-url-row {\\n display: flex;\\n gap: 6px;\\n width: 100%;\\n max-width: 360px;\\n}\\n\\n.be-embed-url-input {\\n flex: 1;\\n min-width: 0;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n padding: 0.45em 0.7em;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n font-size: 0.85rem;\\n outline: none;\\n}\\n\\n.be-embed-url-input:focus {\\n border-color: var(--noteloom-accent);\\n}\\n\\n.be-embed-url-commit {\\n border: none;\\n background: var(--noteloom-accent);\\n color: var(--noteloom-accent-text);\\n border-radius: var(--noteloom-radius-md);\\n padding: 0.45em 0.9em;\\n cursor: pointer;\\n font-size: 0.85rem;\\n font-weight: 500;\\n}\\n\\n.be-embed-uploading {\\n font-size: 0.85rem;\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-embed-upload-error {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n width: 100%;\\n max-width: 360px;\\n background: var(--noteloom-danger-soft);\\n color: var(--noteloom-danger);\\n border-radius: var(--noteloom-radius-md);\\n padding: 0.5em 0.7em;\\n font-size: 0.8rem;\\n text-align: left;\\n}\\n\\n.be-embed-upload-error button {\\n margin-left: auto;\\n border: none;\\n background: transparent;\\n color: inherit;\\n cursor: pointer;\\n font-size: 1rem;\\n line-height: 1;\\n padding: 0 2px;\\n}\\n\\n/* --- canvas (freehand drawing) --- */\\n\\n.be-canvas {\\n position: relative;\\n display: inline-block;\\n margin: 0.6em 0;\\n line-height: 0; /* avoids extra inline-block whitespace gap below the <svg> */\\n}\\n\\n.be-canvas-surface {\\n display: block;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-lg);\\n background: var(--noteloom-bg);\\n max-width: 100%;\\n touch-action: none; /* the surface owns its own pointer gestures (drawing/panning), not the browser's default scroll/zoom */\\n}\\n\\n.be-canvas-toolbar {\\n position: absolute;\\n top: 8px;\\n right: 8px;\\n z-index: 2;\\n display: flex;\\n flex-wrap: wrap;\\n justify-content: flex-end;\\n max-width: calc(100% - 16px);\\n align-items: center;\\n gap: 2px;\\n padding: 3px;\\n background: rgba(15, 23, 42, 0.72);\\n border-radius: var(--noteloom-radius-md);\\n opacity: 0;\\n transition: opacity 0.12s ease;\\n}\\n\\n.be-canvas:hover .be-canvas-toolbar,\\n.be-canvas-toolbar:focus-within {\\n opacity: 1;\\n}\\n\\n.be-canvas-toolbar-btn {\\n border: none;\\n background: transparent;\\n width: 28px;\\n height: 24px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: rgba(255, 255, 255, 0.8);\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n}\\n\\n.be-canvas-toolbar-btn:hover {\\n background: rgba(255, 255, 255, 0.16);\\n color: #fff;\\n}\\n\\n.be-canvas-toolbar-btn-active {\\n background: var(--noteloom-accent);\\n color: #fff;\\n}\\n\\n.be-canvas-toolbar-btn:disabled {\\n opacity: 0.4;\\n cursor: default;\\n}\\n\\n.be-canvas-toolbar-btn:disabled:hover {\\n background: transparent;\\n}\\n\\n.be-canvas-zoom-label {\\n border: none;\\n background: transparent;\\n color: rgba(255, 255, 255, 0.8);\\n font-size: 0.75rem;\\n min-width: 2.8em;\\n padding: 0 2px;\\n cursor: pointer;\\n border-radius: var(--noteloom-radius-sm);\\n}\\n\\n.be-canvas-zoom-label:hover {\\n background: rgba(255, 255, 255, 0.16);\\n color: #fff;\\n}\\n\\n.be-canvas-toolbar-divider {\\n width: 1px;\\n height: 16px;\\n background: rgba(255, 255, 255, 0.24);\\n margin: 0 2px;\\n}\\n\\n.be-canvas-toolbar-swatch {\\n border: 2px solid transparent;\\n width: 18px;\\n height: 18px;\\n border-radius: 50%;\\n cursor: pointer;\\n padding: 0;\\n}\\n\\n.be-canvas-toolbar-swatch-active {\\n border-color: #fff;\\n}\\n\\n.be-canvas-picker-wrap {\\n position: relative;\\n}\\n\\n.be-canvas-picker {\\n position: absolute;\\n top: 100%;\\n right: 0;\\n margin-top: 8px;\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n padding: 8px;\\n background: rgba(15, 23, 42, 0.92);\\n border-radius: var(--noteloom-radius-md);\\n z-index: 3;\\n}\\n\\n.be-canvas-shape-picker {\\n flex-wrap: wrap;\\n max-width: 132px;\\n}\\n\\n.be-canvas-color-trigger-dot {\\n display: block;\\n width: 14px;\\n height: 14px;\\n border-radius: 50%;\\n border: 1px solid rgba(255, 255, 255, 0.6);\\n}\\n\\n.be-canvas-fill-trigger-dot {\\n display: block;\\n width: 14px;\\n height: 14px;\\n border-radius: 50%;\\n border: 1px solid rgba(255, 255, 255, 0.6);\\n}\\n\\n.be-canvas-fill-trigger-dot-none,\\n.be-canvas-fill-swatch-none {\\n background: repeating-conic-gradient(rgba(255, 255, 255, 0.5) 0% 25%, transparent 0% 50%) 50% /\\n 8px 8px;\\n}\\n\\n.be-canvas-custom-swatch {\\n width: 18px;\\n height: 18px;\\n border-radius: 50%;\\n overflow: hidden;\\n border: 1px dashed rgba(255, 255, 255, 0.6);\\n display: inline-flex;\\n cursor: pointer;\\n flex-shrink: 0;\\n}\\n\\n.be-canvas-custom-swatch input[type='color'] {\\n width: 150%;\\n height: 150%;\\n margin: -25%;\\n border: none;\\n padding: 0;\\n cursor: pointer;\\n background: none;\\n}\\n\\n/* Live size-preview popover: dot grows/shrinks together with the slider as it's dragged. */\\n.be-canvas-size-picker {\\n min-width: 160px;\\n}\\n\\n.be-canvas-size-trigger-dot {\\n display: block;\\n border-radius: 50%;\\n background: #fff;\\n}\\n\\n.be-canvas-size-preview {\\n flex-shrink: 0;\\n width: 44px;\\n height: 44px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.be-canvas-size-preview-dot {\\n display: block;\\n border-radius: 50%;\\n background: #fff;\\n}\\n\\n.be-canvas-size-slider {\\n flex: 1;\\n min-width: 80px;\\n}\\n\\n.be-canvas-font-size-trigger {\\n display: block;\\n font-size: 13px;\\n font-weight: 600;\\n line-height: 1;\\n color: rgba(255, 255, 255, 0.85);\\n}\\n\\n.be-canvas-font-size-preview-letter {\\n display: block;\\n line-height: 1;\\n color: #fff;\\n font-weight: 600;\\n}\\n\\n.be-canvas-size-value {\\n flex-shrink: 0;\\n min-width: 2.5em;\\n text-align: right;\\n font-size: 0.8rem;\\n color: rgba(255, 255, 255, 0.85);\\n}\\n\\n.be-canvas[data-tool='eraser'] .be-canvas-surface {\\n cursor: cell;\\n}\\n\\n.be-canvas[data-tool='select'] .be-canvas-surface {\\n cursor: default;\\n}\\n\\n.be-canvas-selection-box {\\n stroke: var(--noteloom-accent);\\n stroke-width: 1.5;\\n stroke-dasharray: 6 4;\\n vector-effect: non-scaling-stroke;\\n pointer-events: none;\\n}\\n\\n.be-canvas-selection-handle {\\n fill: #fff;\\n stroke: var(--noteloom-accent);\\n stroke-width: 1.5;\\n vector-effect: non-scaling-stroke;\\n pointer-events: none;\\n}\\n\\n.be-canvas-rotate-handle {\\n fill: var(--noteloom-accent);\\n stroke: #fff;\\n stroke-width: 1.5;\\n vector-effect: non-scaling-stroke;\\n pointer-events: none;\\n}\\n\\n.be-canvas-marquee {\\n fill: color-mix(in srgb, var(--noteloom-accent) 12%, transparent);\\n stroke: var(--noteloom-accent);\\n stroke-width: 1.5;\\n stroke-dasharray: 6 4;\\n vector-effect: non-scaling-stroke;\\n pointer-events: none;\\n}\\n\\n.be-canvas-grid-background {\\n pointer-events: none;\\n}\\n\\n.be-canvas-grid-dot {\\n fill: rgba(255, 255, 255, 0.18);\\n}\\n\\n.be-canvas-text-editor {\\n width: 100%;\\n height: 100%;\\n margin: 0;\\n padding: 0;\\n border: 1px dashed var(--noteloom-accent);\\n outline: none;\\n background: transparent;\\n resize: none;\\n overflow: hidden;\\n line-height: 1.3;\\n font-family: inherit;\\n white-space: pre-wrap;\\n word-break: break-word;\\n}\\n\\n.be-canvas-resize-handle {\\n position: absolute;\\n bottom: 4px;\\n right: 4px;\\n width: 12px;\\n height: 12px;\\n cursor: nwse-resize;\\n border-radius: 2px;\\n border: 1px solid #fff;\\n background: var(--noteloom-accent);\\n}\\n\\n/* --- table --- */\\n\\n.be-table-scroll {\\n max-width: 100%;\\n overflow-x: auto;\\n}\\n\\n.be-table-wrapper {\\n margin: 0.9em 0;\\n overflow-x: auto;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-lg);\\n width: max-content;\\n}\\n\\n.be-table {\\n border-collapse: collapse;\\n table-layout: fixed;\\n /* Deliberately no width:100% — combined with table-layout:fixed and each\\n column's own <col> width, that would make the browser redistribute\\n leftover space proportionally across columns, fighting individual\\n column resize (see be-table-col-resize-handle). */\\n}\\n\\n.be-table-header-row {\\n background: var(--noteloom-bg-subtle);\\n}\\n\\n.be-table-header-cell {\\n position: relative;\\n border-bottom: 1px solid var(--noteloom-border);\\n border-right: 1px solid var(--noteloom-border);\\n padding: 6px 10px;\\n}\\n\\n.be-table-header-label {\\n display: block;\\n width: 100%;\\n border: none;\\n background: none;\\n font: inherit;\\n font-weight: 600;\\n font-size: 0.78rem;\\n color: var(--noteloom-text-muted);\\n outline: none;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n padding: 2px 0;\\n}\\n\\n.be-table-header-menu-trigger {\\n position: absolute;\\n right: 4px;\\n top: 50%;\\n transform: translateY(-50%);\\n visibility: hidden;\\n border: none;\\n background: transparent;\\n border-radius: var(--noteloom-radius-sm);\\n padding: 2px;\\n color: var(--noteloom-text-faint);\\n cursor: pointer;\\n}\\n\\n.be-table-header-cell:hover .be-table-header-menu-trigger {\\n visibility: visible;\\n}\\n\\n.be-table-header-menu-trigger:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-table-col-resize-handle {\\n position: absolute;\\n top: 0;\\n right: -3px;\\n width: 6px;\\n height: 100%;\\n cursor: col-resize;\\n z-index: 1;\\n}\\n\\n.be-table-col-resize-handle:hover,\\n.be-table-col-resize-handle:active {\\n background: var(--noteloom-accent-soft-hover);\\n}\\n\\n.be-table-header-spacer {\\n border-bottom: 1px solid var(--noteloom-border);\\n}\\n\\n.be-table-header-spacer-col {\\n width: 32px;\\n}\\n\\n.be-table-header-menu {\\n z-index: 1000;\\n width: 224px;\\n border-radius: var(--noteloom-radius-lg);\\n border: 1px solid var(--noteloom-border);\\n background: var(--noteloom-bg);\\n padding: 4px;\\n font-size: 0.88rem;\\n box-shadow: var(--noteloom-shadow);\\n}\\n\\n.be-table-header-menu-options {\\n z-index: 1000;\\n padding: 4px;\\n font-size: 0.88rem;\\n border-bottom: 1px solid var(--noteloom-border);\\n margin-bottom: 4px;\\n}\\n\\n.be-table-header-menu-field-type {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n padding: 4px;\\n border-bottom: 1px solid var(--noteloom-border);\\n margin-bottom: 4px;\\n}\\n\\n.be-table-header-menu-field-type .be-select {\\n width: 100%;\\n}\\n\\n.be-table-header-menu-field-type .be-select-trigger {\\n width: 100%;\\n}\\n\\n.be-table-header-menu-type {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n padding: 6px;\\n border-bottom: 1px solid var(--noteloom-border);\\n margin-bottom: 4px;\\n}\\n\\n.be-table-header-type-select {\\n width: 100%;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-sm);\\n padding: 6px 8px;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n font-size: 0.85rem;\\n}\\n\\n.be-table-header-menu-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n width: 100%;\\n text-align: left;\\n border: none;\\n border-radius: var(--noteloom-radius-sm);\\n background: transparent;\\n padding: 6px 10px;\\n font: inherit;\\n font-size: 0.88rem;\\n color: var(--noteloom-text);\\n cursor: pointer;\\n}\\n\\n.be-table-header-menu-item:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-table-header-menu-item-danger {\\n color: var(--noteloom-danger);\\n}\\n\\n.be-table-header-menu-sort {\\n display: flex;\\n flex-direction: column;\\n border-bottom: 1px solid var(--noteloom-border);\\n margin-bottom: 4px;\\n padding-bottom: 4px;\\n}\\n\\n.be-table-header-menu-filter {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n padding: 6px;\\n border-bottom: 1px solid var(--noteloom-border);\\n margin-bottom: 4px;\\n font-size: 0.8rem;\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-table-header-menu-filter-input {\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-sm);\\n padding: 6px 8px;\\n font: inherit;\\n font-size: 0.85rem;\\n color: var(--noteloom-text);\\n background: transparent;\\n}\\n\\n.be-table-header-menu-filter-input:focus {\\n outline: none;\\n border-color: var(--noteloom-accent);\\n}\\n\\n.be-table-footer-row {\\n border-top: 1px solid var(--noteloom-border);\\n}\\n\\n.be-table-footer-cell {\\n padding: 6px 10px;\\n font-size: 0.82rem;\\n color: var(--noteloom-text-muted);\\n white-space: nowrap;\\n}\\n\\n.be-table-footer-label {\\n font-weight: 600;\\n margin-right: 4px;\\n}\\n\\n.be-table-footer-spacer {\\n padding: 0;\\n}\\n\\n.be-table-header-menu-item-danger:hover {\\n background: var(--noteloom-danger-soft);\\n}\\n\\n.be-table-header-menu-options-label {\\n font-size: 0.68rem;\\n text-transform: uppercase;\\n letter-spacing: 0.04em;\\n font-weight: 600;\\n color: var(--noteloom-text-faint);\\n padding: 6px 8px 2px;\\n}\\n\\n.be-table-header-menu-option-row {\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n padding: 2px 4px;\\n}\\n\\n.be-table-header-menu-option-swatch {\\n width: 14px;\\n height: 14px;\\n border-radius: 50%;\\n flex: none;\\n}\\n\\n.be-table-header-menu-option-input {\\n flex: 1;\\n min-width: 0;\\n border: none;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n font-size: 0.85rem;\\n padding: 4px 6px;\\n border-radius: var(--noteloom-radius-sm);\\n outline: none;\\n}\\n\\n.be-table-header-menu-option-input:focus {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-table-header-menu-option-remove,\\n.be-table-header-menu-option-add {\\n flex: none;\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-faint);\\n cursor: pointer;\\n padding: 3px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--noteloom-radius-sm);\\n}\\n\\n.be-table-header-menu-option-remove:hover {\\n background: var(--noteloom-danger-soft);\\n color: var(--noteloom-danger);\\n}\\n\\n.be-table-header-menu-option-add {\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-table-header-menu-option-add:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-table-row:hover {\\n background: var(--noteloom-bg-subtle);\\n}\\n\\n.be-table-cell {\\n border-bottom: 1px solid var(--noteloom-border);\\n border-right: 1px solid var(--noteloom-border);\\n padding: 6px 10px;\\n vertical-align: top;\\n outline: none;\\n font-size: 0.92rem;\\n /* table-layout: fixed already keeps the COLUMN width from growing to fit\\n content — this is what stops a long unbroken string (a URL, one giant\\n word) from visually overflowing past that fixed width instead of\\n wrapping onto a new line within the cell. */\\n max-width: 0;\\n overflow-wrap: anywhere;\\n word-break: break-word;\\n}\\n\\n.be-table-cell:focus-within {\\n box-shadow: inset 0 0 0 2px var(--noteloom-accent);\\n border-radius: 2px;\\n}\\n\\n.be-table-row-actions {\\n width: 32px;\\n text-align: center;\\n vertical-align: middle;\\n border: none;\\n background: transparent;\\n padding: 0;\\n}\\n\\n.be-table-delete-row {\\n visibility: hidden;\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-faint);\\n cursor: pointer;\\n width: 24px;\\n height: 24px;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--noteloom-radius-sm);\\n}\\n\\ntr.be-table-row:hover .be-table-delete-row {\\n visibility: visible;\\n}\\n\\n.be-table-delete-row:hover {\\n background: var(--noteloom-danger-soft);\\n color: var(--noteloom-danger);\\n}\\n\\n.be-table-add-row {\\n display: block;\\n width: 100%;\\n border: none;\\n background: transparent;\\n text-align: left;\\n padding: 8px 12px;\\n color: var(--noteloom-text-faint);\\n cursor: pointer;\\n font: inherit;\\n font-size: 0.85rem;\\n font-weight: 500;\\n}\\n\\n.be-table-add-row:hover {\\n background: var(--noteloom-bg-subtle);\\n color: var(--noteloom-accent);\\n}\\n\\n.be-inline-table-select {\\n display: block;\\n}\\n\\n.be-inline-table-select .be-select {\\n width: 100%;\\n}\\n\\n.be-inline-table-select .be-select .be-select-tag {\\n width: -webkit-fill-available;\\n}\\n\\n.be-inline-table-select .be-select-trigger {\\n display: flex;\\n width: 100%;\\n min-width: 0;\\n min-height: 0;\\n border: none;\\n border-radius: var(--noteloom-radius-sm);\\n background: transparent;\\n padding: 0;\\n font: inherit;\\n font-size: 0.92rem;\\n}\\n\\n.be-inline-table-select .be-select-trigger:hover,\\n.be-inline-table-select .be-select-trigger[aria-expanded='true'] {\\n background: var(--noteloom-bg-hover);\\n box-shadow: none;\\n}\\n\\n/* --- per-block hover gutter (+ / drag-handle / menu) --- */\\n\\n.be-block-row {\\n position: relative;\\n}\\n\\n.be-block-row-hidden {\\n opacity: 0.4;\\n}\\n\\n.be-block-gutter {\\n position: absolute;\\n left: -56px;\\n top: 0.15em;\\n display: flex;\\n gap: 2px;\\n opacity: 0;\\n transition: opacity 0.1s ease;\\n user-select: none; /* it's a drag handle (see useBlockRangeDrag) — never let its own space become selectable text */\\n}\\n\\n/* `left`/`right` are physical, not logical, properties — unlike the list\\n marker's flexbox position (which flips for free via dir inheritance),\\n this absolute offset needs an explicit RTL override to sit on the\\n correct side of the block. */\\n[dir='rtl'] .be-block-gutter {\\n left: auto;\\n right: -56px;\\n}\\n\\n.be-block-row:hover .be-block-gutter,\\n.be-block-gutter-active {\\n opacity: 1;\\n}\\n\\n.be-block-gutter-btn {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 24px;\\n height: 24px;\\n border: none;\\n border-radius: var(--noteloom-radius-sm);\\n background: transparent;\\n color: var(--noteloom-text-faint);\\n cursor: pointer;\\n transition:\\n background-color 0.12s ease,\\n color 0.12s ease;\\n}\\n\\n/* Touch: no hover state exists to reveal the gutter at all, and its\\n desktop position (left: -56px, sitting in the page's own side margin)\\n would be off-screen on a narrow phone/tablet viewport regardless — so\\n rather than force it into the row itself, its two actions (Add block,\\n block options menu) live inside MobileActionBar instead (see\\n MobileActionBar.jsx), pinned above the keyboard where they're always\\n reachable. `.be-touch-input` is set by useCoarsePointer.js, based on\\n real pointerdown activity, not just a static device-capability guess —\\n see that file for why a plain `pointer: coarse` media query alone isn't\\n enough (touchscreen laptops, etc.). */\\n.be-touch-input .be-block-gutter {\\n display: none;\\n}\\n\\n.be-block-gutter-btn:hover,\\n.be-block-gutter-btn[aria-expanded='true'] {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text);\\n}\\n\\n.be-block-gutter-menu,\\n.be-block-range-menu {\\n z-index: 1000;\\n min-width: 200px;\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-lg);\\n box-shadow: var(--noteloom-shadow);\\n padding: 4px;\\n}\\n\\n.be-block-gutter-menu-item,\\n.be-block-range-menu-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n width: 100%;\\n text-align: left;\\n border: none;\\n border-radius: var(--noteloom-radius-sm);\\n background: transparent;\\n padding: 7px 10px;\\n font: inherit;\\n font-size: 0.88rem;\\n color: var(--noteloom-text);\\n cursor: pointer;\\n}\\n\\n.be-block-gutter-menu-item:hover,\\n.be-block-range-menu-item:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-block-gutter-menu-item-danger,\\n.be-block-range-menu-item-danger {\\n color: var(--noteloom-danger);\\n}\\n\\n.be-block-gutter-menu-item-danger:hover,\\n.be-block-range-menu-item-danger:hover {\\n background: var(--noteloom-danger-soft);\\n}\\n\\n/* --- drag-in-the-margin block range selection --- */\\n\\n.be-block-row-range-selected {\\n background: var(--noteloom-accent-soft);\\n border-radius: var(--noteloom-radius-md);\\n margin: 0 -8px;\\n padding: 0 8px;\\n}\\n\\n.be-block-range-dragging,\\n.be-block-range-dragging * {\\n user-select: none !important;\\n}\\n\\n/* --- whole-document select-all / single non-editable block selected --- */\\n\\n.be-surface--all-selected .be-block-row-content > [data-block-id] {\\n background: var(--noteloom-accent-soft);\\n border-radius: var(--noteloom-radius-sm);\\n}\\n\\n.be-block-selected {\\n outline: 2px solid var(--noteloom-accent);\\n outline-offset: 2px;\\n border-radius: var(--noteloom-radius-sm);\\n}\\n\\n/* --- document export (view source) --- */\\n\\n.be-export-trigger {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n border: 1px solid var(--noteloom-border);\\n background: var(--noteloom-bg);\\n color: var(--noteloom-text-muted);\\n border-radius: var(--noteloom-radius-sm);\\n padding: 5px 10px;\\n font-size: 0.85rem;\\n cursor: pointer;\\n}\\n\\n.be-export-trigger:hover {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text);\\n}\\n\\n.be-export-tabs {\\n display: flex;\\n gap: 4px;\\n margin-bottom: 10px;\\n border-bottom: 1px solid var(--noteloom-border);\\n}\\n\\n.be-export-tab {\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-muted);\\n padding: 6px 10px;\\n margin-bottom: -1px;\\n border-bottom: 2px solid transparent;\\n font-size: 0.85rem;\\n font-weight: 500;\\n cursor: pointer;\\n}\\n\\n.be-export-tab:hover {\\n color: var(--noteloom-text);\\n}\\n\\n.be-export-tab-active {\\n color: var(--noteloom-accent);\\n border-bottom-color: var(--noteloom-accent);\\n}\\n\\n.be-export-pre {\\n max-height: 50vh;\\n overflow: auto;\\n margin: 0;\\n padding: 0.9em 1em;\\n border-radius: var(--noteloom-radius-md);\\n background: var(--noteloom-code-bg);\\n color: var(--noteloom-code-text);\\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\\n font-size: 0.8rem;\\n line-height: 1.5;\\n white-space: pre-wrap;\\n overflow-wrap: anywhere;\\n}\\n\\n/* --- trailing click-to-continue space --- */\\n\\n.be-trailing-space {\\n cursor: text;\\n width: 100%;\\n min-height: 180px;\\n}\\n\\n/* --- modal (button editor, field type editor) --- */\\n\\n.be-modal-overlay {\\n position: fixed;\\n inset: 0;\\n background: rgba(15, 23, 42, 0.45);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n z-index: 2000;\\n padding: 1em;\\n}\\n\\n.be-modal {\\n background: var(--noteloom-bg);\\n color: var(--noteloom-text);\\n border-radius: var(--noteloom-radius-xl);\\n border: 1px solid var(--noteloom-border);\\n padding: 1.4em;\\n width: 100%;\\n max-width: 380px;\\n max-height: 85vh;\\n overflow-y: auto;\\n box-shadow: var(--noteloom-shadow);\\n}\\n\\n.be-modal-large {\\n max-width: 640px;\\n}\\n\\n/* Bottom sheet variant (mobile block picker) — anchored to the bottom edge\\n instead of centered, rounded only on top, full page width. */\\n.be-modal-overlay-sheet {\\n align-items: flex-end;\\n padding: 0;\\n}\\n\\n.be-modal-sheet {\\n max-width: 100%;\\n width: 100%;\\n max-height: 70vh;\\n border-radius: var(--noteloom-radius-xl) var(--noteloom-radius-xl) 0 0;\\n border-bottom: none;\\n padding-bottom: max(1.4em, env(safe-area-inset-bottom));\\n}\\n\\n.be-mobile-picker-list {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n}\\n\\n.be-mobile-picker-item {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n width: 100%;\\n border: none;\\n background: transparent;\\n border-radius: var(--noteloom-radius-md);\\n padding: 12px 10px;\\n font: inherit;\\n font-size: 0.95rem;\\n color: var(--noteloom-text);\\n text-align: left;\\n cursor: pointer;\\n}\\n\\n.be-mobile-picker-item:hover,\\n.be-mobile-picker-item:active {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-mobile-picker-item-danger {\\n color: var(--noteloom-danger);\\n}\\n\\n.be-mobile-picker-item-danger:hover,\\n.be-mobile-picker-item-danger:active {\\n background: var(--noteloom-danger-soft);\\n}\\n\\n.be-mobile-picker-item-danger .be-mobile-picker-item-icon {\\n color: var(--noteloom-danger);\\n}\\n\\n/* --- template picker (see TemplatePicker.jsx) --- */\\n\\n.be-template-picker {\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-direction: column;\\n gap: 6px;\\n}\\n\\n.be-template-picker-empty {\\n color: var(--noteloom-text-faint);\\n font-size: 0.88rem;\\n}\\n\\n.be-template-card {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 12px;\\n padding: 10px 12px;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n background: var(--noteloom-bg);\\n}\\n\\n.be-template-card-body {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n min-width: 0;\\n}\\n\\n.be-template-card-name {\\n font-weight: 600;\\n font-size: 0.92rem;\\n color: var(--noteloom-text);\\n}\\n\\n.be-template-card-description {\\n font-size: 0.82rem;\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-template-card-select {\\n flex: none;\\n border: 1px solid var(--noteloom-border);\\n background: var(--noteloom-bg-subtle);\\n color: var(--noteloom-text);\\n border-radius: var(--noteloom-radius-sm);\\n padding: 5px 12px;\\n font-size: 0.85rem;\\n font-weight: 500;\\n cursor: pointer;\\n}\\n\\n.be-template-card-select:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n/* --- mobile action bar (pinned above the on-screen keyboard) --- */\\n\\n.be-mobile-action-bar {\\n position: fixed;\\n left: 0;\\n right: 0;\\n z-index: 1500;\\n display: flex;\\n align-items: center;\\n gap: 2px;\\n padding: 6px calc(6px + env(safe-area-inset-right)) 6px calc(6px + env(safe-area-inset-left));\\n background: var(--noteloom-bg);\\n border-top: 1px solid var(--noteloom-border);\\n overflow-x: auto;\\n}\\n\\n.be-mobile-bar-btn {\\n flex: none;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 4px;\\n min-width: 40px;\\n height: 40px;\\n padding: 0 10px;\\n border: none;\\n background: transparent;\\n border-radius: var(--noteloom-radius-sm);\\n color: var(--noteloom-text);\\n font-size: 0.85rem;\\n font-weight: 500;\\n cursor: pointer;\\n}\\n\\n.be-mobile-bar-btn:disabled {\\n opacity: 0.4;\\n}\\n\\n.be-mobile-bar-btn-active {\\n background: var(--noteloom-accent-soft);\\n color: var(--noteloom-accent);\\n}\\n\\n.be-mobile-bar-spacer {\\n flex: 1;\\n}\\n\\n.be-mobile-bar-select {\\n flex: none;\\n}\\n\\n.be-mobile-bar-swatches {\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n padding: 0 6px;\\n}\\n\\n.be-mobile-picker-item-icon {\\n flex: none;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n border-radius: var(--noteloom-radius-sm);\\n background: var(--noteloom-bg-subtle);\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-modal-title {\\n font-weight: 600;\\n font-size: 1.05rem;\\n margin-bottom: 1em;\\n}\\n\\n.be-modal-field {\\n display: block;\\n margin-bottom: 1em;\\n}\\n\\n.be-modal-field > span {\\n display: block;\\n font-size: 0.8rem;\\n color: var(--noteloom-text-muted);\\n margin-bottom: 5px;\\n}\\n\\n.be-modal-field input[type='text'],\\n.be-modal-field input[type='url'] {\\n width: 100%;\\n box-sizing: border-box;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n padding: 0.55em 0.75em;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n outline: none;\\n}\\n\\n.be-modal-field input[type='text']:focus,\\n.be-modal-field input[type='url']:focus {\\n border-color: var(--noteloom-accent);\\n}\\n\\n.be-modal-field select {\\n width: 100%;\\n box-sizing: border-box;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n padding: 0.55em 0.75em;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n font-size: 0.9rem;\\n}\\n\\n.be-modal-field select:focus {\\n border-color: var(--noteloom-accent);\\n}\\n\\n.be-modal-field-checkbox {\\n display: flex;\\n align-items: center;\\n gap: 0.5em;\\n}\\n\\n.be-modal-field-checkbox > span {\\n font-size: 0.85rem;\\n color: var(--noteloom-text);\\n}\\n\\n.be-modal-color-row {\\n display: flex;\\n gap: 8px;\\n flex-wrap: wrap;\\n}\\n\\n.be-modal-color-swatch {\\n width: 26px;\\n height: 26px;\\n border-radius: 50%;\\n border: 2px solid transparent;\\n cursor: pointer;\\n}\\n\\n.be-modal-color-swatch-active {\\n border-color: var(--noteloom-accent);\\n box-shadow:\\n 0 0 0 2px var(--noteloom-bg),\\n 0 0 0 4px var(--noteloom-accent-soft);\\n}\\n\\n.be-modal-attr-row {\\n display: flex;\\n gap: 6px;\\n margin-bottom: 6px;\\n align-items: center;\\n}\\n\\n.be-modal-attr-row input {\\n flex: 1;\\n min-width: 0;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-sm);\\n padding: 0.4em 0.6em;\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n font-size: 0.85rem;\\n}\\n\\n.be-modal-attr-remove {\\n flex: none;\\n border: none;\\n background: none;\\n color: var(--noteloom-text-faint);\\n cursor: pointer;\\n padding: 2px;\\n border-radius: var(--noteloom-radius-sm);\\n}\\n\\n.be-modal-attr-remove:hover {\\n color: var(--noteloom-danger);\\n}\\n\\n.be-modal-actions {\\n display: flex;\\n justify-content: flex-end;\\n gap: 8px;\\n margin-top: 20px;\\n}\\n\\n.be-modal-delete {\\n margin-right: auto; /* pushes Cancel/Save to the right, Delete stays on its own at the left */\\n}\\n\\n.be-modal-cancel,\\n.be-modal-save,\\n.be-modal-delete,\\n.be-export-download {\\n border: none;\\n border-radius: var(--noteloom-radius-md);\\n padding: 7px 16px;\\n font-size: 0.85rem;\\n font-weight: 500;\\n cursor: pointer;\\n}\\n\\n.be-export-download {\\n background: var(--noteloom-bg-subtle);\\n color: var(--noteloom-text);\\n}\\n\\n.be-export-download:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-modal-delete {\\n background: var(--noteloom-danger-soft);\\n color: var(--noteloom-danger);\\n}\\n\\n.be-modal-cancel {\\n background: var(--noteloom-bg-subtle);\\n color: var(--noteloom-text);\\n}\\n\\n.be-modal-cancel:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-modal-save {\\n background: var(--noteloom-accent);\\n color: var(--noteloom-accent-text);\\n}\\n\\n.be-modal-save:hover {\\n opacity: 0.9;\\n}\\n\\n.be-modal-save:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n\\n/* --- slash (\\\"/\\\") / emoji (\\\":\\\") / mention (\\\"@\\\") command menu --- */\\n\\n.be-slash-menu {\\n z-index: 1000;\\n width: 260px;\\n max-height: 320px;\\n overflow-y: auto;\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-lg);\\n box-shadow: var(--noteloom-shadow);\\n padding: 6px;\\n}\\n\\n.be-slash-menu-item {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 7px 8px;\\n border-radius: var(--noteloom-radius-md);\\n cursor: pointer;\\n font-size: 0.9rem;\\n color: var(--noteloom-text);\\n}\\n\\n.be-slash-menu-item-active,\\n.be-slash-menu-item:hover {\\n background: var(--noteloom-accent-soft);\\n}\\n\\n.be-slash-menu-item-icon {\\n flex: none;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 28px;\\n height: 28px;\\n border-radius: var(--noteloom-radius-sm);\\n border: 1px solid var(--noteloom-border);\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-slash-menu-item-label {\\n flex: 1;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n/* --- searchable Select (inline select/date/checkbox widgets, custom field types, table column type) --- */\\n\\n.be-select {\\n display: inline-flex;\\n}\\n\\n.be-select-trigger {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n min-height: 28px;\\n min-width: 6em;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n background: var(--noteloom-bg);\\n color: var(--noteloom-text);\\n font: inherit;\\n font-size: 0.88rem;\\n padding: 4px 8px;\\n cursor: pointer;\\n}\\n\\n.be-select-trigger:hover {\\n border-color: var(--noteloom-accent);\\n}\\n\\n.be-select-trigger[aria-expanded='true'] {\\n border-color: var(--noteloom-accent);\\n box-shadow: 0 0 0 2px var(--noteloom-accent-soft);\\n}\\n\\n.be-select-trigger-tag {\\n min-width: 0;\\n min-height: 0;\\n border: none;\\n background: transparent;\\n padding: 2px;\\n border-radius: var(--noteloom-radius-sm);\\n outline: none;\\n border: none;\\n}\\n\\n.be-select-trigger-tag:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-select-trigger-tag[aria-expanded='true'] {\\n background: var(--noteloom-bg-hover);\\n box-shadow: none;\\n}\\n\\n.be-select-value-placeholder {\\n color: var(--noteloom-text-faint);\\n}\\n\\n.be-select-tag {\\n display: inline-flex;\\n flex: none;\\n max-width: 100%;\\n padding: 2px 9px;\\n border-radius: var(--noteloom-radius-sm);\\n font-size: 0.82em;\\n font-weight: 500;\\n line-height: 1.4;\\n /* Wraps rather than truncates — a fixed-width popover (see\\n .be-select-popover) or table cell (see .be-table-cell) combined with\\n nowrap+ellipsis let long option text silently overflow its box\\n instead of actually being clipped; wrapping sidesteps that entirely. */\\n white-space: normal;\\n overflow-wrap: anywhere;\\n word-break: break-word;\\n}\\n\\n.be-select-value {\\n flex: 1;\\n text-align: left;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n.be-select-chevron {\\n flex: none;\\n color: var(--noteloom-text-faint);\\n}\\n\\n.be-select-popover {\\n z-index: 1000;\\n width: 224px;\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-lg);\\n box-shadow: var(--noteloom-shadow);\\n overflow: hidden;\\n}\\n\\n.be-select-search {\\n display: block;\\n width: 100%;\\n box-sizing: border-box;\\n border: none;\\n border-bottom: 1px solid var(--noteloom-border);\\n background: transparent;\\n color: inherit;\\n padding: 10px 12px;\\n font: inherit;\\n font-size: 0.88rem;\\n outline: none;\\n}\\n\\n.be-select-options {\\n max-height: 220px;\\n overflow-y: auto;\\n overflow-x: hidden;\\n padding: 4px;\\n}\\n\\n.be-select-option {\\n display: flex;\\n align-items: center;\\n min-width: 0;\\n padding: 7px 8px;\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n font-size: 0.88rem;\\n color: var(--noteloom-text);\\n}\\n\\n/* A tag-variant option list (colored pills — e.g. Priority/Assignee) must\\n read at the exact same size/weight as a plain default-variant list\\n (Diagnosis) — only the colored-chip background should differ between\\n them, not the typography. .be-select-tag's own font-size/weight (sized\\n down for when it's squeezed into a trigger button) would otherwise make\\n tag-variant options look smaller/bolder than plain ones for no reason. */\\n.be-select-option .be-select-tag {\\n font-size: inherit;\\n font-weight: inherit;\\n line-height: inherit;\\n width: -webkit-fill-available;\\n}\\n\\n.be-select-option-active {\\n background: var(--noteloom-accent-soft);\\n}\\n\\n.be-select-option-selected {\\n font-weight: 600;\\n}\\n\\n.be-select-option-selected:not(.be-select-option-active) {\\n background: var(--noteloom-bg-subtle);\\n}\\n\\n.be-select-option-selected .be-select-tag {\\n font-weight: 500;\\n box-shadow: inset 0 0 0 1.5px rgba(0, 0, 0, 0.2);\\n}\\n\\n.be-select-empty {\\n padding: 10px 12px;\\n color: var(--noteloom-text-faint);\\n font-size: 0.85rem;\\n text-align: center;\\n}\\n\\n.be-select-error {\\n color: var(--noteloom-danger);\\n}\\n\\n.be-select-manage-options {\\n display: block;\\n width: 100%;\\n box-sizing: border-box;\\n border: none;\\n border-top: 1px solid var(--noteloom-border);\\n background: transparent;\\n padding: 9px 12px;\\n font: inherit;\\n font-size: 0.82rem;\\n font-weight: 500;\\n color: var(--noteloom-accent);\\n text-align: left;\\n cursor: pointer;\\n}\\n\\n.be-select-manage-options:hover {\\n background: var(--noteloom-accent-soft);\\n}\\n\\n.be-inline-select,\\n.be-inline-date,\\n.be-inline-checkbox {\\n display: inline-flex;\\n align-items: center;\\n vertical-align: middle;\\n}\\n\\n/* Inline chips sit in running text — match the surrounding line's own font\\n size instead of the smaller size used for the Select component elsewhere\\n (menus, table column type dropdown), where a compact UI size is right. */\\n.be-inline-select .be-select-trigger {\\n min-height: 0;\\n font-size: 1em;\\n padding: 1px 8px;\\n}\\n\\n.be-inline-select .be-select-tag {\\n font-size: 0.92em;\\n}\\n\\n/* A mention reads as highlighted text sitting inline in the paragraph, not\\n a bulky standalone pill/button — minimal padding, small radius, no extra\\n chrome from the trigger button wrapping it. */\\n.be-inline-select .be-select-trigger-mention {\\n padding: 0 !important;\\n border-radius: 3px;\\n}\\n\\n/* A mention chip always uses this one fixed color, not each option's own\\n tag color — \\\"@mentions are one consistent color\\\" is the common\\n convention rather than a per-person palette. */\\n.be-select-tag-mention {\\n background: var(--noteloom-accent-soft);\\n color: var(--noteloom-accent);\\n font-weight: 500;\\n padding: 0 3px;\\n border-radius: 3px;\\n line-height: inherit;\\n}\\n\\n.be-inline-date input[type='date'] {\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n background: var(--noteloom-bg);\\n color: inherit;\\n padding: 4px 8px;\\n font: inherit;\\n font-size: 0.88rem;\\n}\\n\\n.be-inline-checkbox {\\n gap: 6px;\\n}\\n\\n.be-inline-checkbox-input {\\n flex: none;\\n width: 16px;\\n height: 16px;\\n margin: 0;\\n accent-color: var(--noteloom-accent);\\n cursor: pointer;\\n}\\n\\n.be-inline-checkbox-label {\\n min-width: 0;\\n flex: 1;\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-sm);\\n background: transparent;\\n color: inherit;\\n font: inherit;\\n padding: 2px 8px;\\n outline: none;\\n}\\n\\n.be-inline-checkbox-label:focus {\\n border-color: var(--noteloom-accent);\\n}\\n\\n/* In a table cell (checkbox column), the browser's default text-input\\n width (~170px+) is wider than most columns, forcing the input — and with\\n it, the whole table — past the cell's own bounds. Constraining the\\n inline-flex row to the cell's actual width lets the label's flex:1 +\\n min-width:0 (above) do their job and shrink the input to fit instead. */\\n.be-table-cell .be-inline-checkbox {\\n display: flex;\\n width: 100%;\\n}\\n\\n.be-inline-checkbox-label::placeholder {\\n color: var(--noteloom-text-faint);\\n}\\n\\n/* --- floating (selection) format toolbar --- */\\n\\n.be-floating-toolbar {\\n display: flex;\\n align-items: center;\\n gap: 2px;\\n background: var(--noteloom-text);\\n border-radius: var(--noteloom-radius-md);\\n padding: 4px;\\n box-shadow: var(--noteloom-shadow);\\n z-index: 1000;\\n}\\n\\n.be-floating-toolbar-btn {\\n border: none;\\n background: transparent;\\n color: rgba(255, 255, 255, 0.85);\\n width: 30px;\\n height: 30px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n}\\n\\n.be-floating-toolbar-btn:hover {\\n background: rgba(255, 255, 255, 0.14);\\n}\\n\\n.be-floating-toolbar-btn-active {\\n background: var(--noteloom-accent);\\n color: #fff;\\n}\\n\\n.be-floating-toolbar-divider {\\n width: 1px;\\n height: 20px;\\n background: rgba(255, 255, 255, 0.2);\\n margin: 0 4px;\\n}\\n\\n.be-find-bar {\\n position: fixed;\\n top: 12px;\\n right: 12px;\\n z-index: 900;\\n width: fit-content;\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n box-shadow: var(--noteloom-shadow);\\n padding: 6px;\\n display: flex;\\n flex-direction: column;\\n gap: 6px;\\n}\\n\\n.be-find-bar-row {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n}\\n\\n.be-find-bar-input {\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-sm);\\n padding: 4px 8px;\\n font-size: 0.85rem;\\n color: var(--noteloom-text);\\n background: var(--noteloom-bg);\\n width: 180px;\\n}\\n\\n.be-find-bar-input:focus {\\n outline: none;\\n border-color: var(--noteloom-accent);\\n}\\n\\n.be-find-bar-count {\\n font-size: 0.78rem;\\n color: var(--noteloom-text-muted);\\n min-width: 44px;\\n text-align: center;\\n}\\n\\n.be-find-bar-toggle,\\n.be-find-bar-nav,\\n.be-find-bar-close,\\n.be-find-bar-replace-toggle {\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-muted);\\n border-radius: var(--noteloom-radius-sm);\\n width: 26px;\\n height: 26px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n cursor: pointer;\\n font-size: 0.7rem;\\n}\\n\\n.be-find-bar-toggle:hover,\\n.be-find-bar-nav:hover:not(:disabled),\\n.be-find-bar-close:hover,\\n.be-find-bar-replace-toggle:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-find-bar-nav:disabled {\\n opacity: 0.4;\\n cursor: default;\\n}\\n\\n.be-find-bar-toggle-active {\\n background: var(--noteloom-accent-soft);\\n color: var(--noteloom-accent);\\n}\\n\\n.be-find-bar-replace-toggle {\\n transition: transform 0.1s ease;\\n}\\n\\n.be-find-bar-replace-toggle-open {\\n transform: rotate(90deg);\\n}\\n\\n.be-find-bar-replace-btn {\\n border: none;\\n background: var(--noteloom-bg-subtle);\\n color: var(--noteloom-text);\\n border-radius: var(--noteloom-radius-sm);\\n padding: 4px 10px;\\n font-size: 0.8rem;\\n cursor: pointer;\\n}\\n\\n.be-find-bar-replace-btn:hover:not(:disabled) {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-find-bar-replace-btn:disabled {\\n opacity: 0.4;\\n cursor: default;\\n}\\n\\n/* CSS Custom Highlight API — paints match highlights purely at the\\n rendering layer, never touching the contentEditable DOM tree itself\\n (see useFindInDocument.js's own doc comment for why). Unsupported\\n browsers (older Firefox) simply drop this whole rule; search/navigate/\\n replace still work, just without the visual highlight. */\\n::highlight(be-find-match) {\\n background-color: rgba(250, 204, 21, 0.4);\\n}\\n\\n::highlight(be-find-current) {\\n background-color: rgba(249, 115, 22, 0.55);\\n}\\n\\n.be-floating-toolbar-picker-wrap {\\n position: relative;\\n}\\n\\n.be-floating-toolbar-picker {\\n position: absolute;\\n top: 100%;\\n left: 0;\\n margin-top: 8px;\\n display: flex;\\n gap: 4px;\\n background: var(--noteloom-bg);\\n border-radius: var(--noteloom-radius-md);\\n padding: 6px;\\n box-shadow: var(--noteloom-shadow);\\n}\\n\\n.be-floating-toolbar-swatch {\\n width: 22px;\\n height: 22px;\\n border-radius: 50%;\\n border: 1px solid rgba(0, 0, 0, 0.1);\\n cursor: pointer;\\n}\\n\\n/* --- link hover card (edit/remove an existing link mark) --- */\\n\\n.be-link-hover-card {\\n z-index: 1000;\\n display: flex;\\n align-items: center;\\n gap: 2px;\\n max-width: 320px;\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n padding: 5px 6px 5px 10px;\\n box-shadow: var(--noteloom-shadow);\\n font-size: 0.85rem;\\n}\\n\\n.be-link-hover-card-url {\\n flex: 1;\\n min-width: 0;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n color: var(--noteloom-accent);\\n text-decoration: none;\\n}\\n\\n.be-link-hover-card-url:hover {\\n text-decoration: underline;\\n}\\n\\n.be-link-hover-card-btn {\\n flex: none;\\n width: 24px;\\n height: 24px;\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-muted);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n}\\n\\n.be-link-hover-card-btn:hover {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text);\\n}\\n\\n/* --- comments: avatar, header, composer, thread card, click/hover popover, right-side panel --- */\\n\\n.be-comment-avatar {\\n flex: none;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: 50%;\\n color: #fff;\\n font-weight: 700;\\n line-height: 1;\\n}\\n\\n/* Shared by CommentPopover and FloatingToolbar's standalone composer (see\\n CommentPopoverHeader.jsx) -- title on the left, an explicit close button\\n on the right so dismissing doesn't rely solely on Escape/outside-click. */\\n.be-comment-popover-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 8px;\\n margin-bottom: 10px;\\n padding-bottom: 10px;\\n border-bottom: 1px solid var(--noteloom-border);\\n}\\n\\n.be-comment-popover-title {\\n font-weight: 700;\\n font-size: 0.9rem;\\n}\\n\\n.be-comment-popover-close {\\n flex: none;\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-muted);\\n width: 22px;\\n height: 22px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n}\\n\\n.be-comment-popover-close:hover {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text);\\n}\\n\\n/* Overrides the dark `.be-floating-toolbar` chrome it also carries (see\\n FloatingToolbar.jsx's own comment on why that base class stays) -- a\\n comment composer reads better as a light card than white text on the\\n toolbar's own near-black background. */\\n.be-floating-toolbar.be-floating-toolbar-comment-standalone {\\n display: block;\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n padding: 10px 12px 12px;\\n width: 300px;\\n}\\n\\n.be-comment-composer {\\n display: flex;\\n flex-direction: column;\\n gap: 10px;\\n margin-top: 10px;\\n}\\n\\n.be-comment-composer-input-row {\\n display: flex;\\n align-items: flex-start;\\n gap: 8px;\\n}\\n\\n.be-comment-composer-textarea {\\n flex: 1;\\n min-width: 0;\\n box-sizing: border-box;\\n resize: none;\\n /* ~2 lines to start, grows with content (see CommentComposer's own\\n resizeToContent) up to ~5 lines, then scrolls. */\\n min-height: 2.8em;\\n max-height: 7.2em;\\n overflow-y: auto;\\n padding: 8px 10px;\\n font: inherit;\\n font-size: 0.85rem;\\n line-height: 1.4;\\n color: var(--noteloom-text);\\n background: var(--noteloom-bg-subtle);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n}\\n\\n.be-comment-composer-textarea:focus {\\n outline: none;\\n border-color: var(--noteloom-accent);\\n}\\n\\n.be-comment-composer-actions {\\n display: flex;\\n justify-content: flex-end;\\n gap: 8px;\\n}\\n\\n.be-comment-composer-cancel,\\n.be-comment-composer-submit {\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n border: none;\\n border-radius: var(--noteloom-radius-md);\\n padding: 6px 12px;\\n font-size: 0.8rem;\\n font-weight: 600;\\n cursor: pointer;\\n}\\n\\n.be-comment-composer-cancel {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-comment-composer-submit {\\n background: var(--noteloom-accent);\\n color: #fff;\\n}\\n\\n.be-comment-composer-submit:disabled {\\n opacity: 0.4;\\n cursor: not-allowed;\\n}\\n\\n.be-comment-thread {\\n font-size: 0.85rem;\\n}\\n\\n.be-comment-thread + .be-comment-thread {\\n margin-top: 16px;\\n padding-top: 16px;\\n border-top: 1px solid var(--noteloom-border);\\n}\\n\\n.be-comment-thread-resolved {\\n opacity: 0.6;\\n}\\n\\n/* Echoes a hover from the highlighted text back onto this card -- see useHoveredComment. */\\n.be-comment-thread-hovered {\\n background: var(--noteloom-bg-hover);\\n border-radius: var(--noteloom-radius-md);\\n margin: -6px;\\n padding: 6px;\\n}\\n\\n.be-comment-message {\\n display: flex;\\n align-items: flex-start;\\n gap: 10px;\\n}\\n\\n.be-comment-message + .be-comment-message {\\n margin-top: 10px;\\n}\\n\\n.be-comment-message-body {\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.be-comment-message-header {\\n display: flex;\\n align-items: baseline;\\n gap: 6px;\\n}\\n\\n.be-comment-message-author {\\n font-weight: 600;\\n font-size: 0.78rem;\\n}\\n\\n.be-comment-message-time {\\n font-size: 0.72rem;\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-comment-message-text {\\n margin: 3px 0 0;\\n line-height: 1.45;\\n white-space: pre-wrap;\\n word-break: break-word;\\n}\\n\\n/* Replies (every message after the thread's first) get a connecting\\n vertical line + indent, chat-thread style -- our data model has no\\n deeper nesting than \\\"root message + flat replies\\\", so one indent level\\n is all this needs. */\\n.be-comment-thread-replies {\\n margin: 10px 0 0 13px;\\n padding-left: 14px;\\n border-left: 2px solid var(--noteloom-border);\\n}\\n\\n.be-comment-thread-actions {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n margin-top: 10px;\\n opacity: 0;\\n transition: opacity 0.1s ease;\\n}\\n\\n.be-comment-thread:hover .be-comment-thread-actions,\\n.be-comment-thread:focus-within .be-comment-thread-actions {\\n opacity: 1;\\n}\\n\\n.be-comment-thread-actions button {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-muted);\\n font-size: 0.78rem;\\n padding: 4px 8px;\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n}\\n\\n.be-comment-thread-actions button:hover {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text);\\n}\\n\\n.be-comment-thread-delete {\\n margin-left: auto;\\n}\\n\\n/* --- comments: click/hover popover over existing highlighted text --- */\\n\\n.be-comment-popover {\\n z-index: 1000;\\n width: 300px;\\n max-width: calc(100vw - 24px);\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-lg);\\n padding: 12px 14px 14px;\\n box-shadow: var(--noteloom-shadow);\\n}\\n\\n/* --- comments: opt-in right-side panel (NoteloomEditor showCommentsPanel) --- */\\n\\n/* Deliberately no border/shadow/box background here, or on\\n .be-comments-panel-item below -- comments float directly on the page\\n like margin notes, not a boxed widget, matching how most other editors'\\n own comment sidebars read. */\\n/* No overflow/scrolling of its own on purpose -- each card's position\\n already tracks the PAGE's scroll (see CommentsPanel's recompute()), so\\n the panel scrolling independently would fight that: a wheel gesture over\\n it needs to fall through and scroll the page, not the panel's own box,\\n or cards visually detach from the text they're anchored to. Cards whose\\n anchor has scrolled off-screen just go negative/beyond the viewport and\\n aren't painted -- no clipping box needed for that. */\\n.be-comments-panel {\\n position: fixed;\\n top: 80px;\\n right: 24px;\\n width: 320px;\\n overflow: visible;\\n background: transparent;\\n padding: 0 12px;\\n font-size: 0.85rem;\\n z-index: 500;\\n pointer-events: none;\\n}\\n\\n.be-comments-panel-item,\\n.be-comments-panel-empty {\\n pointer-events: auto;\\n}\\n\\n.be-comments-panel-empty {\\n color: var(--noteloom-text-muted);\\n font-size: 0.82rem;\\n margin: 0;\\n}\\n\\n/* Each .be-comments-panel-item is absolutely positioned (top set inline by\\n CommentsPanel, aligned with its thread's own anchored text, margin-comment\\n style) inside this relatively-positioned container -- height is also set\\n inline, sized to fit the lowest card. */\\n.be-comments-panel-list {\\n position: relative;\\n}\\n\\n.be-comments-panel-item {\\n position: absolute;\\n left: 0;\\n right: 0;\\n padding: 8px 12px;\\n border-radius: var(--noteloom-radius-md);\\n transition:\\n top 0.15s ease,\\n background-color 0.1s ease;\\n}\\n\\n.be-comments-panel-item:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n@media (max-width: 900px) {\\n .be-comments-panel {\\n display: none;\\n }\\n}\\n\\n/* --- version history: trigger button + drawer (VersionHistory) --- */\\n\\n.be-version-history-trigger {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n border: 1px solid var(--noteloom-border);\\n background: var(--noteloom-bg);\\n color: var(--noteloom-text);\\n border-radius: var(--noteloom-radius-md);\\n padding: 5px 10px;\\n font-size: 0.85rem;\\n cursor: pointer;\\n}\\n\\n.be-version-history-trigger:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-version-history-backdrop {\\n position: fixed;\\n inset: 0;\\n background: rgba(15, 23, 42, 0.25);\\n z-index: 1400;\\n}\\n\\n.be-version-history-drawer {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n width: 360px;\\n max-width: 100vw;\\n background: var(--noteloom-bg);\\n box-shadow: var(--noteloom-shadow);\\n z-index: 1401;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.be-version-history-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 14px 16px;\\n border-bottom: 1px solid var(--noteloom-border);\\n font-weight: 700;\\n font-size: 0.95rem;\\n}\\n\\n.be-version-history-close {\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-muted);\\n width: 24px;\\n height: 24px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--noteloom-radius-sm);\\n cursor: pointer;\\n}\\n\\n.be-version-history-close:hover {\\n background: var(--noteloom-bg-hover);\\n color: var(--noteloom-text);\\n}\\n\\n.be-version-history-list {\\n flex: 1;\\n overflow-y: auto;\\n padding: 8px 0;\\n}\\n\\n.be-version-history-empty {\\n color: var(--noteloom-text-muted);\\n font-size: 0.85rem;\\n padding: 16px;\\n margin: 0;\\n}\\n\\n.be-version-history-group-label {\\n font-weight: 600;\\n font-size: 0.78rem;\\n color: var(--noteloom-text-muted);\\n padding: 10px 16px 4px;\\n}\\n\\n.be-version-history-item {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n width: 100%;\\n border: none;\\n background: transparent;\\n padding: 8px 16px;\\n text-align: left;\\n cursor: pointer;\\n}\\n\\n.be-version-history-item:hover {\\n background: var(--noteloom-bg-hover);\\n}\\n\\n.be-version-history-item-body {\\n min-width: 0;\\n}\\n\\n.be-version-history-item-author {\\n font-weight: 600;\\n font-size: 0.85rem;\\n}\\n\\n.be-version-history-item-meta {\\n font-size: 0.78rem;\\n color: var(--noteloom-text-muted);\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n.be-version-history-preview {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n min-height: 0;\\n}\\n\\n.be-version-history-preview-meta {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 12px 16px;\\n border-bottom: 1px solid var(--noteloom-border);\\n}\\n\\n.be-version-history-preview-author {\\n font-weight: 600;\\n font-size: 0.85rem;\\n}\\n\\n.be-version-history-preview-time {\\n font-size: 0.78rem;\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-version-history-view-toggle {\\n display: flex;\\n gap: 4px;\\n padding: 8px 16px 0;\\n}\\n\\n.be-version-history-view-toggle button {\\n border: none;\\n background: transparent;\\n color: var(--noteloom-text-muted);\\n font-size: 0.78rem;\\n font-weight: 600;\\n padding: 5px 10px;\\n border-radius: var(--noteloom-radius-md);\\n cursor: pointer;\\n}\\n\\n.be-version-history-view-toggle button.is-active {\\n background: var(--noteloom-bg-subtle);\\n color: var(--noteloom-text);\\n}\\n\\n.be-version-history-diff-legend {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n padding: 10px 16px 0;\\n font-size: 0.75rem;\\n}\\n\\n.be-version-history-diff-legend-note {\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-version-history-preview-body {\\n flex: 1;\\n overflow-y: auto;\\n padding: 16px;\\n font-size: 0.9rem;\\n line-height: 1.6;\\n}\\n\\n.be-version-history-diff-body :is(p.be-version-diff-block) {\\n margin: 0 0 0.6em;\\n}\\n\\n/* Google Docs-style change highlighting: additions get a green underline/background,\\n removals a struck-through red one -- self-evident at a glance, no legend required\\n to understand the individual spans (the legend row above just labels the colors). */\\n.be-version-diff-added {\\n background: rgba(34, 197, 94, 0.18);\\n color: var(--noteloom-text);\\n text-decoration: underline;\\n text-decoration-color: rgba(34, 197, 94, 0.6);\\n border-radius: 2px;\\n padding: 0 1px;\\n}\\n\\n.be-version-diff-removed {\\n background: rgba(239, 68, 68, 0.14);\\n color: var(--noteloom-text-muted);\\n text-decoration: line-through;\\n text-decoration-color: rgba(239, 68, 68, 0.6);\\n border-radius: 2px;\\n padding: 0 1px;\\n}\\n\\n.be-version-history-diff-legend .be-version-diff-added,\\n.be-version-history-diff-legend .be-version-diff-removed {\\n padding: 2px 6px;\\n text-decoration: none;\\n font-weight: 600;\\n}\\n\\n/* exportDocumentHTML emits plain semantic HTML (<p>/<h1-3>/<ul>/<blockquote>/...),\\n not this package's own be-* block classes, so the preview needs its own\\n basic typography rather than inheriting the live editor's block styling. */\\n.be-version-history-preview-body :is(h1, h2, h3) {\\n margin: 0.6em 0 0.3em;\\n}\\n\\n.be-version-history-preview-body p {\\n margin: 0 0 0.6em;\\n}\\n\\n.be-version-history-preview-body :is(ul, ol) {\\n margin: 0 0 0.6em;\\n padding-left: 1.4em;\\n}\\n\\n.be-version-history-preview-body blockquote {\\n margin: 0 0 0.6em;\\n padding-left: 0.8em;\\n border-left: 3px solid var(--noteloom-border);\\n color: var(--noteloom-text-muted);\\n}\\n\\n.be-version-history-preview-body pre {\\n background: var(--noteloom-bg-subtle);\\n border-radius: var(--noteloom-radius-sm);\\n padding: 10px;\\n overflow-x: auto;\\n}\\n\\n.be-version-history-preview-actions {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 8px;\\n padding: 12px 16px;\\n border-top: 1px solid var(--noteloom-border);\\n}\\n\\n.be-version-history-preview-actions button {\\n border-radius: var(--noteloom-radius-md);\\n padding: 6px 12px;\\n font-size: 0.82rem;\\n font-weight: 600;\\n cursor: pointer;\\n}\\n\\n.be-version-history-preview-actions button:first-child {\\n border: 1px solid var(--noteloom-border);\\n background: var(--noteloom-bg);\\n color: var(--noteloom-text);\\n}\\n\\n.be-version-history-restore {\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n border: none;\\n background: var(--noteloom-accent);\\n color: #fff;\\n}\\n\\n/* --- voice typing: caret-anchored listening/processing indicator --- */\\n\\n.be-voice-indicator {\\n z-index: 1000;\\n display: flex;\\n align-items: center;\\n gap: 5px;\\n background: var(--noteloom-bg);\\n border: 1px solid var(--noteloom-border);\\n border-radius: var(--noteloom-radius-md);\\n padding: 4px 9px;\\n box-shadow: var(--noteloom-shadow);\\n font-size: 0.78rem;\\n color: var(--noteloom-text-muted);\\n white-space: nowrap;\\n pointer-events: none;\\n animation: be-voice-indicator-in 0.12s ease-out;\\n}\\n\\n@keyframes be-voice-indicator-in {\\n from {\\n opacity: 0;\\n transform: translate(-50%, calc(-100% + 4px));\\n }\\n to {\\n opacity: 1;\\n transform: translate(-50%, -100%);\\n }\\n}\\n\\n.be-voice-indicator-dot {\\n width: 7px;\\n height: 7px;\\n border-radius: 50%;\\n background: var(--noteloom-danger, #dc2626);\\n flex: none;\\n animation: be-voice-indicator-pulse 1.4s ease-in-out infinite;\\n}\\n\\n.be-voice-indicator-processing .be-voice-indicator-dot {\\n background: var(--noteloom-accent);\\n animation-duration: 0.6s;\\n}\\n\\n@keyframes be-voice-indicator-pulse {\\n 0%,\\n 100% {\\n opacity: 1;\\n box-shadow: 0 0 0 0 currentColor;\\n }\\n 50% {\\n opacity: 0.5;\\n box-shadow: 0 0 0 4px transparent;\\n }\\n}\\n\\n/* --- print --- */\\n/*\\n * Printing (or \\\"Save as PDF\\\" via the browser's own print dialog — this\\n * package deliberately doesn't bundle a PDF-generation library, which\\n * would conflict with staying zero-runtime-dependency) always renders a\\n * clean, chrome-free document: every piece of editing-only UI is hidden\\n * here, regardless of whether the app happens to be in preview mode at\\n * the moment of printing. `.be-block-row-hidden` is included on purpose —\\n * a block hidden via \\\"Hide in preview\\\" stays in the DOM (just dimmed) in\\n * edit mode, so without this rule printing while NOT toggled into preview\\n * mode would print blocks the user explicitly marked as hidden. A host\\n * app's own outer chrome (nav bars, its own toolbar) needs its own print\\n * rules the same way — see examples/basic's own style.css for a worked\\n * example, since that chrome lives outside this package entirely.\\n */\\n@media print {\\n .be-block-gutter,\\n .be-block-gutter-menu,\\n .be-block-gutter-menu-item,\\n .be-block-range-menu,\\n .be-block-range-menu-item,\\n .be-block-row-hidden,\\n .be-slash-menu,\\n #be-emoji-menu,\\n #be-at-menu,\\n .be-floating-toolbar,\\n .be-link-hover-card,\\n .be-comment-popover,\\n .be-comments-panel,\\n .be-voice-indicator,\\n .be-table-header-menu-trigger,\\n .be-table-header-menu,\\n .be-table-col-resize-handle,\\n .be-table-delete-row,\\n .be-table-add-row,\\n .be-embed-toolbar,\\n .be-embed-remove,\\n .be-embed-resize-handle,\\n .be-embed-dropzone,\\n .be-embed-upload-btn,\\n .be-embed-url-row,\\n .be-canvas-toolbar,\\n .be-canvas-resize-handle,\\n .be-callout-color-wrap,\\n .be-modal-overlay,\\n .be-mobile-action-bar,\\n .be-mobile-picker-list,\\n .be-export-trigger,\\n .be-export-tabs,\\n .be-trailing-space,\\n .be-select-popover,\\n .be-find-bar {\\n display: none !important;\\n }\\n\\n /* .be-block-row-range-selected and .be-block-selected mark real content\\n (the row/block itself, not a standalone chrome element) with a\\n highlight background/outline — reset just that styling rather than\\n hiding the element the way the chrome above is hidden, or printing\\n mid-drag-selection would print blank space instead of the block's own\\n content. */\\n .be-block-row-range-selected {\\n background: none !important;\\n }\\n\\n .be-block-selected {\\n outline: none !important;\\n }\\n\\n /* No background colors/shadows on paper, and text that's always legible\\n regardless of the screen theme the page happened to be rendered in\\n (dark mode's near-white text would otherwise print as barely-there). */\\n .be-editable,\\n .be-paragraph,\\n .be-heading,\\n .be-list-item,\\n .be-blockquote,\\n .be-code-block,\\n .be-callout,\\n .be-table-cell {\\n background: none !important;\\n box-shadow: none !important;\\n color: #000 !important;\\n }\\n\\n /* Don't split a table/code block/callout/image awkwardly across a page\\n boundary when it would otherwise fit on one page. */\\n .be-table,\\n .be-code-block,\\n .be-callout,\\n .be-embed-image {\\n break-inside: avoid;\\n }\\n}\\n\"","import defaultThemeCSS from '../style.css?raw';\n\n// Vite's `?raw` suffix resolves this at build time to the file's contents\n// as a plain string — no CSS-loader/runtime dependency involved, so this\n// stays true to \"zero runtime dependencies\" even though the theme itself\n// is authored as a .css file. Both the ESM and CJS library builds embed\n// the string directly; nothing is fetched or resolved at runtime.\nconst STYLE_TAG_ID = 'noteloom-default-styles';\n\n/**\n * Inserts the default theme as a single <style> tag in <head>, once —\n * idempotent (checked by id) so mounting more than one <EditorProvider>,\n * or re-mounting one, never duplicates it. Called from EditorProvider's\n * own effect; see its `theme` prop to opt out entirely.\n */\nexport function injectDefaultStyles() {\n if (typeof document === 'undefined') return; // SSR guard — inject on the client only\n if (document.getElementById(STYLE_TAG_ID)) return;\n const style = document.createElement('style');\n style.id = STYLE_TAG_ID;\n style.textContent = defaultThemeCSS;\n document.head.appendChild(style);\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { injectDefaultStyles } from './injectDefaultStyles.js';\n\nconst EditorContext = createContext(null);\n\n/**\n * `theme` (default `'default'`) auto-injects the package's own default\n * theme as a single <style> tag in <head> the first time any\n * <EditorProvider> mounts — see injectDefaultStyles.js — so a working,\n * styled editor needs no separate `import 'noteloom/style.css'` line.\n * Pass `theme=\"none\"` to skip this entirely (e.g. to import the CSS file\n * yourself for load-order control, or to ship a fully custom theme with\n * no default as a starting point).\n *\n * `className`/`style`, if given, wrap `children` in one `<div>` (with the\n * base `be-root` class alongside your own) — the natural \"editor root\"\n * customization hook for scoping your own overrides\n * (`.my-editor .be-paragraph { ... }`) or overriding the `--noteloom-*`\n * CSS custom properties the default theme itself reads from (see\n * style.css) for just this one editor instance. Deliberately NOT rendered\n * unconditionally: most existing usage doesn't need an extra wrapper\n * element in the DOM, so one is only added when you actually ask for it.\n *\n * `getBlockClassName(block)`, if given, is the \"internal\" counterpart —\n * every block component appends whatever string this returns onto its own\n * root element's class list (see useBlockClassName), so individual blocks\n * (by type, id, or props — the whole block object is passed in) can be\n * customized too, not just the editor's outer wrapper.\n *\n * `uploadFile(file, { kind }) -> Promise<{ src, name?, mimeType? }>`, if\n * given, is how `EmbedBlock` (image/video/audio/file) sends a picked or\n * dropped `File` somewhere real instead of inlining it — see\n * useFileUpload's own doc comment for the full contract (local disk, S3,\n * any other cloud storage, and how to make your own size-tiered decisions\n * off `file.size`). Without it, a file is read straight into a `data:` URL\n * and stored directly in the document, same as always — this package ships\n * no backend of its own, so that in-document fallback is the only upload\n * path that needs zero configuration. `maxFileSize` (bytes) only applies to\n * THAT fallback path — rejects an oversized file with a clear error instead\n * of silently bloating the document with a huge base64 string; has no\n * effect once `uploadFile` is configured, since the host's own function (or\n * backend) is what decides what it can handle.\n */\nexport function EditorProvider({\n store,\n registry,\n inlineRegistry = null,\n history = null,\n className,\n style,\n theme = 'default',\n getBlockClassName,\n commentAuthorId,\n showLineNumbers = false,\n uploadFile,\n maxFileSize,\n children,\n}) {\n useEffect(() => {\n if (theme !== 'none') injectDefaultStyles();\n }, [theme]);\n\n // `store` may be a plain EditorStore or a History instance (same read/write\n // surface) — components call useEditorStore() and get whichever was given,\n // undo/redo-aware or not, without caring which.\n //\n // isWholeDocumentSelected is ephemeral UI interaction state, not document\n // data — deliberately plain useState here, not part of the store. It's\n // the \"select everything\" flag a second Ctrl+A press sets (see\n // useEditorKeyboardShortcuts + useWholeDocumentSelection): every block\n // lives in its own separate contentEditable region, and browsers don't\n // reliably support a native Selection/Range spanning multiple independent\n // contentEditable islands constructed via script — so cross-block \"select\n // all\" is its own custom selection model instead of a native one, the\n // same way a block editor's whole-block selection isn't native browser text\n // selection either. This package ships no default styling, so rendering\n // the corresponding highlight is left to the host app (see this hook's\n // own doc comment).\n const [isWholeDocumentSelected, setIsWholeDocumentSelected] = useState(false);\n\n // Which comment thread (by id) is currently hovered, wherever that\n // happened -- the highlighted text in the editor, or a thread's card in\n // the panel -- so the OTHER side can echo the same emphasis. Plain\n // useState is fine: hover changes are infrequent relative to typing.\n const [hoveredCommentId, setHoveredCommentId] = useState(null);\n\n // A contiguous run of top-level block ids selected by dragging from the\n // gutter margin (see useBlockRangeDrag/BlockGutterRow) — the familiar \"drag\n // in the margin to select several blocks\" gesture. `[]` means nothing is\n // range-selected. Kept in DOCUMENT order (matches root.contentIds), not\n // drag order, so Move up/down and Delete don't need to re-sort it.\n // Ephemeral UI state, same rationale as isWholeDocumentSelected above —\n // this is a *different* selection mechanism from that one (an arbitrary\n // contiguous slice vs. literally everything), so they're independent,\n // non-overlapping bits of state.\n const [selectedBlockRange, setSelectedBlockRange] = useState([]);\n\n // Preview-mode toggle — also ephemeral UI state, not document data (a\n // reload always starts back in edit mode). While true, BlockChildren\n // skips rendering the per-block gutter entirely and omits any block\n // whose own props.hidden is true, instead of rendering it dimmed the way\n // edit mode does (see BlockGutterRow's Hide/Show menu item) — the whole\n // point of \"hidden\" is that it disappears from the preview a reader\n // eventually sees, while staying editable (just visually dimmed) for\n // whoever's still writing it.\n const [isPreviewMode, setIsPreviewMode] = useState(false);\n\n // Ephemeral \"which custom field type is the create/edit modal open for\"\n // state — null (closed), the string 'new' (create flow), or an existing\n // fieldTypes id (edit flow). See useFieldTypeEditor + FieldTypeEditorModal\n // (inlineTypes/customSelect): kept here, not in that module, so this core\n // file never has to import anything from a concrete inline type — the\n // modal itself is host-mounted (same pattern as EditorTrailingSpace),\n // reading this shared open/closed target via the hook below.\n const [fieldTypeEditorTarget, setFieldTypeEditorTarget] = useState(null);\n const openCreateFieldType = useCallback(() => setFieldTypeEditorTarget('new'), []);\n const openEditFieldType = useCallback((id) => setFieldTypeEditorTarget(id), []);\n const closeFieldTypeEditor = useCallback(() => setFieldTypeEditorTarget(null), []);\n\n // A single non-editable/contentless block (image, divider, etc.) that's\n // \"selected\" pending a second Backspace/Delete to actually remove it —\n // a common convention for atomic nodes: the first press\n // adjacent to one just highlights it, the second one deletes it.\n //\n // Deliberately NOT React state: this can be set on every single\n // Backspace/Delete press throughout ordinary typing near a non-editable\n // block, and putting it in the same memoized context value as\n // store/registry/etc. would re-render every block in the whole document\n // on every such press (unlike isWholeDocumentSelected above, which only\n // ever changes on a deliberate, rare \"select everything\" action). A\n // plain ref plus a stable setter that imperatively toggles a DOM class\n // avoids that entirely — the same imperative-DOM-update discipline\n // EditableBlockContent already uses for its own host nodes.\n const selectedBlockIdRef = useRef(null);\n\n const getSelectedBlockId = useCallback(() => selectedBlockIdRef.current, []);\n\n const setSelectedBlockId = useCallback((id) => {\n const prevId = selectedBlockIdRef.current;\n if (prevId === id) return;\n if (prevId)\n document.querySelector(`[data-block-id=\"${prevId}\"]`)?.classList.remove('be-block-selected');\n selectedBlockIdRef.current = id;\n if (id) document.querySelector(`[data-block-id=\"${id}\"]`)?.classList.add('be-block-selected');\n }, []);\n\n const value = useMemo(\n () => ({\n store,\n registry,\n inlineRegistry,\n history,\n isWholeDocumentSelected,\n setIsWholeDocumentSelected,\n selectedBlockRange,\n setSelectedBlockRange,\n getSelectedBlockId,\n setSelectedBlockId,\n isPreviewMode,\n setIsPreviewMode,\n fieldTypeEditorTarget,\n openCreateFieldType,\n openEditFieldType,\n closeFieldTypeEditor,\n getBlockClassName,\n commentAuthorId,\n hoveredCommentId,\n setHoveredCommentId,\n showLineNumbers,\n uploadFile,\n maxFileSize,\n }),\n [\n store,\n registry,\n inlineRegistry,\n history,\n isWholeDocumentSelected,\n selectedBlockRange,\n getSelectedBlockId,\n setSelectedBlockId,\n isPreviewMode,\n fieldTypeEditorTarget,\n openCreateFieldType,\n openEditFieldType,\n closeFieldTypeEditor,\n getBlockClassName,\n commentAuthorId,\n hoveredCommentId,\n showLineNumbers,\n uploadFile,\n maxFileSize,\n ],\n );\n const content =\n className || style ? (\n <div className={className ? `be-root ${className}` : 'be-root'} style={style}>\n {children}\n </div>\n ) : (\n children\n );\n\n return <EditorContext.Provider value={value}>{content}</EditorContext.Provider>;\n}\n\nexport function useEditorContext() {\n const ctx = useContext(EditorContext);\n if (!ctx) {\n throw new Error('Editor hooks must be used within an <EditorProvider>');\n }\n return ctx;\n}\n\nexport function useEditorStore() {\n return useEditorContext().store;\n}\n\nexport function useBlockRegistry() {\n return useEditorContext().registry;\n}\n\nexport function useInlineRegistry() {\n return useEditorContext().inlineRegistry;\n}\n\n/**\n * `[isWholeDocumentSelected, setIsWholeDocumentSelected]` — the custom\n * \"select all\" state (see EditorProvider's doc comment for why this isn't\n * a native Selection). A host app renders the highlight itself, typically\n * by conditionally adding a class to its surface element and styling\n * `.that-class > [data-block-id]` — every top-level block is a direct DOM\n * child of whatever rendered `<BlockChildren parentId={rootId} />`, so a\n * plain CSS child-combinator is enough; no wrapper markup is needed.\n */\nexport function useWholeDocumentSelection() {\n const { isWholeDocumentSelected, setIsWholeDocumentSelected } = useEditorContext();\n return [isWholeDocumentSelected, setIsWholeDocumentSelected];\n}\n\n/**\n * `[selectedBlockRange, setSelectedBlockRange]` — the drag-selected\n * contiguous run of top-level block ids (see EditorProvider's doc comment).\n * `setSelectedBlockRange([])` clears it. A host app renders the highlight\n * itself (see be-block-row-range-selected in the example app's CSS) and\n * mounts `<BlockRangeActionMenu />` once anywhere under the provider to get\n * the Copy/Cut/Delete/Move/Hide action menu that appears once a drag\n * finishes — see useBlockRangeDrag for the drag mechanics themselves.\n */\nexport function useBlockRangeSelection() {\n const { selectedBlockRange, setSelectedBlockRange } = useEditorContext();\n return [selectedBlockRange, setSelectedBlockRange];\n}\n\n/**\n * `{ getSelectedBlockId, setSelectedBlockId }` — the single-block\n * \"selected, pending a second Backspace/Delete to remove it\" state (see\n * EditorProvider's doc comment on selectedBlockIdRef for why this is a\n * ref-backed pair of stable functions rather than React state: reading it\n * inside an event handler via `getSelectedBlockId()` always returns the\n * current value without subscribing to it, so setting it doesn't\n * re-render every block in the document). `setSelectedBlockId` also\n * imperatively toggles the `be-block-selected` CSS class on the relevant\n * block's own `[data-block-id]` element; a host app can restyle that\n * class however it likes (e.g. a highlighted border).\n */\nexport function useSelectedBlock() {\n const { getSelectedBlockId, setSelectedBlockId } = useEditorContext();\n return { getSelectedBlockId, setSelectedBlockId };\n}\n\n/**\n * `[isPreviewMode, setIsPreviewMode]` — toggles the whole editor between\n * edit mode (every block renders normally, hidden ones dimmed via\n * BlockGutterRow's own styling) and preview mode (BlockChildren renders\n * without the per-block gutter at all, and skips any block whose\n * `props.hidden` is true entirely — see BlockChildren's doc comment). A\n * host app wires its own toggle button/keyboard shortcut to this, same as\n * useWholeDocumentSelection.\n */\nexport function usePreviewMode() {\n const { isPreviewMode, setIsPreviewMode } = useEditorContext();\n return [isPreviewMode, setIsPreviewMode];\n}\n\n/**\n * `{ target, openCreate, openEdit, close }` — shared open/closed state for\n * the custom field type create/edit modal (see\n * inlineTypes/customSelect/FieldTypeEditorModal.jsx). `target` is `null`\n * when closed, `'new'` while creating, or an existing fieldTypes id while\n * editing one. A host app renders `<FieldTypeEditorModal />` once anywhere\n * under the provider (it reads this hook itself) and wires its own \"+ New\n * field type\" button to `openCreate()`; a field type's own chips call\n * `openEdit(id)` from their \"Manage options…\" popover entry (see\n * createSelectFieldType's `onManage`).\n */\n/**\n * Combines a block type's own fixed base class (e.g. \"be-paragraph\") with\n * whatever extra class name the host app's `getBlockClassName` prop (on\n * EditorProvider) returns for this specific block — the \"internal\"\n * customization hook, complementing EditorProvider's own `className`/\n * `style` props (which only style the editor's root wrapper). Every block\n * component calls this once for its own root element, passing its own base\n * class and its `block` (as returned by useBlock — may be null on the\n * render right before a block unmounts, handled gracefully here).\n *\n * `getBlockClassName(block)` receives the full block object (`type`, `id`,\n * `props`, ...), so a host can target specific types, specific ids, or\n * inspect props (e.g. give every `callout` with `props.color === 'red'` an\n * extra class) — as fine- or coarse-grained as the callback wants.\n */\nexport function useBlockClassName(baseClassName, block) {\n const { getBlockClassName } = useEditorContext();\n const extra = block && getBlockClassName ? getBlockClassName(block) : undefined;\n return extra ? `${baseClassName} ${extra}` : baseClassName;\n}\n\n/**\n * The current user's id for AUTHORING comments through the package's own\n * built-in UI (CommentPopover's reply composer, CommentsPanel) — see\n * NoteloomEditor's `commentAuthorId` prop. `undefined` when not configured,\n * in which case those surfaces still show existing threads (view/resolve/\n * delete need no identity) but hide the reply composer, since there's no\n * author to attribute a new message to.\n */\nexport function useCommentAuthorId() {\n return useEditorContext().commentAuthorId;\n}\n\n/** `[hoveredCommentId, setHoveredCommentId]` -- lets a hover in the editor's highlighted text and a hover over a thread card in the panel echo each other, same idea as useWholeDocumentSelection. */\nexport function useHoveredComment() {\n const { hoveredCommentId, setHoveredCommentId } = useEditorContext();\n return [hoveredCommentId, setHoveredCommentId];\n}\n\n/** Whether `CodeBlock` should render its line-number gutter — see `EditorProvider`'s `showLineNumbers` prop. */\nexport function useShowLineNumbers() {\n return useEditorContext().showLineNumbers;\n}\n\n/**\n * `{ uploadFile, maxFileSize }` from `EditorProvider` — see its own doc\n * comment for the full contract. `EmbedBlock` is the one built-in consumer\n * (a picked/dropped file always goes through whichever of the two paths\n * this resolves to), but both are exported here too for a host building\n * its own upload UI outside `EmbedBlock` (e.g. a custom drag-and-drop\n * cover-image picker) that still wants to honor the same configured\n * behavior instead of re-deciding it independently.\n *\n * `uploadFile` is `undefined` when not configured — `EmbedBlock` falls\n * back to its own built-in `data:` URL read in that case, which is why\n * this hook doesn't provide a default itself; the \"no host function\n * configured\" case is a real, valid state a caller needs to see, not\n * something to paper over with a no-op stand-in.\n *\n * Example wiring for the three most common storage targets — each is just\n * `uploadFile: async (file) => ({ src: <wherever it ended up> })`:\n *\n * ```js\n * // Your own server (saves to local disk, a mounted volume, ...)\n * uploadFile: async (file) => {\n * const body = new FormData();\n * body.append('file', file);\n * const res = await fetch('/api/upload', { method: 'POST', body });\n * const { url } = await res.json();\n * return { src: url };\n * }\n *\n * // AWS S3 (or any presigned-URL-style object storage) — two requests:\n * // one to your own backend for a presigned PUT URL, one straight to S3.\n * uploadFile: async (file) => {\n * const { uploadUrl, publicUrl } = await fetch('/api/s3-presign', {\n * method: 'POST',\n * headers: { 'Content-Type': 'application/json' },\n * body: JSON.stringify({ filename: file.name, contentType: file.type }),\n * }).then((r) => r.json());\n * await fetch(uploadUrl, { method: 'PUT', body: file, headers: { 'Content-Type': file.type } });\n * return { src: publicUrl };\n * }\n *\n * // Any other cloud storage (Cloudinary, Supabase Storage, R2, GCS, ...)\n * // is the same shape as one of the two above — a single API call that\n * // returns a hosted URL, or a signed-URL handshake — since this package\n * // only ever needs the final `{ src }` back, not how it got there.\n * ```\n *\n * Size-tiered handling (\"small files inline, medium ones compress first,\n * large ones stream/chunk\") is entirely `uploadFile`'s own business, off\n * `file.size` (bytes) — this package deliberately hardcodes no byte\n * thresholds of its own, since what counts as \"large\" varies wildly by\n * app. A representative sketch:\n *\n * ```js\n * uploadFile: async (file) => {\n * if (file.size < 200 * 1024) return { src: await inlineAsDataUrl(file) }; // small: keep it simple\n * if (file.size < 25 * 1024 * 1024) return uploadToYourServer(file); // medium\n * return uploadToS3Multipart(file); // large: chunked/multipart\n * }\n * ```\n */\nexport function useFileUpload() {\n const { uploadFile, maxFileSize } = useEditorContext();\n return { uploadFile, maxFileSize };\n}\n\nexport function useFieldTypeEditor() {\n const { fieldTypeEditorTarget, openCreateFieldType, openEditFieldType, closeFieldTypeEditor } =\n useEditorContext();\n return {\n target: fieldTypeEditorTarget,\n openCreate: openCreateFieldType,\n openEdit: openEditFieldType,\n close: closeFieldTypeEditor,\n };\n}\n","export const OP = {\n INSERT_BLOCK: 'insertBlock',\n REMOVE_BLOCK: 'removeBlock',\n MOVE_BLOCK: 'moveBlock',\n CHANGE_BLOCK_TYPE: 'changeBlockType',\n UPDATE_BLOCK_PROPS: 'updateBlockProps',\n UPDATE_RUN: 'updateRun',\n SET_BLOCK_CONTENT_IDS: 'setBlockContentIds',\n REPLACE_RUN_SPAN: 'replaceRunSpan',\n SET_BLOCK_RUNS: 'setBlockRuns',\n EDIT_RUN_CHARS: 'editRunChars',\n ADD_FIELD_TYPE: 'addFieldType',\n UPDATE_FIELD_TYPE: 'updateFieldType',\n REMOVE_FIELD_TYPE: 'removeFieldType',\n ADD_COMMENT_THREAD: 'addCommentThread',\n REMOVE_COMMENT_THREAD: 'removeCommentThread',\n ADD_COMMENT_REPLY: 'addCommentReply',\n REMOVE_COMMENT_REPLY: 'removeCommentReply',\n RESOLVE_COMMENT: 'resolveComment',\n ADD_PERSON: 'addPerson',\n UPDATE_PERSON: 'updatePerson',\n REMOVE_PERSON: 'removePerson',\n};\n\nexport function insertBlock(block, parentId, index, subtree) {\n return { type: OP.INSERT_BLOCK, block, parentId, index, subtree };\n}\n\nexport function removeBlock(id) {\n return { type: OP.REMOVE_BLOCK, id };\n}\n\nexport function moveBlock(id, toParentId, toIndex) {\n return { type: OP.MOVE_BLOCK, id, toParentId, toIndex };\n}\n\nexport function updateBlockProps(id, patch) {\n return { type: OP.UPDATE_BLOCK_PROPS, id, patch };\n}\n\n/**\n * Changes a block's own `type` and wholesale-replaces its `props`, keeping\n * its id (and therefore its parentId/contentIds/subscribers) exactly as\n * they are — the in-place counterpart to \"delete the old block, insert a\n * new one of a different type.\" Keeping the id stable is what lets a CRDT\n * merge concurrent type-conversions of the same block as one field-level\n * conflict (last-write-wins) instead of two unrelated structural edits.\n * `blockType` (not `type`) to avoid colliding with the operation envelope's\n * own `type` key.\n */\nexport function changeBlockType(id, blockType, props) {\n return { type: OP.CHANGE_BLOCK_TYPE, id, blockType, props };\n}\n\nexport function updateRun(id, patch) {\n return { type: OP.UPDATE_RUN, id, patch };\n}\n\n/**\n * Tombstones `tombstoneIds` and restores `restoreIds` within a run's own\n * character CRDT (see EditorStore's `_getRunOrder`/`_editRunText`) — the\n * precise undo/redo counterpart to a text `updateRun`, used instead of a\n * whole-value replace so undoing your own edit only ever touches the\n * character ids YOU inserted/deleted, never a peer's concurrent edit to\n * the same run. Deliberately self-inverting: applying this op's own\n * returned inverse is just this same op with the two arrays swapped, which\n * is what makes undo/redo of a text edit cycle correctly back and forth.\n *\n * `previousValue`, when given, is a cosmetic-only plain-string snapshot of\n * the run's value right before the edit this is the inverse of — used\n * exclusively by History's caret-restoration (`computeEntrySelection`) and\n * opt-in change log (`getChangeLog`), never for undo's actual data\n * correctness (that's the tombstone/restore ids above).\n */\nexport function editRunChars(id, tombstoneIds, restoreIds, previousValue) {\n return { type: OP.EDIT_RUN_CHARS, id, tombstoneIds, restoreIds, previousValue };\n}\n\n/** Directly reassigns a block's contentIds array (e.g. merging one block's runs into another). */\nexport function setBlockContentIds(blockId, contentIds) {\n return { type: OP.SET_BLOCK_CONTENT_IDS, blockId, contentIds };\n}\n\n/**\n * Replaces a contiguous span of existing run ids within a leaf block's\n * contentIds with a new set of run objects — e.g. splitting one run into\n * before/formatted-middle/after when toggling a mark on part of its text.\n * `oldRunIds` must be contiguous in the block's current contentIds.\n */\nexport function replaceRunSpan(blockId, oldRunIds, newRuns) {\n return { type: OP.REPLACE_RUN_SPAN, blockId, oldRunIds, newRuns };\n}\n\n/**\n * Wholesale replaces a leaf block's entire run list (and their order) —\n * the \"I don't know exactly what changed structurally, just resync\n * everything\" escape hatch used when reconciling arbitrary DOM mutations\n * (paste-into-contentEditable, IME composition boundaries) back into the\n * store. Prefer per-run `updateRun` when only text values changed — this\n * op is coarser-grained for undo (one step for the whole resync).\n */\nexport function setBlockRuns(blockId, runs) {\n return { type: OP.SET_BLOCK_RUNS, blockId, runs };\n}\n\n/**\n * Persists a user-created custom select field type (see\n * createSelectFieldType / registerStoredFieldTypes) — `fieldType` is\n * `{ id, label, placeholder, variant, options: [{value,label,color?}] }`.\n * Only ever used for STATIC, in-editor-authored types; code-registered\n * (developer-defined, possibly dynamic/DB-backed) field types never go\n * through the store at all.\n */\nexport function addFieldType(fieldType) {\n return { type: OP.ADD_FIELD_TYPE, fieldType };\n}\n\nexport function updateFieldType(id, patch) {\n return { type: OP.UPDATE_FIELD_TYPE, id, patch };\n}\n\nexport function removeFieldType(id) {\n return { type: OP.REMOVE_FIELD_TYPE, id };\n}\n\n/**\n * Adds a comment thread — `thread` is `{ id, blockId, anchorRunIds,\n * resolved, messages }` (see src/comments/comments.js's addComment, which\n * is the documented entry point; this raw op is exposed for advanced use\n * the same way editRunChars is). Unlike ADD_FIELD_TYPE/UPDATE_FIELD_TYPE/\n * REMOVE_FIELD_TYPE (which are local-only in collaboration today), comment\n * thread ops DO set a wire envelope and DO have an applyRemoteOperation\n * case — see EditorStore.\n */\nexport function addCommentThread(thread) {\n return { type: OP.ADD_COMMENT_THREAD, thread };\n}\n\nexport function removeCommentThread(commentId) {\n return { type: OP.REMOVE_COMMENT_THREAD, commentId };\n}\n\n/** Appends `message` ({ id, authorId, text, createdAt }) to an existing thread's messages. */\nexport function addCommentReply(commentId, message) {\n return { type: OP.ADD_COMMENT_REPLY, commentId, message };\n}\n\n/** The precise inverse of addCommentReply — removes one reply by its own id (not the whole thread). */\nexport function removeCommentReply(commentId, messageId) {\n return { type: OP.REMOVE_COMMENT_REPLY, commentId, messageId };\n}\n\nexport function resolveComment(commentId, resolved) {\n return { type: OP.RESOLVE_COMMENT, commentId, resolved };\n}\n\n/**\n * Adds a person to the document's own people list — `person` is\n * `{ id, name, color }` (see src/people/people.js's addPerson, the\n * documented entry point). Unlike ADD_FIELD_TYPE/UPDATE_FIELD_TYPE/\n * REMOVE_FIELD_TYPE, these DO set a wire envelope and DO have an\n * applyRemoteOperation case — see EditorStore — same collaboration-aware\n * treatment as comment threads, and for the same reason: this is small,\n * low-write-concurrency document metadata, not per-character content.\n */\nexport function addPerson(person) {\n return { type: OP.ADD_PERSON, person };\n}\n\nexport function updatePerson(id, patch) {\n return { type: OP.UPDATE_PERSON, id, patch };\n}\n\nexport function removePerson(id) {\n return { type: OP.REMOVE_PERSON, id };\n}\n","export function genId() {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `id-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n","/**\n * One shared icon family for every interactive control across the editor —\n * outline style (24x24 viewBox, 2px stroke, no fill, round caps/joins,\n * matching the common Feather/Lucide convention) so every icon inherits its\n * color from surrounding text via stroke=\"currentColor\" and scales via the\n * `size` prop, instead of the previously ad-hoc mix of unicode characters\n * (▸ ▾ × 📎 +) and single-letter text labels (B/I/U/S) each block used to\n * render on its own.\n */\nfunction Icon({ children, size = 16, strokeWidth = 2, ...rest }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...rest}\n >\n {children}\n </svg>\n );\n}\n\nexport function ChevronRightIcon(props) {\n return (\n <Icon {...props}>\n <polyline points=\"9 18 15 12 9 6\" />\n </Icon>\n );\n}\n\nexport function ChevronDownIcon(props) {\n return (\n <Icon {...props}>\n <polyline points=\"6 9 12 15 18 9\" />\n </Icon>\n );\n}\n\nexport function XIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </Icon>\n );\n}\n\nexport function MoreHorizontalIcon(props) {\n return (\n <Icon {...props} fill=\"currentColor\" stroke=\"none\">\n <circle cx=\"5\" cy=\"12\" r=\"1.6\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.6\" />\n <circle cx=\"19\" cy=\"12\" r=\"1.6\" />\n </Icon>\n );\n}\n\nexport function PaperclipIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n </Icon>\n );\n}\n\nexport function PlusIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </Icon>\n );\n}\n\nexport function BoldIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\" />\n <path d=\"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\" />\n </Icon>\n );\n}\n\nexport function ItalicIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </Icon>\n );\n}\n\nexport function UnderlineIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M6 3v7a6 6 0 0 0 12 0V3\" />\n <line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\" />\n </Icon>\n );\n}\n\nexport function PencilIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M12 20h9\" />\n <path d=\"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\" />\n </Icon>\n );\n}\n\n/** A freehand squiggle — the \"Canvas\" slash-command icon, distinct from PencilIcon (used elsewhere for text/link editing) since this represents drawing, not editing text. */\nexport function ScribbleIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M3 17c2-4 4-4 6 0s4 4 6 0 4-4 6 0\" />\n </Icon>\n );\n}\n\nexport function LinkIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </Icon>\n );\n}\n\nexport function CommentIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\" />\n </Icon>\n );\n}\n\n/** A clock with a counter-clockwise arrow around it -- \"version history\", same glyph most other editors use for it. */\nexport function ClockHistoryIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M3 12a9 9 0 1 0 3-6.7\" />\n <polyline points=\"3 5 3 10 8 10\" />\n <polyline points=\"12 7 12 12 16 14\" />\n </Icon>\n );\n}\n\n/** A plain counter-clockwise circular arrow -- \"restore this version\". */\nexport function RestoreIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M3 12a9 9 0 1 0 2.6-6.3\" />\n <polyline points=\"3 4 3 9 8 9\" />\n </Icon>\n );\n}\n\nexport function CheckIcon(props) {\n return (\n <Icon {...props}>\n <polyline points=\"20 6 9 17 4 12\" />\n </Icon>\n );\n}\n\nexport function SendIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </Icon>\n );\n}\n\nexport function StrikethroughIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M16 4H9a3 3 0 0 0-2.83 4\" />\n <path d=\"M14 12a4 4 0 0 1 0 8H6\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </Icon>\n );\n}\n\nexport function AlignLeftIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"17\" y1=\"10\" x2=\"3\" y2=\"10\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" />\n <line x1=\"17\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </Icon>\n );\n}\n\nexport function AlignCenterIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"18\" y1=\"10\" x2=\"6\" y2=\"10\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" />\n <line x1=\"18\" y1=\"18\" x2=\"6\" y2=\"18\" />\n </Icon>\n );\n}\n\nexport function AlignRightIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"10\" x2=\"7\" y2=\"10\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" />\n <line x1=\"21\" y1=\"18\" x2=\"7\" y2=\"18\" />\n </Icon>\n );\n}\n\n// A 2x3 grid of solid dots (drag-handle convention) — unlike every other\n// icon here, these are filled, not stroked outlines: a 1px-radius circle\n// with only a stroke renders as a barely-visible ring at this size, so each\n// dot overrides the shared Icon wrapper's fill=\"none\"/stroke defaults\n// directly rather than inheriting them.\nexport function GripVerticalIcon(props) {\n return (\n <Icon {...props}>\n {[5, 12, 19].flatMap((cy) =>\n [9, 15].map((cx) => (\n <circle key={`${cx}-${cy}`} cx={cx} cy={cy} r=\"1.3\" fill=\"currentColor\" stroke=\"none\" />\n )),\n )}\n </Icon>\n );\n}\n\nexport function TrashIcon(props) {\n return (\n <Icon {...props}>\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" />\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" />\n </Icon>\n );\n}\n\nexport function CopyIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"9\" y=\"9\" width=\"12\" height=\"12\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </Icon>\n );\n}\n\nexport function ArrowUpIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\" />\n <polyline points=\"5 12 12 5 19 12\" />\n </Icon>\n );\n}\n\nexport function ArrowDownIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <polyline points=\"19 12 12 19 5 12\" />\n </Icon>\n );\n}\n\nexport function SquareIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"1\" />\n </Icon>\n );\n}\n\nexport function CircleIcon(props) {\n return (\n <Icon {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n </Icon>\n );\n}\n\nexport function ArrowDiagonalIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\" />\n <polyline points=\"9 6 18 6 18 15\" />\n </Icon>\n );\n}\n\nexport function DiamondIcon(props) {\n return (\n <Icon {...props}>\n <polygon points=\"12 3 21 12 12 21 3 12\" />\n </Icon>\n );\n}\n\nexport function TriangleIcon(props) {\n return (\n <Icon {...props}>\n <polygon points=\"12 4 20 20 4 20\" />\n </Icon>\n );\n}\n\nexport function StarIcon(props) {\n return (\n <Icon {...props}>\n <polygon points=\"12 3 14.7 9.4 21.5 9.9 16.3 14.4 17.9 21 12 17.4 6.1 21 7.7 14.4 2.5 9.9 9.3 9.4\" />\n </Icon>\n );\n}\n\nexport function CursorIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M5 3l14 8-6 2-2 6-6-16z\" />\n </Icon>\n );\n}\n\nexport function EraserIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M19 20H9l-6-6a1.5 1.5 0 0 1 0-2l9-9a1.5 1.5 0 0 1 2 0l7 7a1.5 1.5 0 0 1 0 2l-7 7\" />\n <path d=\"M6.5 12.5 13 19\" />\n </Icon>\n );\n}\n\nexport function DownloadIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M12 3v12\" />\n <path d=\"M7 10l5 5 5-5\" />\n <path d=\"M4 19h16\" />\n </Icon>\n );\n}\n\nexport function MagnetIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M6 15V9a6 6 0 0 1 12 0v6\" />\n <path d=\"M6 15a3 3 0 0 0 6 0v-4\" />\n <path d=\"M18 15a3 3 0 0 1-6 0v-4\" />\n <line x1=\"3\" y1=\"9\" x2=\"6\" y2=\"9\" />\n <line x1=\"3\" y1=\"15\" x2=\"6\" y2=\"15\" />\n <line x1=\"18\" y1=\"9\" x2=\"21\" y2=\"9\" />\n <line x1=\"18\" y1=\"15\" x2=\"21\" y2=\"15\" />\n </Icon>\n );\n}\n\nexport function ScissorsIcon(props) {\n return (\n <Icon {...props}>\n <circle cx=\"6\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <line x1=\"20\" y1=\"4\" x2=\"8.12\" y2=\"15.88\" />\n <line x1=\"14.47\" y1=\"14.48\" x2=\"20\" y2=\"20\" />\n <line x1=\"8.12\" y1=\"8.12\" x2=\"12\" y2=\"12\" />\n </Icon>\n );\n}\n\n// --- Slash-menu command icons ---------------------------------------------\n// One icon per command so the \"/\" menu reads like a familiar block editor's\n// (glyph + label, not label-only) — see SlashMenu.jsx and each block/\n// inline type's own `slashCommand(s)` definition for where these attach.\n\nexport function TextIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"17\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"15\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </Icon>\n );\n}\n\n/** Parameterized by `level` (1-3) — a single \"H\" + digit, filled text rather than the shared stroke-only glyphs above. */\nexport function HeadingIcon({ level = 1, size = 16, ...rest }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n {...rest}\n >\n <text x=\"2\" y=\"18\" fontSize=\"14\" fontWeight=\"700\" fill=\"currentColor\" fontFamily=\"inherit\">\n H{level}\n </text>\n </svg>\n );\n}\n\n// Fixed-level wrappers around HeadingIcon — plain-.js command definitions\n// (e.g. blocks/heading/index.js) can't write JSX to pass `level` themselves,\n// so each level gets its own importable component instead.\nexport function Heading1Icon(props) {\n return <HeadingIcon level={1} {...props} />;\n}\nexport function Heading2Icon(props) {\n return <HeadingIcon level={2} {...props} />;\n}\nexport function Heading3Icon(props) {\n return <HeadingIcon level={3} {...props} />;\n}\n\nexport function QuoteIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M7 7a3 3 0 0 0-3 3v3a2 2 0 0 0 2 2h2a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H6a3 3 0 0 1 3-3z\" />\n <path d=\"M17 7a3 3 0 0 0-3 3v3a2 2 0 0 0 2 2h2a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1h-2a3 3 0 0 1 3-3z\" />\n </Icon>\n );\n}\n\nexport function CodeIcon(props) {\n return (\n <Icon {...props}>\n <polyline points=\"9 8 4 12 9 16\" />\n <polyline points=\"15 8 20 12 15 16\" />\n </Icon>\n );\n}\n\nexport function DividerIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </Icon>\n );\n}\n\nexport function CalloutIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M4 5h16a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H9l-4 4v-4H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1z\" />\n <line x1=\"7\" y1=\"9\" x2=\"17\" y2=\"9\" />\n <line x1=\"7\" y1=\"12.5\" x2=\"13\" y2=\"12.5\" />\n </Icon>\n );\n}\n\nexport function ButtonIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"3\" y=\"8\" width=\"18\" height=\"8\" rx=\"3\" />\n <line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\" />\n </Icon>\n );\n}\n\nexport function TableIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"1\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n <line x1=\"3\" y1=\"16\" x2=\"21\" y2=\"16\" />\n <line x1=\"9\" y1=\"4\" x2=\"9\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"15\" y2=\"20\" />\n </Icon>\n );\n}\n\nexport function ColumnsIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"1\" />\n <line x1=\"9\" y1=\"4\" x2=\"9\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"15\" y2=\"20\" />\n </Icon>\n );\n}\n\nexport function BulletedListIcon(props) {\n return (\n <Icon {...props}>\n <circle cx=\"4.5\" cy=\"6\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"4.5\" cy=\"12\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"4.5\" cy=\"18\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\" />\n <line x1=\"9\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"9\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"9\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </Icon>\n );\n}\n\nexport function NumberedListIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"10\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"10\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <text x=\"2\" y=\"8.5\" fontSize=\"7\" fontWeight=\"700\" fill=\"currentColor\" stroke=\"none\">\n 1\n </text>\n <text x=\"2\" y=\"14.5\" fontSize=\"7\" fontWeight=\"700\" fill=\"currentColor\" stroke=\"none\">\n 2\n </text>\n <text x=\"2\" y=\"20.5\" fontSize=\"7\" fontWeight=\"700\" fill=\"currentColor\" stroke=\"none\">\n 3\n </text>\n </Icon>\n );\n}\n\nexport function CheckboxIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"3\" />\n <polyline points=\"8 12 11 15 16 9\" />\n </Icon>\n );\n}\n\nexport function MentionIcon(props) {\n return (\n <Icon {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M16 12v1.5a2.5 2.5 0 0 0 5 0V12a9 9 0 1 0-4.5 7.79\" />\n </Icon>\n );\n}\n\nexport function DateIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n <line x1=\"8\" y1=\"3\" x2=\"8\" y2=\"7\" />\n <line x1=\"16\" y1=\"3\" x2=\"16\" y2=\"7\" />\n </Icon>\n );\n}\n\nexport function SelectIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M12 3h7a2 2 0 0 1 2 2v7a2 2 0 0 1-.59 1.41l-8 8a2 2 0 0 1-2.82 0l-7-7a2 2 0 0 1 0-2.82l8-8A2 2 0 0 1 12 3z\" />\n <circle cx=\"15.5\" cy=\"8.5\" r=\"1.2\" fill=\"currentColor\" stroke=\"none\" />\n </Icon>\n );\n}\n\nexport function ImageIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <circle cx=\"9\" cy=\"10\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M4 17l5-5 4 4 4-5 4 6\" />\n </Icon>\n );\n}\n\nexport function VideoIcon(props) {\n return (\n <Icon {...props}>\n <rect x=\"3\" y=\"5\" width=\"14\" height=\"14\" rx=\"2\" />\n <path d=\"M17 10l4-2.5v9L17 14\" />\n </Icon>\n );\n}\n\nexport function EyeIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </Icon>\n );\n}\n\nexport function EyeOffIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M17.94 17.94A10.94 10.94 0 0 1 12 19c-6.5 0-10-7-10-7a18.5 18.5 0 0 1 5.06-5.94M9.9 4.24A10.94 10.94 0 0 1 12 4c6.5 0 10 7 10 7a18.5 18.5 0 0 1-2.16 3.19\" />\n <path d=\"M14.12 14.12a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </Icon>\n );\n}\n\nexport function AudioIcon(props) {\n return (\n <Icon {...props}>\n <line x1=\"4\" y1=\"10\" x2=\"4\" y2=\"14\" />\n <line x1=\"8\" y1=\"7\" x2=\"8\" y2=\"17\" />\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\" />\n <line x1=\"16\" y1=\"7\" x2=\"16\" y2=\"17\" />\n <line x1=\"20\" y1=\"10\" x2=\"20\" y2=\"14\" />\n </Icon>\n );\n}\n\nexport function MicIcon(props) {\n return (\n <Icon {...props}>\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </Icon>\n );\n}\n"],"names":["defaultThemeCSS","STYLE_TAG_ID","injectDefaultStyles","style","EditorContext","createContext","EditorProvider","store","registry","inlineRegistry","history","className","theme","getBlockClassName","commentAuthorId","showLineNumbers","uploadFile","maxFileSize","children","useEffect","isWholeDocumentSelected","setIsWholeDocumentSelected","useState","hoveredCommentId","setHoveredCommentId","selectedBlockRange","setSelectedBlockRange","isPreviewMode","setIsPreviewMode","fieldTypeEditorTarget","setFieldTypeEditorTarget","openCreateFieldType","useCallback","openEditFieldType","id","closeFieldTypeEditor","selectedBlockIdRef","useRef","getSelectedBlockId","setSelectedBlockId","prevId","_a","value","useMemo","content","jsx","useEditorContext","ctx","useContext","useEditorStore","useBlockRegistry","useInlineRegistry","useWholeDocumentSelection","useBlockRangeSelection","useSelectedBlock","usePreviewMode","useBlockClassName","baseClassName","block","extra","useCommentAuthorId","useHoveredComment","useShowLineNumbers","useFileUpload","useFieldTypeEditor","OP","insertBlock","parentId","index","subtree","removeBlock","moveBlock","toParentId","toIndex","updateBlockProps","patch","changeBlockType","blockType","props","updateRun","editRunChars","tombstoneIds","restoreIds","previousValue","setBlockContentIds","blockId","contentIds","replaceRunSpan","oldRunIds","newRuns","setBlockRuns","runs","addFieldType","fieldType","updateFieldType","removeFieldType","addCommentThread","thread","removeCommentThread","commentId","addCommentReply","message","removeCommentReply","messageId","resolveComment","resolved","addPerson","person","updatePerson","removePerson","genId","Icon","size","strokeWidth","rest","ChevronRightIcon","ChevronDownIcon","XIcon","jsxs","MoreHorizontalIcon","PaperclipIcon","PlusIcon","BoldIcon","ItalicIcon","UnderlineIcon","PencilIcon","ScribbleIcon","LinkIcon","CommentIcon","ClockHistoryIcon","RestoreIcon","CheckIcon","SendIcon","StrikethroughIcon","AlignLeftIcon","AlignCenterIcon","AlignRightIcon","GripVerticalIcon","cy","cx","TrashIcon","CopyIcon","ArrowUpIcon","ArrowDownIcon","SquareIcon","CircleIcon","ArrowDiagonalIcon","DiamondIcon","TriangleIcon","StarIcon","CursorIcon","EraserIcon","DownloadIcon","MagnetIcon","ScissorsIcon","TextIcon","HeadingIcon","level","Heading1Icon","Heading2Icon","Heading3Icon","QuoteIcon","CodeIcon","DividerIcon","CalloutIcon","ButtonIcon","TableIcon","ColumnsIcon","BulletedListIcon","NumberedListIcon","CheckboxIcon","DateIcon","SelectIcon","ImageIcon","VideoIcon","EyeIcon","EyeOffIcon","AudioIcon","MicIcon"],"mappings":"qEAAAA,GAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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"}