@kerebron/legacy-compat 0.8.7 → 0.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/kerebron.css CHANGED
@@ -1 +1 @@
1
- :root,:host{--kb-space-xs:.25rem;--kb-space-sm:.5rem;--kb-space-md:1rem;--kb-space-lg:1.5rem;--kb-space-xl:2rem;--kb-text-xs:.75rem;--kb-text-sm:.875rem;--kb-text-base:1rem;--kb-text-lg:1.125rem;--kb-touch-target-min:44px;--kb-touch-target-comfortable:48px;--kb-color-hover:#3b82f60d;--kb-color-active:#3b82f61a;--kb-color-focus:#3b82f633;--kb-radius-sm:4px;--kb-radius-md:6px;--kb-radius-lg:8px;--kb-shadow-sm:0 1px 2px #0000000d;--kb-shadow-md:0 4px 6px #0000001a;--kb-shadow-lg:0 10px 15px #0000001a;--kb-z-dropdown:1100;--kb-z-tooltip:1200;--kb-z-modal:1300;--kb-z-notification:1400;--kb-color-primary:#3b82f6;--kb-color-primary-hover:#2563eb;--kb-color-primary-active:#1d4ed8;--kb-color-primary-rgb:59, 130, 246;--kb-color-text:#1f2937;--kb-color-text-muted:#6b7280;--kb-color-icon:#5f6368;--kb-color-surface:#fff;--kb-color-surface-elevated:#f9fafb;--kb-color-surface-hover:#3c404314;--kb-color-border:#e5e7eb;--kb-color-border-strong:#d1d5db;--kb-menu-dropdown-bg:#fff;--kb-menu-dropdown-border:#dadce0;--kb-menu-dropdown-text:#3c4043;--kb-menu-dropdown-hover:#3c404314;--kb-menu-info-bg:#e8f0fe;--kb-menu-info-text:#1967d2}.kb-component--brand-corporate{--kb-color-primary:#1e40af;--kb-color-primary-hover:#1e3a8a;--kb-color-primary-rgb:30, 64, 175}.kb-component--brand-creative{--kb-color-primary:#7c3aed;--kb-color-primary-hover:#6d28d9;--kb-color-primary-rgb:124, 58, 237}@media (prefers-color-scheme:dark){:root,:host{--kb-color-text:#f9fafb;--kb-color-text-muted:#9ca3af;--kb-color-icon:#bdc1c6;--kb-color-surface:#1f2937;--kb-color-surface-elevated:#374151;--kb-color-border:#374151;--kb-color-border-strong:#4b5563;--kb-color-hover:#3b82f61a;--kb-color-active:#3b82f633;--kb-menu-dropdown-bg:#344154;--kb-menu-dropdown-border:#5f6368;--kb-menu-dropdown-text:#e8eaed;--kb-menu-dropdown-hover:#e8eaed14}}.kb-component--dark{--kb-color-text:#f9fafb;--kb-color-text-muted:#9ca3af;--kb-color-icon:#bdc1c6;--kb-color-surface:#1f2937;--kb-color-surface-elevated:#374151;--kb-color-border:#374151;--kb-color-border-strong:#4b5563;--kb-color-hover:#3b82f61a;--kb-color-active:#3b82f633;--kb-menu-dropdown-bg:#344154;--kb-menu-dropdown-border:#5f6368;--kb-menu-dropdown-text:#e8eaed;--kb-menu-dropdown-hover:#e8eaed14}.kb-component{background:var(--kb-color-surface);color:var(--kb-color-text);border-radius:var(--kb-radius-md);border:2px solid var(--kb-color-border);padding:var(--kb-space-sm) 0;background-clip:padding-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.5;position:relative}.kb-editor{word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;padding:var(--kb-space-sm) var(--kb-space-md) var(--kb-space-sm) var(--kb-space-lg);font-size:var(--kb-text-base);outline:none;line-height:1.6}@media (max-width:767px){.kb-editor{padding:var(--kb-space-md);font-size:var(--kb-text-base);line-height:1.7}}.kb-editor-hideselection ::selection{background:0 0}.kb-editor-hideselection ::selection{background:0 0}.kb-editor-hideselection{caret-color:#0000}@keyframes kb-cursor-blink{to{visibility:hidden}}.kb-editor hr{background-color:var(--kb-color-text);border:none;height:2px;margin:1em 0;padding:0}.kb-editor img{cursor:default;max-width:100%;height:auto}.kb-component:focus-within{border-color:var(--kb-color-primary);box-shadow:0 0 0 3px var(--kb-color-focus)}@media (prefers-contrast:more){.kb-component{border-width:3px}.ProseMirror-selectednode{outline-width:3px}}.kb-lsp__error{padding-bottom:4px;display:inline-block;position:relative}.kb-lsp__error:after{content:"";background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 4' preserveAspectRatio='none'%3E%3Cpath d='M0,2 Q5,0 10,2 T20,2' stroke='red' stroke-width='1.5' fill='none'/%3E%3C/svg%3E") bottom/20px 4px repeat-x;height:6px;position:absolute;bottom:6px;left:0;right:0}.kb-shortcode-inline{background-color:green;border-radius:3px;margin:0 5px;padding:4px 10px}.kb-editor>p{margin-bottom:1em}.kb-editor li>p{margin-bottom:0}.kb-editor>p:first-child,.kb-editor>h1:first-child,.kb-editor>h2:first-child,.kb-editor>h3:first-child,.kb-editor>h4:first-child,.kb-editor>h5:first-child,.kb-editor>h6:first-child{margin-top:var(--kb-space-md)}.kb-editor pre{white-space:pre-wrap}.kb-editor li{position:relative}.kb-editor ul,.kb-editor ol{padding-left:30px}.kb-editor blockquote{border-left:3px solid var(--kb-color-border);color:var(--kb-color-text-muted);margin-left:0;margin-right:0;padding-left:1em}.kb-editor li[data-type=task_item]{align-items:flex-start;gap:.5em;margin-left:-1.5em;list-style:none;display:flex}.kb-editor li[data-type=task_item]>label{flex-shrink:0;align-items:center;margin-top:.25em;display:flex}.kb-editor li[data-type=task_item]>label input[type=checkbox]{cursor:pointer;margin:0}.kb-editor li[data-type=task_item]>div{flex:1;min-width:0}.kb-editor li[data-type=task_item]>div p{margin:0}.kb-editor li[data-type=task_item][data-checked=true]>div{opacity:.6;text-decoration:line-through}.ProseMirror-selectednode{outline:2px solid var(--kb-color-primary);outline-offset:2px}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:"";border:2px solid var(--kb-color-primary);pointer-events:none;position:absolute;inset:-2px -2px -2px -32px}.kb-gapcursor{pointer-events:none;display:none;position:absolute}.kb-gapcursor:after{content:"";border-top:1px solid #000;width:20px;animation:1.1s steps(2,start) infinite ProseMirror-cursor-blink;display:block;position:absolute;top:-2px}.ProseMirror-focused .kb-gapcursor{display:block}.kb-search-match{background-color:#ffff0054}.kb-active-search-match{background-color:#ff6a0054}@supports (-webkit-touch-callout:none){.kb-component{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased}}@media (max-width:767px){.kb-editor::selection{background:rgba(var(--kb-color-primary-rgb), .3)}.kb-editor::selection{background:rgba(var(--kb-color-primary-rgb), .3)}}@media print{.kb-component{box-shadow:none;border:none;margin:0;padding:0}.kb-editor{padding:0}}.kb-yjs__cursor{word-break:normal;pointer-events:none;border-left:1px solid #0000;border-right:1px solid #0000;margin-left:-1px;margin-right:-1px;position:fixed}.kb-yjs__cursor>div{-webkit-user-select:none;user-select:none;color:#fff;white-space:nowrap;background-color:#fa8100;padding-left:2px;padding-right:2px;font-family:serif;font-size:13px;font-style:normal;font-weight:400;line-height:normal;position:absolute;top:-1.05em;left:-1px}@media (max-width:767px){.kb-yjs__cursor>div{font-size:var(--kb-text-xs);padding:1px var(--kb-space-xs);border-radius:var(--kb-radius-sm)}}[ychange_type]{position:relative}.ychange-hover{display:none}:hover>.ychange-hover{color:#fdfdfe;-webkit-user-select:none;user-select:none;word-break:normal;border-radius:3px 3px 0 0;padding:0 2px;font-size:12px;display:inline;position:absolute;top:-14px;left:0}ychange[ychange_type=removed],p[ychange_type=removed]{background-color:red;text-decoration:line-through}:not(ychange)[ychange_type=removed]{background-color:#ff5a56;color:inherit!important}img[ychange_type=removed]{padding:2px}ychange[ychange_type=added],p[ychange_type=removed]{background-color:green}.kb-editor .tableWrapper{overflow-x:auto}.kb-editor table{border-collapse:collapse;table-layout:fixed;width:100%;overflow:hidden}.kb-editor td,.kb-editor th{vertical-align:top;box-sizing:border-box;border:1px solid var(--kb-color-border);position:relative}.kb-editor td:not([data-colwidth]):not(.column-resize-dragging),.kb-editor th:not([data-colwidth]):not(.column-resize-dragging){min-width:var(--default-cell-min-width)}.kb-editor .column-resize-handle{z-index:20;pointer-events:none;background-color:#adf;width:4px;position:absolute;top:0;bottom:0;right:-2px}.kb-editor.resize-cursor{cursor:ew-resize;cursor:col-resize}.kb-editor .selectedCell:after{z-index:2;content:"";pointer-events:none;background:#c8c8ff66;position:absolute;inset:0}@media (max-width:767px){.kb-editor table{font-size:var(--kb-text-sm);border-collapse:collapse;white-space:nowrap;width:100%;display:block;overflow-x:auto}.kb-editor th,.kb-editor td{min-width:120px;padding:var(--kb-space-md);border:1px solid var(--kb-color-border);vertical-align:top}.tableWrapper .column-resize-handle{display:none!important}.kb-editor .tableWrapper{-webkit-overflow-scrolling:touch;overflow-x:auto}.kb-editor .selectedCell{background:rgba(var(--kb-color-primary-rgb), .1);border:2px solid var(--kb-color-primary)}}.kb-menu{z-index:var(--kb-z-dropdown,1000);background:#f9f9f9;border-bottom:1px solid #dadce0;flex-wrap:nowrap;align-items:center;gap:0;margin:0;padding:4px 8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1;display:flex;position:sticky;top:0;overflow:visible}.kb-menu__content{flex:1;align-items:center;gap:0;display:flex;overflow:hidden}.kb-overflow-toggle{color:#3c4043;cursor:pointer;background:0 0;border:none;border-radius:2px;flex-shrink:0;min-width:30px;min-height:30px;margin-left:4px;padding:6px;display:none}.kb-overflow-toggle:hover{background:#3c404314}.kb-overflow-toggle svg{fill:currentColor;width:20px;height:20px}.kb-menu__overflow-row{background:#f9f9f9;border-bottom:1px solid #dadce0;flex-wrap:wrap;gap:4px;padding:8px;display:none}.kb-menu--overflow-open .kb-menu__overflow-row{display:flex;position:absolute}@media (max-width:767px){.kb-menu{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#f9f9f9f2;border-top:1px solid #dadce0;border-bottom:none;padding:8px;position:fixed;inset:auto 0 0;box-shadow:0 -2px 8px #0000001a}.kb-menu__overflow-row{border-top:1px solid #dadce0;border-bottom:none;position:fixed;bottom:60px;left:0;right:0;box-shadow:0 -2px 8px #0000001a}.kb-component,.ProseMirror{padding-bottom:60px!important}.kb-overflow-toggle{min-width:44px;min-height:44px;padding:10px}}@media (min-width:768px){.kb-menu{border-radius:var(--kb-radius-md) var(--kb-radius-md) 0 0;position:relative}}.kb-menu{background-color:var(--kb-color-surface);z-index:10000}.kb-menu__button{border-radius:var(--kb-radius-sm);min-width:var(--kb-touch-target-comfortable);min-height:var(--kb-touch-target-comfortable);color:var(--kb-color-text);cursor:pointer;font-size:var(--kb-text-sm);background:0 0;border:none;flex-shrink:0;transition:all .2s}.kb-menu__button:hover{background:var(--kb-color-hover);border-color:var(--kb-color-border)}.kb-menu__button:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-menu__button--active{background:var(--kb-color-primary);color:#fff;border-color:var(--kb-color-primary);border-radius:var(--kb-radius-sm)}.kb-menu__button--pressed{background:var(--kb-color-active);transition:transform .1s;transform:scale(.95)}.kb-menu__button--disabled{opacity:.4;cursor:not-allowed}.kb-menu__button--disabled:hover{background:0 0;border-color:#0000}.kb-dropdown__item svg,.kb-menu__button svg{fill:currentColor;width:1em;height:1em}.kb-dropdown__item svg,.kb-menu__button span,.kb-menu__button svg{vertical-align:middle}.kb-menu__button span,.kb-dropdown__label-text{display:none}.kb-menu__separator{width:1px;height:var(--kb-space-lg);background:var(--kb-color-border);margin:0 var(--kb-space-xs);flex-shrink:0}.kb-dropdown{padding:1px 0 1px var(--kb-space-sm);display:inline-block;position:relative}.kb-dropdown__label{min-width:var(--kb-touch-target-comfortable);min-height:var(--kb-touch-target-comfortable);font-size:var(--kb-text-sm);padding-right:var(--kb-space-lg);white-space:nowrap;cursor:pointer;background:0 0;border:none;align-items:center}.kb-dropdown__label:focus{outline:2px solid var(--kb-color-primary);outline-offset:-2px}.kb-dropdown__label--active{background:var(--kb-color-active);color:var(--kb-color-primary)}.kb-dropdown__label:after{content:"";opacity:.6;right:var(--kb-space-sm);border-top:4px solid;border-left:4px solid #0000;border-right:4px solid #0000;position:absolute;top:calc(50% - 2px)}.kb-dropdown__menu{background:var(--kb-color-surface);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-md);min-width:6em;box-shadow:var(--kb-shadow-lg);z-index:var(--kb-z-dropdown);padding:var(--kb-space-xs);margin-top:var(--kb-space-xs);opacity:0;visibility:hidden;white-space:nowrap;transition:all .2s;position:fixed;transform:translateY(-4px)}.kb-dropdown--open .kb-dropdown__menu{opacity:1;visibility:visible;transform:translateY(0)}.kb-dropdown__item{padding:var(--kb-space-sm) var(--kb-space-md);text-align:left;cursor:pointer;border-radius:var(--kb-radius-sm);color:var(--kb-color-text);font-size:var(--kb-text-sm);min-height:var(--kb-touch-target-comfortable);background:0 0;border:none;align-items:center;transition:background-color .2s;display:flex}.kb-dropdown__item:hover{background:var(--kb-color-hover)}.kb-dropdown__item:focus{outline:2px solid var(--kb-color-primary);outline-offset:-2px}.kb-dropdown__item--active{background:var(--kb-color-active);color:var(--kb-color-primary)}@media (prefers-contrast:more){.kb-dropdown__item,.kb-dropdown__item:focus{outline-width:3px}}@media (max-width:767px){.kb-dropdown__menu,.kb-dropdown__menu--mobile{top:auto;bottom:calc(var(--kb-touch-target-comfortable) + var(--kb-space-md) * 2);left:var(--kb-space-sm);right:var(--kb-space-sm);border-radius:var(--kb-radius-lg);min-width:auto;max-height:50vh;padding:var(--kb-space-md);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2;position:fixed;overflow-y:auto}.kb-dropdown__item{padding:var(--kb-space-md);min-height:var(--kb-touch-target-comfortable)}}.kb-submenu{margin-right:var(--kb-space-sm);position:relative}.kb-submenu__label{padding-right:var(--kb-space-lg);position:relative}.kb-submenu__label:after{content:"";opacity:.6;right:var(--kb-space-sm);border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:4px solid;position:absolute;top:calc(50% - 4px)}.kb-submenu__content{left:100%;top:var(--kb-space-xs);background:var(--kb-color-surface);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-md);min-width:4em;box-shadow:var(--kb-shadow-lg);z-index:calc(var(--kb-z-dropdown) + 1);padding:var(--kb-space-xs);opacity:0;visibility:hidden;transition:all .2s;position:absolute;transform:translate(-4px)}.kb-submenu:hover .kb-submenu__content,.kb-submenu--open .kb-submenu__content{opacity:1;visibility:visible;transform:translate(0)}@media (max-width:767px){.kb-submenu__content{display:none}}.kb-tooltip{background:var(--kb-color-text);color:var(--kb-color-surface);padding:var(--kb-space-xs) var(--kb-space-sm);border-radius:var(--kb-radius-sm);font-size:var(--kb-text-xs);white-space:nowrap;opacity:0;visibility:hidden;margin-bottom:var(--kb-space-xs);z-index:var(--kb-z-tooltip);transition:all .2s;position:absolute;bottom:100%;left:50%;transform:translate(-50%)}.kb-tooltip:after{content:"";border-left:4px solid #0000;border-right:4px solid #0000;border-top:4px solid var(--kb-color-text);position:absolute;top:100%;left:50%;transform:translate(-50%)}.kb-menu__button:hover .kb-tooltip{opacity:1;visibility:visible}@media (max-width:767px){.kb-tooltip{display:none}}@media (prefers-reduced-motion:reduce){.kb-menu__button,.kb-dropdown__menu,.kb-submenu__content,.kb-tooltip{transition:none}}.kb-icon{min-width:var(--kb-touch-target-comfortable);min-height:var(--kb-touch-target-comfortable);line-height:var(--kb-touch-target-comfortable);vertical-align:middle;display:inline-block}.kb-prompt{background:var(--kb-color-surface);padding:var(--kb-space-lg) var(--kb-space-xl);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-lg);z-index:var(--kb-z-modal);box-shadow:var(--kb-shadow-lg);min-width:320px;max-width:90vw;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.kb-prompt form{gap:var(--kb-space-md);flex-direction:column;display:flex}.kb-prompt form>div{flex-direction:column;display:flex}.kb-prompt-backdrop{z-index:1299;position:fixed;inset:0}.kb-prompt form>div.kb-prompt__buttons{margin-top:var(--kb-space-sm);justify-content:space-between;gap:var(--kb-space-sm);flex-flow:row}.kb-prompt h5{font-weight:600;font-size:var(--kb-text-lg);color:var(--kb-color-text);margin:0}.kb-prompt input[type=text],.kb-prompt textarea{background:var(--kb-color-surface-elevated);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);padding:var(--kb-space-sm) var(--kb-space-md);font-size:var(--kb-text-base);color:var(--kb-color-text);box-sizing:border-box;outline:none;width:100%}.kb-prompt input[type=text]:focus,.kb-prompt textarea:focus{border-color:var(--kb-color-primary);box-shadow:0 0 0 3px var(--kb-color-focus)}.kb-prompt--close{right:var(--kb-space-sm);top:var(--kb-space-sm);color:var(--kb-color-text-muted);padding:var(--kb-space-xs);cursor:pointer;border-radius:var(--kb-radius-sm);width:var(--kb-space-lg);height:var(--kb-space-lg);background:0 0;border:none;justify-content:center;align-items:center;display:flex;position:absolute}.kb-prompt--close:hover{background:var(--kb-color-hover);color:var(--kb-color-text)}.kb-prompt--close:after{content:"✕";font-size:var(--kb-text-sm)}.kb-invalid{color:#991b1b;border-radius:var(--kb-radius-sm);padding:var(--kb-space-sm) var(--kb-space-md);min-width:10em;font-size:var(--kb-text-sm);background:#fef2f2;border:1px solid #fecaca;position:absolute}.kb-prompt__buttons{margin-top:var(--kb-space-sm);gap:var(--kb-space-sm);flex-flow:row;justify-content:space-between;display:flex}.kb-prompt__buttons button{padding:var(--kb-space-xs) var(--kb-space-md);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);background:var(--kb-color-surface);color:var(--kb-color-text);cursor:pointer;font-size:var(--kb-text-sm);flex:none;width:auto;min-height:auto;font-weight:500;transition:background-color .15s,border-color .15s}.kb-prompt__buttons button[type=submit]{order:2}.kb-prompt__buttons button[type=button]{order:1}.kb-prompt__buttons button:hover{background:var(--kb-color-hover)}.kb-prompt__buttons button[type=submit]{background:var(--kb-color-primary);color:#fff;border-color:var(--kb-color-primary)}.kb-prompt__buttons button[type=submit]:hover{background:var(--kb-color-primary-hover)}.kb-prompt__file-field{gap:var(--kb-space-xs);flex-direction:column;display:flex}.kb-prompt__file-label{font-size:var(--kb-text-sm);color:var(--kb-color-text-muted);font-weight:500}.kb-prompt__file-input{background:var(--kb-color-surface-elevated);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);padding:var(--kb-space-sm) var(--kb-space-md);font-size:var(--kb-text-sm);color:var(--kb-color-text);box-sizing:border-box;cursor:pointer;width:100%}.kb-prompt__file-input::file-selector-button{background:var(--kb-color-primary);color:#fff;border-radius:var(--kb-radius-sm);padding:var(--kb-space-xs) var(--kb-space-md);margin-right:var(--kb-space-md);cursor:pointer;font-size:var(--kb-text-sm);border:none;font-weight:500;transition:background-color .15s}.kb-prompt__file-input::file-selector-button:hover{background:var(--kb-color-primary-hover)}.kb-prompt__file-input:focus{border-color:var(--kb-color-primary);box-shadow:0 0 0 3px var(--kb-color-focus);outline:none}.kb-prompt__file-name{font-size:var(--kb-text-xs);color:var(--kb-color-text-muted);font-style:italic}@media (max-width:767px){.kb-editor-prompt{bottom:var(--kb-space-md);left:var(--kb-space-md);right:var(--kb-space-md);border-radius:var(--kb-radius-lg);max-width:none;padding:var(--kb-space-lg);position:fixed;top:auto;transform:none}.kb-editor-prompt input[type=text],.kb-editor-prompt textarea{min-height:var(--kb-touch-target-min);padding:var(--kb-space-sm);font-size:var(--kb-text-base);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);background:var(--kb-color-surface);color:var(--kb-color-text)}.kb-editor-prompt-buttons{gap:var(--kb-space-sm);margin-top:var(--kb-space-md);display:flex}.kb-editor-prompt-buttons button{min-height:var(--kb-touch-target-comfortable);padding:var(--kb-space-sm) var(--kb-space-md);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);background:var(--kb-color-surface);color:var(--kb-color-text);font-size:var(--kb-text-base);cursor:pointer;flex:1}.kb-editor-prompt-buttons button[type=submit]{background:var(--kb-color-primary);color:#fff;border-color:var(--kb-color-primary)}}:root{--kb-bg:#fff;--kb-fg:#1f1f1f;--kb-subtle:#5f6368;--kb-border:#e0e0e0;--kb-hover:#f1f3f4;--kb-active:#e8f0fe;--kb-focus:#1a73e8;--kb-shadow:0 1px 2px #0000000f, 0 2px 8px #00000014;--kb-height:48px;--kb-btn-h:34px;--kb-radius:10px;--kb-gap:8px;--kb-icon:20px;--kb-font:13px}@media (prefers-color-scheme:dark){:root{--kb-bg:#fff;--kb-fg:#1f1f1f;--kb-subtle:#5f6368;--kb-border:#e6e7e8;--kb-hover:#f3f4f5;--kb-active:#e8f0fe}}.kb-menu__wrapper{z-index:50;background:0 0;padding:8px 12px}.kb-menu{background:var(--kb-bg);border:1px solid var(--kb-border);border-radius:var(--kb-radius);box-shadow:var(--kb-shadow);min-height:var(--kb-height);align-items:center;gap:var(--kb-gap);padding:0 8px;display:flex;container-type:inline-size}.kb-menu__spacer{height:var(--kb-height)}.kb-menu__item{align-items:center;display:inline-flex}.kb-menu__separator{background:var(--kb-border);flex:none;width:1px;height:22px;margin:0 2px}.kb-menu__button{height:var(--kb-btn-h);min-width:34px;color:var(--kb-fg);font:500 var(--kb-font)/1.2 system-ui, -apple-system, "Segoe UI", Roboto, Arial;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;background:0 0;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:6px 10px;display:inline-flex}.kb-menu__button svg,.kb-menu__button .kb-icon{width:var(--kb-icon);height:var(--kb-icon);fill:currentColor}.kb-menu__button:hover{background:var(--kb-hover)}.kb-menu__button:focus-visible{outline:2px solid var(--kb-focus);outline-offset:2px;background:var(--kb-hover)}.kb-menu__button--active,.kb-menu__button[aria-pressed=true]{background:var(--kb-active);border-color:#d2e3fc}.kb-menu__button--disabled,.kb-menu__button[aria-disabled=true]{opacity:.5;cursor:default;pointer-events:none}.kb-menu__button--icon-only>span{display:none}.kb-dropdown{align-items:center;display:inline-flex;position:relative}.kb-dropdown__label{height:var(--kb-btn-h);color:var(--kb-fg);font:500 var(--kb-font)/1.2 system-ui, -apple-system, "Segoe UI", Roboto, Arial;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;padding:6px 10px;display:inline-flex}.kb-dropdown__label:hover{background:var(--kb-hover)}.kb-dropdown--open .kb-dropdown__label{background:var(--kb-active);border-color:#d2e3fc}.kb-dropdown__menu{background:var(--kb-bg);min-width:240px;max-height:60vh;color:var(--kb-fg);border:1px solid var(--kb-border);box-shadow:var(--kb-shadow);z-index:100;border-radius:10px;gap:2px;padding:6px;display:grid;position:absolute;top:calc(100% + 6px);left:0;overflow:auto}.kb-dropdown__item{display:contents}.kb-dropdown__item .kb-menu__button{border-radius:8px;justify-content:flex-start;width:100%}.kb-submenu{align-items:center;display:inline-flex;position:relative}.kb-submenu__label{height:var(--kb-btn-h);border-radius:8px;align-items:center;gap:6px;padding:6px 10px;display:inline-flex}.kb-submenu__label:hover{background:var(--kb-hover)}.kb-submenu__content{background:var(--kb-bg);border:1px solid var(--kb-border);min-width:220px;max-height:60vh;box-shadow:var(--kb-shadow);z-index:100;border-radius:10px;padding:6px;display:none;position:absolute;top:calc(100% + 6px);left:0;overflow:auto}.kb-submenu--open .kb-submenu__content{display:block}.kb-overflow-toggle{display:none}.kb-menu__overflow-row{background:var(--kb-bg);border:1px solid var(--kb-border);box-shadow:var(--kb-shadow);border-radius:10px;flex-wrap:wrap;align-items:center;gap:6px;margin:6px 12px 0;padding:6px;display:none}.kb-menu--narrow .kb-overflow-toggle{display:inline-flex}.kb-menu--overflow-open .kb-menu__overflow-row{display:flex}@media (max-width:600px){.kb-menu__wrapper{flex-direction:column;display:flex}.kb-menu--overflow-open .kb-menu__overflow-row{order:-1}}.kb-custom-menu__wrapper{flex-direction:column;height:100%;display:flex;position:relative}.kb-custom-menu__editor{flex-direction:column;max-height:100%;display:flex;position:relative;overflow:auto}.kb-custom-menu{margin:calc(-1 * var(--kb-space-sm)) 0 0 0;line-height:1;font-size:var(--kb-text-sm);padding:0 var(--kb-space-sm);background:var(--kb-color-surface-elevated);border-bottom:1px solid var(--kb-color-border-strong);z-index:1000;flex-wrap:nowrap;align-items:center;gap:2px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;display:flex;position:sticky;top:0;overflow:visible}.kb-custom-menu__item{align-items:center;display:inline-flex}.kb-custom-menu__item .kb-menu__button,.kb-custom-menu__item .kb-dropdown__label{width:32px;min-width:32px;height:32px;min-height:32px;color:var(--kb-color-icon,#5f6368);cursor:pointer;border-radius:var(--kb-radius-sm);font-size:var(--kb-text-sm);background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:background-color .2s,outline-color .15s;display:inline-flex}.kb-custom-menu__item .kb-menu__button:focus,.kb-custom-menu__item .kb-dropdown__label:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__item .kb-menu__button:focus:not(:focus-visible),.kb-custom-menu__item .kb-dropdown__label:focus:not(:focus-visible){outline:none}.kb-custom-menu__item .kb-menu__button:focus-visible,.kb-custom-menu__item .kb-dropdown__label:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__item .kb-menu__button:hover,.kb-custom-menu__item .kb-dropdown__label:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__item .kb-menu__button--active{background:var(--kb-color-active);color:var(--kb-color-primary)}.kb-custom-menu__item .kb-menu__button svg{fill:currentColor;width:16px!important;height:16px!important}.kb-custom-menu__item .kb-icon{justify-content:center;align-items:center;line-height:1;display:inline-flex}.kb-custom-menu__item .kb-dropdown__label-text{display:none}.kb-custom-menu__item .kb-dropdown__label{justify-content:center;align-items:center;display:inline-flex;position:relative}.kb-custom-menu__item .kb-dropdown__label .kb-icon{justify-content:center;align-items:center;display:inline-flex}.kb-custom-menu__item .kb-dropdown__label .kb-icon svg{fill:currentColor;width:16px!important;height:16px!important}.kb-custom-menu__item .kb-dropdown__label:after{content:"";opacity:.7;border-top:3px solid;border-left:3px solid #0000;border-right:3px solid #0000;position:absolute;bottom:2px;right:2px}.kb-custom-menu__item .kb-dropdown{padding:1px 0}.kb-custom-menu .kb-dropdown__menu{background:var(--kb-menu-dropdown-bg);border:1px solid var(--kb-menu-dropdown-border);border-radius:var(--kb-radius-lg);gap:2px;padding:4px;box-shadow:0 2px 10px #0000004d}.kb-custom-menu .kb-dropdown__item{display:block!important}.kb-custom-menu .kb-dropdown__item .kb-menu__button{border-radius:var(--kb-radius-sm);width:100%;min-height:32px;color:var(--kb-menu-dropdown-text);font-size:var(--kb-text-sm);align-items:center;gap:8px;background:0 0!important;justify-content:flex-start!important;padding:6px 10px!important;display:flex!important}.kb-custom-menu .kb-dropdown__item .kb-menu__button:hover{background:#e8eaed14!important}.kb-custom-menu .kb-dropdown__item .kb-menu__button .kb-icon,.kb-custom-menu .kb-dropdown__item .kb-icon{flex-shrink:0;width:18px!important;min-width:18px!important;max-width:18px!important;height:18px!important;min-height:18px!important;max-height:18px!important;margin:0!important;line-height:1!important}.kb-custom-menu .kb-dropdown__item .kb-menu__button .kb-icon svg,.kb-custom-menu .kb-dropdown__item .kb-icon svg{width:18px!important;height:18px!important}.kb-custom-menu .kb-submenu__content{background:var(--kb-menu-dropdown-bg)!important;border:1px solid var(--kb-menu-dropdown-border)!important;border-radius:var(--kb-radius-lg)!important;box-shadow:0 2px 10px #0000004d!important}.kb-custom-menu .kb-submenu__label{color:var(--kb-menu-dropdown-text)!important}.kb-custom-menu .kb-submenu__label:hover{background:0 0}.kb-custom-menu .kb-submenu__label:after{border-left-color:var(--kb-menu-dropdown-text)!important}.kb-custom-menu__separator{width:1px;height:var(--kb-space-lg);background:var(--kb-color-border-strong);flex-shrink:0;margin:0 8px}.kb-custom-menu__overflow-toggle{width:32px;min-width:32px;height:32px;min-height:32px;color:var(--kb-color-text);cursor:pointer;border-radius:var(--kb-radius-sm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;padding:0;transition:background-color .2s;display:inline-flex}.kb-custom-menu__overflow-toggle:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__overflow-toggle:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__overflow-toggle:focus:not(:focus-visible){outline:none}.kb-custom-menu__overflow-toggle:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__overflow-toggle svg{fill:currentColor;width:16px;height:16px}.kb-custom-menu__overflow-menu{top:32px;right:var(--kb-space-xs);background:var(--kb-color-surface-elevated);border-radius:var(--kb-radius-sm);width:auto;min-width:180px;max-width:320px;box-shadow:var(--kb-shadow-lg);z-index:1001;border:none;flex-direction:column;display:flex;position:absolute;overflow:hidden}.kb-custom-menu__overflow-content{padding:var(--kb-space-sm);flex:1;min-height:0;max-height:800px;overflow-y:auto}.kb-custom-menu__overflow-content--grid{padding:0 var(--kb-space-sm);flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:2px;display:flex}.kb-custom-menu__overflow-header{width:100%;padding:var(--kb-space-sm) var(--kb-space-md) var(--kb-space-xs) var(--kb-space-md);text-transform:uppercase;letter-spacing:.5px;color:var(--kb-color-text-muted);margin-bottom:var(--kb-space-xs);font-size:11px;font-weight:600}.kb-custom-menu__overflow-item{padding:var(--kb-space-md) 0;cursor:pointer;border-radius:var(--kb-radius-sm);margin:0 var(--kb-space-sm);align-items:center;gap:0;transition:background-color .2s;display:flex}.kb-custom-menu__overflow-item:focus{outline:2px solid var(--kb-color-primary);outline-offset:-2px}.kb-custom-menu__overflow-item:focus:not(:focus-visible){outline:none}.kb-custom-menu__overflow-item:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:-2px}.kb-custom-menu__overflow-item--grid{border-radius:var(--kb-radius-sm);flex-shrink:0;justify-content:center;align-items:center;gap:0;width:32px;height:32px;margin:0;padding:4px;display:inline-flex;position:relative}.kb-custom-menu__overflow-item--grid:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__overflow-item--grid.kb-custom-menu__overflow-item--dropdown{gap:0;width:32px;min-width:32px;padding:4px;position:relative}.kb-custom-menu__overflow-item-indicator{opacity:.7;border-top:3px solid;border-left:3px solid #0000;border-right:3px solid #0000;margin-left:0;font-size:0;line-height:0;position:absolute;top:50%;right:2px;transform:translateY(-50%)}.kb-custom-menu__overflow-item:not(.kb-custom-menu__overflow-item--grid):hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__overflow-item--grid .kb-menu__button,.kb-custom-menu__overflow-item--grid .kb-dropdown__label{width:32px;min-width:32px;height:32px;min-height:32px;color:var(--kb-color-text);cursor:pointer;background:0 0;border:none;border-radius:0;justify-content:center;align-items:center;padding:0;display:flex}.kb-custom-menu__overflow-item--grid .kb-menu__button svg{width:16px!important;height:16px!important}.kb-custom-menu__overflow-item:not(.kb-custom-menu__overflow-item--grid) .kb-menu__button,.kb-custom-menu__overflow-item:not(.kb-custom-menu__overflow-item--grid) .kb-dropdown__label{min-height:36px;padding:var(--kb-space-sm) 0;color:var(--kb-color-text);cursor:pointer;font-size:var(--kb-text-sm);background:0 0;border:none;border-radius:0;flex-shrink:0;align-items:center;transition:none;display:flex}.kb-custom-menu__overflow-item:not(.kb-custom-menu__overflow-item--grid) .kb-menu__button:not(:has(svg)):not(:has(.kb-icon)){display:none}.kb-custom-menu__overflow-item--grid .kb-menu__button{display:flex!important}.kb-custom-menu__overflow-item[data-tool-id=tool-toggle-underline] .kb-menu__button{display:flex}.kb-custom-menu__overflow-item--grid[data-tool-id=tool-insert],.kb-custom-menu__overflow-item--grid[data-tool-id=tool-type]{height:36px}.kb-custom-menu__overflow-item[data-tool-id=tool-text-color] button{display:flex}.kb-custom-menu__item[data-tool-id=tool-insert],.kb-custom-menu__item[data-tool-id=tool-type],.kb-custom-menu__item[data-tool-id=tool-table]{position:relative}.kb-custom-menu__item[data-tool-id=tool-insert]>div>button:after,.kb-custom-menu__item[data-tool-id=tool-type]>div>button:after,.kb-custom-menu__item[data-tool-id=tool-table]>div>button:after{content:"";opacity:.7;border-top:3px solid;border-left:3px solid #0000;border-right:3px solid #0000;position:absolute;bottom:2px;right:2px}.kb-custom-menu__item[data-tool-id=tool-toggle-code-font] button>span,.kb-custom-menu__item[data-tool-id=tool-text-color] button>span,.kb-custom-menu__item[data-tool-id=tool-text-highlight] button>span,.kb-custom-menu__item[data-tool-id=tool-toggle-underline] button>span{display:none}.kb-custom-menu__overflow-item .kb-menu__button:hover,.kb-custom-menu__overflow-item .kb-dropdown__label:hover{background:0 0}.kb-custom-menu__overflow-item .kb-menu__button svg{fill:currentColor;flex-shrink:0;width:16px;height:16px}.kb-custom-menu__overflow-item-label{color:var(--kb-color-text);font-size:var(--kb-text-sm);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.kb-custom-menu__overflow-item-chevron{padding-left:var(--kb-space-sm);color:var(--kb-color-text-muted);align-items:center;margin-left:auto;display:flex}.kb-custom-menu__overflow-item-chevron svg{fill:none;stroke:currentColor;width:16px;height:16px}.kb-custom-menu__overflow-submenu-header{align-items:center;gap:var(--kb-space-sm);padding:var(--kb-space-md);border-bottom:1px solid var(--kb-color-border);background:var(--kb-color-surface);z-index:1;display:flex;position:sticky;top:0}.kb-custom-menu__overflow-back-button{padding:var(--kb-space-xs);border-radius:var(--kb-radius-sm);cursor:pointer;color:var(--kb-color-text);background:0 0;border:none;justify-content:center;align-items:center;transition:background-color .15s;display:flex}.kb-custom-menu__overflow-back-button:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__overflow-back-button:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__overflow-back-button:focus:not(:focus-visible){outline:none}.kb-custom-menu__overflow-back-button:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__overflow-back-button svg{fill:none;stroke:currentColor;width:16px;height:16px}.kb-custom-menu__overflow-submenu-title{font-size:var(--kb-text-base);color:var(--kb-color-text);white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:500;overflow:hidden}.kb-custom-menu__overflow-separator{background:var(--kb-color-border);height:1px;margin:var(--kb-space-sm) 0}.kb-custom-menu__overflow-footer{border-top:1px solid var(--kb-color-border);background:var(--kb-color-surface);padding:var(--kb-space-sm) 0;flex-shrink:0}.kb-custom-menu__manage-button{width:calc(100% - 32px);margin:0 var(--kb-space-md);min-height:36px;padding:var(--kb-space-sm) 12px;color:var(--kb-color-primary);cursor:pointer;border-radius:var(--kb-radius-sm);font-size:var(--kb-text-sm);text-align:left;background:0 0;border:none;align-items:center;gap:12px;font-weight:500;transition:background-color .2s;display:flex}.kb-custom-menu__manage-button:hover{background:var(--kb-color-hover)}.kb-custom-menu__manage-button svg{flex-shrink:0;width:16px;height:16px}.kb-custom-menu__modal-backdrop{z-index:10000;background:#00000080;justify-content:center;align-items:center;padding:20px;animation:.2s fadeIn;display:flex;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.kb-custom-menu__modal{background:var(--kb-color-surface);border-radius:12px;flex-direction:column;width:100%;max-width:500px;max-height:80vh;animation:.3s slideUp;display:flex;box-shadow:0 8px 32px #0003}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.kb-custom-menu__modal-header{padding:20px var(--kb-space-lg);border-bottom:1px solid var(--kb-color-border);justify-content:space-between;align-items:center;display:flex}.kb-custom-menu__modal-header h2{color:var(--kb-color-text);margin:0;font-size:20px;font-weight:500}.kb-custom-menu__modal-close{width:32px;height:32px;color:var(--kb-color-text-muted);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:background-color .2s;display:flex}.kb-custom-menu__modal-close:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__modal-close svg{width:16px;height:16px}.kb-custom-menu__modal-message{padding:var(--kb-space-md) var(--kb-space-lg);background:var(--kb-menu-info-bg);color:var(--kb-menu-info-text);border-bottom:1px solid var(--kb-color-border-strong);font-size:13px;font-weight:500}.kb-custom-menu__modal-content{padding:var(--kb-space-md) 0;flex:1;overflow-y:auto}.kb-custom-menu__tool-list{flex-direction:column;gap:2px;display:flex}.kb-custom-menu__tool-item{padding:12px var(--kb-space-lg);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:12px;transition:background-color .2s;display:flex}.kb-custom-menu__tool-item:hover{background:#3c40430a}.kb-custom-menu__tool-item input[type=checkbox]{cursor:pointer;width:18px;height:18px;accent-color:var(--kb-color-primary)}.kb-custom-menu__tool-item span{color:var(--kb-color-text);font-size:var(--kb-text-sm);flex:1}.kb-custom-menu__tool-item--disabled{opacity:.5;cursor:not-allowed}.kb-custom-menu__tool-item--disabled:hover{background:0 0}.kb-custom-menu__tool-item--disabled input[type=checkbox]{cursor:not-allowed}.kb-custom-menu__modal-footer{padding:var(--kb-space-md) var(--kb-space-lg);border-top:1px solid var(--kb-color-border);justify-content:flex-end;align-items:center;gap:var(--kb-space-sm);display:flex}.kb-custom-menu__modal-button{min-width:80px;padding:var(--kb-space-sm) var(--kb-space-lg);border-radius:var(--kb-radius-sm);font-size:var(--kb-text-sm);cursor:pointer;border:none;font-weight:500;transition:all .2s}.kb-custom-menu__modal-button--primary{background:var(--kb-color-primary);color:#fff}.kb-custom-menu__modal-button--primary:hover{background:var(--kb-color-primary-hover);box-shadow:var(--kb-shadow-sm)}.kb-custom-menu__modal-button--primary:active{background:var(--kb-color-primary-active);box-shadow:0 1px 2px #00000029}@media (max-width:767.98px){.kb-custom-menu__overflow-menu{max-width:100%;left:var(--kb-space-sm);right:var(--kb-space-sm)}.kb-custom-menu__overflow-item{min-height:32px;padding:var(--kb-space-md)}.kb-custom-menu__overflow-item--grid{min-width:32px;min-height:32px}.kb-custom-menu__modal{border-radius:12px 12px 0 0;max-width:100%;max-height:90vh;margin:0}.kb-custom-menu__overflow-back-button{min-width:32px;min-height:32px}}@media (prefers-color-scheme:dark){.kb-custom-menu{background:var(--kb-color-surface-elevated);border-bottom-color:var(--kb-color-border)}.kb-custom-menu__item .kb-menu__button,.kb-custom-menu__item .kb-dropdown__label,.kb-custom-menu__overflow-toggle{color:var(--kb-menu-dropdown-text)}.kb-custom-menu__item .kb-menu__button:hover,.kb-custom-menu__item .kb-dropdown__label:hover,.kb-custom-menu__overflow-toggle:hover{background:#e8eaed14}.kb-custom-menu__separator{background:var(--kb-menu-dropdown-border)}.kb-custom-menu__overflow-menu{background:var(--kb-menu-dropdown-bg);border-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__overflow-header{color:var(--kb-color-text-muted)}.kb-custom-menu__overflow-item .kb-menu__button,.kb-custom-menu__overflow-item .kb-dropdown__label,.kb-custom-menu__overflow-item-label{color:var(--kb-menu-dropdown-text)}.kb-custom-menu__overflow-item:hover{background:#e8eaed14}.kb-custom-menu__overflow-separator{background:var(--kb-menu-dropdown-border)}.kb-custom-menu__overflow-footer{background:var(--kb-menu-dropdown-bg);border-top-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__modal{background:var(--kb-color-surface)}.kb-custom-menu__modal-header{border-bottom-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__modal-header h2{color:var(--kb-menu-dropdown-text)}.kb-custom-menu__modal-close{color:var(--kb-color-text-muted)}.kb-custom-menu__modal-message{background:var(--kb-menu-info-bg);color:var(--kb-menu-info-text);border-bottom-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__modal-footer{border-top-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__tool-item span{color:var(--kb-menu-dropdown-text)}}.kb-custom-menu__wrapper--dragging{-webkit-user-select:none;user-select:none;cursor:grabbing!important}.kb-custom-menu__wrapper--dragging *{cursor:grabbing!important}.kb-custom-menu__item{cursor:grab;transition:opacity .2s,transform .2s}.kb-custom-menu__wrapper--dragging .kb-custom-menu__item{cursor:grabbing!important}.kb-custom-menu__item .kb-menu__button,.kb-custom-menu__item .kb-dropdown__label{cursor:pointer!important}.kb-custom-menu__wrapper--dragging .kb-custom-menu__item .kb-menu__button,.kb-custom-menu__wrapper--dragging .kb-custom-menu__item .kb-dropdown__label{cursor:grabbing!important}.kb-custom-menu__item--dragging,.kb-custom-menu__overflow-item--dragging{opacity:.3}.kb-custom-menu__drag-ghost{opacity:.9;background:var(--kb-color-surface-elevated);border-radius:var(--kb-radius-sm);transform:scale(1.05);box-shadow:0 4px 12px #00000026}.kb-custom-menu__drop-placeholder{background:var(--kb-color-primary);border-radius:2px;flex-shrink:0;width:4px;min-height:32px;margin:0 2px;display:inline-flex}.kb-custom-menu__pinned-dropdown{border:1px solid var(--kb-color-border-strong);border-radius:var(--kb-radius-lg);min-width:200px;max-width:300px;box-shadow:var(--kb-shadow-lg);max-height:400px;overflow-y:auto;background:var(--kb-menu-dropdown-bg)!important}.kb-custom-menu__overflow-footer{padding:var(--kb-space-sm);border-top:1px solid var(--kb-color-border);justify-content:center;display:flex}.kb-custom-menu__reset-button{align-items:center;gap:var(--kb-space-sm);padding:var(--kb-space-sm) var(--kb-space-md);color:var(--kb-color-text-muted);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);cursor:pointer;background:0 0;font-size:12px;transition:all .2s;display:flex}.kb-custom-menu__reset-button:hover{background:var(--kb-color-surface-hover);color:var(--kb-color-text);border-color:var(--kb-color-border-strong)}.kb-custom-menu__reset-button:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__reset-button:focus:not(:focus-visible){outline:none}.kb-custom-menu__reset-button:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__reset-button svg{flex-shrink:0;width:14px;height:14px}.kb-custom-menu__reset-button span{white-space:nowrap}.kb-custom-menu__reset-button--icon-only{padding:var(--kb-space-sm);background:0 0;border:none}.kb-custom-menu__reset-button--icon-only:hover{background:var(--kb-color-surface-hover);border:none}.kb-custom-menu__reset-button--icon-only svg{width:18px;height:18px}.kb-custom-menu__pinned-dropdown{z-index:999999}.codecrock-linenumbers-inner-wrap{position:absolute;top:0;bottom:0;left:0;overflow:hidden}.codecrock-linenumbers{mix-blend-mode:initial;background:#80808026;width:40px;height:100%}.codecrock-linenumber{position:relative;top:0}.codecrock-root{position:relative}.codecrock-root .codecrock-select{opacity:0;z-index:99999;position:absolute;top:5px;right:5px}.codecrock-root:hover .codecrock-select{opacity:1}.codecrock{font-family:monospace}.ts-property{color:#905}.ts-function,.ts-function_call{color:#07a}.ts-keyword{color:#d73;font-weight:700}.ts-string{color:#690}.ts-number{color:#099}.ts-comment{color:#998;font-style:italic}.ts-perator{color:#9a6}.ts-type{color:#458;font-weight:700}.ts-variable,.ts-variable_builtin{color:#333}.ts-constant,.ts-constant_builtin{color:#0086b3}.ts-punctuation,.ts-punctuation_bracket{color:#999}.ts-namespace{color:#000;font-weight:700}.ts-function_builtin,.ts-keyword_operator{color:#d73}.ts-string_special{color:#d44}.ts-tag{color:teal}.ts-attribute{color:#e90}.ts-text_title{font-weight:bolder}.ts-punctuation_special{color:green}@media (prefers-color-scheme:dark){.ts-property{color:#9cdcfe}.ts-function,.ts-function_call,.ts-function_builtin{color:#dcdcaa}.ts-keyword,.ts-keyword_operator{color:#c586c0}.ts-string,.ts-string_special{color:#ce9178}.ts-number{color:#b5cea8}.ts-comment{color:#6a9955}.ts-operator{color:#d4d4d4}.ts-type{color:#4ec9b0}.ts-variable,.ts-variable_builtin{color:#d4d4d4}.ts-constant,.ts-constant_builtin{color:#4fc1ff}.ts-punctuation,.ts-punctuation_bracket{color:#d4d4d4}.ts-namespace{color:#c8c8c8}.ts-tag{color:#569cd6}.ts-attribute{color:#9cdcfe}}.ts-diff_plus{color:green}.ts-diff_minus{color:red}.kb-autocomplete__wrapper{padding:6px var(--kb-space-sm);background:var(--kb-color-surface-elevated);border:1px solid #ccc;border-radius:6px;margin:0;list-style:none;position:absolute}.kb-autocomplete__wrapper li.active{color:#fff;background:#e8eaed14}.kb-autocomplete--decor{outline:3px dotted red}.kb-hover__wrapper{background:var(--kb-color-surface-elevated);outline:3px dotted #00f}.kb-hover--decor{outline:3px dotted green}.kb-image-wrapper{max-width:100%;line-height:0;display:inline-block;position:relative}.kb-image-wrapper img{max-width:100%;display:block}.kb-image-resize-handle{background-color:var(--kb-color-primary);border:2px solid var(--kb-color-surface);border-radius:var(--kb-radius-sm);box-sizing:border-box;opacity:0;z-index:10;width:10px;height:10px;transition:opacity .15s;position:absolute}.kb-image-wrapper:hover .kb-image-resize-handle,.kb-image-wrapper.kb-image-resizing .kb-image-resize-handle{opacity:1}.kb-image-resize-handle-nw{cursor:nw-resize;top:-5px;left:-5px}.kb-image-resize-handle-ne{cursor:ne-resize;top:-5px;right:-5px}.kb-image-resize-handle-sw{cursor:sw-resize;bottom:-5px;left:-5px}.kb-image-resize-handle-se{cursor:se-resize;bottom:-5px;right:-5px}.kb-image-wrapper.ProseMirror-selectednode{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-image-wrapper.ProseMirror-selectednode .kb-image-resize-handle{opacity:1}.kb-image-wrapper.kb-image-resizing{-webkit-user-select:none;user-select:none}.kb-image-wrapper.kb-image-resizing img{pointer-events:none}.kb-editor ul[data-type=task_list]{margin-left:0;padding:0;list-style:none}.kb-editor li[data-checked=true]{text-decoration:line-through}.kb-editor li[data-checked]{margin-top:.25em;margin-bottom:.25em;display:flex}.kb-editor li[data-checked]>label{-webkit-user-select:none;user-select:none;flex:none;margin-right:.5rem}.kb-editor li[data-checked]>label>input[type=checkbox]{cursor:pointer;margin-right:8px}.kb-editor li[data-checked]>label>input[type=checkbox]:checked+span{color:#888;text-decoration:line-through}.kb-editor li[data-checked]>div{flex:auto}.kb-editor li[data-checked]>div>p{margin:0}
1
+ :root,:host{--kb-space-xs:.25rem;--kb-space-sm:.5rem;--kb-space-md:1rem;--kb-space-lg:1.5rem;--kb-space-xl:2rem;--kb-text-xs:.75rem;--kb-text-sm:.875rem;--kb-text-base:1rem;--kb-text-lg:1.125rem;--kb-touch-target-min:44px;--kb-touch-target-comfortable:48px;--kb-color-hover:#3b82f60d;--kb-color-active:#3b82f61a;--kb-color-focus:#3b82f633;--kb-radius-sm:4px;--kb-radius-md:6px;--kb-radius-lg:8px;--kb-shadow-sm:0 1px 2px #0000000d;--kb-shadow-md:0 4px 6px #0000001a;--kb-shadow-lg:0 10px 15px #0000001a;--kb-z-dropdown:1100;--kb-z-tooltip:1200;--kb-z-modal:1300;--kb-z-notification:1400;--kb-color-primary:#3b82f6;--kb-color-primary-hover:#2563eb;--kb-color-primary-active:#1d4ed8;--kb-color-primary-rgb:59, 130, 246;--kb-color-text:#1f2937;--kb-color-text-muted:#6b7280;--kb-color-icon:#5f6368;--kb-color-surface:#fff;--kb-color-surface-elevated:#f9fafb;--kb-color-surface-hover:#3c404314;--kb-color-border:#e5e7eb;--kb-color-border-strong:#d1d5db;--kb-menu-dropdown-bg:#fff;--kb-menu-dropdown-border:#dadce0;--kb-menu-dropdown-text:#3c4043;--kb-menu-dropdown-hover:#3c404314;--kb-menu-info-bg:#e8f0fe;--kb-menu-info-text:#1967d2}.kb-component--brand-corporate{--kb-color-primary:#1e40af;--kb-color-primary-hover:#1e3a8a;--kb-color-primary-rgb:30, 64, 175}.kb-component--brand-creative{--kb-color-primary:#7c3aed;--kb-color-primary-hover:#6d28d9;--kb-color-primary-rgb:124, 58, 237}@media (prefers-color-scheme:dark){:root,:host{--kb-color-text:#f9fafb;--kb-color-text-muted:#9ca3af;--kb-color-icon:#bdc1c6;--kb-color-surface:#1f2937;--kb-color-surface-elevated:#374151;--kb-color-border:#374151;--kb-color-border-strong:#4b5563;--kb-color-hover:#3b82f61a;--kb-color-active:#3b82f633;--kb-menu-dropdown-bg:#344154;--kb-menu-dropdown-border:#5f6368;--kb-menu-dropdown-text:#e8eaed;--kb-menu-dropdown-hover:#e8eaed14}}.kb-component--dark{--kb-color-text:#f9fafb;--kb-color-text-muted:#9ca3af;--kb-color-icon:#bdc1c6;--kb-color-surface:#1f2937;--kb-color-surface-elevated:#374151;--kb-color-border:#374151;--kb-color-border-strong:#4b5563;--kb-color-hover:#3b82f61a;--kb-color-active:#3b82f633;--kb-menu-dropdown-bg:#344154;--kb-menu-dropdown-border:#5f6368;--kb-menu-dropdown-text:#e8eaed;--kb-menu-dropdown-hover:#e8eaed14}.kb-component{background:var(--kb-color-surface);color:var(--kb-color-text);border-radius:var(--kb-radius-md);border:2px solid var(--kb-color-border);padding:var(--kb-space-sm) 0;background-clip:padding-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.5;position:relative}.kb-editor{all:initial;display:block}.kb-editor,.kb-editor *{box-sizing:border-box;margin:0;padding:0}.kb-editor{word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;padding:var(--kb-space-sm) var(--kb-space-md) var(--kb-space-sm) var(--kb-space-lg);font-size:var(--kb-text-base);outline:none;line-height:1.6}@media (max-width:767px){.kb-editor{padding:var(--kb-space-md);font-size:var(--kb-text-base);line-height:1.7}}.kb-editor-hideselection ::selection{background:0 0}.kb-editor-hideselection ::selection{background:0 0}.kb-editor-hideselection{caret-color:#0000}@keyframes kb-cursor-blink{to{visibility:hidden}}.kb-editor hr{background-color:var(--kb-color-text);border:none;height:2px;margin:1em 0;padding:0}.kb-editor img{cursor:default;max-width:100%;height:auto}.kb-component:focus-within{border-color:var(--kb-color-primary);box-shadow:0 0 0 3px var(--kb-color-focus)}@media (prefers-contrast:more){.kb-component{border-width:3px}.ProseMirror-selectednode{outline-width:3px}}.kb-lsp__error{padding-bottom:4px;display:inline-block;position:relative}.kb-lsp__error:after{content:"";background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 4' preserveAspectRatio='none'%3E%3Cpath d='M0,2 Q5,0 10,2 T20,2' stroke='red' stroke-width='1.5' fill='none'/%3E%3C/svg%3E") bottom/20px 4px repeat-x;height:6px;position:absolute;bottom:6px;left:0;right:0}.kb-shortcode-inline{background-color:green;border-radius:3px;margin:0 5px;padding:4px 10px}.kb-editor pre{white-space:pre-wrap}.kb-editor li{position:relative}.kb-editor ul,.kb-editor ol{padding-left:30px}.kb-editor blockquote{border-left:3px solid var(--kb-color-border);color:var(--kb-color-text-muted);margin-left:0;margin-right:0;padding-left:1em}.kb-editor li[data-type=task_item]{align-items:flex-start;gap:.5em;margin-left:-1.5em;list-style:none;display:flex}.kb-editor li[data-type=task_item]>label{flex-shrink:0;align-items:center;margin-top:.25em;display:flex}.kb-editor li[data-type=task_item]>label input[type=checkbox]{cursor:pointer;margin:0}.kb-editor li[data-type=task_item]>div{flex:1;min-width:0}.kb-editor li[data-type=task_item]>div p{margin:0}.kb-editor li[data-type=task_item][data-checked=true]>div{opacity:.6;text-decoration:line-through}.ProseMirror-selectednode{outline:2px solid var(--kb-color-primary);outline-offset:2px}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:"";border:2px solid var(--kb-color-primary);pointer-events:none;position:absolute;inset:-2px -2px -2px -32px}.kb-gapcursor{pointer-events:none;display:none;position:absolute}.kb-gapcursor:after{content:"";border-top:1px solid #000;width:20px;animation:1.1s steps(2,start) infinite ProseMirror-cursor-blink;display:block;position:absolute;top:-2px}.ProseMirror-focused .kb-gapcursor{display:block}.kb-search-match{background-color:#ffff0054}.kb-active-search-match{background-color:#ff6a0054}@supports (-webkit-touch-callout:none){.kb-component{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased}}@media (max-width:767px){.kb-editor::selection{background:rgba(var(--kb-color-primary-rgb), .3)}.kb-editor::selection{background:rgba(var(--kb-color-primary-rgb), .3)}}@media print{.kb-component{box-shadow:none;border:none;margin:0;padding:0}.kb-editor{padding:0}}.kb-yjs__cursor{word-break:normal;pointer-events:none;border-left:1px solid #0000;border-right:1px solid #0000;margin-left:-1px;margin-right:-1px;position:fixed}.kb-yjs__cursor>div{-webkit-user-select:none;user-select:none;color:#fff;white-space:nowrap;background-color:#fa8100;padding-left:2px;padding-right:2px;font-family:serif;font-size:13px;font-style:normal;font-weight:400;line-height:normal;position:absolute;top:-1.05em;left:-1px}@media (max-width:767px){.kb-yjs__cursor>div{font-size:var(--kb-text-xs);padding:1px var(--kb-space-xs);border-radius:var(--kb-radius-sm)}}[ychange_type]{position:relative}.ychange-hover{display:none}:hover>.ychange-hover{color:#fdfdfe;-webkit-user-select:none;user-select:none;word-break:normal;border-radius:3px 3px 0 0;padding:0 2px;font-size:12px;display:inline;position:absolute;top:-14px;left:0}ychange[ychange_type=removed],p[ychange_type=removed]{background-color:red;text-decoration:line-through}:not(ychange)[ychange_type=removed]{background-color:#ff5a56;color:inherit!important}img[ychange_type=removed]{padding:2px}ychange[ychange_type=added],p[ychange_type=removed]{background-color:green}.kb-editor .tableWrapper{overflow-x:auto}.kb-editor table{border-collapse:collapse;table-layout:fixed;width:100%;overflow:hidden}.kb-editor td,.kb-editor th{vertical-align:top;box-sizing:border-box;border:1px solid var(--kb-color-border);position:relative}.kb-editor td:not([data-colwidth]):not(.column-resize-dragging),.kb-editor th:not([data-colwidth]):not(.column-resize-dragging){min-width:var(--default-cell-min-width)}.kb-editor .column-resize-handle{z-index:20;pointer-events:none;background-color:#adf;width:4px;position:absolute;top:0;bottom:0;right:-2px}.kb-editor.resize-cursor{cursor:ew-resize;cursor:col-resize}.kb-editor .selectedCell:after{z-index:2;content:"";pointer-events:none;background:#c8c8ff66;position:absolute;inset:0}@media (max-width:767px){.kb-editor table{font-size:var(--kb-text-sm);border-collapse:collapse;white-space:nowrap;width:100%;display:block;overflow-x:auto}.kb-editor th,.kb-editor td{min-width:120px;padding:var(--kb-space-md);border:1px solid var(--kb-color-border);vertical-align:top}.tableWrapper .column-resize-handle{display:none!important}.kb-editor .tableWrapper{-webkit-overflow-scrolling:touch;overflow-x:auto}.kb-editor .selectedCell{background:rgba(var(--kb-color-primary-rgb), .1);border:2px solid var(--kb-color-primary)}}.kb-menu{z-index:var(--kb-z-dropdown,1000);background:#f9f9f9;border-bottom:1px solid #dadce0;flex-wrap:nowrap;align-items:center;gap:0;margin:0;padding:4px 8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1;display:flex;position:sticky;top:0;overflow:visible}.kb-menu__content{flex:1;align-items:center;gap:0;display:flex;overflow:hidden}.kb-overflow-toggle{color:#3c4043;cursor:pointer;background:0 0;border:none;border-radius:2px;flex-shrink:0;min-width:30px;min-height:30px;margin-left:4px;padding:6px;display:none}.kb-overflow-toggle:hover{background:#3c404314}.kb-overflow-toggle svg{fill:currentColor;width:20px;height:20px}.kb-menu__overflow-row{background:#f9f9f9;border-bottom:1px solid #dadce0;flex-wrap:wrap;gap:4px;padding:8px;display:none}.kb-menu--overflow-open .kb-menu__overflow-row{display:flex;position:absolute}@media (max-width:767px){.kb-menu{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#f9f9f9f2;border-top:1px solid #dadce0;border-bottom:none;padding:8px;position:fixed;inset:auto 0 0;box-shadow:0 -2px 8px #0000001a}.kb-menu__overflow-row{border-top:1px solid #dadce0;border-bottom:none;position:fixed;bottom:60px;left:0;right:0;box-shadow:0 -2px 8px #0000001a}.kb-component,.ProseMirror{padding-bottom:60px!important}.kb-overflow-toggle{min-width:44px;min-height:44px;padding:10px}}@media (min-width:768px){.kb-menu{border-radius:var(--kb-radius-md) var(--kb-radius-md) 0 0;position:relative}}.kb-menu{background-color:var(--kb-color-surface);z-index:10000}.kb-menu__button{border-radius:var(--kb-radius-sm);min-width:var(--kb-touch-target-comfortable);min-height:var(--kb-touch-target-comfortable);color:var(--kb-color-text);cursor:pointer;font-size:var(--kb-text-sm);background:0 0;border:none;flex-shrink:0;transition:all .2s}.kb-menu__button:hover{background:var(--kb-color-hover);border-color:var(--kb-color-border)}.kb-menu__button:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-menu__button--active{background:var(--kb-color-primary);color:#fff;border-color:var(--kb-color-primary);border-radius:var(--kb-radius-sm)}.kb-menu__button--pressed{background:var(--kb-color-active);transition:transform .1s;transform:scale(.95)}.kb-menu__button--disabled{opacity:.4;cursor:not-allowed}.kb-menu__button--disabled:hover{background:0 0;border-color:#0000}.kb-dropdown__item svg,.kb-menu__button svg{fill:currentColor;width:1em;height:1em}.kb-dropdown__item svg,.kb-menu__button span,.kb-menu__button svg{vertical-align:middle}.kb-menu__button span,.kb-dropdown__label-text{display:none}.kb-menu__separator{width:1px;height:var(--kb-space-lg);background:var(--kb-color-border);margin:0 var(--kb-space-xs);flex-shrink:0}.kb-dropdown{padding:1px 0 1px var(--kb-space-sm);display:inline-block;position:relative}.kb-dropdown__label{min-width:var(--kb-touch-target-comfortable);min-height:var(--kb-touch-target-comfortable);font-size:var(--kb-text-sm);padding-right:var(--kb-space-lg);white-space:nowrap;cursor:pointer;background:0 0;border:none;align-items:center}.kb-dropdown__label:focus{outline:2px solid var(--kb-color-primary);outline-offset:-2px}.kb-dropdown__label--active{background:var(--kb-color-active);color:var(--kb-color-primary)}.kb-dropdown__label:after{content:"";opacity:.6;right:var(--kb-space-sm);border-top:4px solid;border-left:4px solid #0000;border-right:4px solid #0000;position:absolute;top:calc(50% - 2px)}.kb-dropdown__menu{background:var(--kb-color-surface);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-md);min-width:6em;box-shadow:var(--kb-shadow-lg);z-index:var(--kb-z-dropdown);padding:var(--kb-space-xs);margin-top:var(--kb-space-xs);opacity:0;visibility:hidden;white-space:nowrap;transition:all .2s;position:fixed;transform:translateY(-4px)}.kb-dropdown--open .kb-dropdown__menu{opacity:1;visibility:visible;transform:translateY(0)}.kb-dropdown__item{padding:var(--kb-space-sm) var(--kb-space-md);text-align:left;cursor:pointer;border-radius:var(--kb-radius-sm);color:var(--kb-color-text);font-size:var(--kb-text-sm);min-height:var(--kb-touch-target-comfortable);background:0 0;border:none;align-items:center;transition:background-color .2s;display:flex}.kb-dropdown__item:hover{background:var(--kb-color-hover)}.kb-dropdown__item:focus{outline:2px solid var(--kb-color-primary);outline-offset:-2px}.kb-dropdown__item--active{background:var(--kb-color-active);color:var(--kb-color-primary)}@media (prefers-contrast:more){.kb-dropdown__item,.kb-dropdown__item:focus{outline-width:3px}}@media (max-width:767px){.kb-dropdown__menu,.kb-dropdown__menu--mobile{top:auto;bottom:calc(var(--kb-touch-target-comfortable) + var(--kb-space-md) * 2);left:var(--kb-space-sm);right:var(--kb-space-sm);border-radius:var(--kb-radius-lg);min-width:auto;max-height:50vh;padding:var(--kb-space-md);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2;position:fixed;overflow-y:auto}.kb-dropdown__item{padding:var(--kb-space-md);min-height:var(--kb-touch-target-comfortable)}}.kb-submenu{margin-right:var(--kb-space-sm);position:relative}.kb-submenu__label{padding-right:var(--kb-space-lg);position:relative}.kb-submenu__label:after{content:"";opacity:.6;right:var(--kb-space-sm);border-top:4px solid #0000;border-bottom:4px solid #0000;border-left:4px solid;position:absolute;top:calc(50% - 4px)}.kb-submenu__content{left:100%;top:var(--kb-space-xs);background:var(--kb-color-surface);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-md);min-width:4em;box-shadow:var(--kb-shadow-lg);z-index:calc(var(--kb-z-dropdown) + 1);padding:var(--kb-space-xs);opacity:0;visibility:hidden;transition:all .2s;position:absolute;transform:translate(-4px)}.kb-submenu:hover .kb-submenu__content,.kb-submenu--open .kb-submenu__content{opacity:1;visibility:visible;transform:translate(0)}@media (max-width:767px){.kb-submenu__content{display:none}}.kb-tooltip{background:var(--kb-color-text);color:var(--kb-color-surface);padding:var(--kb-space-xs) var(--kb-space-sm);border-radius:var(--kb-radius-sm);font-size:var(--kb-text-xs);white-space:nowrap;opacity:0;visibility:hidden;margin-bottom:var(--kb-space-xs);z-index:var(--kb-z-tooltip);transition:all .2s;position:absolute;bottom:100%;left:50%;transform:translate(-50%)}.kb-tooltip:after{content:"";border-left:4px solid #0000;border-right:4px solid #0000;border-top:4px solid var(--kb-color-text);position:absolute;top:100%;left:50%;transform:translate(-50%)}.kb-menu__button:hover .kb-tooltip{opacity:1;visibility:visible}@media (max-width:767px){.kb-tooltip{display:none}}@media (prefers-reduced-motion:reduce){.kb-menu__button,.kb-dropdown__menu,.kb-submenu__content,.kb-tooltip{transition:none}}.kb-icon{min-width:var(--kb-touch-target-comfortable);min-height:var(--kb-touch-target-comfortable);line-height:var(--kb-touch-target-comfortable);vertical-align:middle;display:inline-block}.kb-prompt{background:var(--kb-color-surface);padding:var(--kb-space-lg) var(--kb-space-xl);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-lg);z-index:var(--kb-z-modal);box-shadow:var(--kb-shadow-lg);min-width:320px;max-width:90vw;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.kb-prompt form{gap:var(--kb-space-md);flex-direction:column;display:flex}.kb-prompt form>div{flex-direction:column;display:flex}.kb-prompt-backdrop{z-index:1299;position:fixed;inset:0}.kb-prompt form>div.kb-prompt__buttons{margin-top:var(--kb-space-sm);justify-content:space-between;gap:var(--kb-space-sm);flex-flow:row}.kb-prompt h5{font-weight:600;font-size:var(--kb-text-lg);color:var(--kb-color-text);margin:0}.kb-prompt input[type=text],.kb-prompt textarea{background:var(--kb-color-surface-elevated);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);padding:var(--kb-space-sm) var(--kb-space-md);font-size:var(--kb-text-base);color:var(--kb-color-text);box-sizing:border-box;outline:none;width:100%}.kb-prompt input[type=text]:focus,.kb-prompt textarea:focus{border-color:var(--kb-color-primary);box-shadow:0 0 0 3px var(--kb-color-focus)}.kb-prompt--close{right:var(--kb-space-sm);top:var(--kb-space-sm);color:var(--kb-color-text-muted);padding:var(--kb-space-xs);cursor:pointer;border-radius:var(--kb-radius-sm);width:var(--kb-space-lg);height:var(--kb-space-lg);background:0 0;border:none;justify-content:center;align-items:center;display:flex;position:absolute}.kb-prompt--close:hover{background:var(--kb-color-hover);color:var(--kb-color-text)}.kb-prompt--close:after{content:"✕";font-size:var(--kb-text-sm)}.kb-invalid{color:#991b1b;border-radius:var(--kb-radius-sm);padding:var(--kb-space-sm) var(--kb-space-md);min-width:10em;font-size:var(--kb-text-sm);background:#fef2f2;border:1px solid #fecaca;position:absolute}.kb-prompt__buttons{margin-top:var(--kb-space-sm);gap:var(--kb-space-sm);flex-flow:row;justify-content:space-between;display:flex}.kb-prompt__buttons button{padding:var(--kb-space-xs) var(--kb-space-md);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);background:var(--kb-color-surface);color:var(--kb-color-text);cursor:pointer;font-size:var(--kb-text-sm);flex:none;width:auto;min-height:auto;font-weight:500;transition:background-color .15s,border-color .15s}.kb-prompt__buttons button[type=submit]{order:2}.kb-prompt__buttons button[type=button]{order:1}.kb-prompt__buttons button:hover{background:var(--kb-color-hover)}.kb-prompt__buttons button[type=submit]{background:var(--kb-color-primary);color:#fff;border-color:var(--kb-color-primary)}.kb-prompt__buttons button[type=submit]:hover{background:var(--kb-color-primary-hover)}.kb-prompt__file-field{gap:var(--kb-space-xs);flex-direction:column;display:flex}.kb-prompt__file-label{font-size:var(--kb-text-sm);color:var(--kb-color-text-muted);font-weight:500}.kb-prompt__file-input{background:var(--kb-color-surface-elevated);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);padding:var(--kb-space-sm) var(--kb-space-md);font-size:var(--kb-text-sm);color:var(--kb-color-text);box-sizing:border-box;cursor:pointer;width:100%}.kb-prompt__file-input::file-selector-button{background:var(--kb-color-primary);color:#fff;border-radius:var(--kb-radius-sm);padding:var(--kb-space-xs) var(--kb-space-md);margin-right:var(--kb-space-md);cursor:pointer;font-size:var(--kb-text-sm);border:none;font-weight:500;transition:background-color .15s}.kb-prompt__file-input::file-selector-button:hover{background:var(--kb-color-primary-hover)}.kb-prompt__file-input:focus{border-color:var(--kb-color-primary);box-shadow:0 0 0 3px var(--kb-color-focus);outline:none}.kb-prompt__file-name{font-size:var(--kb-text-xs);color:var(--kb-color-text-muted);font-style:italic}@media (max-width:767px){.kb-editor-prompt{bottom:var(--kb-space-md);left:var(--kb-space-md);right:var(--kb-space-md);border-radius:var(--kb-radius-lg);max-width:none;padding:var(--kb-space-lg);position:fixed;top:auto;transform:none}.kb-editor-prompt input[type=text],.kb-editor-prompt textarea{min-height:var(--kb-touch-target-min);padding:var(--kb-space-sm);font-size:var(--kb-text-base);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);background:var(--kb-color-surface);color:var(--kb-color-text)}.kb-editor-prompt-buttons{gap:var(--kb-space-sm);margin-top:var(--kb-space-md);display:flex}.kb-editor-prompt-buttons button{min-height:var(--kb-touch-target-comfortable);padding:var(--kb-space-sm) var(--kb-space-md);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);background:var(--kb-color-surface);color:var(--kb-color-text);font-size:var(--kb-text-base);cursor:pointer;flex:1}.kb-editor-prompt-buttons button[type=submit]{background:var(--kb-color-primary);color:#fff;border-color:var(--kb-color-primary)}}:root{--kb-bg:#fff;--kb-fg:#1f1f1f;--kb-subtle:#5f6368;--kb-border:#e0e0e0;--kb-hover:#f1f3f4;--kb-active:#e8f0fe;--kb-focus:#1a73e8;--kb-shadow:0 1px 2px #0000000f, 0 2px 8px #00000014;--kb-height:48px;--kb-btn-h:34px;--kb-radius:10px;--kb-gap:8px;--kb-icon:20px;--kb-font:13px}@media (prefers-color-scheme:dark){:root{--kb-bg:#fff;--kb-fg:#1f1f1f;--kb-subtle:#5f6368;--kb-border:#e6e7e8;--kb-hover:#f3f4f5;--kb-active:#e8f0fe}}.kb-menu__wrapper{z-index:50;background:0 0;padding:8px 12px}.kb-menu{background:var(--kb-bg);border:1px solid var(--kb-border);border-radius:var(--kb-radius);box-shadow:var(--kb-shadow);min-height:var(--kb-height);align-items:center;gap:var(--kb-gap);padding:0 8px;display:flex;container-type:inline-size}.kb-menu__spacer{height:var(--kb-height)}.kb-menu__item{align-items:center;display:inline-flex}.kb-menu__separator{background:var(--kb-border);flex:none;width:1px;height:22px;margin:0 2px}.kb-menu__button{height:var(--kb-btn-h);min-width:34px;color:var(--kb-fg);font:500 var(--kb-font)/1.2 system-ui, -apple-system, "Segoe UI", Roboto, Arial;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;background:0 0;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:6px 10px;display:inline-flex}.kb-menu__button svg,.kb-menu__button .kb-icon{width:var(--kb-icon);height:var(--kb-icon);fill:currentColor}.kb-menu__button:hover{background:var(--kb-hover)}.kb-menu__button:focus-visible{outline:2px solid var(--kb-focus);outline-offset:2px;background:var(--kb-hover)}.kb-menu__button--active,.kb-menu__button[aria-pressed=true]{background:var(--kb-active);border-color:#d2e3fc}.kb-menu__button--disabled,.kb-menu__button[aria-disabled=true]{opacity:.5;cursor:default;pointer-events:none}.kb-menu__button--icon-only>span{display:none}.kb-dropdown{align-items:center;display:inline-flex;position:relative}.kb-dropdown__label{height:var(--kb-btn-h);color:var(--kb-fg);font:500 var(--kb-font)/1.2 system-ui, -apple-system, "Segoe UI", Roboto, Arial;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;padding:6px 10px;display:inline-flex}.kb-dropdown__label:hover{background:var(--kb-hover)}.kb-dropdown--open .kb-dropdown__label{background:var(--kb-active);border-color:#d2e3fc}.kb-dropdown__menu{background:var(--kb-bg);min-width:240px;max-height:60vh;color:var(--kb-fg);border:1px solid var(--kb-border);box-shadow:var(--kb-shadow);z-index:100;border-radius:10px;gap:2px;padding:6px;display:grid;position:absolute;top:calc(100% + 6px);left:0;overflow:auto}.kb-dropdown__item{display:contents}.kb-dropdown__item .kb-menu__button{border-radius:8px;justify-content:flex-start;width:100%}.kb-submenu{align-items:center;display:inline-flex;position:relative}.kb-submenu__label{height:var(--kb-btn-h);border-radius:8px;align-items:center;gap:6px;padding:6px 10px;display:inline-flex}.kb-submenu__label:hover{background:var(--kb-hover)}.kb-submenu__content{background:var(--kb-bg);border:1px solid var(--kb-border);min-width:220px;max-height:60vh;box-shadow:var(--kb-shadow);z-index:100;border-radius:10px;padding:6px;display:none;position:absolute;top:calc(100% + 6px);left:0;overflow:auto}.kb-submenu--open .kb-submenu__content{display:block}.kb-overflow-toggle{display:none}.kb-menu__overflow-row{background:var(--kb-bg);border:1px solid var(--kb-border);box-shadow:var(--kb-shadow);border-radius:10px;flex-wrap:wrap;align-items:center;gap:6px;margin:6px 12px 0;padding:6px;display:none}.kb-menu--narrow .kb-overflow-toggle{display:inline-flex}.kb-menu--overflow-open .kb-menu__overflow-row{display:flex}@media (max-width:600px){.kb-menu__wrapper{flex-direction:column;display:flex}.kb-menu--overflow-open .kb-menu__overflow-row{order:-1}}.kb-custom-menu__wrapper{flex-direction:column;height:100%;display:flex;position:relative}.kb-custom-menu__editor{flex-direction:column;max-height:100%;display:flex;position:relative;overflow:auto}.kb-custom-menu{margin:calc(-1 * var(--kb-space-sm)) 0 0 0;line-height:1;font-size:var(--kb-text-sm);padding:0 var(--kb-space-sm);background:var(--kb-color-surface-elevated);border-bottom:1px solid var(--kb-color-border-strong);z-index:1000;flex-wrap:nowrap;align-items:center;gap:2px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;display:flex;position:sticky;top:0;overflow:visible}.kb-custom-menu__item{align-items:center;display:inline-flex}.kb-custom-menu__item .kb-menu__button,.kb-custom-menu__item .kb-dropdown__label{width:32px;min-width:32px;height:32px;min-height:32px;color:var(--kb-color-icon,#5f6368);cursor:pointer;border-radius:var(--kb-radius-sm);font-size:var(--kb-text-sm);background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:background-color .2s,outline-color .15s;display:inline-flex}.kb-custom-menu__item .kb-menu__button:focus,.kb-custom-menu__item .kb-dropdown__label:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__item .kb-menu__button:focus:not(:focus-visible),.kb-custom-menu__item .kb-dropdown__label:focus:not(:focus-visible){outline:none}.kb-custom-menu__item .kb-menu__button:focus-visible,.kb-custom-menu__item .kb-dropdown__label:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__item .kb-menu__button:hover,.kb-custom-menu__item .kb-dropdown__label:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__item .kb-menu__button--active{background:var(--kb-color-active);color:var(--kb-color-primary)}.kb-custom-menu__item .kb-menu__button svg{fill:currentColor;width:16px!important;height:16px!important}.kb-custom-menu__item .kb-icon{justify-content:center;align-items:center;line-height:1;display:inline-flex}.kb-custom-menu__item .kb-dropdown__label-text{display:none}.kb-custom-menu__item .kb-dropdown__label{justify-content:center;align-items:center;display:inline-flex;position:relative}.kb-custom-menu__item .kb-dropdown__label .kb-icon{justify-content:center;align-items:center;display:inline-flex}.kb-custom-menu__item .kb-dropdown__label .kb-icon svg{fill:currentColor;width:16px!important;height:16px!important}.kb-custom-menu__item .kb-dropdown__label:after{content:"";opacity:.7;border-top:3px solid;border-left:3px solid #0000;border-right:3px solid #0000;position:absolute;bottom:2px;right:2px}.kb-custom-menu__item .kb-dropdown{padding:1px 0}.kb-custom-menu .kb-dropdown__menu{background:var(--kb-menu-dropdown-bg);border:1px solid var(--kb-menu-dropdown-border);border-radius:var(--kb-radius-lg);gap:2px;padding:4px;box-shadow:0 2px 10px #0000004d}.kb-custom-menu .kb-dropdown__item{display:block!important}.kb-custom-menu .kb-dropdown__item .kb-menu__button{border-radius:var(--kb-radius-sm);width:100%;min-height:32px;color:var(--kb-menu-dropdown-text);font-size:var(--kb-text-sm);align-items:center;gap:8px;background:0 0!important;justify-content:flex-start!important;padding:6px 10px!important;display:flex!important}.kb-custom-menu .kb-dropdown__item .kb-menu__button:hover{background:#e8eaed14!important}.kb-custom-menu .kb-dropdown__item .kb-menu__button .kb-icon,.kb-custom-menu .kb-dropdown__item .kb-icon{flex-shrink:0;width:18px!important;min-width:18px!important;max-width:18px!important;height:18px!important;min-height:18px!important;max-height:18px!important;margin:0!important;line-height:1!important}.kb-custom-menu .kb-dropdown__item .kb-menu__button .kb-icon svg,.kb-custom-menu .kb-dropdown__item .kb-icon svg{width:18px!important;height:18px!important}.kb-custom-menu .kb-submenu__content{background:var(--kb-menu-dropdown-bg)!important;border:1px solid var(--kb-menu-dropdown-border)!important;border-radius:var(--kb-radius-lg)!important;box-shadow:0 2px 10px #0000004d!important}.kb-custom-menu .kb-submenu__label{color:var(--kb-menu-dropdown-text)!important}.kb-custom-menu .kb-submenu__label:hover{background:0 0}.kb-custom-menu .kb-submenu__label:after{border-left-color:var(--kb-menu-dropdown-text)!important}.kb-custom-menu__separator{width:1px;height:var(--kb-space-lg);background:var(--kb-color-border-strong);flex-shrink:0;margin:0 8px}.kb-custom-menu__overflow-toggle{width:32px;min-width:32px;height:32px;min-height:32px;color:var(--kb-color-text);cursor:pointer;border-radius:var(--kb-radius-sm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;padding:0;transition:background-color .2s;display:inline-flex}.kb-custom-menu__overflow-toggle:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__overflow-toggle:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__overflow-toggle:focus:not(:focus-visible){outline:none}.kb-custom-menu__overflow-toggle:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__overflow-toggle svg{fill:currentColor;width:16px;height:16px}.kb-custom-menu__overflow-menu{top:32px;right:var(--kb-space-xs);background:var(--kb-color-surface-elevated);border-radius:var(--kb-radius-sm);width:auto;min-width:180px;max-width:320px;box-shadow:var(--kb-shadow-lg);z-index:1001;border:none;flex-direction:column;display:flex;position:absolute;overflow:hidden}.kb-custom-menu__overflow-content{padding:var(--kb-space-sm);flex:1;min-height:0;max-height:800px;overflow-y:auto}.kb-custom-menu__overflow-content--grid{padding:0 var(--kb-space-sm);flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:2px;display:flex}.kb-custom-menu__overflow-header{width:100%;padding:var(--kb-space-sm) var(--kb-space-md) var(--kb-space-xs) var(--kb-space-md);text-transform:uppercase;letter-spacing:.5px;color:var(--kb-color-text-muted);margin-bottom:var(--kb-space-xs);font-size:11px;font-weight:600}.kb-custom-menu__overflow-item{padding:var(--kb-space-md) 0;cursor:pointer;border-radius:var(--kb-radius-sm);margin:0 var(--kb-space-sm);align-items:center;gap:0;transition:background-color .2s;display:flex}.kb-custom-menu__overflow-item:focus{outline:2px solid var(--kb-color-primary);outline-offset:-2px}.kb-custom-menu__overflow-item:focus:not(:focus-visible){outline:none}.kb-custom-menu__overflow-item:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:-2px}.kb-custom-menu__overflow-item--grid{border-radius:var(--kb-radius-sm);flex-shrink:0;justify-content:center;align-items:center;gap:0;width:32px;height:32px;margin:0;padding:4px;display:inline-flex;position:relative}.kb-custom-menu__overflow-item--grid:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__overflow-item--grid.kb-custom-menu__overflow-item--dropdown{gap:0;width:32px;min-width:32px;padding:4px;position:relative}.kb-custom-menu__overflow-item-indicator{opacity:.7;border-top:3px solid;border-left:3px solid #0000;border-right:3px solid #0000;margin-left:0;font-size:0;line-height:0;position:absolute;top:50%;right:2px;transform:translateY(-50%)}.kb-custom-menu__overflow-item:not(.kb-custom-menu__overflow-item--grid):hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__overflow-item--grid .kb-menu__button,.kb-custom-menu__overflow-item--grid .kb-dropdown__label{width:32px;min-width:32px;height:32px;min-height:32px;color:var(--kb-color-text);cursor:pointer;background:0 0;border:none;border-radius:0;justify-content:center;align-items:center;padding:0;display:flex}.kb-custom-menu__overflow-item--grid .kb-menu__button svg{width:16px!important;height:16px!important}.kb-custom-menu__overflow-item:not(.kb-custom-menu__overflow-item--grid) .kb-menu__button,.kb-custom-menu__overflow-item:not(.kb-custom-menu__overflow-item--grid) .kb-dropdown__label{min-height:36px;padding:var(--kb-space-sm) 0;color:var(--kb-color-text);cursor:pointer;font-size:var(--kb-text-sm);background:0 0;border:none;border-radius:0;flex-shrink:0;align-items:center;transition:none;display:flex}.kb-custom-menu__overflow-item:not(.kb-custom-menu__overflow-item--grid) .kb-menu__button:not(:has(svg)):not(:has(.kb-icon)){display:none}.kb-custom-menu__overflow-item--grid .kb-menu__button{display:flex!important}.kb-custom-menu__overflow-item[data-tool-id=tool-toggle-underline] .kb-menu__button{display:flex}.kb-custom-menu__overflow-item--grid[data-tool-id=tool-insert],.kb-custom-menu__overflow-item--grid[data-tool-id=tool-type]{height:36px}.kb-custom-menu__overflow-item[data-tool-id=tool-text-color] button{display:flex}.kb-custom-menu__item[data-tool-id=tool-insert],.kb-custom-menu__item[data-tool-id=tool-type],.kb-custom-menu__item[data-tool-id=tool-table]{position:relative}.kb-custom-menu__item[data-tool-id=tool-insert]>div>button:after,.kb-custom-menu__item[data-tool-id=tool-type]>div>button:after,.kb-custom-menu__item[data-tool-id=tool-table]>div>button:after{content:"";opacity:.7;border-top:3px solid;border-left:3px solid #0000;border-right:3px solid #0000;position:absolute;bottom:2px;right:2px}.kb-custom-menu__item[data-tool-id=tool-toggle-code-font] button>span,.kb-custom-menu__item[data-tool-id=tool-text-color] button>span,.kb-custom-menu__item[data-tool-id=tool-text-highlight] button>span,.kb-custom-menu__item[data-tool-id=tool-toggle-underline] button>span{display:none}.kb-custom-menu__overflow-item .kb-menu__button:hover,.kb-custom-menu__overflow-item .kb-dropdown__label:hover{background:0 0}.kb-custom-menu__overflow-item .kb-menu__button svg{fill:currentColor;flex-shrink:0;width:16px;height:16px}.kb-custom-menu__overflow-item-label{color:var(--kb-color-text);font-size:var(--kb-text-sm);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.kb-custom-menu__overflow-item-chevron{padding-left:var(--kb-space-sm);color:var(--kb-color-text-muted);align-items:center;margin-left:auto;display:flex}.kb-custom-menu__overflow-item-chevron svg{fill:none;stroke:currentColor;width:16px;height:16px}.kb-custom-menu__overflow-submenu-header{align-items:center;gap:var(--kb-space-sm);padding:var(--kb-space-md);border-bottom:1px solid var(--kb-color-border);background:var(--kb-color-surface);z-index:1;display:flex;position:sticky;top:0}.kb-custom-menu__overflow-back-button{padding:var(--kb-space-xs);border-radius:var(--kb-radius-sm);cursor:pointer;color:var(--kb-color-text);background:0 0;border:none;justify-content:center;align-items:center;transition:background-color .15s;display:flex}.kb-custom-menu__overflow-back-button:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__overflow-back-button:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__overflow-back-button:focus:not(:focus-visible){outline:none}.kb-custom-menu__overflow-back-button:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__overflow-back-button svg{fill:none;stroke:currentColor;width:16px;height:16px}.kb-custom-menu__overflow-submenu-title{font-size:var(--kb-text-base);color:var(--kb-color-text);white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:500;overflow:hidden}.kb-custom-menu__overflow-separator{background:var(--kb-color-border);height:1px;margin:var(--kb-space-sm) 0}.kb-custom-menu__overflow-footer{border-top:1px solid var(--kb-color-border);background:var(--kb-color-surface);padding:var(--kb-space-sm) 0;flex-shrink:0}.kb-custom-menu__manage-button{width:calc(100% - 32px);margin:0 var(--kb-space-md);min-height:36px;padding:var(--kb-space-sm) 12px;color:var(--kb-color-primary);cursor:pointer;border-radius:var(--kb-radius-sm);font-size:var(--kb-text-sm);text-align:left;background:0 0;border:none;align-items:center;gap:12px;font-weight:500;transition:background-color .2s;display:flex}.kb-custom-menu__manage-button:hover{background:var(--kb-color-hover)}.kb-custom-menu__manage-button svg{flex-shrink:0;width:16px;height:16px}.kb-custom-menu__modal-backdrop{z-index:10000;background:#00000080;justify-content:center;align-items:center;padding:20px;animation:.2s fadeIn;display:flex;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.kb-custom-menu__modal{background:var(--kb-color-surface);border-radius:12px;flex-direction:column;width:100%;max-width:500px;max-height:80vh;animation:.3s slideUp;display:flex;box-shadow:0 8px 32px #0003}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.kb-custom-menu__modal-header{padding:20px var(--kb-space-lg);border-bottom:1px solid var(--kb-color-border);justify-content:space-between;align-items:center;display:flex}.kb-custom-menu__modal-header h2{color:var(--kb-color-text);margin:0;font-size:20px;font-weight:500}.kb-custom-menu__modal-close{width:32px;height:32px;color:var(--kb-color-text-muted);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:background-color .2s;display:flex}.kb-custom-menu__modal-close:hover{background:var(--kb-color-surface-hover)}.kb-custom-menu__modal-close svg{width:16px;height:16px}.kb-custom-menu__modal-message{padding:var(--kb-space-md) var(--kb-space-lg);background:var(--kb-menu-info-bg);color:var(--kb-menu-info-text);border-bottom:1px solid var(--kb-color-border-strong);font-size:13px;font-weight:500}.kb-custom-menu__modal-content{padding:var(--kb-space-md) 0;flex:1;overflow-y:auto}.kb-custom-menu__tool-list{flex-direction:column;gap:2px;display:flex}.kb-custom-menu__tool-item{padding:12px var(--kb-space-lg);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:12px;transition:background-color .2s;display:flex}.kb-custom-menu__tool-item:hover{background:#3c40430a}.kb-custom-menu__tool-item input[type=checkbox]{cursor:pointer;width:18px;height:18px;accent-color:var(--kb-color-primary)}.kb-custom-menu__tool-item span{color:var(--kb-color-text);font-size:var(--kb-text-sm);flex:1}.kb-custom-menu__tool-item--disabled{opacity:.5;cursor:not-allowed}.kb-custom-menu__tool-item--disabled:hover{background:0 0}.kb-custom-menu__tool-item--disabled input[type=checkbox]{cursor:not-allowed}.kb-custom-menu__modal-footer{padding:var(--kb-space-md) var(--kb-space-lg);border-top:1px solid var(--kb-color-border);justify-content:flex-end;align-items:center;gap:var(--kb-space-sm);display:flex}.kb-custom-menu__modal-button{min-width:80px;padding:var(--kb-space-sm) var(--kb-space-lg);border-radius:var(--kb-radius-sm);font-size:var(--kb-text-sm);cursor:pointer;border:none;font-weight:500;transition:all .2s}.kb-custom-menu__modal-button--primary{background:var(--kb-color-primary);color:#fff}.kb-custom-menu__modal-button--primary:hover{background:var(--kb-color-primary-hover);box-shadow:var(--kb-shadow-sm)}.kb-custom-menu__modal-button--primary:active{background:var(--kb-color-primary-active);box-shadow:0 1px 2px #00000029}@media (max-width:767.98px){.kb-custom-menu__overflow-menu{max-width:100%;left:var(--kb-space-sm);right:var(--kb-space-sm)}.kb-custom-menu__overflow-item{min-height:32px;padding:var(--kb-space-md)}.kb-custom-menu__overflow-item--grid{min-width:32px;min-height:32px}.kb-custom-menu__modal{border-radius:12px 12px 0 0;max-width:100%;max-height:90vh;margin:0}.kb-custom-menu__overflow-back-button{min-width:32px;min-height:32px}}@media (prefers-color-scheme:dark){.kb-custom-menu{background:var(--kb-color-surface-elevated);border-bottom-color:var(--kb-color-border)}.kb-custom-menu__item .kb-menu__button,.kb-custom-menu__item .kb-dropdown__label,.kb-custom-menu__overflow-toggle{color:var(--kb-menu-dropdown-text)}.kb-custom-menu__item .kb-menu__button:hover,.kb-custom-menu__item .kb-dropdown__label:hover,.kb-custom-menu__overflow-toggle:hover{background:#e8eaed14}.kb-custom-menu__separator{background:var(--kb-menu-dropdown-border)}.kb-custom-menu__overflow-menu{background:var(--kb-menu-dropdown-bg);border-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__overflow-header{color:var(--kb-color-text-muted)}.kb-custom-menu__overflow-item .kb-menu__button,.kb-custom-menu__overflow-item .kb-dropdown__label,.kb-custom-menu__overflow-item-label{color:var(--kb-menu-dropdown-text)}.kb-custom-menu__overflow-item:hover{background:#e8eaed14}.kb-custom-menu__overflow-separator{background:var(--kb-menu-dropdown-border)}.kb-custom-menu__overflow-footer{background:var(--kb-menu-dropdown-bg);border-top-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__modal{background:var(--kb-color-surface)}.kb-custom-menu__modal-header{border-bottom-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__modal-header h2{color:var(--kb-menu-dropdown-text)}.kb-custom-menu__modal-close{color:var(--kb-color-text-muted)}.kb-custom-menu__modal-message{background:var(--kb-menu-info-bg);color:var(--kb-menu-info-text);border-bottom-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__modal-footer{border-top-color:var(--kb-menu-dropdown-border)}.kb-custom-menu__tool-item span{color:var(--kb-menu-dropdown-text)}}.kb-custom-menu__wrapper--dragging{-webkit-user-select:none;user-select:none;cursor:grabbing!important}.kb-custom-menu__wrapper--dragging *{cursor:grabbing!important}.kb-custom-menu__item{cursor:grab;transition:opacity .2s,transform .2s}.kb-custom-menu__wrapper--dragging .kb-custom-menu__item{cursor:grabbing!important}.kb-custom-menu__item .kb-menu__button,.kb-custom-menu__item .kb-dropdown__label{cursor:pointer!important}.kb-custom-menu__wrapper--dragging .kb-custom-menu__item .kb-menu__button,.kb-custom-menu__wrapper--dragging .kb-custom-menu__item .kb-dropdown__label{cursor:grabbing!important}.kb-custom-menu__item--dragging,.kb-custom-menu__overflow-item--dragging{opacity:.3}.kb-custom-menu__drag-ghost{opacity:.9;background:var(--kb-color-surface-elevated);border-radius:var(--kb-radius-sm);transform:scale(1.05);box-shadow:0 4px 12px #00000026}.kb-custom-menu__drop-placeholder{background:var(--kb-color-primary);border-radius:2px;flex-shrink:0;width:4px;min-height:32px;margin:0 2px;display:inline-flex}.kb-custom-menu__pinned-dropdown{border:1px solid var(--kb-color-border-strong);border-radius:var(--kb-radius-lg);min-width:200px;max-width:300px;box-shadow:var(--kb-shadow-lg);max-height:400px;overflow-y:auto;background:var(--kb-menu-dropdown-bg)!important}.kb-custom-menu__overflow-footer{padding:var(--kb-space-sm);border-top:1px solid var(--kb-color-border);justify-content:center;display:flex}.kb-custom-menu__reset-button{align-items:center;gap:var(--kb-space-sm);padding:var(--kb-space-sm) var(--kb-space-md);color:var(--kb-color-text-muted);border:1px solid var(--kb-color-border);border-radius:var(--kb-radius-sm);cursor:pointer;background:0 0;font-size:12px;transition:all .2s;display:flex}.kb-custom-menu__reset-button:hover{background:var(--kb-color-surface-hover);color:var(--kb-color-text);border-color:var(--kb-color-border-strong)}.kb-custom-menu__reset-button:focus{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__reset-button:focus:not(:focus-visible){outline:none}.kb-custom-menu__reset-button:focus-visible{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-custom-menu__reset-button svg{flex-shrink:0;width:14px;height:14px}.kb-custom-menu__reset-button span{white-space:nowrap}.kb-custom-menu__reset-button--icon-only{padding:var(--kb-space-sm);background:0 0;border:none}.kb-custom-menu__reset-button--icon-only:hover{background:var(--kb-color-surface-hover);border:none}.kb-custom-menu__reset-button--icon-only svg{width:18px;height:18px}.kb-custom-menu__pinned-dropdown{z-index:999999}.codecrock-linenumbers-inner-wrap{position:absolute;top:0;bottom:0;left:0;overflow:hidden}.codecrock-linenumbers{mix-blend-mode:initial;background:#80808026;width:40px;height:100%}.codecrock-linenumber{position:relative;top:0}.codecrock-root{position:relative}.codecrock-root .codecrock-select{opacity:0;z-index:99999;position:absolute;top:5px;right:5px}.codecrock-root:hover .codecrock-select{opacity:1}.codecrock{font-family:monospace}.ts-property{color:#905}.ts-function,.ts-function_call{color:#07a}.ts-keyword{color:#d73;font-weight:700}.ts-string{color:#690}.ts-number{color:#099}.ts-comment{color:#998;font-style:italic}.ts-perator{color:#9a6}.ts-type{color:#458;font-weight:700}.ts-variable,.ts-variable_builtin{color:#333}.ts-constant,.ts-constant_builtin{color:#0086b3}.ts-punctuation,.ts-punctuation_bracket{color:#999}.ts-namespace{color:#000;font-weight:700}.ts-function_builtin,.ts-keyword_operator{color:#d73}.ts-string_special{color:#d44}.ts-tag{color:teal}.ts-attribute{color:#e90}.ts-text_title{font-weight:bolder}.ts-punctuation_special{color:green}@media (prefers-color-scheme:dark){.ts-property{color:#9cdcfe}.ts-function,.ts-function_call,.ts-function_builtin{color:#dcdcaa}.ts-keyword,.ts-keyword_operator{color:#c586c0}.ts-string,.ts-string_special{color:#ce9178}.ts-number{color:#b5cea8}.ts-comment{color:#6a9955}.ts-operator{color:#d4d4d4}.ts-type{color:#4ec9b0}.ts-variable,.ts-variable_builtin{color:#d4d4d4}.ts-constant,.ts-constant_builtin{color:#4fc1ff}.ts-punctuation,.ts-punctuation_bracket{color:#d4d4d4}.ts-namespace{color:#c8c8c8}.ts-tag{color:#569cd6}.ts-attribute{color:#9cdcfe}}.ts-diff_plus{color:green}.ts-diff_minus{color:red}.kb-autocomplete__wrapper{padding:6px var(--kb-space-sm);background:var(--kb-color-surface-elevated);border:1px solid #ccc;border-radius:6px;margin:0;list-style:none;position:absolute}.kb-autocomplete__wrapper li.active{color:#fff;background:#e8eaed14}.kb-autocomplete--decor{outline:3px dotted red}.kb-hover__wrapper{background:var(--kb-color-surface-elevated);outline:3px dotted #00f}.kb-hover--decor{outline:3px dotted green}.kb-image-wrapper{max-width:100%;line-height:0;display:inline-block;position:relative}.kb-image-wrapper img{max-width:100%;display:block}.kb-image-resize-handle{background-color:var(--kb-color-primary);border:2px solid var(--kb-color-surface);border-radius:var(--kb-radius-sm);box-sizing:border-box;opacity:0;z-index:10;width:10px;height:10px;transition:opacity .15s;position:absolute}.kb-image-wrapper:hover .kb-image-resize-handle,.kb-image-wrapper.kb-image-resizing .kb-image-resize-handle{opacity:1}.kb-image-resize-handle-nw{cursor:nw-resize;top:-5px;left:-5px}.kb-image-resize-handle-ne{cursor:ne-resize;top:-5px;right:-5px}.kb-image-resize-handle-sw{cursor:sw-resize;bottom:-5px;left:-5px}.kb-image-resize-handle-se{cursor:se-resize;bottom:-5px;right:-5px}.kb-image-wrapper.ProseMirror-selectednode{outline:2px solid var(--kb-color-primary);outline-offset:2px}.kb-image-wrapper.ProseMirror-selectednode .kb-image-resize-handle{opacity:1}.kb-image-wrapper.kb-image-resizing{-webkit-user-select:none;user-select:none}.kb-image-wrapper.kb-image-resizing img{pointer-events:none}.kb-editor ul[data-type=task_list]{margin-left:0;padding:0;list-style:none}.kb-editor li[data-checked=true]{text-decoration:line-through}.kb-editor li[data-checked]{margin-top:.25em;margin-bottom:.25em;display:flex}.kb-editor li[data-checked]>label{-webkit-user-select:none;user-select:none;flex:none;margin-right:.5rem}.kb-editor li[data-checked]>label>input[type=checkbox]{cursor:pointer;margin-right:8px}.kb-editor li[data-checked]>label>input[type=checkbox]:checked+span{color:#888;text-decoration:line-through}.kb-editor li[data-checked]>div{flex:auto}.kb-editor li[data-checked]>div>p{margin:0}
package/dist/kerebron.js CHANGED
@@ -7117,8 +7117,43 @@ function setPathValue(e, t, n) {
7117
7117
  }
7118
7118
  }
7119
7119
  //#endregion
7120
- //#region ../editor/src/search/query.ts
7121
- var SearchQuery = class {
7120
+ //#region \0deno::TypeScript::@kerebron/editor/frontmatter::/home/runner/work/kerebron/kerebron/packages/editor/src/utilities/frontmatter.ts
7121
+ var FrontmatterMap = class extends Map {
7122
+ origMap;
7123
+ origString = "";
7124
+ constructor() {
7125
+ super();
7126
+ }
7127
+ }, FrontmatterServiceImpl = class {
7128
+ constructor(e) {
7129
+ this.yamlService = e;
7130
+ }
7131
+ parse(e) {
7132
+ let t = new FrontmatterMap();
7133
+ t.origString = e;
7134
+ let n = e.indexOf("\n---\n", 4);
7135
+ if (e.startsWith("---\n") && n > -1) {
7136
+ let r = this.yamlService.parse(e.substring(4, n));
7137
+ if (r instanceof Map) {
7138
+ t.origMap = r;
7139
+ for (let [e, n] of r) t.set(e, structuredClone(n));
7140
+ }
7141
+ }
7142
+ return t;
7143
+ }
7144
+ stringify(e) {
7145
+ return e ? e.origMap?.entries === e.entries ? e.origString : `---
7146
+ ${this.yamlService.stringify(e)}
7147
+ ---
7148
+ ` : "";
7149
+ }
7150
+ }, BlankFrontmatterServiceImpl = class {
7151
+ constructor() {}
7152
+ parse(e) {}
7153
+ stringify(e) {
7154
+ return "";
7155
+ }
7156
+ }, SearchQuery = class {
7122
7157
  search;
7123
7158
  caseSensitive;
7124
7159
  literal;
@@ -7581,7 +7616,7 @@ var ExtensionManager = class {
7581
7616
  }
7582
7617
  }
7583
7618
  for (let t of a) e.ci.register(t.name, t);
7584
- e.ci.register("yaml", yaml_exports), e.ci.register("workspace", new WorkspaceImpl()), this.initPlugins(e, t);
7619
+ e.ci.register("yaml", yaml_exports), e.ci.register("frontmatter", new FrontmatterServiceImpl(yaml_exports)), e.ci.register("workspace", new WorkspaceImpl()), this.initPlugins(e, t);
7585
7620
  for (let e of this.extensions) e.created();
7586
7621
  }
7587
7622
  };
@@ -7613,7 +7648,22 @@ function createChainableState(e, t) {
7613
7648
  }
7614
7649
  //#endregion
7615
7650
  //#region ../editor/src/commands/baseCommandFactories.ts
7616
- var wrapInList = (e, t = null) => function(n, r, a) {
7651
+ var liftListItemParagraph = () => (e, t) => {
7652
+ let { $cursor: n } = e.selection;
7653
+ if (!n || n.parentOffset > 0 || !n.parent.isTextblock) return !1;
7654
+ for (let r = n.depth; r > 0; r--) {
7655
+ let a = n.node(r);
7656
+ if (a.type.name === "list_item" || a.type.name === "bullet_list" || a.type.name === "task_item" || a.type.name === "task_list") {
7657
+ let o = a.type.name === "list_item" ? r : r - 1;
7658
+ if (a.type.name === "list_item" || n.node(r - 1), n.index(o) === 0) return !1;
7659
+ let s = n.blockRange();
7660
+ if (!s) return !1;
7661
+ let c = liftTarget(s);
7662
+ return c == null ? !1 : (t && t(e.tr.lift(s, c).scrollIntoView()), !0);
7663
+ }
7664
+ }
7665
+ return !1;
7666
+ }, wrapInList = (e, t = null) => function(n, r, a) {
7617
7667
  let { $from: o, $to: s } = n.selection, c = o.blockRange(s);
7618
7668
  if (!c) return !1;
7619
7669
  let l = r ? n.tr : null;
@@ -7987,7 +8037,26 @@ function toggleMark(e, t = null, n) {
7987
8037
  return !0;
7988
8038
  };
7989
8039
  }
7990
- var undoInputRule = () => undoInputRuleCommand, command = (e) => (...t) => e.apply(void 0, t), baseCommandFactories = {
8040
+ var isList$1 = (e) => e.type.name === "bullet_list" || e.type.name === "ordered_list" || e.type.name === "task_list", keepRange = (e, t) => (n, r) => {
8041
+ let a = n.doc.resolve(e), o = n.doc.resolve(t);
8042
+ for (let t = a.depth; t > 0; t--) if (isList$1(a.node(t))) {
8043
+ e = a.before(t);
8044
+ break;
8045
+ }
8046
+ for (let e = o.depth; e > 0; e--) if (isList$1(o.node(e))) {
8047
+ t = o.after(e);
8048
+ break;
8049
+ }
8050
+ if (!r) return !0;
8051
+ let s = n.doc.slice(e, t), c = n.tr.replace(0, n.doc.content.size, s);
8052
+ return c = c.setSelection(TextSelection.atStart(c.doc)), r && r(c), !0;
8053
+ }, keepSelection = () => (e, t) => {
8054
+ if (!t) return !0;
8055
+ let n = e.selection.content(), r = e.tr.replace(0, e.doc.content.size, n);
8056
+ return r.setSelection(TextSelection.atStart(r.doc)), t && t(r), !0;
8057
+ }, undoInputRule = () => undoInputRuleCommand, command = (e) => (...t) => e.apply(void 0, t), baseCommandFactories = {
8058
+ keepRange,
8059
+ keepSelection,
7991
8060
  wrapInList,
7992
8061
  wrapRangeInList,
7993
8062
  deleteSelection,
@@ -7998,6 +8067,7 @@ var undoInputRule = () => undoInputRuleCommand, command = (e) => (...t) => e.app
7998
8067
  joinUp,
7999
8068
  joinDown,
8000
8069
  lift,
8070
+ liftListItemParagraph,
8001
8071
  newlineInCode,
8002
8072
  exitCode,
8003
8073
  createParagraphNear,
@@ -8030,7 +8100,7 @@ function firstCommand(...e) {
8030
8100
  }
8031
8101
  //#endregion
8032
8102
  //#region ../editor/src/commands/keyCommandFactories.ts
8033
- var backspace = firstCommand(baseCommandFactories.undoInputRule(), baseCommandFactories.deleteSelection(), baseCommandFactories.joinBackward(), baseCommandFactories.selectNodeBackward()), del = firstCommand(baseCommandFactories.deleteSelection(), baseCommandFactories.joinForward(), baseCommandFactories.selectNodeForward()), enter = firstCommand(baseCommandFactories.newlineInCode(), baseCommandFactories.createParagraphNear(), baseCommandFactories.liftEmptyBlock(), baseCommandFactories.splitBlock()), keyCommandFactories = {
8103
+ var backspace = firstCommand(baseCommandFactories.undoInputRule(), baseCommandFactories.deleteSelection(), baseCommandFactories.liftListItemParagraph(), baseCommandFactories.joinBackward(), baseCommandFactories.selectNodeBackward()), del = firstCommand(baseCommandFactories.deleteSelection(), baseCommandFactories.joinForward(), baseCommandFactories.selectNodeForward()), enter = firstCommand(baseCommandFactories.newlineInCode(), baseCommandFactories.createParagraphNear(), baseCommandFactories.liftEmptyBlock(), baseCommandFactories.splitBlock()), keyCommandFactories = {
8034
8104
  backspace: () => backspace,
8035
8105
  del: () => del,
8036
8106
  enter: () => enter
@@ -8463,10 +8533,13 @@ var CoreEditor = class e extends EventTarget {
8463
8533
  return a.createView(o), a.setupPlugins(), a.dispatchEvent(new CustomEvent("ready")), a;
8464
8534
  }
8465
8535
  clone(t) {
8466
- let n = new ExtensionManager(this.extensionManager.editorKits, (t || this.config).debug), r = new e({ ...t }, this.schema, n);
8536
+ let n = new ExtensionManager(this.extensionManager.editorKits, (t || this.config).debug), r = new e({
8537
+ assetLoad: this.config.assetLoad,
8538
+ ...t
8539
+ }, this.schema, n);
8467
8540
  n.created(r, this.schema);
8468
- let a = this.getJSON();
8469
- return r.createView(a), r.setupPlugins(), r;
8541
+ let a = this.getJSON(), o = this.state.selection;
8542
+ return r.createView(a, o), r.setupPlugins(), r;
8470
8543
  }
8471
8544
  getExtension(e) {
8472
8545
  return this.ci.resolve(e);
@@ -8508,9 +8581,12 @@ var CoreEditor = class e extends EventTarget {
8508
8581
  unlink() {
8509
8582
  this.linkListener && this.linkSource && (this.linkSource.removeEventListener("changed", this.linkListener), this.linkListener = void 0, this.linkSource = void 0);
8510
8583
  }
8511
- createView(e) {
8512
- let t = createNodeFromObject(e, this.schema);
8513
- if (this.state = EditorState.create({ doc: t }), this.config.element) {
8584
+ createView(e, t) {
8585
+ let n = createNodeFromObject(e, this.schema);
8586
+ if (this.state = EditorState.create({
8587
+ doc: n,
8588
+ selection: t
8589
+ }), this.config.element) {
8514
8590
  let e = new EditorView(this.config.element, {
8515
8591
  state: this.state,
8516
8592
  attributes: { class: "kb-editor" },
@@ -8529,11 +8605,11 @@ var CoreEditor = class e extends EventTarget {
8529
8605
  state: this.state,
8530
8606
  dispatchTransaction: (e) => this.dispatchTransaction(e)
8531
8607
  });
8532
- let n = new CustomEvent("doc:loaded", { detail: {
8608
+ let r = new CustomEvent("doc:loaded", { detail: {
8533
8609
  editor: this,
8534
- doc: t
8610
+ doc: n
8535
8611
  } });
8536
- this.dispatchEvent(n);
8612
+ this.dispatchEvent(r);
8537
8613
  }
8538
8614
  dispatchTransaction(e) {
8539
8615
  if (this.state = this.state.apply(e), e.docChanged && this.version++, this.view) {
@@ -9542,6 +9618,7 @@ function createMediaUploadPlugin(e = {}) {
9542
9618
  }
9543
9619
  },
9544
9620
  handlePaste(t, n, r) {
9621
+ if ((n.clipboardData?.types || []).includes("text/html")) return;
9545
9622
  let a = Array.from(n.clipboardData?.items || []).filter((e) => e.type.startsWith("image/"));
9546
9623
  if (a.length > 0) {
9547
9624
  n.preventDefault();
@@ -9666,6 +9743,18 @@ var PasteState = class {
9666
9743
  }
9667
9744
  },
9668
9745
  props: {
9746
+ handleDOMEvents: { copy(t, n) {
9747
+ if (!n.clipboardData) return !1;
9748
+ let r = e.clone();
9749
+ return n.preventDefault(), (async () => {
9750
+ r.state.selection instanceof AllSelection || r.ci.register("frontmatter", new BlankFrontmatterServiceImpl()), r.chain().keepSelection().run();
9751
+ let e = new TextDecoder().decode(await r.saveDocument("text/x-markdown")), t = new TextDecoder().decode(await r.saveDocument("text/html"));
9752
+ await navigator.clipboard.write([new ClipboardItem({
9753
+ "text/plain": new Blob([e], { type: "text/plain" }),
9754
+ "text/html": new Blob([t], { type: "text/html" })
9755
+ })]);
9756
+ })(), !1;
9757
+ } },
9669
9758
  handlePaste(t, n, r) {
9670
9759
  let { clipboardData: a } = n;
9671
9760
  if (!a) return !1;
@@ -12377,6 +12466,9 @@ function getInlineTokensHandlers() {
12377
12466
  if (e.meta === "noEscText") t.current.log(e.content);
12378
12467
  else for (let n of escapeMarkdown(e)) t.current.log(n[0], n[1]);
12379
12468
  }],
12469
+ entity: [(e, t) => {
12470
+ t.current.log(e.content);
12471
+ }],
12380
12472
  strong_open: [(e, t) => {
12381
12473
  t.current.log(e.markup || "**", e);
12382
12474
  }],
@@ -12493,6 +12585,9 @@ function getHtmlInlineTokensHandlers() {
12493
12585
  text: [(e, t) => {
12494
12586
  t.current.log(escapeHtml$1(e.content), e);
12495
12587
  }],
12588
+ entity: [(e, t) => {
12589
+ t.current.log(e.content, e);
12590
+ }],
12496
12591
  ...getHtmlInlineFormatTokensHandlers(),
12497
12592
  link_open: [(e, t) => {
12498
12593
  t.stash("getHtmlInlineTokensHandlers.link_open");
@@ -13430,7 +13525,7 @@ async function extPmToMdConverter(e, t, n, r) {
13430
13525
  doc(e) {
13431
13526
  return { open: async (e, n, r) => {
13432
13527
  let a = new Token("frontmatter", "frontmatter", 0);
13433
- return e.attrs.meta && (t.yaml ? a.content = `---\n${t.yaml.stringify(e.attrs.meta)}\n---\n` : a.content = "---\n# No yaml service\n---\n"), a;
13528
+ return e.attrs.meta && (t.frontmatter ? a.content = t.frontmatter.stringify(e.attrs.meta) : a.content = "---\n# No frontmatter service\n---\n"), a;
13434
13529
  } };
13435
13530
  },
13436
13531
  paragraph(e) {
@@ -13710,6 +13805,10 @@ function elementFromString(e) {
13710
13805
  let t = `<html lang="en"><body>${e}</body></html>`, n = new globalThis.DOMParser().parseFromString(t, "text/html").body;
13711
13806
  return removeWhitespaces(n);
13712
13807
  }
13808
+ function decodeEntity(e) {
13809
+ let t = `<html lang="en"><body>${e}</body></html>`;
13810
+ return new globalThis.DOMParser().parseFromString(t, "text/html").body.innerText;
13811
+ }
13713
13812
  //#endregion
13714
13813
  //#region ../extension-markdown/src/MarkdownParser.ts
13715
13814
  function maybeMerge(e, t) {
@@ -16038,6 +16137,17 @@ function treeToTokens(e, t, n) {
16038
16137
  case "text":
16039
16138
  l(o(u) ?? "", u);
16040
16139
  break;
16140
+ case "entity_reference":
16141
+ {
16142
+ let e = o(u) ?? "", t = [
16143
+ n.row + u.startPosition?.row,
16144
+ n.row + u.endPosition?.row,
16145
+ 0,
16146
+ 0
16147
+ ], r = new Token("entity", "entity", 0);
16148
+ r.map = t, r.content = e, s(r, "entity");
16149
+ }
16150
+ break;
16041
16151
  case "latex_block":
16042
16152
  {
16043
16153
  let t = u.children.find((e) => e?.type === "latex_span_delimiter"), n = u.children.filter((e) => e?.type !== "latex_span_delimiter").map((e) => o(e)).join("");
@@ -16150,7 +16260,13 @@ function treeToTokens(e, t, n) {
16150
16260
  t.map = e, t.meta = "noEscText", t.content = o(u) ?? "", s(t, "backslash_escape");
16151
16261
  }
16152
16262
  break;
16153
- default: throw console.debug("inline_node", u), Error(`Unhandled inline node type: ${u.type}`);
16263
+ default:
16264
+ {
16265
+ console.debug(`Unhandled inline node type: ${u.type}`, u);
16266
+ let t = new Token("text", "", 0);
16267
+ t.map = e, t.meta = "noEscText", t.content = `Error: Unhandled inline node type: ${u.type} ${JSON.stringify(u)}`, s(t, "backslash_escape");
16268
+ }
16269
+ break;
16154
16270
  }
16155
16271
  }
16156
16272
  }, l = (e, n = {
@@ -16423,15 +16539,12 @@ async function mdToPmConverterText(e, t, n) {
16423
16539
  let r = new MarkdownParser(n, await sitterTokenizer(t.assetLoad), {
16424
16540
  frontmatter: { custom: (e, n) => {
16425
16541
  let r = e.stack[0];
16426
- if (r?.type.name === "doc") {
16427
- let e = n.content, a = e.indexOf("\n---\n", 4);
16428
- if (e.startsWith("---\n") && a > -1) {
16429
- let n = t.yaml?.parse(e.substring(4, a)) || void 0;
16430
- r.attrs = {
16431
- ...r.attrs,
16432
- meta: n
16433
- };
16434
- }
16542
+ if (r?.type.name === "doc" && t.frontmatter) {
16543
+ let e = t.frontmatter.parse(n.content) || void 0;
16544
+ r.attrs = {
16545
+ ...r.attrs,
16546
+ meta: e
16547
+ };
16435
16548
  }
16436
16549
  } },
16437
16550
  blockquote: { block: "blockquote" },
@@ -16481,6 +16594,9 @@ async function mdToPmConverterText(e, t, n) {
16481
16594
  };
16482
16595
  }
16483
16596
  },
16597
+ entity: { custom: (e, t, n, r) => {
16598
+ e.addText(decodeEntity(t.content));
16599
+ } },
16484
16600
  hardbreak: { node: "br" },
16485
16601
  em: { mark: "em" },
16486
16602
  underline: { mark: "underline" },
@@ -16803,7 +16919,7 @@ var MarkdownContentMapper = class e {
16803
16919
  }, MarkdownPluginState = class {
16804
16920
  editor;
16805
16921
  extensionMarkdown;
16806
- capturing = !1;
16922
+ capturing = !0;
16807
16923
  workspace;
16808
16924
  constructor(e, t) {
16809
16925
  this.editor = e, this.extensionMarkdown = t, this.workspace = e.ci.resolve("workspace"), this.performSnapshot = debounce(this.performSnapshot.bind(this), 800);
@@ -16815,7 +16931,10 @@ var MarkdownContentMapper = class e {
16815
16931
  version: e,
16816
16932
  state: this.editor.state,
16817
16933
  materialized: void 0
16818
- }, r = async () => (n.materialized ||= await MarkdownContentMapper.create(n.state, this.extensionMarkdown.config), n.materialized);
16934
+ }, r = async () => (n.materialized ||= await MarkdownContentMapper.create(n.state, {
16935
+ ...this.extensionMarkdown.config,
16936
+ sourceMap: !0
16937
+ }), n.materialized);
16819
16938
  this.workspace.getFile(t) ? this.workspace.modifyFile({
16820
16939
  uri: t,
16821
16940
  lang: "markdown",
@@ -16865,14 +16984,14 @@ var ExtensionMarkdown = class extends Extension {
16865
16984
  ...this.config,
16866
16985
  urlRewriter: this.urlToRewriter,
16867
16986
  hooks: this.hooks["pm2md.pre"],
16868
- yaml: e.ci.resolve("yaml")
16987
+ frontmatter: e.ci.resolve("frontmatter")
16869
16988
  }, t, e),
16870
16989
  toDoc: (n) => mdToPmConverter(n, {
16871
16990
  assetLoad: this.editor.config.assetLoad,
16872
16991
  ...this.config,
16873
16992
  urlRewriter: this.urlFromRewriter,
16874
16993
  hooks: this.hooks["md2pm.post"],
16875
- yaml: e.ci.resolve("yaml")
16994
+ frontmatter: e.ci.resolve("frontmatter")
16876
16995
  }, t)
16877
16996
  } };
16878
16997
  return n["text/markdown"] = n["text/x-markdown"], n;
@@ -16880,7 +16999,7 @@ var ExtensionMarkdown = class extends Extension {
16880
16999
  toMarkdown(e) {
16881
17000
  return extPmToMdConverter(e, {
16882
17001
  sourceMap: !0,
16883
- yaml: this.editor.ci.resolve("yaml")
17002
+ frontmatter: this.editor.ci.resolve("frontmatter")
16884
17003
  }, this.editor.schema, this.editor);
16885
17004
  }
16886
17005
  async fromMarkdown(e) {