@sinequa/atomic-angular 1.15.1 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"sinequa-atomic-angular-elements.mjs","sources":["../../../projects/atomic-angular/elements/internal/template.ts","../../../projects/atomic-angular/elements/generated/styles.css.ts","../../../projects/atomic-angular/elements/internal/styles.ts","../../../projects/atomic-angular/elements/internal/icons.ts","../../../projects/atomic-angular/elements/generated/en.i18n.ts","../../../projects/atomic-angular/elements/internal/i18n.ts","../../../projects/atomic-angular/elements/internal/dom-utils.ts","../../../projects/atomic-angular/elements/internal/container-icon.ts","../../../projects/atomic-angular/elements/internal/doc-type.ts","../../../projects/atomic-angular/elements/internal/format.ts","../../../projects/atomic-angular/elements/store/mappers.ts","../../../projects/atomic-angular/elements/store/collections-store.ts","../../../projects/atomic-angular/elements/internal/error-messages.ts","../../../projects/atomic-angular/elements/views/list-view.ts","../../../projects/atomic-angular/elements/internal/current-user.ts","../../../projects/atomic-angular/elements/internal/principal-name-cache.ts","../../../projects/atomic-angular/elements/internal/principal-picker.ts","../../../projects/atomic-angular/elements/views/detail-view.ts","../../../projects/atomic-angular/elements/internal/base-url.ts","../../../projects/atomic-angular/elements/views/doc-preview.ts","../../../projects/atomic-angular/elements/views/share-modal.ts","../../../projects/atomic-angular/elements/internal/upload-jobs.ts","../../../projects/atomic-angular/elements/internal/status-poller.ts","../../../projects/atomic-angular/elements/internal/session-recovery.ts","../../../projects/atomic-angular/elements/views/upload-tracker.ts","../../../projects/atomic-angular/elements/custom-elements/lexiq-collections.ts","../../../projects/atomic-angular/elements/internal/overlay-root.ts","../../../projects/atomic-angular/elements/views/collection-picker.ts","../../../projects/atomic-angular/elements/custom-elements/lexiq-collection-picker.ts","../../../projects/atomic-angular/elements/custom-elements/lexiq-collection-mention-list.ts","../../../projects/atomic-angular/elements/register.ts","../../../projects/atomic-angular/elements/providers.ts","../../../projects/atomic-angular/elements/public-api.ts","../../../projects/atomic-angular/elements/sinequa-atomic-angular-elements.ts"],"sourcesContent":["// Embedded HTML template for <lexiq-collections>.\n// Sourced from lexiq-prototype collections/collections.html — previously fetched at\n// runtime via a network request; now bundled directly into the component module so\n// the library ships as a single self-contained JS import (no separate HTML asset,\n// no network round-trip, works from a plain file:// page too).\n//\n// i18n: user-facing text carries `data-i18n` / `data-i18n-attr` annotations, and\n// the English below is the bundled fallback, not dead markup — applyTranslations()\n// (internal/i18n.ts) overwrites it once the element connects and again on every\n// language change. Keeping the English inline means the element still renders\n// correctly with no host translator at all. Text that sits next to an icon is\n// wrapped in its own <span data-i18n> so the walker never clobbers the icon.\nexport const TEMPLATE_HTML = `\n<!-- ── Collections view ── -->\n<div id=\"collections-view\" class=\"lq-collections-view oc-scrollable\" hidden>\n\n <div class=\"lq-col-header\">\n <h1 class=\"lq-col-header__title\" data-i18n=\"list.title\">Workspaces</h1>\n <div class=\"lq-col-header__actions\">\n <button class=\"lq-btn lq-btn--primary lq-btn--md\" id=\"btn-add-collection\">\n <i data-icon=\"col-plus\"></i>\n <span data-i18n=\"list.addCollection\">Add Workspace</span>\n </button>\n </div>\n </div>\n <p class=\"lq-col-subtitle\" data-i18n=\"list.subtitle\">Organize documents into reusable sets.</p>\n\n <!-- Tabs row -->\n <div class=\"lq-col-tabs\">\n <div class=\"lq-col-tabs__scroll\">\n <div class=\"oc-tab-group oc-tab-group--secondary\">\n <div class=\"oc-tab-group__items\" role=\"tablist\">\n <button class=\"oc-tab oc-tab--md oc-tab-variant-secondary\" role=\"tab\" aria-selected=\"true\" id=\"col-tab-all\" data-filter=\"all\">\n <span data-i18n=\"list.tabAll\">All Workspaces</span> <span class=\"oc-tab__badge\" id=\"col-badge-all\">0</span>\n </button>\n <button class=\"oc-tab oc-tab--md oc-tab-variant-secondary\" role=\"tab\" aria-selected=\"false\" id=\"col-tab-mine\" data-filter=\"editor\">\n <i data-icon=\"col-person\"></i> <span data-i18n=\"list.tabEditor\">Editor</span> <span class=\"oc-tab__badge\" id=\"col-badge-mine\">0</span>\n </button>\n <button class=\"oc-tab oc-tab--md oc-tab-variant-secondary\" role=\"tab\" aria-selected=\"false\" id=\"col-tab-shared\" data-filter=\"reader\">\n <i data-icon=\"col-people\"></i> <span data-i18n=\"list.tabReader\">Reader</span> <span class=\"oc-tab__badge\" id=\"col-badge-shared\">0</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Controls row -->\n <div class=\"lq-col-controls\">\n <!-- View toggle -->\n <div class=\"oc-toggle-group oc-toggle-group--single\">\n <div class=\"oc-toggle-group__items\">\n <button class=\"oc-toggle oc-toggle--small oc-toggle--unique oc-toggle--icon-only\" aria-pressed=\"true\" data-i18n-attr=\"aria-label:common.gridView\" aria-label=\"Grid view\" id=\"col-view-grid\">\n <i data-icon=\"col-grid\"></i>\n </button>\n <button class=\"oc-toggle oc-toggle--small oc-toggle--unique oc-toggle--icon-only\" aria-pressed=\"false\" data-i18n-attr=\"aria-label:common.listView\" aria-label=\"List view\" id=\"col-view-list\">\n <i data-icon=\"col-list\"></i>\n </button>\n </div>\n </div>\n\n <!-- Search bar -->\n <div class=\"oc-sb oc-search-bar oc-sb-size-md oc-sb--default oc-sb--empty\" role=\"search\">\n <span class=\"oc-sb-icon oc-sb__icon-search\" aria-hidden=\"true\"><i data-icon=\"suggestion-search\"></i></span>\n <input class=\"oc-sb-input oc-sb__input\" type=\"text\" data-i18n-attr=\"placeholder:list.searchPlaceholder\" placeholder=\"Search workspace...\" id=\"col-search-input\">\n <button class=\"oc-sb-clear lq-col-sb-clear\" id=\"col-search-clear\" data-i18n-attr=\"aria-label:common.clearSearch\" aria-label=\"Clear search\"><i data-icon=\"chip-close\"></i></button>\n </div>\n\n <div class=\"lq-col-selbar\" id=\"col-selbar\" hidden>\n <span class=\"lq-col-selbar__count\" id=\"col-selbar-count\" data-i18n=\"list.selectedCount\" data-i18n-count=\"0\">0 selected</span>\n <button class=\"lq-btn lq-btn--secondary lq-btn--sm\" id=\"col-sel-all\" data-i18n=\"common.selectAll\">Select All</button>\n <button class=\"lq-btn lq-btn--secondary lq-btn--secondary-danger lq-btn--sm\" id=\"col-sel-delete\" disabled><i data-icon=\"col-trash\"></i> <span data-i18n=\"common.delete\">Delete</span></button>\n </div>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-col-sel-group\" id=\"col-select-btn\" data-i18n=\"common.select\">Select</button>\n </div>\n\n <!-- Loading / error states for the initial GET .../container fetch -->\n <div class=\"lq-col-loading\" id=\"col-grid-loading\" hidden data-i18n=\"list.loading\">Loading workspaces…</div>\n <div class=\"lq-col-loading lq-col-loading--error\" id=\"col-grid-error\" hidden>\n <span id=\"col-grid-error-message\" data-i18n=\"list.loadError\">Couldn't load workspaces.</span>\n <button class=\"lq-btn lq-btn--secondary lq-btn--sm\" id=\"col-grid-retry\" data-i18n=\"common.retry\">Retry</button>\n </div>\n <div class=\"lq-inline-error\" id=\"col-refresh-error\" role=\"alert\" hidden></div>\n\n <!-- Collection grid (populated by JS from the container list response) -->\n <div class=\"lq-col-grid oc-scrollable\" id=\"col-grid\"></div>\n\n <!-- Collection list view (populated lazily on first switch) -->\n <div class=\"lq-col-list oc-scrollable\" id=\"col-list\" hidden></div>\n</div><!-- /.lq-collections-view -->\n\n<!-- ── Collection detail view ── -->\n<div id=\"col-detail-view\" class=\"lq-col-detail-view oc-scrollable\" hidden>\n\n <!-- Header -->\n <div class=\"lq-cdv-header\">\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--md lq-btn--icon\" id=\"col-detail-back\" data-i18n-attr=\"aria-label:detail.back\" aria-label=\"Back to workspaces\">\n <i data-icon=\"col-arrow-left\"></i>\n </button>\n <h1 class=\"lq-cdv-title\" id=\"col-detail-title\"></h1>\n <div class=\"lq-cdv-actions\">\n <button class=\"lq-btn lq-btn--secondary lq-btn--secondary-danger lq-btn--md\" id=\"col-detail-delete\">\n <i data-icon=\"col-trash\"></i> <span data-i18n=\"common.delete\">Delete</span>\n </button>\n <button class=\"lq-btn lq-btn--secondary lq-btn--md\" id=\"col-detail-share\">\n <i data-icon=\"menu-share\"></i> <span data-i18n=\"share.title\">Manage access</span>\n </button>\n <button class=\"lq-btn lq-btn--secondary lq-btn--md\" id=\"col-detail-edit\">\n <i data-icon=\"edit-reg\"></i> <span data-i18n=\"common.edit\">Edit</span>\n </button>\n <button class=\"lq-btn lq-btn--secondary lq-btn--md lq-btn--icon\" id=\"col-detail-refresh\" data-i18n-attr=\"aria-label:common.refresh\" aria-label=\"Refresh\">\n <i data-icon=\"ut-sync\"></i>\n </button>\n </div>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--md lq-btn--icon\" id=\"cdv-more-btn\" data-i18n-attr=\"aria-label:common.moreOptions\" aria-label=\"More options\">\n <i data-icon=\"ellipsis-reg\"></i>\n </button>\n </div>\n\n <!-- Description + tags -->\n <p class=\"lq-cdv-desc\" id=\"col-detail-desc\"></p>\n <p class=\"lq-cdv-tags\" id=\"col-detail-tags\"></p>\n\n <!-- Controls row (reuse lq-col-controls) -->\n <div class=\"lq-col-controls lq-cdv-controls\">\n <button class=\"lq-btn lq-btn--primary lq-btn--md\" id=\"col-detail-upload\">\n <i data-icon=\"menu-upload\"></i> <span data-i18n=\"detail.upload\">Upload</span>\n </button>\n <div class=\"lq-cdv-controls-rest\">\n <div class=\"oc-toggle-group oc-toggle-group--single\">\n <div class=\"oc-toggle-group__items\">\n <button class=\"oc-toggle oc-toggle--small oc-toggle--unique oc-toggle--icon-only\" aria-pressed=\"true\" data-i18n-attr=\"aria-label:common.gridView\" aria-label=\"Grid view\" id=\"col-detail-view-grid\">\n <i data-icon=\"col-grid\"></i>\n </button>\n <button class=\"oc-toggle oc-toggle--small oc-toggle--unique oc-toggle--icon-only\" aria-pressed=\"false\" data-i18n-attr=\"aria-label:common.listView\" aria-label=\"List view\" id=\"col-detail-view-list\">\n <i data-icon=\"col-list\"></i>\n </button>\n </div>\n </div>\n <div class=\"oc-sb oc-search-bar oc-sb-size-md oc-sb--default oc-sb--empty\" role=\"search\">\n <span class=\"oc-sb-icon oc-sb__icon-search\" aria-hidden=\"true\"><i data-icon=\"suggestion-search\"></i></span>\n <input class=\"oc-sb-input oc-sb__input\" type=\"text\" data-i18n-attr=\"placeholder:detail.searchPlaceholder\" placeholder=\"Search files...\" id=\"col-detail-search\">\n <button class=\"oc-sb-clear lq-col-sb-clear\" id=\"col-detail-search-clear\" data-i18n-attr=\"aria-label:common.clearSearch\" aria-label=\"Clear search\"><i data-icon=\"chip-close\"></i></button>\n </div>\n <div class=\"lq-cdv-selbar\" id=\"col-detail-selbar\" hidden>\n <button class=\"lq-btn lq-btn--secondary lq-btn--sm\" id=\"col-detail-sel-all\" data-i18n=\"common.selectAll\">Select All</button>\n <button class=\"lq-btn lq-btn--secondary lq-btn--secondary-danger lq-btn--sm\" id=\"col-detail-sel-delete\" disabled><i data-icon=\"col-trash\"></i> <span data-i18n=\"common.delete\">Delete</span></button>\n </div>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-col-sel-group\" id=\"col-detail-select-btn\" data-i18n=\"common.select\">Select</button>\n </div>\n </div>\n\n <!-- File count -->\n <p class=\"lq-cdv-count\" id=\"col-detail-count\"></p>\n <div class=\"lq-inline-error\" id=\"col-detail-refresh-error\" role=\"alert\" hidden></div>\n\n <!-- Empty state -->\n <div class=\"lq-cdv-empty\" id=\"col-detail-empty\" hidden>\n <div class=\"lq-cdv-empty__icon\"><i data-icon=\"col-folder-teal\"></i></div>\n <h5 class=\"lq-cdv-empty__title\" data-i18n=\"detail.emptyTitle\">No documents yet</h5>\n <p class=\"lq-cdv-empty__sub\" data-i18n=\"detail.emptySubtitle\">Documents added to this workspace will appear here</p>\n </div>\n\n <!-- Loading / error states for GET .../container/{id}/documents -->\n <div class=\"lq-col-loading\" id=\"col-detail-docs-loading\" hidden data-i18n=\"detail.docsLoading\">Loading documents…</div>\n <div class=\"lq-col-loading lq-col-loading--error\" id=\"col-detail-docs-error\" hidden>\n <span id=\"col-detail-docs-error-message\" data-i18n=\"detail.docsLoadError\">Couldn't load documents.</span>\n <button class=\"lq-btn lq-btn--secondary lq-btn--sm\" id=\"col-detail-docs-retry\" data-i18n=\"common.retry\">Retry</button>\n </div>\n\n <!-- Document grid -->\n <div class=\"lq-cdv-grid oc-scrollable\" id=\"col-detail-grid\"></div>\n\n <!-- Document list -->\n <div class=\"lq-doc-list oc-scrollable\" id=\"col-detail-list\" hidden></div>\n\n</div><!-- /.lq-col-detail-view -->\n\n<!-- ── Resize handle for collection doc preview (left edge of the panel) ── -->\n<div id=\"col-doc-resize-handle\" class=\"lq-resize-handle\"></div>\n\n<!-- ── Collection document preview panel ── -->\n<div id=\"col-doc-preview\" class=\"lq-detail-panel lq-cdp\">\n <div class=\"lq-dp-doc-preview\">\n <div class=\"lq-dp-doc-preview__header\">\n <div class=\"lq-dp-doc-preview__title-row\">\n <a class=\"oc-link oc-link-size-medium lq-dp-doc-preview__title-link\" id=\"cdp-preview-link\" href=\"#\" target=\"_blank\" rel=\"noopener\">\n <span class=\"oc-link-icon-left\"><i id=\"cdp-preview-icon\"></i></span>\n <span class=\"oc-link-label\" id=\"cdp-preview-title\"></span>\n <span class=\"oc-link-icon-right\"><i data-icon=\"link-external\"></i></span>\n </a>\n <div class=\"lq-dp-doc-preview__actions\">\n <button class=\"lq-btn lq-btn--sm lq-btn--icon lq-btn--tertiary-neutral\" id=\"btn-cdp-close\" data-i18n-attr=\"aria-label:preview.close\" aria-label=\"Close preview\">\n <i data-icon=\"panel-close\"></i>\n </button>\n </div>\n </div>\n <div class=\"lq-dp-doc-preview__meta\">\n <div class=\"lq-dp-doc-preview__meta-row\">\n <i data-icon=\"fp-date\"></i>\n <span class=\"lq-dp-doc-preview__meta-label\" data-i18n=\"preview.dateLabel\">Date:</span>\n <span id=\"cdp-preview-date\"></span>\n </div>\n <div class=\"lq-dp-doc-preview__meta-row\">\n <i data-icon=\"fp-sources\"></i>\n <span class=\"lq-dp-doc-preview__meta-label\" data-i18n=\"preview.sourceLabel\">Source:</span>\n <span id=\"cdp-preview-source\"></span>\n </div>\n </div>\n <div class=\"lq-dp-doc-preview__search-row\">\n <div class=\"oc-sb oc-search-bar oc-sb-size-md oc-sb--medium oc-sb--label oc-sb--default oc-sb--empty\" role=\"search\">\n <span class=\"oc-sb-icon oc-sb__icon-search\" aria-hidden=\"true\"><i data-icon=\"suggestion-search\"></i></span>\n <input class=\"oc-sb-input oc-sb__input\" type=\"text\" data-i18n-attr=\"placeholder:preview.findPlaceholder\" placeholder=\"Find text...\" id=\"cdp-search-input\">\n <div class=\"lq-dp-search-nav\" id=\"cdp-search-nav\">\n <div class=\"lq-dp-search-nav__arrows\">\n <button class=\"lq-dp-search-nav__btn\" id=\"cdp-search-nav-prev\" data-i18n-attr=\"aria-label:preview.previousResult\" aria-label=\"Previous result\">\n <i data-icon=\"chevron-up\"></i>\n </button>\n <button class=\"lq-dp-search-nav__btn\" id=\"cdp-search-nav-next\" data-i18n-attr=\"aria-label:preview.nextResult\" aria-label=\"Next result\">\n <i data-icon=\"chevron-down\"></i>\n </button>\n </div>\n <span class=\"lq-dp-search-nav__count\" id=\"cdp-search-nav-count\">1/1</span>\n <button class=\"lq-dp-search-nav__btn lq-dp-search-nav__close\" id=\"cdp-search-nav-close\" data-i18n-attr=\"aria-label:common.clearSearch\" aria-label=\"Clear search\">\n <i data-icon=\"chip-close\"></i>\n </button>\n </div>\n </div>\n <button class=\"lq-btn lq-btn--md lq-btn--secondary\" id=\"btn-cdp-ask-agent\">\n <i data-icon=\"dp-chat\"></i>\n <span data-i18n=\"preview.askFollowUp\">Ask follow-up</span>\n </button>\n <div class=\"lq-dp-doc-preview__doc-controls\">\n <button class=\"lq-btn lq-btn--md lq-btn--icon lq-btn--tertiary-neutral\" id=\"cdp-zoom-out\" data-i18n-attr=\"aria-label:preview.zoomOut\" aria-label=\"Zoom out\"><i data-icon=\"zoom-out\"></i></button>\n <button class=\"lq-btn lq-btn--md lq-btn--icon lq-btn--tertiary-neutral\" id=\"cdp-zoom-in\" data-i18n-attr=\"aria-label:preview.zoomIn\" aria-label=\"Zoom in\"><i data-icon=\"zoom-in\"></i></button>\n <!-- Page navigation only drives the locally-built pages of the passages\n path; a server-rendered preview paginates itself inside its frame,\n so views/doc-preview.ts hides this group there. -->\n <div class=\"lq-dp-doc-preview__page-nav\" id=\"cdp-page-nav\">\n <div class=\"oc-separator oc-separator--vertical oc-separator--spacing-sm\" role=\"separator\" aria-hidden=\"true\"></div>\n <button class=\"lq-btn lq-btn--md lq-btn--icon lq-btn--tertiary-neutral\" id=\"cdp-prev-page\" data-i18n-attr=\"aria-label:preview.previousPage\" aria-label=\"Previous page\"><i data-icon=\"chevron-up\"></i></button>\n <button class=\"lq-btn lq-btn--md lq-btn--icon lq-btn--tertiary-neutral\" id=\"cdp-next-page\" data-i18n-attr=\"aria-label:preview.nextPage\" aria-label=\"Next page\"><i data-icon=\"chevron-down\"></i></button>\n <div class=\"oc-input-wrap oc-input-size-sm lq-dp-doc-preview__page-ctrl\">\n <input class=\"oc-input-control lq-dp-doc-preview__page-current\" type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" value=\"1\" id=\"cdp-page-current\" data-i18n-attr=\"aria-label:preview.currentPage\" aria-label=\"Current page\">\n <span class=\"lq-dp-doc-preview__page-sep\" aria-hidden=\"true\">/</span>\n <span class=\"lq-dp-doc-preview__page-total\" id=\"cdp-page-total\">10</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"lq-dp-doc-preview__body\" id=\"cdp-preview-body\">\n <!-- Passages sidebar — only shown when preview is opened from a message resources item -->\n <div class=\"lq-passages-sidebar\" id=\"cdp-passages-sidebar\" hidden>\n <div class=\"lq-passages-sidebar__full\">\n <div class=\"lq-passages-sidebar__header\">\n <span class=\"lq-passages-sidebar__title\" data-i18n=\"preview.passages\">Passages</span>\n <button class=\"lq-btn lq-btn--sm lq-btn--icon lq-btn--tertiary-neutral\" id=\"cdp-passages-collapse\" data-i18n-attr=\"aria-label:preview.collapsePassages\" aria-label=\"Collapse passages\">\n <i data-icon=\"collapse-sidebar\"></i>\n </button>\n </div>\n <div class=\"lq-passages-sidebar__list\" id=\"cdp-passages-list\"></div>\n </div>\n <div class=\"lq-passages-sidebar__collapsed-strip\">\n <button class=\"lq-btn lq-btn--sm lq-btn--icon lq-btn--tertiary-neutral\" id=\"cdp-passages-expand\" data-i18n-attr=\"aria-label:preview.expandPassages;title:preview.passages\" aria-label=\"Expand passages\" title=\"Passages\">\n <i data-icon=\"expand-sidebar\"></i>\n </button>\n </div>\n </div>\n <div class=\"lq-dp-doc-preview__pages\" id=\"cdp-preview-pages\"></div>\n </div>\n </div>\n</div><!-- /.lq-cdp -->\n\n<!-- ── Delete collection modal ── -->\n<div class=\"lq-confirm-backdrop\" id=\"col-delete-backdrop\" hidden></div>\n<div class=\"lq-confirm-modal\" id=\"col-delete-modal\" hidden role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"col-delete-modal-title\">\n <div class=\"lq-confirm-header\">\n <span class=\"lq-confirm-title\" id=\"col-delete-modal-title\" data-i18n=\"list.deleteTitle\">Delete workspace?</span>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"btn-col-delete-close\" data-i18n-attr=\"aria-label:common.close\" aria-label=\"Close\"><i data-icon=\"panel-close\"></i></button>\n </div>\n <div class=\"lq-confirm-body\">\n <!-- Filled by setDeleteWarning() (internal/dom-utils.ts): the subject is\n interpolated INTO the sentence rather than prepended to it, because\n languages put it in different places. -->\n <p class=\"lq-confirm-desc\" id=\"col-delete-desc\"></p>\n <div class=\"lq-inline-error\" id=\"col-delete-error\" hidden></div>\n </div>\n <div class=\"lq-confirm-footer\">\n <button class=\"lq-btn lq-btn--secondary lq-btn--md\" id=\"btn-col-delete-cancel\" data-i18n=\"common.cancel\">Cancel</button>\n <button class=\"lq-btn lq-btn--danger lq-btn--md\" id=\"btn-col-delete-confirm\" data-i18n=\"common.delete\">Delete</button>\n </div>\n</div>\n\n<!-- ── Delete document(s) modal ── -->\n<div class=\"lq-confirm-backdrop\" id=\"doc-delete-backdrop\" hidden></div>\n<div class=\"lq-confirm-modal\" id=\"doc-delete-modal\" hidden role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"doc-delete-title\">\n <div class=\"lq-confirm-header\">\n <span class=\"lq-confirm-title\" id=\"doc-delete-title\" data-i18n=\"detail.deleteDocTitle\">Delete document?</span>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"btn-doc-delete-close\" data-i18n-attr=\"aria-label:common.close\" aria-label=\"Close\"><i data-icon=\"panel-close\"></i></button>\n </div>\n <div class=\"lq-confirm-body\">\n <p class=\"lq-confirm-desc\" id=\"doc-delete-desc\"></p>\n <div class=\"lq-inline-error\" id=\"doc-delete-error\" hidden></div>\n </div>\n <div class=\"lq-confirm-footer\">\n <button class=\"lq-btn lq-btn--secondary lq-btn--md\" id=\"btn-doc-delete-cancel\" data-i18n=\"common.cancel\">Cancel</button>\n <button class=\"lq-btn lq-btn--danger lq-btn--md\" id=\"btn-doc-delete-confirm\" data-i18n=\"common.delete\">Delete</button>\n </div>\n</div>\n\n<!-- ── Collection detail mobile \"more\" menu ── -->\n<div class=\"lq-doc-menu\" id=\"cdv-more-menu\" hidden>\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md\" id=\"cdv-more-share\">\n <div class=\"oc-list-item-left\">\n <span class=\"oc-list-item-icon\"><i data-icon=\"menu-share\"></i></span>\n <div class=\"oc-list-item-text-block\"><span class=\"oc-list-item-text\" data-i18n=\"share.title\">Manage access</span></div>\n </div>\n </button>\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md\" id=\"cdv-more-edit\">\n <div class=\"oc-list-item-left\">\n <span class=\"oc-list-item-icon\"><i data-icon=\"edit-reg\"></i></span>\n <div class=\"oc-list-item-text-block\"><span class=\"oc-list-item-text\" data-i18n=\"common.edit\">Edit</span></div>\n </div>\n </button>\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md\" id=\"cdv-more-refresh\">\n <div class=\"oc-list-item-left\">\n <span class=\"oc-list-item-icon\"><i data-icon=\"ut-sync\"></i></span>\n <div class=\"oc-list-item-text-block\"><span class=\"oc-list-item-text\" data-i18n=\"common.refresh\">Refresh</span></div>\n </div>\n </button>\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md lq-list-item--danger\" id=\"cdv-more-delete\">\n <div class=\"oc-list-item-left\">\n <span class=\"oc-list-item-icon\"><i data-icon=\"col-trash\"></i></span>\n <div class=\"oc-list-item-text-block\"><span class=\"oc-list-item-text\" data-i18n=\"common.delete\">Delete</span></div>\n </div>\n </button>\n</div>\n\n<!-- ── Manage access modal ── -->\n<div class=\"lq-confirm-backdrop\" id=\"col-share-backdrop\" hidden></div>\n<div class=\"lq-confirm-modal lq-col-share-modal\" id=\"col-share-modal\" hidden role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"col-share-modal-title\">\n <div class=\"lq-confirm-header\">\n <span class=\"lq-confirm-title\" id=\"col-share-modal-title\" data-i18n=\"share.title\">Manage access</span>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"btn-col-share-close\" data-i18n-attr=\"aria-label:common.close\" aria-label=\"Close\"><i data-icon=\"panel-close\"></i></button>\n </div>\n <div class=\"lq-col-share-member-portal\" id=\"col-share-member-portal\" hidden role=\"listbox\"></div>\n <div class=\"lq-confirm-body lq-col-share-body\">\n <div class=\"lq-share-agent-row\">\n <span class=\"lq-share-agent-name\" id=\"col-share-col-name\"></span>\n </div>\n <div class=\"oc-input-field\">\n <label class=\"oc-input-label\" for=\"col-share-search-input\" data-i18n=\"share.addPeople\">Add people</label>\n <div class=\"lq-col-share-search-wrap\">\n <div class=\"lq-col-share-input-anchor\">\n <div class=\"lq-tag-input\" id=\"col-share-tag-wrap\">\n <input class=\"lq-tag-input__input\" id=\"col-share-search-input\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" data-i18n-attr=\"placeholder:share.searchPlaceholder;aria-label:share.searchUsers\" placeholder=\"Search by name or email…\" aria-label=\"Search users\" role=\"combobox\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"col-share-dropdown\" />\n <div class=\"lq-col-share-perm-wrap\">\n <button type=\"button\" class=\"lq-btn lq-btn--sm lq-btn--tertiary-neutral lq-col-share-perm-btn\" id=\"col-share-perm-btn\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\n <span class=\"lq-col-share-perm-icon\"><i data-icon=\"eye\"></i></span>\n <span id=\"col-share-perm-label\" data-i18n=\"share.reader\">Reader</span>\n <i data-icon=\"chevron-down\"></i>\n </button>\n <div class=\"lq-col-share-perm-dropdown\" id=\"col-share-perm-dropdown\" hidden role=\"listbox\">\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md oc-list-item-selected\" data-role=\"reader\" role=\"option\" type=\"button\">\n <div class=\"oc-list-item-left\">\n <i data-icon=\"eye\"></i>\n <div class=\"oc-list-item-text-block\">\n <span class=\"oc-list-item-text\" data-i18n=\"share.reader\">Reader</span>\n <span class=\"oc-list-item-subtext\" data-i18n=\"share.readerDescription\">Can view and use the workspace.</span>\n </div>\n </div>\n </button>\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md\" data-role=\"owner\" role=\"option\" type=\"button\">\n <div class=\"oc-list-item-left\">\n <i data-icon=\"crown\"></i>\n <div class=\"oc-list-item-text-block\">\n <span class=\"oc-list-item-text\" data-i18n=\"share.owner\">Owner</span>\n <span class=\"oc-list-item-subtext\" data-i18n=\"share.ownerDescription\">Can add or remove people, change roles, and manage the workspace.</span>\n </div>\n </div>\n </button>\n </div>\n </div>\n </div>\n <div class=\"lq-col-share-dropdown\" id=\"col-share-dropdown\" hidden role=\"listbox\"></div>\n </div>\n <button class=\"lq-btn lq-btn--primary lq-btn--md\" id=\"btn-col-share-invite\" disabled data-i18n=\"common.add\">Add</button>\n </div>\n </div>\n <p class=\"lq-col-share-access-count\" id=\"col-share-access-count\"></p>\n <div class=\"lq-col-share-access-list oc-scrollable\" id=\"col-share-access-list\"></div>\n <div class=\"lq-inline-error\" id=\"col-share-error\" hidden></div>\n <div class=\"lq-share-notice\">\n <i data-icon=\"share-info\"></i>\n <p class=\"lq-share-notice-text\" data-i18n=\"share.accessNotice\">Some documents in this workspace may not be accessible to all shared users. Documents from shared drives or external sources remain subject to their original access permissions. Locally uploaded files from your personal device will always be accessible through the shared workspace.</p>\n </div>\n </div>\n</div>\n\n<!-- ── Upload Documents modal ── -->\n<div class=\"lq-confirm-backdrop\" id=\"col-upload-backdrop\" hidden></div>\n<div class=\"lq-confirm-modal lq-upload-modal\" id=\"col-upload-modal\" hidden role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"col-upload-modal-title\">\n <div class=\"lq-confirm-header\">\n <span class=\"lq-confirm-title\" id=\"col-upload-modal-title\" data-i18n=\"upload.modalTitle\">Upload Documents</span>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"btn-col-upload-close\" data-i18n-attr=\"aria-label:common.close\" aria-label=\"Close\"><i data-icon=\"panel-close\"></i></button>\n </div>\n <div class=\"lq-confirm-body lq-upload-body\">\n <div class=\"lq-upload-dropzone\" id=\"col-upload-dropzone\" role=\"button\" tabindex=\"0\" data-i18n-attr=\"aria-label:upload.dropzoneLabel\" aria-label=\"Drop zone — click to browse files\">\n <input type=\"file\" id=\"col-upload-input\" multiple hidden>\n <!-- Split in two so the \"browse\" part keeps its own styling; each half is\n translated on its own rather than carrying markup in the catalog. -->\n <p class=\"lq-upload-dropzone__main\"><span data-i18n=\"upload.dropPrefix\">Drop your files here, or </span><span class=\"lq-upload-dropzone__browse\" data-i18n=\"upload.browse\">click to browse</span></p>\n </div>\n <div class=\"lq-upload-error\" id=\"col-upload-error\" hidden></div>\n <div class=\"lq-upload-file-list oc-scrollable\" id=\"col-upload-file-list\" hidden></div>\n </div>\n <div class=\"lq-confirm-footer\">\n <button class=\"lq-btn lq-btn--secondary lq-btn--md\" id=\"btn-col-upload-cancel\" data-i18n=\"common.cancel\">Cancel</button>\n <button class=\"lq-btn lq-btn--primary lq-btn--md\" id=\"btn-col-upload-confirm\" disabled data-i18n=\"detail.upload\">Upload</button>\n </div>\n</div>\n\n<!-- ── Edit collection modal ── -->\n<div class=\"lq-confirm-backdrop\" id=\"col-edit-backdrop\" hidden></div>\n<div class=\"lq-confirm-modal lq-col-edit-modal\" id=\"col-edit-modal\" hidden role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"col-edit-modal-title\">\n <div class=\"lq-confirm-header\">\n <span class=\"lq-confirm-title\" id=\"col-edit-modal-title\" data-i18n=\"edit.editTitle\">Edit workspace</span>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"btn-col-edit-close\" data-i18n-attr=\"aria-label:common.close\" aria-label=\"Close\"><i data-icon=\"panel-close\"></i></button>\n </div>\n <div class=\"lq-confirm-body lq-col-edit-body\">\n <div class=\"oc-input-field\">\n <label class=\"oc-input-label\" for=\"col-edit-title\"><span data-i18n=\"edit.nameLabel\">Title</span> <span class=\"oc-input-label__tag oc-input-label__tag--required\" data-i18n=\"common.required\">Required</span></label>\n <div class=\"oc-input-wrap oc-input-size-md\" id=\"col-edit-title-wrap\">\n <input class=\"oc-input-control\" id=\"col-edit-title\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" maxlength=\"120\" required />\n </div>\n <p class=\"oc-input-hint oc-input-hint-error\" id=\"col-edit-title-hint\" hidden data-i18n=\"edit.nameRequired\">Title is required</p>\n </div>\n <div class=\"oc-input-field\">\n <label class=\"oc-input-label\" for=\"col-edit-desc\" data-i18n=\"edit.descriptionLabel\">Description</label>\n <div class=\"oc-input-wrap oc-input-wrap--textarea lq-col-edit-desc-wrap\" id=\"col-edit-desc-wrap\">\n <textarea class=\"oc-input-control\" id=\"col-edit-desc\" rows=\"3\" maxlength=\"300\" data-i18n-attr=\"placeholder:edit.descriptionPlaceholder\" placeholder=\"Describe this workspace…\"></textarea>\n <span class=\"oc-input-counter\" id=\"col-edit-desc-counter\">0/300</span>\n </div>\n </div>\n <div class=\"oc-input-field\">\n <label class=\"oc-input-label\" for=\"col-edit-tags-input\" data-i18n=\"edit.tagsLabel\">Tags</label>\n <div class=\"lq-tag-input\" id=\"col-edit-tag-wrap\">\n <input class=\"lq-tag-input__input\" id=\"col-edit-tags-input\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" data-i18n-attr=\"placeholder:edit.tagsPlaceholder;aria-label:edit.addTag\" placeholder=\"Type a tag and press comma…\" aria-label=\"Add tag\" />\n </div>\n <p class=\"oc-input-hint\" data-i18n=\"edit.tagsHint\">Press comma or Enter to add a tag · Backspace to remove the last one</p>\n </div>\n <div class=\"oc-input-field\" id=\"col-edit-share-field\">\n <label class=\"oc-input-label\" for=\"col-edit-share-input\" data-i18n=\"edit.shareLabel\">Share with</label>\n <div class=\"lq-col-share-search-wrap\">\n <div class=\"lq-col-share-input-anchor\">\n <div class=\"lq-tag-input\" id=\"col-edit-share-wrap\">\n <input class=\"lq-tag-input__input\" id=\"col-edit-share-input\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" role=\"combobox\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"col-edit-share-dropdown\" data-i18n-attr=\"placeholder:share.searchPlaceholder;aria-label:share.searchUsers\" placeholder=\"Search by name or email…\" aria-label=\"Search users\" />\n <div class=\"lq-col-share-perm-wrap\">\n <button type=\"button\" class=\"lq-btn lq-btn--sm lq-btn--tertiary-neutral lq-col-share-perm-btn\" id=\"col-edit-share-perm-btn\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\n <span class=\"lq-col-share-perm-icon\"><i data-icon=\"eye\"></i></span>\n <span id=\"col-edit-share-perm-label\" data-i18n=\"share.reader\">Reader</span>\n <i data-icon=\"chevron-down\"></i>\n </button>\n <div class=\"lq-col-share-perm-dropdown\" id=\"col-edit-share-perm-dropdown\" hidden role=\"listbox\">\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md\" data-role=\"reader\" role=\"option\" type=\"button\">\n <div class=\"oc-list-item-left\">\n <i data-icon=\"eye\"></i>\n <div class=\"oc-list-item-text-block\">\n <span class=\"oc-list-item-text\" data-i18n=\"share.reader\">Reader</span>\n <span class=\"oc-list-item-subtext\" data-i18n=\"share.readerDescription\">Can view and use the workspace.</span>\n </div>\n </div>\n </button>\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md\" data-role=\"owner\" role=\"option\" type=\"button\">\n <div class=\"oc-list-item-left\">\n <i data-icon=\"crown\"></i>\n <div class=\"oc-list-item-text-block\">\n <span class=\"oc-list-item-text\" data-i18n=\"share.owner\">Owner</span>\n <span class=\"oc-list-item-subtext\" data-i18n=\"share.ownerDescription\">Can add or remove people, change roles, and manage the workspace.</span>\n </div>\n </div>\n </button>\n </div>\n </div>\n </div>\n <div class=\"lq-col-share-dropdown\" id=\"col-edit-share-dropdown\" hidden role=\"listbox\"></div>\n </div>\n </div>\n <p class=\"oc-input-hint\" data-i18n=\"edit.shareHint\">Search a user to grant access · click a role chip to switch between Owner and Reader</p>\n </div>\n <div class=\"lq-inline-error\" id=\"col-edit-error\" hidden></div>\n </div>\n <div class=\"lq-confirm-footer\">\n <button class=\"lq-btn lq-btn--secondary lq-btn--md\" id=\"btn-col-edit-cancel\" data-i18n=\"common.cancel\">Cancel</button>\n <button class=\"lq-btn lq-btn--primary lq-btn--md\" id=\"btn-col-edit-save\" data-i18n=\"common.save\">Save</button>\n </div>\n</div>\n\n<!-- Upload progress tracker -->\n<div id=\"lq-upload-tracker\" class=\"lq-upload-tracker\" hidden>\n <!-- Minimized peek strip (slides up from below viewport) -->\n <div class=\"lq-upload-tracker__peek\" id=\"ut-peek\">\n <span class=\"lq-upload-tracker__peek-spinner\"></span>\n <span class=\"lq-upload-tracker__peek-check-icon\"><i data-icon=\"ut-check\"></i></span>\n <span class=\"lq-upload-tracker__peek-error-icon\"><i data-icon=\"ut-error\"></i></span>\n <span class=\"lq-upload-tracker__peek-text\" id=\"ut-peek-text\"></span>\n <span class=\"lq-upload-tracker__peek-hint\" data-i18n=\"tracker.clickToRestore\">Click to restore</span>\n </div>\n <!-- Header: always visible, neutral bg, border-bottom -->\n <div class=\"lq-upload-tracker__header\">\n <span class=\"lq-upload-tracker__spinner\"></span>\n <span class=\"lq-upload-tracker__done-icon\"><i data-icon=\"ut-check\"></i></span>\n <div class=\"lq-upload-tracker__info\">\n <span class=\"lq-upload-tracker__name\" id=\"ut-col-name\"></span>\n <span class=\"lq-upload-tracker__count\" id=\"ut-file-count\"></span>\n </div>\n <div class=\"lq-upload-tracker__btns\">\n <span class=\"lq-upload-tracker__pin-hint\" data-i18n=\"tracker.clickToOpen\">Click to open</span>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"ut-collapse-btn\" data-i18n-attr=\"aria-label:common.expand\" aria-label=\"Expand\"><i data-icon=\"chevron-down\"></i></button>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"ut-dismiss-btn\" data-i18n-attr=\"aria-label:common.close\" aria-label=\"Close\"><i data-icon=\"panel-close\"></i></button>\n </div>\n </div>\n <!-- Connection / session banner. Driven by onConnectionChange() in\n views/upload-tracker.ts; sits under the header so it is visible in both\n the collapsed and the expanded body states.\n a11y: role=\"status\" announces the phase and the retry number, which\n change once per attempt. The countdown line ticks every second, so it is\n aria-hidden - a screen reader reading \"Next try in 0:11 / 0:10 / 0:09\"\n over and over would drown out everything else on the page. -->\n <div class=\"lq-ut-conn\" id=\"ut-conn\" hidden role=\"status\">\n <span class=\"lq-ut-conn__icon\"><i data-icon=\"ut-error\"></i></span>\n <div class=\"lq-ut-conn__text\">\n <span class=\"lq-ut-conn__title\" id=\"ut-conn-title\"></span>\n <span class=\"lq-ut-conn__detail\" id=\"ut-conn-detail\"></span>\n <span class=\"lq-ut-conn__countdown\" id=\"ut-conn-countdown\" aria-hidden=\"true\"></span>\n </div>\n <button class=\"lq-btn lq-btn--secondary lq-btn--sm lq-ut-conn__retry\" id=\"ut-conn-retry\" hidden data-i18n=\"common.retry\">Retry</button>\n </div>\n <!-- Collapsed body: compact inline stats (default) -->\n <div class=\"lq-upload-tracker__inline-body\" id=\"ut-inline-body\">\n <div class=\"lq-upload-tracker__inline-stats\">\n <span class=\"lq-upload-tracker__inline-stat\" id=\"ut-inline-upload-stat\" hidden>\n <i data-icon=\"ut-upload\"></i>\n <span id=\"ut-lbl-upload\"></span><span class=\"lq-doc-status__dots\"><span></span><span></span><span></span></span>\n </span>\n <span class=\"lq-upload-tracker__inline-sep\" id=\"ut-inline-sep\" hidden></span>\n <span class=\"lq-upload-tracker__inline-stat\" id=\"ut-inline-index-stat\" hidden>\n <i data-icon=\"ut-sync\"></i>\n <span id=\"ut-lbl-index\"></span><span class=\"lq-doc-status__dots\"><span></span><span></span><span></span></span>\n </span>\n <span class=\"lq-upload-tracker__inline-sep\" id=\"ut-inline-sep-2\" hidden></span>\n <span class=\"lq-upload-tracker__inline-stat lq-upload-tracker__inline-stat--done\" id=\"ut-inline-done-stat\" hidden>\n <i data-icon=\"ut-check\"></i>\n <span id=\"ut-lbl-done\"></span>\n </span>\n <span class=\"lq-upload-tracker__inline-sep\" id=\"ut-inline-sep-3\" hidden></span>\n <span class=\"lq-upload-tracker__inline-stat lq-upload-tracker__inline-stat--error\" id=\"ut-inline-error-stat\" hidden>\n <i data-icon=\"ut-error\"></i>\n <span id=\"ut-lbl-error\"></span>\n </span>\n </div>\n </div>\n <!-- Expanded body: rendered dynamically by _uploadTracker -->\n <div class=\"lq-upload-tracker__detail-body\" id=\"ut-detail-body\" hidden></div>\n</div>\n`;\n\nexport function createTemplate() {\n const template = document.createElement(\"template\");\n template.innerHTML = TEMPLATE_HTML;\n return template;\n}\n","/* GENERATED by scripts/generate-css.mjs — do not edit by hand. */\nexport const CSS_TEXT =\n '/* GENERATED by scripts/generate-css.mjs — do not edit by hand. */\\n/* Vendored from lexiq-prototype scss/spacing.scss — :root rewritten to :host */\\r\\n:host {\\r\\n --space-3xs: 4px;\\r\\n --space-2xs: 8px;\\r\\n --space-xs: 12px;\\r\\n --space-md: 16px;\\r\\n --space-lg: 20px;\\r\\n --space-xl: 24px;\\r\\n --space-2xl: 32px;\\r\\n --space-3xl: 36px;\\r\\n --space-4xl: 40px;\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/radius.scss — :root rewritten to :host */\\r\\n:host {\\r\\n --radius-xs: 4px;\\r\\n --radius-sm: 8px;\\r\\n --radius-md: 12px;\\r\\n --radius-lg: 16px;\\r\\n --radius-xl: 20px;\\r\\n --radius-2xl: 24px;\\r\\n --radius-3xl: 28px;\\r\\n --radius-4xl: 32px;\\r\\n --radius-rounded: 9999px;\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/row-height.scss — :root rewritten to :host */\\r\\n:host {\\r\\n --row-height-xs: 18px;\\r\\n --row-height-sm: 24px;\\r\\n --row-height-md: 36px;\\r\\n --row-height-l: 44px;\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/typography.scss — :root rewritten to :host.\\r\\n Utility classes (.text-h1 etc.) kept for fidelity; harmless inside a Shadow Root. */\\r\\n:host {\\r\\n --text-h1-size: 24px;\\r\\n --text-h1-line-height: 31px;\\r\\n --text-h1-weight: 700;\\r\\n\\r\\n --text-h2-size: 20px;\\r\\n --text-h2-line-height: 26px;\\r\\n --text-h2-weight: 400;\\r\\n\\r\\n --text-h3-size: 18px;\\r\\n --text-h3-line-height: 24px;\\r\\n --text-h3-weight: 400;\\r\\n\\r\\n --text-h4-size: 16px;\\r\\n --text-h4-line-height: 22px;\\r\\n --text-h4-weight: 700;\\r\\n\\r\\n --text-h5-size: 16px;\\r\\n --text-h5-line-height: 22px;\\r\\n --text-h5-weight: 600;\\r\\n\\r\\n --text-h6-size: 16px;\\r\\n --text-h6-line-height: 22px;\\r\\n --text-h6-weight: 400;\\r\\n\\r\\n --text-p-base-bold-size: 14px;\\r\\n --text-p-base-bold-line-height: 18px;\\r\\n --text-p-base-bold-weight: 700;\\r\\n\\r\\n --text-p-base-medium-size: 14px;\\r\\n --text-p-base-medium-line-height: 18px;\\r\\n --text-p-base-medium-weight: 600;\\r\\n\\r\\n --text-p-base-regular-size: 14px;\\r\\n --text-p-base-regular-line-height: 18px;\\r\\n --text-p-base-regular-weight: 400;\\r\\n\\r\\n --text-p-sm-bold-size: 12px;\\r\\n --text-p-sm-bold-line-height: 16px;\\r\\n --text-p-sm-bold-weight: 700;\\r\\n\\r\\n --text-p-sm-medium-size: 12px;\\r\\n --text-p-sm-medium-line-height: 16px;\\r\\n --text-p-sm-medium-weight: 600;\\r\\n\\r\\n --text-p-sm-regular-size: 12px;\\r\\n --text-p-sm-regular-line-height: 16px;\\r\\n --text-p-sm-regular-weight: 400;\\r\\n\\r\\n --text-p-xs-bold-size: 11px;\\r\\n --text-p-xs-bold-line-height: 14px;\\r\\n --text-p-xs-bold-weight: 700;\\r\\n\\r\\n --text-p-xs-medium-size: 11px;\\r\\n --text-p-xs-medium-line-height: 14px;\\r\\n --text-p-xs-medium-weight: 600;\\r\\n\\r\\n --text-p-xs-regular-size: 11px;\\r\\n --text-p-xs-regular-line-height: 14px;\\r\\n --text-p-xs-regular-weight: 400;\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/theme.scss — primitive color palette. :root rewritten to :host */\\r\\n:host {\\r\\n\\r\\n /* ── Sage ── */\\r\\n --color-sage-50: #f5f8f7;\\r\\n --color-sage-100: #e8f0ee;\\r\\n --color-sage-200: #d1e1dd;\\r\\n --color-sage-300: #a9c1b8;\\r\\n --color-sage-400: #7a9b95;\\r\\n --color-sage-500: #607c7f;\\r\\n --color-sage-600: #5d7374;\\r\\n --color-sage-700: #4f6162;\\r\\n --color-sage-800: #445556;\\r\\n --color-sage-900: #374648;\\r\\n --color-sage-950: #2d393a;\\r\\n --color-sage-975: #222d30;\\r\\n\\r\\n /* ── Almond ── */\\r\\n --color-almond-50: #f1f8f4;\\r\\n --color-almond-100: #dcefe3;\\r\\n --color-almond-200: #bbdfca;\\r\\n --color-almond-300: #8ec7a9;\\r\\n --color-almond-400: #5fa884;\\r\\n --color-almond-500: #3d8c69;\\r\\n --color-almond-600: #2c6f52;\\r\\n --color-almond-700: #235944;\\r\\n --color-almond-800: #1e4737;\\r\\n --color-almond-900: #193b2e;\\r\\n --color-almond-950: #0d211a;\\r\\n\\r\\n /* ── Pink ── */\\r\\n --color-pink-50: #fcf7fd;\\r\\n --color-pink-100: #faecfb;\\r\\n --color-pink-200: #efc9f3;\\r\\n --color-pink-300: #dbbade;\\r\\n --color-pink-400: #c9aacb;\\r\\n --color-pink-500: #b896bb;\\r\\n --color-pink-600: #a582ab;\\r\\n --color-pink-700: #926e9b;\\r\\n --color-pink-800: #7f5a8b;\\r\\n --color-pink-900: #6c467b;\\r\\n --color-pink-950: #4a325b;\\r\\n\\r\\n /* ── Green ── */\\r\\n --color-green-50: #f6faf5;\\r\\n --color-green-100: #e5eee3;\\r\\n --color-green-200: #c4d6c0;\\r\\n --color-green-300: #91b38b;\\r\\n --color-green-400: #709b67;\\r\\n --color-green-500: #4e8344;\\r\\n --color-green-600: #3e6936;\\r\\n --color-green-700: #2f4f29;\\r\\n --color-green-800: #1f341b;\\r\\n --color-green-900: #172714;\\r\\n --color-green-950: #101a0e;\\r\\n\\r\\n /* ── Orange ── */\\r\\n --color-orange-50: #fff6f1;\\r\\n --color-orange-100: #ffeee2;\\r\\n --color-orange-200: #ffddc6;\\r\\n --color-orange-300: #ffcba9;\\r\\n --color-orange-400: #ffba8d;\\r\\n --color-orange-500: #df884f;\\r\\n --color-orange-600: #bd6f3c;\\r\\n --color-orange-700: #98552a;\\r\\n --color-orange-800: #85461e;\\r\\n --color-orange-900: #753a13;\\r\\n --color-orange-950: #592a0b;\\r\\n\\r\\n /* ── Red ── */\\r\\n --color-red-50: #ffefef;\\r\\n --color-red-100: #ffdedf;\\r\\n --color-red-200: #ffbebf;\\r\\n --color-red-300: #ff9d9f;\\r\\n --color-red-400: #ff7d7f;\\r\\n --color-red-500: #d64a4c;\\r\\n --color-red-600: #ad3739;\\r\\n --color-red-700: #852527;\\r\\n --color-red-800: #701c1d;\\r\\n --color-red-900: #5c1214;\\r\\n --color-red-950: #47090a;\\r\\n\\r\\n /* ── Blue ── */\\r\\n --color-blue-50: #f1f6fa;\\r\\n --color-blue-100: #e2edf4;\\r\\n --color-blue-200: #c5dbea;\\r\\n --color-blue-300: #a9cadf;\\r\\n --color-blue-400: #8cb8d5;\\r\\n --color-blue-500: #5a87a4;\\r\\n --color-blue-600: #45677e;\\r\\n --color-blue-700: #2f4859;\\r\\n --color-blue-800: #253846;\\r\\n --color-blue-900: #1a2833;\\r\\n --color-blue-950: #101920;\\r\\n\\r\\n /* ── Gray ── */\\r\\n --color-gray-50: #fdfefe;\\r\\n --color-gray-100: #f9fafb;\\r\\n --color-gray-200: #eff2f6;\\r\\n --color-gray-300: #b9c4d5;\\r\\n --color-gray-400: #97a6be;\\r\\n --color-gray-500: #7685a2;\\r\\n --color-gray-600: #626c84;\\r\\n --color-gray-700: #4d5260;\\r\\n --color-gray-800: #36383e;\\r\\n --color-gray-900: #272b30;\\r\\n --color-gray-950: #171c1f;\\r\\n\\r\\n /* ── Yellow ── */\\r\\n --color-yellow-50: #fef8ed;\\r\\n --color-yellow-100: #FDF2DC;\\r\\n --color-yellow-200: #fbe5b9;\\r\\n --color-yellow-300: #f8d795;\\r\\n --color-yellow-400: #f6ca72;\\r\\n --color-yellow-500: #c89b40;\\r\\n --color-yellow-600: #9d7930;\\r\\n --color-yellow-700: #715621;\\r\\n --color-yellow-800: #5b4519;\\r\\n --color-yellow-900: #463411;\\r\\n --color-yellow-950: #30230a;\\r\\n\\r\\n /* ── Cherry ── */\\r\\n --color-cherry-50: #f8f0f1;\\r\\n --color-cherry-100: #f1e0e4;\\r\\n --color-cherry-200: #e2c1c8;\\r\\n --color-cherry-300: #d4a3ad;\\r\\n --color-cherry-400: #c58491;\\r\\n --color-cherry-500: #bb6779;\\r\\n --color-cherry-600: #6e3d47;\\r\\n --color-cherry-700: #49282f;\\r\\n --color-cherry-800: #371e23;\\r\\n --color-cherry-900: #251418;\\r\\n --color-cherry-950: #120a0c;\\r\\n\\r\\n /* ── Indigo ── */\\r\\n --color-indigo-50: #f2f4fc;\\r\\n --color-indigo-100: #e5e9f9;\\r\\n --color-indigo-200: #cbd4f2;\\r\\n --color-indigo-300: #b2beec;\\r\\n --color-indigo-400: #98a9e5;\\r\\n --color-indigo-500: #6779bb;\\r\\n --color-indigo-600: #505f97;\\r\\n --color-indigo-700: #394673;\\r\\n --color-indigo-800: #2e3961;\\r\\n --color-indigo-900: #222c4f;\\r\\n --color-indigo-950: #171f3d;\\r\\n\\r\\n /* ── Cyan ── */\\r\\n --color-cyan-50: #e6eff0;\\r\\n --color-cyan-100: #d4e3e4;\\r\\n --color-cyan-200: #b1cccd;\\r\\n --color-cyan-300: #8db4b5;\\r\\n --color-cyan-400: #6a9d9e;\\r\\n --color-cyan-500: #468586;\\r\\n --color-cyan-600: #2a5050;\\r\\n --color-cyan-700: #1c3536;\\r\\n --color-cyan-800: #152828;\\r\\n --color-cyan-900: #0e1b1b;\\r\\n --color-cyan-950: #070d0d;\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/bg-colors.scss — :root rewritten to :host */\\r\\n:host {\\r\\n\\r\\n /* ── Primary ── */\\r\\n --bg-primary-base: var(--color-sage-800);\\r\\n --bg-primary-hovered: var(--color-sage-950);\\r\\n --bg-primary-pressed: var(--color-sage-300);\\r\\n --bg-primary-light: var(--color-sage-200);\\r\\n --bg-primary-lighter: var(--color-sage-100);\\r\\n --bg-primary-lightest: var(--color-sage-50);\\r\\n\\r\\n /* ── Secondary ── */\\r\\n --bg-secondary-base: var(--color-almond-500);\\r\\n --bg-secondary-base-alt: var(--color-almond-800);\\r\\n --bg-secondary-active: var(--color-almond-300);\\r\\n --bg-secondary-light: var(--color-almond-200);\\r\\n --bg-secondary-lighter: var(--color-almond-100);\\r\\n --bg-secondary-lightest: var(--color-almond-50);\\r\\n\\r\\n /* ── Accent ── */\\r\\n --bg-accent-base: var(--color-pink-800);\\r\\n --bg-accent-base-alt: var(--color-pink-200);\\r\\n --bg-accent-hover: var(--color-pink-100);\\r\\n --bg-accent-pressed: var(--color-pink-900);\\r\\n\\r\\n /* ── Neutral ── */\\r\\n --bg-neutral-base: #e2e5e9;\\r\\n --bg-neutral-disabled: #bec7cf;\\r\\n --bg-neutral-white: #ffffff;\\r\\n --bg-neutral-base-alt: #343d46;\\r\\n\\r\\n /* ── Warning ── */\\r\\n --bg-warning-base: var(--color-orange-700);\\r\\n --bg-warning-base-alt: var(--color-orange-200);\\r\\n --bg-warning-lightest: var(--color-orange-50);\\r\\n\\r\\n /* ── Success ── */\\r\\n --bg-success-base: var(--color-green-600);\\r\\n --bg-success-base-alt: var(--color-green-200);\\r\\n --bg-success-lightest: var(--color-green-50);\\r\\n\\r\\n /* ── Info ── */\\r\\n --bg-info-base: var(--color-blue-600);\\r\\n --bg-info-base-alt: var(--color-blue-200);\\r\\n --bg-info-lightest: var(--color-blue-50);\\r\\n\\r\\n /* ── Error ── */\\r\\n --bg-error-base: var(--color-red-600);\\r\\n --bg-error-base-alt: var(--color-red-200);\\r\\n --bg-error-lightest: var(--color-red-50);\\r\\n\\r\\n /* ── Cherry ── */\\r\\n --bg-cherry-base: var(--color-cherry-600);\\r\\n --bg-cherry-base-alt: var(--color-cherry-200);\\r\\n\\r\\n /* ── Indigo ── */\\r\\n --bg-indigo-base: var(--color-indigo-600);\\r\\n --bg-indigo-base-alt: var(--color-indigo-200);\\r\\n\\r\\n /* ── Yellow ── */\\r\\n --bg-yellow-base: var(--color-yellow-700);\\r\\n --bg-yellow-base-alt: var(--color-yellow-200);\\r\\n\\r\\n /* ── Cyan ── */\\r\\n --bg-cyan-base: var(--color-cyan-600);\\r\\n --bg-cyan-base-alt: var(--color-cyan-200);\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/font-colors.scss — :root rewritten to :host */\\r\\n:host {\\r\\n\\r\\n /* ── Primary ── */\\r\\n --font-primary-dark: var(--color-sage-950);\\r\\n --font-primary-base: var(--color-sage-800);\\r\\n --font-primary-muted: var(--color-sage-600);\\r\\n --font-primary-hovered: var(--color-sage-900);\\r\\n --font-primary-pressed: var(--color-sage-950);\\r\\n --font-primary-light: var(--color-sage-200);\\r\\n\\r\\n /* ── Secondary ── */\\r\\n --font-secondary-base: var(--color-almond-800);\\r\\n --font-secondary-hovered: var(--color-almond-900);\\r\\n --font-secondary-pressed: var(--color-almond-950);\\r\\n --font-secondary-base-alt: var(--color-almond-600);\\r\\n\\r\\n /* ── Accent ── */\\r\\n --font-accent-base: var(--color-pink-950);\\r\\n --font-accent-pressed: var(--color-pink-50);\\r\\n --font-accent-light: var(--color-pink-200);\\r\\n --font-accent-muted: var(--color-pink-800);\\r\\n\\r\\n /* ── Neutral ── */\\r\\n --font-neutral-black: #182021;\\r\\n --font-neutral-white: #ffffff;\\r\\n --font-neutral-base: #343d46;\\r\\n --font-neutral-muted: #596978;\\r\\n --font-neutral-light: #bec7cf;\\r\\n\\r\\n /* ── Warning ── */\\r\\n --font-warning-base: var(--color-orange-800);\\r\\n --font-warning-light: var(--color-orange-200);\\r\\n --font-warning-muted: var(--color-orange-600);\\r\\n\\r\\n /* ── Info ── */\\r\\n --font-info-base: var(--color-blue-800);\\r\\n --font-info-light: var(--color-blue-200);\\r\\n --font-info-muted: var(--color-blue-600);\\r\\n\\r\\n /* ── Error ── */\\r\\n --font-error-base: var(--color-red-800);\\r\\n --font-error-light: var(--color-red-200);\\r\\n --font-error-muted: var(--color-red-600);\\r\\n\\r\\n /* ── Success ── */\\r\\n --font-success-base: var(--color-green-800);\\r\\n --font-success-light: var(--color-green-200);\\r\\n --font-success-muted: var(--color-green-600);\\r\\n\\r\\n /* ── Cherry ── */\\r\\n --font-cherry-base: var(--color-cherry-800);\\r\\n --font-cherry-muted: var(--color-cherry-600);\\r\\n\\r\\n /* ── Indigo ── */\\r\\n --font-indigo-base: var(--color-indigo-800);\\r\\n --font-indigo-muted: var(--color-indigo-600);\\r\\n\\r\\n /* ── Yellow ── */\\r\\n --font-yellow-base: var(--color-yellow-800);\\r\\n --font-yellow-muted: var(--color-yellow-700);\\r\\n\\r\\n /* ── Cyan ── */\\r\\n --font-cyan-base: var(--color-cyan-800);\\r\\n --font-cyan-muted: var(--color-cyan-600);\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/stroke-colors.scss — :root rewritten to :host */\\r\\n:host {\\r\\n\\r\\n /* ── Primary ── */\\r\\n --stroke-primary-base: var(--color-sage-800);\\r\\n --stroke-primary-hovered: var(--color-sage-900);\\r\\n --stroke-primary-pressed: var(--color-sage-950);\\r\\n --stroke-primary-light: var(--color-sage-300);\\r\\n --stroke-primary-lighter: var(--color-sage-200);\\r\\n --stroke-primary-lightest: var(--color-sage-700);\\r\\n\\r\\n /* ── Secondary ── */\\r\\n --stroke-secondary-base: var(--color-almond-700);\\r\\n --stroke-secondary-muted: var(--color-almond-600);\\r\\n --stroke-secondary-dark: var(--color-almond-800);\\r\\n\\r\\n /* ── Accent ── */\\r\\n --stroke-accent-base: var(--color-pink-900);\\r\\n --stroke-accent-muted: var(--color-pink-800);\\r\\n\\r\\n /* ── Focus ── */\\r\\n --stroke-focus: var(--color-pink-700);\\r\\n\\r\\n /* ── Warning ── */\\r\\n --stroke-warning-base: var(--color-orange-700);\\r\\n --stroke-warning-muted: var(--color-orange-600);\\r\\n\\r\\n /* ── Info ── */\\r\\n --stroke-info-base: var(--color-blue-700);\\r\\n --stroke-info-muted: var(--color-blue-600);\\r\\n\\r\\n /* ── Success ── */\\r\\n --stroke-success-base: var(--color-green-700);\\r\\n --stroke-success-muted: var(--color-green-600);\\r\\n\\r\\n /* ── Error ── */\\r\\n --stroke-error-base: var(--color-red-700);\\r\\n --stroke-error-muted: var(--color-red-600);\\r\\n\\r\\n /* ── Cherry ── */\\r\\n --stroke-cherry-base: var(--color-cherry-700);\\r\\n --stroke-cherry-muted: var(--color-cherry-600);\\r\\n\\r\\n /* ── Indigo ── */\\r\\n --stroke-indigo-base: var(--color-indigo-700);\\r\\n --stroke-indigo-muted: var(--color-indigo-600);\\r\\n\\r\\n /* ── Yellow ── */\\r\\n --stroke-yellow-base: var(--color-yellow-800);\\r\\n --stroke-yellow-muted: var(--color-yellow-700);\\r\\n\\r\\n /* ── Cyan ── */\\r\\n --stroke-cyan-base: var(--color-cyan-700);\\r\\n --stroke-cyan-muted: var(--color-cyan-600);\\r\\n\\r\\n /* ── Neutral ── */\\r\\n --stroke-neutral-light: #E5E6E8;\\r\\n --stroke-neutral-base: #D9E2E3;\\r\\n --stroke-neutral-disabled: #a4b0bc;\\r\\n --stroke-neutral-white: #f2f2f3;\\r\\n --stroke-neutral-dark: #343d46;\\r\\n --stroke-neutral-black: #182021;\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/variables.scss — :root rewritten to :host. */\\r\\n:host {\\r\\n /* ── App shell ── */\\r\\n --color-bg-app: var(--color-sage-950);\\r\\n --color-bg-main: var(--color-gray-50);\\r\\n --color-bg-sidebar: var(--color-sage-950);\\r\\n\\r\\n /* ── Text ── */\\r\\n --color-text-primary: var(--font-neutral-black);\\r\\n --color-text-body: var(--font-primary-hovered);\\r\\n --color-text-muted: var(--color-sage-500);\\r\\n --color-text-subtle: var(--font-primary-base);\\r\\n --color-text-placeholder: var(--font-primary-muted);\\r\\n\\r\\n /* ── Borders & surfaces ── */\\r\\n --color-border-light: var(--stroke-primary-lighter);\\r\\n --color-border-chip: var(--stroke-primary-light);\\r\\n --color-surface-hover: var(--color-gray-200);\\r\\n --color-surface-light: var(--bg-primary-lightest);\\r\\n\\r\\n /* ── Accent (send button) ── */\\r\\n --color-accent-send: var(--bg-accent-base-alt);\\r\\n --color-accent-send-hover: var(--color-pink-300);\\r\\n --color-accent-send-icon: var(--font-accent-base);\\r\\n\\r\\n /* ── Avatar ── */\\r\\n --color-avatar-bg: var(--color-sage-800);\\r\\n --color-avatar-text: var(--color-sage-200);\\r\\n\\r\\n /* ── Sidebar nav ── */\\r\\n --color-nav-hover: var(--color-sage-900);\\r\\n --color-nav-active: var(--color-sage-800);\\r\\n\\r\\n /* ── Gradient ── */\\r\\n --gradient-name: linear-gradient(93deg, #1B97BF 0%, #8A3BFF 100%);\\r\\n\\r\\n /* ── Robot illustration colors ── */\\r\\n --rc-1: #bad3ca;\\r\\n --rc-2: var(--color-cyan-800);\\r\\n --rc-3: var(--color-cyan-600);\\r\\n --rc-4: var(--color-cyan-500);\\r\\n --rc-5: #d2e3dd;\\r\\n --rc-6: #aecac0;\\r\\n --rc-7: #cee6dd;\\r\\n --rc-8: #92b8aa;\\r\\n --rc-9: #effbf7;\\r\\n --rs: var(--color-sage-500);\\r\\n}\\r\\n\\n/* Vendored from lexiq-prototype scss/dark-mode.scss.\\r\\n Activation changed from `body.lq-dark` (global class on the host page) to\\r\\n `:host([theme=\"dark\"])` (an attribute on the custom element itself), since a\\r\\n generic component cannot depend on a class toggled on the host\\'s <body>. */\\r\\n\\r\\n:host([theme=\"dark\"]) {\\r\\n\\r\\n /* ── App shell ── */\\r\\n --color-bg-app: var(--color-sage-975);\\r\\n --color-bg-main: var(--color-gray-950);\\r\\n --color-bg-sidebar: var(--color-sage-975);\\r\\n\\r\\n /* ── App-level semantic aliases ── */\\r\\n --color-text-primary: var(--color-gray-200);\\r\\n --color-text-body: #E2E5E9;\\r\\n --color-text-muted: var(--color-sage-300);\\r\\n --color-text-subtle: var(--color-sage-200);\\r\\n --color-text-placeholder: var(--color-sage-500);\\r\\n --color-border-light: var(--color-sage-900);\\r\\n --color-border-chip: var(--color-sage-700);\\r\\n --color-surface-hover: var(--color-sage-950);\\r\\n --color-surface-light: var(--color-sage-975);\\r\\n --color-nav-hover: var(--color-sage-950);\\r\\n --color-nav-active: var(--color-sage-900);\\r\\n\\r\\n /* ── Font tokens ── */\\r\\n --font-primary-dark: var(--color-gray-200);\\r\\n --font-primary-base: #E2E5E9;\\r\\n --font-primary-muted: var(--color-sage-300);\\r\\n --font-primary-hovered: var(--color-sage-50);\\r\\n --font-primary-pressed: #FFFFFF;\\r\\n --font-primary-light: var(--color-sage-700);\\r\\n --font-secondary-base: var(--color-sage-200);\\r\\n --font-secondary-hovered: var(--color-almond-400);\\r\\n --font-secondary-pressed: var(--color-almond-300);\\r\\n --font-secondary-base-alt: var(--color-almond-200);\\r\\n --font-accent-base: var(--color-pink-100);\\r\\n --font-accent-pressed: #FFFFFF;\\r\\n --font-accent-light: var(--color-pink-700);\\r\\n --font-accent-muted: var(--color-pink-200);\\r\\n --font-neutral-base: #E2E5E9;\\r\\n --font-neutral-muted: var(--color-sage-300);\\r\\n --font-neutral-light: var(--color-sage-800);\\r\\n --font-neutral-white: var(--color-gray-100);\\r\\n --font-neutral-black: var(--color-gray-200);\\r\\n\\r\\n /* ── Background tokens ── */\\r\\n --bg-primary-base: var(--color-sage-700);\\r\\n --bg-primary-hovered: var(--color-sage-600);\\r\\n --bg-primary-pressed: var(--color-sage-800);\\r\\n --bg-primary-active: var(--color-sage-600);\\r\\n --bg-primary-light: var(--color-sage-900);\\r\\n --bg-primary-lighter: var(--color-sage-950);\\r\\n --bg-primary-lightest: var(--color-sage-975);\\r\\n --bg-secondary-base: var(--color-almond-600);\\r\\n --bg-secondary-base-alt: var(--color-almond-700);\\r\\n --bg-secondary-active: var(--color-almond-800);\\r\\n --bg-secondary-light: var(--color-almond-800);\\r\\n --bg-secondary-lighter: var(--color-almond-900);\\r\\n --bg-secondary-lightest: var(--color-almond-950);\\r\\n --bg-accent-base: var(--color-pink-950);\\r\\n --bg-accent-base-alt: var(--color-pink-900);\\r\\n --bg-accent-hover: var(--color-pink-900);\\r\\n --bg-accent-pressed: var(--color-pink-950);\\r\\n --bg-neutral-base: var(--color-sage-900);\\r\\n --bg-neutral-disabled: var(--color-sage-950);\\r\\n --bg-neutral-white: var(--color-gray-950);\\r\\n\\r\\n /* ── Stroke tokens ── */\\r\\n --stroke-focus: var(--color-pink-300);\\r\\n --stroke-primary-base: var(--color-cyan-400);\\r\\n --stroke-primary-hovered: var(--color-sage-300);\\r\\n --stroke-primary-pressed: var(--color-almond-200);\\r\\n --stroke-primary-light: var(--color-sage-700);\\r\\n --stroke-primary-lighter: var(--color-sage-900);\\r\\n --stroke-primary-muted: var(--color-sage-500);\\r\\n --stroke-secondary-base: var(--color-almond-400);\\r\\n --stroke-secondary-muted: var(--color-almond-500);\\r\\n --stroke-secondary-dark: var(--color-almond-600);\\r\\n --stroke-accent-base: var(--color-pink-300);\\r\\n --stroke-accent-muted: var(--color-pink-500);\\r\\n --stroke-neutral-light: var(--color-sage-900);\\r\\n --stroke-neutral-base: var(--color-sage-800);\\r\\n --stroke-neutral-dark: var(--color-gray-300);\\r\\n --stroke-neutral-disabled: var(--color-gray-700);\\r\\n --stroke-neutral-white: var(--color-sage-900);\\r\\n\\r\\n /* ── Shadows ── */\\r\\n --shadow-1: 0px 4px 6px rgba(0, 0, 0, 0.35), 0px 2px 4px rgba(0, 0, 0, 0.25);\\r\\n --shadow-2: 0px 10px 15px rgba(0, 0, 0, 0.4), 0px 4px 6px rgba(0, 0, 0, 0.3);\\r\\n --shadow-3: 0px 20px 25px rgba(0, 0, 0, 0.45), 0px 10px 10px rgba(0, 0, 0, 0.35);\\r\\n --shadow-4: 0px 25px 50px rgba(0, 0, 0, 0.55);\\r\\n --shadow-inner: inset -1px -1px 6px rgba(0, 0, 0, 0.4), inset 1px 1px 6px rgba(255, 255, 255, 0.08);\\r\\n\\r\\n /* ── Effects ── */\\r\\n --effect-frosted-cloud-bg: rgba(244, 249, 249, 0.08);\\r\\n --effect-frosted-cloud-stroke: rgba(244, 249, 249, 0.18);\\r\\n --effect-frosted-glass-bg: rgba(244, 249, 249, 0.06);\\r\\n --effect-frosted-glass-stroke: rgba(244, 249, 249, 0.12);\\r\\n --effect-midnight-glass-bg: rgba(34, 45, 48, 0.52);\\r\\n --effect-midnight-glass-stroke:rgba(168, 190, 194, 0.18);\\r\\n --effect-default-blur-bg: rgba(20, 31, 35, 0.3);\\r\\n --effect-default-blur-stroke: rgba(244, 249, 249, 0.16);\\r\\n\\r\\n /* ── Scrims ── */\\r\\n --scrim-base: rgba(0, 0, 0, 0.62);\\r\\n --scrim-strong: rgba(0, 0, 0, 0.72);\\r\\n --scrim-stronger: rgba(0, 0, 0, 0.82);\\r\\n\\r\\n /* ── Robot illustration colors ── */\\r\\n --rc-1: #819d92;\\r\\n --rc-2: var(--color-cyan-950);\\r\\n --rc-3: var(--color-cyan-800);\\r\\n --rc-4: var(--color-cyan-600);\\r\\n --rc-5: var(--color-sage-300);\\r\\n --rc-6: #8eada1;\\r\\n --rc-7: #92ada3;\\r\\n --rc-8: #6d8d81;\\r\\n --rc-9: var(--color-sage-300);\\r\\n --rs: var(--color-sage-800);\\r\\n}\\r\\n\\r\\n/* Note: the original also had a `body.lq-dark .lq-sidebar { ... }` override —\\r\\n dropped, Collections has no sidebar of its own. */\\r\\n\\n/* ══════════════════════════════════════════════════════\\r\\n LexiQ Link Component\\r\\n Ported from galactik-design-react Link\\r\\n══════════════════════════════════════════════════════ */\\r\\n\\r\\n.oc-link {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n padding: 0 var(--space-3xs);\\r\\n border: none;\\r\\n border-radius: var(--radius-xs);\\r\\n background: transparent;\\r\\n color: var(--font-secondary-base-alt);\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n font-weight: 400;\\r\\n text-decoration: none;\\r\\n cursor: pointer;\\r\\n user-select: none;\\r\\n transition: background 100ms ease, color 100ms ease, font-weight 100ms ease;\\r\\n border-bottom: 2px solid transparent;\\r\\n\\r\\n &:hover:not(.oc-link-disabled) {\\r\\n background: var(--bg-secondary-lighter);\\r\\n color: var(--font-secondary-hovered);\\r\\n font-weight: 600;\\r\\n }\\r\\n\\r\\n &:active:not(.oc-link-disabled) {\\r\\n background: var(--bg-secondary-light);\\r\\n color: var(--font-secondary-pressed);\\r\\n font-weight: 600;\\r\\n }\\r\\n\\r\\n &:focus-visible {\\r\\n outline: 2px solid var(--stroke-focus);\\r\\n outline-offset: 1px;\\r\\n }\\r\\n}\\r\\n\\r\\n.oc-link-size-medium {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: 20px;\\r\\n}\\r\\n\\r\\n.oc-link-size-small {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: 16px;\\r\\n}\\r\\n\\r\\n.oc-link-icon-left,\\r\\n.oc-link-icon-right {\\r\\n flex-shrink: 0;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n\\r\\n svg { width: 1em; height: 1em; }\\r\\n}\\r\\n\\r\\n.oc-link-size-medium .oc-link-icon-left,\\r\\n.oc-link-size-medium .oc-link-icon-right { font-size: 14px; }\\r\\n\\r\\n.oc-link-size-small .oc-link-icon-left,\\r\\n.oc-link-size-small .oc-link-icon-right { font-size: 12px; }\\r\\n\\r\\n.oc-link-label { line-height: inherit; }\\r\\n\\r\\n/* ── Visited ── */\\r\\n.oc-link-visited {\\r\\n border-bottom-color: var(--stroke-secondary-base);\\r\\n\\r\\n &:hover:not(.oc-link-disabled) { border-bottom-color: var(--font-secondary-hovered); }\\r\\n &:active:not(.oc-link-disabled) { border-bottom-color: var(--font-secondary-pressed); }\\r\\n}\\r\\n\\r\\n/* ── Disabled ── */\\r\\n.oc-link-disabled {\\r\\n background: var(--bg-neutral-disabled);\\r\\n color: var(--font-neutral-muted);\\r\\n cursor: not-allowed;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\n/* ══════════════════════════════════════════════════════\\r\\n LexiQ List Component\\r\\n Ported from galactik-design-react List\\r\\n══════════════════════════════════════════════════════ */\\r\\n\\r\\n/* ── Base item ── */\\r\\n.oc-list-item {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n padding: var(--space-3xs) var(--space-2xs);\\r\\n border-radius: var(--radius-sm);\\r\\n transition: background-color 0.1s ease;\\r\\n width: 100%;\\r\\n box-sizing: border-box;\\r\\n\\r\\n &[hidden] { display: none !important; }\\r\\n}\\r\\n\\r\\n/* ── Sizes ── */\\r\\n.oc-list-item-sm { height: var(--row-height-sm); }\\r\\n.oc-list-item-md { height: var(--row-height-md); }\\r\\n.oc-list-item-l { height: var(--row-height-l); }\\r\\n.oc-list-item-content { min-height: 28px; }\\r\\n\\r\\n/* ── Interactive items ── */\\r\\n.oc-list-item-nav,\\r\\n.oc-list-item-menu {\\r\\n appearance: none;\\r\\n background: none;\\r\\n border: none;\\r\\n margin: 0;\\r\\n text-align: left;\\r\\n cursor: pointer;\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n}\\r\\n\\r\\n/* ── States ── */\\r\\n.oc-list-item:not(.oc-list-item-disabled):hover { background-color: var(--bg-primary-lighter); }\\r\\n.oc-list-item:not(.oc-list-item-disabled):active { background-color: var(--bg-primary-light); }\\r\\n.oc-list-item:focus-visible { outline: 2px solid var(--stroke-focus); outline-offset: 0; }\\r\\n\\r\\n.oc-list-item-selected,\\r\\n.oc-list-item-hovered { background-color: var(--bg-primary-lighter); }\\r\\n.oc-list-item-pressed { background-color: var(--bg-primary-light); }\\r\\n.oc-list-item-disabled { background-color: var(--bg-neutral-disabled); pointer-events: none; cursor: default; }\\r\\n\\r\\n/* ── Left wrapper ── */\\r\\n.oc-list-item-left {\\r\\n display: flex;\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n gap: var(--space-2xs);\\r\\n align-items: center;\\r\\n}\\r\\n\\r\\n/* ── Text block ── */\\r\\n.oc-list-item-text-block {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n align-items: flex-start;\\r\\n}\\r\\n\\r\\n.oc-list-item-text {\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: 400;\\r\\n color: var(--font-neutral-black);\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n white-space: nowrap;\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n.oc-list-item-subtext {\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n color: var(--font-primary-base);\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n white-space: nowrap;\\r\\n width: 100%;\\r\\n}\\r\\n\\r\\n.oc-list-item-disabled .oc-list-item-text,\\r\\n.oc-list-item-disabled .oc-list-item-subtext { color: var(--font-neutral-muted); }\\r\\n\\r\\n/* ── Left icon ── */\\r\\n.oc-list-item-icon {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n width: var(--icon-xs);\\r\\n height: var(--icon-xs);\\r\\n font-size: var(--icon-xs);\\r\\n flex-shrink: 0;\\r\\n color: var(--font-secondary-base-alt);\\r\\n\\r\\n svg { width: 1em; height: 1em; }\\r\\n}\\r\\n\\r\\n.oc-list-item-disabled .oc-list-item-icon { color: var(--font-neutral-muted); }\\r\\n\\r\\n/* ── Expander (navigation) ── */\\r\\n.oc-list-item-expander {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n width: var(--icon-xs);\\r\\n height: var(--icon-xs);\\r\\n font-size: var(--icon-2xs);\\r\\n flex-shrink: 0;\\r\\n color: var(--font-secondary-base-alt);\\r\\n\\r\\n svg { width: 1em; height: 1em; }\\r\\n}\\r\\n\\r\\n.oc-list-item-expander-btn {\\r\\n background: transparent;\\r\\n border: none;\\r\\n padding: 0;\\r\\n margin: 0;\\r\\n cursor: pointer;\\r\\n border-radius: var(--radius-xs);\\r\\n transition: color 0.1s ease, background-color 0.1s ease;\\r\\n\\r\\n &:hover:not(:disabled) { color: var(--font-neutral-black); background-color: var(--bg-primary-light); }\\r\\n &:disabled { cursor: default; }\\r\\n}\\r\\n\\r\\n.oc-list-item-disabled .oc-list-item-expander { color: var(--font-neutral-muted); }\\r\\n\\r\\n/* ── Avatar ── */\\r\\n.oc-list-item-avatar {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n width: var(--row-height-sm);\\r\\n height: var(--row-height-sm);\\r\\n border-radius: var(--radius-rounded);\\r\\n background-color: var(--bg-primary-lightest);\\r\\n flex-shrink: 0;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n/* ── Right remove icon ── */\\r\\n.oc-list-item-icon-right {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n font-size: var(--icon-2xs);\\r\\n flex-shrink: 0;\\r\\n color: var(--font-primary-muted);\\r\\n background: transparent;\\r\\n border: none;\\r\\n padding: 2px;\\r\\n cursor: pointer;\\r\\n line-height: 1;\\r\\n border-radius: var(--radius-xs);\\r\\n transition: color 0.1s ease, background-color 0.1s ease;\\r\\n opacity: 0;\\r\\n\\r\\n svg { width: 1em; height: 1em; }\\r\\n}\\r\\n\\r\\n.oc-list-item:hover .oc-list-item-icon-right,\\r\\n.oc-list-item-hovered .oc-list-item-icon-right,\\r\\n.oc-list-item-selected .oc-list-item-icon-right { opacity: 1; }\\r\\n\\r\\n.oc-list-item-icon-right:hover {\\r\\n color: var(--font-error-base);\\r\\n background-color: var(--bg-error-lightest);\\r\\n}\\r\\n\\r\\n/* ── Right chevron (list-menu) ── */\\r\\n.oc-list-item-chevron-right {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n font-size: var(--icon-xs);\\r\\n flex-shrink: 0;\\r\\n color: var(--font-secondary-base-alt);\\r\\n transition: transform 0.15s ease;\\r\\n\\r\\n svg { width: 1em; height: 1em; }\\r\\n}\\r\\n\\r\\n.oc-list-item:hover .oc-list-item-chevron-right { transform: translateX(2px); }\\r\\n\\r\\n/* ── Reduced motion ── */\\r\\n@media (prefers-reduced-motion: reduce) {\\r\\n .oc-list-item,\\r\\n .oc-list-item-expander-btn,\\r\\n .oc-list-item-icon-right,\\r\\n .oc-list-item-chevron-right { transition: none; }\\r\\n}\\r\\n\\n/* ── SearchBar — ported from galactik-design-react SearchBar.css ────────── */\\r\\n/* ── Variable aliases: bridge Galactik token names → LexiQ spacing/type ── */\\r\\n/* :root rewritten to :host (Shadow DOM has no implicit access to :root vars) */\\r\\n:host {\\r\\n --spacing-3xs: var(--space-3xs); /* 4px */\\r\\n --spacing-2xs: var(--space-3xs); /* 4px */\\r\\n --spacing-xs: var(--space-2xs); /* 8px */\\r\\n --spacing-sm: var(--space-xs); /* 12px */\\r\\n --spacing-md: var(--space-md); /* 16px */\\r\\n --icon-xs: 14px;\\r\\n --size-base: var(--text-p-base-regular-size);\\r\\n --size-sm: var(--text-p-sm-regular-size);\\r\\n --size-xs: var(--text-p-xs-regular-size);\\r\\n --family-base: \\'Hanken Grotesk\\', sans-serif;\\r\\n --spacing-lg: var(--space-lg); /* 20px */\\r\\n --spacing-xl: var(--space-xl); /* 24px */\\r\\n --shadow-1: 0 1px 3px rgba(45, 57, 58, 0.10);\\r\\n --shadow-2: 0px 10px 15px rgba(45, 57, 58, 0.10), 0px 4px 6px rgba(45, 57, 58, 0.05);\\r\\n --shadow-4: 0 4px 6px -2px rgba(45, 57, 58, 0.05), 0 10px 15px -3px rgba(45, 57, 58, 0.10);\\r\\n}\\r\\n\\r\\n/* ── SearchBar / galactik-json search-bar.cva.ts ─────────────────────────── */\\r\\n\\r\\n.oc-sb {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n box-sizing: border-box;\\r\\n width: 100%;\\r\\n border: 1px solid var(--stroke-primary-light);\\r\\n border-radius: var(--radius-rounded);\\r\\n background: var(--bg-neutral-white);\\r\\n cursor: text;\\r\\n transition: border-color 0.12s ease, background 0.12s ease;\\r\\n}\\r\\n\\r\\n.oc-sb-size-lg,\\r\\n.oc-sb--large {\\r\\n height: 44px;\\r\\n gap: var(--spacing-xs);\\r\\n padding: 0 var(--spacing-md);\\r\\n}\\r\\n\\r\\n.oc-sb-size-md,\\r\\n.oc-sb--medium {\\r\\n height: 36px;\\r\\n gap: var(--spacing-xs);\\r\\n padding: 0 var(--spacing-sm);\\r\\n}\\r\\n\\r\\n.oc-sb-size-sm,\\r\\n.oc-sb--small {\\r\\n height: 24px;\\r\\n gap: var(--spacing-3xs);\\r\\n padding: 0 var(--spacing-xs);\\r\\n}\\r\\n\\r\\n.oc-sb--chips {\\r\\n height: auto;\\r\\n min-height: 44px;\\r\\n flex-wrap: nowrap;\\r\\n}\\r\\n\\r\\n.oc-sb--chips.oc-sb-size-md,\\r\\n.oc-sb--chips.oc-sb--medium {\\r\\n min-height: 36px;\\r\\n}\\r\\n\\r\\n.oc-sb--chips.oc-sb-size-sm,\\r\\n.oc-sb--chips.oc-sb--small {\\r\\n min-height: 24px;\\r\\n}\\r\\n\\r\\n/* ── States ──────────────────────────────────────────────────────────────── */\\r\\n\\r\\n.oc-sb--default {\\r\\n background: var(--bg-neutral-white);\\r\\n}\\r\\n\\r\\n.oc-sb--active {\\r\\n border: 2px solid var(--stroke-primary-pressed);\\r\\n}\\r\\n\\r\\n.oc-sb--hovered,\\r\\n.oc-sb:hover:not(.oc-sb--active):not(.oc-sb--disabled) {\\r\\n background: var(--bg-primary-lighter);\\r\\n border-color: var(--stroke-primary-hovered);\\r\\n}\\r\\n\\r\\n.oc-sb--focus {\\r\\n outline: 2px solid var(--stroke-focus);\\r\\n outline-offset: 2px;\\r\\n}\\r\\n\\r\\n.oc-sb--disabled {\\r\\n border-color: var(--stroke-neutral-disabled);\\r\\n background: var(--bg-neutral-disabled);\\r\\n cursor: not-allowed;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n.oc-sb--disabled .oc-sb-input,\\r\\n.oc-sb--disabled .oc-sb-icon { color: var(--font-neutral-muted); }\\r\\n\\r\\n.oc-sb--filled {\\r\\n color: var(--font-primary-base);\\r\\n}\\r\\n\\r\\n/* ── CVA sub-elements ────────────────────────────────────────────────────── */\\r\\n\\r\\n.oc-sb-icon {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n flex-shrink: 0;\\r\\n color: var(--font-primary-muted);\\r\\n line-height: 1;\\r\\n}\\r\\n\\r\\n.oc-sb-size-lg .oc-sb-icon,\\r\\n.oc-sb-size-md .oc-sb-icon,\\r\\n.oc-sb--large .oc-sb-icon,\\r\\n.oc-sb--medium .oc-sb-icon {\\r\\n font-size: var(--icon-xs);\\r\\n}\\r\\n\\r\\n.oc-sb-size-sm .oc-sb-icon,\\r\\n.oc-sb--small .oc-sb-icon {\\r\\n font-size: 11px;\\r\\n}\\r\\n\\r\\n.oc-sb-input {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n padding: 0;\\r\\n border: none !important;\\r\\n outline: none;\\r\\n background: transparent !important;\\r\\n color: var(--font-neutral-black);\\r\\n font-family: var(--family-base), \\'Hanken Grotesk\\', sans-serif;\\r\\n font-weight: 400;\\r\\n line-height: 1.4;\\r\\n}\\r\\n\\r\\n.oc-sb-size-lg .oc-sb-input,\\r\\n.oc-sb--large .oc-sb-input {\\r\\n font-size: var(--size-base);\\r\\n}\\r\\n\\r\\n.oc-sb-size-md .oc-sb-input,\\r\\n.oc-sb--medium .oc-sb-input {\\r\\n font-size: var(--size-sm);\\r\\n}\\r\\n\\r\\n.oc-sb-size-sm .oc-sb-input,\\r\\n.oc-sb--small .oc-sb-input {\\r\\n font-size: var(--size-xs);\\r\\n}\\r\\n\\r\\n.oc-sb-input::placeholder {\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n.oc-sb-input:disabled {\\r\\n cursor: not-allowed;\\r\\n}\\r\\n\\r\\n/* ── Focus state via focus-within ──────────────────────────────────────── */\\r\\n\\r\\n.oc-sb:focus-within:not(.oc-sb--disabled) {\\r\\n border-color: var(--stroke-primary-base);\\r\\n}\\r\\n\\r\\n/* ── Existing React slots kept compatible ───────────────────────────────── */\\r\\n\\r\\n.oc-sb__chips {\\r\\n display: flex;\\r\\n flex: 1 1 0;\\r\\n align-items: center;\\r\\n gap: 4px;\\r\\n min-width: 0;\\r\\n overflow-x: auto;\\r\\n scrollbar-width: none;\\r\\n}\\r\\n\\r\\n.oc-sb-size-sm .oc-sb__chips,\\r\\n.oc-sb--small .oc-sb__chips {\\r\\n gap: 2px;\\r\\n}\\r\\n\\r\\n.oc-sb__chips::-webkit-scrollbar {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n.oc-sb__chip {\\r\\n flex: 0 0 auto;\\r\\n}\\r\\n\\r\\n.oc-sb__actions {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n flex-shrink: 0;\\r\\n min-width: 16px;\\r\\n margin-left: auto;\\r\\n}\\r\\n\\r\\n.oc-sb-clear {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n width: 24px;\\r\\n height: 24px;\\r\\n margin: 0;\\r\\n padding: 0;\\r\\n border: 0;\\r\\n border-radius: var(--radius-rounded);\\r\\n background: transparent;\\r\\n color: var(--font-primary-muted);\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.oc-sb-size-sm .oc-sb-clear,\\r\\n.oc-sb--small .oc-sb-clear {\\r\\n width: 18px;\\r\\n height: 18px;\\r\\n font-size: 11px;\\r\\n}\\r\\n\\r\\n.oc-sb-clear:hover {\\r\\n background: var(--bg-secondary-lighter);\\r\\n color: var(--font-primary-hovered);\\r\\n}\\r\\n\\r\\n.oc-sb-clear:focus-visible {\\r\\n outline: 2px solid var(--stroke-focus);\\r\\n outline-offset: 2px;\\r\\n}\\r\\n\\r\\n.oc-sb__filter-btn {\\r\\n color: var(--stroke-primary-base);\\r\\n}\\r\\n\\r\\n/* ── Base UI Autocomplete popup ──────────────────────────────────────────── */\\r\\n\\r\\n.oc-sb-positioner {\\r\\n z-index: 1000;\\r\\n min-width: var(--anchor-width);\\r\\n}\\r\\n\\r\\n.oc-sb-popup {\\r\\n box-sizing: border-box;\\r\\n min-width: var(--anchor-width);\\r\\n max-height: 280px;\\r\\n padding: var(--spacing-2xs);\\r\\n overflow: auto;\\r\\n border: 1px solid var(--stroke-primary-light);\\r\\n border-radius: var(--radius-sm);\\r\\n background: var(--bg-neutral-white);\\r\\n box-shadow: var(--shadow-4);\\r\\n}\\r\\n\\r\\n.oc-sb-status,\\r\\n.oc-sb-empty,\\r\\n.oc-sb-item {\\r\\n font-family: var(--family-base), \\'Hanken Grotesk\\', sans-serif;\\r\\n font-size: var(--size-sm);\\r\\n line-height: 1.4;\\r\\n}\\r\\n\\r\\n.oc-sb-status,\\r\\n.oc-sb-empty {\\r\\n padding: var(--spacing-xs) var(--spacing-sm);\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n.oc-sb-list {\\r\\n display: grid;\\r\\n gap: 2px;\\r\\n}\\r\\n\\r\\n.oc-sb-item {\\r\\n padding: var(--spacing-xs) var(--spacing-sm);\\r\\n border-radius: var(--radius-xs);\\r\\n color: var(--font-primary-base);\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.oc-sb-item[data-highlighted],\\r\\n.oc-sb-item:hover {\\r\\n background: var(--bg-secondary-lighter);\\r\\n}\\r\\n\\r\\n.oc-sb-item[data-disabled] {\\r\\n color: var(--font-neutral-muted);\\r\\n cursor: not-allowed;\\r\\n}\\r\\n\\r\\n@media (prefers-reduced-motion: reduce) {\\r\\n .oc-sb {\\r\\n transition: none;\\r\\n }\\r\\n}\\r\\n\\n/* ── Scrollbar component — matches galactik-design Scrollbar electron ── */\\r\\n\\r\\n/* All scrollable surfaces in the prototype */\\r\\n.lq-scroll-area,\\r\\n.lq-chat-history,\\r\\n.lq-dp-content,\\r\\n.lq-dp-email-body-wrap,\\r\\n.lq-dp-fp__list,\\r\\n.lq-dp-fp__opts-list,\\r\\n.lq-dp-search-card__results,\\r\\n.lq-search-overlay__list,\\r\\n.lq-ext-email-list,\\r\\n.lq-ext-cal-list,\\r\\n.lq-ext-widget--calendar,\\r\\n.lq-pmenu-left,\\r\\n.lq-textarea,\\r\\n.lq-ref-card-content,\\r\\n.lq-report-body,\\r\\n.lq-suggestions,\\r\\n.lq-agents-list,\\r\\n.lq-ad-body,\\r\\n.oc-scrollable {\\r\\n /* ── Firefox ── */\\r\\n scrollbar-width: thin;\\r\\n scrollbar-color: var(--bg-primary-base) transparent;\\r\\n\\r\\n /* ── WebKit / Blink — 22 px total width, matches design-system track width ── */\\r\\n &::-webkit-scrollbar { width: 22px; height: 22px; }\\r\\n &::-webkit-scrollbar-corner { background: transparent; }\\r\\n &::-webkit-scrollbar-track { background: transparent; }\\r\\n\\r\\n /* Thumb: 4 px visual via border trick */\\r\\n &::-webkit-scrollbar-thumb {\\r\\n background-color: var(--bg-primary-base);\\r\\n border-radius: var(--radius-rounded);\\r\\n border: 9px solid transparent;\\r\\n background-clip: padding-box;\\r\\n min-height: 20px;\\r\\n min-width: 20px;\\r\\n }\\r\\n\\r\\n /* Hover: expands to 8 px, darker */\\r\\n &::-webkit-scrollbar-thumb:hover {\\r\\n background-color: var(--bg-primary-hovered);\\r\\n border-width: 7px;\\r\\n }\\r\\n\\r\\n /* Pressed: black */\\r\\n &::-webkit-scrollbar-thumb:active {\\r\\n background-color: var(--font-primary-base);\\r\\n border-width: 7px;\\r\\n }\\r\\n\\r\\n /* Track background appears on container hover */\\r\\n &:hover::-webkit-scrollbar-track {\\r\\n background: var(--bg-primary-lightest);\\r\\n border-left: 1px solid var(--stroke-primary-lighter);\\r\\n border-right: 1px solid var(--stroke-primary-lighter);\\r\\n }\\r\\n\\r\\n /* Horizontal variant */\\r\\n &:hover::-webkit-scrollbar-track:horizontal {\\r\\n border-left: none;\\r\\n border-right: none;\\r\\n border-top: 1px solid var(--stroke-primary-lighter);\\r\\n border-bottom: 1px solid var(--stroke-primary-lighter);\\r\\n }\\r\\n}\\r\\n\\n/* ── TabGroup — ported from Galactik design system ── */\\r\\n\\r\\n/* ── Group container ── */\\r\\n\\r\\n.oc-tab-group {\\r\\n display: inline-flex;\\r\\n flex-direction: column;\\r\\n max-width: 100%;\\r\\n}\\r\\n\\r\\n.oc-tab-group__items {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n flex-wrap: nowrap;\\r\\n gap: var(--space-3xs);\\r\\n width: fit-content;\\r\\n}\\r\\n\\r\\n/* Primary: pill strip */\\r\\n.oc-tab-group--primary {\\r\\n width: fit-content;\\r\\n}\\r\\n\\r\\n.oc-tab-group--primary .oc-tab-group__items {\\r\\n background: var(--bg-primary-lightest);\\r\\n border-radius: var(--radius-rounded);\\r\\n padding: var(--space-3xs);\\r\\n}\\r\\n\\r\\n/* Secondary: flat row with bottom border */\\r\\n.oc-tab-group--secondary {\\r\\n background: var(--bg-neutral-white, #fff);\\r\\n border-bottom: 1px solid var(--stroke-primary-lighter);\\r\\n}\\r\\n\\r\\n/* Inner: same underline style, transparent background */\\r\\n.oc-tab-group--inner {\\r\\n background: transparent;\\r\\n border-bottom: 1px solid var(--stroke-primary-lighter);\\r\\n}\\r\\n\\r\\n/* Panel */\\r\\n.oc-tab-group__panel {\\r\\n margin-top: var(--space-md);\\r\\n color: var(--font-primary-base);\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: 1.5;\\r\\n}\\r\\n\\r\\n.oc-tab-group__panel[hidden] { display: none; }\\r\\n\\r\\n/* ── Tab button ── */\\r\\n\\r\\n.oc-tab {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n border: none;\\r\\n background: transparent;\\r\\n cursor: pointer;\\r\\n font-family: inherit;\\r\\n color: var(--font-primary-base);\\r\\n font-weight: 400;\\r\\n white-space: nowrap;\\r\\n flex-shrink: 0;\\r\\n outline: none;\\r\\n transition: background 120ms ease, color 120ms ease, border-color 120ms ease;\\r\\n position: relative;\\r\\n user-select: none;\\r\\n}\\r\\n\\r\\n.oc-tab:focus-visible {\\r\\n outline: 2px solid var(--stroke-focus);\\r\\n outline-offset: 2px;\\r\\n border-radius: var(--radius-rounded);\\r\\n}\\r\\n\\r\\n.oc-tab:disabled,\\r\\n.oc-tab[aria-disabled=\"true\"] {\\r\\n cursor: not-allowed;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n/* ── Sizes ── */\\r\\n\\r\\n.oc-tab--sm {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n padding: 0 var(--space-2xs);\\r\\n border-radius: var(--radius-sm);\\r\\n height: 24px;\\r\\n}\\r\\n\\r\\n.oc-tab--md {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n padding: 0 var(--space-xs);\\r\\n border-radius: var(--radius-sm);\\r\\n height: 36px;\\r\\n}\\r\\n\\r\\n/* ── Primary variant ── */\\r\\n\\r\\n.oc-tab-variant-primary {\\r\\n border-radius: var(--radius-sm);\\r\\n color: var(--font-primary-base);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-primary:hover:not(:disabled) {\\r\\n background: var(--bg-primary-hovered);\\r\\n color: var(--font-neutral-white, #fff);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-primary[aria-selected=\"true\"],\\r\\n.oc-tab-variant-primary.oc-tab-active {\\r\\n background: var(--bg-primary-base);\\r\\n color: var(--font-neutral-white, #fff);\\r\\n font-weight: 600;\\r\\n}\\r\\n\\r\\n.oc-tab-variant-primary:active:not(:disabled) {\\r\\n background: var(--bg-primary-pressed);\\r\\n color: var(--font-neutral-black);\\r\\n font-weight: 700;\\r\\n}\\r\\n\\r\\n.oc-tab-variant-primary:disabled,\\r\\n.oc-tab-variant-primary.oc-tab-disabled {\\r\\n background: var(--bg-neutral-disabled);\\r\\n color: var(--font-neutral-muted);\\r\\n cursor: not-allowed;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n/* ── Secondary variant ── */\\r\\n\\r\\n.oc-tab-variant-secondary,\\r\\n.oc-tab-variant-inner {\\r\\n border-radius: var(--radius-sm) var(--radius-sm) 0 0;\\r\\n height: auto;\\r\\n border-bottom: 2px solid transparent;\\r\\n margin-bottom: -1px;\\r\\n color: var(--font-primary-base);\\r\\n font-weight: 600;\\r\\n}\\r\\n\\r\\n.oc-tab-variant-secondary.oc-tab--sm,\\r\\n.oc-tab-variant-inner.oc-tab--sm {\\r\\n padding-block: var(--space-2xs);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-secondary.oc-tab--md,\\r\\n.oc-tab-variant-inner.oc-tab--md {\\r\\n padding-block: var(--space-xs);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-secondary:hover:not(:disabled),\\r\\n.oc-tab-variant-inner:hover:not(:disabled) {\\r\\n background: var(--bg-primary-lighter);\\r\\n color: var(--font-primary-hovered);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-secondary:active:not(:disabled),\\r\\n.oc-tab-variant-inner:active:not(:disabled) {\\r\\n background: var(--bg-primary-light);\\r\\n color: var(--font-primary-dark);\\r\\n font-weight: 700;\\r\\n}\\r\\n\\r\\n.oc-tab-variant-secondary[aria-selected=\"true\"],\\r\\n.oc-tab-variant-secondary.oc-tab-active {\\r\\n background: var(--bg-neutral-white, #fff);\\r\\n border-bottom-color: var(--stroke-primary-base);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-secondary[aria-selected=\"true\"]:hover:not(:disabled),\\r\\n.oc-tab-variant-secondary.oc-tab-active:hover:not(:disabled) {\\r\\n background: var(--bg-primary-lighter);\\r\\n border-bottom-color: var(--stroke-primary-hovered);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-inner[aria-selected=\"true\"],\\r\\n.oc-tab-variant-inner.oc-tab-active {\\r\\n background: transparent;\\r\\n border-bottom-color: var(--stroke-primary-base);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-inner[aria-selected=\"true\"]:hover:not(:disabled),\\r\\n.oc-tab-variant-inner.oc-tab-active:hover:not(:disabled) {\\r\\n background: var(--bg-primary-lighter);\\r\\n border-bottom-color: var(--stroke-primary-hovered);\\r\\n}\\r\\n\\r\\n.oc-tab-variant-secondary:disabled,\\r\\n.oc-tab-variant-secondary.oc-tab-disabled,\\r\\n.oc-tab-variant-inner:disabled,\\r\\n.oc-tab-variant-inner.oc-tab-disabled {\\r\\n color: var(--font-neutral-muted);\\r\\n cursor: not-allowed;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n/* ── Sub-elements ── */\\r\\n\\r\\n.oc-tab__icon {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n flex-shrink: 0;\\r\\n font-size: 13px;\\r\\n}\\r\\n\\r\\n.oc-tab__badge {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n min-width: 16px;\\r\\n height: 16px;\\r\\n padding: 0 4px;\\r\\n border-radius: var(--radius-rounded);\\r\\n background: var(--stroke-primary-lighter);\\r\\n color: var(--font-primary-base);\\r\\n font-size: 10px;\\r\\n font-weight: 600;\\r\\n line-height: 1;\\r\\n}\\r\\n\\r\\n.oc-tab-variant-primary[aria-selected=\"true\"] .oc-tab__badge,\\r\\n.oc-tab-variant-primary.oc-tab-active .oc-tab__badge {\\r\\n background: rgba(255, 255, 255, 0.25);\\r\\n color: var(--font-neutral-white, #fff);\\r\\n}\\r\\n\\r\\n.oc-tab__close {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n border: none;\\r\\n background: transparent;\\r\\n cursor: pointer;\\r\\n padding: 0;\\r\\n color: inherit;\\r\\n border-radius: var(--radius-rounded);\\r\\n opacity: 0.6;\\r\\n transition: opacity 0.15s ease;\\r\\n}\\r\\n\\r\\n.oc-tab__close:hover { opacity: 1; }\\r\\n\\n/* ── Toggle + ToggleGroup — ported from galactik-design-react ─────────────\\r\\n Depends on --spacing-* / --shadow-* aliases defined in search-bar.css\\r\\n ─────────────────────────────────────────────────────────────────────── */\\r\\n\\r\\n/* ══════════════════════════════════════════════════════\\r\\n TOGGLE (electron)\\r\\n Variants: .oc-toggle--unique (single-select item)\\r\\n .oc-toggle--multi (multi-select item)\\r\\n Sizes: .oc-toggle--medium (h=32px)\\r\\n .oc-toggle--small (h=24px)\\r\\n Modifier: .oc-toggle--icon-only\\r\\n State: aria-pressed=\"true\" | :disabled\\r\\n══════════════════════════════════════════════════════ */\\r\\n\\r\\n.oc-toggle {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n gap: var(--spacing-3xs);\\r\\n border: none;\\r\\n background: transparent;\\r\\n cursor: pointer;\\r\\n font-family: inherit;\\r\\n border-radius: var(--radius-rounded);\\r\\n white-space: nowrap;\\r\\n flex-shrink: 0;\\r\\n -webkit-user-select: none;\\r\\n user-select: none;\\r\\n transition: background 0.12s ease, color 0.12s ease, box-shadow 0.12s ease;\\r\\n}\\r\\n\\r\\n.oc-toggle:focus-visible {\\r\\n outline: var(--stroke-sm) solid var(--stroke-focus);\\r\\n outline-offset: 2px;\\r\\n}\\r\\n\\r\\n.oc-toggle:disabled,\\r\\n.oc-toggle[aria-disabled=\"true\"] {\\r\\n background: var(--bg-neutral-disabled);\\r\\n color: var(--font-neutral-muted);\\r\\n cursor: not-allowed;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n/* ── Sizes ── */\\r\\n\\r\\n.oc-toggle--medium {\\r\\n height: 32px;\\r\\n padding: 0 var(--spacing-sm);\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n font-weight: var(--text-p-sm-medium-weight, 500);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n}\\r\\n\\r\\n.oc-toggle--medium svg,\\r\\n.oc-toggle--medium i {\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n}\\r\\n\\r\\n.oc-toggle--medium.oc-toggle--icon-only {\\r\\n width: 32px;\\r\\n padding: 0;\\r\\n}\\r\\n\\r\\n.oc-toggle--small {\\r\\n height: 24px;\\r\\n padding: 0 var(--spacing-xs);\\r\\n font-size: var(--text-p-xs-regular-size);\\r\\n font-weight: var(--text-p-xs-medium-weight, 500);\\r\\n line-height: var(--text-p-xs-regular-line-height);\\r\\n}\\r\\n\\r\\n.oc-toggle--small svg,\\r\\n.oc-toggle--small i {\\r\\n width: 12px;\\r\\n height: 12px;\\r\\n}\\r\\n\\r\\n.oc-toggle--small.oc-toggle--icon-only {\\r\\n width: 24px;\\r\\n padding: 0;\\r\\n}\\r\\n\\r\\n/* ── Unique variant (single-select pill) ── */\\r\\n\\r\\n.oc-toggle--unique {\\r\\n color: var(--font-primary-base);\\r\\n}\\r\\n\\r\\n.oc-toggle--unique:hover:not(:disabled):not([aria-pressed=\"true\"]) {\\r\\n background: var(--bg-primary-hovered);\\r\\n color: var(--font-neutral-white);\\r\\n}\\r\\n\\r\\n.oc-toggle--unique:active:not(:disabled):not([aria-pressed=\"true\"]) {\\r\\n background: var(--bg-primary-pressed);\\r\\n color: var(--font-primary-pressed);\\r\\n font-weight: 700;\\r\\n}\\r\\n\\r\\n.oc-toggle--unique[aria-pressed=\"true\"] {\\r\\n background: var(--bg-neutral-white);\\r\\n color: var(--font-primary-base);\\r\\n box-shadow: var(--shadow-2);\\r\\n}\\r\\n\\r\\n/* ── Multi variant (icon-only toggle) ── */\\r\\n\\r\\n.oc-toggle--multi {\\r\\n color: var(--font-neutral-black);\\r\\n}\\r\\n\\r\\n.oc-toggle--multi:hover:not(:disabled):not([aria-pressed=\"true\"]) {\\r\\n background: var(--bg-secondary-lighter);\\r\\n color: var(--font-secondary-hovered);\\r\\n}\\r\\n\\r\\n.oc-toggle--multi:active:not(:disabled):not([aria-pressed=\"true\"]) {\\r\\n background: var(--bg-secondary-light);\\r\\n color: var(--font-secondary-pressed);\\r\\n font-weight: 700;\\r\\n}\\r\\n\\r\\n.oc-toggle--multi[aria-pressed=\"true\"] {\\r\\n background: var(--bg-secondary-active);\\r\\n color: var(--font-neutral-black);\\r\\n}\\r\\n\\r\\n\\r\\n/* ══════════════════════════════════════════════════════\\r\\n TOGGLE GROUP\\r\\n Variants: .oc-toggle-group--single\\r\\n .oc-toggle-group--multi\\r\\n══════════════════════════════════════════════════════ */\\r\\n\\r\\n.oc-toggle-group {\\r\\n display: inline-flex;\\r\\n}\\r\\n\\r\\n.oc-toggle-group--single {\\r\\n border-radius: var(--radius-rounded);\\r\\n background: var(--bg-primary-lightest);\\r\\n padding: var(--spacing-3xs);\\r\\n}\\r\\n\\r\\n.oc-toggle-group--multi {\\r\\n border: 1px solid var(--stroke-primary-lighter);\\r\\n border-radius: var(--radius-4xl);\\r\\n background: var(--bg-neutral-white);\\r\\n box-shadow: var(--shadow-1);\\r\\n padding: 0 var(--spacing-xl);\\r\\n}\\r\\n\\r\\n.oc-toggle-group__items {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--spacing-3xs);\\r\\n}\\r\\n\\r\\n.oc-toggle-group__items--multi {\\r\\n padding: var(--spacing-2xs) 0;\\r\\n}\\r\\n\\n/* ══════════════════════════════════════════════════════\\r\\n LexiQ Checkbox Component\\r\\n Ported from galactik-design-react Checkbox\\r\\n══════════════════════════════════════════════════════ */\\r\\n\\r\\n.oc-checkbox-root {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n user-select: none;\\r\\n cursor: pointer;\\r\\n position: relative;\\r\\n}\\r\\n\\r\\n.oc-checkbox-with-hint { align-items: flex-start; }\\r\\n.oc-checkbox-disabled { cursor: not-allowed; }\\r\\n\\r\\n/* ── Hidden native input ── */\\r\\n.oc-checkbox-input {\\r\\n position: absolute;\\r\\n width: 1px;\\r\\n height: 1px;\\r\\n padding: 0;\\r\\n margin: -1px;\\r\\n overflow: hidden;\\r\\n clip: rect(0, 0, 0, 0);\\r\\n white-space: nowrap;\\r\\n border: 0;\\r\\n}\\r\\n\\r\\n/* ── Hit-area ── */\\r\\n.oc-checkbox-hitbox {\\r\\n width: 18px;\\r\\n height: 18px;\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border-radius: var(--radius-xs);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n/* ── Visual control ── */\\r\\n.oc-checkbox-control {\\r\\n position: relative;\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n border-radius: var(--radius-xs);\\r\\n border: 1px solid var(--stroke-primary-base);\\r\\n background-color: var(--bg-neutral-white);\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;\\r\\n\\r\\n &::after {\\r\\n content: \\'\\';\\r\\n position: absolute;\\r\\n inset: -3px;\\r\\n border-radius: calc(var(--radius-xs) + 3px);\\r\\n border: 2px solid transparent;\\r\\n pointer-events: none;\\r\\n transition: border-color 0.15s ease;\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Icons ── */\\r\\n.oc-checkbox-icon {\\r\\n position: absolute;\\r\\n color: var(--font-neutral-white);\\r\\n opacity: 0;\\r\\n transform: scale(0.85);\\r\\n transition: opacity 0.12s ease, transform 0.12s ease, color 0.15s ease;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n\\r\\n svg { width: 1em; height: 1em; }\\r\\n}\\r\\n\\r\\n.oc-checkbox-icon-check { font-size: 10px; }\\r\\n.oc-checkbox-icon-minus { font-size: 12px; }\\r\\n\\r\\n/* ── Checked / indeterminate ── */\\r\\n.oc-checkbox-input:checked + .oc-checkbox-hitbox .oc-checkbox-control,\\r\\n.oc-checkbox-input:indeterminate + .oc-checkbox-hitbox .oc-checkbox-control {\\r\\n background-color: var(--font-primary-base);\\r\\n border-color: var(--font-primary-base);\\r\\n}\\r\\n\\r\\n.oc-checkbox-input:checked + .oc-checkbox-hitbox .oc-checkbox-icon-check { opacity: 1; transform: scale(1); }\\r\\n.oc-checkbox-input:indeterminate + .oc-checkbox-hitbox .oc-checkbox-icon-minus { opacity: 1; transform: scale(1); }\\r\\n\\r\\n/* ── Hover ── */\\r\\n.oc-checkbox-root:not(.oc-checkbox-disabled):hover {\\r\\n .oc-checkbox-input:not(:checked):not(:indeterminate) + .oc-checkbox-hitbox .oc-checkbox-control {\\r\\n background-color: var(--bg-primary-lighter);\\r\\n border-color: var(--stroke-primary-hovered);\\r\\n }\\r\\n .oc-checkbox-input:checked + .oc-checkbox-hitbox .oc-checkbox-control,\\r\\n .oc-checkbox-input:indeterminate + .oc-checkbox-hitbox .oc-checkbox-control {\\r\\n background-color: var(--font-primary-hovered);\\r\\n border-color: var(--font-primary-hovered);\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Active ── */\\r\\n.oc-checkbox-root:not(.oc-checkbox-disabled):active {\\r\\n .oc-checkbox-input:not(:checked):not(:indeterminate) + .oc-checkbox-hitbox .oc-checkbox-control {\\r\\n background-color: var(--bg-primary-light);\\r\\n border-color: var(--stroke-primary-base);\\r\\n box-shadow: inset 0 0 0 1px var(--stroke-primary-base);\\r\\n }\\r\\n .oc-checkbox-input:checked + .oc-checkbox-hitbox .oc-checkbox-control,\\r\\n .oc-checkbox-input:indeterminate + .oc-checkbox-hitbox .oc-checkbox-control {\\r\\n background-color: var(--bg-primary-pressed);\\r\\n border-color: var(--bg-primary-pressed);\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Focus ── */\\r\\n.oc-checkbox-input:focus-visible + .oc-checkbox-hitbox .oc-checkbox-control::after {\\r\\n border-color: var(--stroke-focus);\\r\\n}\\r\\n\\r\\n/* ── Disabled ── */\\r\\n.oc-checkbox-input:disabled + .oc-checkbox-hitbox .oc-checkbox-control {\\r\\n background-color: var(--bg-neutral-disabled);\\r\\n border-color: var(--stroke-neutral-disabled);\\r\\n box-shadow: none;\\r\\n}\\r\\n\\r\\n.oc-checkbox-input:disabled + .oc-checkbox-hitbox .oc-checkbox-icon { color: var(--stroke-neutral-disabled); }\\r\\n.oc-checkbox-input:disabled:not(:checked):not(:indeterminate) + .oc-checkbox-hitbox .oc-checkbox-icon { opacity: 0; }\\r\\n.oc-checkbox-input:disabled:checked + .oc-checkbox-hitbox .oc-checkbox-icon-check,\\r\\n.oc-checkbox-input:disabled:indeterminate + .oc-checkbox-hitbox .oc-checkbox-icon-minus { opacity: 1; transform: scale(1); }\\r\\n\\r\\n/* ── Text block ── */\\r\\n.oc-checkbox-text-block {\\r\\n display: inline-flex;\\r\\n flex-direction: column;\\r\\n gap: 1px;\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.oc-checkbox-label {\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: 1.3;\\r\\n font-weight: 400;\\r\\n color: var(--font-primary-base);\\r\\n}\\r\\n\\r\\n.oc-checkbox-label-sm { font-size: var(--text-p-sm-regular-size); }\\r\\n\\r\\n.oc-checkbox-hint {\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: 1.3;\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n.oc-checkbox-disabled .oc-checkbox-label,\\r\\n.oc-checkbox-disabled .oc-checkbox-hint { color: var(--font-neutral-muted); }\\r\\n\\n/* Tag — ported from Galactik design system */\\r\\n\\r\\n.oc-tag {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n gap: var(--tag-gap);\\r\\n padding: var(--tag-py) var(--tag-px);\\r\\n width: fit-content;\\r\\n max-width: 100%;\\r\\n min-width: 0;\\r\\n border-radius: var(--tag-radius);\\r\\n border-width: 1px;\\r\\n border-style: solid;\\r\\n border-color: var(--tag-stroke);\\r\\n background-color: var(--tag-bg);\\r\\n color: var(--tag-fg);\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n font-weight: 400;\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.oc-tag-label {\\r\\n color: currentColor;\\r\\n min-width: 0;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.oc-tag-icon,\\r\\n.oc-tag-flag {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n color: currentColor;\\r\\n flex-shrink: 0;\\r\\n line-height: 1;\\r\\n}\\r\\n\\r\\n/* ── Variants (empty — colour comes from scheme classes below) ── */\\r\\n.oc-tag-variant-primary {}\\r\\n.oc-tag-variant-secondary {}\\r\\n\\r\\n/* ── Sizes ── */\\r\\n\\r\\n.oc-tag-size-medium {\\r\\n --tag-gap: 8px;\\r\\n --tag-px: 12px;\\r\\n --tag-py: 4px;\\r\\n --tag-radius: 8px;\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: 20px;\\r\\n\\r\\n .oc-tag-icon {\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n font-size: 14px;\\r\\n }\\r\\n\\r\\n .oc-tag-flag {\\r\\n min-width: 18px;\\r\\n height: 14px;\\r\\n font-size: 10px;\\r\\n }\\r\\n}\\r\\n\\r\\n.oc-tag-size-small {\\r\\n --tag-gap: 4px;\\r\\n --tag-px: 8px;\\r\\n --tag-py: 4px;\\r\\n --tag-radius: 8px;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: 16px;\\r\\n\\r\\n .oc-tag-icon {\\r\\n width: 12px;\\r\\n height: 12px;\\r\\n font-size: 12px;\\r\\n }\\r\\n\\r\\n .oc-tag-flag {\\r\\n min-width: 16px;\\r\\n height: 12px;\\r\\n font-size: 9px;\\r\\n }\\r\\n}\\r\\n\\r\\n.oc-tag-size-xsmall {\\r\\n --tag-gap: 4px;\\r\\n --tag-px: 4px;\\r\\n --tag-py: 2px;\\r\\n --tag-radius: 4px;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: 16px;\\r\\n\\r\\n .oc-tag-icon {\\r\\n width: 12px;\\r\\n height: 12px;\\r\\n font-size: 12px;\\r\\n }\\r\\n\\r\\n .oc-tag-flag {\\r\\n min-width: 16px;\\r\\n height: 12px;\\r\\n font-size: 9px;\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Colour schemes ── */\\r\\n\\r\\n/* sage */\\r\\n.oc-tag-sage { --tag-bg: var(--bg-primary-light); --tag-fg: var(--font-primary-base); --tag-stroke: transparent; }\\r\\n.oc-tag-sage.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-primary-base); --tag-stroke: var(--stroke-primary-base); }\\r\\n\\r\\n/* grey */\\r\\n.oc-tag-grey { --tag-bg: var(--bg-neutral-base); --tag-fg: var(--stroke-neutral-dark); --tag-stroke: transparent; }\\r\\n.oc-tag-grey.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--stroke-neutral-dark); --tag-stroke: var(--stroke-neutral-dark); }\\r\\n\\r\\n/* almond */\\r\\n.oc-tag-almond { --tag-bg: var(--bg-secondary-light); --tag-fg: var(--font-secondary-base); --tag-stroke: transparent; }\\r\\n.oc-tag-almond.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-secondary-base-alt); --tag-stroke: var(--stroke-secondary-base); }\\r\\n\\r\\n/* yellow */\\r\\n.oc-tag-yellow { --tag-bg: var(--bg-yellow-base-alt); --tag-fg: var(--font-yellow-base); --tag-stroke: transparent; }\\r\\n.oc-tag-yellow.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-yellow-base); --tag-stroke: var(--stroke-yellow-base); }\\r\\n\\r\\n/* pink */\\r\\n.oc-tag-pink { --tag-bg: var(--bg-accent-base); --tag-fg: var(--font-accent-base); --tag-stroke: transparent; }\\r\\n.oc-tag-pink.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-accent-muted); --tag-stroke: var(--stroke-accent-base); }\\r\\n\\r\\n/* cherry */\\r\\n.oc-tag-cherry { --tag-bg: var(--bg-cherry-base); --tag-fg: var(--font-cherry-base); --tag-stroke: transparent; }\\r\\n.oc-tag-cherry.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-cherry-base); --tag-stroke: var(--stroke-cherry-base); }\\r\\n\\r\\n/* indigo */\\r\\n.oc-tag-indigo { --tag-bg: var(--bg-indigo-base-alt); --tag-fg: var(--font-indigo-base); --tag-stroke: transparent; }\\r\\n.oc-tag-indigo.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-indigo-base); --tag-stroke: var(--stroke-indigo-base); }\\r\\n\\r\\n/* cyan */\\r\\n.oc-tag-cyan { --tag-bg: var(--bg-cyan-base-alt); --tag-fg: var(--font-cyan-base); --tag-stroke: transparent; }\\r\\n.oc-tag-cyan.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-cyan-base); --tag-stroke: var(--stroke-cyan-base); }\\r\\n\\r\\n/* success */\\r\\n.oc-tag-success { --tag-bg: var(--bg-success-base); --tag-fg: var(--font-success-base); --tag-stroke: transparent; }\\r\\n.oc-tag-success.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-success-base); --tag-stroke: var(--stroke-success-base); }\\r\\n\\r\\n/* warning */\\r\\n.oc-tag-warning { --tag-bg: var(--bg-warning-base); --tag-fg: var(--font-warning-base); --tag-stroke: transparent; }\\r\\n.oc-tag-warning.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-warning-base); --tag-stroke: var(--stroke-warning-base); }\\r\\n\\r\\n/* info */\\r\\n.oc-tag-info { --tag-bg: var(--bg-info-base); --tag-fg: var(--font-info-base); --tag-stroke: transparent; }\\r\\n.oc-tag-info.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-info-base); --tag-stroke: var(--stroke-info-base); }\\r\\n\\r\\n/* error */\\r\\n.oc-tag-error { --tag-bg: var(--bg-error-base); --tag-fg: var(--font-error-base); --tag-stroke: transparent; }\\r\\n.oc-tag-error.oc-tag-variant-secondary { --tag-bg: transparent; --tag-fg: var(--font-error-base); --tag-stroke: var(--stroke-error-base); }\\r\\n\\n/* ══════════════════════════════════════════════════════\\r\\n Inline input tags (@mention selections)\\r\\n══════════════════════════════════════════════════════ */\\r\\n\\r\\n.lq-input-tag {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n vertical-align: middle;\\r\\n cursor: default;\\r\\n user-select: none;\\r\\n height: 20px;\\r\\n padding-inline: var(--space-3xs);\\r\\n}\\r\\n\\r\\n.lq-input-tag .oc-tag-icon svg {\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n display: block;\\r\\n}\\r\\n\\r\\n.lq-agent-mention {\\r\\n font-weight: 600;\\r\\n color: var(--font-secondary-base-alt);\\r\\n cursor: default;\\r\\n}\\r\\n\\n/* ── Tooltip bubble (portaled to document.body, position: fixed) ── */\\r\\n.oc-tooltip {\\r\\n position: fixed;\\r\\n background: var(--bg-primary-base);\\r\\n color: var(--font-neutral-white);\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n font-size: var(--text-p-sm-regular-size); line-height: var(--text-p-sm-regular-line-height); font-weight: var(--text-p-sm-regular-weight);\\r\\n font-weight: 700;\\r\\n white-space: nowrap;\\r\\n padding: var(--space-3xs) var(--space-2xs);\\r\\n border-radius: var(--radius-xs);\\r\\n pointer-events: none;\\r\\n z-index: 9999;\\r\\n}\\r\\n\\r\\n/* ── Arrow ── */\\r\\n.oc-tooltip::after {\\r\\n content: \\'\\';\\r\\n position: absolute;\\r\\n border-style: solid;\\r\\n border-color: transparent;\\r\\n}\\r\\n\\r\\n/* top → arrow points down */\\r\\n.oc-tooltip-placement-top::after {\\r\\n top: 100%;\\r\\n left: 50%;\\r\\n transform: translateX(-50%);\\r\\n border-width: 5px 5px 0;\\r\\n border-top-color: var(--bg-primary-base);\\r\\n}\\r\\n\\r\\n/* bottom → arrow points up */\\r\\n.oc-tooltip-placement-bottom::after {\\r\\n bottom: 100%;\\r\\n left: 50%;\\r\\n transform: translateX(-50%);\\r\\n border-width: 0 5px 5px;\\r\\n border-bottom-color: var(--bg-primary-base);\\r\\n}\\r\\n\\r\\n/* left → arrow points right */\\r\\n.oc-tooltip-placement-left::after {\\r\\n left: 100%;\\r\\n top: 50%;\\r\\n transform: translateY(-50%);\\r\\n border-width: 5px 0 5px 5px;\\r\\n border-left-color: var(--bg-primary-base);\\r\\n}\\r\\n\\r\\n/* right → arrow points left */\\r\\n.oc-tooltip-placement-right::after {\\r\\n right: 100%;\\r\\n top: 50%;\\r\\n transform: translateY(-50%);\\r\\n border-width: 5px 5px 5px 0;\\r\\n border-right-color: var(--bg-primary-base);\\r\\n}\\r\\n\\n@charset \"UTF-8\";\\r\\n/* ── Avatar component ─────────────────────────────────────────────────────── */\\r\\n\\r\\n/* ── Base ── */\\r\\n.oc-avatar {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border-radius: 50%;\\r\\n background-color: var(--avatar-bg);\\r\\n color: var(--avatar-color);\\r\\n flex-shrink: 0;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n/* ── Sizes ── */\\r\\n.oc-avatar-size-large { width: 40px; height: 40px; }\\r\\n.oc-avatar-size-medium { width: 32px; height: 32px; }\\r\\n.oc-avatar-size-small { width: 24px; height: 24px; }\\r\\n\\r\\n/* ── Fallback wrapper ── */\\r\\n.oc-avatar-fallback {\\r\\n width: 100%;\\r\\n height: 100%;\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n line-height: 1;\\r\\n}\\r\\n\\r\\n/* ── Initials ── */\\r\\n.oc-avatar-initials {\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n font-weight: 600;\\r\\n line-height: 1;\\r\\n letter-spacing: 0;\\r\\n user-select: none;\\r\\n}\\r\\n.oc-avatar-size-large .oc-avatar-initials { font-size: var(--text-p-sm-regular-size); }\\r\\n.oc-avatar-size-medium .oc-avatar-initials { font-size: 11px; }\\r\\n.oc-avatar-size-small .oc-avatar-initials { font-size: 10px; }\\r\\n\\r\\n/* ── Image ── */\\r\\n.oc-avatar-img {\\r\\n width: 100%;\\r\\n height: 100%;\\r\\n object-fit: cover;\\r\\n border-radius: 50%;\\r\\n}\\r\\n\\r\\n/* ── Icon ── */\\r\\n.oc-avatar-icon {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n line-height: 1;\\r\\n color: currentColor;\\r\\n}\\r\\n.oc-avatar-size-large .oc-avatar-icon { font-size: 16px; }\\r\\n.oc-avatar-size-medium .oc-avatar-icon { font-size: 14px; }\\r\\n.oc-avatar-size-small .oc-avatar-icon { font-size: 12px; }\\r\\n\\r\\n/* ── Variant: primary (dark fill) ── */\\r\\n.oc-avatar-variant-primary.oc-avatar-color-sage { --avatar-bg: var(--bg-primary-base); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-almond { --avatar-bg: var(--bg-secondary-base); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-pink { --avatar-bg: var(--bg-accent-base-alt); --avatar-color: var(--font-accent-pressed); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-grey,\\r\\n.oc-avatar-variant-primary.oc-avatar-color-neutral { --avatar-bg: var(--bg-neutral-base-alt); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-blue { --avatar-bg: var(--bg-info-base-alt); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-indigo { --avatar-bg: var(--bg-indigo-base); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-cyan { --avatar-bg: var(--bg-cyan-base); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-green { --avatar-bg: var(--bg-success-base-alt); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-red { --avatar-bg: var(--bg-error-base-alt); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-orange { --avatar-bg: var(--bg-warning-base-alt); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-yellow { --avatar-bg: var(--bg-yellow-base); --avatar-color: var(--font-neutral-white); }\\r\\n.oc-avatar-variant-primary.oc-avatar-color-cherry { --avatar-bg: var(--bg-cherry-base-alt); --avatar-color: var(--font-neutral-white); }\\r\\n\\r\\n/* ── Variant: secondary (light tonal fill) ── */\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-sage { --avatar-bg: var(--bg-primary-light); --avatar-color: var(--font-primary-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-almond { --avatar-bg: var(--bg-secondary-light); --avatar-color: var(--font-secondary-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-pink { --avatar-bg: var(--bg-accent-base); --avatar-color: var(--font-accent-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-grey,\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-neutral { --avatar-bg: var(--bg-neutral-base); --avatar-color: var(--font-neutral-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-blue { --avatar-bg: var(--bg-info-base); --avatar-color: var(--font-info-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-indigo { --avatar-bg: var(--bg-indigo-base-alt); --avatar-color: var(--font-indigo-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-cyan { --avatar-bg: var(--bg-cyan-base-alt); --avatar-color: var(--font-cyan-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-green { --avatar-bg: var(--bg-success-base); --avatar-color: var(--font-success-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-red { --avatar-bg: var(--bg-error-base); --avatar-color: var(--font-error-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-orange { --avatar-bg: var(--bg-warning-base); --avatar-color: var(--font-warning-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-yellow { --avatar-bg: var(--bg-yellow-base-alt); --avatar-color: var(--font-yellow-base); }\\r\\n.oc-avatar-variant-secondary.oc-avatar-color-cherry { --avatar-bg: var(--bg-cherry-base); --avatar-color: var(--font-cherry-base); }\\r\\n\\n@charset \"UTF-8\";\\r\\n/* ── Input component ──────────────────────────────────────────────────────── */\\r\\n\\r\\n/* ── Field (label + wrap stack) ── */\\r\\n.oc-input-field {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-2xs);\\r\\n}\\r\\n\\r\\n.oc-input-label {\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n font-weight: 600;\\r\\n color: var(--font-primary-base);\\r\\n line-height: 1.3;\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n align-items: baseline;\\r\\n}\\r\\n\\r\\n.oc-input-label__tag {\\r\\n font-size: 10px;\\r\\n font-weight: 400;\\r\\n color: var(--font-neutral-muted);\\r\\n background: var(--bg-neutral-base);\\r\\n border-radius: var(--radius-xs);\\r\\n padding: 1px 6px;\\r\\n line-height: 1.4;\\r\\n}\\r\\n.oc-input-label__tag--required { color: var(--font-neutral-muted); }\\r\\n.oc-input-label__tag--optional { color: var(--font-neutral-muted); }\\r\\n\\r\\n/* ── Wrap ── */\\r\\n.oc-input-wrap {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n border: 1px solid var(--stroke-primary-light);\\r\\n background-color: var(--bg-neutral-white);\\r\\n transition: border-color 0.15s ease, background-color 0.15s ease, outline-color 0.15s ease;\\r\\n}\\r\\n\\r\\n/* ── Hover (default scheme) ── */\\r\\n.oc-input-wrap:hover:not(.oc-input-disabled):not(.oc-input-readonly):not(:focus-within) {\\r\\n border-color: var(--stroke-primary-hovered);\\r\\n background-color: var(--bg-primary-lighter);\\r\\n}\\r\\n\\r\\n/* ── Focus ── */\\r\\n.oc-input-wrap:focus-within:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n border: 2px solid var(--stroke-primary-pressed);\\r\\n background-color: var(--bg-neutral-white);\\r\\n outline: none;\\r\\n}\\r\\n\\r\\n/* ── JS-class fallback for active ── */\\r\\n.oc-input-active {\\r\\n border: 2px solid var(--stroke-primary-pressed);\\r\\n background-color: var(--bg-neutral-white);\\r\\n outline: none;\\r\\n}\\r\\n.oc-input-active:hover:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n background-color: var(--bg-neutral-white);\\r\\n border-color: var(--stroke-primary-pressed);\\r\\n}\\r\\n\\r\\n/* ── Focus visible (JS-class fallback) ── */\\r\\n.oc-input-focus-visible:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n outline: 2px solid var(--stroke-focus);\\r\\n outline-offset: 2px;\\r\\n}\\r\\n\\r\\n/* ── Sizes ── */\\r\\n.oc-input-size-lg {\\r\\n height: 44px;\\r\\n padding: 0 var(--space-xl);\\r\\n border-radius: var(--radius-sm);\\r\\n}\\r\\n.oc-input-size-lg .oc-input-control { font-size: var(--text-p-base-regular-size); }\\r\\n.oc-input-size-lg .oc-input-icon-left,\\r\\n.oc-input-size-lg .oc-input-icon-right { font-size: 16px; }\\r\\n.oc-input-size-lg .oc-input-counter { font-size: var(--text-p-sm-regular-size); }\\r\\n.oc-input-size-lg .input-stepper i { font-size: 8px; }\\r\\n\\r\\n.oc-input-size-md {\\r\\n height: 36px;\\r\\n padding: 0 var(--space-md);\\r\\n border-radius: var(--radius-sm);\\r\\n}\\r\\n.oc-input-size-md .oc-input-control { font-size: var(--text-p-base-regular-size); }\\r\\n.oc-input-size-md .oc-input-icon-left,\\r\\n.oc-input-size-md .oc-input-icon-right { font-size: 16px; }\\r\\n.oc-input-size-md .oc-input-counter { font-size: var(--text-p-sm-regular-size); }\\r\\n.oc-input-size-md .input-stepper i { font-size: 7px; }\\r\\n\\r\\n.oc-input-size-sm {\\r\\n height: 24px;\\r\\n padding: 0 var(--space-xs);\\r\\n border-radius: var(--radius-xs);\\r\\n}\\r\\n.oc-input-size-sm .oc-input-control { font-size: var(--text-p-sm-regular-size); }\\r\\n.oc-input-size-sm .oc-input-icon-left,\\r\\n.oc-input-size-sm .oc-input-icon-right { font-size: 11px; }\\r\\n.oc-input-size-sm .oc-input-counter { font-size: var(--text-p-sm-regular-size); }\\r\\n.oc-input-size-sm .input-stepper i { font-size: 6px; }\\r\\n\\r\\n/* ── Textarea variant (no fixed height, vertical padding) ── */\\r\\n.oc-input-wrap--textarea {\\r\\n height: auto;\\r\\n align-items: flex-start;\\r\\n padding: var(--space-xs) var(--space-md);\\r\\n border-radius: var(--radius-sm);\\r\\n}\\r\\n.oc-input-wrap--textarea .oc-input-control {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n resize: none;\\r\\n line-height: 22px;\\r\\n padding: 0;\\r\\n}\\r\\n\\r\\n/* ── Control (the actual input/textarea) ── */\\r\\n.oc-input-control {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n border: none;\\r\\n background: transparent;\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n color: var(--font-primary-base);\\r\\n line-height: 1.4;\\r\\n padding: 0;\\r\\n}\\r\\n.oc-input-control::placeholder { color: var(--font-primary-muted); }\\r\\n.oc-input-control:focus,\\r\\n.oc-input-control:focus-visible { outline: none; }\\r\\n.oc-input-control:read-only { cursor: default; }\\r\\n\\r\\n/* ── Icon slots ── */\\r\\n.oc-input-icon-left,\\r\\n.oc-input-icon-right {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n flex-shrink: 0;\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n/* ── Counter ── */\\r\\n.oc-input-counter {\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n color: var(--font-neutral-muted);\\r\\n white-space: nowrap;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n.oc-input-counter-error { color: var(--font-error-base); }\\r\\n\\r\\n/* ── Hint ── */\\r\\n.oc-input-hint {\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n color: var(--font-primary-muted);\\r\\n line-height: 1.4;\\r\\n margin: 0;\\r\\n}\\r\\n.oc-input-hint-success { color: var(--font-success-base); }\\r\\n.oc-input-hint-error { color: var(--font-error-base); }\\r\\n\\r\\n\\r\\n/* ── Stepper (preview-only static element) ── */\\r\\n.input-stepper {\\r\\n display: inline-flex;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n flex-shrink: 0;\\r\\n color: var(--font-primary-muted);\\r\\n gap: 1px;\\r\\n line-height: 1;\\r\\n}\\r\\n.input-stepper i { line-height: 1; }\\r\\n\\r\\n/* ── Text display (preview-only, replaces <input>) ── */\\r\\n.input-text-display {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n font-size: inherit;\\r\\n color: var(--font-primary-base);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n line-height: 1.4;\\r\\n}\\r\\n.input-text-display.is-placeholder { color: var(--font-primary-muted); }\\r\\n\\r\\n/* ── Filled visual variant ── */\\r\\n.oc-input-filled {\\r\\n background-color: var(--bg-primary-lighter);\\r\\n border-color: transparent;\\r\\n}\\r\\n.oc-input-filled:hover:not(.oc-input-disabled):not(.oc-input-readonly):not(:focus-within) {\\r\\n background-color: var(--bg-primary-light);\\r\\n border-color: var(--stroke-primary-hovered);\\r\\n}\\r\\n.oc-input-filled:focus-within:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n background-color: var(--bg-neutral-white);\\r\\n border: 2px solid var(--stroke-primary-pressed);\\r\\n}\\r\\n.oc-input-filled.oc-input-active {\\r\\n background-color: var(--bg-neutral-white);\\r\\n border: 2px solid var(--stroke-primary-pressed);\\r\\n}\\r\\n.oc-input-filled.oc-input-scheme-success { background-color: var(--bg-success-base); border-color: transparent; }\\r\\n.oc-input-filled.oc-input-scheme-error { background-color: var(--bg-error-base); border-color: transparent; }\\r\\n\\r\\n/* ── Read only ── */\\r\\n.oc-input-readonly {\\r\\n background-color: var(--bg-neutral-base);\\r\\n border-color: transparent;\\r\\n cursor: default;\\r\\n}\\r\\n.oc-input-readonly:hover {\\r\\n border-color: transparent !important;\\r\\n background-color: var(--bg-neutral-base) !important;\\r\\n}\\r\\n.oc-input-readonly .oc-input-control,\\r\\n.oc-input-readonly .input-text-display { color: var(--font-primary-muted); cursor: default; }\\r\\n\\r\\n/* ── Disabled ── */\\r\\n.oc-input-disabled {\\r\\n background-color: var(--bg-neutral-disabled);\\r\\n border-color: var(--stroke-neutral-disabled);\\r\\n cursor: not-allowed;\\r\\n}\\r\\n.oc-input-disabled:hover {\\r\\n border-color: var(--stroke-neutral-disabled) !important;\\r\\n background-color: var(--bg-neutral-disabled) !important;\\r\\n}\\r\\n.oc-input-disabled .oc-input-control,\\r\\n.oc-input-disabled .input-text-display { color: var(--font-neutral-muted); cursor: not-allowed; }\\r\\n.oc-input-disabled .oc-input-icon-left,\\r\\n.oc-input-disabled .oc-input-icon-right,\\r\\n.oc-input-disabled .oc-input-counter,\\r\\n.oc-input-disabled .input-stepper { color: var(--font-neutral-muted); }\\r\\n\\r\\n/* ── Success scheme ── */\\r\\n.oc-input-scheme-success {\\r\\n border-color: var(--stroke-success-base);\\r\\n background-color: var(--bg-neutral-white);\\r\\n}\\r\\n.oc-input-scheme-success:hover:not(.oc-input-disabled):not(.oc-input-readonly):not(:focus-within) {\\r\\n background-color: var(--bg-success-lightest);\\r\\n border-color: var(--stroke-success-base);\\r\\n}\\r\\n.oc-input-scheme-success:focus-within:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n border: 2px solid var(--stroke-success-base);\\r\\n background-color: var(--bg-neutral-white);\\r\\n}\\r\\n.oc-input-scheme-success.oc-input-active {\\r\\n border: 2px solid var(--stroke-success-base);\\r\\n background-color: var(--bg-neutral-white);\\r\\n}\\r\\n.oc-input-scheme-success .oc-input-control,\\r\\n.oc-input-scheme-success .input-text-display { color: var(--font-success-base); }\\r\\n.oc-input-scheme-success .oc-input-icon-left,\\r\\n.oc-input-scheme-success .oc-input-icon-right,\\r\\n.oc-input-scheme-success .input-stepper { color: var(--font-success-base); }\\r\\n.oc-input-scheme-success .oc-input-counter { color: var(--font-success-base); }\\r\\n\\r\\n/* ── Error scheme ── */\\r\\n.oc-input-scheme-error {\\r\\n border-color: var(--stroke-error-base);\\r\\n background-color: var(--bg-neutral-white);\\r\\n}\\r\\n.oc-input-scheme-error:hover:not(.oc-input-disabled):not(.oc-input-readonly):not(:focus-within) {\\r\\n background-color: var(--bg-error-lightest);\\r\\n border-color: var(--stroke-error-base);\\r\\n}\\r\\n.oc-input-scheme-error:focus-within:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n border: 2px solid var(--stroke-error-base);\\r\\n background-color: var(--bg-neutral-white);\\r\\n}\\r\\n.oc-input-scheme-error.oc-input-active {\\r\\n border: 2px solid var(--stroke-error-base);\\r\\n background-color: var(--bg-neutral-white);\\r\\n}\\r\\n.oc-input-scheme-error .oc-input-control,\\r\\n.oc-input-scheme-error .input-text-display { color: var(--font-error-base); }\\r\\n.oc-input-scheme-error .oc-input-icon-left,\\r\\n.oc-input-scheme-error .oc-input-icon-right,\\r\\n.oc-input-scheme-error .input-stepper { color: var(--font-error-base); }\\r\\n.oc-input-scheme-error .oc-input-counter { color: var(--font-error-base); }\\r\\n\\r\\n/* ── Sim states (preview only) ── */\\r\\n.sim-hover:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n border-color: var(--stroke-primary-hovered);\\r\\n background-color: var(--bg-primary-lighter);\\r\\n}\\r\\n.sim-hover.oc-input-filled:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n background-color: var(--bg-primary-light);\\r\\n border-color: var(--stroke-primary-hovered);\\r\\n}\\r\\n.sim-hover.oc-input-scheme-success:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n background-color: var(--bg-success-lightest);\\r\\n border-color: var(--stroke-success-base);\\r\\n}\\r\\n.sim-hover.oc-input-scheme-error:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n background-color: var(--bg-error-lightest);\\r\\n border-color: var(--stroke-error-base);\\r\\n}\\r\\n.sim-hover.oc-input-scheme-error.oc-input-filled:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n background-color: var(--bg-error-lightest);\\r\\n border-color: transparent;\\r\\n}\\r\\n\\r\\n.sim-focus:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n outline: 2px solid var(--stroke-focus);\\r\\n outline-offset: 2px;\\r\\n border-color: var(--stroke-primary-light);\\r\\n background-color: var(--bg-neutral-white);\\r\\n}\\r\\n.sim-focus.oc-input-filled:not(.oc-input-disabled):not(.oc-input-readonly) {\\r\\n border-color: transparent;\\r\\n}\\r\\n\\r\\n@media (prefers-reduced-motion: reduce) {\\r\\n .oc-input-wrap { transition: none; }\\r\\n}\\r\\n\\n@charset \"UTF-8\";\\r\\n/* ══════════════════════════════════════════════════════\\r\\n LexiQ Separator Component\\r\\n Ported from galactik-design-react Separator\\r\\n══════════════════════════════════════════════════════ */\\r\\n.oc-separator {\\r\\n flex-shrink: 0;\\r\\n background: var(--stroke-neutral-white);\\r\\n}\\r\\n\\r\\n.oc-separator--strong {\\r\\n background: var(--stroke-primary-base);\\r\\n}\\r\\n\\r\\n.oc-separator--horizontal {\\r\\n width: 100%;\\r\\n height: 1px;\\r\\n}\\r\\n\\r\\n.oc-separator--vertical {\\r\\n width: 1px;\\r\\n min-height: 1em;\\r\\n align-self: stretch;\\r\\n}\\r\\n\\r\\n.oc-separator--horizontal.oc-separator--spacing-none { margin-block: 0; }\\r\\n.oc-separator--horizontal.oc-separator--spacing-sm { margin-block: var(--space-2xs); }\\r\\n.oc-separator--horizontal.oc-separator--spacing-md { margin-block: var(--space-xs); }\\r\\n.oc-separator--horizontal.oc-separator--spacing-lg { margin-block: var(--space-sm); }\\r\\n\\r\\n.oc-separator--vertical.oc-separator--spacing-none { margin-inline: 0; }\\r\\n.oc-separator--vertical.oc-separator--spacing-sm { margin-inline: var(--space-2xs); }\\r\\n.oc-separator--vertical.oc-separator--spacing-md { margin-inline: var(--space-xs); }\\r\\n.oc-separator--vertical.oc-separator--spacing-lg { margin-inline: var(--space-sm); }\\r\\n\\n/* ══════════════════════════════════════════════════════\\r\\n LexiQ Button System\\r\\n\\r\\n Variants: .lq-btn--primary\\r\\n .lq-btn--accent\\r\\n .lq-btn--secondary\\r\\n .lq-btn--tertiary\\r\\n .lq-btn--tertiary-neutral\\r\\n\\r\\n Sizes: .lq-btn--lg (h=44px, text=h3, icon=16px)\\r\\n .lq-btn--md (h=36px, text=p-base-regular, icon=14px)\\r\\n .lq-btn--sm (h=24px, text=p-sm-regular, icon=12px)\\r\\n\\r\\n Modifier: .lq-btn--icon → square icon-only button\\r\\n══════════════════════════════════════════════════════ */\\r\\n\\r\\n/* ── Base reset ── */\\r\\n.lq-btn {\\r\\n --lq-btn-disabled-fg: #434F5B;\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border: none;\\r\\n cursor: pointer;\\r\\n border-radius: var(--radius-rounded);\\r\\n transition: background 0.15s, color 0.15s, border-color 0.15s;\\r\\n white-space: nowrap;\\r\\n font-family: inherit;\\r\\n text-decoration: none;\\r\\n flex-shrink: 0;\\r\\n -webkit-user-select: none;\\r\\n user-select: none;\\r\\n\\r\\n svg, i { flex-shrink: 0; }\\r\\n\\r\\n &:focus-visible {\\r\\n outline: var(--stroke-sm) solid var(--stroke-focus);\\r\\n outline-offset: 2px;\\r\\n }\\r\\n\\r\\n &:disabled {\\r\\n cursor: not-allowed;\\r\\n pointer-events: none;\\r\\n }\\r\\n\\r\\n &[aria-disabled=\"true\"] {\\r\\n cursor: not-allowed;\\r\\n pointer-events: none;\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Pressed: bold weight only, no size change ── */\\r\\n.lq-btn:active {\\r\\n font-weight: var(--text-h4-weight);\\r\\n}\\r\\n\\r\\n\\r\\n/* ══════════════════════════════════════════════════════\\r\\n SIZES\\r\\n══════════════════════════════════════════════════════ */\\r\\n\\r\\n/* ── Large: 44px ── */\\r\\n.lq-btn--lg {\\r\\n height: 44px;\\r\\n padding: 0 var(--space-lg);\\r\\n gap: var(--space-2xs);\\r\\n font-size: var(--text-h3-size); line-height: var(--text-h3-line-height); font-weight: var(--text-h3-weight);\\r\\n\\r\\n svg, i { width: 16px; height: 16px; }\\r\\n\\r\\n &.lq-btn--icon {\\r\\n width: 44px;\\r\\n padding: 0;\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Medium: 36px ── */\\r\\n.lq-btn--md {\\r\\n height: 36px;\\r\\n padding: 0 var(--space-md);\\r\\n gap: 6px;\\r\\n font-size: var(--text-p-base-regular-size); line-height: var(--text-p-base-regular-line-height); font-weight: var(--text-p-base-regular-weight);\\r\\n\\r\\n svg, i { width: 14px; height: 14px; }\\r\\n\\r\\n &.lq-btn--icon {\\r\\n width: 36px;\\r\\n padding: 0;\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Small: 24px ── */\\r\\n.lq-btn--sm {\\r\\n height: 24px;\\r\\n padding: 0 var(--space-2xs);\\r\\n gap: var(--space-3xs);\\r\\n font-size: var(--text-p-sm-regular-size); line-height: var(--text-p-sm-regular-line-height); font-weight: var(--text-p-sm-regular-weight);\\r\\n\\r\\n svg, i { width: 12px; height: 12px; }\\r\\n\\r\\n &.lq-btn--icon {\\r\\n width: 24px;\\r\\n padding: 0;\\r\\n }\\r\\n}\\r\\n\\r\\n\\r\\n/* ══════════════════════════════════════════════════════\\r\\n VARIANT: Primary — filled sage\\r\\n bg/text follow --bg-primary-* / white\\r\\n══════════════════════════════════════════════════════ */\\r\\n.lq-btn--primary {\\r\\n background: var(--bg-primary-base);\\r\\n color: var(--font-neutral-white);\\r\\n\\r\\n &:hover {\\r\\n background: var(--bg-primary-hovered);\\r\\n color: var(--font-neutral-white);\\r\\n }\\r\\n\\r\\n &:active {\\r\\n background: var(--bg-primary-pressed);\\r\\n color: var(--font-primary-pressed);\\r\\n }\\r\\n\\r\\n &:disabled,\\r\\n &[aria-disabled=\"true\"] {\\r\\n background: var(--bg-neutral-disabled);\\r\\n color: var(--lq-btn-disabled-fg);\\r\\n }\\r\\n}\\r\\n\\r\\n\\r\\n/* ══════════════════════════════════════════════════════\\r\\n VARIANT: Accent — filled pink/purple\\r\\n bg/text follow --bg-accent-* / --font-accent-*\\r\\n══════════════════════════════════════════════════════ */\\r\\n.lq-btn--accent {\\r\\n background: var(--bg-accent-base-alt);\\r\\n color: var(--font-accent-base);\\r\\n\\r\\n &:hover {\\r\\n background: var(--bg-accent-hover);\\r\\n color: var(--font-accent-base);\\r\\n }\\r\\n\\r\\n &:active {\\r\\n background: var(--bg-accent-pressed);\\r\\n color: var(--font-accent-pressed);\\r\\n }\\r\\n\\r\\n &:disabled,\\r\\n &[aria-disabled=\"true\"] {\\r\\n background: var(--bg-neutral-disabled);\\r\\n color: var(--lq-btn-disabled-fg);\\r\\n }\\r\\n}\\r\\n\\r\\n\\r\\n/* ══════════════════════════════════════════════════════\\r\\n VARIANT: Secondary — outlined, primary palette\\r\\n Default: transparent bg + primary-base stroke + primary-base text\\r\\n Hover: lighter bg + hovered stroke + hovered text\\r\\n Pressed: light bg + pressed stroke + pressed text\\r\\n══════════════════════════════════════════════════════ */\\r\\n.lq-btn--secondary {\\r\\n background: transparent;\\r\\n border: var(--stroke-xs) solid var(--stroke-primary-base);\\r\\n color: var(--font-primary-base);\\r\\n\\r\\n &:hover {\\r\\n background: var(--bg-primary-lighter);\\r\\n border-color: var(--stroke-primary-hovered);\\r\\n color: var(--font-primary-hovered);\\r\\n }\\r\\n\\r\\n &:active {\\r\\n background: var(--bg-primary-light);\\r\\n border-color: var(--stroke-primary-pressed);\\r\\n color: var(--font-primary-pressed);\\r\\n }\\r\\n\\r\\n &:disabled,\\r\\n &[aria-disabled=\"true\"] {\\r\\n background: transparent;\\r\\n border-color: var(--stroke-neutral-disabled);\\r\\n color: var(--lq-btn-disabled-fg);\\r\\n }\\r\\n}\\r\\n\\r\\n\\r\\n/* ══════════════════════════════════════════════════════\\r\\n VARIANT: Tertiary — ghost, secondary (almond/green) palette\\r\\n Base: secondary-base text, no bg\\r\\n Hover: secondary-lighter bg\\r\\n Pressed: secondary-light bg\\r\\n══════════════════════════════════════════════════════ */\\r\\n.lq-btn--tertiary {\\r\\n background: transparent;\\r\\n color: var(--font-secondary-base-alt);\\r\\n\\r\\n &:hover {\\r\\n background: var(--bg-secondary-lighter);\\r\\n color: var(--font-secondary-hovered);\\r\\n }\\r\\n\\r\\n &:active {\\r\\n background: var(--bg-secondary-light);\\r\\n color: var(--font-secondary-pressed);\\r\\n }\\r\\n\\r\\n &:disabled,\\r\\n &[aria-disabled=\"true\"] {\\r\\n color: var(--lq-btn-disabled-fg);\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Tertiary Neutral — neutral black default, secondary states otherwise ── */\\r\\n.lq-btn--tertiary-neutral {\\r\\n background: transparent;\\r\\n color: var(--font-neutral-black);\\r\\n\\r\\n &:hover {\\r\\n background: var(--bg-secondary-lighter);\\r\\n color: var(--font-secondary-hovered);\\r\\n }\\r\\n\\r\\n &:active {\\r\\n background: var(--bg-secondary-light);\\r\\n color: var(--font-secondary-pressed);\\r\\n }\\r\\n\\r\\n &:disabled,\\r\\n &[aria-disabled=\"true\"] {\\r\\n color: var(--lq-btn-disabled-fg);\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Secondary Danger — outlined, error palette ── */\\r\\n.lq-btn--secondary-danger {\\r\\n background: transparent;\\r\\n border: var(--stroke-xs) solid var(--stroke-error-base, #EF4444);\\r\\n color: var(--font-error-base);\\r\\n\\r\\n &:hover {\\r\\n background: var(--bg-error-lightest);\\r\\n border-color: var(--stroke-error-base, #EF4444);\\r\\n color: var(--font-error-base);\\r\\n }\\r\\n\\r\\n &:active {\\r\\n background: var(--bg-error-base-alt);\\r\\n border-color: var(--stroke-error-base, #EF4444);\\r\\n color: var(--font-error-base);\\r\\n }\\r\\n\\r\\n &:disabled,\\r\\n &[aria-disabled=\"true\"] {\\r\\n background: transparent;\\r\\n border-color: var(--stroke-neutral-disabled);\\r\\n color: var(--lq-btn-disabled-fg);\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Ghost Danger — transparent default, danger on hover/press ── */\\r\\n.lq-btn--ghost-danger {\\r\\n background: transparent;\\r\\n color: var(--font-error-base);\\r\\n\\r\\n &:hover {\\r\\n background: var(--bg-error-base);\\r\\n color: #fff;\\r\\n }\\r\\n\\r\\n &:active {\\r\\n background: var(--color-red-700);\\r\\n color: #fff;\\r\\n }\\r\\n\\r\\n &:disabled,\\r\\n &[aria-disabled=\"true\"] {\\r\\n color: var(--lq-btn-disabled-fg);\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Busy state (async submit in flight, see setButtonBusy() in\\r\\n internal/dom-utils.ts) — the ring uses currentColor so it matches\\r\\n whichever variant it\\'s rendered on without per-variant overrides. ── */\\r\\n.lq-btn__spinner {\\r\\n display: inline-block;\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n border-radius: 50%;\\r\\n border: 2px solid color-mix(in srgb, currentColor 25%, transparent);\\r\\n border-top-color: currentColor;\\r\\n animation: lq-spin 0.7s linear infinite;\\r\\n}\\r\\n\\n/* ── Resize handle — sits between workspace and detail panel ── */\\r\\n.lq-resize-handle {\\r\\n display: none;\\r\\n flex-shrink: 0;\\r\\n width: var(--space-xs);\\r\\n align-self: stretch;\\r\\n cursor: col-resize;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n.lq-resize-handle--visible {\\r\\n display: flex;\\r\\n}\\r\\n.lq-resize-handle::after {\\r\\n content: \"\";\\r\\n width: 2px;\\r\\n height: 24px;\\r\\n border-radius: 1px;\\r\\n background: var(--stroke-neutral-light, #e5e6e8);\\r\\n opacity: 0;\\r\\n transition: opacity 0.15s ease;\\r\\n}\\r\\n.lq-resize-handle:hover::after {\\r\\n opacity: 1;\\r\\n}\\r\\n\\r\\n/* ── Detail panel — right card inside the main panel ── */\\r\\n.lq-detail-panel {\\r\\n flex-shrink: 0;\\r\\n width: 0;\\r\\n overflow: hidden;\\r\\n background: var(--bg-neutral-white, #fff);\\r\\n border-radius: var(--radius-xl);\\r\\n transition: width 0.35s cubic-bezier(0.32, 0.72, 0, 1);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n position: relative;\\r\\n}\\r\\n\\r\\n.lq-detail-panel--open {\\r\\n width: 50%;\\r\\n border: var(--stroke-xs, 1px) solid var(--stroke-neutral-white);\\r\\n box-shadow: 0 4px 6px -2px rgba(45, 57, 58, 0.05), 0 10px 15px -3px rgba(45, 57, 58, 0.1);\\r\\n}\\r\\n\\r\\n/* ── Document preview container ── */\\r\\n.lq-dp-doc-preview {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n flex: 1;\\r\\n min-height: 0;\\r\\n overflow: hidden;\\r\\n}\\r\\n.lq-dp-doc-preview[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* ── Preview header ── */\\r\\n.lq-dp-doc-preview__header {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-2xs);\\r\\n padding: var(--space-md);\\r\\n border-bottom: 1px solid var(--stroke-neutral-white, #f2f2f3);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n/* Title row */\\r\\n.lq-dp-doc-preview__title-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n/* oc-link override: truncate label, keep icon visible */\\r\\n.lq-dp-doc-preview__title-link {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n font-size: var(--text-h5-size);\\r\\n line-height: var(--text-h5-line-height);\\r\\n font-weight: var(--text-h5-weight);\\r\\n}\\r\\n.lq-dp-doc-preview__title-link .oc-link-label {\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n white-space: nowrap;\\r\\n min-width: 0;\\r\\n}\\r\\n.lq-dp-doc-preview__title-link .oc-link-icon-right {\\r\\n opacity: 0;\\r\\n transition: opacity 0.15s ease;\\r\\n}\\r\\n.lq-dp-doc-preview__title-link:hover .oc-link-icon-right {\\r\\n opacity: 1;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__actions {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n flex-shrink: 0;\\r\\n margin-left: auto;\\r\\n}\\r\\n\\r\\n/* Metadata column */\\r\\n.lq-dp-doc-preview__meta {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-3xs);\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__meta-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-muted, #596978);\\r\\n min-width: 0;\\r\\n}\\r\\n.lq-dp-doc-preview__meta-row > svg, .lq-dp-doc-preview__meta-row > i {\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__meta-label {\\r\\n font-weight: var(--text-h5-weight);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n/* Search + follow-up + doc controls row */\\r\\n.lq-dp-doc-preview__search-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n flex-wrap: wrap;\\r\\n /* search bar grows but caps at a sensible width */\\r\\n}\\r\\n.lq-dp-doc-preview__search-row .oc-sb {\\r\\n flex: 1;\\r\\n min-width: 100px;\\r\\n max-width: 220px;\\r\\n}\\r\\n\\r\\n/* Right-side document controls cluster — pushed to far right */\\r\\n.lq-dp-doc-preview__doc-controls {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n flex-shrink: 0;\\r\\n margin-left: auto;\\r\\n}\\r\\n\\r\\n/* Page indicator — oc-input-wrap override for compact inline use */\\r\\n.lq-dp-doc-preview__page-ctrl {\\r\\n gap: 4px;\\r\\n white-space: nowrap;\\r\\n width: auto;\\r\\n cursor: text;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: 1.4;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__page-current {\\r\\n flex: 0 0 auto;\\r\\n width: 2ch;\\r\\n text-align: center;\\r\\n font-weight: var(--text-h5-weight);\\r\\n font-size: inherit;\\r\\n line-height: inherit;\\r\\n height: auto;\\r\\n padding: 0;\\r\\n cursor: text;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__page-sep,\\r\\n.lq-dp-doc-preview__page-total {\\r\\n color: var(--font-primary-muted);\\r\\n flex-shrink: 0;\\r\\n font-size: inherit;\\r\\n line-height: inherit;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__zoom-label {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n color: var(--font-primary-muted);\\r\\n min-width: 3ch;\\r\\n text-align: center;\\r\\n flex-shrink: 0;\\r\\n user-select: none;\\r\\n}\\r\\n\\r\\n/* ── Preview body ── */\\r\\n.lq-dp-doc-preview__body {\\r\\n flex: 1;\\r\\n min-height: 0;\\r\\n overflow: auto;\\r\\n padding-top: var(--space-lg);\\r\\n background: var(--bg-neutral-base);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__pages {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n padding: var(--space-xl) var(--space-md) var(--space-md);\\r\\n align-items: center;\\r\\n gap: var(--space-md);\\r\\n transform-origin: top center;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__page {\\r\\n position: relative;\\r\\n background: #fff;\\r\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.06);\\r\\n border-radius: 2px;\\r\\n width: 640px;\\r\\n min-height: 905px;\\r\\n padding: 64px 72px;\\r\\n box-sizing: border-box;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n.lq-dp-doc-preview__page h1 {\\r\\n font-size: 22px;\\r\\n font-weight: 700;\\r\\n line-height: 1.3;\\r\\n margin: 0 0 20px;\\r\\n color: var(--font-primary-default);\\r\\n}\\r\\n.lq-dp-doc-preview__page h2 {\\r\\n font-size: 17px;\\r\\n font-weight: 700;\\r\\n line-height: 1.3;\\r\\n margin: 28px 0 10px;\\r\\n color: var(--font-primary-default);\\r\\n}\\r\\n.lq-dp-doc-preview__page h3 {\\r\\n font-size: 14px;\\r\\n font-weight: 600;\\r\\n line-height: 1.4;\\r\\n margin: 20px 0 8px;\\r\\n color: var(--font-primary-default);\\r\\n}\\r\\n.lq-dp-doc-preview__page p {\\r\\n font-size: 13px;\\r\\n line-height: 1.7;\\r\\n margin: 0 0 14px;\\r\\n color: var(--font-primary-default);\\r\\n}\\r\\n.lq-dp-doc-preview__page ul {\\r\\n font-size: 13px;\\r\\n line-height: 1.7;\\r\\n margin: 0 0 14px;\\r\\n padding-left: 20px;\\r\\n color: var(--font-primary-default);\\r\\n}\\r\\n.lq-dp-doc-preview__page ul li {\\r\\n margin-bottom: 6px;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__page-num {\\r\\n position: absolute;\\r\\n bottom: 24px;\\r\\n right: 32px;\\r\\n font-size: 11px;\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n.lq-dp-search-nav {\\r\\n display: none;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n flex-shrink: 0;\\r\\n padding-left: var(--space-2xs);\\r\\n border-left: 1px solid var(--stroke-primary-lighter);\\r\\n margin-left: var(--space-3xs);\\r\\n}\\r\\n.lq-dp-search-nav.lq-dp-search-nav--active {\\r\\n display: inline-flex;\\r\\n}\\r\\n\\r\\n.lq-dp-search-nav__arrows {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 0;\\r\\n}\\r\\n\\r\\n.lq-dp-search-nav__btn {\\r\\n background: transparent;\\r\\n border: none;\\r\\n cursor: pointer;\\r\\n color: var(--font-primary-muted);\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border-radius: var(--radius-sm);\\r\\n line-height: 1;\\r\\n}\\r\\n.lq-dp-search-nav__btn svg {\\r\\n transition: transform 0.18s cubic-bezier(0.34, 1.56, 0.64, 1);\\r\\n}\\r\\n.lq-dp-search-nav__btn:hover svg {\\r\\n transform: scale(1.2);\\r\\n}\\r\\n.lq-dp-search-nav__btn:active {\\r\\n color: var(--font-neutral-black, #182021);\\r\\n}\\r\\n\\r\\n.lq-dp-search-nav__count {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n color: var(--font-primary-muted);\\r\\n white-space: nowrap;\\r\\n min-width: 2ch;\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\nmark.lq-dp-search-highlight {\\r\\n background: rgba(234, 179, 8, 0.25);\\r\\n color: inherit;\\r\\n border-radius: 2px;\\r\\n padding: 0 1px;\\r\\n}\\r\\n\\r\\nmark.lq-dp-search-highlight--current {\\r\\n background: #FEF08A;\\r\\n outline: 2px solid #EAB308;\\r\\n outline-offset: 1px;\\r\\n}\\r\\n\\n// Vendored from lexiq-prototype scss/components.scss — only the selectors actually\\r\\n// used by Collections (confirm/action modals, danger list item, share notice,\\r\\n// spin keyframe, save/copy-label feedback keyframes+classes).\\r\\n\\r\\n/* ── Confirm / action modals (delete, rename, archive, share, upload, edit) ── */\\r\\n.lq-confirm-backdrop {\\r\\n position: fixed;\\r\\n inset: 0;\\r\\n background: rgba(24, 32, 33, 0.35);\\r\\n z-index: 400;\\r\\n opacity: 0;\\r\\n transition: opacity 0.2s ease;\\r\\n}\\r\\n.lq-confirm-backdrop.lq-confirm--open { opacity: 1; }\\r\\n.lq-confirm-backdrop[hidden] { display: none; }\\r\\n\\r\\n.lq-confirm-modal {\\r\\n position: fixed;\\r\\n top: 50%;\\r\\n left: 50%;\\r\\n transform: translate(-50%, -48%) scale(0.96);\\r\\n z-index: 401;\\r\\n width: 420px;\\r\\n background: var(--bg-neutral-white, #fff);\\r\\n border-radius: var(--radius-xl);\\r\\n box-shadow: 0 8px 32px rgba(24, 32, 33, 0.18);\\r\\n opacity: 0;\\r\\n transition: opacity 0.2s ease, transform 0.2s cubic-bezier(0.32, 0.72, 0, 1);\\r\\n overflow: hidden;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n}\\r\\n.lq-confirm-modal.lq-confirm--open {\\r\\n opacity: 1;\\r\\n transform: translate(-50%, -50%) scale(1);\\r\\n}\\r\\n.lq-confirm-modal[hidden] { display: none; }\\r\\n\\r\\n.lq-confirm-header {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n padding: var(--space-md) var(--space-xl);\\r\\n border-bottom: 1px solid var(--stroke-neutral-white, #F2F2F3);\\r\\n}\\r\\n.lq-confirm-title {\\r\\n font-size: var(--text-h3-size);\\r\\n font-weight: 700;\\r\\n color: var(--font-neutral-black);\\r\\n}\\r\\n.lq-confirm-body {\\r\\n padding: var(--space-xl);\\r\\n}\\r\\n.lq-confirm-desc {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: 22px;\\r\\n color: var(--font-neutral-base);\\r\\n margin: 0;\\r\\n}\\r\\n.lq-confirm-body .oc-input-wrap {\\r\\n width: 100%;\\r\\n box-sizing: border-box;\\r\\n}\\r\\n.lq-confirm-footer {\\r\\n display: flex;\\r\\n gap: var(--space-2xs);\\r\\n justify-content: flex-end;\\r\\n padding: var(--space-md) var(--space-xl);\\r\\n}\\r\\n\\r\\n/* ── Danger list item — specificity matches base :not(:disabled):hover rule ── */\\r\\n.lq-list-item--danger .oc-list-item-text,\\r\\n.lq-list-item--danger .oc-list-item-icon { color: var(--font-error-muted); }\\r\\n.oc-list-item.lq-list-item--danger:not(.oc-list-item-disabled):hover .oc-list-item-text,\\r\\n.oc-list-item.lq-list-item--danger:not(.oc-list-item-disabled):hover .oc-list-item-icon { color: var(--font-error-base); }\\r\\n.oc-list-item.lq-list-item--danger:not(.oc-list-item-disabled):hover { background-color: var(--bg-error-lightest); }\\r\\n.oc-list-item.lq-list-item--danger:not(.oc-list-item-disabled):active { background-color: var(--bg-error-base-alt); }\\r\\n\\r\\n/* ── Share notice banner ── */\\r\\n.lq-share-notice {\\r\\n display: flex;\\r\\n align-items: flex-start;\\r\\n gap: var(--space-2xs);\\r\\n padding: var(--space-xs) var(--space-md);\\r\\n background: #FFFBEE;\\r\\n border: 1px solid #E8D06B;\\r\\n border-radius: var(--radius-md);\\r\\n}\\r\\n.lq-share-notice svg { width: 16px; height: 16px; flex-shrink: 0; color: #8A6A00; margin-top: 1px; }\\r\\n.lq-share-notice-text {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: 20px;\\r\\n color: #5C4700;\\r\\n}\\r\\n\\r\\n/* ── Upload tracker spinner ── */\\r\\n@keyframes lq-spin {\\r\\n from { transform: rotate(0deg); }\\r\\n to { transform: rotate(360deg); }\\r\\n}\\r\\n\\r\\n/* ── Save/copy feedback (collection-picker.js _triggerSaveFeedback) ── */\\r\\n@keyframes lq-copy-label-in {\\r\\n 0% { opacity: 0; transform: translateX(-50%) translateY(4px) scale(0.85); }\\r\\n 70% { opacity: 1; transform: translateX(-50%) translateY(-1px) scale(1.04); }\\r\\n 100% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); }\\r\\n}\\r\\n\\r\\n@keyframes lq-copy-label-out {\\r\\n 0% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); }\\r\\n 100% { opacity: 0; transform: translateX(-50%) translateY(-5px) scale(0.85); }\\r\\n}\\r\\n\\r\\n.lq-btn--copy-exit svg {\\r\\n animation: lq-check-out 0.22s ease forwards;\\r\\n}\\r\\n\\r\\n@keyframes lq-check-out {\\r\\n 0% { opacity: 1; transform: scale(1) rotate(0deg); }\\r\\n 100% { opacity: 0; transform: scale(0.5) rotate(10deg); }\\r\\n}\\r\\n\\r\\n.lq-copy-label {\\r\\n position: absolute;\\r\\n top: calc(100% + 5px);\\r\\n left: 50%;\\r\\n transform: translateX(-50%);\\r\\n font-size: 10px;\\r\\n font-weight: 600;\\r\\n line-height: 1;\\r\\n white-space: nowrap;\\r\\n color: var(--font-success-base, #1a7f4b);\\r\\n pointer-events: none;\\r\\n animation: lq-copy-label-in 0.35s cubic-bezier(0.34, 1.56, 0.64, 1) 0.08s both;\\r\\n}\\r\\n\\r\\n.lq-btn--copy-exit .lq-copy-label {\\r\\n animation: lq-copy-label-out 0.2s ease forwards;\\r\\n}\\r\\n\\r\\n/* ── Inline error banner — generic, used by every modal/form that now\\r\\n awaits a store call (create/update/delete/share). Mirrors the existing\\r\\n .lq-upload-error look (collection-detail-view.css) so error styling\\r\\n reads the same everywhere. See showInlineError()/clearInlineError() in\\r\\n internal/dom-utils.ts. ── */\\r\\n.lq-inline-error {\\r\\n margin-top: var(--space-2xs);\\r\\n padding: var(--space-xs) var(--space-md);\\r\\n background: var(--bg-error-lightest);\\r\\n border: 1px solid var(--stroke-error-base);\\r\\n border-radius: var(--radius-md);\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n line-height: 1.6;\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n.lq-inline-error[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\n// Vendored/adapted from lexiq-prototype scss/layout.scss (mobile bottom sheet).\\r\\n// Structure adapted to match src/internal/dom-utils.js\\'s createMobileSheetController\\r\\n// (backdrop is now a child of .lq-mobile-sheet, not a page-level sibling).\\r\\n\\r\\n@media (max-width: 768px) {\\r\\n .lq-mobile-sheet {\\r\\n position: fixed;\\r\\n inset: 0;\\r\\n z-index: 300;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n justify-content: flex-end;\\r\\n pointer-events: none;\\r\\n\\r\\n &[hidden] { display: none !important; }\\r\\n }\\r\\n\\r\\n .lq-mobile-sheet--open {\\r\\n pointer-events: all;\\r\\n }\\r\\n\\r\\n .lq-mobile-sheet__backdrop {\\r\\n position: absolute;\\r\\n inset: 0;\\r\\n background: rgba(0, 0, 0, 0.2);\\r\\n opacity: 0;\\r\\n transition: opacity 0.35s ease;\\r\\n\\r\\n .lq-mobile-sheet--open & { opacity: 1; }\\r\\n }\\r\\n\\r\\n .lq-mobile-sheet__panel {\\r\\n position: relative;\\r\\n background: var(--bg-neutral-white);\\r\\n border-radius: 24px 24px 0 0;\\r\\n min-height: 60vh;\\r\\n max-height: 80vh;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow: hidden;\\r\\n box-shadow: 0 -4px 6px -2px rgba(45, 57, 58, 0.05), 0 -10px 15px -3px rgba(45, 57, 58, 0.10);\\r\\n transform: translateY(100%);\\r\\n transition: transform 0.35s cubic-bezier(0.32, 0.72, 0, 1);\\r\\n\\r\\n .lq-mobile-sheet--open & { transform: translateY(0); }\\r\\n }\\r\\n\\r\\n @media (max-height: 700px) {\\r\\n .lq-mobile-sheet__panel {\\r\\n min-height: 80vh;\\r\\n max-height: 95vh;\\r\\n }\\r\\n }\\r\\n\\r\\n .lq-mobile-sheet__handle {\\r\\n width: 77px;\\r\\n height: 8px;\\r\\n background: var(--stroke-primary-lighter);\\r\\n border-radius: 12px;\\r\\n margin: var(--space-md) auto var(--space-2xs);\\r\\n flex-shrink: 0;\\r\\n touch-action: none;\\r\\n }\\r\\n\\r\\n .lq-mobile-sheet__header {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n padding: 0 var(--space-xs) var(--space-2xs);\\r\\n flex-shrink: 0;\\r\\n }\\r\\n\\r\\n .lq-mobile-sheet__title {\\r\\n flex: 1;\\r\\n font-size: var(--text-p-sm-medium-size);\\r\\n line-height: var(--text-p-sm-medium-line-height);\\r\\n font-weight: 600;\\r\\n color: var(--font-primary-muted);\\r\\n text-transform: uppercase;\\r\\n letter-spacing: 0.5px;\\r\\n padding-left: var(--space-xs);\\r\\n }\\r\\n\\r\\n .lq-mobile-sheet__body {\\r\\n flex: 1;\\r\\n overflow-y: auto;\\r\\n min-height: 0;\\r\\n }\\r\\n}\\r\\n\\n/* ── Collection card — floating popover anchored below the save button ── */\\r\\n.lq-collection-card {\\r\\n position: absolute;\\r\\n right: var(--space-md);\\r\\n width: min(90%, 300px);\\r\\n z-index: 20;\\r\\n background: var(--bg-neutral-white, #fff);\\r\\n border-radius: var(--radius-xl);\\r\\n border: 1px solid var(--stroke-neutral-white, #f2f2f3);\\r\\n box-shadow: 0 8px 32px rgba(24, 32, 33, 0.18);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n height: 300px;\\r\\n overflow: hidden;\\r\\n opacity: 0;\\r\\n transform: translateY(-6px) scale(0.98);\\r\\n transform-origin: top right;\\r\\n transition: opacity 0.15s ease, transform 0.15s ease;\\r\\n pointer-events: none;\\r\\n}\\r\\n.lq-collection-card--open {\\r\\n opacity: 1;\\r\\n transform: translateY(0) scale(1);\\r\\n pointer-events: all;\\r\\n}\\r\\n\\r\\n.lq-collection-card__header {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n padding: var(--space-xs) var(--space-xs) var(--space-xs) var(--space-md);\\r\\n}\\r\\n\\r\\n.lq-collection-card__saved-label {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-neutral-black, #182021);\\r\\n flex: 1;\\r\\n}\\r\\n.lq-collection-card__saved-label strong {\\r\\n font-weight: 600;\\r\\n}\\r\\n\\r\\n.lq-collection-card__body {\\r\\n border-top: 1px solid var(--stroke-neutral-white, #f2f2f3);\\r\\n padding-top: var(--space-xs);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n flex: 1;\\r\\n min-height: 0;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.lq-collection-card__section-head {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n padding: 0 var(--space-xs) var(--space-3xs) var(--space-md);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n.lq-collection-card__section-head[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-collection-card__section-title {\\r\\n font-size: var(--text-p-base-medium-size);\\r\\n line-height: var(--text-p-base-medium-line-height);\\r\\n font-weight: var(--text-p-base-medium-weight);\\r\\n color: var(--font-neutral-black, #182021);\\r\\n flex: 1;\\r\\n}\\r\\n\\r\\n.lq-collection-card__list {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n padding: 0 var(--space-2xs) var(--space-2xs);\\r\\n overflow-y: auto;\\r\\n flex: 1;\\r\\n min-height: 0;\\r\\n}\\r\\n.lq-collection-card__list::-webkit-scrollbar {\\r\\n width: 4px;\\r\\n}\\r\\n.lq-collection-card__list::-webkit-scrollbar-track {\\r\\n background: transparent;\\r\\n}\\r\\n.lq-collection-card__list::-webkit-scrollbar-thumb {\\r\\n background: var(--bg-neutral-base, #e2e5e9);\\r\\n border-radius: 2px;\\r\\n}\\r\\n.lq-collection-card__list::-webkit-scrollbar-thumb:hover {\\r\\n background: var(--bg-neutral-disabled, #bec7cf);\\r\\n}\\r\\n\\r\\n.lq-collection-card__item {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n padding: var(--space-2xs) var(--space-2xs);\\r\\n border-radius: var(--radius-md);\\r\\n}\\r\\n\\r\\n.lq-collection-card__item-icon {\\r\\n flex-shrink: 0;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n}\\r\\n.lq-collection-card__item-icon svg {\\r\\n width: 22px;\\r\\n height: 22px;\\r\\n}\\r\\n\\r\\n.lq-collection-card__item-name {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-neutral-black, #182021);\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n white-space: nowrap;\\r\\n}\\r\\n\\r\\n/* Mobile bottom sheet: taller rows with a bigger collection icon */\\r\\n#mobile-sheet-body {\\r\\n /* Neutral reset — .lq-collection-card is normally a floating, animated\\r\\n popover (position/opacity/transform/fixed height); inside the sheet it\\r\\n should just flow as plain content, since the sheet handles its own\\r\\n open/close animation and scrolling. */\\r\\n}\\r\\n#mobile-sheet-body .lq-collection-card {\\r\\n position: static;\\r\\n width: 100%;\\r\\n height: auto;\\r\\n opacity: 1;\\r\\n transform: none;\\r\\n pointer-events: auto;\\r\\n box-shadow: none;\\r\\n border: none;\\r\\n border-radius: 0;\\r\\n}\\r\\n#mobile-sheet-body .lq-collection-card__item {\\r\\n padding: var(--space-2xs) var(--space-2xs);\\r\\n}\\r\\n#mobile-sheet-body .lq-collection-card__item-name {\\r\\n font-size: var(--text-h6-size);\\r\\n line-height: var(--text-h6-line-height);\\r\\n font-weight: var(--text-h6-weight);\\r\\n}\\r\\n#mobile-sheet-body .lq-collection-card__item-icon svg {\\r\\n width: 28px;\\r\\n height: 28px;\\r\\n}\\r\\n\\r\\n@keyframes lq-collection-item-spotlight {\\r\\n 0% {\\r\\n opacity: 0;\\r\\n transform: translateY(-6px);\\r\\n background-color: var(--bg-primary-lightest, #f5f8f7);\\r\\n }\\r\\n 30% {\\r\\n opacity: 1;\\r\\n transform: translateY(0);\\r\\n background-color: var(--bg-primary-lightest, #f5f8f7);\\r\\n }\\r\\n 100% {\\r\\n opacity: 1;\\r\\n transform: translateY(0);\\r\\n background-color: transparent;\\r\\n }\\r\\n}\\r\\n.lq-collection-card__item--new {\\r\\n animation: lq-collection-item-spotlight 1.5s ease forwards;\\r\\n}\\r\\n\\r\\n/* ── New collection inline form ── */\\r\\n.oc-input-wrap--error {\\r\\n border-color: var(--bg-error-base, #ad3739) !important;\\r\\n}\\r\\n\\r\\n.lq-collection-card__new-wrap {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-3xs);\\r\\n padding: var(--space-3xs) var(--space-2xs);\\r\\n padding-top: 0;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-collection-card__new-form-header {\\r\\n padding: 0 var(--space-3xs);\\r\\n}\\r\\n\\r\\n.lq-collection-card__new-form-label {\\r\\n font-size: var(--text-p-sm-medium-size);\\r\\n line-height: var(--text-p-sm-medium-line-height);\\r\\n font-weight: var(--text-p-sm-medium-weight);\\r\\n color: var(--font-neutral-black, #182021);\\r\\n}\\r\\n\\r\\n.lq-collection-card__new-form-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n}\\r\\n\\r\\n.lq-collection-card__new-field {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.lq-collection-card__new-semantic,\\r\\n.lq-collection-card__error {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-error-base, #ad3739);\\r\\n margin: 0;\\r\\n padding: 0 var(--space-3xs);\\r\\n}\\r\\n.lq-collection-card__new-semantic[hidden],\\r\\n.lq-collection-card__error[hidden] {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n.lq-collection-card__list--dimmed {\\r\\n opacity: 0.35;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n/* ── Collection card above anchor ── */\\r\\n.lq-collection-card--above {\\r\\n transform-origin: bottom right;\\r\\n}\\r\\n.lq-collection-card--above:not(.lq-collection-card--open) {\\r\\n transform: translateY(6px) scale(0.98);\\r\\n}\\r\\n\\n/* ── Collections panel ── */\\r\\n.lq-collections-view[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-col-card[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-collections-view {\\r\\n flex: 1;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow: hidden;\\r\\n padding: var(--space-2xl) var(--space-2xl) var(--space-md);\\r\\n}\\r\\n\\r\\n/* Header */\\r\\n.lq-col-header {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n margin-bottom: var(--space-3xs);\\r\\n}\\r\\n.lq-col-header__title {\\r\\n font-size: var(--text-h1-size);\\r\\n line-height: var(--text-h1-line-height);\\r\\n font-weight: var(--text-h1-weight);\\r\\n color: var(--font-neutral-black);\\r\\n margin: 0;\\r\\n}\\r\\n.lq-col-header__actions {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: 0;\\r\\n}\\r\\n\\r\\n.lq-col-subtitle {\\r\\n font-size: var(--text-h6-size);\\r\\n line-height: var(--text-h6-line-height);\\r\\n font-weight: var(--text-h6-weight);\\r\\n color: var(--font-primary-base);\\r\\n margin: 0 0 var(--space-xl);\\r\\n}\\r\\n\\r\\n/* Hide clear button until input has a value */\\r\\n.lq-col-sb-clear {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-col-sb-clear.visible {\\r\\n display: inline-flex !important;\\r\\n}\\r\\n\\r\\n/* Tabs row */\\r\\n.lq-col-tabs {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n margin-bottom: var(--space-xs);\\r\\n}\\r\\n\\r\\n/* Controls row */\\r\\n.lq-col-controls {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n margin-bottom: var(--space-xl);\\r\\n}\\r\\n.lq-col-controls .oc-sb {\\r\\n flex: 0 0 240px;\\r\\n}\\r\\n.lq-col-controls .oc-toggle-group {\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n/* Grid */\\r\\n.lq-col-grid {\\r\\n display: grid;\\r\\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\\r\\n gap: var(--space-md);\\r\\n overflow-y: auto;\\r\\n align-content: start;\\r\\n padding-bottom: var(--space-2xl);\\r\\n}\\r\\n.lq-col-grid[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* Card */\\r\\n.lq-col-card {\\r\\n border-radius: var(--radius-md);\\r\\n border: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n background: var(--bg-neutral-white, #fff);\\r\\n padding: var(--space-md);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 0;\\r\\n cursor: pointer;\\r\\n transition: box-shadow 0.15s ease;\\r\\n}\\r\\n.lq-col-card:hover {\\r\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\\r\\n}\\r\\n.lq-col-card:hover .lq-col-card__btn-del {\\r\\n opacity: 1;\\r\\n}\\r\\n.lq-col-card:active {\\r\\n box-shadow: 0 1px 4px rgba(24, 32, 33, 0.08);\\r\\n transform: scale(0.99);\\r\\n transition: box-shadow 0.08s ease, transform 0.08s ease;\\r\\n}\\r\\n.lq-col-card__header {\\r\\n display: flex;\\r\\n align-items: flex-start;\\r\\n gap: var(--space-xs);\\r\\n margin-bottom: var(--space-xs);\\r\\n}\\r\\n.lq-col-card__icon {\\r\\n flex-shrink: 0;\\r\\n width: 38px;\\r\\n height: 38px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n.lq-col-card__icon svg {\\r\\n display: block;\\r\\n}\\r\\n.lq-col-card__meta {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n padding-top: 2px;\\r\\n}\\r\\n.lq-col-card__title-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n min-width: 0;\\r\\n height: 24px;\\r\\n margin-bottom: 2px;\\r\\n}\\r\\n.lq-col-card__title {\\r\\n font-size: var(--text-h5-size);\\r\\n line-height: var(--text-h5-line-height);\\r\\n font-weight: var(--text-h5-weight);\\r\\n color: var(--font-neutral-black);\\r\\n margin: 0;\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n}\\r\\n.lq-col-card__actions {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: 2px;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n.lq-col-card__btn-del {\\r\\n opacity: 0;\\r\\n transition: opacity 120ms ease;\\r\\n}\\r\\n.lq-col-card__btn-del {\\r\\n color: var(--font-error-muted);\\r\\n background: transparent;\\r\\n}\\r\\n.lq-col-card__btn-del:hover {\\r\\n background: var(--bg-error-lightest);\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n.lq-col-card__btn-del:active {\\r\\n background: var(--bg-error-base-alt);\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n.lq-col-card__date {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n}\\r\\n.lq-col-card__tags {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n flex-wrap: wrap;\\r\\n margin-bottom: var(--space-xs);\\r\\n min-height: 0;\\r\\n}\\r\\n.lq-col-card__body {\\r\\n flex: 1;\\r\\n margin-bottom: var(--space-xs);\\r\\n}\\r\\n.lq-col-card__desc {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n margin: 0;\\r\\n display: -webkit-box;\\r\\n -webkit-line-clamp: 4;\\r\\n -webkit-box-orient: vertical;\\r\\n overflow: hidden;\\r\\n}\\r\\n.lq-col-card__sep {\\r\\n height: 1px;\\r\\n background: var(--stroke-neutral-base, #D9E2E3);\\r\\n margin-bottom: var(--space-xs);\\r\\n}\\r\\n.lq-col-card__footer {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n gap: var(--space-2xs);\\r\\n}\\r\\n.lq-col-card__count {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: 4px;\\r\\n flex-shrink: 0;\\r\\n margin-left: auto;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n.lq-col-card__count svg {\\r\\n display: block;\\r\\n}\\r\\n\\r\\n/* ── Selection bar ── */\\r\\n.lq-col-selbar[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-col-sel-group {\\r\\n flex-shrink: 0;\\r\\n margin-left: auto;\\r\\n}\\r\\n\\r\\n.lq-col-controls:has(.lq-col-selbar:not([hidden])) .lq-col-selbar {\\r\\n margin-left: auto;\\r\\n}\\r\\n.lq-col-controls:has(.lq-col-selbar:not([hidden])) .lq-col-sel-group {\\r\\n margin-left: 0;\\r\\n}\\r\\n\\r\\n.lq-col-selbar {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n}\\r\\n.lq-col-selbar__count {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n}\\r\\n\\r\\n/* ── Selection mode ── */\\r\\n.lq-col-card__checkbox {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-col-grid--selecting .lq-col-card {\\r\\n cursor: pointer;\\r\\n}\\r\\n.lq-col-grid--selecting .lq-col-card .lq-col-card__btn-del {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-col-grid--selecting .lq-col-card .lq-col-card__checkbox {\\r\\n display: inline-flex !important;\\r\\n}\\r\\n.lq-col-grid--selecting .lq-col-card .lq-col-card__actions {\\r\\n opacity: 1;\\r\\n}\\r\\n.lq-col-grid--selecting .lq-col-card--selected {\\r\\n border-color: var(--stroke-primary-base);\\r\\n background: var(--bg-primary-lightest);\\r\\n}\\r\\n/* ════════════════════════════════════════════\\r\\n LIST VIEW\\r\\n════════════════════════════════════════════ */\\r\\n/* Shared column layout — base is 6 cols (no checkbox); select adds the 28px checkbox col */\\r\\n:host {\\r\\n --col-template: minmax(220px, 1fr) 90px 120px 148px minmax(80px, 160px) 64px;\\r\\n --col-template-select: 28px minmax(220px, 1fr) 90px 120px 148px minmax(80px, 160px) 64px;\\r\\n}\\r\\n\\r\\n/* ── Container ── */\\r\\n.lq-col-list {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow-y: auto;\\r\\n gap: var(--space-xs);\\r\\n padding: 0 var(--space-2xs) var(--space-2xl);\\r\\n}\\r\\n.lq-col-list[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* ── Header row ── */\\r\\n.lq-col-list-header {\\r\\n display: grid;\\r\\n grid-template-columns: var(--col-template);\\r\\n align-items: center;\\r\\n column-gap: var(--space-md);\\r\\n padding: var(--space-2xs) var(--space-xs);\\r\\n position: sticky;\\r\\n top: 0;\\r\\n z-index: 2;\\r\\n background: var(--color-bg-main);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-col-list__hdr-cell {\\r\\n font-size: var(--text-p-sm-medium-size);\\r\\n line-height: var(--text-p-sm-medium-line-height);\\r\\n font-weight: var(--text-p-sm-medium-weight);\\r\\n color: var(--font-primary-muted);\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: 4px;\\r\\n white-space: nowrap;\\r\\n}\\r\\n\\r\\n/* Checkbox header cell: hidden until selection mode */\\r\\n.lq-col-list__hdr-cb {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n/* Select-all checkbox: hidden until selection mode */\\r\\n.lq-col-list__select-all {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-col-list--selecting .lq-col-list__select-all {\\r\\n display: inline-flex !important;\\r\\n}\\r\\n\\r\\n/* ── Data row ── */\\r\\n.lq-col-row {\\r\\n display: grid;\\r\\n grid-template-columns: var(--col-template);\\r\\n align-items: center;\\r\\n column-gap: var(--space-md);\\r\\n padding: var(--space-xs) var(--space-xs);\\r\\n border-radius: var(--radius-md);\\r\\n border: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n background: var(--bg-neutral-white);\\r\\n cursor: pointer;\\r\\n transition: box-shadow 0.15s ease, border-color 0.15s ease;\\r\\n}\\r\\n.lq-col-row:hover {\\r\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\\r\\n}\\r\\n.lq-col-row:hover .lq-col-row__btn-del {\\r\\n opacity: 1;\\r\\n}\\r\\n.lq-col-row:active {\\r\\n box-shadow: 0 1px 4px rgba(24, 32, 33, 0.08);\\r\\n transform: scale(0.99);\\r\\n transition: box-shadow 0.08s ease, transform 0.08s ease;\\r\\n}\\r\\n.lq-col-row--selected {\\r\\n border-color: var(--stroke-primary-base);\\r\\n background: var(--bg-primary-lightest);\\r\\n}\\r\\n.lq-col-row[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* ── Checkbox cell: hidden until selection mode ── */\\r\\n.lq-col-row__cb {\\r\\n display: none;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n\\r\\n.lq-col-row__checkbox {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-col-list--selecting .lq-col-list-header {\\r\\n grid-template-columns: var(--col-template-select);\\r\\n}\\r\\n.lq-col-list--selecting .lq-col-list__hdr-cb {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n.lq-col-list--selecting .lq-col-row {\\r\\n grid-template-columns: var(--col-template-select);\\r\\n}\\r\\n.lq-col-list--selecting .lq-col-row .lq-col-row__btn-del {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-col-list--selecting .lq-col-row .lq-col-row__checkbox {\\r\\n display: inline-flex !important;\\r\\n}\\r\\n.lq-col-list--selecting .lq-col-row .lq-col-row__actions {\\r\\n opacity: 1;\\r\\n}\\r\\n.lq-col-list--selecting .lq-col-row__cb {\\r\\n display: flex;\\r\\n animation: lq-cb-appear 180ms ease both;\\r\\n}\\r\\n\\r\\n@keyframes lq-cb-appear {\\r\\n from {\\r\\n opacity: 0;\\r\\n transform: scale(0.75);\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n transform: scale(1);\\r\\n }\\r\\n}\\r\\n/* ── Name cell ── */\\r\\n.lq-col-row__name {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n min-width: 0;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.lq-col-row__icon {\\r\\n flex-shrink: 0;\\r\\n width: 32px;\\r\\n height: 32px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n.lq-col-row__icon svg {\\r\\n display: block;\\r\\n}\\r\\n\\r\\n.lq-col-row__name-block {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 1px;\\r\\n min-width: 0;\\r\\n flex: 1;\\r\\n}\\r\\n\\r\\n.lq-col-row__title {\\r\\n font-size: var(--text-p-base-medium-size);\\r\\n line-height: var(--text-p-base-medium-line-height);\\r\\n font-weight: var(--text-p-base-medium-weight);\\r\\n color: var(--font-neutral-black);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.lq-col-row__desc {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-muted);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n/* ── Content cell ── */\\r\\n.lq-col-row__content {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n white-space: nowrap;\\r\\n}\\r\\n.lq-col-row__content svg {\\r\\n width: 12px;\\r\\n height: 12px;\\r\\n flex-shrink: 0;\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n/* ── Owner/Shared cell ── */\\r\\n.lq-col-row__owner {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n}\\r\\n\\r\\n.lq-col-row__owner-dash {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n/* ── Date cell ── */\\r\\n.lq-col-row__date {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n/* ── Tags cell ── */\\r\\n.lq-col-row__tags {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n overflow: hidden;\\r\\n flex-wrap: nowrap;\\r\\n}\\r\\n\\r\\n/* ── Actions cell ── */\\r\\n.lq-col-row__actions {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: flex-end;\\r\\n gap: 2px;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-col-row__btn-del {\\r\\n color: var(--font-error-muted);\\r\\n background: transparent;\\r\\n opacity: 0;\\r\\n transition: opacity 120ms ease;\\r\\n}\\r\\n.lq-col-row__btn-del:hover {\\r\\n background: var(--bg-error-lightest);\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n.lq-col-row__btn-del:active {\\r\\n background: var(--bg-error-base-alt);\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n\\r\\n@media (max-width: 768px) {\\r\\n .lq-collections-view {\\r\\n padding: var(--space-xs) var(--space-xs) 0;\\r\\n overflow-y: auto;\\r\\n }\\r\\n .lq-col-grid,\\r\\n .lq-col-list {\\r\\n overflow-y: visible;\\r\\n }\\r\\n .lq-col-controls {\\r\\n flex-wrap: wrap;\\r\\n }\\r\\n .lq-col-controls .oc-sb {\\r\\n flex: 1 1 0;\\r\\n min-width: 0;\\r\\n }\\r\\n .lq-col-list-header,\\r\\n .lq-col-row {\\r\\n grid-template-columns: minmax(0, 1fr) auto 80px;\\r\\n }\\r\\n .lq-col-list--selecting .lq-col-list-header,\\r\\n .lq-col-list--selecting .lq-col-row {\\r\\n grid-template-columns: 28px minmax(0, 1fr) auto 80px;\\r\\n }\\r\\n .lq-col-row__icon,\\r\\n .lq-col-row__content,\\r\\n .lq-col-row__date,\\r\\n .lq-col-row__tags {\\r\\n display: none !important;\\r\\n }\\r\\n .lq-col-row__actions {\\r\\n gap: var(--space-3xs);\\r\\n }\\r\\n .lq-col-row__btn-del {\\r\\n opacity: 1 !important;\\r\\n width: var(--row-height-md) !important;\\r\\n height: var(--row-height-md) !important;\\r\\n border-radius: 50% !important;\\r\\n }\\r\\n .lq-col-list__hdr-content,\\r\\n .lq-col-list__hdr-date,\\r\\n .lq-col-list__hdr-tags {\\r\\n display: none !important;\\r\\n }\\r\\n .lq-col-selbar:not([hidden]) {\\r\\n flex-basis: 100%;\\r\\n flex-wrap: wrap;\\r\\n margin-left: 0;\\r\\n order: 2;\\r\\n }\\r\\n .lq-col-sel-group {\\r\\n order: 1;\\r\\n margin-left: auto;\\r\\n }\\r\\n .lq-col-tabs__scroll {\\r\\n overflow-x: auto;\\r\\n scrollbar-width: none;\\r\\n }\\r\\n .lq-col-tabs__scroll::-webkit-scrollbar {\\r\\n display: none;\\r\\n }\\r\\n .lq-col-tabs__scroll .oc-tab-group {\\r\\n min-width: max-content;\\r\\n }\\r\\n .lq-col-card__btn-del {\\r\\n opacity: 1 !important;\\r\\n width: 36px !important;\\r\\n height: 36px !important;\\r\\n border-radius: 50% !important;\\r\\n }\\r\\n .lq-col-card__btn-del svg,\\r\\n .lq-col-card__btn-del i {\\r\\n width: 14px !important;\\r\\n height: 14px !important;\\r\\n }\\r\\n .lq-col-header {\\r\\n flex-direction: column;\\r\\n align-items: stretch;\\r\\n gap: var(--space-xs);\\r\\n margin-bottom: var(--space-3xs);\\r\\n }\\r\\n .lq-col-header__title {\\r\\n order: 2;\\r\\n }\\r\\n .lq-col-header__actions {\\r\\n order: 1;\\r\\n justify-content: space-between;\\r\\n }\\r\\n}\\r\\n\\r\\n/* ── Loading / error states for the initial GET .../container fetch —\\r\\n mirrors .lq-cdv-empty\\'s centered layout (collection-detail-view.css). ── */\\r\\n.lq-col-loading {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n gap: var(--space-xs);\\r\\n padding: var(--space-2xl) var(--space-md);\\r\\n text-align: center;\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n}\\r\\n.lq-col-loading[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-col-loading--error {\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n\\n/* ── Collection detail view ── */\\r\\n.lq-col-detail-view[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-col-detail-view {\\r\\n flex: 1;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow: hidden;\\r\\n padding: var(--space-2xl) var(--space-2xl) var(--space-md);\\r\\n}\\r\\n\\r\\n/* Header */\\r\\n.lq-cdv-header {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n margin-bottom: var(--space-xs);\\r\\n}\\r\\n\\r\\n.lq-cdv-title {\\r\\n font-size: var(--text-h1-size);\\r\\n line-height: var(--text-h1-line-height);\\r\\n font-weight: var(--text-h1-weight);\\r\\n color: var(--font-neutral-black);\\r\\n margin: 0;\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n/* Mobile-only \"more\" button — hidden on desktop where the actions are spelled out */\\r\\n#cdv-more-btn {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n.lq-cdv-actions {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n/* Description */\\r\\n.lq-cdv-desc {\\r\\n font-size: var(--text-h6-size);\\r\\n line-height: var(--text-h6-line-height);\\r\\n font-weight: var(--text-h6-weight);\\r\\n color: var(--font-primary-base);\\r\\n margin: 0 0 var(--space-xs);\\r\\n}\\r\\n\\r\\n/* Tags */\\r\\n.lq-cdv-tags {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n margin: 0 0 var(--space-xl);\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n}\\r\\n\\r\\n.lq-cdv-tags svg {\\r\\n flex-shrink: 0;\\r\\n display: block;\\r\\n}\\r\\n\\r\\n.lq-cdv-tags[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* Controls row — reuses lq-col-controls from collections */\\r\\n.lq-cdv-controls {\\r\\n margin-bottom: var(--space-xs);\\r\\n}\\r\\n\\r\\n/* Transparent wrapper: its children flow as normal flex items of\\r\\n .lq-cdv-controls. Exists only so the markup can separate Upload (which\\r\\n floats to the top on mobile) from the rest of the controls row. */\\r\\n.lq-cdv-controls-rest {\\r\\n display: contents;\\r\\n}\\r\\n\\r\\n/* Explicit order restores the desktop sequence (toggle, search, upload, selbar, select)\\r\\n now that Upload sits outside .lq-cdv-controls-rest in the markup. */\\r\\n.lq-cdv-controls .oc-toggle-group {\\r\\n order: 1;\\r\\n}\\r\\n.lq-cdv-controls .oc-sb {\\r\\n order: 2;\\r\\n}\\r\\n.lq-cdv-controls .lq-cdv-selbar {\\r\\n order: 4;\\r\\n}\\r\\n\\r\\n#col-detail-upload {\\r\\n order: 3;\\r\\n}\\r\\n\\r\\n#col-detail-select-btn {\\r\\n order: 5;\\r\\n}\\r\\n\\r\\n/* File count */\\r\\n.lq-cdv-count {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n margin: 0 0 var(--space-xs);\\r\\n}\\r\\n\\r\\n/* Empty state */\\r\\n.lq-cdv-empty[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-cdv-empty {\\r\\n flex: 1;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n text-align: center;\\r\\n gap: var(--space-xs);\\r\\n padding: var(--space-2xl);\\r\\n}\\r\\n\\r\\n.lq-cdv-empty__icon {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n margin-bottom: var(--space-xs);\\r\\n}\\r\\n.lq-cdv-empty__icon svg {\\r\\n display: block;\\r\\n width: 56px;\\r\\n height: 56px;\\r\\n}\\r\\n\\r\\n.lq-cdv-empty__title {\\r\\n font-size: var(--text-h5-size);\\r\\n line-height: var(--text-h5-line-height);\\r\\n font-weight: var(--text-h5-weight);\\r\\n color: var(--font-primary-dark);\\r\\n margin: 0;\\r\\n}\\r\\n\\r\\n.lq-cdv-empty__sub {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n margin: 0;\\r\\n max-width: 280px;\\r\\n}\\r\\n\\r\\n/* Document grid */\\r\\n.lq-cdv-grid[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-cdv-grid {\\r\\n display: grid;\\r\\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\\r\\n gap: var(--space-md);\\r\\n overflow-y: auto;\\r\\n align-content: start;\\r\\n padding-bottom: var(--space-2xl);\\r\\n}\\r\\n\\r\\n/* Selbar */\\r\\n.lq-cdv-selbar[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-cdv-selbar {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n}\\r\\n\\r\\n.lq-cdv-controls:has(.lq-cdv-selbar:not([hidden])) .lq-cdv-selbar {\\r\\n margin-left: auto;\\r\\n}\\r\\n.lq-cdv-controls:has(.lq-cdv-selbar:not([hidden])) .lq-col-sel-group {\\r\\n margin-left: 0;\\r\\n}\\r\\n\\r\\n/* Document card */\\r\\n.lq-doc-card__checkbox {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-cdv-grid--selecting .lq-doc-card .lq-doc-card__checkbox {\\r\\n display: inline-flex !important;\\r\\n animation: lq-cb-appear 180ms ease both;\\r\\n}\\r\\n.lq-cdv-grid--selecting .lq-doc-card--selected {\\r\\n border-color: var(--stroke-primary-base);\\r\\n background: var(--bg-primary-lightest);\\r\\n}\\r\\n\\r\\n.lq-doc-card {\\r\\n position: relative;\\r\\n border-radius: var(--radius-md);\\r\\n border: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n background: var(--bg-neutral-white);\\r\\n padding: var(--space-md);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n cursor: pointer;\\r\\n transition: box-shadow 0.15s ease;\\r\\n}\\r\\n.lq-doc-card:hover {\\r\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\\r\\n}\\r\\n.lq-doc-card:active {\\r\\n box-shadow: 0 1px 4px rgba(24, 32, 33, 0.08);\\r\\n transform: scale(0.99);\\r\\n transition: box-shadow 0.08s ease, transform 0.08s ease;\\r\\n}\\r\\n\\r\\n.lq-doc-card__icon {\\r\\n width: 36px;\\r\\n height: 36px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n margin-bottom: var(--space-xs);\\r\\n}\\r\\n.lq-doc-card__icon svg {\\r\\n display: block;\\r\\n}\\r\\n\\r\\n.lq-doc-card__name {\\r\\n font-size: var(--text-p-base-medium-size);\\r\\n line-height: var(--text-p-base-medium-line-height);\\r\\n font-weight: var(--text-p-base-medium-weight);\\r\\n color: var(--font-neutral-black);\\r\\n margin-bottom: var(--space-2xs);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.lq-doc-card__size {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n.lq-doc-card__sep {\\r\\n height: 1px;\\r\\n background: var(--stroke-neutral-base, #D9E2E3);\\r\\n margin: var(--space-xs) 0;\\r\\n}\\r\\n\\r\\n.lq-doc-card__footer {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n gap: var(--space-2xs);\\r\\n}\\r\\n\\r\\n.lq-doc-card__date {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-muted);\\r\\n white-space: nowrap;\\r\\n flex-shrink: 0;\\r\\n margin-left: auto;\\r\\n}\\r\\n\\r\\n.lq-doc-card__checkbox {\\r\\n position: absolute;\\r\\n top: var(--space-xs);\\r\\n right: var(--space-xs);\\r\\n}\\r\\n\\r\\n/* Delete button (was the \"more\" menu opener, hence the shared geometry) */\\r\\n.lq-doc-card__btn-del {\\r\\n position: absolute;\\r\\n top: var(--space-xs);\\r\\n right: var(--space-xs);\\r\\n opacity: 0;\\r\\n transition: opacity 0.15s ease;\\r\\n color: var(--font-error-muted);\\r\\n background: transparent;\\r\\n}\\r\\n.lq-doc-card__btn-del:hover {\\r\\n background: var(--bg-error-lightest);\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n.lq-doc-card__btn-del:active {\\r\\n background: var(--bg-error-base-alt);\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n\\r\\n.lq-doc-card:hover .lq-doc-card__btn-del {\\r\\n opacity: 1;\\r\\n}\\r\\n\\r\\n.lq-cdv-grid--selecting .lq-doc-card__btn-del {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* Bubble-out removal animation */\\r\\n@keyframes lq-doc-bubble-out {\\r\\n 0% {\\r\\n transform: scale(1);\\r\\n opacity: 1;\\r\\n }\\r\\n 35% {\\r\\n transform: scale(1.06);\\r\\n opacity: 0.9;\\r\\n }\\r\\n 100% {\\r\\n transform: scale(0.85);\\r\\n opacity: 0;\\r\\n }\\r\\n}\\r\\n.lq-doc-card--bubble-out {\\r\\n animation: lq-doc-bubble-out 350ms cubic-bezier(0.4, 0, 0.8, 0.6) forwards;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n/* Document list view */\\r\\n:host {\\r\\n --doc-col-template: 1fr 160px 72px 140px 36px;\\r\\n --doc-col-template-select: 36px 1fr 160px 72px 140px 36px;\\r\\n}\\r\\n\\r\\n.lq-doc-list {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n overflow-y: auto;\\r\\n gap: var(--space-xs);\\r\\n padding-bottom: var(--space-2xl);\\r\\n}\\r\\n.lq-doc-list[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-doc-list-header {\\r\\n display: grid;\\r\\n grid-template-columns: var(--doc-col-template);\\r\\n align-items: center;\\r\\n column-gap: var(--space-md);\\r\\n padding: var(--space-2xs) var(--space-xs);\\r\\n position: sticky;\\r\\n top: 0;\\r\\n z-index: 2;\\r\\n background: var(--color-bg-main);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-doc-list__hdr-cell {\\r\\n font-size: var(--text-p-sm-medium-size);\\r\\n line-height: var(--text-p-sm-medium-line-height);\\r\\n font-weight: var(--text-p-sm-medium-weight);\\r\\n color: var(--font-primary-muted);\\r\\n white-space: nowrap;\\r\\n}\\r\\n\\r\\n.lq-doc-list__hdr-cb {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n.lq-doc-list__select-all {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-cdv-list--selecting .lq-doc-list__select-all {\\r\\n display: inline-flex !important;\\r\\n}\\r\\n\\r\\n.lq-doc-row {\\r\\n display: grid;\\r\\n grid-template-columns: var(--doc-col-template);\\r\\n align-items: center;\\r\\n column-gap: var(--space-md);\\r\\n padding: var(--space-xs);\\r\\n border-radius: var(--radius-md);\\r\\n border: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n background: var(--bg-neutral-white);\\r\\n cursor: pointer;\\r\\n transition: box-shadow 0.15s ease, border-color 0.15s ease;\\r\\n}\\r\\n.lq-doc-row:hover {\\r\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\\r\\n}\\r\\n.lq-doc-row:active {\\r\\n box-shadow: 0 1px 4px rgba(24, 32, 33, 0.08);\\r\\n transform: scale(0.99);\\r\\n transition: box-shadow 0.08s ease, transform 0.08s ease;\\r\\n}\\r\\n\\r\\n.lq-doc-row__cb {\\r\\n display: none;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n\\r\\n.lq-doc-row__name {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n min-width: 0;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.lq-doc-row__icon {\\r\\n flex-shrink: 0;\\r\\n width: 32px;\\r\\n height: 32px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n.lq-doc-row__icon svg {\\r\\n display: block;\\r\\n}\\r\\n\\r\\n.lq-doc-row__source {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.lq-doc-row__size {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-muted);\\r\\n white-space: nowrap;\\r\\n}\\r\\n\\r\\n.lq-doc-row__date {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.lq-doc-row__actions {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: flex-end;\\r\\n}\\r\\n\\r\\n/* Override absolute positioning from card context */\\r\\n.lq-doc-row .lq-doc-card__btn-del {\\r\\n position: static;\\r\\n}\\r\\n\\r\\n.lq-doc-row:hover .lq-doc-card__btn-del {\\r\\n opacity: 1;\\r\\n}\\r\\n\\r\\n/* List selection mode */\\r\\n.lq-cdv-list--selecting .lq-doc-list-header {\\r\\n grid-template-columns: var(--doc-col-template-select);\\r\\n}\\r\\n.lq-cdv-list--selecting .lq-doc-list__hdr-cb {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n.lq-cdv-list--selecting .lq-doc-row {\\r\\n grid-template-columns: var(--doc-col-template-select);\\r\\n}\\r\\n.lq-cdv-list--selecting .lq-doc-row .lq-doc-card__btn-del {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-cdv-list--selecting .lq-doc-row__cb {\\r\\n display: flex;\\r\\n animation: lq-cb-appear 180ms ease both;\\r\\n}\\r\\n\\r\\n.lq-doc-row.lq-doc-card--selected {\\r\\n border-color: var(--stroke-primary-base);\\r\\n background: var(--bg-primary-lightest);\\r\\n}\\r\\n\\r\\n/* ── Share collection modal ── */\\r\\n.lq-col-share-modal {\\r\\n width: 520px;\\r\\n overflow: visible; /* allow perm dropdown to escape without being clipped */\\r\\n}\\r\\n\\r\\n.lq-col-share-body {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-md);\\r\\n}\\r\\n\\r\\n.lq-col-share-search-wrap {\\r\\n display: flex;\\r\\n align-items: flex-start;\\r\\n gap: var(--space-xs);\\r\\n}\\r\\n\\r\\n.lq-col-share-input-anchor {\\r\\n position: relative;\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.lq-col-share-dropdown {\\r\\n position: absolute;\\r\\n top: calc(100% + 4px);\\r\\n left: 0;\\r\\n right: 0;\\r\\n z-index: 10;\\r\\n background: var(--bg-neutral-white);\\r\\n border: 1px solid var(--stroke-neutral-base);\\r\\n border-radius: var(--radius-md);\\r\\n box-shadow: 0 4px 6px -2px rgba(45, 57, 58, 0.05), 0 10px 15px -3px rgba(45, 57, 58, 0.1);\\r\\n max-height: 220px;\\r\\n overflow-y: auto;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n padding: var(--space-2xs);\\r\\n gap: var(--space-3xs);\\r\\n}\\r\\n.lq-col-share-dropdown[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-col-share-option {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n padding: var(--space-xs);\\r\\n border-radius: var(--radius-sm);\\r\\n cursor: pointer;\\r\\n}\\r\\n.lq-col-share-option:hover {\\r\\n background: var(--bg-primary-lightest);\\r\\n}\\r\\n\\r\\n.lq-col-share-option__info {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.lq-col-share-option__name {\\r\\n font-size: var(--text-p-base-medium-size);\\r\\n line-height: var(--text-p-base-medium-line-height);\\r\\n font-weight: var(--text-p-base-medium-weight);\\r\\n color: var(--font-neutral-black);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.lq-col-share-option__email {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-muted);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n/* Permission button wrapper — positions the dropdown relative to the button */\\r\\n.lq-col-share-perm-wrap {\\r\\n position: relative;\\r\\n flex-shrink: 0;\\r\\n margin-left: auto;\\r\\n}\\r\\n\\r\\n/* Permission button pressed state when dropdown is open */\\r\\n.lq-col-share-perm-btn[aria-expanded=true] {\\r\\n background: var(--bg-secondary-light) !important;\\r\\n color: var(--font-secondary-pressed) !important;\\r\\n}\\r\\n\\r\\n/* Permission dropdown — matches lq-agent-menu style */\\r\\n.lq-col-share-perm-dropdown {\\r\\n position: absolute;\\r\\n top: calc(100% + 4px);\\r\\n right: 0;\\r\\n z-index: 500;\\r\\n width: 260px;\\r\\n background: var(--bg-neutral-white);\\r\\n border: 1px solid var(--stroke-neutral-white);\\r\\n border-radius: var(--radius-lg);\\r\\n box-shadow: 0 4px 6px -2px rgba(45, 57, 58, 0.05), 0 10px 15px -3px rgba(45, 57, 58, 0.1);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n padding: var(--space-2xs);\\r\\n gap: var(--space-3xs);\\r\\n}\\r\\n.lq-col-share-perm-dropdown[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-col-share-perm-dropdown .oc-list-item {\\r\\n height: auto;\\r\\n padding: var(--space-xs);\\r\\n align-items: flex-start;\\r\\n}\\r\\n.lq-col-share-perm-dropdown .oc-list-item-subtext {\\r\\n white-space: normal;\\r\\n overflow: visible;\\r\\n text-overflow: clip;\\r\\n}\\r\\n\\r\\n/* ── Edit collection modal ── */\\r\\n.lq-col-edit-modal {\\r\\n width: 520px;\\r\\n}\\r\\n\\r\\n.lq-col-edit-body {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-md);\\r\\n}\\r\\n\\r\\n.lq-col-edit-desc-wrap {\\r\\n flex-direction: column;\\r\\n align-items: stretch;\\r\\n}\\r\\n\\r\\n.lq-col-edit-desc-wrap .oc-input-counter {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n align-self: flex-end;\\r\\n margin-top: var(--space-3xs);\\r\\n}\\r\\n\\r\\n/* Tag input */\\r\\n.lq-tag-input {\\r\\n display: flex;\\r\\n flex-wrap: wrap;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n border: 1px solid var(--stroke-primary-light);\\r\\n background: var(--bg-neutral-white);\\r\\n border-radius: var(--radius-sm);\\r\\n padding: var(--space-xs) var(--space-md);\\r\\n min-height: 36px;\\r\\n cursor: text;\\r\\n box-sizing: border-box;\\r\\n width: 100%;\\r\\n transition: border-color 0.15s ease, background-color 0.15s ease;\\r\\n}\\r\\n.lq-tag-input:hover:not(:focus-within) {\\r\\n border-color: var(--stroke-primary-hovered);\\r\\n background-color: var(--bg-primary-lighter);\\r\\n}\\r\\n.lq-tag-input:focus-within {\\r\\n border: 2px solid var(--stroke-primary-pressed);\\r\\n padding: calc(var(--space-xs) - 1px) calc(var(--space-md) - 1px);\\r\\n}\\r\\n\\r\\n.lq-tag-input__chip {\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-tag-input__input {\\r\\n flex: 1;\\r\\n min-width: 80px;\\r\\n border: none;\\r\\n background: transparent;\\r\\n font-family: \"Hanken Grotesk\", sans-serif;\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n color: var(--font-primary-base);\\r\\n line-height: 1.4;\\r\\n padding: 0;\\r\\n outline: none;\\r\\n}\\r\\n.lq-tag-input__input::placeholder {\\r\\n color: var(--font-primary-muted);\\r\\n}\\r\\n\\r\\n.lq-tag-input__remove {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n background: none;\\r\\n border: none;\\r\\n padding: 0 0 0 2px;\\r\\n cursor: pointer;\\r\\n color: inherit;\\r\\n line-height: 1;\\r\\n opacity: 0.6;\\r\\n}\\r\\n.lq-tag-input__remove svg {\\r\\n display: block;\\r\\n width: 10px;\\r\\n height: 10px;\\r\\n}\\r\\n.lq-tag-input__remove:hover {\\r\\n opacity: 1;\\r\\n}\\r\\n\\r\\n/* Doc card context menu */\\r\\n.lq-doc-menu[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-doc-menu {\\r\\n position: fixed;\\r\\n z-index: 300;\\r\\n border-radius: var(--radius-lg);\\r\\n border: 1px solid var(--stroke-neutral-white);\\r\\n background: var(--bg-neutral-white);\\r\\n box-shadow: 0 4px 6px -2px rgba(45, 57, 58, 0.05), 0 10px 15px -3px rgba(45, 57, 58, 0.1);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-3xs);\\r\\n padding: var(--space-2xs);\\r\\n width: 200px;\\r\\n}\\r\\n\\r\\n/* ── Access list (people with access) ── */\\r\\n.lq-col-share-access-list {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n max-height: 208px;\\r\\n overflow-y: auto;\\r\\n}\\r\\n/* Locked while an immediate role-change/remove PUT is in flight (ES-32687) */\\r\\n.lq-col-share-access-list--busy {\\r\\n opacity: 0.6;\\r\\n pointer-events: none;\\r\\n}\\r\\n\\r\\n/* Search-as-you-type transient states (loading/empty/error) */\\r\\n.lq-col-share-dropdown-status {\\r\\n padding: var(--space-xs) var(--space-sm);\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n color: var(--font-neutral-muted);\\r\\n}\\r\\n.lq-col-share-dropdown-status--error {\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n\\r\\n/* Size the group icon SVG correctly inside the small avatar */\\r\\n.lq-col-share-member-row .oc-avatar-icon svg,\\r\\n.lq-col-share-option .oc-avatar-icon svg {\\r\\n width: 12px;\\r\\n height: 12px;\\r\\n}\\r\\n\\r\\n.lq-col-share-option-secondary {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-muted);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.lq-col-share-member-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n padding: var(--space-2xs) 0;\\r\\n}\\r\\n\\r\\n.lq-col-share-member-name {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-neutral-black);\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n.lq-col-share-member-name--pending {\\r\\n color: var(--font-neutral-muted);\\r\\n}\\r\\n\\r\\n.lq-col-share-member-perm-label {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-black);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-col-share-confirm-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n gap: var(--space-xs);\\r\\n padding: var(--space-2xs) 0;\\r\\n}\\r\\n\\r\\n.lq-col-share-confirm-text {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-base);\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.lq-col-share-confirm-actions {\\r\\n display: flex;\\r\\n gap: var(--space-2xs);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n/* Per-row permission button */\\r\\n.lq-col-share-member-perm-wrap {\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-col-share-member-perm-btn[aria-expanded=true] {\\r\\n background: var(--bg-secondary-light) !important;\\r\\n color: var(--font-secondary-pressed) !important;\\r\\n}\\r\\n\\r\\n/* Portal dropdown — direct child of modal, escapes access-list overflow */\\r\\n.lq-col-share-member-portal {\\r\\n position: absolute;\\r\\n z-index: 600;\\r\\n width: 160px;\\r\\n background: var(--bg-neutral-white);\\r\\n border: 1px solid var(--stroke-neutral-white);\\r\\n border-radius: var(--radius-lg);\\r\\n box-shadow: 0 4px 6px -2px rgba(45, 57, 58, 0.05), 0 10px 15px -3px rgba(45, 57, 58, 0.1);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n padding: var(--space-2xs);\\r\\n gap: var(--space-3xs);\\r\\n}\\r\\n.lq-col-share-member-portal[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-col-share-member-portal .oc-list-item {\\r\\n height: auto;\\r\\n padding: var(--space-2xs) var(--space-xs);\\r\\n align-items: center;\\r\\n}\\r\\n.lq-col-share-member-portal .oc-list-item.lq-list-item--danger.oc-list-item-pressed {\\r\\n background-color: var(--bg-error-base-alt);\\r\\n}\\r\\n\\r\\n/* ── Upload Documents modal ── */\\r\\n.lq-upload-modal {\\r\\n width: 560px;\\r\\n}\\r\\n\\r\\n.lq-upload-body {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-md);\\r\\n}\\r\\n\\r\\n.lq-upload-dropzone {\\r\\n /* SVG dashed border — controls dash size/gap, rounded corners, color */\\r\\n background-image: url(\"data:image/svg+xml,%3csvg width=\\'100%25\\' height=\\'100%25\\' xmlns=\\'http://www.w3.org/2000/svg\\'%3e%3crect width=\\'100%25\\' height=\\'100%25\\' fill=\\'none\\' rx=\\'16\\' ry=\\'16\\' stroke=\\'%23A9C1B8\\' stroke-width=\\'2\\' stroke-dasharray=\\'8%2c 6\\' stroke-linecap=\\'round\\'/%3e%3c/svg%3e\");\\r\\n border-radius: var(--radius-lg);\\r\\n padding: var(--space-4xl) var(--space-xl);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n gap: var(--space-2xs);\\r\\n cursor: pointer;\\r\\n transition: background-color 0.15s ease;\\r\\n outline: none;\\r\\n}\\r\\n.lq-upload-dropzone:hover, .lq-upload-dropzone:focus-visible, .lq-upload-dropzone--dragover {\\r\\n background-image: url(\"data:image/svg+xml,%3csvg width=\\'100%25\\' height=\\'100%25\\' xmlns=\\'http://www.w3.org/2000/svg\\'%3e%3crect width=\\'100%25\\' height=\\'100%25\\' fill=\\'none\\' rx=\\'16\\' ry=\\'16\\' stroke=\\'%23445556\\' stroke-width=\\'2\\' stroke-dasharray=\\'8%2c 6\\' stroke-linecap=\\'round\\'/%3e%3c/svg%3e\");\\r\\n background-color: var(--bg-primary-lightest);\\r\\n}\\r\\n\\r\\n.lq-upload-dropzone__main {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-neutral-base);\\r\\n margin: 0;\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\n.lq-upload-dropzone__browse {\\r\\n color: var(--font-secondary-base);\\r\\n font-weight: 500;\\r\\n}\\r\\n\\r\\n/* Upload status indicator */\\r\\n.lq-doc-status {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-secondary-base);\\r\\n white-space: nowrap;\\r\\n flex-shrink: 0;\\r\\n margin-left: auto;\\r\\n display: inline-flex;\\r\\n align-items: baseline;\\r\\n gap: 0;\\r\\n}\\r\\n\\r\\n.lq-doc-status--row {\\r\\n margin-left: 0;\\r\\n}\\r\\n\\r\\n.lq-doc-status__dots {\\r\\n display: inline-flex;\\r\\n gap: 1px;\\r\\n}\\r\\n.lq-doc-status__dots span {\\r\\n display: inline-block;\\r\\n opacity: 0;\\r\\n animation: lq-dot-appear 1.4s infinite;\\r\\n}\\r\\n.lq-doc-status__dots span::after {\\r\\n content: \".\";\\r\\n}\\r\\n.lq-doc-status__dots span:nth-child(1) {\\r\\n animation-delay: 0s;\\r\\n}\\r\\n.lq-doc-status__dots span:nth-child(2) {\\r\\n animation-delay: 0.2s;\\r\\n}\\r\\n.lq-doc-status__dots span:nth-child(3) {\\r\\n animation-delay: 0.4s;\\r\\n}\\r\\n\\r\\n@keyframes lq-dot-appear {\\r\\n 0%, 60%, 100% {\\r\\n opacity: 0;\\r\\n }\\r\\n 30% {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n.lq-doc-uploaded-tag .oc-tag-icon svg {\\r\\n width: 12px;\\r\\n height: 12px;\\r\\n}\\r\\n\\r\\n.lq-upload-error {\\r\\n background: var(--bg-error-lightest);\\r\\n border: 1px solid var(--stroke-error-base);\\r\\n border-radius: var(--radius-md);\\r\\n padding: var(--space-xs) var(--space-md);\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-error-base);\\r\\n line-height: 1.6;\\r\\n}\\r\\n.lq-upload-error[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-upload-file-list {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-2xs);\\r\\n max-height: 280px;\\r\\n overflow-y: auto;\\r\\n}\\r\\n.lq-upload-file-list[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-upload-file-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n padding: var(--space-2xs) var(--space-2xs);\\r\\n border: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n border-radius: var(--radius-md);\\r\\n background: var(--bg-neutral-white);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-upload-file-row__name {\\r\\n font-size: var(--text-p-base-regular-size);\\r\\n line-height: var(--text-p-base-regular-line-height);\\r\\n font-weight: var(--text-p-base-regular-weight);\\r\\n color: var(--font-neutral-black);\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n/* Upload progress tracker (fixed bottom-right panel) */\\r\\n.lq-upload-tracker {\\r\\n position: fixed;\\r\\n bottom: var(--space-xl);\\r\\n right: var(--space-xl);\\r\\n width: 360px;\\r\\n background: var(--bg-neutral-white);\\r\\n border: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n border-radius: var(--radius-lg);\\r\\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.06), 0 16px 32px rgba(0, 0, 0, 0.1);\\r\\n z-index: 2000;\\r\\n overflow: hidden;\\r\\n transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\\r\\n}\\r\\n.lq-upload-tracker[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* Peek strip — shown when minimized, peeks above viewport bottom */\\r\\n.lq-upload-tracker__peek {\\r\\n position: absolute;\\r\\n top: 0;\\r\\n left: 0;\\r\\n right: 0;\\r\\n height: 44px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n padding: 0 var(--space-md);\\r\\n background: var(--bg-primary-lightest);\\r\\n border-radius: var(--radius-lg) var(--radius-lg) 0 0;\\r\\n cursor: pointer;\\r\\n opacity: 0;\\r\\n pointer-events: none;\\r\\n transition: opacity 0.2s ease;\\r\\n z-index: 2;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__peek-spinner {\\r\\n flex-shrink: 0;\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n border-radius: 50%;\\r\\n border: 2px solid var(--bg-primary-light, #D1E1DD);\\r\\n border-top-color: var(--stroke-secondary-base, #235944);\\r\\n animation: lq-spin 0.85s linear infinite;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__peek-check-icon,\\r\\n.lq-upload-tracker__peek-error-icon {\\r\\n display: none;\\r\\n flex-shrink: 0;\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker--peek-success .lq-upload-tracker__peek-spinner {\\r\\n display: none;\\r\\n}\\r\\n.lq-upload-tracker--peek-success .lq-upload-tracker__peek-check-icon {\\r\\n display: inline-flex;\\r\\n color: var(--font-success-base, #16A34A);\\r\\n}\\r\\n\\r\\n.lq-upload-tracker--peek-error .lq-upload-tracker__peek-spinner {\\r\\n display: none;\\r\\n}\\r\\n.lq-upload-tracker--peek-error .lq-upload-tracker__peek-error-icon {\\r\\n display: inline-flex;\\r\\n color: var(--font-error-base, #DC2626);\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__peek-text {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-black);\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n transition: opacity 0.15s ease, transform 0.15s ease;\\r\\n}\\r\\n.lq-upload-tracker__peek-text--hidden {\\r\\n opacity: 0;\\r\\n transform: translateY(-5px);\\r\\n}\\r\\n.lq-upload-tracker__peek-text--from-below {\\r\\n opacity: 0;\\r\\n transform: translateY(5px);\\r\\n}\\r\\n.lq-upload-tracker__peek-text--success {\\r\\n color: var(--font-success-base, #16A34A);\\r\\n font-weight: 500;\\r\\n}\\r\\n.lq-upload-tracker__peek-text--error {\\r\\n color: var(--font-error-base, #DC2626);\\r\\n font-weight: 500;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__peek-hint {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-muted);\\r\\n flex-shrink: 0;\\r\\n opacity: 0;\\r\\n transform: translateX(6px);\\r\\n transition: opacity 0.2s ease 0.1s, transform 0.2s ease 0.1s;\\r\\n}\\r\\n\\r\\n/* Minimized state — slides down-right, peek strip visible at bottom corner */\\r\\n.lq-upload-tracker--minimized {\\r\\n transform: translate(140px, calc(var(--space-xl) + 100% - 44px));\\r\\n cursor: pointer;\\r\\n}\\r\\n.lq-upload-tracker--minimized .lq-upload-tracker__inline-body {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-upload-tracker--minimized .lq-upload-tracker__peek {\\r\\n opacity: 1;\\r\\n pointer-events: auto;\\r\\n}\\r\\n.lq-upload-tracker--minimized .lq-upload-tracker__peek:hover .lq-upload-tracker__peek-hint {\\r\\n opacity: 1;\\r\\n transform: translateX(0);\\r\\n}\\r\\n.lq-upload-tracker--minimized.lq-upload-tracker--minimized-hover {\\r\\n transform: translate(0, 0);\\r\\n transition: transform 0.3s ease-out;\\r\\n}\\r\\n.lq-upload-tracker--minimized.lq-upload-tracker--minimized-hover .lq-upload-tracker__peek {\\r\\n opacity: 0;\\r\\n pointer-events: none;\\r\\n}\\r\\n.lq-upload-tracker--minimized.lq-upload-tracker--minimized-hover .lq-upload-tracker__btns button {\\r\\n opacity: 0;\\r\\n pointer-events: none;\\r\\n}\\r\\n.lq-upload-tracker--minimized.lq-upload-tracker--minimized-hover .lq-upload-tracker__pin-hint {\\r\\n opacity: 1;\\r\\n}\\r\\n\\r\\n/* Header: always visible, neutral bg + bottom border */\\r\\n.lq-upload-tracker__header {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n padding: var(--space-xs) var(--space-md);\\r\\n background: var(--bg-primary-lightest);\\r\\n border-bottom: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__spinner {\\r\\n flex-shrink: 0;\\r\\n width: 20px;\\r\\n height: 20px;\\r\\n border-radius: 50%;\\r\\n border: 2px solid var(--bg-primary-light, #D1E1DD);\\r\\n border-top-color: var(--stroke-secondary-base, #235944);\\r\\n animation: lq-spin 0.85s linear infinite;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__done-icon {\\r\\n display: none;\\r\\n flex-shrink: 0;\\r\\n width: 20px;\\r\\n height: 20px;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n color: var(--font-success-base, #16A34A);\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__info {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 1px;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__name {\\r\\n font-size: var(--text-p-base-medium-size);\\r\\n line-height: var(--text-p-base-medium-line-height);\\r\\n font-weight: var(--text-p-base-medium-weight);\\r\\n color: var(--font-neutral-black);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__count {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-muted);\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__btns {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n flex-shrink: 0;\\r\\n position: relative;\\r\\n}\\r\\n.lq-upload-tracker__btns button {\\r\\n transition: opacity 0.15s ease;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__pin-hint {\\r\\n position: absolute;\\r\\n right: 0;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-primary-base);\\r\\n white-space: nowrap;\\r\\n opacity: 0;\\r\\n pointer-events: none;\\r\\n transition: opacity 0.2s ease;\\r\\n}\\r\\n\\r\\n/* Collapsed body: compact inline stats row */\\r\\n.lq-upload-tracker__inline-body {\\r\\n padding: var(--space-xs) var(--space-md);\\r\\n}\\r\\n.lq-upload-tracker__inline-body[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__inline-stats {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__inline-stat {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n gap: 5px;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-muted);\\r\\n white-space: nowrap;\\r\\n}\\r\\n.lq-upload-tracker__inline-stat[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-upload-tracker__inline-stat svg {\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n.lq-upload-tracker__inline-stat .lq-doc-status__dots {\\r\\n display: inline-flex;\\r\\n gap: 1px;\\r\\n}\\r\\n.lq-upload-tracker__inline-stat .lq-doc-status__dots span {\\r\\n display: inline-block;\\r\\n opacity: 0;\\r\\n animation: lq-dot-appear 1.4s infinite;\\r\\n}\\r\\n.lq-upload-tracker__inline-stat .lq-doc-status__dots span::after {\\r\\n content: \".\";\\r\\n}\\r\\n.lq-upload-tracker__inline-stat .lq-doc-status__dots span:nth-child(1) {\\r\\n animation-delay: 0s;\\r\\n}\\r\\n.lq-upload-tracker__inline-stat .lq-doc-status__dots span:nth-child(2) {\\r\\n animation-delay: 0.2s;\\r\\n}\\r\\n.lq-upload-tracker__inline-stat .lq-doc-status__dots span:nth-child(3) {\\r\\n animation-delay: 0.4s;\\r\\n}\\r\\n\\r\\n.lq-upload-tracker__inline-sep {\\r\\n width: 1px;\\r\\n height: 14px;\\r\\n background: var(--stroke-neutral-base, #D9E2E3);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n.lq-upload-tracker__inline-sep[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* Expanded body: dynamic sections */\\r\\n.lq-upload-tracker__detail-body[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.lq-ut-section {\\r\\n padding: var(--space-xs) var(--space-md);\\r\\n}\\r\\n.lq-ut-section + .lq-ut-section {\\r\\n border-top: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n}\\r\\n\\r\\n.lq-ut-section__row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n}\\r\\n\\r\\n.lq-ut-section__icon {\\r\\n flex-shrink: 0;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n color: var(--font-neutral-muted);\\r\\n}\\r\\n.lq-ut-section__icon svg {\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n}\\r\\n\\r\\n.lq-ut-section__title {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-black);\\r\\n white-space: nowrap;\\r\\n display: inline-flex;\\r\\n align-items: baseline;\\r\\n gap: 0;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n.lq-ut-section__title .lq-doc-status__dots {\\r\\n display: inline-flex;\\r\\n gap: 1px;\\r\\n}\\r\\n.lq-ut-section__title .lq-doc-status__dots span {\\r\\n display: inline-block;\\r\\n opacity: 0;\\r\\n animation: lq-dot-appear 1.4s infinite;\\r\\n}\\r\\n.lq-ut-section__title .lq-doc-status__dots span::after {\\r\\n content: \".\";\\r\\n}\\r\\n.lq-ut-section__title .lq-doc-status__dots span:nth-child(1) {\\r\\n animation-delay: 0s;\\r\\n}\\r\\n.lq-ut-section__title .lq-doc-status__dots span:nth-child(2) {\\r\\n animation-delay: 0.2s;\\r\\n}\\r\\n.lq-ut-section__title .lq-doc-status__dots span:nth-child(3) {\\r\\n animation-delay: 0.4s;\\r\\n}\\r\\n\\r\\n.lq-ut-section__bar {\\r\\n flex: 1;\\r\\n height: 6px;\\r\\n border-radius: var(--radius-rounded);\\r\\n background: var(--bg-primary-lighter);\\r\\n overflow: hidden;\\r\\n min-width: 0;\\r\\n}\\r\\n\\r\\n.lq-ut-section__bar-fill {\\r\\n height: 100%;\\r\\n border-radius: var(--radius-rounded);\\r\\n background: var(--bg-primary-base);\\r\\n transition: width 0.4s ease;\\r\\n}\\r\\n\\r\\n.lq-ut-section__toggle {\\r\\n flex-shrink: 0;\\r\\n}\\r\\n.lq-ut-section__toggle svg {\\r\\n transition: transform 0.25s ease;\\r\\n}\\r\\n.lq-ut-section__toggle--open svg {\\r\\n transform: rotate(-180deg);\\r\\n}\\r\\n\\r\\n.lq-ut-section__docs {\\r\\n overflow: hidden;\\r\\n max-height: 0;\\r\\n opacity: 0;\\r\\n padding-top: 0;\\r\\n transition: max-height 0.3s ease, opacity 0.25s ease, padding-top 0.3s ease;\\r\\n}\\r\\n.lq-ut-section__docs--open {\\r\\n max-height: 600px;\\r\\n opacity: 1;\\r\\n padding-top: var(--space-2xs);\\r\\n}\\r\\n\\r\\n.lq-ut-doc-row {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-xs);\\r\\n padding: var(--space-2xs) 0;\\r\\n}\\r\\n.lq-ut-doc-row + .lq-ut-doc-row {\\r\\n border-top: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n}\\r\\n\\r\\n.lq-ut-doc-row__icon {\\r\\n flex-shrink: 0;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n}\\r\\n.lq-ut-doc-row__icon svg {\\r\\n width: 28px;\\r\\n height: 28px;\\r\\n}\\r\\n\\r\\n.lq-ut-doc-row__name {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-black);\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.lq-ut-doc-row__pct {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-muted);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n/* Doc row status icon (replaces % for done/error) */\\r\\n.lq-ut-doc-row__status {\\r\\n flex-shrink: 0;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n}\\r\\n.lq-ut-doc-row__status svg {\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n}\\r\\n.lq-ut-doc-row__status--done {\\r\\n color: var(--font-success-base, #16A34A);\\r\\n}\\r\\n.lq-ut-doc-row__status--error {\\r\\n color: var(--font-error-base, #DC2626);\\r\\n}\\r\\n\\r\\n/* Multi-collection groups in expanded view */\\r\\n/* Collection pagination nav (multi-collection expanded view) */\\r\\n.lq-ut-col-nav {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n padding: var(--space-2xs) var(--space-xs);\\r\\n border-bottom: 1px solid var(--stroke-neutral-base, #D9E2E3);\\r\\n background: var(--bg-neutral-lightest, #F9FAFB);\\r\\n}\\r\\n\\r\\n.lq-ut-col-nav__label {\\r\\n font-size: var(--text-p-sm-medium-size);\\r\\n line-height: var(--text-p-sm-medium-line-height);\\r\\n font-weight: var(--text-p-sm-medium-weight);\\r\\n flex: 1;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n gap: var(--space-2xs);\\r\\n min-width: 0;\\r\\n color: var(--font-neutral-black);\\r\\n overflow: hidden;\\r\\n white-space: nowrap;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.lq-ut-col-nav__page {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-muted);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-ut-col-nav--done {\\r\\n background: var(--bg-success-lightest, #F0FDF4);\\r\\n justify-content: center;\\r\\n}\\r\\n\\r\\n.lq-ut-col-nav__done-msg {\\r\\n font-size: var(--text-p-sm-medium-size);\\r\\n line-height: var(--text-p-sm-medium-line-height);\\r\\n font-weight: var(--text-p-sm-medium-weight);\\r\\n color: var(--font-success-base, #16A34A);\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-2xs);\\r\\n}\\r\\n\\r\\n/* Done section */\\r\\n.lq-ut-section--done .lq-ut-section__icon {\\r\\n color: var(--font-success-base, #16A34A);\\r\\n}\\r\\n.lq-ut-section--done .lq-ut-section__badge {\\r\\n background: var(--bg-success-base, #DCFCE7);\\r\\n color: var(--font-success-base, #16A34A);\\r\\n}\\r\\n\\r\\n/* Error section */\\r\\n.lq-ut-section--error {\\r\\n background: var(--bg-error-lightest, #FEF2F2);\\r\\n}\\r\\n.lq-ut-section--error .lq-ut-section__icon {\\r\\n color: var(--font-error-base, #DC2626);\\r\\n}\\r\\n.lq-ut-section--error .lq-ut-section__title {\\r\\n color: var(--font-error-base, #DC2626);\\r\\n}\\r\\n.lq-ut-section--error .lq-ut-section__badge {\\r\\n background: var(--bg-error-lighter, #FECACA);\\r\\n color: var(--font-error-base, #DC2626);\\r\\n}\\r\\n\\r\\n.lq-ut-doc-row--error .lq-ut-doc-row__name {\\r\\n color: var(--font-error-base, #DC2626);\\r\\n}\\r\\n\\r\\n/* Done inline stat */\\r\\n.lq-upload-tracker__inline-stat--done {\\r\\n color: var(--font-success-base, #16A34A);\\r\\n}\\r\\n.lq-upload-tracker__inline-stat--done[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* Error inline stat */\\r\\n.lq-upload-tracker__inline-stat--error {\\r\\n color: var(--font-error-base, #DC2626);\\r\\n}\\r\\n.lq-upload-tracker__inline-stat--error[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* Peek error state */\\r\\n.lq-upload-tracker--has-errors .lq-upload-tracker__peek {\\r\\n background: var(--bg-error-lightest, #FEF2F2);\\r\\n}\\r\\n.lq-upload-tracker--has-errors .lq-upload-tracker__peek .lq-upload-tracker__peek-spinner {\\r\\n border-color: var(--bg-error-lighter, #FECACA);\\r\\n border-top-color: var(--font-error-base, #DC2626);\\r\\n}\\r\\n\\r\\n/* X button on completed doc rows — always visible */\\r\\n.lq-ut-doc-row__remove {\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n/* \"Complete\" text label in done rows */\\r\\n.lq-ut-doc-row__done-label {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-success-base, #16A34A);\\r\\n flex-shrink: 0;\\r\\n white-space: nowrap;\\r\\n}\\r\\n\\r\\n/* Why a file failed or will not be indexed (job errors[].error /\\r\\n rejected[].reason). Shrinks before the file name does, and truncates -- the\\r\\n full text is on the row\\'s title attribute. */\\r\\n.lq-ut-doc-row__msg {\\r\\n font-size: var(--text-p-xs-regular-size);\\r\\n line-height: var(--text-p-xs-regular-line-height);\\r\\n color: var(--font-neutral-muted);\\r\\n flex: 0 1 auto;\\r\\n min-width: 0;\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n/* Flash the file count green when a doc completes */\\r\\n.lq-upload-tracker__count--flash {\\r\\n color: var(--font-success-base, #16A34A) !important;\\r\\n font-weight: 500;\\r\\n transition: color 0.2s ease;\\r\\n}\\r\\n\\r\\n/* All-done state — green header banner */\\r\\n.lq-upload-tracker--all-done .lq-upload-tracker__header {\\r\\n background: var(--bg-success-lightest, #F0FDF4);\\r\\n}\\r\\n.lq-upload-tracker--all-done .lq-upload-tracker__spinner {\\r\\n display: none;\\r\\n}\\r\\n.lq-upload-tracker--all-done .lq-upload-tracker__done-icon {\\r\\n display: inline-flex;\\r\\n}\\r\\n.lq-upload-tracker--all-done .lq-upload-tracker__inline-body,\\r\\n.lq-upload-tracker--all-done .lq-upload-tracker__detail-body {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-upload-tracker--all-done .lq-upload-tracker__count {\\r\\n color: var(--font-success-base, #16A34A);\\r\\n font-weight: 500;\\r\\n}\\r\\n.lq-upload-tracker--all-done .lq-upload-tracker__peek {\\r\\n background: var(--bg-success-lightest, #F0FDF4);\\r\\n}\\r\\n.lq-upload-tracker--all-done .lq-upload-tracker__peek .lq-upload-tracker__peek-spinner {\\r\\n border-color: var(--bg-success-lighter, #BBF7D0);\\r\\n border-top-color: var(--font-success-base, #16A34A);\\r\\n}\\r\\n\\r\\n/* Per-collection completion flash (multi-collection only) */\\r\\n.lq-upload-tracker--col-complete .lq-upload-tracker__header {\\r\\n background: var(--bg-success-lightest, #F0FDF4);\\r\\n}\\r\\n.lq-upload-tracker--col-complete .lq-upload-tracker__spinner {\\r\\n display: none;\\r\\n}\\r\\n.lq-upload-tracker--col-complete .lq-upload-tracker__done-icon {\\r\\n display: inline-flex;\\r\\n}\\r\\n.lq-upload-tracker--col-complete .lq-upload-tracker__name {\\r\\n color: var(--font-success-base, #16A34A);\\r\\n}\\r\\n.lq-upload-tracker--col-complete .lq-upload-tracker__count {\\r\\n color: var(--font-success-base, #16A34A);\\r\\n font-weight: 500;\\r\\n}\\r\\n.lq-upload-tracker--col-complete .lq-upload-tracker__inline-body {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* Dismissing animation */\\r\\n.lq-upload-tracker--dismissing {\\r\\n opacity: 0 !important;\\r\\n transform: translateY(12px) scale(0.96) !important;\\r\\n transition: opacity 0.3s ease, transform 0.3s ease !important;\\r\\n pointer-events: none !important;\\r\\n}\\r\\n\\r\\n/* Tracker header chevron rotation */\\r\\n#ut-collapse-btn svg {\\r\\n transition: transform 0.25s ease;\\r\\n transform: rotate(180deg);\\r\\n}\\r\\n\\r\\n.lq-upload-tracker--expanded #ut-collapse-btn svg {\\r\\n transform: rotate(0deg);\\r\\n}\\r\\n\\r\\n.lq-upload-tracker--all-done #ut-collapse-btn {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n/* Hide tracker while user is inside a collection detail view.\\r\\n Was `body.lq-in-col-detail #lq-upload-tracker` (a host-page <body> class) —\\r\\n rewritten to a scoped :has() check since #col-detail-view is now a sibling\\r\\n inside this component\\'s own shadow root. */\\r\\n:host(:has(#col-detail-view:not([hidden]))) #lq-upload-tracker {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* ── Mobile responsiveness ── */\\r\\n@media (max-width: 768px) {\\r\\n .lq-col-share-modal,\\r\\n .lq-col-edit-modal,\\r\\n .lq-upload-modal {\\r\\n width: calc(100vw - var(--space-md) * 2);\\r\\n max-height: 90vh;\\r\\n overflow-y: auto;\\r\\n }\\r\\n /* Upload floats top-right above the normal flow, so it doesn\\'t have to move\\r\\n out of .lq-cdv-controls (which would change its desktop position). */\\r\\n .lq-col-detail-view {\\r\\n position: relative;\\r\\n padding: calc(var(--row-height-md) + var(--space-xs) * 2) var(--space-xs) 0;\\r\\n overflow-y: auto;\\r\\n }\\r\\n #col-detail-upload {\\r\\n position: absolute;\\r\\n top: var(--space-xs);\\r\\n right: var(--space-xs);\\r\\n }\\r\\n /* Header: Delete/Share/Edit collapse into a \"more\" menu button that sits\\r\\n on the title row (back stays next to the title, as on desktop). */\\r\\n .lq-cdv-header {\\r\\n flex-wrap: wrap;\\r\\n gap: var(--space-xs);\\r\\n }\\r\\n .lq-cdv-actions {\\r\\n display: none;\\r\\n }\\r\\n #cdv-more-btn {\\r\\n display: flex;\\r\\n order: 4;\\r\\n }\\r\\n #col-detail-back {\\r\\n order: 2;\\r\\n }\\r\\n .lq-cdv-title {\\r\\n order: 3;\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n }\\r\\n .lq-cdv-grid,\\r\\n .lq-doc-list {\\r\\n overflow-y: visible;\\r\\n }\\r\\n /* Order must be after #col-detail-select-btn (order: 5) so the Cancel\\r\\n button stays on the toggle/search line while the selbar wraps below it. */\\r\\n .lq-cdv-selbar:not([hidden]) {\\r\\n flex-basis: 100%;\\r\\n flex-wrap: wrap;\\r\\n margin-left: 0;\\r\\n order: 6;\\r\\n }\\r\\n .lq-doc-list-header,\\r\\n .lq-doc-row {\\r\\n grid-template-columns: minmax(0, 1fr) auto var(--row-height-md);\\r\\n }\\r\\n .lq-cdv-list--selecting .lq-doc-list-header,\\r\\n .lq-cdv-list--selecting .lq-doc-row {\\r\\n grid-template-columns: 28px minmax(0, 1fr) auto var(--row-height-md);\\r\\n }\\r\\n .lq-doc-row__size,\\r\\n .lq-doc-row__date {\\r\\n display: none !important;\\r\\n }\\r\\n .lq-doc-list__hdr-size,\\r\\n .lq-doc-list__hdr-date {\\r\\n display: none !important;\\r\\n }\\r\\n .lq-doc-card__btn-del {\\r\\n opacity: 1 !important;\\r\\n width: 36px !important;\\r\\n height: 36px !important;\\r\\n border-radius: 50% !important;\\r\\n }\\r\\n .lq-doc-card__btn-del svg, .lq-doc-card__btn-del i {\\r\\n width: 14px !important;\\r\\n height: 14px !important;\\r\\n }\\r\\n}\\r\\n\\n/* ── Collection doc preview panel ── */\\r\\n.lq-cdp.lq-detail-panel--open {\\r\\n width: 40%;\\r\\n min-width: 280px;\\r\\n}\\r\\n\\r\\n.lq-cdp.lq-cdp--with-passages.lq-detail-panel--open {\\r\\n width: 60%;\\r\\n}\\r\\n\\r\\n/* ── Passages sidebar — active only when opened from message resources ── */\\r\\n.lq-cdp--with-passages .lq-dp-doc-preview__body {\\r\\n flex-direction: row;\\r\\n overflow: hidden;\\r\\n padding-top: 0;\\r\\n}\\r\\n\\r\\n.lq-cdp--with-passages .lq-dp-doc-preview__pages {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n overflow-y: auto;\\r\\n padding-top: var(--space-lg);\\r\\n}\\r\\n\\r\\n.lq-passages-sidebar {\\r\\n width: 260px;\\r\\n flex-shrink: 0;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n border-right: 1px solid var(--stroke-neutral-white);\\r\\n background: var(--bg-neutral-white);\\r\\n overflow: hidden;\\r\\n transition: width 0.2s ease;\\r\\n}\\r\\n.lq-passages-sidebar[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n.lq-passages-sidebar--collapsed {\\r\\n width: 40px;\\r\\n}\\r\\n.lq-passages-sidebar--collapsed .lq-passages-sidebar__full {\\r\\n display: none;\\r\\n}\\r\\n.lq-passages-sidebar--collapsed .lq-passages-sidebar__collapsed-strip {\\r\\n display: flex;\\r\\n}\\r\\n\\r\\n.lq-passages-sidebar__full {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n height: 100%;\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.lq-passages-sidebar__collapsed-strip {\\r\\n display: none;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n padding-top: var(--space-xs);\\r\\n height: 100%;\\r\\n}\\r\\n\\r\\n.lq-passages-sidebar__header {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n padding: var(--space-md) var(--space-xs) var(--space-xs) var(--space-md);\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-passages-sidebar__title {\\r\\n font-size: var(--text-p-base-medium-size);\\r\\n line-height: var(--text-p-base-medium-line-height);\\r\\n font-weight: var(--text-p-base-medium-weight);\\r\\n color: var(--font-neutral-black);\\r\\n}\\r\\n\\r\\n.lq-passages-sidebar__list {\\r\\n flex: 1;\\r\\n overflow-y: auto;\\r\\n padding: var(--space-2xs) var(--space-xs) var(--space-md);\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: var(--space-2xs);\\r\\n}\\r\\n\\r\\n/* Passage text highlight inside doc pages */\\r\\n.lq-passage-highlight {\\r\\n background: var(--bg-primary-lighter);\\r\\n border-radius: 2px;\\r\\n padding: 1px 0;\\r\\n color: inherit;\\r\\n}\\r\\n\\r\\n/* Passage items use oc-list-item system */\\r\\n.lq-passages-sidebar__item.oc-list-item {\\r\\n align-items: flex-start;\\r\\n height: auto;\\r\\n min-height: unset;\\r\\n}\\r\\n.lq-passages-sidebar__item.oc-list-item .oc-list-item-text {\\r\\n white-space: normal;\\r\\n overflow: hidden;\\r\\n text-overflow: unset;\\r\\n display: -webkit-box;\\r\\n -webkit-box-orient: vertical;\\r\\n -webkit-line-clamp: 3;\\r\\n color: var(--font-neutral-black);\\r\\n}\\r\\n.lq-passages-sidebar__item.oc-list-item .oc-list-item-subtext {\\r\\n white-space: normal;\\r\\n color: var(--font-primary-base);\\r\\n}\\r\\n\\r\\n/* Active card/row state while its preview is open */\\r\\n.lq-doc-card--preview-active {\\r\\n border-color: var(--stroke-primary-base) !important;\\r\\n background: var(--bg-primary-lightest) !important;\\r\\n}\\r\\n\\r\\n.lq-doc-row--preview-active {\\r\\n border-color: var(--stroke-primary-base) !important;\\r\\n background: var(--bg-primary-lightest) !important;\\r\\n}\\r\\n\\n/* Collections\\' own top-level rules. Concatenated after every vendor partial by\\r\\n scripts/generate-css.mjs — see that file for the full ordering (tokens,\\r\\n then generic oc-* components, then Collections\\' view-specific styles). */\\r\\n\\r\\n:host {\\r\\n display: flex;\\r\\n position: relative;\\r\\n flex: 1;\\r\\n overflow: hidden;\\r\\n background: var(--color-bg-main);\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n}\\r\\n\\r\\n/* This single stylesheet is adopted into all 3 elements\\' shadow roots (see\\r\\n internal/styles.ts) — <lexiq-collections> legitimately wants the\\r\\n overflow:hidden above (it owns real scrollable panels), but\\r\\n <lexiq-collection-picker> isn\\'t a layout host: it\\'s just an anchor point\\r\\n for floating Save/Move cards, often with zero intrinsic size on a host\\r\\n page (see its file header). Without this override, that overflow:hidden\\r\\n silently clips its own popover cards entirely whenever the anchor element\\r\\n has little/no box of its own — the common case. */\\r\\n:host(lexiq-collection-picker) {\\r\\n overflow: visible;\\r\\n}\\r\\n\\r\\n/* Overlay layer for floating popovers (Save/Move-to-collection cards) that\\r\\n need an appendChild target living inside the shadow root (to inherit\\r\\n adoptedStyleSheets) whose bounding box still matches the host element. */\\r\\n.lq-picker-container {\\r\\n position: absolute;\\r\\n inset: 0;\\r\\n pointer-events: none;\\r\\n z-index: 15;\\r\\n\\r\\n > * { pointer-events: auto; }\\r\\n}\\r\\n\\r\\n/* Search-match highlight, emitted by internal/dom-utils.ts highlightSubstring()\\r\\n for collection and document names. Matches the treatment the vendored\\r\\n mark.lq-dp-search-highlight already uses in generic-detail-panel.css, kept\\r\\n under a name of our own rather than reusing a detail-panel class. The\\r\\n translucent wash plus color:inherit means it reads correctly over both the\\r\\n light and the [theme=\"dark\"] backgrounds without a dark-mode override. */\\r\\nmark.lq-search-highlight {\\r\\n background: rgba(234, 179, 8, 0.25);\\r\\n color: inherit;\\r\\n border-radius: 2px;\\r\\n padding: 0 1px;\\r\\n}\\r\\n\\r\\n/* Upload tracker — connection / session banner (#ut-conn).\\r\\n Hand-written rather than appended to vendor/collection-detail-view.css: that\\r\\n file is vendored from lexiq-prototype and its header says so, so authoring new\\r\\n rules inside it would blur what came from the prototype and what did not. It\\r\\n is concatenated before this file (see scripts/generate-css.mjs), so these\\r\\n rules still land after every tracker rule they sit next to. */\\r\\n.lq-ut-conn {\\r\\n display: flex;\\r\\n align-items: flex-start;\\r\\n gap: var(--space-2xs);\\r\\n padding: var(--space-2xs) var(--space-md);\\r\\n background: var(--bg-error-lightest);\\r\\n border-bottom: 1px solid var(--stroke-error-base);\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n.lq-ut-conn[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* injectIcons() REPLACES the <i data-icon> with the raw <svg>, so the box that\\r\\n carries the layout has to be the wrapping span, not the icon element. */\\r\\n.lq-ut-conn__icon {\\r\\n flex-shrink: 0;\\r\\n display: inline-flex;\\r\\n width: 16px;\\r\\n height: 16px;\\r\\n /* Nudged onto the title\\'s baseline — the icon box is shorter than the line. */\\r\\n margin-top: 2px;\\r\\n}\\r\\n\\r\\n.lq-ut-conn__text {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 1px;\\r\\n}\\r\\n\\r\\n.lq-ut-conn__title {\\r\\n font-size: var(--text-p-sm-medium-size);\\r\\n line-height: var(--text-p-sm-medium-line-height);\\r\\n font-weight: var(--text-p-sm-medium-weight);\\r\\n color: var(--font-error-base);\\r\\n}\\r\\n\\r\\n.lq-ut-conn__detail,\\r\\n.lq-ut-conn__countdown {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n font-weight: var(--text-p-sm-regular-weight);\\r\\n color: var(--font-neutral-muted);\\r\\n}\\r\\n.lq-ut-conn__detail:empty,\\r\\n.lq-ut-conn__countdown:empty {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n/* The countdown changes every second; tabular figures keep it from jittering\\r\\n the line width as digits change. */\\r\\n.lq-ut-conn__countdown {\\r\\n font-variant-numeric: tabular-nums;\\r\\n}\\r\\n\\r\\n.lq-ut-conn__retry {\\r\\n flex-shrink: 0;\\r\\n align-self: center;\\r\\n}\\r\\n.lq-ut-conn__retry[hidden] {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n/* While the connection is down the header spinner is claiming progress that is\\r\\n not happening — freeze it rather than remove it, so the layout does not jump. */\\r\\n.lq-upload-tracker--offline .lq-upload-tracker__spinner,\\r\\n.lq-upload-tracker--offline .lq-upload-tracker__peek-spinner {\\r\\n animation-play-state: paused;\\r\\n border-top-color: var(--stroke-error-base);\\r\\n}\\r\\n\\r\\n/* ── Document preview body ──────────────────────────────────────────────────\\r\\n #cdp-preview-pages holds one of two bodies: the locally-built PAGES sheets\\r\\n (vendored .lq-dp-doc-preview__page rules in generic-detail-panel.css), or an\\r\\n <iframe> on the converted copy the preview web service returns for a real\\r\\n document. The vendored container centres fixed-width sheets with a gap\\r\\n between them — the wrong box for a frame that should simply fill the panel,\\r\\n hence a modifier here rather than an edit to the vendored rule. */\\r\\n.lq-dp-doc-preview__pages--frame {\\r\\n flex: 1;\\r\\n min-height: 0;\\r\\n padding: 0;\\r\\n gap: 0;\\r\\n align-items: stretch;\\r\\n}\\r\\n\\r\\n.lq-dp-doc-preview__frame {\\r\\n flex: 1;\\r\\n min-height: 0;\\r\\n width: 100%;\\r\\n border: 0;\\r\\n /* Paper, like the .lq-dp-doc-preview__page sheets it replaces: a converted\\r\\n document brings no background of its own, and stays white in both themes. */\\r\\n background: #fff;\\r\\n}\\r\\n\\r\\n/* Shown in place of the document while the rendition loads, and when there is\\r\\n none to show. */\\r\\n.lq-dp-doc-preview__message {\\r\\n margin: auto;\\r\\n padding: var(--space-2xl) var(--space-md);\\r\\n color: var(--font-neutral-muted);\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\n/* Wrapper introduced in internal/template.ts so the page-navigation subset of\\r\\n the toolbar can be hidden as a group; it has to reproduce the flex row that\\r\\n vendored .lq-dp-doc-preview__doc-controls gave those children directly. */\\r\\n.lq-dp-doc-preview__page-nav {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n}\\r\\n.lq-dp-doc-preview__page-nav[hidden] {\\r\\n display: none;\\r\\n}\\r\\n\\r\\n/* ── People picker (internal/principal-picker.ts) ───────────────────────────\\r\\n The control reuses the vendored .lq-tag-input box and .lq-col-share-*\\r\\n dropdown rules; these are the parts that did not exist before it was shared\\r\\n between the share modal and the add/edit collection modal. Hand-written\\r\\n here rather than appended to vendor/collection-detail-view.css, which is\\r\\n vendored from lexiq-prototype — see the .lq-ut-conn block above for the\\r\\n same reasoning. */\\r\\n\\r\\n/* Role badge inside a chip: a two-value toggle (Owner ⇄ Reader), so it has to\\r\\n read as pressable without becoming a second button-sized target next to the\\r\\n remove control. */\\r\\n.lq-tag-input__role {\\r\\n border: none;\\r\\n background: none;\\r\\n padding: 0 0 0 var(--space-3xs);\\r\\n margin-left: var(--space-3xs);\\r\\n border-left: 1px solid var(--stroke-neutral-base);\\r\\n font-family: \\'Hanken Grotesk\\', sans-serif;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: 1;\\r\\n color: var(--font-neutral-muted);\\r\\n cursor: pointer;\\r\\n}\\r\\n.lq-tag-input__role:hover {\\r\\n color: var(--font-neutral-black);\\r\\n}\\r\\n.lq-tag-input__role:focus-visible {\\r\\n outline: 2px solid var(--stroke-primary-pressed);\\r\\n outline-offset: 1px;\\r\\n border-radius: 2px;\\r\\n}\\r\\n\\r\\n/* Keyboard-highlighted result. .lq-col-share-option:hover already covers the\\r\\n pointer; this is the same treatment driven by the arrow keys. */\\r\\n.lq-col-share-option--active {\\r\\n background: var(--bg-primary-lightest);\\r\\n outline: 1px solid var(--stroke-primary-light);\\r\\n}\\r\\n\\r\\n/* \"(you)\" marker — its own element beside the name, never folded into it, so\\r\\n it stays out of avatar initials and out of interpolated messages. Mirrors\\r\\n agent-builder\\'s ab-edit-access-user. */\\r\\n.lq-col-share-member-you {\\r\\n color: var(--font-neutral-muted);\\r\\n font-weight: 400;\\r\\n}\\r\\n\\r\\n/* ── Access list rows ───────────────────────────────────────────────────────\\r\\n Shaped after agent-builder\\'s ab-edit-access-user: avatar, then a two-line\\r\\n block (name over email), then the role. */\\r\\n.lq-col-share-member-info {\\r\\n flex: 1;\\r\\n min-width: 0;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n}\\r\\n\\r\\n.lq-col-share-member-email {\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n color: var(--font-neutral-muted);\\r\\n white-space: nowrap;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n/* The role next to a row that has no menu (the creator, and your own row):\\r\\n same crown/eye + label as the button it stands in for. */\\r\\n.lq-col-share-member-perm-label {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n gap: var(--space-3xs);\\r\\n}\\r\\n\\r\\n/* injectIcons() swaps <i data-icon> for the raw <svg>, so size the svg. */\\r\\n.lq-col-share-member-perm-label svg,\\r\\n.lq-col-share-member-perm-btn svg {\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.lq-col-share-access-count {\\r\\n margin: 0;\\r\\n font-size: var(--text-p-sm-regular-size);\\r\\n line-height: var(--text-p-sm-regular-line-height);\\r\\n color: var(--font-neutral-muted);\\r\\n}\\r\\n\\r\\n/* Stable wrapper for the role button\\'s crown/eye — injectIcons() replaces the\\r\\n <i> it contains, so the marker can\\'t live on the icon element itself. */\\r\\n.lq-col-share-perm-icon {\\r\\n display: inline-flex;\\r\\n align-items: center;\\r\\n}\\r\\n.lq-col-share-perm-icon svg {\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n}\\r\\n.oc-list-item-left > svg {\\r\\n width: 14px;\\r\\n height: 14px;\\r\\n flex-shrink: 0;\\r\\n}\\r\\n';\n","// Wraps the generated CSS (produced at build time by scripts/generate-css.mjs\n// from src/vendor/**/*.css + src/styles/entry.css) into a single shared CSSStyleSheet, so every\n// shadow root in this library (the 3 custom elements + the shared overlay\n// root) can adopt the *same* parsed sheet instead of re-parsing/cloning a\n// <style> tag per instance.\nimport { CSS_TEXT } from \"../generated/styles.css\";\n\nfunction buildSheet(): CSSStyleSheet | null {\n if (typeof CSSStyleSheet === \"undefined\" || !(\"adoptedStyleSheets\" in Document.prototype)) {\n return null;\n }\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(CSS_TEXT);\n return sheet;\n}\n\nexport const STYLE_SHEET = buildSheet();\n\nexport function adoptStylesInto(shadowRoot: ShadowRoot): void {\n if (STYLE_SHEET) {\n shadowRoot.adoptedStyleSheets = [...(shadowRoot.adoptedStyleSheets || []), STYLE_SHEET];\n } else {\n const style = document.createElement(\"style\");\n style.textContent = CSS_TEXT;\n shadowRoot.appendChild(style);\n }\n}\n","// Sub-registry of LQ_ICONS (lexiq-prototype js/icons.js) — only the icons used by Collections.\n// Generated by extraction script, then hand-verified; edit here or regenerate from the source registry.\nexport const ICONS: Record<string, string> = {\n \"bookmark-plus-reg\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4.1998 1.40039C3.42762 1.40039 2.7998 2.0282 2.7998 2.80039V11.9245C2.7998 12.4845 3.42324 12.817 3.88918 12.5063L6.9998 10.4304L10.1104 12.5063C10.5764 12.817 11.1998 12.4823 11.1998 11.9245V2.80039C11.1998 2.0282 10.572 1.40039 9.7998 1.40039H4.1998ZM3.8498 2.80039C3.8498 2.60789 4.0073 2.45039 4.1998 2.45039H9.7998C9.9923 2.45039 10.1498 2.60789 10.1498 2.80039V11.2704L7.58168 9.55977C7.22949 9.3257 6.77012 9.3257 6.41793 9.55977L3.8498 11.2704V2.80039ZM6.9998 3.85039C6.70887 3.85039 6.4748 4.08445 6.4748 4.37539V5.42539H5.4248C5.13387 5.42539 4.8998 5.65945 4.8998 5.95039C4.8998 6.24133 5.13387 6.47539 5.4248 6.47539H6.4748V7.52539C6.4748 7.81633 6.70887 8.05039 6.9998 8.05039C7.29074 8.05039 7.5248 7.81633 7.5248 7.52539V6.47539H8.5748C8.86574 6.47539 9.0998 6.24133 9.0998 5.95039C9.0998 5.65945 8.86574 5.42539 8.5748 5.42539H7.5248V4.37539C7.5248 4.08445 7.29074 3.85039 6.9998 3.85039Z\" fill=\"currentColor\"/>\n</svg>`,\n \"btn-add\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M7 2.5V11.5M2.5 7H11.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n</svg>`,\n \"btn-check\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M11.681 2.89926C11.9172 3.06769 11.9697 3.39582 11.8013 3.63207L6.02629 11.6821C5.9366 11.8068 5.7966 11.8877 5.64348 11.8986C5.49035 11.9096 5.33723 11.8571 5.22785 11.7477L2.25285 8.77269C2.04723 8.56707 2.04723 8.23457 2.25285 8.03113C2.45848 7.82769 2.79098 7.82551 2.99441 8.03113L5.5341 10.5664L10.9482 3.01957C11.1166 2.78332 11.4447 2.73082 11.681 2.89926Z\" fill=\"currentColor\"/>\n</svg>`,\n \"checkbox-check\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\n <path d=\"M8.5 2L4 7.5 1.5 5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n</svg>`,\n \"checkbox-minus\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 12 12\" fill=\"currentColor\">\n <path d=\"M2 6h8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"/>\n</svg>`,\n \"chevron-down\": `<svg class=\"lq-chevron\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M7.3828 9.47186C7.17718 9.67749 6.84468 9.67749 6.64124 9.47186L3.13905 5.97186C2.93343 5.76624 2.93343 5.43374 3.13905 5.2303C3.34468 5.02686 3.67718 5.02467 3.88061 5.2303L7.00874 8.35842L10.1369 5.2303C10.3425 5.02467 10.675 5.02467 10.8784 5.2303C11.0819 5.43592 11.0841 5.76842 10.8784 5.97186L7.37843 9.47186H7.3828Z\" fill=\"currentColor\"/>\n</svg>`,\n \"chevron-left\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M5.51409 7.56885C5.27307 7.80735 5.27307 8.193 5.51409 8.42896L9.61668 12.4884C9.8577 12.7269 10.2475 12.7269 10.4859 12.4884C10.7244 12.25 10.7269 11.8643 10.4859 11.6283L6.81924 8.00018L10.4859 4.37201C10.7269 4.13351 10.7269 3.74786 10.4859 3.51191C10.2449 3.27595 9.85514 3.27341 9.61668 3.51191L5.51409 7.56885Z\" fill=\"currentColor\"/>\n</svg>`,\n \"chevron-right\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M10.4859 7.56885C10.7269 7.80735 10.7269 8.193 10.4859 8.42896L6.38332 12.4884C6.1423 12.7269 5.75255 12.7269 5.51409 12.4884C5.27563 12.25 5.27307 11.8643 5.51409 11.6283L9.18076 8.00018L5.51409 4.37201C5.27307 4.13351 5.27307 3.74786 5.51409 3.51191C5.75512 3.27595 6.14486 3.27341 6.38332 3.51191L10.4859 7.56885Z\" fill=\"currentColor\"/>\n</svg>`,\n \"chevron-up\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6.62153 4.84792C6.83021 4.63924 7.16766 4.63924 7.37412 4.84792L10.9262 8.39997C11.1349 8.60865 11.1349 8.9461 10.9262 9.15256C10.7175 9.35902 10.38 9.36124 10.1736 9.15256L6.99893 5.97791L3.82429 9.15256C3.6156 9.36124 3.27816 9.36124 3.0717 9.15256C2.86523 8.94388 2.86301 8.60643 3.0717 8.39997L6.62375 4.84792H6.62153Z\" fill=\"currentColor\"/></svg>`,\n crown: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M11.562 3.266a.5.5 0 0 1 .876 0L15.39 8.87a1 1 0 0 0 1.516.294L21.183 5.5a.5.5 0 0 1 .798.519l-2.834 10.246a1 1 0 0 1-.956.734H5.81a1 1 0 0 1-.957-.734L2.02 6.02a.5.5 0 0 1 .798-.519l4.276 3.664a1 1 0 0 0 1.516-.294z\"/>\n <path d=\"M5 21h14\"/>\n</svg>`,\n eye: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n</svg>`,\n \"chip-close\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M2.96403 3.69656L6.26707 7.00003L2.96403 10.303C2.74553 10.5215 2.74553 10.8775 2.96403 11.096C3.18253 11.3145 3.53853 11.3145 3.75703 11.096L7.06007 7.79253L10.3631 11.096C10.5816 11.3145 10.9376 11.3145 11.1561 11.096C11.3746 10.8775 11.3746 10.5215 11.1561 10.303L7.85307 7.00003L11.1561 3.69656C11.3746 3.47806 11.3746 3.12206 11.1561 2.90356C10.9376 2.68506 10.5816 2.68506 10.3631 2.90356L7.06007 6.20703L3.75703 2.90356C3.53853 2.68506 3.18253 2.68506 2.96403 2.90356C2.74553 3.12206 2.74553 3.47806 2.96403 3.69656Z\" fill=\"currentColor\"/>\n</svg>`,\n \"col-arrow-left\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.3536 3.64645C10.5488 3.84171 10.5488 4.15829 10.3536 4.35355L6.70711 8L10.3536 11.6464C10.5488 11.8417 10.5488 12.1583 10.3536 12.3536C10.1583 12.5488 9.84171 12.5488 9.64645 12.3536L5.64645 8.35355C5.45118 8.15829 5.45118 7.84171 5.64645 7.64645L9.64645 3.64645C9.84171 3.45118 10.1583 3.45118 10.3536 3.64645Z\" fill=\"currentColor\"/></svg>`,\n \"col-doc-csv\": `<svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"36\" height=\"36\" rx=\"8\" fill=\"#E5EEE3\"/><path d=\"M14.4234 9.75182H10.3358C10.0146 9.75182 9.75182 10.0146 9.75182 10.3358V24.3504C9.75182 24.6715 10.0146 24.9343 10.3358 24.9343H13.2555V26.6861H10.3358C9.04745 26.6861 8 25.6387 8 24.3504V10.3358C8 9.04745 9.04745 8 10.3358 8H15.208C15.8285 8 16.4234 8.24453 16.8613 8.68248L21.3321 13.1569C21.7701 13.5949 22.0146 14.1898 22.0146 14.8102V20.2664H20.2628V15.5949H17.0511C15.5985 15.5949 14.4234 14.4197 14.4234 12.9672V9.75547V9.75182ZM19.5365 13.8394L16.1752 10.4781V12.9635C16.1752 13.4489 16.5657 13.8394 17.0511 13.8394H19.5365ZM16.4672 21.8686H17.0511C17.938 21.8686 18.6569 22.5876 18.6569 23.4745V23.7664C18.6569 24.1679 18.3285 24.4963 17.927 24.4963C17.5255 24.4963 17.1971 24.1679 17.1971 23.7664V23.4745C17.1971 23.3942 17.1314 23.3285 17.0511 23.3285H16.4672C16.3869 23.3285 16.3212 23.3942 16.3212 23.4745V26.3942C16.3212 26.4745 16.3869 26.5401 16.4672 26.5401H17.0511C17.1314 26.5401 17.1971 26.4745 17.1971 26.3942V26.1022C17.1971 25.7007 17.5255 25.3723 17.927 25.3723C18.3285 25.3723 18.6569 25.7007 18.6569 26.1022V26.3942C18.6569 27.281 17.938 28 17.0511 28H16.4672C15.5803 28 14.8613 27.281 14.8613 26.3942V23.4745C14.8613 22.5876 15.5803 21.8686 16.4672 21.8686ZM21.4307 21.8686H22.3066C22.708 21.8686 23.0365 22.1971 23.0365 22.5985C23.0365 23 22.708 23.3285 22.3066 23.3285H21.4307C21.1898 23.3285 20.9927 23.5255 20.9927 23.7664C20.9927 24.0073 21.1898 24.2044 21.4307 24.2044C22.4781 24.2044 23.3285 25.0547 23.3285 26.1022C23.3285 27.1496 22.4781 28 21.4307 28H20.2628C19.8613 28 19.5328 27.6715 19.5328 27.2701C19.5328 26.8686 19.8613 26.5401 20.2628 26.5401H21.4307C21.6715 26.5401 21.8686 26.3431 21.8686 26.1022C21.8686 25.8613 21.6715 25.6642 21.4307 25.6642C20.3832 25.6642 19.5328 24.8139 19.5328 23.7664C19.5328 22.719 20.3832 21.8686 21.4307 21.8686ZM24.9343 21.8686C25.3358 21.8686 25.6642 22.1971 25.6642 22.5985V23.7518C25.6642 24.4672 25.8139 25.1715 26.1022 25.8212C26.3905 25.1715 26.5401 24.4672 26.5401 23.7518V22.5985C26.5401 22.1971 26.8686 21.8686 27.2701 21.8686C27.6715 21.8686 28 22.1971 28 22.5985V23.7518C28 25.0474 27.6168 26.3175 26.8978 27.3942L26.7117 27.6752C26.5766 27.8796 26.3467 28 26.1058 28C25.865 28 25.635 27.8796 25.5 27.6752L25.3139 27.3942C24.5949 26.3139 24.2117 25.0474 24.2117 23.7518V22.5985C24.2117 22.1971 24.5401 21.8686 24.9416 21.8686H24.9343Z\" fill=\"#3E6936\"/></g></svg>`,\n \"col-doc-doc\": `<svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"36\" height=\"36\" rx=\"8\" fill=\"#E2EDF4\"/><path d=\"M14.4234 9.75182H10.3358C10.0146 9.75182 9.75182 10.0146 9.75182 10.3358V24.3504C9.75182 24.6715 10.0146 24.9343 10.3358 24.9343H13.2555V26.6861H10.3358C9.04745 26.6861 8 25.6387 8 24.3504V10.3358C8 9.04745 9.04745 8 10.3358 8H15.208C15.8285 8 16.4234 8.24453 16.8613 8.68248L21.3321 13.1569C21.7701 13.5949 22.0146 14.1898 22.0146 14.8102V20.2664H20.2628V15.5949H17.0511C15.5985 15.5949 14.4234 14.4197 14.4234 12.9672V9.75547V9.75182ZM19.5365 13.8394L16.1752 10.4781V12.9635C16.1752 13.4489 16.5657 13.8394 17.0511 13.8394H19.5365ZM15.5912 21.8686H16.7591C17.8066 21.8686 18.6569 22.719 18.6569 23.7664V26.1022C18.6569 27.1496 17.8066 28 16.7591 28H15.5912C15.1898 28 14.8613 27.6715 14.8613 27.2701V22.5985C14.8613 22.1971 15.1898 21.8686 15.5912 21.8686ZM16.7591 26.5401C17 26.5401 17.1971 26.3431 17.1971 26.1022V23.7664C17.1971 23.5255 17 23.3285 16.7591 23.3285H16.3212V26.5401H16.7591ZM21.1387 21.8686H21.7226C22.6095 21.8686 23.3285 22.5876 23.3285 23.4745V26.3942C23.3285 27.281 22.6095 28 21.7226 28H21.1387C20.2518 28 19.5328 27.281 19.5328 26.3942V23.4745C19.5328 22.5876 20.2518 21.8686 21.1387 21.8686ZM20.9927 23.4745V26.3942C20.9927 26.4745 21.0584 26.5401 21.1387 26.5401H21.7226C21.8029 26.5401 21.8686 26.4745 21.8686 26.3942V23.4745C21.8686 23.3942 21.8029 23.3285 21.7226 23.3285H21.1387C21.0584 23.3285 20.9927 23.3942 20.9927 23.4745ZM24.2044 23.4745C24.2044 22.5876 24.9234 21.8686 25.8102 21.8686H26.3942C27.281 21.8686 28 22.5876 28 23.4745V23.7664C28 24.1679 27.6715 24.4963 27.2701 24.4963C26.8686 24.4963 26.5401 24.1679 26.5401 23.7664V23.4745C26.5401 23.3942 26.4745 23.3285 26.3942 23.3285H25.8102C25.7299 23.3285 25.6642 23.3942 25.6642 23.4745V26.3942C25.6642 26.4745 25.7299 26.5401 25.8102 26.5401H26.3942C26.4745 26.5401 26.5401 26.4745 26.5401 26.3942V26.1022C26.5401 25.7007 26.8686 25.3723 27.2701 25.3723C27.6715 25.3723 28 25.7007 28 26.1022V26.3942C28 27.281 27.281 28 26.3942 28H25.8102C24.9234 28 24.2044 27.281 24.2044 26.3942V23.4745Z\" fill=\"#45677E\"/></g></svg>`,\n \"col-doc-pdf\": `<svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"36\" height=\"36\" rx=\"8\" fill=\"#FFDEDF\"/><path d=\"M14.6165 9.75182H10.406C10.0752 9.75182 9.80451 10.0146 9.80451 10.3358V24.3504C9.80451 24.6715 10.0752 24.9343 10.406 24.9343H13.4135V26.6861H10.406C9.07895 26.6861 8 25.6387 8 24.3504V10.3358C8 9.04745 9.07895 8 10.406 8H15.4248C16.0639 8 16.6767 8.24453 17.1278 8.68248L21.7331 13.1569C22.1842 13.5949 22.4361 14.1898 22.4361 14.8102V20.2664H20.6316V15.5949H17.3233C15.8271 15.5949 14.6165 14.4197 14.6165 12.9672V9.75547V9.75182ZM19.8835 13.8394L16.4211 10.4781V12.9635C16.4211 13.4489 16.8233 13.8394 17.3233 13.8394H19.8835ZM15.8195 21.8686H17.0226C18.2669 21.8686 19.2782 22.8504 19.2782 24.0584C19.2782 25.2664 18.2669 26.2482 17.0226 26.2482H16.5714V27.2701C16.5714 27.6715 16.2331 28 15.8195 28C15.406 28 15.0677 27.6715 15.0677 27.2701V22.5985C15.0677 22.1971 15.406 21.8686 15.8195 21.8686ZM17.0226 24.7883C17.4361 24.7883 17.7744 24.4599 17.7744 24.0584C17.7744 23.6569 17.4361 23.3285 17.0226 23.3285H16.5714V24.7883H17.0226ZM20.6316 21.8686H21.8346C22.9135 21.8686 23.7895 22.719 23.7895 23.7664V26.1022C23.7895 27.1496 22.9135 28 21.8346 28H20.6316C20.218 28 19.8797 27.6715 19.8797 27.2701V22.5985C19.8797 22.1971 20.218 21.8686 20.6316 21.8686ZM21.8346 26.5401C22.0827 26.5401 22.2857 26.3431 22.2857 26.1022V23.7664C22.2857 23.5255 22.0827 23.3285 21.8346 23.3285H21.3835V26.5401H21.8346ZM24.6917 22.5985C24.6917 22.1971 25.0301 21.8686 25.4436 21.8686H27.2481C27.6617 21.8686 28 22.1971 28 22.5985C28 23 27.6617 23.3285 27.2481 23.3285H26.1955V24.2044H27.2481C27.6617 24.2044 28 24.5328 28 24.9343C28 25.3358 27.6617 25.6642 27.2481 25.6642H26.1955V27.2701C26.1955 27.6715 25.8571 28 25.4436 28C25.0301 28 24.6917 27.6715 24.6917 27.2701V22.5985Z\" fill=\"#AD3739\"/></g></svg>`,\n \"col-file\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.79995 2.79961H7.59995V4.99961C7.59995 5.99461 8.40495 6.79961 9.39995 6.79961H11.6V12.7996C11.6 13.0196 11.42 13.1996 11.2 13.1996H4.79995C4.57995 13.1996 4.39995 13.0196 4.39995 12.7996V3.19961C4.39995 2.97961 4.57995 2.79961 4.79995 2.79961ZM8.79995 3.29711L11.1025 5.59961H9.39995C9.06745 5.59961 8.79995 5.33211 8.79995 4.99961V3.29711ZM4.79995 1.59961C3.91745 1.59961 3.19995 2.31711 3.19995 3.19961V12.7996C3.19995 13.6821 3.91745 14.3996 4.79995 14.3996H11.2C12.0825 14.3996 12.8 13.6821 12.8 12.7996V6.26211C12.8 5.83711 12.6325 5.42961 12.3324 5.12961L9.26745 2.06711C8.96745 1.76711 8.56245 1.59961 8.13745 1.59961H4.79995ZM6.19995 7.99961C5.86745 7.99961 5.59995 8.26711 5.59995 8.59961C5.59995 8.93211 5.86745 9.19961 6.19995 9.19961H9.79995C10.1325 9.19961 10.4 8.93211 10.4 8.59961C10.4 8.26711 10.1325 7.99961 9.79995 7.99961H6.19995ZM6.19995 10.3996C5.86745 10.3996 5.59995 10.6671 5.59995 10.9996C5.59995 11.3321 5.86745 11.5996 6.19995 11.5996H9.79995C10.1325 11.5996 10.4 11.3321 10.4 10.9996C10.4 10.6671 10.1325 10.3996 9.79995 10.3996H6.19995Z\" fill=\"currentColor\"/></svg>`,\n \"col-folder\": `<svg width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"38\" height=\"38\" rx=\"12\" fill=\"#FDF2DC\"/><path d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\" fill=\"#F6CA72\"/></g></svg>`,\n \"col-folder-blue\": `<svg width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"38\" height=\"38\" rx=\"12\" fill=\"#E2EDF4\"/><path d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\" fill=\"#8CB8D5\"/></g></svg>`,\n \"col-folder-green\": `<svg width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"38\" height=\"38\" rx=\"12\" fill=\"#E5EEE3\"/><path d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\" fill=\"#709B67\"/></g></svg>`,\n \"col-folder-indigo\": `<svg width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"38\" height=\"38\" rx=\"12\" fill=\"#E5E9F9\"/><path d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\" fill=\"#98A9E5\"/></g></svg>`,\n \"col-folder-orange\": `<svg width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"38\" height=\"38\" rx=\"12\" fill=\"#FFEEE2\"/><path d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\" fill=\"#FFBA8D\"/></g></svg>`,\n \"col-folder-pink\": `<svg width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"38\" height=\"38\" rx=\"12\" fill=\"#FAECFB\"/><path d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\" fill=\"#C9AACB\"/></g></svg>`,\n \"col-folder-teal\": `<svg width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"38\" height=\"38\" rx=\"12\" fill=\"#E0F4F1\"/><path d=\"M11.2 24.8504H26.8C27.1575 24.8504 27.45 24.5579 27.45 24.2004V14.4504C27.45 14.0929 27.1575 13.8004 26.8 13.8004H20.7347C20.0319 13.8004 19.3453 13.5729 18.7847 13.1504L17.2247 11.9804C17.1109 11.8951 16.9769 11.8504 16.8347 11.8504H11.2C10.8425 11.8504 10.55 12.1429 10.55 12.5004V24.2004C10.55 24.5579 10.8425 24.8504 11.2 24.8504ZM26.8 26.8004H11.2C9.76591 26.8004 8.59998 25.6345 8.59998 24.2004V12.5004C8.59998 11.0663 9.76591 9.90039 11.2 9.90039H16.8347C17.3953 9.90039 17.9437 10.0832 18.3947 10.4204L19.9547 11.5904C20.1781 11.761 20.4544 11.8504 20.7347 11.8504H26.8C28.234 11.8504 29.4 13.0163 29.4 14.4504V24.2004C29.4 25.6345 28.234 26.8004 26.8 26.8004Z\" fill=\"#4EBFB0\"/></g></svg>`,\n \"col-grid\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.14998 3.14961V5.24961H5.24998V3.14961H3.14998ZM2.09998 3.14961C2.09998 2.56992 2.57029 2.09961 3.14998 2.09961H5.24998C5.82966 2.09961 6.29998 2.56992 6.29998 3.14961V5.24961C6.29998 5.8293 5.82966 6.29961 5.24998 6.29961H3.14998C2.57029 6.29961 2.09998 5.8293 2.09998 5.24961V3.14961ZM3.14998 8.74961V10.8496H5.24998V8.74961H3.14998ZM2.09998 8.74961C2.09998 8.16992 2.57029 7.69961 3.14998 7.69961H5.24998C5.82966 7.69961 6.29998 8.16992 6.29998 8.74961V10.8496C6.29998 11.4293 5.82966 11.8996 5.24998 11.8996H3.14998C2.57029 11.8996 2.09998 11.4293 2.09998 10.8496V8.74961ZM10.85 3.14961H8.74997V5.24961H10.85V3.14961ZM8.74997 2.09961H10.85C11.4297 2.09961 11.9 2.56992 11.9 3.14961V5.24961C11.9 5.8293 11.4297 6.29961 10.85 6.29961H8.74997C8.17029 6.29961 7.69998 5.8293 7.69998 5.24961V3.14961C7.69998 2.56992 8.17029 2.09961 8.74997 2.09961ZM8.74997 8.74961V10.8496H10.85V8.74961H8.74997ZM7.69998 8.74961C7.69998 8.16992 8.17029 7.69961 8.74997 7.69961H10.85C11.4297 7.69961 11.9 8.16992 11.9 8.74961V10.8496C11.9 11.4293 11.4297 11.8996 10.85 11.8996H8.74997C8.17029 11.8996 7.69998 11.4293 7.69998 10.8496V8.74961Z\" fill=\"currentColor\"/></svg>`,\n \"col-list\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.39998 3.2002C1.95748 3.2002 1.59998 3.5577 1.59998 4.0002C1.59998 4.4427 1.95748 4.8002 2.39998 4.8002C2.84248 4.8002 3.19998 4.4427 3.19998 4.0002C3.19998 3.5577 2.84248 3.2002 2.39998 3.2002ZM5.39998 3.2002C5.06748 3.2002 4.79998 3.4677 4.79998 3.8002C4.79998 4.1327 5.06748 4.4002 5.39998 4.4002H13.8C14.1325 4.4002 14.4 4.1327 14.4 3.8002C14.4 3.4677 14.1325 3.2002 13.8 3.2002H5.39998ZM5.39998 7.4002C5.06748 7.4002 4.79998 7.6677 4.79998 8.0002C4.79998 8.3327 5.06748 8.60019 5.39998 8.60019H13.8C14.1325 8.60019 14.4 8.3327 14.4 8.0002C14.4 7.6677 14.1325 7.4002 13.8 7.4002H5.39998ZM5.39998 11.6002C5.06748 11.6002 4.79998 11.8677 4.79998 12.2002C4.79998 12.5327 5.06748 12.8002 5.39998 12.8002H13.8C14.1325 12.8002 14.4 12.5327 14.4 12.2002C14.4 11.8677 14.1325 11.6002 13.8 11.6002H5.39998ZM3.19998 8.0002C3.19998 7.5577 2.84248 7.2002 2.39998 7.2002C1.95748 7.2002 1.59998 7.5577 1.59998 8.0002C1.59998 8.4427 1.95748 8.80019 2.39998 8.80019C2.84248 8.80019 3.19998 8.4427 3.19998 8.0002ZM2.39998 11.2002C1.95748 11.2002 1.59998 11.5577 1.59998 12.0002C1.59998 12.4427 1.95748 12.8002 2.39998 12.8002C2.84248 12.8002 3.19998 12.4427 3.19998 12.0002C3.19998 11.5577 2.84248 11.2002 2.39998 11.2002Z\" fill=\"currentColor\"/></svg>`,\n \"col-people\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6.00005 6.79998C7.10505 6.79998 8.00005 5.90498 8.00005 4.79998C8.00005 3.69498 7.10505 2.79998 6.00005 2.79998C4.89505 2.79998 4.00005 3.69498 4.00005 4.79998C4.00005 5.90498 4.89505 6.79998 6.00005 6.79998ZM6.00005 1.59998C7.76755 1.59998 9.20005 3.03248 9.20005 4.79998C9.20005 6.56748 7.76755 7.99998 6.00005 7.99998C4.23255 7.99998 2.80005 6.56748 2.80005 4.79998C2.80005 3.03248 4.23255 1.59998 6.00005 1.59998ZM5.20005 10.4C3.43255 10.4 2.00005 11.8325 2.00005 13.6V13.8C2.00005 14.1325 1.73255 14.4 1.40005 14.4C1.06755 14.4 0.800049 14.1325 0.800049 13.8V13.6C0.800049 11.17 2.77005 9.19998 5.20005 9.19998H6.80005C9.23005 9.19998 11.2 11.17 11.2 13.6V13.8C11.2 14.1325 10.9325 14.4 10.6 14.4C10.2675 14.4 10 14.1325 10 13.8V13.6C10 11.8325 8.56755 10.4 6.80005 10.4H5.20005ZM9.38255 7.61498C9.63755 7.30748 9.85255 6.96498 10.0175 6.59748C10.2475 6.72748 10.515 6.80248 10.8 6.80248C11.6825 6.80248 12.4 6.08498 12.4 5.20248C12.4 4.31998 11.6825 3.60248 10.8 3.60248C10.61 3.60248 10.4275 3.63498 10.26 3.69498C10.1575 3.29998 10.0025 2.92748 9.80255 2.58498C10.1125 2.46748 10.45 2.40248 10.8 2.40248C12.3475 2.40248 13.6 3.65498 13.6 5.20248C13.6 6.74998 12.3475 7.99998 10.8 7.99998C10.2825 7.99998 9.79755 7.85998 9.38255 7.61498ZM11.6975 10.8825C11.435 10.41 11.105 9.97748 10.72 9.59998H11C13.32 9.59998 15.2 11.48 15.2 13.8C15.2 14.1325 14.9325 14.4 14.6 14.4C14.2675 14.4 14 14.1325 14 13.8C14 12.3825 13.0175 11.195 11.6975 10.8825Z\" fill=\"currentColor\"/></svg>`,\n \"col-person\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.9999 4.79998C5.9999 3.69498 6.8949 2.79998 7.9999 2.79998C9.1049 2.79998 9.9999 3.69498 9.9999 4.79998C9.9999 5.90498 9.1049 6.79998 7.9999 6.79998C6.8949 6.79998 5.9999 5.90498 5.9999 4.79998ZM11.1999 4.79998C11.1999 3.03248 9.7674 1.59998 7.9999 1.59998C6.2324 1.59998 4.7999 3.03248 4.7999 4.79998C4.7999 6.56748 6.2324 7.99998 7.9999 7.99998C9.7674 7.99998 11.1999 6.56748 11.1999 4.79998ZM3.5999 13.6C3.5999 11.8325 5.0324 10.4 6.7999 10.4H9.1999C10.9674 10.4 12.3999 11.8325 12.3999 13.6V13.8C12.3999 14.1325 12.6674 14.4 12.9999 14.4C13.3324 14.4 13.5999 14.1325 13.5999 13.8V13.6C13.5999 11.17 11.6299 9.19998 9.1999 9.19998H6.7999C4.3699 9.19998 2.3999 11.17 2.3999 13.6V13.8C2.3999 14.1325 2.6674 14.4 2.9999 14.4C3.3324 14.4 3.5999 14.1325 3.5999 13.8V13.6Z\" fill=\"currentColor\"/></svg>`,\n \"col-plus\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 2.09961C7.29094 2.09961 7.525 2.33367 7.525 2.62461V6.47461H11.375C11.6659 6.47461 11.9 6.70867 11.9 6.99961C11.9 7.29055 11.6659 7.52461 11.375 7.52461H7.525V11.3746C7.525 11.6656 7.29094 11.8996 7 11.8996C6.70906 11.8996 6.475 11.6656 6.475 11.3746V7.52461H2.625C2.33406 7.52461 2.1 7.29055 2.1 6.99961C2.1 6.70867 2.33406 6.47461 2.625 6.47461H6.475V2.62461C6.475 2.33367 6.70906 2.09961 7 2.09961Z\" fill=\"currentColor\"/></svg>`,\n \"col-quick\": `<svg width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.8\"><rect width=\"38\" height=\"38\" rx=\"12\" fill=\"#EFF2F6\"/><path d=\"M18.6177 26.28C17.3244 26.28 16.1777 25.98 15.1777 25.38C14.1911 24.78 13.4177 23.94 12.8577 22.86C12.3111 21.7667 12.0377 20.4933 12.0377 19.04C12.0377 17.5733 12.3111 16.3 12.8577 15.22C13.4177 14.1267 14.1911 13.28 15.1777 12.68C16.1644 12.08 17.3111 11.78 18.6177 11.78C19.9511 11.78 21.1111 12.08 22.0977 12.68C23.0977 13.28 23.8711 14.1267 24.4177 15.22C24.9777 16.3 25.2577 17.5733 25.2577 19.04C25.2577 20.4933 24.9777 21.7667 24.4177 22.86C23.8577 23.94 23.0777 24.78 22.0777 25.38C21.0911 25.98 19.9377 26.28 18.6177 26.28ZM24.5577 27.04L18.9577 21.62L20.2977 20.18L25.9377 25.7L24.5577 27.04ZM18.6177 24.08C19.5111 24.08 20.2777 23.8733 20.9177 23.46C21.5577 23.0467 22.0511 22.4667 22.3977 21.72C22.7577 20.96 22.9377 20.0667 22.9377 19.04C22.9377 18 22.7577 17.1067 22.3977 16.36C22.0511 15.6 21.5577 15.0133 20.9177 14.6C20.2777 14.1867 19.5111 13.98 18.6177 13.98C17.7511 13.98 16.9977 14.1867 16.3577 14.6C15.7177 15 15.2177 15.58 14.8577 16.34C14.5111 17.0867 14.3377 17.9867 14.3377 19.04C14.3377 20.08 14.5111 20.98 14.8577 21.74C15.2044 22.4867 15.6977 23.0667 16.3377 23.48C16.9911 23.88 17.7511 24.08 18.6177 24.08Z\" fill=\"#7685A2\"/></g></svg>`,\n \"col-tags-label\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.20244 3.8C3.20244 3.4675 3.46994 3.2 3.80244 3.2H7.70494C7.86494 3.2 8.01744 3.2625 8.12994 3.375L13.3299 8.575C13.5649 8.81 13.5649 9.19 13.3299 9.4225L9.42744 13.3275C9.19244 13.5625 8.81244 13.5625 8.57994 13.3275L3.37994 8.1275C3.26744 8.015 3.20494 7.8625 3.20494 7.7025L3.20244 3.8ZM3.80244 2C2.80744 2 2.00244 2.805 2.00244 3.8V7.7025C2.00244 8.18 2.19244 8.6375 2.52994 8.975L7.72994 14.175C8.43244 14.8775 9.57244 14.8775 10.2749 14.175L14.1774 10.2725C14.8799 9.57 14.8799 8.43 14.1774 7.7275L8.97744 2.5275C8.63994 2.19 8.18244 2 7.70494 2H3.80244ZM5.20244 6C5.64494 6 6.00244 5.6425 6.00244 5.2C6.00244 4.7575 5.64494 4.4 5.20244 4.4C4.75994 4.4 4.40244 4.7575 4.40244 5.2C4.40244 5.6425 4.75994 6 5.20244 6Z\" fill=\"#445556\"/></svg>`,\n \"col-trash\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.73572 1.0498C5.44479 1.0498 5.18228 1.23137 5.07947 1.5048L4.7251 2.4498H2.6251C2.33416 2.4498 2.1001 2.68387 2.1001 2.9748C2.1001 3.26574 2.33416 3.4998 2.6251 3.4998H11.3751C11.666 3.4998 11.9001 3.26574 11.9001 2.9748C11.9001 2.68387 11.666 2.4498 11.3751 2.4498H9.2751L8.92072 1.5048C8.81791 1.23137 8.5576 1.0498 8.26447 1.0498H5.73572ZM2.8001 4.5498V11.1998C2.8001 11.972 3.42791 12.5998 4.2001 12.5998H9.8001C10.5723 12.5998 11.2001 11.972 11.2001 11.1998V4.5498H10.1501V11.1998C10.1501 11.3923 9.9926 11.5498 9.8001 11.5498H4.2001C4.0076 11.5498 3.8501 11.3923 3.8501 11.1998V4.5498H2.8001ZM6.3001 6.1248C6.3001 5.83387 6.06603 5.5998 5.7751 5.5998C5.48416 5.5998 5.2501 5.83387 5.2501 6.1248V9.9748C5.2501 10.2657 5.48416 10.4998 5.7751 10.4998C6.06603 10.4998 6.3001 10.2657 6.3001 9.9748V6.1248ZM8.7501 6.1248C8.7501 5.83387 8.51603 5.5998 8.2251 5.5998C7.93416 5.5998 7.7001 5.83387 7.7001 6.1248V9.9748C7.7001 10.2657 7.93416 10.4998 8.2251 10.4998C8.51603 10.4998 8.7501 10.2657 8.7501 9.9748V6.1248Z\" fill=\"currentColor\"/></svg>`,\n \"collapse-sidebar\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M1.6001 3.79922C1.6001 3.46672 1.8676 3.19922 2.2001 3.19922C2.5326 3.19922 2.8001 3.46672 2.8001 3.79922V12.1992C2.8001 12.5317 2.5326 12.7992 2.2001 12.7992C1.8676 12.7992 1.6001 12.5317 1.6001 12.1992V3.79922ZM4.9751 8.42422C4.7401 8.18922 4.7401 7.80922 4.9751 7.57672L8.3751 4.17422C8.6101 3.93922 8.9901 3.93922 9.2226 4.17422C9.4551 4.40922 9.4576 4.78922 9.2226 5.02172L6.8476 7.39672H13.8001C14.1326 7.39672 14.4001 7.66422 14.4001 7.99672C14.4001 8.32922 14.1326 8.59672 13.8001 8.59672H6.8476L9.2226 10.9717C9.4576 11.2067 9.4576 11.5867 9.2226 11.8192C8.9876 12.0517 8.6076 12.0542 8.3751 11.8192L4.9751 8.42422Z\" fill=\"currentColor\"/>\n</svg>`,\n \"doc-csv\": `<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.01979 3.12587H3.61346C3.34582 3.12587 3.12685 3.34485 3.12685 3.61249V15.2913C3.12685 15.559 3.34582 15.7779 3.61346 15.7779H6.04655V17.2378H3.61346C2.53986 17.2378 1.66699 16.3649 1.66699 15.2913V3.61249C1.66699 2.53889 2.53986 1.66602 3.61346 1.66602H7.67368C8.19071 1.66602 8.68646 1.86979 9.05142 2.23475L12.7771 5.96346C13.1421 6.32842 13.3458 6.82417 13.3458 7.3412V11.888H11.886V7.99509H9.20957C7.99911 7.99509 7.01979 7.01577 7.01979 5.80531V3.12891V3.12587ZM11.2807 6.5322L8.47964 3.7311V5.80227C8.47964 6.20677 8.80507 6.5322 9.20957 6.5322H11.2807ZM8.72295 13.2232H9.20957C9.94862 13.2232 10.5478 13.8223 10.5478 14.5614V14.8047C10.5478 15.1393 10.274 15.413 9.9395 15.413C9.60495 15.413 9.33123 15.1393 9.33123 14.8047V14.5614C9.33123 14.4945 9.27648 14.4397 9.20957 14.4397H8.72295C8.65604 14.4397 8.6013 14.4945 8.6013 14.5614V16.9945C8.6013 17.0614 8.65604 17.1161 8.72295 17.1161H9.20957C9.27648 17.1161 9.33123 17.0614 9.33123 16.9945V16.7512C9.33123 16.4166 9.60495 16.1429 9.9395 16.1429C10.274 16.1429 10.5478 16.4166 10.5478 16.7512V16.9945C10.5478 17.7335 9.94862 18.3327 9.20957 18.3327H8.72295C7.9839 18.3327 7.38475 17.7335 7.38475 16.9945V14.5614C7.38475 13.8223 7.9839 13.2232 8.72295 13.2232ZM12.8592 13.2232H13.5891C13.9237 13.2232 14.1974 13.4969 14.1974 13.8315C14.1974 14.166 13.9237 14.4397 13.5891 14.4397H12.8592C12.6585 14.4397 12.4942 14.604 12.4942 14.8047C12.4942 15.0054 12.6585 15.1697 12.8592 15.1697C13.7321 15.1697 14.4407 15.8783 14.4407 16.7512C14.4407 17.624 13.7321 18.3327 12.8592 18.3327H11.886C11.5514 18.3327 11.2777 18.059 11.2777 17.7244C11.2777 17.3899 11.5514 17.1161 11.886 17.1161H12.8592C13.0599 17.1161 13.2242 16.9519 13.2242 16.7512C13.2242 16.5504 13.0599 16.3862 12.8592 16.3862C11.9863 16.3862 11.2777 15.6776 11.2777 14.8047C11.2777 13.9318 11.9863 13.2232 12.8592 13.2232ZM15.7789 13.2232C16.1135 13.2232 16.3872 13.4969 16.3872 13.8315V14.7925C16.3872 15.3886 16.5119 15.9756 16.7521 16.517C16.9924 15.9756 17.1171 15.3886 17.1171 14.7925V13.8315C17.1171 13.4969 17.3908 13.2232 17.7254 13.2232C18.0599 13.2232 18.3337 13.4969 18.3337 13.8315V14.7925C18.3337 15.8722 18.0143 16.9306 17.4152 17.8278L17.2601 18.062C17.1475 18.2323 16.9559 18.3327 16.7552 18.3327C16.5545 18.3327 16.3629 18.2323 16.2503 18.062L16.0952 17.8278C15.4961 16.9276 15.1767 15.8722 15.1767 14.7925V13.8315C15.1767 13.4969 15.4504 13.2232 15.785 13.2232H15.7789Z\" fill=\"currentColor\"/>\n</svg>`,\n \"doc-doc\": `<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.01979 3.12587H3.61346C3.34582 3.12587 3.12685 3.34485 3.12685 3.61249V15.2913C3.12685 15.559 3.34582 15.7779 3.61346 15.7779H6.04655V17.2378H3.61346C2.53986 17.2378 1.66699 16.3649 1.66699 15.2913V3.61249C1.66699 2.53889 2.53986 1.66602 3.61346 1.66602H7.67368C8.19071 1.66602 8.68646 1.86979 9.05142 2.23475L12.7771 5.96346C13.1421 6.32842 13.3458 6.82417 13.3458 7.3412V11.888H11.886V7.99509H9.20957C7.99911 7.99509 7.01979 7.01577 7.01979 5.80531V3.12891V3.12587ZM11.2807 6.5322L8.47964 3.7311V5.80227C8.47964 6.20677 8.80507 6.5322 9.20957 6.5322H11.2807ZM7.99303 13.2232H8.96626C9.83913 13.2232 10.5478 13.9318 10.5478 14.8047V16.7512C10.5478 17.624 9.83913 18.3327 8.96626 18.3327H7.99303C7.65848 18.3327 7.38475 18.059 7.38475 17.7244V13.8315C7.38475 13.4969 7.65848 13.2232 7.99303 13.2232ZM8.96626 17.1161C9.16699 17.1161 9.33123 16.9519 9.33123 16.7512V14.8047C9.33123 14.604 9.16699 14.4397 8.96626 14.4397H8.6013V17.1161H8.96626ZM12.6159 13.2232H13.1025C13.8416 13.2232 14.4407 13.8223 14.4407 14.5614V16.9945C14.4407 17.7335 13.8416 18.3327 13.1025 18.3327H12.6159C11.8768 18.3327 11.2777 17.7335 11.2777 16.9945V14.5614C11.2777 13.8223 11.8768 13.2232 12.6159 13.2232ZM12.4942 14.5614V16.9945C12.4942 17.0614 12.549 17.1161 12.6159 17.1161H13.1025C13.1694 17.1161 13.2242 17.0614 13.2242 16.9945V14.5614C13.2242 14.4945 13.1694 14.4397 13.1025 14.4397H12.6159C12.549 14.4397 12.4942 14.4945 12.4942 14.5614ZM15.1706 14.5614C15.1706 13.8223 15.7698 13.2232 16.5088 13.2232H16.9955C17.7345 13.2232 18.3337 13.8223 18.3337 14.5614V14.8047C18.3337 15.1393 18.0599 15.413 17.7254 15.413C17.3908 15.413 17.1171 15.1393 17.1171 14.8047V14.5614C17.1171 14.4945 17.0624 14.4397 16.9955 14.4397H16.5088C16.4419 14.4397 16.3872 14.4945 16.3872 14.5614V16.9945C16.3872 17.0614 16.4419 17.1161 16.5088 17.1161H16.9955C17.0624 17.1161 17.1171 17.0614 17.1171 16.9945V16.7512C17.1171 16.4166 17.3908 16.1429 17.7254 16.1429C18.0599 16.1429 18.3337 16.4166 18.3337 16.7512V16.9945C18.3337 17.7335 17.7345 18.3327 16.9955 18.3327H16.5088C15.7698 18.3327 15.1706 17.7335 15.1706 16.9945V14.5614Z\" fill=\"currentColor\"/>\n</svg>`,\n \"doc-pdf\": `<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.18078 2.91977H3.672C3.39632 2.91977 3.17075 3.14534 3.17075 3.42103V15.4511C3.17075 15.7268 3.39632 15.9524 3.672 15.9524H6.17827V17.4561H3.672C2.56612 17.4561 1.66699 16.557 1.66699 15.4511V3.42103C1.66699 2.31514 2.56612 1.41602 3.672 1.41602H7.85434C8.38692 1.41602 8.89757 1.62592 9.27351 2.00186L13.1112 5.84271C13.4872 6.21865 13.6971 6.7293 13.6971 7.26188V11.9455H12.1933V7.93544H9.43642C8.18955 7.93544 7.18078 6.92667 7.18078 5.6798V2.92291V2.91977ZM11.5699 6.42855L8.68454 3.54321V5.67667C8.68454 6.09333 9.01975 6.42855 9.43642 6.42855H11.5699ZM8.18328 13.3208H9.18579C10.2228 13.3208 11.0655 14.1635 11.0655 15.2005C11.0655 16.2374 10.2228 17.0802 9.18579 17.0802H8.80985V17.9574C8.80985 18.302 8.52789 18.5839 8.18328 18.5839C7.83867 18.5839 7.55672 18.302 7.55672 17.9574V13.9473C7.55672 13.6027 7.83867 13.3208 8.18328 13.3208ZM9.18579 15.827C9.5304 15.827 9.81236 15.5451 9.81236 15.2005C9.81236 14.8559 9.5304 14.5739 9.18579 14.5739H8.80985V15.827H9.18579ZM12.1933 13.3208H13.1958C14.0949 13.3208 14.8249 14.0507 14.8249 14.9498V16.9549C14.8249 17.854 14.0949 18.5839 13.1958 18.5839H12.1933C11.8487 18.5839 11.5667 18.302 11.5667 17.9574V13.9473C11.5667 13.6027 11.8487 13.3208 12.1933 13.3208ZM13.1958 17.3308C13.4026 17.3308 13.5718 17.1616 13.5718 16.9549V14.9498C13.5718 14.7431 13.4026 14.5739 13.1958 14.5739H12.8199V17.3308H13.1958ZM15.5768 13.9473C15.5768 13.6027 15.8587 13.3208 16.2033 13.3208H17.7071C18.0517 13.3208 18.3337 13.6027 18.3337 13.9473C18.3337 14.292 18.0517 14.5739 17.7071 14.5739H16.8299V15.3258H17.7071C18.0517 15.3258 18.3337 15.6077 18.3337 15.9524C18.3337 16.297 18.0517 16.5789 17.7071 16.5789H16.8299V17.9574C16.8299 18.302 16.5479 18.5839 16.2033 18.5839C15.8587 18.5839 15.5768 18.302 15.5768 17.9574V13.9473Z\" fill=\"currentColor\"/>\n</svg>`,\n \"dp-chat\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M5.85633 12.6193L5.02945 13.2034C4.86977 13.3171 4.65977 13.3302 4.48477 13.2405C4.30977 13.1509 4.20039 12.9715 4.20039 12.7746V11.1996H3.50039C2.34102 11.1996 1.40039 10.259 1.40039 9.09961V4.19961C1.40039 3.04023 2.34102 2.09961 3.50039 2.09961H10.5004C11.6598 2.09961 12.6004 3.04023 12.6004 4.19961V9.09961C12.6004 10.259 11.6598 11.1996 10.5004 11.1996H7.86664L5.85633 12.6193ZM7.26289 10.3421C7.44008 10.2174 7.65227 10.1496 7.86883 10.1496H10.5004C11.0801 10.1496 11.5504 9.6793 11.5504 9.09961V4.19961C11.5504 3.61992 11.0801 3.14961 10.5004 3.14961H3.50039C2.9207 3.14961 2.45039 3.61992 2.45039 4.19961V9.09961C2.45039 9.6793 2.9207 10.1496 3.50039 10.1496H4.72539C4.95289 10.1496 5.14758 10.294 5.21977 10.4974C5.23945 10.5521 5.25039 10.6112 5.25039 10.6746V11.7618C5.9657 11.2565 6.63508 10.784 7.2607 10.3421H7.26289Z\" fill=\"currentColor\"/>\n</svg>`,\n \"edit-reg\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.0468 2.68891L11.3115 2.95359C11.5171 3.15922 11.5171 3.49172 11.3115 3.69516L10.6749 4.33391L9.66646 3.32547L10.303 2.68891C10.5087 2.48328 10.8412 2.48328 11.0446 2.68891H11.0468ZM5.98928 7.00484L8.9249 4.06703L9.93334 5.07547L6.99553 8.01109C6.93209 8.07453 6.85334 8.12047 6.76803 8.14453L5.48834 8.50984L5.85365 7.23016C5.87771 7.14484 5.92365 7.06609 5.98709 7.00266L5.98928 7.00484ZM9.56146 1.94734L5.24553 6.26109C5.05521 6.45141 4.9174 6.68547 4.84521 6.94141L4.21959 9.12891C4.16709 9.31266 4.2174 9.50953 4.35303 9.64516C4.48865 9.78078 4.68553 9.83109 4.86928 9.77859L7.05678 9.15297C7.3149 9.07859 7.54896 8.94078 7.73709 8.75266L12.053 4.43891C12.6677 3.82422 12.6677 2.82672 12.053 2.21203L11.7883 1.94734C11.1737 1.33266 10.1762 1.33266 9.56146 1.94734ZM3.3249 2.80047C2.26178 2.80047 1.3999 3.66234 1.3999 4.72547V10.6755C1.3999 11.7386 2.26178 12.6005 3.3249 12.6005H9.2749C10.338 12.6005 11.1999 11.7386 11.1999 10.6755V8.22547C11.1999 7.93453 10.9658 7.70047 10.6749 7.70047C10.384 7.70047 10.1499 7.93453 10.1499 8.22547V10.6755C10.1499 11.1589 9.75834 11.5505 9.2749 11.5505H3.3249C2.84146 11.5505 2.4499 11.1589 2.4499 10.6755V4.72547C2.4499 4.24203 2.84146 3.85047 3.3249 3.85047H5.7749C6.06584 3.85047 6.2999 3.61641 6.2999 3.32547C6.2999 3.03453 6.06584 2.80047 5.7749 2.80047H3.3249Z\" fill=\"currentColor\"/></svg>`,\n \"ellipsis-reg\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M11.9001 6.99922C11.9001 7.57891 11.4298 8.04922 10.8501 8.04922C10.2704 8.04922 9.8001 7.57891 9.8001 6.99922C9.8001 6.41953 10.2704 5.94922 10.8501 5.94922C11.4298 5.94922 11.9001 6.41953 11.9001 6.99922ZM8.0501 6.99922C8.0501 7.57891 7.57978 8.04922 7.0001 8.04922C6.42041 8.04922 5.9501 7.57891 5.9501 6.99922C5.9501 6.41953 6.42041 5.94922 7.0001 5.94922C7.57978 5.94922 8.0501 6.41953 8.0501 6.99922ZM3.1501 8.04922C2.57041 8.04922 2.1001 7.57891 2.1001 6.99922C2.1001 6.41953 2.57041 5.94922 3.1501 5.94922C3.72978 5.94922 4.2001 6.41953 4.2001 6.99922C4.2001 7.57891 3.72978 8.04922 3.1501 8.04922Z\" fill=\"currentColor\"/>\n</svg>`,\n \"expand-sidebar\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M2.8001 3.79922C2.8001 3.46672 2.5326 3.19922 2.2001 3.19922C1.8676 3.19922 1.6001 3.46672 1.6001 3.79922V12.1992C1.6001 12.5317 1.8676 12.7992 2.2001 12.7992C2.5326 12.7992 2.8001 12.5317 2.8001 12.1992V3.79922ZM14.2251 8.42422C14.4601 8.18922 14.4601 7.80922 14.2251 7.57672L10.8251 4.17422C10.5901 3.93922 10.2101 3.93922 9.9776 4.17422C9.7451 4.40922 9.7426 4.78922 9.9776 5.02172L12.3526 7.39672H5.4001C5.0676 7.39672 4.8001 7.66422 4.8001 7.99672C4.8001 8.32922 5.0676 8.59672 5.4001 8.59672H12.3526L9.9776 10.9717C9.7426 11.2067 9.7426 11.5867 9.9776 11.8192C10.2126 12.0517 10.5926 12.0542 10.8251 11.8192L14.2251 8.42422Z\" fill=\"currentColor\"/>\n</svg>`,\n \"file-pdf\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M7.18045 2.91977H3.67168C3.39599 2.91977 3.17042 3.14534 3.17042 3.42103V15.4511C3.17042 15.7268 3.39599 15.9524 3.67168 15.9524H6.17794V17.4561H3.67168C2.56579 17.4561 1.66666 16.557 1.66666 15.4511V3.42103C1.66666 2.31514 2.56579 1.41602 3.67168 1.41602H7.85401C8.38659 1.41602 8.89724 1.62592 9.27318 2.00186L13.1109 5.84271C13.4868 6.21865 13.6967 6.7293 13.6967 7.26188V11.9455H12.193V7.93544H9.43609C8.18922 7.93544 7.18045 6.92667 7.18045 5.6798V2.92291V2.91977ZM11.5695 6.42855L8.68421 3.54321V5.67667C8.68421 6.09333 9.01942 6.42855 9.43609 6.42855H11.5695ZM8.18295 13.3208H9.18546C10.2224 13.3208 11.0652 14.1635 11.0652 15.2005C11.0652 16.2374 10.2224 17.0802 9.18546 17.0802H8.80952V17.9574C8.80952 18.302 8.52757 18.5839 8.18295 18.5839C7.83834 18.5839 7.55639 18.302 7.55639 17.9574V13.9473C7.55639 13.6027 7.83834 13.3208 8.18295 13.3208ZM9.18546 15.827C9.53007 15.827 9.81203 15.5451 9.81203 15.2005C9.81203 14.8559 9.53007 14.5739 9.18546 14.5739H8.80952V15.827H9.18546ZM12.193 13.3208H13.1955C14.0946 13.3208 14.8246 14.0507 14.8246 14.9498V16.9549C14.8246 17.854 14.0946 18.5839 13.1955 18.5839H12.193C11.8484 18.5839 11.5664 18.302 11.5664 17.9574V13.9473C11.5664 13.6027 11.8484 13.3208 12.193 13.3208ZM13.1955 17.3308C13.4023 17.3308 13.5714 17.1616 13.5714 16.9549V14.9498C13.5714 14.7431 13.4023 14.5739 13.1955 14.5739H12.8195V17.3308H13.1955ZM15.5764 13.9473C15.5764 13.6027 15.8584 13.3208 16.203 13.3208H17.7068C18.0514 13.3208 18.3333 13.6027 18.3333 13.9473C18.3333 14.292 18.0514 14.5739 17.7068 14.5739H16.8296V15.3258H17.7068C18.0514 15.3258 18.3333 15.6077 18.3333 15.9524C18.3333 16.297 18.0514 16.5789 17.7068 16.5789H16.8296V17.9574C16.8296 18.302 16.5476 18.5839 16.203 18.5839C15.8584 18.5839 15.5764 18.302 15.5764 17.9574V13.9473Z\" fill=\"currentColor\"/>\n</svg>`,\n \"fp-date\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M5.40039 1.59961C5.73289 1.59961 6.00039 1.86711 6.00039 2.19961V3.19961H10.0004V2.19961C10.0004 1.86711 10.2679 1.59961 10.6004 1.59961C10.9329 1.59961 11.2004 1.86711 11.2004 2.19961V3.19961H12.0004C12.8829 3.19961 13.6004 3.91711 13.6004 4.79961V11.9996C13.6004 12.8821 12.8829 13.5996 12.0004 13.5996H4.00039C3.11789 13.5996 2.40039 12.8821 2.40039 11.9996V4.79961C2.40039 3.91711 3.11789 3.19961 4.00039 3.19961H4.80039V2.19961C4.80039 1.86711 5.06789 1.59961 5.40039 1.59961ZM5.40039 4.39961H4.00039C3.78039 4.39961 3.60039 4.57961 3.60039 4.79961V5.99961H12.4004V4.79961C12.4004 4.57961 12.2204 4.39961 12.0004 4.39961H5.40039ZM3.60039 7.19961V11.9996C3.60039 12.2196 3.78039 12.3996 4.00039 12.3996H12.0004C12.2204 12.3996 12.4004 12.2196 12.4004 11.9996V7.19961H3.60039Z\" fill=\"currentColor\"/>\n</svg>`,\n \"fp-sources\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M1.9998 2.19961C1.9998 1.86711 1.7323 1.59961 1.3998 1.59961C1.0673 1.59961 0.799805 1.86711 0.799805 2.19961V11.3996C0.799805 12.1721 1.4273 12.7996 2.1998 12.7996H6.7998V11.5996H2.1998C2.0898 11.5996 1.9998 11.5096 1.9998 11.3996V5.59961H6.7998V4.39961H1.9998V2.19961ZM10.4373 2.79961L11.2348 3.33211C11.4973 3.50711 11.8073 3.59961 12.1223 3.59961H14.0023V5.99961H9.2023V2.79961H10.4398H10.4373ZM7.9998 2.79961V5.99961C7.9998 6.66211 8.5373 7.19961 9.1998 7.19961H13.9998C14.6623 7.19961 15.1998 6.66211 15.1998 5.99961V3.59961C15.1998 2.93711 14.6623 2.39961 13.9998 2.39961H12.1198C12.0398 2.39961 11.9648 2.37711 11.8973 2.33211L11.1023 1.80211C10.9048 1.66961 10.6723 1.59961 10.4373 1.59961H9.1998C8.5373 1.59961 7.9998 2.13711 7.9998 2.79961ZM10.4373 9.99961L11.2848 10.5646C11.5148 10.7171 11.7848 10.7996 12.0623 10.7996H14.0023V13.1996H9.2023V9.99961H10.4398H10.4373ZM7.9998 9.99961V13.1996C7.9998 13.8621 8.5373 14.3996 9.1998 14.3996H13.9998C14.6623 14.3996 15.1998 13.8621 15.1998 13.1996V10.7996C15.1998 10.1371 14.6623 9.59961 13.9998 9.59961H12.0598C12.0198 9.59961 11.9823 9.58711 11.9498 9.56711L11.1023 9.00211C10.9048 8.86961 10.6748 8.79961 10.4373 8.79961H9.1998C8.5373 8.79961 7.9998 9.33711 7.9998 9.99961Z\" fill=\"currentColor\"/>\n</svg>`,\n \"group-people\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.9998 6.79998C7.1048 6.79998 7.9998 5.90498 7.9998 4.79998C7.9998 3.69498 7.1048 2.79998 5.9998 2.79998C4.8948 2.79998 3.9998 3.69498 3.9998 4.79998C3.9998 5.90498 4.8948 6.79998 5.9998 6.79998ZM5.9998 1.59998C7.7673 1.59998 9.1998 3.03248 9.1998 4.79998C9.1998 6.56748 7.7673 7.99998 5.9998 7.99998C4.2323 7.99998 2.7998 6.56748 2.7998 4.79998C2.7998 3.03248 4.2323 1.59998 5.9998 1.59998ZM5.1998 10.4C3.4323 10.4 1.9998 11.8325 1.9998 13.6V13.8C1.9998 14.1325 1.7323 14.4 1.3998 14.4C1.0673 14.4 0.799805 14.1325 0.799805 13.8V13.6C0.799805 11.17 2.7698 9.19998 5.1998 9.19998H6.7998C9.2298 9.19998 11.1998 11.17 11.1998 13.6V13.8C11.1998 14.1325 10.9323 14.4 10.5998 14.4C10.2673 14.4 9.9998 14.1325 9.9998 13.8V13.6C9.9998 11.8325 8.5673 10.4 6.7998 10.4H5.1998ZM9.3823 7.61498C9.6373 7.30748 9.85231 6.96498 10.0173 6.59748C10.2473 6.72748 10.5148 6.80248 10.7998 6.80248C11.6823 6.80248 12.3998 6.08498 12.3998 5.20248C12.3998 4.31998 11.6823 3.60248 10.7998 3.60248C10.6098 3.60248 10.4273 3.63498 10.2598 3.69498C10.1573 3.29998 10.0023 2.92748 9.8023 2.58498C10.1123 2.46748 10.4498 2.40248 10.7998 2.40248C12.3473 2.40248 13.5998 3.65498 13.5998 5.20248C13.5998 6.74998 12.3473 7.99998 10.7998 7.99998C10.2823 7.99998 9.7973 7.85998 9.3823 7.61498ZM11.6973 10.8825C11.4348 10.41 11.1048 9.97748 10.7198 9.59998H10.9998C13.3198 9.59998 15.1998 11.48 15.1998 13.8C15.1998 14.1325 14.9323 14.4 14.5998 14.4C14.2673 14.4 13.9998 14.1325 13.9998 13.8C13.9998 12.3825 13.0173 11.195 11.6973 10.8825Z\" fill=\"currentColor\"/></svg>`,\n \"history-delete\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9.83211 1.80005C9.33336 1.80005 8.88336 2.1113 8.70711 2.58005L8.09961 4.20005H4.49961C4.00086 4.20005 3.59961 4.6013 3.59961 5.10005C3.59961 5.5988 4.00086 6.00005 4.49961 6.00005H19.4996C19.9984 6.00005 20.3996 5.5988 20.3996 5.10005C20.3996 4.6013 19.9984 4.20005 19.4996 4.20005H15.8996L15.2921 2.58005C15.1159 2.1113 14.6696 1.80005 14.1671 1.80005H9.83211ZM4.79961 7.80005V19.2C4.79961 20.5238 5.87586 21.6 7.19961 21.6H16.7996C18.1234 21.6 19.1996 20.5238 19.1996 19.2V7.80005H17.3996V19.2C17.3996 19.53 17.1296 19.8 16.7996 19.8H7.19961C6.86961 19.8 6.59961 19.53 6.59961 19.2V7.80005H4.79961ZM10.7996 10.5C10.7996 10.0013 10.3984 9.60005 9.89961 9.60005C9.40086 9.60005 8.99961 10.0013 8.99961 10.5V17.1C8.99961 17.5988 9.40086 18 9.89961 18C10.3984 18 10.7996 17.5988 10.7996 17.1V10.5ZM14.9996 10.5C14.9996 10.0013 14.5984 9.60005 14.0996 9.60005C13.6009 9.60005 13.1996 10.0013 13.1996 10.5V17.1C13.1996 17.5988 13.6009 18 14.0996 18C14.5984 18 14.9996 17.5988 14.9996 17.1V10.5Z\" fill=\"currentColor\"/>\n</svg>`,\n \"link-external\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5z\"/>\n <path d=\"M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0v-5z\"/>\n</svg>`,\n \"menu-collections\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M13.6 9.99961H4.79999C4.57999 9.99961 4.39999 9.81961 4.39999 9.59961V3.19961C4.39999 2.97961 4.57999 2.79961 4.79999 2.79961H7.73749C7.84249 2.79961 7.94499 2.84211 8.01999 2.91711L8.91749 3.81461C9.29249 4.18961 9.80249 4.39961 10.3325 4.39961H13.6C13.82 4.39961 14 4.57961 14 4.79961V9.59961C14 9.81961 13.82 9.99961 13.6 9.99961ZM4.79999 11.1996H13.6C14.4825 11.1996 15.2 10.4821 15.2 9.59961V4.79961C15.2 3.91711 14.4825 3.19961 13.6 3.19961H10.3325C10.12 3.19961 9.91749 3.11461 9.76749 2.96461L8.86749 2.06711C8.56749 1.76711 8.16249 1.59961 7.73749 1.59961H4.79999C3.91749 1.59961 3.19999 2.31711 3.19999 3.19961V9.59961C3.19999 10.4821 3.91749 11.1996 4.79999 11.1996ZM1.99999 4.59961C1.99999 4.26711 1.73249 3.99961 1.39999 3.99961C1.06749 3.99961 0.799988 4.26711 0.799988 4.59961V11.9996C0.799988 12.8821 1.51749 13.5996 2.39999 13.5996H12.2C12.5325 13.5996 12.8 13.3321 12.8 12.9996C12.8 12.6671 12.5325 12.3996 12.2 12.3996H2.39999C2.17999 12.3996 1.99999 12.2196 1.99999 11.9996V4.59961Z\" fill=\"#445556\"/>\n</svg>`,\n \"menu-share\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M9.39961 6.00042C9.73211 6.00042 9.99961 5.73292 9.99961 5.40042V3.76542L13.0346 6.80042L9.99961 9.83542V8.20042C9.99961 7.86792 9.73211 7.60042 9.39961 7.60042H6.39961C4.74461 7.60042 3.34961 8.71792 2.92961 10.2379C2.84711 9.92792 2.79961 9.58292 2.79961 9.20042C2.79961 7.43292 4.23211 6.00042 5.99961 6.00042H9.39961ZM8.79961 8.80042V10.8004C8.79961 11.1229 8.99461 11.4154 9.29461 11.5404C9.59461 11.6654 9.93711 11.5954 10.1671 11.3679L14.1671 7.36792C14.4796 7.05542 14.4796 6.54792 14.1671 6.23542L10.1671 2.23542C9.93711 2.00542 9.59461 1.93792 9.29461 2.06292C8.99461 2.18792 8.79961 2.47792 8.79961 2.80042V4.80042H5.99961C3.56961 4.80042 1.59961 6.77042 1.59961 9.20042C1.59961 11.1504 2.56461 12.3554 3.31711 13.0029C3.41961 13.0904 3.51961 13.1679 3.60961 13.2354C3.68961 13.2954 3.76461 13.3454 3.83211 13.3904C3.94461 13.4654 4.03961 13.5179 4.10211 13.5529C4.16461 13.5879 4.23461 13.6004 4.30461 13.6004C4.57711 13.6004 4.79711 13.3779 4.79711 13.1079C4.79711 12.9379 4.70711 12.7779 4.58961 12.6554C4.57711 12.6429 4.56711 12.6329 4.55461 12.6204C4.49461 12.5629 4.42711 12.4929 4.36211 12.4054C4.31961 12.3479 4.27711 12.2804 4.23711 12.2079C4.10461 11.9654 3.99961 11.6354 3.99961 11.2029C3.99961 9.87792 5.07461 8.80292 6.39961 8.80292H8.79961V8.80042Z\" fill=\"#445556\"/>\n</svg>`,\n \"menu-upload\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.42502 1.77586C8.19002 1.54086 7.81002 1.54086 7.57752 1.77586L4.17502 5.17586C3.94002 5.41086 3.94002 5.79086 4.17502 6.02336C4.41002 6.25586 4.79002 6.25836 5.02252 6.02336L7.39752 3.64836V9.80086C7.39752 10.1334 7.66502 10.4009 7.99752 10.4009C8.33002 10.4009 8.59752 10.1334 8.59752 9.80086V3.64836L10.9725 6.02336C11.2075 6.25836 11.5875 6.25836 11.82 6.02336C12.0525 5.78836 12.055 5.40836 11.82 5.17586L8.42502 1.77586ZM3.60002 10.2009C3.60002 9.86836 3.33252 9.60086 3.00002 9.60086C2.66752 9.60086 2.40002 9.86836 2.40002 10.2009V12.0009C2.40002 13.3259 3.47502 14.4009 4.80002 14.4009H11.2C12.525 14.4009 13.6 13.3259 13.6 12.0009V10.2009C13.6 9.86836 13.3325 9.60086 13 9.60086C12.6675 9.60086 12.4 9.86836 12.4 10.2009V12.0009C12.4 12.6634 11.8625 13.2009 11.2 13.2009H4.80002C4.13752 13.2009 3.60002 12.6634 3.60002 12.0009V10.2009Z\" fill=\"currentColor\"/>\n</svg>`,\n \"more-h\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n</svg>`,\n \"panel-close\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M12 4L4 12M4 4l8 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n</svg>`,\n \"share-info\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8 2.5a5.5 5.5 0 1 0 0 11 5.5 5.5 0 0 0 0-11zM1.5 8a6.5 6.5 0 1 1 13 0 6.5 6.5 0 0 1-13 0zM8.75 5.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0zM7.5 7.5a.5.5 0 0 1 1 0v3a.5.5 0 0 1-1 0v-3z\"/>\n</svg>`,\n \"suggestion-search\": `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M10.8 6.79961C10.8 4.58961 9.01001 2.79961 6.80001 2.79961C4.59001 2.79961 2.80001 4.58961 2.80001 6.79961C2.80001 9.00961 4.59001 10.7996 6.80001 10.7996C9.01001 10.7996 10.8 9.00961 10.8 6.79961ZM10.0275 10.8771C9.14251 11.5796 8.02001 11.9996 6.80001 11.9996C3.92751 11.9996 1.60001 9.67211 1.60001 6.79961C1.60001 3.92711 3.92751 1.59961 6.80001 1.59961C9.67251 1.59961 12 3.92711 12 6.79961C12 8.01961 11.58 9.14211 10.8775 10.0271L14.225 13.3746C14.46 13.6096 14.46 13.9896 14.225 14.2221C13.99 14.4546 13.61 14.4571 13.3775 14.2221L10.0275 10.8771Z\" fill=\"currentColor\"/>\n</svg>`,\n \"ut-check\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.5 8.5L6 12L13.5 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>`,\n \"ut-error\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M5.5 5.5L10.5 10.5M10.5 5.5L5.5 10.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n</svg>`,\n \"ut-sync\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.3251 4.3226C6.3551 2.2926 9.6476 2.2926 11.6801 4.3226L12.3576 5.0001H10.4026C10.0701 5.0001 9.8026 5.2676 9.8026 5.6001C9.8026 5.9326 10.0701 6.2001 10.4026 6.2001H13.8051C14.1376 6.2001 14.4051 5.9326 14.4051 5.6001V2.2001C14.4051 1.8676 14.1376 1.6001 13.8051 1.6001C13.4726 1.6001 13.2051 1.8676 13.2051 2.2001V4.1526L12.5276 3.4751C10.0276 0.975098 5.9751 0.975098 3.4776 3.4751C2.3976 4.5551 1.7826 5.9276 1.6376 7.3376C1.6026 7.6676 1.8426 7.9626 2.1726 7.9951C2.5026 8.0276 2.7976 7.7901 2.8301 7.4601C2.9501 6.3151 3.4476 5.2026 4.3251 4.3226ZM14.3676 8.6626C14.4026 8.3326 14.1626 8.0376 13.8326 8.0051C13.5026 7.9726 13.2076 8.2101 13.1751 8.5401C13.0576 9.6851 12.5576 10.8001 11.6801 11.6776C9.6501 13.7076 6.3576 13.7076 4.3251 11.6776L3.6476 11.0001H5.6026C5.9351 11.0001 6.2026 10.7326 6.2026 10.4001C6.2026 10.0676 5.9351 9.8001 5.6026 9.8001H2.2001C1.8676 9.8001 1.6001 10.0676 1.6001 10.4001V13.8001C1.6001 14.1326 1.8676 14.4001 2.2001 14.4001C2.5326 14.4001 2.8001 14.1326 2.8001 13.8001V11.8476L3.4776 12.5251C5.9776 15.0251 10.0301 15.0251 12.5276 12.5251C13.6076 11.4451 14.2226 10.0726 14.3676 8.6626Z\" fill=\"currentColor\"/>\n</svg>`,\n \"ut-upload\": `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.4249 1.77488C8.1899 1.53988 7.8099 1.53988 7.5774 1.77488L4.1749 5.17488C3.9399 5.40988 3.9399 5.78988 4.1749 6.02238C4.4099 6.25488 4.7899 6.25738 5.0224 6.02238L7.3974 3.64738V9.79988C7.3974 10.1324 7.6649 10.3999 7.9974 10.3999C8.3299 10.3999 8.5974 10.1324 8.5974 9.79988V3.64738L10.9724 6.02238C11.2074 6.25738 11.5874 6.25738 11.8199 6.02238C12.0524 5.78738 12.0549 5.40738 11.8199 5.17488L8.4249 1.77488ZM3.5999 10.1999C3.5999 9.86738 3.3324 9.59988 2.9999 9.59988C2.6674 9.59988 2.3999 9.86738 2.3999 10.1999V11.9999C2.3999 13.3249 3.4749 14.3999 4.7999 14.3999H11.1999C12.5249 14.3999 13.5999 13.3249 13.5999 11.9999V10.1999C13.5999 9.86738 13.3324 9.59988 12.9999 9.59988C12.6674 9.59988 12.3999 9.86738 12.3999 10.1999V11.9999C12.3999 12.6624 11.8624 13.1999 11.1999 13.1999H4.7999C4.1374 13.1999 3.5999 12.6624 3.5999 11.9999V10.1999Z\" fill=\"currentColor\"/>\n</svg>`,\n \"zoom-in\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.95039 2.45039C7.88414 2.45039 9.45039 4.01664 9.45039 5.95039C9.45039 7.88414 7.88414 9.45039 5.95039 9.45039C4.01664 9.45039 2.45039 7.88414 2.45039 5.95039C2.45039 4.01664 4.01664 2.45039 5.95039 2.45039ZM5.95039 10.5004C7.01789 10.5004 8.00008 10.1329 8.77445 9.5182L11.7035 12.4473C11.9091 12.6529 12.2416 12.6529 12.4451 12.4473C12.6485 12.2416 12.6507 11.9091 12.4451 11.7057L9.5182 8.77445C10.1329 8.00008 10.5004 7.01789 10.5004 5.95039C10.5004 3.43695 8.46383 1.40039 5.95039 1.40039C3.43695 1.40039 1.40039 3.43695 1.40039 5.95039C1.40039 8.46383 3.43695 10.5004 5.95039 10.5004ZM5.95039 3.85039C5.65945 3.85039 5.42539 4.08445 5.42539 4.37539V5.42539H4.37539C4.08445 5.42539 3.85039 5.65945 3.85039 5.95039C3.85039 6.24133 4.08445 6.47539 4.37539 6.47539H5.42539V7.52539C5.42539 7.81633 5.65945 8.05039 5.95039 8.05039C6.24133 8.05039 6.47539 7.81633 6.47539 7.52539V6.47539H7.52539C7.81633 6.47539 8.05039 6.24133 8.05039 5.95039C8.05039 5.65945 7.81633 5.42539 7.52539 5.42539H6.47539V4.37539C6.47539 4.08445 6.24133 3.85039 5.95039 3.85039Z\" fill=\"currentColor\"/></svg>`,\n \"zoom-out\": `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.95039 2.45039C7.88414 2.45039 9.45039 4.01664 9.45039 5.95039C9.45039 7.88414 7.88414 9.45039 5.95039 9.45039C4.01664 9.45039 2.45039 7.88414 2.45039 5.95039C2.45039 4.01664 4.01664 2.45039 5.95039 2.45039ZM5.95039 10.5004C7.01789 10.5004 8.00008 10.1329 8.77445 9.5182L11.7035 12.4473C11.9091 12.6529 12.2416 12.6529 12.4451 12.4473C12.6485 12.2416 12.6507 11.9091 12.4451 11.7057L9.5182 8.77445C10.1329 8.00008 10.5004 7.01789 10.5004 5.95039C10.5004 3.43695 8.46383 1.40039 5.95039 1.40039C3.43695 1.40039 1.40039 3.43695 1.40039 5.95039C1.40039 8.46383 3.43695 10.5004 5.95039 10.5004ZM4.37539 5.42539C4.08445 5.42539 3.85039 5.65945 3.85039 5.95039C3.85039 6.24133 4.08445 6.47539 4.37539 6.47539H7.52539C7.81633 6.47539 8.05039 6.24133 8.05039 5.95039C8.05039 5.65945 7.81633 5.42539 7.52539 5.42539H4.37539Z\" fill=\"currentColor\"/></svg>`\n};\n\nexport function injectIcons(container: ParentNode): void {\n container.querySelectorAll(\"[data-icon]\").forEach(el => {\n const svg = ICONS[el.getAttribute(\"data-icon\")!];\n if (svg) {\n const tmp = document.createElement(\"span\");\n tmp.innerHTML = svg;\n el.replaceWith(tmp.firstChild!);\n }\n });\n}\n","// GENERATED by scripts/generate-i18n.mjs from i18n/en.json — do not edit.\n// Run `npm run i18n:generate` in sba/agent after changing the catalog.\n//\n// The English catalog, flattened to dotted keys and bundled into the elements\n// FESM. It is the fallback internal/i18n.ts uses when the host installs no\n// translator, or installs one that cannot resolve a key — which is what lets\n// these elements render correct English with no Angular, no Transloco and no\n// network request.\n\nexport const EN_TRANSLATIONS: Record<string, string> = {\n \"common.add\": \"Add\",\n \"common.cancel\": \"Cancel\",\n \"common.clearSearch\": \"Clear search\",\n \"common.close\": \"Close\",\n \"common.collapse\": \"Collapse\",\n \"common.create\": \"Create\",\n \"common.delete\": \"Delete\",\n \"common.deleteWarning\": \"{name} will be permanently deleted. This action cannot be undone.\",\n \"common.deleting\": \"Deleting…\",\n \"common.edit\": \"Edit\",\n \"common.expand\": \"Expand\",\n \"common.gridView\": \"Grid view\",\n \"common.listView\": \"List view\",\n \"common.minimize\": \"Minimize\",\n \"common.moreOptions\": \"More options\",\n \"common.refresh\": \"Refresh\",\n \"common.remove\": \"Remove\",\n \"common.required\": \"Required\",\n \"common.retry\": \"Retry\",\n \"common.save\": \"Save\",\n \"common.select\": \"Select\",\n \"common.selectAll\": \"Select All\",\n \"common.unselectAll\": \"Unselect All\",\n \"common.you\": \"You\",\n \"detail.back\": \"Back to workspaces\",\n \"detail.columnDate\": \"Date\",\n \"detail.columnName\": \"Name\",\n \"detail.columnSize\": \"Size\",\n \"detail.columnSource\": \"Source\",\n \"detail.deleteDocTitle\": \"Delete document?\",\n \"detail.deleteDocument\": \"Delete document\",\n \"detail.deleteDocumentsTitle.one\": \"Delete {count} document?\",\n \"detail.deleteDocumentsTitle.other\": \"Delete {count} documents?\",\n \"detail.docsLoadError\": \"Couldn’t load documents.\",\n \"detail.docsLoading\": \"Loading documents…\",\n \"detail.documentCount.one\": \"{count} document\",\n \"detail.documentCount.other\": \"{count} documents\",\n \"detail.emptySubtitle\": \"Documents added to this workspace will appear here\",\n \"detail.emptyTitle\": \"No documents yet\",\n \"detail.fileCount.one\": \"{count} file\",\n \"detail.fileCount.other\": \"{count} files\",\n \"detail.refreshError\": \"Couldn’t refresh documents: {error}\",\n \"detail.searchPlaceholder\": \"Search files...\",\n \"detail.selectedDocumentCount.one\": \"{count} document selected\",\n \"detail.selectedDocumentCount.other\": \"{count} documents selected\",\n \"detail.upload\": \"Upload\",\n \"detail.uploadedBy\": \"Uploaded by {name}\",\n \"edit.addTag\": \"Add tag\",\n \"edit.addTitle\": \"Add workspace\",\n \"edit.creating\": \"Creating…\",\n \"edit.descriptionLabel\": \"Description\",\n \"edit.descriptionPlaceholder\": \"Describe this workspace…\",\n \"edit.editTitle\": \"Edit workspace\",\n \"edit.nameLabel\": \"Title\",\n \"edit.nameRequired\": \"Title is required\",\n \"edit.removeTag\": \"Remove {tag}\",\n \"edit.saving\": \"Saving…\",\n \"edit.shareHint\": \"Search a user to grant access · click a role chip to switch between Owner and Reader\",\n \"edit.shareLabel\": \"Share with\",\n \"edit.tagsHint\": \"Press comma or Enter to add a tag · Backspace to remove the last one\",\n \"edit.tagsLabel\": \"Tags\",\n \"edit.tagsPlaceholder\": \"Type a tag and press comma…\",\n \"errors.forbidden\": \"You don’t have permission to do this.\",\n \"errors.generic\": \"Something went wrong. Please try again.\",\n \"errors.notFound\": \"This item could not be found — it may have been deleted.\",\n \"errors.signIn\": \"You need to sign in to do this.\",\n \"format.added\": \"Added {relative}\",\n \"format.addedJustNow\": \"Added just now\",\n \"format.uploadedJustNow\": \"Uploaded just now\",\n \"list.addCollection\": \"Add Workspace\",\n \"list.bulkDeleteFailed.one\": \"This workspace could not be deleted: {names}.\",\n \"list.bulkDeleteFailed.other\": \"These workspaces could not be deleted: {names}.\",\n \"list.collectionCount.one\": \"{count} workspace\",\n \"list.collectionCount.other\": \"{count} workspaces\",\n \"list.deleteCollection\": \"Delete workspace\",\n \"list.deleteCollectionsTitle.one\": \"Delete {count} workspace?\",\n \"list.deleteCollectionsTitle.other\": \"Delete {count} workspaces?\",\n \"list.deleteTitle\": \"Delete workspace?\",\n \"list.loadError\": \"Couldn’t load workspaces.\",\n \"list.loading\": \"Loading workspaces…\",\n \"list.refreshError\": \"Couldn’t refresh workspaces: {error}\",\n \"list.roleOwner\": \"Owner\",\n \"list.roleShared\": \"Shared\",\n \"list.searchPlaceholder\": \"Search workspace...\",\n \"list.selectedCount.one\": \"{count} selected\",\n \"list.selectedCount.other\": \"{count} selected\",\n \"list.subtitle\": \"Organize documents into reusable sets.\",\n \"list.tabAll\": \"All Workspaces\",\n \"list.tabEditor\": \"Editor\",\n \"list.tabReader\": \"Reader\",\n \"list.title\": \"Workspaces\",\n \"mention.documentCount.one\": \"{count} document\",\n \"mention.documentCount.other\": \"{count} documents\",\n \"mention.loadError\": \"Couldn’t load workspaces.\",\n \"mention.loading\": \"Loading…\",\n \"picker.addedTo\": \"Added to {name}\",\n \"picker.collectionName\": \"Workspace name\",\n \"picker.duplicateName\": \"A workspace with this name already exists\",\n \"picker.moveToCollection\": \"Move to workspace\",\n \"picker.namePlaceholder\": \"e.g. Cardiology Research\",\n \"picker.newCollection\": \"New workspace\",\n \"picker.quickCollection\": \"Quick Workspace\",\n \"picker.saveToCollection\": \"Save to workspace\",\n \"picker.saved\": \"Saved!\",\n \"picker.savedTo\": \"Saved to {name}\",\n \"preview.askFollowUp\": \"Ask follow-up\",\n \"preview.askFollowUpPlaceholder\": \"Ask follow-up about the document\",\n \"preview.close\": \"Close preview\",\n \"preview.collapsePassages\": \"Collapse passages\",\n \"preview.currentPage\": \"Current page\",\n \"preview.dateLabel\": \"Date:\",\n \"preview.expandPassages\": \"Expand passages\",\n \"preview.findPlaceholder\": \"Find text...\",\n \"preview.loading\": \"Loading preview…\",\n \"preview.nextPage\": \"Next page\",\n \"preview.nextResult\": \"Next result\",\n \"preview.pageNumber\": \"Page {page}\",\n \"preview.passages\": \"Passages\",\n \"preview.previousPage\": \"Previous page\",\n \"preview.previousResult\": \"Previous result\",\n \"preview.sourceLabel\": \"Source:\",\n \"preview.suggestionActionItems\": \"Find action items\",\n \"preview.suggestionKeyPoints\": \"Key points\",\n \"preview.suggestionSummarize\": \"Summarize it\",\n \"preview.unavailable\": \"This document cannot be previewed.\",\n \"preview.zoomIn\": \"Zoom in\",\n \"preview.zoomOut\": \"Zoom out\",\n \"share.accessCount.one\": \"{count} person has access\",\n \"share.accessCount.other\": \"{count} people have access\",\n \"share.accessNotice\":\n \"Some documents in this workspace may not be accessible to all shared users. Documents from shared drives or external sources remain subject to their original access permissions. Locally uploaded files from your personal device will always be accessible through the shared workspace.\",\n \"share.addPeople\": \"Add people\",\n \"share.adding\": \"Adding…\",\n \"share.changeRoleToOwner\": \"Make {name} an Owner\",\n \"share.changeRoleToReader\": \"Make {name} a Reader\",\n \"share.confirmRemove\": \"Remove {name} from this workspace?\",\n \"share.noMatches\": \"No matches found.\",\n \"share.owner\": \"Owner\",\n \"share.ownerDescription\": \"Can add or remove people, change roles, and manage the workspace.\",\n \"share.reader\": \"Reader\",\n \"share.readerDescription\": \"Can view and use the workspace.\",\n \"share.removeUser\": \"Remove {name}\",\n \"share.searchFailed\": \"Search failed — try again.\",\n \"share.searchPlaceholder\": \"Search by name or email…\",\n \"share.searchUsers\": \"Search users\",\n \"share.searching\": \"Searching…\",\n \"share.title\": \"Manage access\",\n \"share.unresolvedName\": \"Name could not be resolved for this id\",\n \"share.you\": \"(you)\",\n \"tracker.clickToOpen\": \"Click to open\",\n \"tracker.clickToRestore\": \"Click to restore\",\n \"tracker.collectionCount.one\": \"{count} workspace\",\n \"tracker.collectionCount.other\": \"{count} workspaces\",\n \"tracker.complete\": \"Complete\",\n \"tracker.completedCount.one\": \"{count} completed\",\n \"tracker.completedCount.other\": \"{count} completed\",\n \"tracker.connectionLost\": \"Connection lost\",\n \"tracker.dismiss\": \"Dismiss\",\n \"tracker.errorCount.one\": \"{count} error\",\n \"tracker.errorCount.other\": \"{count} errors\",\n \"tracker.failedCount.one\": \"{count} failed\",\n \"tracker.failedCount.other\": \"{count} failed\",\n \"tracker.fileCount.one\": \"{count} file\",\n \"tracker.fileCount.other\": \"{count} files\",\n \"tracker.fileIndexed\": \"File indexed\",\n \"tracker.givesUpIn\": \"gives up in {time}\",\n \"tracker.indexedCount.one\": \"{count} indexed\",\n \"tracker.indexedCount.other\": \"{count} indexed\",\n \"tracker.indexedFileCount.one\": \"{count} file indexed\",\n \"tracker.indexedFileCount.other\": \"{count} files indexed\",\n \"tracker.indexingCount.one\": \"{count} indexing\",\n \"tracker.indexingCount.other\": \"{count} indexing\",\n \"tracker.lostAgo\": \"lost {time} ago\",\n \"tracker.nextCollection\": \"Next workspace\",\n \"tracker.nextTryIn\": \"Next try in {time}\",\n \"tracker.previousCollection\": \"Previous workspace\",\n \"tracker.reconnecting\": \"Reconnecting…\",\n \"tracker.restoringSession\": \"Restoring your session.\",\n \"tracker.retryAttempt\": \"Retry {attempt} of {max}\",\n \"tracker.retryAttemptWithFiles\": \"Retry {attempt} of {max} · {files}\",\n \"tracker.sectionCompleted\": \"Completed\",\n \"tracker.sectionFailed\": \"Failed\",\n \"tracker.sectionIndexing\": \"Indexing\",\n \"tracker.sectionNotIndexed\": \"Not indexed\",\n \"tracker.sectionUploading\": \"Uploading\",\n \"tracker.signInAgain\": \"Sign in again to resume tracking.\",\n \"tracker.signedOut\": \"Signed out\",\n \"tracker.stageIndexing\": \"2/2 Indexing\",\n \"tracker.stageUploading\": \"1/2 Uploading\",\n \"tracker.toggleSection\": \"Toggle\",\n \"tracker.tryingNow\": \"Trying now…\",\n \"tracker.uploadCount.one\": \"{count} upload\",\n \"tracker.uploadCount.other\": \"{count} uploads\",\n \"tracker.uploadFailed\": \"Upload failed\",\n \"tracker.uploadingCount.one\": \"{count} uploading\",\n \"tracker.uploadingCount.other\": \"{count} uploading\",\n \"tracker.uploadsPaused\": \"{files} paused. Sign in again, then retry.\",\n \"upload.browse\": \"click to browse\",\n \"upload.dropPrefix\": \"Drop your files here, or \",\n \"upload.dropzoneLabel\": \"Drop zone — click to browse files\",\n \"upload.modalTitle\": \"Upload Documents\",\n \"upload.uploadCount.one\": \"Upload {count} file\",\n \"upload.uploadCount.other\": \"Upload {count} files\"\n};\n","// Translation port for the LexiQ Collections custom elements.\n//\n// These are plain Custom Elements, not Angular components: they must stay\n// importable and usable from a page that has no Angular and no Transloco (see\n// index.ts). So nothing here imports a framework — the host installs a\n// `Translator` via setTranslator() and that is the entire integration seam.\n// `providers.ts` supplies the Transloco-backed one for Angular hosts; a plain\n// JS host can install its own, or install none at all and get the bundled\n// English catalog (generated/en.i18n.ts) as a fully working fallback.\n//\n// Two ways to translate, sharing one catalog:\n// - declarative: `data-i18n` attributes in the markup (template.ts and the\n// HTML the views build), re-applied in place on every language change\n// - imperative: t() / tPlural() for strings assigned from code\n//\n// Plurals deliberately avoid ICU message syntax so that the same catalog works\n// through Transloco's messageformat compiler AND through the dependency-free\n// fallback below: a plural key is an object of Intl.PluralRules categories\n// (`{ one: '…', other: '…' }`), selected here and interpolated with `{count}`.\nimport { EN_TRANSLATIONS } from \"../generated/en.i18n\";\n\n/** Values substituted into `{placeholder}` slots of a catalog entry. */\nexport type TranslateParams = Record<string, string | number>;\n\n/**\n * Resolves a catalog key (unscoped, e.g. `list.title`) against the host's\n * translation engine. Returns `undefined` when the host cannot resolve the\n * key, which makes the bundled English catalog take over.\n */\nexport type Translator = (key: string, params?: TranslateParams) => string | undefined;\n\nconst PLACEHOLDER = /\\{\\s*([a-zA-Z0-9_]+)\\s*\\}/g;\n\nlet activeLang = \"en\";\nlet translator: Translator | null = null;\nlet pluralRules = new Intl.PluralRules(\"en\");\n\n// Live element subtrees to re-translate when the language changes. Elements add\n// themselves on connect and remove themselves on disconnect, so a detached\n// element is not retained here.\nconst roots = new Set<ParentNode>();\n\nfunction interpolate(text: string, params?: TranslateParams): string {\n if (!params) return text;\n return text.replace(PLACEHOLDER, (match, name: string) => (name in params ? String(params[name]) : match));\n}\n\nfunction fallback(key: string, params?: TranslateParams): string {\n const text = EN_TRANSLATIONS[key];\n // An unknown key surfaces as the key itself — the same \"loud in dev, harmless\n // in prod\" behaviour Transloco has, and what `npm run i18n:check` guards.\n return text === undefined ? key : interpolate(text, params);\n}\n\n/**\n * Translates a catalog key, falling back to the bundled English text when no\n * host translator is installed or the host cannot resolve the key.\n *\n * @param key - Unscoped catalog key, e.g. `detail.deleteDocTitle`.\n * @param params - Values for the entry's `{placeholder}` slots.\n *\n * @returns The translated string, or the key itself if it exists nowhere.\n */\nexport function t(key: string, params?: TranslateParams): string {\n const translated = translator?.(key, params);\n if (translated === undefined || translated === \"\") return fallback(key, params);\n // Re-interpolate: a translator that substitutes its own placeholders (as\n // Transloco's messageformat does) leaves nothing to replace, while one that\n // ignores `params` would otherwise leak a raw `{count}` into the UI.\n return interpolate(translated, params);\n}\n\n/**\n * Translates a pluralized catalog key by selecting the CLDR plural category for\n * `count` in the active language, then interpolating `{count}`.\n *\n * `key` must resolve to an object of categories in the catalog, so the concrete\n * lookup is e.g. `detail.fileCount.other`. Languages that lack a category fall\n * back to `other`, which every language defines.\n *\n * @param key - Base key of the plural group, e.g. `detail.fileCount`.\n * @param count - The number driving the selection; also injected as `{count}`.\n * @param params - Additional `{placeholder}` values.\n *\n * @returns The translated, interpolated string for the matching category.\n */\nexport function tPlural(key: string, count: number, params?: TranslateParams): string {\n const withCount = { count, ...params };\n const category = pluralRules.select(count);\n const exact = translator?.(`${key}.${category}`, withCount);\n if (exact !== undefined && exact !== \"\") return interpolate(exact, withCount);\n\n // `other` exists in every language, so it is the last resort before the key.\n const catalogKey = EN_TRANSLATIONS[`${key}.${category}`] !== undefined ? category : \"other\";\n return fallback(`${key}.${catalogKey}`, withCount);\n}\n\n/** The active BCP 47 language tag, for `Intl` formatters used across the views. */\nexport function getLang(): string {\n return activeLang;\n}\n\n/**\n * Installs the host's translation engine and language, then re-translates every\n * connected element in place. Call it again on every language change.\n *\n * @param next - Resolver for catalog keys, or null to return to bundled English.\n * @param lang - BCP 47 tag of the language `next` resolves into.\n */\nexport function setTranslator(next: Translator | null, lang: string): void {\n translator = next;\n setLang(lang);\n}\n\n/**\n * Switches the language used for plural selection and `Intl` formatting, and\n * re-translates connected elements. Prefer {@link setTranslator}; this is for\n * hosts that translate through a resolver whose language changes behind it.\n *\n * @param lang - BCP 47 tag, e.g. `fr` or `fr-FR`.\n */\nexport function setLang(lang: string): void {\n activeLang = lang;\n try {\n pluralRules = new Intl.PluralRules(lang);\n } catch {\n // An unsupported tag must not break rendering — keep the previous rules.\n }\n roots.forEach(applyTranslations);\n}\n\n/**\n * Tracks an element subtree so it is re-translated on language changes, and\n * translates it once immediately.\n *\n * @param root - The element's shadow root (or any subtree it owns).\n */\nexport function registerRoot(root: ParentNode): void {\n roots.add(root);\n applyTranslations(root);\n}\n\n/**\n * Stops tracking a subtree. Elements call this from `disconnectedCallback`.\n *\n * @param root - The subtree passed to {@link registerRoot}.\n */\nexport function unregisterRoot(root: ParentNode): void {\n roots.delete(root);\n}\n\n/**\n * Translates every annotated node in a subtree, in place.\n *\n * Recognised attributes:\n * - `data-i18n=\"key\"` — replaces the element's text content\n * - `data-i18n-attr=\"aria-label:key;placeholder:key\"` — sets attributes\n * - `data-i18n-params='{\"name\":\"Foo\"}'` — `{placeholder}` values for both\n * - `data-i18n-count=\"3\"` — selects a plural category (uses {@link tPlural})\n *\n * Only annotate elements whose entire text is translatable; wrap the text node\n * in a `<span data-i18n>` when it sits next to an icon or other markup.\n *\n * @param root - Subtree to translate. Call it on a fragment before insertion.\n */\nexport function applyTranslations(root: ParentNode): void {\n if (isShadowRoot(root)) {\n // Assistive tech needs the language of the shadow content, and it is the\n // hook for `:lang()` / future RTL styling.\n root.host.setAttribute(\"lang\", activeLang);\n }\n\n root.querySelectorAll<HTMLElement>(\"[data-i18n]\").forEach(el => {\n el.textContent = translateFor(el, el.dataset[\"i18n\"]!);\n });\n\n root.querySelectorAll<HTMLElement>(\"[data-i18n-attr]\").forEach(el => {\n for (const pair of el.dataset[\"i18nAttr\"]!.split(\";\")) {\n const separator = pair.indexOf(\":\");\n if (separator < 0) continue;\n const attr = pair.slice(0, separator).trim();\n const key = pair.slice(separator + 1).trim();\n if (attr && key) el.setAttribute(attr, translateFor(el, key));\n }\n });\n}\n\n/**\n * Sets an element's text from the catalog AND annotates it, so a later language\n * change re-translates it in place. Use this instead of assigning `textContent`\n * whenever the text comes from the catalog.\n *\n * @param el - Element whose entire text content is the translated string.\n * @param key - Catalog key.\n * @param params - Values for the entry's `{placeholder}` slots.\n */\nexport function setText(el: HTMLElement, key: string, params?: TranslateParams): void {\n el.dataset[\"i18n\"] = key;\n delete el.dataset[\"i18nCount\"];\n writeParams(el, params);\n el.textContent = t(key, params);\n}\n\n/**\n * Pluralized counterpart of {@link setText}: selects the CLDR category for\n * `count` and keeps the element re-translatable across language changes.\n *\n * @param el - Element whose entire text content is the translated string.\n * @param key - Base key of the plural group.\n * @param count - The number driving the selection; also injected as `{count}`.\n * @param params - Additional `{placeholder}` values.\n */\nexport function setPluralText(el: HTMLElement, key: string, count: number, params?: TranslateParams): void {\n el.dataset[\"i18n\"] = key;\n el.dataset[\"i18nCount\"] = String(count);\n writeParams(el, params);\n el.textContent = tPlural(key, count, params);\n}\n\n/**\n * Empties an element AND drops its annotations, so the walker stops re-filling\n * it on the next language change. The counterpart of {@link setText} for the\n * \"no text right now\" state.\n *\n * @param el - Element to clear.\n */\nexport function clearText(el: HTMLElement): void {\n delete el.dataset[\"i18n\"];\n delete el.dataset[\"i18nCount\"];\n delete el.dataset[\"i18nParams\"];\n el.textContent = \"\";\n}\n\nfunction writeParams(el: HTMLElement, params?: TranslateParams): void {\n if (params) el.dataset[\"i18nParams\"] = JSON.stringify(params);\n else delete el.dataset[\"i18nParams\"];\n}\n\nfunction translateFor(el: HTMLElement, key: string): string {\n const params = readParams(el);\n const rawCount = el.dataset[\"i18nCount\"];\n if (rawCount === undefined) return t(key, params);\n\n const count = Number(rawCount);\n return Number.isNaN(count) ? t(key, params) : tPlural(key, count, params);\n}\n\nfunction readParams(el: HTMLElement): TranslateParams | undefined {\n const raw = el.dataset[\"i18nParams\"];\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as TranslateParams;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Serializes `{placeholder}` values for the `data-i18n-params` attribute, with\n * the escaping needed to sit inside a double-quoted attribute in an HTML string.\n *\n * @param params - Values to carry on the element.\n *\n * @returns An attribute-safe JSON string.\n *\n * @example\n * `<span data-i18n=\"share.removeUser\" data-i18n-params=\"${i18nParams({ name })}\">`\n */\nexport function i18nParams(params: TranslateParams): string {\n return JSON.stringify(params).replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\");\n}\n\nfunction isShadowRoot(root: ParentNode): root is ShadowRoot {\n return typeof ShadowRoot !== \"undefined\" && root instanceof ShadowRoot;\n}\n","// Generic DOM utilities vendored from lexiq-prototype js/app.js, adapted to be\n// Shadow-DOM-scoped (factory-per-root) instead of relying on a single global\n// singleton / document-level ids, since this library may have multiple\n// independent instances on a page (list view + picker + mention list).\nimport { injectIcons } from \"./icons\";\nimport { t } from \"./i18n\";\n\n/* ── Text highlight ──\n Wraps the matched substring in <mark class=\"lq-search-highlight\"> (styled in\n styles/entry.css).\n\n The ported version instead recoloured the text: the match got\n --font-neutral-black, which is already the default colour of every title it\n is applied to, and the *non*-matching text was dimmed to --font-primary-base\n (#445556 vs #182021). So the only rendered effect was a barely-perceptible\n dark-on-dark shift of the text around the match — which is why searching\n looked like it filtered without highlighting anything.\n\n Also builds the result from text nodes rather than innerHTML: the source is\n a user-supplied collection or document name, and interpolating that into\n markup executes anything HTML-ish it contains. */\nexport function highlightSubstring(titleEl: HTMLElement, q: string): void {\n const text = titleEl.dataset[\"rawText\"] || titleEl.textContent || \"\";\n titleEl.dataset[\"rawText\"] = text;\n\n const idx = q ? text.toLowerCase().indexOf(q.toLowerCase()) : -1;\n if (idx === -1) {\n titleEl.textContent = text;\n return;\n }\n\n const mark = document.createElement(\"mark\");\n mark.className = \"lq-search-highlight\";\n mark.textContent = text.slice(idx, idx + q.length);\n\n titleEl.textContent = \"\";\n titleEl.append(text.slice(0, idx), mark, text.slice(idx + q.length));\n}\n\n/* ── Tooltip — one controller per shadow root, so styles/tokens stay scoped ── */\nconst GAP = 8;\n\nexport type TooltipPlacement = \"top\" | \"right\" | \"left\" | \"bottom\";\n\nexport interface TooltipController {\n /**\n * Shows a tooltip on hover. `key` is a catalog key, not literal text, and is\n * resolved on every hover — so a tooltip attached once still follows a later\n * language change without re-attaching anything.\n */\n attach(el: HTMLElement, key: string, placement?: TooltipPlacement, condition?: () => boolean): void;\n position(trigger: HTMLElement, placement?: TooltipPlacement): void;\n el: HTMLSpanElement;\n}\n\nexport function createTooltipController(root: ShadowRoot): TooltipController {\n const tooltipEl = document.createElement(\"span\");\n tooltipEl.setAttribute(\"role\", \"tooltip\");\n tooltipEl.style.display = \"none\";\n root.appendChild(tooltipEl);\n\n function position(trigger: HTMLElement, placement?: TooltipPlacement): void {\n const r = trigger.getBoundingClientRect();\n const s = tooltipEl.style;\n s.top = s.bottom = s.left = s.right = s.transform = \"\";\n switch (placement) {\n case \"right\":\n s.top = r.top + r.height / 2 + \"px\";\n s.left = r.right + GAP + \"px\";\n s.transform = \"translateY(-50%)\";\n break;\n case \"left\":\n s.top = r.top + r.height / 2 + \"px\";\n s.right = window.innerWidth - r.left + GAP + \"px\";\n s.transform = \"translateY(-50%)\";\n break;\n case \"bottom\":\n s.top = r.bottom + GAP + \"px\";\n s.left = r.left + r.width / 2 + \"px\";\n s.transform = \"translateX(-50%)\";\n break;\n default: // top\n s.bottom = window.innerHeight - r.top + GAP + \"px\";\n s.left = r.left + r.width / 2 + \"px\";\n s.transform = \"translateX(-50%)\";\n }\n }\n\n function attach(el: HTMLElement, key: string, placement?: TooltipPlacement, condition?: () => boolean): void {\n el.addEventListener(\"mouseenter\", () => {\n if (condition && !condition()) return;\n tooltipEl.textContent = t(key);\n tooltipEl.className = `oc-tooltip oc-tooltip-placement-${placement}`;\n tooltipEl.style.display = \"\";\n position(el, placement);\n });\n el.addEventListener(\"mouseleave\", () => {\n tooltipEl.style.display = \"none\";\n });\n el.addEventListener(\"mousedown\", () => {\n tooltipEl.style.display = \"none\";\n });\n }\n\n return { attach, position, el: tooltipEl };\n}\n\n/* ── Async submit UX — busy button state + inline error banner, shared by\n every modal/form that now awaits a store call (create/update/remove/...).\n No global error event exists on the store: each call site owns its own\n try/catch and reports through these two primitives instead. ── */\nexport function setButtonBusy(btn: HTMLButtonElement, busy: boolean, busyLabel?: string): void {\n if (busy) {\n if (btn.dataset[\"lqBusy\"] === \"1\") return;\n btn.dataset[\"lqBusy\"] = \"1\";\n btn.dataset[\"lqBusyOriginalHtml\"] = btn.innerHTML;\n btn.disabled = true;\n btn.innerHTML = `<span class=\"lq-btn__spinner\" aria-hidden=\"true\"></span>${busyLabel ? `<span>${busyLabel}</span>` : \"\"}`;\n } else {\n if (btn.dataset[\"lqBusy\"] !== \"1\") return;\n delete btn.dataset[\"lqBusy\"];\n btn.disabled = false;\n btn.innerHTML = btn.dataset[\"lqBusyOriginalHtml\"] ?? \"\";\n delete btn.dataset[\"lqBusyOriginalHtml\"];\n }\n}\n\nexport function showInlineError(el: HTMLElement, message: string): void {\n el.textContent = message;\n el.hidden = false;\n}\n\nexport function clearInlineError(el: HTMLElement): void {\n el.textContent = \"\";\n el.hidden = true;\n}\n\n/**\n * Escapes a string for interpolation into an HTML string.\n *\n * @param text - Untrusted text (a collection or document name, a server message).\n *\n * @returns The text with HTML-significant characters replaced by entities.\n */\nexport function escapeHtml(text: string): string {\n return text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\n/**\n * Fills a confirm-modal description with the \"<subject> will be permanently\n * deleted…\" warning, emphasising the subject.\n *\n * The subject is interpolated into the sentence rather than concatenated in\n * front of it: `{name}` sits mid-sentence in some languages, so a fixed\n * `<strong>` + trailing text split cannot be translated.\n *\n * @param el - The modal's description element.\n * @param subject - What is about to be deleted, already localized and plain text.\n */\nexport function setDeleteWarning(el: HTMLElement, subject: string): void {\n el.innerHTML = t(\"common.deleteWarning\", { name: `<strong>${escapeHtml(subject)}</strong>` });\n}\n\n/* ── Debounce — used by search-as-you-type (security.principal in\n share-modal.ts); generic enough to keep here alongside the other\n framework-free DOM/timing helpers. ── */\nexport function debounce<Args extends unknown[]>(fn: (...args: Args) => void, ms: number): (...args: Args) => void {\n let timer: ReturnType<typeof setTimeout> | null = null;\n return (...args: Args) => {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n fn(...args);\n }, ms);\n };\n}\n\n/* ── Confirm/action modal — backdrop+modal ids resolved within `root` (shadow\n root or document). Real modality, not just a styled backdrop: traps\n Tab/Shift+Tab inside the panel, makes the rest of `root` inert so neither\n the keyboard nor assistive tech can reach it, moves focus into the panel\n on open, and restores it to whatever was focused before on close.\n `onRequestClose` is called on Escape — pass the same guarded close\n function Cancel/backdrop-click already use (e.g. one that no-ops while a\n submit is in flight) so Escape behaves identically to every other way of\n dismissing the modal, instead of a fourth, inconsistent code path. ── */\ninterface ModalState {\n previouslyFocused: HTMLElement | null;\n inerted: HTMLElement[];\n onKeydown: (e: KeyboardEvent) => void;\n}\n\nconst modalStates = new WeakMap<HTMLElement, ModalState>();\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport function openConfirmModal(root: ShadowRoot, backdropId: string, modalId: string, onRequestClose: () => void): void {\n const bd = root.getElementById(backdropId)!;\n const md = root.getElementById(modalId)!;\n injectIcons(md);\n bd.hidden = false;\n md.hidden = false;\n requestAnimationFrame(() => {\n bd.classList.add(\"lq-confirm--open\");\n md.classList.add(\"lq-confirm--open\");\n });\n\n const previouslyFocused = root.activeElement as HTMLElement | null;\n\n const inerted: HTMLElement[] = [];\n Array.from(root.children).forEach(child => {\n // lq-upload-tracker deliberately floats above modals (z-index 2000 vs.\n // 401 — see collection-detail-view.css) so an in-progress upload stays\n // visible/dismissable even while a confirm/edit/share modal is open.\n if (child === md || child === bd || child.id === \"lq-upload-tracker\" || child.hasAttribute(\"inert\")) return;\n const el = child as HTMLElement;\n el.setAttribute(\"inert\", \"\");\n // Belt-and-suspenders alongside `inert`: the backdrop already covers the\n // viewport (no pointer-events:none on .lq-confirm-backdrop, see\n // generic-misc.css), but this makes the block unconditional instead of\n // depending on the backdrop's exact size/stacking-context in every host\n // page, and doesn't rely on every engine's `inert` also suppressing hit\n // testing on its own.\n el.style.pointerEvents = \"none\";\n inerted.push(el);\n });\n\n function focusables(): HTMLElement[] {\n return Array.from(md.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n }\n\n // Only falls back to the panel's first focusable element — a call site\n // that already moves focus to a specific field (e.g. via its own\n // requestAnimationFrame right after calling this) simply overrides this a\n // moment later, since that always runs after this synchronous code.\n if (!md.contains(root.activeElement)) focusables()[0]?.focus();\n\n function onKeydown(e: KeyboardEvent): void {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onRequestClose();\n return;\n }\n if (e.key !== \"Tab\") return;\n const items = focusables();\n if (!items.length) return;\n const first = items[0];\n const last = items[items.length - 1];\n const active = root.activeElement;\n if (e.shiftKey) {\n if (active === first || !md.contains(active)) {\n e.preventDefault();\n last.focus();\n }\n } else if (active === last || !md.contains(active)) {\n e.preventDefault();\n first.focus();\n }\n }\n md.addEventListener(\"keydown\", onKeydown);\n\n modalStates.set(md, { previouslyFocused, inerted, onKeydown });\n}\n\nexport function closeConfirmModal(root: ShadowRoot, backdropId: string, modalId: string): void {\n const bd = root.getElementById(backdropId)!;\n const md = root.getElementById(modalId)!;\n bd.classList.remove(\"lq-confirm--open\");\n md.classList.remove(\"lq-confirm--open\");\n md.addEventListener(\n \"transitionend\",\n () => {\n md.hidden = true;\n bd.hidden = true;\n },\n { once: true }\n );\n\n const state = modalStates.get(md);\n if (!state) return;\n modalStates.delete(md);\n md.removeEventListener(\"keydown\", state.onKeydown);\n state.inerted.forEach(el => {\n el.removeAttribute(\"inert\");\n el.style.pointerEvents = \"\";\n });\n if (state.previouslyFocused && root.contains(state.previouslyFocused)) state.previouslyFocused.focus();\n}\n\n/* ── Mobile bottom sheet — self-contained (builds its own DOM), one per root ──\n Adapted from the lexiq-prototype version, which relied on pre-existing host\n ids (#lq-mobile-sheet, #mobile-sheet-panel, ...). A generic, standalone\n component cannot assume the host page already has that markup, so this\n controller creates its own sheet structure lazily inside `root` instead. */\nexport interface MobileSheetController {\n open(panelEl: HTMLElement, titleText: string, originEl?: HTMLElement | null): void;\n close(): void;\n}\n\nexport function createMobileSheetController(root: ShadowRoot): MobileSheetController {\n const sheet = document.createElement(\"div\");\n sheet.className = \"lq-mobile-sheet\";\n sheet.hidden = true;\n\n const backdrop = document.createElement(\"div\");\n backdrop.className = \"lq-mobile-sheet__backdrop\";\n\n const panel = document.createElement(\"div\");\n panel.className = \"lq-mobile-sheet__panel\";\n\n const handle = document.createElement(\"div\");\n handle.className = \"lq-mobile-sheet__handle\";\n\n const header = document.createElement(\"div\");\n header.className = \"lq-mobile-sheet__header\";\n\n const title = document.createElement(\"div\");\n title.className = \"lq-mobile-sheet__title\";\n\n const body = document.createElement(\"div\");\n body.className = \"lq-mobile-sheet__body\";\n\n header.appendChild(title);\n panel.append(handle, header, body);\n sheet.append(backdrop, panel);\n root.appendChild(sheet);\n\n let activePanel: HTMLElement | null = null;\n let activeOrigin: HTMLElement | null = null;\n\n function open(panelEl: HTMLElement, titleText: string, originEl?: HTMLElement | null): void {\n activePanel = panelEl;\n activeOrigin = originEl || null;\n body.appendChild(panelEl);\n panelEl.hidden = false;\n title.textContent = titleText;\n sheet.hidden = false;\n requestAnimationFrame(() => {\n sheet.classList.add(\"lq-mobile-sheet--open\");\n });\n injectIcons(body);\n }\n\n function close(): void {\n sheet.classList.remove(\"lq-mobile-sheet--open\");\n panel.style.transform = \"\";\n panel.style.transition = \"\";\n panel.addEventListener(\n \"transitionend\",\n function onEnd() {\n panel.removeEventListener(\"transitionend\", onEnd);\n sheet.hidden = true;\n if (activePanel) {\n activePanel.hidden = true;\n if (activeOrigin) activeOrigin.appendChild(activePanel);\n activePanel = null;\n activeOrigin = null;\n }\n body.innerHTML = \"\";\n },\n { once: true }\n );\n }\n\n backdrop.addEventListener(\"click\", close);\n\n let dragStartY = 0,\n dragCurrentY = 0,\n dragging = false;\n handle.addEventListener(\n \"touchstart\",\n (e: TouchEvent) => {\n dragStartY = e.touches[0].clientY;\n dragCurrentY = dragStartY;\n dragging = true;\n panel.style.transition = \"none\";\n },\n { passive: true }\n );\n\n root.addEventListener(\n \"touchmove\",\n ((e: TouchEvent) => {\n if (!dragging) return;\n dragCurrentY = e.touches[0].clientY;\n const delta = Math.max(0, dragCurrentY - dragStartY);\n panel.style.transform = `translateY(${delta}px)`;\n }) as EventListener,\n { passive: true }\n );\n\n root.addEventListener(\"touchend\", () => {\n if (!dragging) return;\n dragging = false;\n const delta = dragCurrentY - dragStartY;\n panel.style.transition = \"\";\n if (delta > 80) close();\n else panel.style.transform = \"\";\n });\n\n return { open, close };\n}\n","// The container API has no `icon` field — deterministically derive one from\n// the container id instead, so the same container always renders with the\n// same icon across reloads/reorders without the server needing to know\n// anything about it. Reuses the same named folder-icon set the old seed data\n// used (see internal/icons.ts).\nconst CONTAINER_ICON_PALETTE = [\n \"col-folder\",\n \"col-folder-teal\",\n \"col-folder-pink\",\n \"col-folder-blue\",\n \"col-folder-orange\",\n \"col-folder-indigo\",\n \"col-folder-green\"\n];\n\nexport function iconForContainerId(id: string): string {\n let hash = 0;\n for (let i = 0; i < id.length; i++) {\n hash = (hash * 31 + id.charCodeAt(i)) | 0;\n }\n const index = Math.abs(hash) % CONTAINER_ICON_PALETTE.length;\n return CONTAINER_ICON_PALETTE[index];\n}\n","// Shared between upload-tracker.ts's mocked upload flow and store/mappers.ts —\n// the container-management API's document DTO carries no `type` field, so\n// it's derived from the filename the same way an uploaded file's is.\nexport function getDocType(filename: string): string {\n const ext = filename.slice(filename.lastIndexOf(\".\")).toLowerCase();\n if (ext === \".pdf\") return \"pdf\";\n if (ext === \".csv\" || ext === \".xlsx\") return \"csv\";\n return \"doc\";\n}\n","// The container-management API's document DTO only carries `createdAt`\n// (ISO 8601) — this turns it into the same \"Added X ago\" style label the\n// old seeded documents used. `now` is injectable so callers/tests don't\n// depend on the wall clock.\n//\n// The relative part is produced by Intl.RelativeTimeFormat rather than a\n// catalog entry per unit: it localizes the number, the unit and the \"ago\"\n// pattern in one call, and `numeric: 'auto'` gives idiomatic forms\n// (\"yesterday\", \"last week\") that a per-unit catalog would have had to spell\n// out for every language.\nimport { getLang, t } from \"./i18n\";\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MS = 3_600_000;\nconst DAY_MS = 86_400_000;\n\n/**\n * Formats a document's creation date as a localized \"Added <relative>\" label.\n *\n * @param iso - ISO 8601 timestamp from the API (`createdAt`).\n * @param now - Reference time, injectable for tests.\n *\n * @returns The localized label, or an empty string when `iso` is unparseable.\n */\nexport function formatRelativeDate(iso: string, now: number = Date.now()): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return \"\";\n\n const diffMs = Math.max(0, now - date.getTime());\n const diffMinutes = Math.floor(diffMs / MINUTE_MS);\n const diffHours = Math.floor(diffMs / HOUR_MS);\n const diffDays = Math.floor(diffMs / DAY_MS);\n\n // Sub-minute has no natural Intl form (\"now\" reads oddly next to \"Added\"), so\n // it keeps its own catalog entry.\n if (diffMinutes < 1) return t(\"format.addedJustNow\");\n\n return t(\"format.added\", { relative: relativeLabel(diffMinutes, diffHours, diffDays) });\n}\n\nfunction relativeLabel(diffMinutes: number, diffHours: number, diffDays: number): string {\n const formatter = relativeFormatter();\n\n if (diffMinutes < 60) return formatter.format(-diffMinutes, \"minute\");\n if (diffHours < 24) return formatter.format(-diffHours, \"hour\");\n if (diffDays < 7) return formatter.format(-diffDays, \"day\");\n if (diffDays < 30) return formatter.format(-Math.floor(diffDays / 7), \"week\");\n return formatter.format(-Math.floor(diffDays / 30), \"month\");\n}\n\n// Rebuilt whenever the language changes; constructing a formatter is not free,\n// so the common case (many document cards, one language) reuses one instance.\nlet cachedFormatter: Intl.RelativeTimeFormat | null = null;\nlet cachedLang = \"\";\n\nfunction relativeFormatter(): Intl.RelativeTimeFormat {\n const lang = getLang();\n if (!cachedFormatter || cachedLang !== lang) {\n cachedFormatter = new Intl.RelativeTimeFormat(lang, { numeric: \"auto\" });\n cachedLang = lang;\n }\n return cachedFormatter;\n}\n\n/**\n * Formats a byte count as a localized file size (B, KB, then MB).\n *\n * @param bytes - Size in bytes.\n *\n * @returns The localized size, e.g. `1.2 MB`.\n */\nexport function formatFileSize(bytes: number): string {\n const lang = getLang();\n if (bytes < 1024) {\n return new Intl.NumberFormat(lang, { style: \"unit\", unit: \"byte\" }).format(bytes);\n }\n if (bytes < 1024 * 1024) {\n const kb = Math.max(1, Math.round(bytes / 1024));\n return new Intl.NumberFormat(lang, { style: \"unit\", unit: \"kilobyte\" }).format(kb);\n }\n const mb = bytes / (1024 * 1024);\n return new Intl.NumberFormat(lang, {\n style: \"unit\",\n unit: \"megabyte\",\n maximumFractionDigits: 1\n }).format(mb);\n}\n","// Wire shape (@sinequa/atomic's Container/ContainerDocument) -> view model\n// (Collection/CollectionDocument) conversion. Kept separate from\n// @sinequa/atomic so the store can map a response without needing to know\n// anything about HTTP.\nimport type { Container, ContainerDocument } from \"@sinequa/atomic\";\nimport type { Collection, CollectionDocument } from \"./collections-store\";\nimport { iconForContainerId } from \"../internal/container-icon\";\nimport { getDocType } from \"../internal/doc-type\";\nimport { formatRelativeDate } from \"../internal/format\";\n\nexport function mapContainerToCollection(dto: Container): Collection {\n return {\n id: dto.id,\n name: dto.name,\n desc: dto.description ?? \"\",\n tags: dto.tags ?? [],\n docs: dto.documentCount,\n icon: iconForContainerId(dto.id),\n creatorId: dto.creator,\n ownerIds: dto.owners ?? [],\n readerIds: dto.readers ?? [],\n currentUserRole: dto.currentUserRole\n };\n}\n\n/** Lifecycle status of a document as the documents listing spells it. */\nexport type WireDocumentStatus = \"uploading\" | \"ready_for_indexing\" | \"indexing\" | \"indexed\" | \"integrity_failed\" | \"failed\";\n\n// The server sends status/percent/jobId on every document, but @sinequa/atomic\n// ContainerDocument declares none of the three. Drop this widening once\n// atomic declares them.\ntype WireContainerDocument = ContainerDocument & {\n status?: WireDocumentStatus;\n percent?: number;\n jobId?: string;\n};\n\n/**\n * Server lifecycle status -> the three-state badge the views render.\n * `indexed` maps to null (terminal success, renders as a plain date), and an\n * absent or unknown status maps to undefined so the document renders with no\n * badge at all rather than a wrong one.\n */\nexport function mapDocumentStatus(status?: string): CollectionDocument[\"status\"] {\n switch (status) {\n case \"uploading\":\n return \"uploading\";\n case \"ready_for_indexing\":\n case \"indexing\":\n return \"indexing\";\n case \"indexed\":\n return null;\n case \"integrity_failed\":\n case \"failed\":\n return \"error\";\n default:\n return undefined;\n }\n}\n\n// size/source/uploadedBy have no server equivalent (see CollectionDocument's\n// own comments in collections-store.ts) — left unset for server-loaded docs.\n// status/percent/jobId, by contrast, ARE served: mapping them is what lets a\n// document keep its badge across a reload or a re-open of the collection.\nexport function mapDocumentToCollectionDocument(dto: ContainerDocument): CollectionDocument {\n const wire = dto as WireContainerDocument;\n return {\n _id: dto.id,\n name: dto.name,\n containerId: dto.containerId,\n type: getDocType(dto.name),\n date: formatRelativeDate(dto.createdAt),\n status: mapDocumentStatus(wire.status),\n percent: wire.percent,\n jobId: wire.jobId\n };\n}\n","// Headless, framework-free state shared by the 3 custom elements\n// (<lexiq-collections>, <lexiq-collection-picker>, <lexiq-collection-mention-list>).\n// Replaces the global `collectionsData`/`documentsData`/`selectedCollections` that\n// lexiq-prototype relied on (safe there only because everything ran in one\n// global <script> scope — each Custom Element here has its own module scope).\n//\n// Pattern: a singleton EventTarget. Consumers subscribe via store.addEventListener\n// and re-render the slice they care about; they never read/write the underlying\n// arrays directly from outside this module.\n//\n// Network-backed cache (ES-32400): getAll()/get()/getDocuments() are\n// synchronous reads over a local cache; ensureLoaded()/load()/loadMore()/\n// loadDocuments()/loadMoreDocuments() are the only things that talk to the\n// container-management API (@sinequa/atomic's\n// web-api/v2/fetch-document-upload-container.ts), and create/update/\n// remove/removeDocuments resolve or reject a Promise around the matching\n// endpoint. saveDocuments/moveDocuments round-trip too, through atomic's\n// addContainerDocuments() — ES-32400 never covered \"attach an existing\n// document to a container\", so its backend contract is provisional (see BACKEND-REQUEST-save-move-to-\n// collection.md). addDocuments alone stays purely local: it's only the tus\n// upload flow's optimistic pre-transfer cache update (see its own comment).\nimport {\n getContainer,\n createContainer,\n updateContainer,\n deleteContainers,\n deleteContainerDocuments,\n listContainers,\n listContainerDocuments,\n addContainerDocuments\n} from \"@sinequa/atomic\";\nimport type { UpdateContainerInput } from \"@sinequa/atomic\";\nimport { mapContainerToCollection, mapDocumentToCollectionDocument } from \"../store/mappers\";\n\nexport type ContainerRole = \"creator\" | \"owner\" | \"reader\";\n\nexport interface Collection {\n id: string;\n name: string;\n icon: string;\n desc: string;\n tags: string[];\n docs: number;\n creatorId: string;\n ownerIds: string[];\n readerIds: string[];\n currentUserRole: ContainerRole;\n}\n\nexport interface CollectionDocument {\n _id: string;\n name: string;\n containerId?: string;\n type: string;\n // The container API's document list only carries `createdAt` — `date` is a\n // pre-formatted display label derived from it (or from a local upload\n // timestamp for documents added via the still-mocked upload-tracker path).\n date: string;\n // Not present on server-loaded documents (no size/source/uploadedBy on\n // GET .../documents) — only ever set for the mocked upload-tracker path.\n size?: string;\n source?: string;\n status?: \"uploading\" | \"indexing\" | \"error\" | null;\n uploadedBy?: string;\n // Both come from the documents listing, which is read from the server's\n // status store (so a document appears there from the moment it starts\n // uploading, not only once indexed). `jobId` is what ties a document back to\n // a job in GET .../document-upload/status.\n percent?: number;\n jobId?: string;\n}\n\nconst DEFAULT_PAGE_SIZE = 100; // API max — see ES-32400-IMPLEMENTATION-PLAN.md pagination strategy\n\nclass CollectionsStore extends EventTarget {\n collections: Collection[] = [];\n documents: Record<string, CollectionDocument[]> = {};\n selectedIds: Set<string> = new Set();\n\n private _loaded = false;\n private _loadingPromise: Promise<Collection[]> | null = null;\n private _page = 0;\n private _total = 0;\n private _documentsState: Record<string, { page: number; total: number }> = {};\n\n private _emit(type: string, detail: unknown): void {\n this.dispatchEvent(new CustomEvent(type, { detail }));\n }\n\n getAll(): Collection[] {\n return this.collections;\n }\n\n get(id: string): Collection | null {\n return this.collections.find(c => c.id === id) || null;\n }\n\n // Fallback for a deep-link opened before ensureLoaded() has populated the\n // cache (or for an id that isn't on the currently loaded page) — fetches\n // the container directly rather than assuming it's already cached.\n async fetchContainer(id: string): Promise<Collection> {\n const dto = await getContainer(id);\n const col = mapContainerToCollection(dto);\n const idx = this.collections.findIndex(c => c.id === id);\n if (idx === -1) this.collections.push(col);\n else this.collections[idx] = col;\n return col;\n }\n\n get hasMoreCollections(): boolean {\n return this.collections.length < this._total;\n }\n\n // Idempotent — every entry point that needs the list (list-view,\n // mention-list, collection-picker) calls this; only the first caller\n // triggers a real fetch, the rest await the same in-flight promise.\n ensureLoaded(): Promise<Collection[]> {\n if (this._loaded) return Promise.resolve(this.collections);\n if (!this._loadingPromise) this._loadingPromise = this.load();\n return this._loadingPromise;\n }\n\n // Unlike ensureLoaded(), always goes back to the server — the list view\n // calls it on every return from a collection's files view so containers\n // created by others appear and file counts are current (ES-33713). Shares\n // an in-flight load the same way. A failure leaves the cache as it was.\n reload(): Promise<Collection[]> {\n if (!this._loadingPromise) this._loadingPromise = this.load();\n return this._loadingPromise;\n }\n\n async load(): Promise<Collection[]> {\n try {\n const res = await listContainers({ page: 1, pageSize: DEFAULT_PAGE_SIZE });\n this.collections = res.containers.map(mapContainerToCollection);\n this._page = res.page;\n this._total = res.total;\n this._loaded = true;\n this._emit(\"collections-loaded\", { collections: this.collections });\n return this.collections;\n } finally {\n this._loadingPromise = null;\n }\n }\n\n async loadMore(): Promise<Collection[]> {\n if (!this.hasMoreCollections) return this.collections;\n const res = await listContainers({ page: this._page + 1, pageSize: DEFAULT_PAGE_SIZE });\n this.collections = [...this.collections, ...res.containers.map(mapContainerToCollection)];\n this._page = res.page;\n this._total = res.total;\n this._emit(\"collections-loaded\", { collections: this.collections });\n return this.collections;\n }\n\n // owners/readers are optional and go out on the same POST as the metadata —\n // the create endpoint accepts them (ContainerCreateRequestViewModel), so a\n // collection created with people already on it costs one round trip, not a\n // create followed by a share (ES-33405).\n async create({\n name,\n desc = \"\",\n tags = [],\n owners = [],\n readers = []\n }: {\n name: string;\n desc?: string;\n tags?: string[];\n owners?: string[];\n readers?: string[];\n }): Promise<Collection> {\n const dto = await createContainer({ name, description: desc, tags, owners, readers });\n const col = mapContainerToCollection(dto);\n this.collections.push(col);\n this.documents[col.id] = [];\n this._emit(\"collection-created\", { collection: col });\n return col;\n }\n\n // patch is wire-shaped (matches PUT .../container/{id}'s body), not\n // Collection-shaped — callers assembling owners/readers changes (share-\n // modal.ts) always send the two full arrays, since the API replaces them\n // rather than patching deltas.\n async update(id: string, patch: UpdateContainerInput): Promise<Collection | null> {\n const existing = this.get(id);\n if (!existing) return null;\n const dto = await updateContainer(id, patch);\n const updated = mapContainerToCollection(dto);\n const idx = this.collections.findIndex(c => c.id === id);\n if (idx !== -1) this.collections[idx] = updated;\n this._emit(\"collection-updated\", { collection: updated });\n return updated;\n }\n\n // Always a bulk call, even for a single id — the API only exposes a bulk\n // DELETE. Only the ids the server actually confirmed deleted are dropped\n // from the cache; a partial failure leaves the rest in place for the call\n // site to report.\n async remove(ids: string[]): Promise<{ succeeded: string[]; failed: { id: string; error: string }[] }> {\n const result = await deleteContainers(ids);\n const succeededSet = new Set(result.succeeded);\n this.collections = this.collections.filter(c => !succeededSet.has(c.id));\n result.succeeded.forEach(id => {\n delete this.documents[id];\n this.selectedIds.delete(id);\n });\n const failed = result.failed.map(f => ({ id: f.containerId, error: f.error }));\n this._emit(\"collection-deleted\", { succeeded: result.succeeded, failed });\n return { succeeded: result.succeeded, failed };\n }\n\n getDocuments(collectionId: string): CollectionDocument[] {\n return this.documents[collectionId] || [];\n }\n\n hasMoreDocuments(collectionId: string): boolean {\n const state = this._documentsState[collectionId];\n if (!state) return false;\n return this.getDocuments(collectionId).length < state.total;\n }\n\n async loadDocuments(collectionId: string): Promise<CollectionDocument[]> {\n const res = await listContainerDocuments(collectionId, { page: 1, pageSize: DEFAULT_PAGE_SIZE });\n const docs = res.documents.map(mapDocumentToCollectionDocument);\n this.documents[collectionId] = docs;\n this._documentsState[collectionId] = { page: res.page, total: res.total };\n this._emit(\"documents-loaded\", { collectionId, documents: docs });\n return docs;\n }\n\n async loadMoreDocuments(collectionId: string): Promise<CollectionDocument[]> {\n if (!this.hasMoreDocuments(collectionId)) return this.getDocuments(collectionId);\n const nextPage = (this._documentsState[collectionId]?.page ?? 0) + 1;\n const res = await listContainerDocuments(collectionId, { page: nextPage, pageSize: DEFAULT_PAGE_SIZE });\n const merged = [...this.getDocuments(collectionId), ...res.documents.map(mapDocumentToCollectionDocument)];\n this.documents[collectionId] = merged;\n this._documentsState[collectionId] = { page: res.page, total: res.total };\n this._emit(\"documents-loaded\", { collectionId, documents: merged });\n return merged;\n }\n\n // Local-only — used only by the tus upload flow (upload-tracker.ts) to\n // optimistically render a document before its bytes are even sent; the\n // document is genuinely persisted separately once tus's onUploadFinish\n // fires server-side (see server/mock-server.mjs). No longer used by \"Save\n // to collection\" — see saveDocuments() below for that.\n addDocuments(collectionId: string, docs: CollectionDocument[]): void {\n const list = this.documents[collectionId] || (this.documents[collectionId] = []);\n list.push(...docs);\n const col = this.get(collectionId);\n if (col) col.docs = list.length;\n this._emit(\"document-uploaded\", { collectionId, docs });\n }\n\n // \"Save to collection\" — attaches an already-existing document (no file\n // transfer) to a container. ES-32400 never covered this case; goes through\n // atomic's addContainerDocuments() (provisional contract) — see BACKEND-REQUEST-save-move-to-collection.md.\n async saveDocuments(collectionId: string, docs: CollectionDocument[]): Promise<CollectionDocument[]> {\n const created = await addContainerDocuments(\n collectionId,\n docs.map(d => ({ name: d.name }))\n );\n const mapped = created.map(mapDocumentToCollectionDocument);\n const list = this.documents[collectionId] || (this.documents[collectionId] = []);\n list.push(...mapped);\n const col = this.get(collectionId);\n if (col) col.docs = list.length;\n this._emit(\"document-uploaded\", { collectionId, docs: mapped });\n return mapped;\n }\n\n async removeDocuments(collectionId: string, docIds: string[]): Promise<void> {\n await deleteContainerDocuments(collectionId, docIds);\n const list = this.documents[collectionId] || [];\n this.documents[collectionId] = list.filter(d => !docIds.includes(d._id));\n const col = this.get(collectionId);\n if (col) col.docs = this.documents[collectionId].length;\n this._emit(\"document-deleted\", { collectionId, docIds });\n }\n\n // \"Move to collection\" — same missing-endpoint situation as saveDocuments()\n // above. There's no dedicated \"re-parent\" endpoint, so this attaches a copy\n // in the target container first and only deletes the originals from the\n // source once that succeeds, so a failed attach leaves the source\n // untouched instead of losing the documents.\n async moveDocuments(fromCollectionId: string, toCollectionId: string, docIds: string[]): Promise<void> {\n const from = this.documents[fromCollectionId] || [];\n const moved = from.filter(d => docIds.includes(d._id));\n if (!moved.length) return;\n\n const created = await addContainerDocuments(\n toCollectionId,\n moved.map(d => ({ name: d.name }))\n );\n const mapped = created.map(mapDocumentToCollectionDocument);\n const to = this.documents[toCollectionId] || (this.documents[toCollectionId] = []);\n to.push(...mapped);\n\n await deleteContainerDocuments(fromCollectionId, docIds);\n this.documents[fromCollectionId] = from.filter(d => !docIds.includes(d._id));\n\n const fromCol = this.get(fromCollectionId);\n const toCol = this.get(toCollectionId);\n if (fromCol) fromCol.docs = this.documents[fromCollectionId].length;\n if (toCol) toCol.docs = to.length;\n this._emit(\"document-moved\", { fromCollectionId, toCollectionId, docIds });\n }\n\n /* ── Selection state for the \"+\"/\"@\" mention pickers ── */\n toggleSelected(id: string, checked: boolean): void {\n if (checked) this.selectedIds.add(id);\n else this.selectedIds.delete(id);\n this._emit(\"selection-changed\", { ids: [...this.selectedIds] });\n }\n\n get selectedCount(): number {\n return this.selectedIds.size;\n }\n}\n\nexport const store = new CollectionsStore();\n","// Central place to turn a caught error into a user-facing string for the\n// inline error banners (showInlineError() in dom-utils.ts) — one seam so\n// ApiError gets special-cased here instead of scattering `instanceof`\n// checks across every view. A 409 container_locked response has no\n// dedicated error class (see ES-32400-IMPLEMENTATION-PLAN.md, migration\n// section) — it falls into the default branch below, whose message is\n// already the server's human-readable text (e.g. \"Container is locked...\").\n//\n// i18n note: that default branch is deliberately NOT translated — it passes\n// the server's own prose through. Only the statuses we recognise get a\n// catalog entry, so localizing the rest depends on the container-management\n// API returning stable error codes instead of English sentences.\nimport { ApiError } from \"@sinequa/atomic\";\n\nimport { t } from \"./i18n\";\n\n/**\n * Maps a caught error to the message shown in an inline error banner.\n *\n * @param err - The caught value, of any type.\n *\n * @returns A user-facing message, localized where the status is recognised.\n */\nexport function errorMessageFor(err: unknown): string {\n if (err instanceof ApiError) {\n switch (err.status) {\n case 401:\n return t(\"errors.signIn\");\n case 403:\n return t(\"errors.forbidden\");\n case 404:\n return t(\"errors.notFound\");\n default:\n return err.message || t(\"errors.generic\");\n }\n }\n return err instanceof Error && err.message ? err.message : t(\"errors.generic\");\n}\n","// Migrated from lexiq-prototype collections/js/collections-list.js.\n// The HTML-fragment-fetch mechanism is gone entirely — the template is now\n// embedded and cloned synchronously by the element itself before this runs,\n// so there is no more \"fragment ready\" race to guard against.\nimport { store } from \"../store/collections-store\";\nimport type { Collection } from \"../store/collections-store\";\nimport { injectIcons } from \"../internal/icons\";\nimport {\n openConfirmModal,\n closeConfirmModal,\n highlightSubstring,\n setButtonBusy,\n setDeleteWarning,\n showInlineError,\n clearInlineError\n} from \"../internal/dom-utils\";\nimport { errorMessageFor } from \"../internal/error-messages\";\nimport { clearText, setPluralText, setText, t, tPlural } from \"../internal/i18n\";\nimport type { CollectionsHost } from \"../internal/host-contract\";\n\n/* Shared \"delete confirm\" button — used both here (single-card / bulk delete)\n and in views/detail-view.ts (delete-currently-open-collection). */\ntype DeleteConfirmButton = HTMLElement & {\n _targetCard?: HTMLElement | null;\n _bulkTargets?: HTMLElement[] | null;\n _detailCol?: Collection | null;\n};\n\nexport function initListView(host: CollectionsHost): void {\n const root = host.shadowRoot;\n // Locks Cancel/Close/backdrop-click on the delete-confirm modal while the\n // bulk DELETE is in flight — see the identical rationale in detail-view.ts.\n let colDeleteSubmitting = false;\n\n function openColDeleteModal(): void {\n clearInlineError(root.getElementById(\"col-delete-error\")!);\n openConfirmModal(root, \"col-delete-backdrop\", \"col-delete-modal\", closeColDeleteModal);\n }\n\n function updateColTabCounts(): void {\n const grid = root.getElementById(\"col-grid\");\n if (!grid) return;\n const cards = [...grid.querySelectorAll(\".lq-col-card\")] as HTMLElement[];\n const total = cards.length;\n const editor = cards.filter(c => c.dataset[\"role\"] === \"creator\" || c.dataset[\"role\"] === \"owner\").length;\n const reader = cards.filter(c => c.dataset[\"role\"] === \"reader\").length;\n root.getElementById(\"col-badge-all\")!.textContent = String(total);\n root.getElementById(\"col-badge-mine\")!.textContent = String(editor);\n root.getElementById(\"col-badge-shared\")!.textContent = String(reader);\n\n host._applyColFilters?.();\n }\n\n function buildCollectionCard(col: Collection): HTMLElement {\n const card = document.createElement(\"div\");\n card.className = \"lq-col-card\";\n card.dataset[\"id\"] = col.id;\n card.dataset[\"role\"] = col.currentUserRole;\n\n const tagsHTML = col.tags.map(tag => `<span class=\"oc-tag oc-tag-size-xsmall oc-tag-grey\"><span class=\"oc-tag-label\">${tag}</span></span>`).join(\"\");\n\n const isEditor = col.currentUserRole !== \"reader\";\n const roleIcon = isEditor ? \"col-person\" : \"col-people\";\n const roleKey = isEditor ? \"list.roleOwner\" : \"list.roleShared\";\n const roleTagHTML = `<span class=\"oc-tag oc-tag-size-xsmall oc-tag-indigo\">\n <span class=\"oc-tag-icon\"><i data-icon=\"${roleIcon}\"></i></span>\n <span class=\"oc-tag-label\" data-i18n=\"${roleKey}\">${t(roleKey)}</span>\n </span>`;\n\n card.innerHTML = `\n <div class=\"lq-col-card__header\">\n <span class=\"lq-col-card__icon\"><i data-icon=\"${col.icon}\"></i></span>\n <div class=\"lq-col-card__meta\">\n <div class=\"lq-col-card__title-row\">\n <h5 class=\"lq-col-card__title\">${col.name}</h5>\n <div class=\"lq-col-card__actions\">\n ${\n isEditor\n ? `<button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon lq-col-card__btn-del\" data-i18n-attr=\"aria-label:list.deleteCollection\" aria-label=\"Delete workspace\">\n <i data-icon=\"col-trash\"></i>\n </button>`\n : \"\"\n }\n <label class=\"oc-checkbox-root lq-col-card__checkbox\">\n <input type=\"checkbox\" class=\"oc-checkbox-input lq-col-card__check-input\">\n <span class=\"oc-checkbox-hitbox\">\n <span class=\"oc-checkbox-control\">\n <span class=\"oc-checkbox-icon oc-checkbox-icon-check\"><i data-icon=\"checkbox-check\"></i></span>\n <span class=\"oc-checkbox-icon oc-checkbox-icon-minus\"><i data-icon=\"checkbox-minus\"></i></span>\n </span>\n </span>\n </label>\n </div>\n </div>\n </div>\n </div>\n <div class=\"lq-col-card__tags\">${tagsHTML}</div>\n <div class=\"lq-col-card__body\">\n <p class=\"lq-col-card__desc\">${col.desc}</p>\n </div>\n <div class=\"lq-col-card__sep\"></div>\n <div class=\"lq-col-card__footer\">\n ${roleTagHTML}\n <div class=\"lq-col-card__count\">\n <i data-icon=\"col-file\"></i>\n <span>${col.docs}</span>\n </div>\n </div>`;\n\n const delBtn = card.querySelector(\".lq-col-card__btn-del\") as HTMLElement | null;\n\n if (delBtn) {\n host._tooltip.attach(delBtn, \"common.delete\", \"top\");\n delBtn.addEventListener(\"click\", () => {\n setDeleteWarning(root.getElementById(\"col-delete-desc\")!, col.name);\n (root.getElementById(\"btn-col-delete-confirm\") as DeleteConfirmButton)._targetCard = card;\n openColDeleteModal();\n });\n }\n\n card.addEventListener(\"click\", e => {\n const target = e.target as HTMLElement;\n if (target.closest(\".lq-col-card__btn-del\") || target.closest(\".lq-col-card__checkbox\")) return;\n if (root.getElementById(\"col-grid\")!.classList.contains(\"lq-col-grid--selecting\")) return;\n host._openColDetail(col);\n });\n\n return card;\n }\n\n function resetAndCloseColDeleteModal(): void {\n closeConfirmModal(root, \"col-delete-backdrop\", \"col-delete-modal\");\n setText(root.getElementById(\"col-delete-modal-title\")!, \"list.deleteTitle\");\n clearText(root.getElementById(\"col-delete-desc\")!);\n }\n\n // Cancel/Close/backdrop go through this guarded wrapper; the confirm\n // handler's own success path calls resetAndCloseColDeleteModal() directly\n // since colDeleteSubmitting is still true at that point.\n function closeColDeleteModal(): void {\n if (colDeleteSubmitting) return;\n resetAndCloseColDeleteModal();\n }\n\n host._colGridBuilt = false;\n host._colListBuilt = false;\n host._colCurrentView = \"grid\";\n\n /* Keep the grid/list reactively in sync with the store no matter which\n creation path fired it (inline mini-form in collection-picker.js, or the\n full Add-Collection modal in detail-view.js) — both funnel through the\n same store.create(), which emits this event exactly once per call. */\n store.addEventListener(\"collection-created\", e => {\n const { collection } = (e as CustomEvent<{ collection: Collection }>).detail;\n if (host._colGridBuilt) {\n const grid = root.getElementById(\"col-grid\")!;\n const card = buildCollectionCard(collection);\n grid.appendChild(card);\n injectIcons(card);\n updateColTabCounts();\n }\n host._colListBuilt = false; // force list rebuild next time it's toggled into view\n });\n\n // Every card/row closes over the Collection object it was built from —\n // store.update() (edit name/desc/tags, or share-modal.ts's owners/readers\n // PUTs) replaces that object in the store's cache rather than mutating it\n // in place, so an already-built card's closure goes stale the moment an\n // update happens elsewhere. Without this, reopening the same collection\n // from the list after an edit/share-modal change shows the pre-update\n // data (wrong name/desc/tags/role, or a \"Manage access\" list missing the\n // just-added/removed/reassigned member) until a full page reload.\n store.addEventListener(\"collection-updated\", e => {\n const { collection } = (e as CustomEvent<{ collection: Collection }>).detail;\n if (host._colGridBuilt) {\n const grid = root.getElementById(\"col-grid\")!;\n const oldCard = grid.querySelector(`.lq-col-card[data-id=\"${collection.id}\"]`);\n if (oldCard) {\n const newCard = buildCollectionCard(collection);\n oldCard.replaceWith(newCard);\n injectIcons(newCard);\n }\n updateColTabCounts();\n }\n host._colListBuilt = false; // force list rebuild next time it's toggled into view\n });\n\n /* Shows the active container and hides the inactive one — but only if the\n active one has something visible to show. An empty .lq-col-list still\n renders its table header, so a list view with no collections (or with a\n tab/search filter that matched none) rendered as a lone header row.\n Counting *visible* items covers both cases. */\n function refreshColContainers(): void {\n const grid = root.getElementById(\"col-grid\")!;\n const list = root.getElementById(\"col-list\")!;\n const listMode = host._colCurrentView === \"list\";\n grid.hidden = listMode || grid.querySelectorAll(\".lq-col-card:not([hidden])\").length === 0;\n list.hidden = !listMode || list.querySelectorAll(\".lq-col-row:not([hidden])\").length === 0;\n }\n\n async function showCollections(): Promise<void> {\n root.getElementById(\"btn-detail-close\")?.click();\n host._exitDocSelection?.();\n host._closeColDocPreview?.();\n root.getElementById(\"col-detail-view\")!.hidden = true;\n const collectionsView = root.getElementById(\"collections-view\")!;\n collectionsView.hidden = false;\n\n // The view's chrome (tabs, grid/list toggle, search, error panel) is static\n // template markup, so inject its icons up front and independently of the\n // fetch — same order detail-view.js uses. Injecting only on the way out\n // meant the failure path's early return below skipped it, leaving the\n // toolbar with empty <i data-icon> placeholders instead of icons.\n injectIcons(collectionsView);\n\n if (!host._colGridBuilt) {\n const grid = root.getElementById(\"col-grid\")!;\n const loadingEl = root.getElementById(\"col-grid-loading\")!;\n const errorEl = root.getElementById(\"col-grid-error\")!;\n\n grid.hidden = true;\n errorEl.hidden = true;\n loadingEl.hidden = false;\n\n try {\n await store.ensureLoaded();\n } catch (err) {\n loadingEl.hidden = true;\n root.getElementById(\"col-grid-error-message\")!.textContent = errorMessageFor(err);\n errorEl.hidden = false;\n return;\n }\n\n loadingEl.hidden = true;\n renderCollections();\n }\n\n refreshColContainers();\n }\n\n /* Rebuilds every card from the store's cache in the current view mode —\n shared by the first display and refreshCollections(). Clearing first also\n makes a second concurrent first display harmless instead of doubling the\n cards. The list is only rebuilt when it's the one on screen; otherwise\n it's marked stale and built on the next switch to it. */\n function renderCollections(): void {\n const grid = root.getElementById(\"col-grid\")!;\n grid.innerHTML = \"\";\n store.getAll().forEach(col => grid.appendChild(buildCollectionCard(col)));\n injectIcons(grid);\n host._colGridBuilt = true;\n\n host._colListBuilt = host._colCurrentView === \"list\";\n if (host._colListBuilt) {\n buildColListView();\n injectIcons(root.getElementById(\"col-list\")!);\n }\n\n // Ends in applyColFilters(), so the active tab and search query still\n // apply to the rebuilt cards/rows.\n updateColTabCounts();\n }\n\n /* Re-reads the container list on every return from a collection's files\n view (ES-33713): containers created by others since the last display\n appear, and each card's file count matches the server. The current list\n stays on screen until the response lands, and a failure leaves it\n untouched behind an inline error. */\n async function refreshCollections(): Promise<void> {\n // The first display never succeeded (or is still in flight) — take the\n // regular path, with its loading and error states.\n if (!host._colGridBuilt) return showCollections();\n\n const errorEl = root.getElementById(\"col-refresh-error\")!;\n clearInlineError(errorEl);\n try {\n await store.reload();\n } catch (err) {\n showInlineError(errorEl, t(\"list.refreshError\", { error: errorMessageFor(err) }));\n return;\n }\n // Selection checkboxes live on the cards/rows about to be rebuilt.\n host._exitColSelection?.();\n renderCollections();\n }\n\n root.getElementById(\"col-grid-retry\")!.addEventListener(\"click\", () => {\n void showCollections();\n });\n\n function hideCollections(): void {\n host._exitDocSelection?.();\n host._closeColDocPreview?.();\n root.getElementById(\"col-detail-view\")!.hidden = true;\n root.getElementById(\"collections-view\")!.hidden = true;\n }\n\n /* ── Collection list-view item builder ── */\n function buildColListItem(col: Collection): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"lq-col-row\";\n row.dataset[\"id\"] = col.id;\n row.dataset[\"role\"] = col.currentUserRole;\n\n const tagsHTML = col.tags.map(tag => `<span class=\"oc-tag oc-tag-size-xsmall oc-tag-grey\"><span class=\"oc-tag-label\">${tag}</span></span>`).join(\"\");\n\n const isEditor = col.currentUserRole !== \"reader\";\n const roleKey = isEditor ? \"list.roleOwner\" : \"list.roleShared\";\n const roleHTML = `<span class=\"oc-tag oc-tag-size-xsmall oc-tag-indigo\">\n <span class=\"oc-tag-icon\"><i data-icon=\"${isEditor ? \"col-person\" : \"col-people\"}\"></i></span>\n <span class=\"oc-tag-label\" data-i18n=\"${roleKey}\">${t(roleKey)}</span>\n </span>`;\n\n row.innerHTML = `\n <div class=\"lq-col-row__cb\">\n <label class=\"oc-checkbox-root lq-col-row__checkbox\">\n <input type=\"checkbox\" class=\"oc-checkbox-input lq-col-row__check-input\">\n <span class=\"oc-checkbox-hitbox\">\n <span class=\"oc-checkbox-control\">\n <span class=\"oc-checkbox-icon oc-checkbox-icon-check\"><i data-icon=\"checkbox-check\"></i></span>\n <span class=\"oc-checkbox-icon oc-checkbox-icon-minus\"><i data-icon=\"checkbox-minus\"></i></span>\n </span>\n </span>\n </label>\n </div>\n <div class=\"lq-col-row__name\">\n <span class=\"lq-col-row__icon\"><i data-icon=\"${col.icon}\"></i></span>\n <div class=\"lq-col-row__name-block\">\n <span class=\"lq-col-row__title\">${col.name}</span>\n <span class=\"lq-col-row__desc\">${col.desc}</span>\n </div>\n </div>\n <div class=\"lq-col-row__content\">\n <i data-icon=\"col-file\"></i>\n <span>${col.docs}</span>\n </div>\n <div class=\"lq-col-row__owner\">${roleHTML}</div>\n <div class=\"lq-col-row__date\">—</div>\n <div class=\"lq-col-row__tags\">${tagsHTML}</div>\n <div class=\"lq-col-row__actions\">\n ${isEditor ? `<button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon lq-col-row__btn-del\" data-i18n-attr=\"aria-label:list.deleteCollection\" aria-label=\"Delete workspace\"><i data-icon=\"col-trash\"></i></button>` : \"\"}\n </div>`;\n\n const cbInput = row.querySelector(\".lq-col-row__check-input\") as HTMLInputElement;\n const delBtn = row.querySelector(\".lq-col-row__btn-del\") as HTMLElement | null;\n\n if (delBtn) {\n delBtn.addEventListener(\"click\", e => {\n e.stopPropagation();\n setDeleteWarning(root.getElementById(\"col-delete-desc\")!, col.name);\n (root.getElementById(\"btn-col-delete-confirm\") as DeleteConfirmButton)._targetCard = row;\n openColDeleteModal();\n });\n host._tooltip.attach(delBtn, \"common.delete\", \"top\");\n }\n\n cbInput.addEventListener(\"change\", () => {\n row.classList.toggle(\"lq-col-row--selected\", cbInput.checked);\n host._updateColSelCount?.();\n });\n\n row.addEventListener(\"click\", e => {\n const target = e.target as HTMLElement;\n if (target.closest(\".lq-col-row__actions\")) return;\n const list = root.getElementById(\"col-list\");\n if (list?.classList.contains(\"lq-col-list--selecting\")) {\n if (target.closest(\".lq-col-row__checkbox\")) return;\n cbInput.checked = !cbInput.checked;\n cbInput.dispatchEvent(new Event(\"change\", { bubbles: true }));\n return;\n }\n host._openColDetail(col);\n });\n\n return row;\n }\n\n function buildColListView(): void {\n const list = root.getElementById(\"col-list\");\n if (!list) return;\n // Rebuilt from scratch: collection-created/-updated reset _colListBuilt to\n // force a rebuild, and without this the header and every row were appended\n // a second time. Matches detail-view.js's buildDocListView().\n list.innerHTML = \"\";\n\n const header = document.createElement(\"div\");\n header.className = \"lq-col-list-header\";\n header.innerHTML = `\n <div class=\"lq-col-list__hdr-cell lq-col-list__hdr-cb\">\n <label class=\"oc-checkbox-root lq-col-list__select-all\">\n <input type=\"checkbox\" class=\"oc-checkbox-input\" id=\"col-list-select-all\">\n <span class=\"oc-checkbox-hitbox\">\n <span class=\"oc-checkbox-control\">\n <span class=\"oc-checkbox-icon oc-checkbox-icon-check\"><i data-icon=\"checkbox-check\"></i></span>\n <span class=\"oc-checkbox-icon oc-checkbox-icon-minus\"><i data-icon=\"checkbox-minus\"></i></span>\n </span>\n </span>\n </label>\n </div>\n <div class=\"lq-col-list__hdr-cell\">Name</div>\n <div class=\"lq-col-list__hdr-cell lq-col-list__hdr-content\">Content</div>\n <div class=\"lq-col-list__hdr-cell\">Owner/Shared</div>\n <div class=\"lq-col-list__hdr-cell lq-col-list__hdr-date\">Date Updated</div>\n <div class=\"lq-col-list__hdr-cell lq-col-list__hdr-tags\">Tags</div>\n <div class=\"lq-col-list__hdr-cell\"></div>`;\n list.appendChild(header);\n injectIcons(header);\n\n store.getAll().forEach(col => list.appendChild(buildColListItem(col)));\n\n (root.getElementById(\"col-list-select-all\") as HTMLInputElement).addEventListener(\"click\", function (this: HTMLInputElement) {\n const shouldCheck = !this.indeterminate ? this.checked : true;\n this.indeterminate = false;\n this.checked = shouldCheck;\n list.querySelectorAll(\".lq-col-row:not([hidden])\").forEach(r => {\n const cb = r.querySelector(\".lq-col-row__check-input\") as HTMLInputElement | null;\n if (cb) {\n cb.checked = shouldCheck;\n cb.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n });\n });\n }\n\n /* Collection tab filtering + search */\n (function (): void {\n const tabs = [...root.querySelectorAll(\"#col-tab-all, #col-tab-mine, #col-tab-shared\")] as HTMLElement[];\n let activeFilter = \"all\";\n let activeQuery = \"\";\n\n function applyColFilters(): void {\n const q = activeQuery.toLowerCase();\n const matchItem = (el: HTMLElement, nameSelector: string): void => {\n const matchesTab =\n activeFilter === \"all\" ||\n (activeFilter === \"editor\" && (el.dataset[\"role\"] === \"creator\" || el.dataset[\"role\"] === \"owner\")) ||\n (activeFilter === \"reader\" && el.dataset[\"role\"] === \"reader\");\n const titleEl = el.querySelector(nameSelector) as HTMLElement | null;\n const name = (titleEl?.dataset[\"rawText\"] || titleEl?.textContent || \"\").toLowerCase();\n const matchesSearch = !q || name.includes(q);\n el.hidden = !(matchesTab && matchesSearch);\n if (titleEl) highlightSubstring(titleEl, matchesSearch ? activeQuery : \"\");\n };\n const grid = root.getElementById(\"col-grid\");\n if (grid) grid.querySelectorAll(\".lq-col-card\").forEach(c => matchItem(c as HTMLElement, \".lq-col-card__title\"));\n const listEl = root.getElementById(\"col-list\");\n if (listEl) listEl.querySelectorAll(\".lq-col-row\").forEach(r => matchItem(r as HTMLElement, \".lq-col-row__title\"));\n refreshColContainers();\n }\n\n host._applyColFilters = applyColFilters;\n\n tabs.forEach(tab => {\n tab.addEventListener(\"click\", () => {\n tabs.forEach(t => t.setAttribute(\"aria-selected\", \"false\"));\n tab.setAttribute(\"aria-selected\", \"true\");\n activeFilter = tab.dataset[\"filter\"] || \"all\";\n applyColFilters();\n });\n });\n\n const colInput = root.getElementById(\"col-search-input\") as HTMLInputElement;\n const colClear = root.getElementById(\"col-search-clear\") as HTMLElement;\n\n colInput.addEventListener(\"input\", function (this: HTMLInputElement) {\n activeQuery = this.value;\n colClear.classList.toggle(\"visible\", activeQuery.length > 0);\n applyColFilters();\n });\n\n colClear.addEventListener(\"click\", () => {\n colInput.value = \"\";\n activeQuery = \"\";\n colClear.classList.remove(\"visible\");\n applyColFilters();\n colInput.focus();\n });\n })();\n\n /* Collection selection mode */\n (function (): void {\n const selectBtn = root.getElementById(\"col-select-btn\")!;\n const selbar = root.getElementById(\"col-selbar\")!;\n const selCount = root.getElementById(\"col-selbar-count\")!;\n const selDelete = root.getElementById(\"col-sel-delete\") as HTMLButtonElement;\n const selAll = root.getElementById(\"col-sel-all\")!;\n let selecting = false;\n\n function getGrid(): HTMLElement | null {\n return root.getElementById(host._colCurrentView === \"list\" ? \"col-list\" : \"col-grid\");\n }\n function getCards(): HTMLElement[] {\n const g = getGrid();\n if (!g) return [];\n return (host._colCurrentView === \"list\" ? [...g.querySelectorAll(\".lq-col-row\")] : [...g.querySelectorAll(\".lq-col-card\")]) as HTMLElement[];\n }\n\n function updateSelCount(): void {\n const cards = getCards();\n const visible = cards.filter(c => !c.hidden);\n const checked = visible.filter(c => (c.querySelector(\".lq-col-card__check-input, .lq-col-row__check-input\") as HTMLInputElement | null)?.checked);\n const n = checked.length;\n setPluralText(selCount, \"list.selectedCount\", n);\n selDelete.disabled = n === 0;\n\n // The button already toggles; only its label was fixed. The length guard\n // matters because [].every() is true, which would label an empty list\n // \"Unselect All\".\n const allSelected = visible.length > 0 && n === visible.length;\n setText(selAll, allSelected ? \"common.unselectAll\" : \"common.selectAll\");\n\n const selectAll = root.getElementById(\"col-list-select-all\") as HTMLInputElement | null;\n if (selectAll) {\n if (n === 0) {\n selectAll.checked = false;\n selectAll.indeterminate = false;\n } else if (n === visible.length) {\n selectAll.checked = true;\n selectAll.indeterminate = false;\n } else {\n selectAll.checked = false;\n selectAll.indeterminate = true;\n }\n }\n }\n\n function enterSelection(): void {\n selecting = true;\n setText(selectBtn, \"common.cancel\");\n root.getElementById(\"col-grid\")?.classList.add(\"lq-col-grid--selecting\");\n root.getElementById(\"col-list\")?.classList.add(\"lq-col-list--selecting\");\n selbar.hidden = false;\n injectIcons(selbar);\n updateSelCount();\n }\n\n function exitSelection(): void {\n selecting = false;\n setText(selectBtn, \"common.select\");\n root.getElementById(\"col-grid\")?.classList.remove(\"lq-col-grid--selecting\");\n root.getElementById(\"col-list\")?.classList.remove(\"lq-col-list--selecting\");\n root\n .getElementById(\"col-grid\")\n ?.querySelectorAll(\".lq-col-card\")\n .forEach(c => {\n const cb = c.querySelector(\".lq-col-card__check-input\") as HTMLInputElement | null;\n if (cb) cb.checked = false;\n c.classList.remove(\"lq-col-card--selected\");\n });\n root\n .getElementById(\"col-list\")\n ?.querySelectorAll(\".lq-col-row\")\n .forEach(r => {\n const cb = r.querySelector(\".lq-col-row__check-input\") as HTMLInputElement | null;\n if (cb) cb.checked = false;\n r.classList.remove(\"lq-col-row--selected\");\n });\n selbar.hidden = true;\n const selectAll = root.getElementById(\"col-list-select-all\") as HTMLInputElement | null;\n if (selectAll) {\n selectAll.checked = false;\n selectAll.indeterminate = false;\n }\n }\n\n host._exitColSelection = exitSelection;\n host._updateColSelCount = updateSelCount;\n selectBtn.addEventListener(\"click\", () => (selecting ? exitSelection() : enterSelection()));\n\n root.getElementById(\"col-grid\")!.addEventListener(\"change\", e => {\n const target = e.target as HTMLInputElement;\n if (!target.classList.contains(\"lq-col-card__check-input\")) return;\n const card = target.closest(\".lq-col-card\");\n if (card) card.classList.toggle(\"lq-col-card--selected\", target.checked);\n updateSelCount();\n });\n\n root.getElementById(\"col-grid\")!.addEventListener(\"click\", e => {\n if (!selecting) return;\n const target = e.target as HTMLElement;\n const card = target.closest(\".lq-col-card\");\n if (!card) return;\n if (target.closest(\".lq-col-card__checkbox\")) return;\n const cb = card.querySelector(\".lq-col-card__check-input\") as HTMLInputElement | null;\n if (cb) {\n cb.checked = !cb.checked;\n cb.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n });\n\n selDelete.addEventListener(\"click\", () => {\n const selected = getCards().filter(\n c => (c.querySelector(\".lq-col-card__check-input, .lq-col-row__check-input\") as HTMLInputElement | null)?.checked && c.dataset[\"role\"] !== \"reader\"\n );\n if (!selected.length) return;\n const n = selected.length;\n setPluralText(root.getElementById(\"col-delete-modal-title\")!, \"list.deleteCollectionsTitle\", n);\n setDeleteWarning(root.getElementById(\"col-delete-desc\")!, tPlural(\"list.collectionCount\", n));\n const confirmBtn = root.getElementById(\"btn-col-delete-confirm\") as DeleteConfirmButton;\n confirmBtn._targetCard = null;\n confirmBtn._bulkTargets = selected;\n openColDeleteModal();\n });\n\n selAll.addEventListener(\"click\", () => {\n const visibleItems = getCards().filter(c => !c.hidden);\n const allChecked = visibleItems.every(c => (c.querySelector(\".lq-col-card__check-input, .lq-col-row__check-input\") as HTMLInputElement | null)?.checked);\n visibleItems.forEach(item => {\n const cb = item.querySelector(\".lq-col-card__check-input, .lq-col-row__check-input\") as HTMLInputElement | null;\n if (cb) {\n cb.checked = !allChecked;\n cb.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n });\n });\n })();\n\n /* Collection delete modal wiring */\n root.getElementById(\"btn-col-delete-close\")!.addEventListener(\"click\", closeColDeleteModal);\n root.getElementById(\"btn-col-delete-cancel\")!.addEventListener(\"click\", closeColDeleteModal);\n root.getElementById(\"col-delete-backdrop\")!.addEventListener(\"click\", closeColDeleteModal);\n root.getElementById(\"btn-col-delete-confirm\")!.addEventListener(\"click\", async function (this: DeleteConfirmButton) {\n if (colDeleteSubmitting) return;\n\n // Single/bulk-select/from-detail all funnel through one store.remove()\n // call — the target API only exposes a bulk DELETE, so a lone card is\n // just a 1-element array.\n const bulk = this._bulkTargets;\n const single = this._targetCard;\n const detailCol = this._detailCol;\n\n const cards = bulk ? [...bulk] : single ? [single] : [];\n const ids = new Set<string>(cards.map(c => c.dataset[\"id\"] || \"\"));\n if (detailCol) ids.add(detailCol.id);\n if (!ids.size) return;\n\n const confirmBtn = root.getElementById(\"btn-col-delete-confirm\") as HTMLButtonElement;\n const errorEl = root.getElementById(\"col-delete-error\")!;\n colDeleteSubmitting = true;\n clearInlineError(errorEl);\n setButtonBusy(confirmBtn, true, t(\"common.deleting\"));\n\n try {\n const { succeeded, failed } = await store.remove([...ids]);\n const succeededSet = new Set(succeeded);\n\n const removeCardFromDom = (id: string): void => {\n root.getElementById(\"col-grid\")?.querySelector(`.lq-col-card[data-id=\"${id}\"]`)?.remove();\n root.getElementById(\"col-list\")?.querySelector(`.lq-col-row[data-id=\"${id}\"]`)?.remove();\n };\n const nameForId = new Map<string, string>();\n cards.forEach(c => nameForId.set(c.dataset[\"id\"] || \"\", c.querySelector(\".lq-col-card__title, .lq-col-row__title\")?.textContent || \"\"));\n if (detailCol) nameForId.set(detailCol.id, detailCol.name);\n\n cards.filter(c => succeededSet.has(c.dataset[\"id\"] || \"\")).forEach(c => removeCardFromDom(c.dataset[\"id\"] || \"\"));\n if (detailCol && succeededSet.has(detailCol.id)) removeCardFromDom(detailCol.id);\n updateColTabCounts();\n\n if (failed.length) {\n // Partial failure: keep the modal open, report which containers\n // couldn't be deleted, and narrow the confirm button's targets down\n // to just those so a retry doesn't re-attempt ones already gone.\n const names = failed.map(f => nameForId.get(f.id) || f.id).join(\", \");\n showInlineError(errorEl, tPlural(\"list.bulkDeleteFailed\", failed.length, { names }));\n if (bulk) {\n const remaining = bulk.filter(c => !succeededSet.has(c.dataset[\"id\"] || \"\"));\n this._bulkTargets = remaining.length ? remaining : null;\n }\n if (single && succeededSet.has(single.dataset[\"id\"] || \"\")) this._targetCard = null;\n if (detailCol && succeededSet.has(detailCol.id)) this._detailCol = null;\n return;\n }\n\n if (bulk) {\n this._bulkTargets = null;\n host._exitColSelection?.();\n }\n if (single) this._targetCard = null;\n if (detailCol) {\n host._closeColDetail();\n this._detailCol = null;\n }\n\n resetAndCloseColDeleteModal();\n } catch (err) {\n showInlineError(errorEl, errorMessageFor(err));\n } finally {\n colDeleteSubmitting = false;\n setButtonBusy(confirmBtn, false);\n }\n });\n\n host._tooltip.attach(root.getElementById(\"col-view-grid\")!, \"common.gridView\", \"bottom\");\n host._tooltip.attach(root.getElementById(\"col-view-list\")!, \"common.listView\", \"bottom\");\n host._tooltip.attach(root.getElementById(\"col-detail-view-grid\")!, \"common.gridView\", \"bottom\");\n host._tooltip.attach(root.getElementById(\"col-detail-view-list\")!, \"common.listView\", \"bottom\");\n\n /* Collections grid ↔ list toggle */\n (function (): void {\n const btnGrid = root.getElementById(\"col-view-grid\")!;\n const btnList = root.getElementById(\"col-view-list\")!;\n\n btnGrid.addEventListener(\"click\", () => {\n host._colCurrentView = \"grid\";\n btnGrid.setAttribute(\"aria-pressed\", \"true\");\n btnList.setAttribute(\"aria-pressed\", \"false\");\n refreshColContainers();\n // Selection survives the toggle here (unlike the detail view, which exits\n // it), and the two containers hold their own checkboxes — so the selbar's\n // count, its disabled states and its Select/Unselect All label all have to\n // be recomputed against whichever container just became the active one.\n host._updateColSelCount?.();\n });\n\n btnList.addEventListener(\"click\", () => {\n host._colCurrentView = \"list\";\n const list = root.getElementById(\"col-list\")!;\n btnGrid.setAttribute(\"aria-pressed\", \"false\");\n btnList.setAttribute(\"aria-pressed\", \"true\");\n if (!host._colListBuilt) {\n host._colListBuilt = true;\n buildColListView();\n }\n injectIcons(list);\n // Last: applyColFilters() ends in refreshColContainers(), which needs the\n // rows built and their hidden flags already settled to count them.\n host._applyColFilters?.();\n host._updateColSelCount?.();\n });\n })();\n\n host._showList = showCollections;\n host._hideList = hideCollections;\n host._refreshList = refreshCollections;\n host._buildCollectionCard = buildCollectionCard;\n host._updateColTabCounts = updateColTabCounts;\n host._closeColDeleteModal = closeColDeleteModal;\n}\n","// The current user's identity — the one thing @sinequa/atomic has no\n// synchronous notion of. Everything else this package needs from atomic\n// (backendUrl/app for the container-management API, auth headers) is the\n// host app's own responsibility via atomic's own setGlobalConfig(), called\n// directly against the shared @sinequa/atomic module (a peerDependency,\n// external to our ESM build — see scripts/build.mjs). This package used to\n// wrap that in its own configureCollectionsApi(), but that only duplicated\n// config the host already has to provide atomic directly.\nimport { fetchPrincipal } from \"@sinequa/atomic\";\n\nexport interface CurrentUser {\n id: string;\n name: string;\n}\n\nlet currentUser: CurrentUser | undefined;\nlet principalFetchStarted = false;\nlet principalPromise: Promise<CurrentUser | undefined> | undefined;\n\n// Lazily resolves & memoizes the logged-in user's identity via atomic's\n// fetchPrincipal() (GET api/v1/principal?action=get — a network round trip)\n// instead of requiring the host to supply it. Idempotent: only the first\n// call triggers the request.\nfunction ensurePrincipalFetchStarted(): void {\n if (principalFetchStarted) return;\n principalFetchStarted = true;\n principalPromise = fetchPrincipal()\n // `userId`, not `id`: the container API rejects an identity that is not in\n // `domain|id` form, and Principal.id is the bare account id (an email, on\n // an LDAP/AAD-backed domain). That id space has to be the same one the\n // container's owners/readers arrays use, since this id is compared against\n // them to find \"your\" row/chip and to resolve your own name — so it is\n // fixed here, once, rather than at each call site. The format is not in\n // the published REST API v2 spec; it only shows up as a 400 (ES-33405).\n // No fallback to `id` if `userId` is somehow empty: `id` is precisely the\n // form the API refuses, so falling back to it would guarantee the 400\n // instead of avoiding it. Leaving the user unknown is the softer failure —\n // both callers already treat that as valid (the self-lock is skipped, and\n // a create just doesn't append an owner; the server still records you as\n // the container's `creator` either way).\n .then(p => (currentUser = p.userId ? { id: p.userId, name: p.fullName || p.name } : undefined))\n .catch(() => undefined); /* stays undefined — see getCurrentUser() below */\n}\n\n// Synchronous by design: its two callers (principal-name-cache.ts,\n// upload-tracker.ts) are themselves called from synchronous render paths\n// (share-modal.ts builds its member list synchronously). Returns undefined\n// until fetchPrincipal() resolves — both callers already treat \"unknown\" as\n// a valid fallback (a raw-id badge / the generic 'You' label), not an error.\n// lexiq-collections.ts calls this once at connectedCallback() time purely to\n// kick the fetch off as early as possible, shrinking that window in practice.\nexport function getCurrentUser(): CurrentUser | undefined {\n ensurePrincipalFetchStarted();\n return currentUser;\n}\n\n/**\n * The same identity {@link getCurrentUser} returns, but awaitable — for the\n * call sites that must not act on \"unknown\" as if it were an answer.\n *\n * The \"you can't remove yourself\" rule (share modal, add/edit modal) needs the\n * current user's id to know which row or chip is yours; with only the\n * synchronous accessor, a modal opened before `fetchPrincipal()` resolved\n * would offer an owner the one action that locks them out of their own\n * container. Callers render immediately off getCurrentUser() and re-render\n * when this settles, so the guard is applied either way.\n *\n * @returns The logged-in user, or undefined if the principal request failed.\n */\nexport function whenCurrentUser(): Promise<CurrentUser | undefined> {\n ensurePrincipalFetchStarted();\n return principalPromise ?? Promise.resolve(currentUser);\n}\n","// Maps a principal's `domain|id` identity to a display name, so a container's\n// bare `owners`/`readers` arrays can be rendered as people.\n//\n// Backed by a real lookup: `security.principal` resolves ids in bulk through\n// its `action: 'userids'` (atomic's fetchPrincipalsByIds). This module keeps a\n// sessionStorage cache in front of it — populated from every search result and\n// every batch resolve — because the two consumers (share-modal.ts's access\n// list, detail-view.ts's \"Share with\" chips) render synchronously and would\n// otherwise flash raw ids on every open.\n//\n// Reads are therefore synchronous and best-effort: an id not yet cached falls\n// back to showing the raw id, and the caller kicks off\n// ensurePrincipalsResolved() and re-renders when it lands. Ids the server\n// can't resolve at all (a deleted account) keep showing the raw id, which is\n// still enough to keep them in the owners/readers arrays on the next save\n// rather than silently revoking them.\n//\n// Persisted per the product decision: survives navigation within the tab,\n// cleared when the tab closes.\nimport { getCurrentUser } from \"./current-user\";\nimport { fetchPrincipalsByIds } from \"@sinequa/atomic\";\nimport type { SecurityPrincipal } from \"@sinequa/atomic\";\n\nexport interface PrincipalSummary {\n name: string;\n isGroup: boolean;\n /** Users only, and only when the directory has one — the access list's secondary line. */\n email?: string;\n}\n\nconst STORAGE_KEY = \"lexiq-collections:principal-name-cache\";\n\n/**\n * The label to show for a principal: a user's full name where it has one,\n * otherwise the account name. Groups only ever have `name`.\n */\nexport function principalDisplayName(principal: SecurityPrincipal): string {\n return principal.isUser ? principal.fullName || principal.name : principal.name;\n}\n\nfunction readStorage(): Record<string, PrincipalSummary> {\n try {\n const raw = sessionStorage.getItem(STORAGE_KEY);\n return raw ? JSON.parse(raw) : {};\n } catch {\n return {};\n }\n}\n\nfunction writeStorage(map: Record<string, PrincipalSummary>): void {\n try {\n sessionStorage.setItem(STORAGE_KEY, JSON.stringify(map));\n } catch {\n // sessionStorage unavailable (private browsing, quota) — cache just\n // won't persist across a reload; not worth surfacing an error for.\n }\n}\n\nexport function cachePrincipal(id: string, summary: PrincipalSummary): void {\n const map = readStorage();\n map[id] = summary;\n writeStorage(map);\n}\n\nexport function getCachedPrincipal(id: string): PrincipalSummary | null {\n const user = getCurrentUser();\n if (user && user.id === id) {\n return { name: user.name, isGroup: false };\n }\n return readStorage()[id] ?? null;\n}\n\n/**\n * Fetches and caches the names for any of `ids` not already known.\n *\n * Callers render immediately off the synchronous cache and call this to fill\n * the gaps, re-rendering when it settles.\n *\n * @param ids - Principal identities, typically a container's owners/readers.\n *\n * @returns Resolves once the cache has been updated. A failed lookup resolves\n * rather than rejecting — the UI already renders unresolved ids, and a name\n * is not worth failing an access dialog over.\n */\nexport async function ensurePrincipalsResolved(ids: string[]): Promise<void> {\n const map = readStorage();\n const missing = [...new Set(ids)].filter(id => id && !map[id]);\n if (!missing.length) return;\n try {\n const principals = await fetchPrincipalsByIds(missing);\n principals.forEach(p =>\n cachePrincipal(p.userId, {\n name: principalDisplayName(p),\n isGroup: p.isGroup,\n email: p.isUser ? p.email : undefined\n })\n );\n } catch {\n /* leaves those ids showing as raw ids — see this module's header */\n }\n}\n\n/** A principal id turned into something renderable. */\nexport interface ResolvedPrincipal {\n /** Display label — the cached name, or the raw id when it isn't cached. Never decorated: see `isSelf`. */\n name: string;\n /** Secondary line under the name, when the directory gave one. */\n email?: string;\n isGroup: boolean;\n /** False when the id has no cached name and `name` is the raw id. */\n resolved: boolean;\n /** True when this id is the logged-in user's. */\n isSelf: boolean;\n}\n\n/**\n * Resolves a principal id for display, applied identically wherever an\n * owners/readers id is rendered — the share modal's access list and the\n * add/edit modal's \"Share with\" chips.\n *\n * @param id - The principal id as it appears in a container's owners/readers.\n *\n * @returns The label to render plus the flags its call sites branch on.\n */\nexport function resolvePrincipal(id: string): ResolvedPrincipal {\n const cached = getCachedPrincipal(id);\n // \"(you)\" is deliberately NOT folded into the name: it would end up in the\n // avatar's initials and in every message that interpolates a name. The views\n // render it as its own element, the way agent-builder's ab-edit-access-user\n // does (projects/agent-builder/src/lib/features/edit/settings).\n return {\n name: cached ? cached.name : id,\n email: cached?.email,\n isGroup: cached ? cached.isGroup : false,\n resolved: !!cached,\n isSelf: getCurrentUser()?.id === id\n };\n}\n","// Shared \"pick people\" control: a tag-style input with search-as-you-type over\n// security.principal, a chip per picked user, and an optional Owner/Reader\n// selector. Extracted from views/share-modal.ts (ES-32697) once the add/edit\n// collection modal needed the same widget — one implementation, three call\n// sites (share modal, add modal, edit modal) rather than three copies.\n//\n// Groups are deliberately filtered out of the results: the container API\n// documents `owners`/`readers` as *user* ids (ContainerCreate/UpdateRequest\n// ViewModel, REST API v2), so staging a group id would look like it worked and\n// grant nobody anything. `isGroup` is still carried on the picked entry and\n// still drives the avatar, because the principal-name cache can hand back a\n// group for an id that is already stored on a container.\n//\n// The id a picked entry carries is the principal's `userId` (`domain|id`), not\n// its `id`: `userId` is what a container's owners/readers hold, and what the\n// API rejects anything else in the shape of.\n//\n// Keyboard: the results list is arrow/Enter/Escape navigable. The pre-\n// extraction code was mousedown-only, which the project's accessibility rules\n// (AXE / WCAG AA) don't allow for a listbox.\nimport { searchPrincipals } from \"@sinequa/atomic\";\nimport type { SecurityPrincipal } from \"@sinequa/atomic\";\n\nimport { injectIcons } from \"./icons\";\nimport { debounce, escapeHtml } from \"./dom-utils\";\nimport { i18nParams, setText, t } from \"./i18n\";\nimport { cachePrincipal, principalDisplayName } from \"../internal/principal-name-cache\";\n\n/** The two roles a member can be assigned; `creator` is immutable, never picked. */\nexport type AssignableRole = \"owner\" | \"reader\";\n\n/** Catalog keys for the two assignable roles; resolved at render time. */\nexport const ROLE_KEYS: Record<AssignableRole, string> = {\n reader: \"share.reader\",\n owner: \"share.owner\"\n};\n\n/** One picked user — a chip in the input, and one entry of the owners/readers arrays.\n * Every entry comes from a live search result, so its name is always resolved. */\nexport interface PickedPrincipal {\n id: string;\n name: string;\n isGroup: boolean;\n role: AssignableRole;\n}\n\n/** The elements the picker drives; all live in the caller's shadow root. */\nexport interface PrincipalPickerElements {\n /** `.lq-tag-input` box holding the chips and the input. */\n tagWrap: HTMLElement;\n input: HTMLInputElement;\n /** Absolutely-positioned results list. */\n dropdown: HTMLElement;\n /** Owner/Reader selector applied to newly picked users. Omit for a reader-only picker. */\n roleWrap?: HTMLElement;\n roleBtn?: HTMLElement;\n roleLabel?: HTMLElement;\n roleDropdown?: HTMLElement;\n}\n\nexport interface PrincipalPickerOptions {\n elements: PrincipalPickerElements;\n /** Catalog key for the input's placeholder, shown only while no chip is present. */\n placeholderKey: string;\n /** Catalog key for the input's permanent aria-label. */\n ariaLabelKey: string;\n /** Chips carry a role badge that toggles Owner/Reader. Off for the share modal, where staged chips all take the selector's role. */\n showChipRole?: boolean;\n /** Extra ids to hide from results — the share modal's existing access list. */\n excludeIds?: () => string[];\n /** Notified after any change to the picked set (add, remove, role toggle). */\n onChange?: () => void;\n}\n\nexport interface PrincipalPickerController {\n /** The picked users, in chip order. */\n getEntries(): PickedPrincipal[];\n /** Clears chips, the query, and both dropdowns. */\n reset(): void;\n /** Hides the results list and the role selector. */\n closeDropdowns(): void;\n /** True while either dropdown is open — lets a host modal give Escape to the picker first. */\n hasOpenDropdown(): boolean;\n focus(): void;\n}\n\nfunction initialsFor(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (!parts.length) return \"?\";\n return parts.length === 1 ? parts[0].slice(0, 2).toUpperCase() : (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n/** Small round avatar — initials for a user, a glyph for a group. Shared with the share modal's access list. */\nexport function avatarHtml(name: string, isGroup: boolean): string {\n const inner = isGroup\n ? `<span class=\"oc-avatar-icon\"><i data-icon=\"group-people\"></i></span>`\n : `<span class=\"oc-avatar-initials\">${initialsFor(name)}</span>`;\n return `<div class=\"oc-avatar oc-avatar-variant-primary oc-avatar-color-sage oc-avatar-size-small\"><span class=\"oc-avatar-fallback\">${inner}</span></div>`;\n}\n\n/**\n * Wires a tag-style people picker onto an existing set of elements.\n *\n * @param options - The elements to drive plus per-call-site behaviour.\n *\n * @returns A controller for reading/replacing the picked set and closing the dropdowns.\n */\nexport function createPrincipalPicker(options: PrincipalPickerOptions): PrincipalPickerController {\n const { tagWrap, input, dropdown, roleWrap, roleBtn, roleLabel, roleDropdown } = options.elements;\n\n let entries: PickedPrincipal[] = [];\n let role: AssignableRole = \"reader\";\n let results: SecurityPrincipal[] = [];\n let activeIndex = -1; // highlighted result row, -1 = none\n let searchSeq = 0; // discards responses from superseded keystrokes\n\n function notify(): void {\n options.onChange?.();\n }\n\n /* ── Chips ── */\n\n function renderChips(): void {\n [...tagWrap.children].forEach(c => {\n if (c !== input && c !== roleWrap) c.remove();\n });\n\n entries.forEach((entry, i) => {\n const chip = document.createElement(\"span\");\n chip.className = \"oc-tag oc-tag-size-xsmall oc-tag-grey lq-tag-input__chip\";\n\n const label = document.createElement(\"span\");\n label.className = \"oc-tag-label\";\n label.textContent = entry.name;\n chip.appendChild(label);\n\n // A two-value toggle rather than a dropdown: with exactly Owner and\n // Reader to choose from, a menu costs a click and a popover to say what\n // one button already says. The aria-label spells out what it will do.\n if (options.showChipRole) {\n // One key per target role rather than one key interpolating a\n // translated role word: data-i18n-params holds plain strings, so an\n // interpolated role would keep the old language after a switch.\n const nextRoleKey = entry.role === \"owner\" ? \"share.changeRoleToReader\" : \"share.changeRoleToOwner\";\n const roleToggle = document.createElement(\"button\");\n roleToggle.type = \"button\";\n roleToggle.className = \"lq-tag-input__role\";\n roleToggle.dataset[\"index\"] = String(i);\n roleToggle.dataset[\"action\"] = \"toggle-role\";\n roleToggle.dataset[\"i18n\"] = ROLE_KEYS[entry.role];\n roleToggle.dataset[\"i18nAttr\"] = `aria-label:${nextRoleKey}`;\n roleToggle.dataset[\"i18nParams\"] = i18nParams({ name: entry.name });\n roleToggle.textContent = t(ROLE_KEYS[entry.role]);\n roleToggle.setAttribute(\"aria-label\", t(nextRoleKey, { name: entry.name }));\n chip.appendChild(roleToggle);\n }\n\n const remove = document.createElement(\"button\");\n remove.type = \"button\";\n remove.className = \"lq-tag-input__remove\";\n remove.dataset[\"index\"] = String(i);\n remove.dataset[\"action\"] = \"remove\";\n remove.dataset[\"i18nAttr\"] = \"aria-label:share.removeUser\";\n remove.dataset[\"i18nParams\"] = i18nParams({ name: entry.name });\n remove.setAttribute(\"aria-label\", t(\"share.removeUser\", { name: entry.name }));\n remove.innerHTML = '<i data-icon=\"chip-close\"></i>';\n chip.appendChild(remove);\n\n tagWrap.insertBefore(chip, input);\n });\n\n injectIcons(tagWrap);\n\n // Only the empty state carries the placeholder hint, so its annotation is\n // added and removed with it — the aria-label's stays either way.\n if (entries.length) {\n input.dataset[\"i18nAttr\"] = `aria-label:${options.ariaLabelKey}`;\n input.placeholder = \"\";\n } else {\n input.dataset[\"i18nAttr\"] = `placeholder:${options.placeholderKey};aria-label:${options.ariaLabelKey}`;\n input.placeholder = t(options.placeholderKey);\n }\n }\n\n /* ── Results ── */\n\n function visibleResults(): SecurityPrincipal[] {\n const excluded = new Set([...entries.map(e => e.id), ...(options.excludeIds?.() ?? [])]);\n return results.filter(p => !p.isGroup && !excluded.has(p.userId));\n }\n\n function renderStatus(text: string, isError = false): void {\n activeIndex = -1;\n dropdown.innerHTML = `<div class=\"lq-col-share-dropdown-status${isError ? \" lq-col-share-dropdown-status--error\" : \"\"}\">${escapeHtml(text)}</div>`;\n dropdown.hidden = false;\n input.setAttribute(\"aria-expanded\", \"true\");\n }\n\n function renderResults(): void {\n const visible = visibleResults();\n if (!visible.length) {\n renderStatus(t(\"share.noMatches\"));\n return;\n }\n\n dropdown.innerHTML = visible\n .map((item, i) => {\n const label = principalDisplayName(item);\n return `<div class=\"lq-col-share-option${i === activeIndex ? \" lq-col-share-option--active\" : \"\"}\" data-uid=\"${escapeHtml(item.userId)}\" id=\"lq-principal-opt-${i}\" role=\"option\" aria-selected=\"${i === activeIndex}\" tabindex=\"-1\">\n ${avatarHtml(label, item.isGroup)}\n <div class=\"lq-col-share-option__info\">\n <span class=\"lq-col-share-option__name\">${escapeHtml(label)}</span>\n <span class=\"lq-col-share-option-secondary\">${escapeHtml(item.longName)}</span>\n </div>\n </div>`;\n })\n .join(\"\");\n injectIcons(dropdown);\n dropdown.hidden = false;\n input.setAttribute(\"aria-expanded\", \"true\");\n syncActiveDescendant();\n }\n\n function syncActiveDescendant(): void {\n if (activeIndex < 0) {\n input.removeAttribute(\"aria-activedescendant\");\n return;\n }\n input.setAttribute(\"aria-activedescendant\", `lq-principal-opt-${activeIndex}`);\n const active = dropdown.querySelector(`#lq-principal-opt-${activeIndex}`);\n active?.scrollIntoView({ block: \"nearest\" });\n }\n\n function moveActive(delta: number): void {\n const count = visibleResults().length;\n if (!count || dropdown.hidden) return;\n activeIndex = activeIndex === -1 && delta < 0 ? count - 1 : (activeIndex + delta + count) % count;\n renderResults();\n }\n\n async function performSearch(query: string): Promise<void> {\n const seq = ++searchSeq;\n const q = query.trim();\n if (!q) {\n closeResults();\n return;\n }\n renderStatus(t(\"share.searching\"));\n try {\n const { principals = [] } = await searchPrincipals({ offset: 0, limit: 20, search: q });\n if (seq !== searchSeq) return; // a newer keystroke already fired another search\n principals.forEach(p =>\n cachePrincipal(p.userId, {\n name: principalDisplayName(p),\n isGroup: p.isGroup,\n email: p.isUser ? p.email : undefined\n })\n );\n results = principals;\n activeIndex = -1;\n renderResults();\n } catch {\n if (seq === searchSeq) renderStatus(t(\"share.searchFailed\"), true);\n }\n }\n\n const debouncedSearch = debounce((query: string) => {\n void performSearch(query);\n }, 300);\n\n function closeResults(): void {\n dropdown.hidden = true;\n activeIndex = -1;\n input.setAttribute(\"aria-expanded\", \"false\");\n input.removeAttribute(\"aria-activedescendant\");\n }\n\n function pick(uid: string): void {\n const found = results.find(p => p.userId === uid);\n if (!found || entries.some(e => e.id === uid)) return;\n entries.push({ id: found.userId, name: principalDisplayName(found), isGroup: found.isGroup, role });\n renderChips();\n input.value = \"\";\n closeResults();\n input.focus();\n notify();\n }\n\n /* ── Role selector ── */\n\n function renderRoleBtn(): void {\n if (!roleBtn || !roleLabel || !roleDropdown) return;\n setText(roleLabel, ROLE_KEYS[role]);\n // Swap the leading crown/eye to match, like agent-builder's scope menu.\n // Rewritten through a wrapper span rather than by replacing the <i>\n // directly: injectIcons() substitutes the raw <svg> for it, so the element\n // holding the marker has to be one that survives injection — and the\n // button's other icon is the chevron, which must not be touched.\n const iconWrap = roleBtn.querySelector(\".lq-col-share-perm-icon\");\n if (iconWrap) {\n iconWrap.innerHTML = `<i data-icon=\"${role === \"owner\" ? \"crown\" : \"eye\"}\"></i>`;\n injectIcons(iconWrap);\n }\n roleBtn.setAttribute(\"aria-expanded\", \"false\");\n ([...roleDropdown.querySelectorAll(\"[data-role]\")] as HTMLElement[]).forEach(opt => {\n opt.classList.toggle(\"oc-list-item-selected\", opt.dataset[\"role\"] === role);\n });\n }\n\n function closeRoleDropdown(): void {\n if (!roleDropdown || !roleBtn) return;\n roleDropdown.hidden = true;\n roleBtn.setAttribute(\"aria-expanded\", \"false\");\n }\n\n /* ── Wiring ── */\n\n input.addEventListener(\"input\", () => {\n closeRoleDropdown();\n debouncedSearch(input.value);\n });\n\n input.addEventListener(\"keydown\", e => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveActive(-1);\n break;\n case \"Enter\": {\n if (dropdown.hidden || activeIndex < 0) return;\n e.preventDefault();\n const target = visibleResults()[activeIndex];\n if (target) pick(target.id);\n break;\n }\n case \"Escape\":\n // Only swallow Escape when this picker actually has something open,\n // so it still reaches the host modal's close handler otherwise.\n if (!dropdown.hidden || (roleDropdown && !roleDropdown.hidden)) {\n e.preventDefault();\n e.stopPropagation();\n closeResults();\n closeRoleDropdown();\n }\n break;\n case \"Backspace\":\n if (input.value || !entries.length) return;\n entries.pop();\n renderChips();\n notify();\n break;\n }\n });\n\n dropdown.addEventListener(\"mousedown\", e => {\n const opt = (e.target as HTMLElement).closest(\".lq-col-share-option\") as HTMLElement | null;\n if (opt) {\n e.preventDefault();\n pick(opt.dataset[\"uid\"]!);\n }\n });\n\n tagWrap.addEventListener(\"click\", e => {\n const btn = (e.target as HTMLElement).closest(\"[data-action]\") as HTMLElement | null;\n if (btn) {\n const index = Number(btn.dataset[\"index\"]);\n const entry = entries[index];\n if (!entry) return;\n if (btn.dataset[\"action\"] === \"remove\") {\n entries.splice(index, 1);\n } else {\n entry.role = entry.role === \"owner\" ? \"reader\" : \"owner\";\n }\n renderChips();\n notify();\n return;\n }\n if (roleBtn && roleBtn.contains(e.target as Node)) return;\n input.focus();\n });\n\n if (roleBtn && roleDropdown) {\n roleBtn.addEventListener(\"mousedown\", e => {\n e.preventDefault(); // keep focus on the input, don't propagate blur\n const isOpen = !roleDropdown.hidden;\n roleDropdown.hidden = isOpen;\n closeResults();\n roleBtn.setAttribute(\"aria-expanded\", String(!isOpen));\n });\n\n roleDropdown.addEventListener(\"mousedown\", e => {\n const opt = (e.target as HTMLElement).closest(\"[data-role]\") as HTMLElement | null;\n if (!opt) return;\n e.preventDefault();\n opt.classList.add(\"oc-list-item-pressed\");\n setTimeout(() => {\n opt.classList.remove(\"oc-list-item-pressed\");\n role = opt.dataset[\"role\"] as AssignableRole;\n renderRoleBtn();\n roleDropdown.hidden = true;\n input.focus();\n }, 150);\n });\n }\n\n renderRoleBtn();\n renderChips();\n\n return {\n getEntries: () => entries,\n reset() {\n entries = [];\n results = [];\n role = \"reader\";\n input.value = \"\";\n renderRoleBtn();\n renderChips();\n closeResults();\n closeRoleDropdown();\n },\n closeDropdowns() {\n closeResults();\n closeRoleDropdown();\n },\n hasOpenDropdown: () => !dropdown.hidden || !!(roleDropdown && !roleDropdown.hidden),\n focus: () => input.focus()\n };\n}\n","// Migrated from lexiq-prototype collections/js/collection-detail.js.\nimport { store } from \"../store/collections-store\";\nimport type { Collection, CollectionDocument } from \"../store/collections-store\";\nimport { injectIcons } from \"../internal/icons\";\nimport {\n openConfirmModal,\n closeConfirmModal,\n escapeHtml,\n highlightSubstring,\n setButtonBusy,\n setDeleteWarning,\n showInlineError,\n clearInlineError\n} from \"../internal/dom-utils\";\nimport { errorMessageFor } from \"../internal/error-messages\";\nimport { clearText, i18nParams, setPluralText, setText, t, tPlural } from \"../internal/i18n\";\nimport { createPrincipalPicker } from \"../internal/principal-picker\";\nimport { getCurrentUser, whenCurrentUser } from \"../internal/current-user\";\nimport type { CollectionsHost } from \"../internal/host-contract\";\n\n/* Shared \"delete confirm\" buttons — see the identical pattern/rationale in views/list-view.ts. */\ntype DeleteConfirmButton = HTMLElement & {\n _targetCard?: HTMLElement | null;\n _bulkTargets?: HTMLElement[] | null;\n _detailCol?: Collection | null;\n};\n\ntype DocDeleteConfirmButton = HTMLElement & {\n _targets?: HTMLElement[] | null;\n};\n\n/** Catalog key for the two-stage progress label shown on a pending document. */\nfunction stageKey(doc: CollectionDocument): string {\n return doc.status === \"uploading\" ? \"tracker.stageUploading\" : \"tracker.stageIndexing\";\n}\n\nfunction docStatusHtml(doc: CollectionDocument): string {\n if (!doc.status) return `<span class=\"lq-doc-card__date\">${doc.date || \"\"}</span>`;\n // Matches what the tracker writes straight into the DOM when an upload fails,\n // so a card rebuilt from the listing reads the same as a live-patched one.\n // Without this an errored document rendered as \"2/2 Indexing\".\n if (doc.status === \"error\") return `<span class=\"lq-doc-card__date\" data-i18n=\"tracker.uploadFailed\">${t(\"tracker.uploadFailed\")}</span>`;\n const key = stageKey(doc);\n return `<span class=\"lq-doc-status\"><span class=\"lq-doc-status__label\" data-i18n=\"${key}\">${t(key)}</span><span class=\"lq-doc-status__dots\"><span></span><span></span><span></span></span></span>`;\n}\n\nfunction docStatusRowHtml(doc: CollectionDocument): string {\n if (!doc.status) return `<span class=\"lq-doc-row__date\">${doc.date || \"\"}</span>`;\n if (doc.status === \"error\") return `<span class=\"lq-doc-row__date\" data-i18n=\"tracker.uploadFailed\">${t(\"tracker.uploadFailed\")}</span>`;\n const key = stageKey(doc);\n return `<span class=\"lq-doc-status lq-doc-status--row\"><span class=\"lq-doc-status__label\" data-i18n=\"${key}\">${t(key)}</span><span class=\"lq-doc-status__dots\"><span></span><span></span><span></span></span></span>`;\n}\n\n/** The \"Uploaded by X\" / source tag shown in the footer of a document card or row. */\nfunction docSourceTagHtml(doc: CollectionDocument): string {\n if (doc.uploadedBy) {\n const params = i18nParams({ name: doc.uploadedBy });\n return `<span class=\"oc-tag oc-tag-size-xsmall oc-tag-grey lq-doc-uploaded-tag\">\n <span class=\"oc-tag-icon\"><i data-icon=\"menu-upload\"></i></span>\n <span class=\"oc-tag-label\" data-i18n=\"detail.uploadedBy\" data-i18n-params=\"${params}\">${escapeHtml(t(\"detail.uploadedBy\", { name: doc.uploadedBy }))}</span>\n </span>`;\n }\n return `<span class=\"oc-tag oc-tag-size-xsmall oc-tag-grey\">\n <span class=\"oc-tag-icon\"><i data-icon=\"group-people\"></i></span>\n <span class=\"oc-tag-label\">${doc.source || \"\"}</span>\n </span>`;\n}\n\nexport function initDetailView(host: CollectionsHost): void {\n const root = host.shadowRoot;\n\n // Guards Cancel/Close/backdrop/Escape on doc-delete-modal while its DELETE\n // is in flight — hoisted out of the \"Doc grid selection\" IIFE below since\n // the \"Doc card more menu\" IIFE's single-document delete entry point also\n // needs to pass this same guarded close to openConfirmModal().\n let docDeleteSubmitting = false;\n\n /* Readers can only read: no upload, no per-document delete, no selection\n mode (whose only action is Delete). The server enforces this too — these\n are hidden so a reader is never offered an action that can only 403\n (ES-33405). */\n function isReadOnly(): boolean {\n return host._currentCol?.currentUserRole === \"reader\";\n }\n\n function closeDocDeleteModal(): void {\n if (docDeleteSubmitting) return;\n closeConfirmModal(root, \"doc-delete-backdrop\", \"doc-delete-modal\");\n }\n\n function buildDocCard(doc: CollectionDocument): HTMLElement {\n const card = document.createElement(\"div\");\n card.className = \"lq-doc-card\";\n if (doc._id) card.dataset[\"docId\"] = doc._id;\n const readOnly = isReadOnly();\n card.innerHTML = `\n ${readOnly ? \"\" : `<button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon lq-doc-card__btn-del\" data-i18n-attr=\"aria-label:detail.deleteDocument\" aria-label=\"Delete document\"><i data-icon=\"col-trash\"></i></button>`}\n <label class=\"oc-checkbox-root lq-doc-card__checkbox\">\n <input type=\"checkbox\" class=\"oc-checkbox-input lq-doc-card__check-input\">\n <span class=\"oc-checkbox-hitbox\">\n <span class=\"oc-checkbox-control\">\n <span class=\"oc-checkbox-icon oc-checkbox-icon-check\"><i data-icon=\"checkbox-check\"></i></span>\n <span class=\"oc-checkbox-icon oc-checkbox-icon-minus\"><i data-icon=\"checkbox-minus\"></i></span>\n </span>\n </span>\n </label>\n <div class=\"lq-doc-card__icon\"><i data-icon=\"col-doc-${doc.type}\"></i></div>\n <span class=\"lq-doc-card__name\">${doc.name}</span>\n <span class=\"lq-doc-card__size\">${doc.size || \"\"}</span>\n <div class=\"lq-doc-card__sep\"></div>\n <div class=\"lq-doc-card__footer\">\n ${docSourceTagHtml(doc)}\n ${docStatusHtml(doc)}\n </div>`;\n const cardDelBtn = card.querySelector(\".lq-doc-card__btn-del\") as HTMLElement | null;\n if (cardDelBtn) host._tooltip.attach(cardDelBtn, \"common.delete\", \"top\");\n return card;\n }\n\n function buildDocListItem(doc: CollectionDocument): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"lq-doc-row\";\n if (doc._id) row.dataset[\"docId\"] = doc._id;\n const rowReadOnly = isReadOnly();\n row.innerHTML = `\n <div class=\"lq-doc-row__cb\">\n <label class=\"oc-checkbox-root\">\n <input type=\"checkbox\" class=\"oc-checkbox-input lq-doc-card__check-input\">\n <span class=\"oc-checkbox-hitbox\">\n <span class=\"oc-checkbox-control\">\n <span class=\"oc-checkbox-icon oc-checkbox-icon-check\"><i data-icon=\"checkbox-check\"></i></span>\n <span class=\"oc-checkbox-icon oc-checkbox-icon-minus\"><i data-icon=\"checkbox-minus\"></i></span>\n </span>\n </span>\n </label>\n </div>\n <div class=\"lq-doc-row__name\">\n <span class=\"lq-doc-row__icon\"><i data-icon=\"col-doc-${doc.type}\"></i></span>\n <span class=\"lq-doc-card__name\">${doc.name}</span>\n </div>\n <div class=\"lq-doc-row__source\">\n ${docSourceTagHtml(doc)}\n </div>\n <span class=\"lq-doc-row__size\">${doc.size || \"\"}</span>\n ${docStatusRowHtml(doc)}\n <div class=\"lq-doc-row__actions\">\n ${rowReadOnly ? \"\" : `<button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon lq-doc-card__btn-del\" data-i18n-attr=\"aria-label:detail.deleteDocument\" aria-label=\"Delete document\"><i data-icon=\"col-trash\"></i></button>`}\n </div>`;\n const rowDelBtn = row.querySelector(\".lq-doc-card__btn-del\") as HTMLElement | null;\n if (rowDelBtn) host._tooltip.attach(rowDelBtn, \"common.delete\", \"top\");\n return row;\n }\n\n function buildDocListView(docs: CollectionDocument[]): void {\n const list = root.getElementById(\"col-detail-list\")!;\n list.innerHTML = \"\";\n\n const header = document.createElement(\"div\");\n header.className = \"lq-doc-list-header\";\n header.innerHTML = `\n <div class=\"lq-doc-list__hdr-cell lq-doc-list__hdr-cb\">\n <label class=\"oc-checkbox-root lq-doc-list__select-all\">\n <input type=\"checkbox\" class=\"oc-checkbox-input\" id=\"doc-list-select-all\">\n <span class=\"oc-checkbox-hitbox\">\n <span class=\"oc-checkbox-control\">\n <span class=\"oc-checkbox-icon oc-checkbox-icon-check\"><i data-icon=\"checkbox-check\"></i></span>\n <span class=\"oc-checkbox-icon oc-checkbox-icon-minus\"><i data-icon=\"checkbox-minus\"></i></span>\n </span>\n </span>\n </label>\n </div>\n <div class=\"lq-doc-list__hdr-cell\" data-i18n=\"detail.columnName\">Name</div>\n <div class=\"lq-doc-list__hdr-cell lq-doc-list__hdr-source\" data-i18n=\"detail.columnSource\">Source</div>\n <div class=\"lq-doc-list__hdr-cell lq-doc-list__hdr-size\" data-i18n=\"detail.columnSize\">Size</div>\n <div class=\"lq-doc-list__hdr-cell lq-doc-list__hdr-date\" data-i18n=\"detail.columnDate\">Date</div>\n <div class=\"lq-doc-list__hdr-cell\"></div>`;\n list.appendChild(header);\n\n docs.forEach(doc => list.appendChild(buildDocListItem(doc)));\n injectIcons(list);\n\n root.getElementById(\"doc-list-select-all\")!.addEventListener(\"click\", function (this: HTMLInputElement) {\n const shouldCheck = !this.indeterminate ? this.checked : true;\n this.indeterminate = false;\n this.checked = shouldCheck;\n list.querySelectorAll(\".lq-doc-row\").forEach(r => {\n const cb = r.querySelector(\".lq-doc-card__check-input\") as HTMLInputElement | null;\n if (cb) {\n cb.checked = shouldCheck;\n cb.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n });\n });\n }\n\n /* Shows the active container and hides the inactive one — but only if the\n active one has something visible to show. An empty .lq-doc-list still\n renders its table header, which is how a bare header ended up sitting\n under the \"No documents yet\" panel; an empty grid leaves a dead scroll\n area. Counting *visible* items covers the filtered-to-nothing case\n (search/tab) as well as a genuinely empty collection. */\n function refreshCdvContainers(): void {\n const grid = root.getElementById(\"col-detail-grid\")!;\n const list = root.getElementById(\"col-detail-list\")!;\n const listMode = host._cdvCurrentView === \"list\";\n grid.hidden = listMode || grid.querySelectorAll(\".lq-doc-card:not([hidden])\").length === 0;\n list.hidden = !listMode || list.querySelectorAll(\".lq-doc-row:not([hidden])\").length === 0;\n }\n\n /* Whether the collection itself holds no documents — deliberately counts all\n items, not just visible ones, so a search that matches nothing doesn't get\n labelled \"No documents yet\". Container visibility is refreshCdvContainers'\n job. */\n function refreshCdvEmpty(): void {\n const sel = host._cdvCurrentView === \"list\" ? \"#col-detail-list .lq-doc-row\" : \"#col-detail-grid .lq-doc-card\";\n const empty = root.querySelectorAll(sel).length === 0;\n root.getElementById(\"col-detail-empty\")!.hidden = !empty;\n root.getElementById(\"col-detail-select-btn\")!.hidden = empty || isReadOnly();\n refreshCdvContainers();\n }\n\n /* An access change made from the share modal or the edit modal can demote\n the user on the collection they are currently looking at. The role gate\n runs inside openColDetail(), so without this the buttons a reader may no\n longer use stay on screen until they navigate away and back. */\n store.addEventListener(\"collection-updated\", e => {\n const updated = (e as CustomEvent<{ collection: Collection }>).detail.collection;\n const open = host._currentCol;\n if (!open || open.id !== updated.id || root.getElementById(\"col-detail-view\")!.hidden) return;\n host._currentCol = updated;\n const nowReader = updated.currentUserRole === \"reader\";\n root.getElementById(\"col-detail-delete\")!.hidden = nowReader;\n root.getElementById(\"col-detail-edit\")!.hidden = nowReader;\n root.getElementById(\"cdv-more-delete\")!.hidden = nowReader;\n root.getElementById(\"cdv-more-edit\")!.hidden = nowReader;\n root.getElementById(\"col-detail-share\")!.hidden = nowReader;\n root.getElementById(\"cdv-more-share\")!.hidden = nowReader;\n root.getElementById(\"col-detail-upload\")!.hidden = nowReader;\n if (nowReader) {\n // Leave selection mode before hiding its entry point, or the select bar\n // stays up with no way back out of it.\n host._exitDocSelection?.();\n root.getElementById(\"col-detail-select-btn\")!.hidden = true;\n // The per-document delete buttons are baked into the card/row markup,\n // so the documents have to be rebuilt to lose them.\n const grid = root.getElementById(\"col-detail-grid\")!;\n grid.innerHTML = \"\";\n host._currentDocs.forEach(doc => grid.appendChild(buildDocCard(doc)));\n injectIcons(grid);\n host._cdvListBuilt = false;\n root.getElementById(\"col-detail-list\")!.innerHTML = \"\";\n if (host._cdvCurrentView === \"list\") host._buildDocListView(host._currentDocs);\n refreshCdvEmpty();\n }\n });\n\n async function openColDetail(col: Collection): Promise<void> {\n host._exitDocSelection?.();\n host._closeColDocPreview?.();\n host._resetDetailSearch?.();\n host._currentCol = col;\n const detailView = root.getElementById(\"col-detail-view\")!;\n root.getElementById(\"col-detail-title\")!.textContent = col.name;\n root.getElementById(\"col-detail-desc\")!.textContent = col.desc;\n\n const tagsEl = root.getElementById(\"col-detail-tags\")!;\n if (col.tags.length) {\n tagsEl.innerHTML = `<i data-icon=\"col-tags-label\"></i> ${col.tags.join(\", \")}`;\n tagsEl.hidden = false;\n } else {\n tagsEl.hidden = true;\n }\n\n /* Readers can't delete, edit, manage access, upload, or remove documents\n — only creator/owner. host._currentCol is set above, so isReadOnly()\n (which the document builders below also consult) already agrees. */\n const isReader = col.currentUserRole === \"reader\";\n root.getElementById(\"col-detail-delete\")!.hidden = isReader;\n root.getElementById(\"col-detail-edit\")!.hidden = isReader;\n root.getElementById(\"cdv-more-delete\")!.hidden = isReader;\n root.getElementById(\"cdv-more-edit\")!.hidden = isReader;\n root.getElementById(\"col-detail-share\")!.hidden = isReader;\n root.getElementById(\"cdv-more-share\")!.hidden = isReader;\n root.getElementById(\"col-detail-upload\")!.hidden = isReader;\n\n const delBtn = root.getElementById(\"col-detail-delete\")!;\n delBtn.onclick = () => {\n setText(root.getElementById(\"col-delete-modal-title\")!, \"list.deleteTitle\");\n setDeleteWarning(root.getElementById(\"col-delete-desc\")!, col.name);\n (root.getElementById(\"btn-col-delete-confirm\") as DeleteConfirmButton)._detailCol = col;\n clearInlineError(root.getElementById(\"col-delete-error\")!);\n openConfirmModal(root, \"col-delete-backdrop\", \"col-delete-modal\", host._closeColDeleteModal);\n };\n\n host._cdvListBuilt = false;\n host._cdvCurrentView = \"grid\";\n root.getElementById(\"col-detail-view-grid\")!.setAttribute(\"aria-pressed\", \"true\");\n root.getElementById(\"col-detail-view-list\")!.setAttribute(\"aria-pressed\", \"false\");\n\n const grid = root.getElementById(\"col-detail-grid\")!;\n const docList = root.getElementById(\"col-detail-list\")!;\n const loadingEl = root.getElementById(\"col-detail-docs-loading\")!;\n const errorEl = root.getElementById(\"col-detail-docs-error\")!;\n\n grid.hidden = true;\n docList.hidden = true;\n root.getElementById(\"col-detail-empty\")!.hidden = true;\n root.getElementById(\"col-detail-select-btn\")!.hidden = true;\n errorEl.hidden = true;\n clearInlineError(root.getElementById(\"col-detail-refresh-error\")!);\n loadingEl.hidden = false;\n clearText(root.getElementById(\"col-detail-count\")!);\n\n root.getElementById(\"collections-view\")!.hidden = true;\n detailView.hidden = false;\n injectIcons(detailView);\n\n let docs: CollectionDocument[];\n try {\n docs = await store.loadDocuments(col.id);\n } catch (err) {\n loadingEl.hidden = true;\n root.getElementById(\"col-detail-docs-error-message\")!.textContent = errorMessageFor(err);\n errorEl.hidden = false;\n injectIcons(errorEl);\n return;\n }\n\n // The user may have navigated to a different collection (or closed the\n // detail view) while the request was in flight — don't clobber whatever\n // is showing now with a stale response.\n if (host._currentCol !== col) return;\n\n loadingEl.hidden = true;\n renderDocs(docs);\n }\n\n /* Renders a freshly loaded document listing in the current view mode —\n shared by openColDetail() (always grid) and the Refresh button (keeps\n whichever mode is showing). The list is only rebuilt when it's the one on\n screen; otherwise it's marked stale and built on the next switch to it. */\n function renderDocs(docs: CollectionDocument[]): void {\n host._currentDocs = docs;\n setPluralText(root.getElementById(\"col-detail-count\")!, \"detail.fileCount\", docs.length);\n\n // A page reload loses every local tus handle, so the listing's own\n // status is the only way to learn an upload is still running here. The\n // poller stops itself as soon as nothing is pending.\n if (docs.some(d => d.status === \"uploading\" || d.status === \"indexing\")) {\n host._startUploadPolling?.();\n }\n\n // Both containers' hidden flags are refreshCdvContainers' call, via\n // refreshCdvEmpty() below — don't pre-set them here.\n const grid = root.getElementById(\"col-detail-grid\")!;\n grid.innerHTML = \"\";\n docs.forEach(doc => {\n const c = buildDocCard(doc);\n grid.appendChild(c);\n });\n injectIcons(grid);\n\n root.getElementById(\"col-detail-list\")!.innerHTML = \"\";\n host._cdvListBuilt = host._cdvCurrentView === \"list\";\n if (host._cdvListBuilt) buildDocListView(docs);\n\n root.getElementById(\"col-detail-select-btn\")!.hidden = isReadOnly();\n refreshCdvEmpty();\n }\n\n root.getElementById(\"col-detail-docs-retry\")!.addEventListener(\"click\", () => {\n if (host._currentCol) void openColDetail(host._currentCol);\n });\n\n function closeColDetail(): void {\n host._exitDocSelection?.();\n host._closeColDocPreview?.();\n root.getElementById(\"col-detail-view\")!.hidden = true;\n root.getElementById(\"collections-view\")!.hidden = false;\n // Uploads/deletes here, or containers created by others meanwhile, left\n // the list stale — see refreshCollections() (ES-33713).\n void host._refreshList?.();\n }\n\n root.getElementById(\"col-detail-back\")!.addEventListener(\"click\", closeColDetail);\n\n // Set by the search IIFE below — re-filters freshly rebuilt cards/rows\n // against whatever query is still in the search box.\n let reapplyDetailSearch = (): void => {};\n\n /* Collection detail search */\n (function (): void {\n const input = root.getElementById(\"col-detail-search\") as HTMLInputElement;\n const clearBtn = root.getElementById(\"col-detail-search-clear\")!;\n const sb = input.closest(\".oc-sb\") as HTMLElement | null;\n\n function applyDetailSearch(q: string): void {\n const lower = q.toLowerCase();\n const applyItem = (el: HTMLElement, nameSelector: string): void => {\n const titleEl = el.querySelector(nameSelector) as HTMLElement | null;\n const name = (titleEl?.dataset[\"rawText\"] || titleEl?.textContent || \"\").toLowerCase();\n const match = !q || name.includes(lower);\n el.hidden = !match;\n if (titleEl) highlightSubstring(titleEl, match ? q : \"\");\n };\n const grid = root.getElementById(\"col-detail-grid\");\n if (grid) grid.querySelectorAll(\".lq-doc-card\").forEach(c => applyItem(c as HTMLElement, \".lq-doc-card__name\"));\n const listEl = root.getElementById(\"col-detail-list\");\n if (listEl) listEl.querySelectorAll(\".lq-doc-row\").forEach(r => applyItem(r as HTMLElement, \".lq-doc-row__name\"));\n refreshCdvContainers();\n }\n\n input.addEventListener(\"input\", () => {\n const q = input.value;\n sb?.classList.toggle(\"oc-sb--empty\", q === \"\");\n clearBtn.classList.toggle(\"visible\", q !== \"\");\n applyDetailSearch(q);\n });\n\n clearBtn.addEventListener(\"click\", () => {\n input.value = \"\";\n sb?.classList.add(\"oc-sb--empty\");\n clearBtn.classList.remove(\"visible\");\n applyDetailSearch(\"\");\n input.focus();\n });\n\n host._resetDetailSearch = () => {\n input.value = \"\";\n sb?.classList.add(\"oc-sb--empty\");\n clearBtn.classList.remove(\"visible\");\n };\n\n reapplyDetailSearch = () => applyDetailSearch(input.value);\n })();\n\n /* Collection detail Refresh — re-reads the documents listing without\n leaving the view. Unlike openColDetail() it keeps the current view mode\n and search, and a failure leaves the displayed documents untouched. */\n (function (): void {\n const btn = root.getElementById(\"col-detail-refresh\") as HTMLButtonElement;\n const errorEl = root.getElementById(\"col-detail-refresh-error\")!;\n host._tooltip.attach(btn, \"common.refresh\", \"bottom\");\n\n async function refreshColDetail(): Promise<void> {\n const col = host._currentCol;\n if (!col) return;\n clearInlineError(errorEl);\n // Also disables the button until the call settles — a disabled button\n // ignores clicks, including the mobile menu's programmatic .click().\n setButtonBusy(btn, true);\n let docs: CollectionDocument[];\n try {\n docs = await store.loadDocuments(col.id);\n } catch (err) {\n if (host._currentCol === col) showInlineError(errorEl, t(\"detail.refreshError\", { error: errorMessageFor(err) }));\n return;\n } finally {\n setButtonBusy(btn, false);\n }\n if (host._currentCol !== col) return;\n // Selection checkboxes and the preview's active card point at elements\n // that are about to be rebuilt.\n host._exitDocSelection?.();\n host._closeColDocPreview?.();\n renderDocs(docs);\n reapplyDetailSearch();\n }\n\n btn.addEventListener(\"click\", () => {\n void refreshColDetail();\n });\n })();\n\n /* Edit / Add collection modal */\n (function (): void {\n let editTags: string[] = [];\n let mode: \"edit\" | \"add\" = \"edit\"; // 'edit' | 'add'\n // \"Share with\" — the same control the share modal uses, shown only when\n // creating a collection. Editing an existing one has the dedicated\n // \"Manage access\" button for this, and two places writing the same two\n // arrays is one too many: this modal would be holding a snapshot of the\n // access list taken when it opened.\n const sharePicker = createPrincipalPicker({\n elements: {\n tagWrap: root.getElementById(\"col-edit-share-wrap\")!,\n input: root.getElementById(\"col-edit-share-input\") as HTMLInputElement,\n dropdown: root.getElementById(\"col-edit-share-dropdown\")!,\n roleWrap: root.querySelector(\"#col-edit-share-wrap .lq-col-share-perm-wrap\") as HTMLElement,\n roleBtn: root.getElementById(\"col-edit-share-perm-btn\")!,\n roleLabel: root.getElementById(\"col-edit-share-perm-label\")!,\n roleDropdown: root.getElementById(\"col-edit-share-perm-dropdown\")!\n },\n placeholderKey: \"share.searchPlaceholder\",\n ariaLabelKey: \"share.searchUsers\",\n showChipRole: true,\n // Never offer the user themselves: they are the creator-to-be, and go\n // into `owners` automatically when the collection is created.\n excludeIds: () => [getCurrentUser()?.id].filter((id): id is string => !!id)\n });\n\n /** The picked users split into the two arrays the container API replaces wholesale. */\n function shareAccessArrays(): { owners: string[]; readers: string[] } {\n const entries = sharePicker.getEntries();\n return {\n owners: entries.filter(e => e.role === \"owner\").map(e => e.id),\n readers: entries.filter(e => e.role === \"reader\").map(e => e.id)\n };\n }\n\n // Locks Cancel/Close/Escape while a create/update request is in flight —\n // simpler and safer than reconciling a stale response after the user\n // has already navigated away from a closed modal.\n let submitting = false;\n\n function renderTagChips(): void {\n const wrap = root.getElementById(\"col-edit-tag-wrap\")!;\n const input = root.getElementById(\"col-edit-tags-input\") as HTMLInputElement;\n [...wrap.children].forEach(c => {\n if (c !== input) c.remove();\n });\n editTags.forEach((tag, i) => {\n const chip = document.createElement(\"span\");\n chip.className = \"oc-tag oc-tag-size-xsmall oc-tag-grey lq-tag-input__chip\";\n const label = document.createElement(\"span\");\n label.className = \"oc-tag-label\";\n label.textContent = tag;\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className = \"lq-tag-input__remove\";\n btn.dataset[\"i18nAttr\"] = \"aria-label:edit.removeTag\";\n btn.dataset[\"i18nParams\"] = JSON.stringify({ tag });\n btn.setAttribute(\"aria-label\", t(\"edit.removeTag\", { tag }));\n btn.dataset[\"index\"] = String(i);\n btn.innerHTML = '<i data-icon=\"chip-close\"></i>';\n chip.appendChild(label);\n chip.appendChild(btn);\n wrap.insertBefore(chip, input);\n });\n injectIcons(wrap);\n // Only the empty state carries the placeholder hint, so its annotation is\n // added and removed with it — the aria-label's stays either way.\n if (editTags.length) {\n input.dataset[\"i18nAttr\"] = \"aria-label:edit.addTag\";\n input.placeholder = \"\";\n } else {\n input.dataset[\"i18nAttr\"] = \"placeholder:edit.tagsPlaceholder;aria-label:edit.addTag\";\n input.placeholder = t(\"edit.tagsPlaceholder\");\n }\n }\n\n function updateDescCounter(): void {\n const textarea = root.getElementById(\"col-edit-desc\") as HTMLTextAreaElement;\n const counter = root.getElementById(\"col-edit-desc-counter\")!;\n const wrap = root.getElementById(\"col-edit-desc-wrap\")!;\n const len = textarea.value.length;\n counter.textContent = len + \"/300\";\n counter.classList.toggle(\"oc-input-counter-error\", len > 300);\n wrap.classList.toggle(\"oc-input-scheme-error\", len > 300);\n }\n\n function setModalMode(m: \"edit\" | \"add\"): void {\n mode = m;\n // Access is only editable here while creating; an existing collection\n // has the \"Manage access\" button in the detail header.\n root.getElementById(\"col-edit-share-field\")!.hidden = m === \"edit\";\n setText(root.getElementById(\"col-edit-modal-title\")!, m === \"add\" ? \"edit.addTitle\" : \"edit.editTitle\");\n setText(root.getElementById(\"btn-col-edit-save\")!, m === \"add\" ? \"common.create\" : \"common.save\");\n }\n\n function openEditModal(col: Collection): void {\n setModalMode(\"edit\");\n (root.getElementById(\"col-edit-title\") as HTMLInputElement).value = col.name;\n (root.getElementById(\"col-edit-desc\") as HTMLTextAreaElement).value = col.desc;\n updateDescCounter();\n editTags = [...col.tags];\n renderTagChips();\n sharePicker.reset();\n clearInlineError(root.getElementById(\"col-edit-error\")!);\n openConfirmModal(root, \"col-edit-backdrop\", \"col-edit-modal\", handleEditModalRequestClose);\n requestAnimationFrame(() => {\n const ti = root.getElementById(\"col-edit-title\") as HTMLInputElement;\n ti.focus();\n ti.select();\n });\n }\n\n function openAddModal(): void {\n setModalMode(\"add\");\n (root.getElementById(\"col-edit-title\") as HTMLInputElement).value = \"\";\n (root.getElementById(\"col-edit-desc\") as HTMLTextAreaElement).value = \"\";\n updateDescCounter();\n editTags = [];\n renderTagChips();\n sharePicker.reset();\n root.getElementById(\"col-edit-title-wrap\")!.classList.remove(\"oc-input-scheme-error\");\n root.getElementById(\"col-edit-title-hint\")!.hidden = true;\n clearInlineError(root.getElementById(\"col-edit-error\")!);\n openConfirmModal(root, \"col-edit-backdrop\", \"col-edit-modal\", handleEditModalRequestClose);\n requestAnimationFrame(() => (root.getElementById(\"col-edit-title\") as HTMLInputElement).focus());\n }\n\n function closeEditModal(): void {\n if (submitting) return;\n sharePicker.closeDropdowns();\n closeConfirmModal(root, \"col-edit-backdrop\", \"col-edit-modal\");\n }\n\n // Escape closes the \"Share with\" results or role menu first, and only the\n // whole modal once neither is open — the same layering the share modal\n // applies to its own dropdowns.\n function handleEditModalRequestClose(): void {\n if (sharePicker.hasOpenDropdown()) {\n sharePicker.closeDropdowns();\n return;\n }\n closeEditModal();\n }\n\n host.openAddCollectionModal = openAddModal;\n\n const tagInput = root.getElementById(\"col-edit-tags-input\") as HTMLInputElement;\n\n tagInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Backspace\" && tagInput.value === \"\" && editTags.length > 0) {\n editTags.pop();\n renderTagChips();\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n const val = tagInput.value.trim();\n if (val) {\n editTags.push(val);\n tagInput.value = \"\";\n renderTagChips();\n }\n }\n });\n\n tagInput.addEventListener(\"input\", () => {\n const val = tagInput.value;\n const ci = val.indexOf(\",\");\n if (ci !== -1) {\n const tag = val.slice(0, ci).trim();\n tagInput.value = val.slice(ci + 1);\n if (tag) {\n editTags.push(tag);\n renderTagChips();\n }\n }\n });\n\n root.getElementById(\"col-edit-tag-wrap\")!.addEventListener(\"click\", e => {\n const target = e.target as HTMLElement;\n const btn = target.closest(\".lq-tag-input__remove\") as HTMLElement | null;\n if (btn) {\n editTags.splice(Number(btn.dataset[\"index\"]), 1);\n renderTagChips();\n return;\n }\n tagInput.focus();\n });\n\n root.getElementById(\"col-edit-title\")!.addEventListener(\"input\", () => {\n root.getElementById(\"col-edit-title-wrap\")!.classList.remove(\"oc-input-scheme-error\");\n root.getElementById(\"col-edit-title-hint\")!.hidden = true;\n });\n\n root.getElementById(\"col-edit-desc\")!.addEventListener(\"input\", updateDescCounter);\n\n root.getElementById(\"btn-col-edit-close\")!.addEventListener(\"click\", closeEditModal);\n root.getElementById(\"btn-col-edit-cancel\")!.addEventListener(\"click\", closeEditModal);\n root.getElementById(\"col-edit-backdrop\")!.addEventListener(\"click\", closeEditModal);\n\n root.getElementById(\"btn-col-edit-save\")!.addEventListener(\"click\", async () => {\n if (submitting) return;\n\n const tv = tagInput.value.trim();\n if (tv) {\n editTags.push(tv);\n tagInput.value = \"\";\n }\n\n const titleInput = root.getElementById(\"col-edit-title\") as HTMLInputElement;\n const title = titleInput.value.trim();\n const desc = (root.getElementById(\"col-edit-desc\") as HTMLTextAreaElement).value.trim();\n if (!title) {\n root.getElementById(\"col-edit-title-wrap\")!.classList.add(\"oc-input-scheme-error\");\n root.getElementById(\"col-edit-title-hint\")!.hidden = false;\n titleInput.focus();\n return;\n }\n\n const saveBtn = root.getElementById(\"btn-col-edit-save\") as HTMLButtonElement;\n const errorEl = root.getElementById(\"col-edit-error\")!;\n submitting = true;\n clearInlineError(errorEl);\n setButtonBusy(saveBtn, true, t(mode === \"add\" ? \"edit.creating\" : \"edit.saving\"));\n\n try {\n if (mode === \"add\") {\n const { owners, readers } = shareAccessArrays();\n // The creator goes into `owners` as well as `creator`. Awaited\n // rather than read off getCurrentUser(): a create fired before the\n // principal request settled would otherwise drop the id silently,\n // and the owners array is not something the user can see is short.\n const creator = await whenCurrentUser();\n const createOwners = creator && !owners.includes(creator.id) ? [...owners, creator.id] : owners;\n const newCol = await store.create({ name: title, desc, tags: [...editTags], owners: createOwners, readers });\n\n // Not closeEditModal() — `submitting` is still true here, and that\n // guard exists specifically to block Cancel/Close/Escape while a\n // request is in flight, not this handler's own success path.\n closeConfirmModal(root, \"col-edit-backdrop\", \"col-edit-modal\");\n openColDetail(newCol);\n host.dispatchEvent(new CustomEvent(\"lexiq-collections:collection-created\", { bubbles: true, composed: true, detail: { collection: newCol } }));\n } else {\n const col = host._currentCol;\n if (!col) return;\n // Read off the awaited response rather than assuming `col` mutated\n // in place — once update() is network-backed, it only reflects the\n // patch after the server confirms it.\n // Deliberately no owners/readers: the API replaces both arrays\n // wholesale, so sending them from here would overwrite whatever\n // \"Manage access\" has done since this modal opened. Omitting them\n // leaves the container's access untouched.\n const updated = await store.update(col.id, { name: title, description: desc, tags: [...editTags] });\n if (!updated) return;\n // Without this, host._currentCol keeps pointing at the pre-edit\n // object — reopening \"Edit\"/\"Manage access\" on the still-open\n // detail view would show stale name/desc/tags (or, worse, a stale\n // owners/readers list if a share-modal.ts change follows).\n host._currentCol = updated;\n\n root.getElementById(\"col-detail-title\")!.textContent = title;\n root.getElementById(\"col-detail-desc\")!.textContent = desc;\n const tagsEl = root.getElementById(\"col-detail-tags\")!;\n if (updated.tags.length) {\n tagsEl.innerHTML = `<i data-icon=\"col-tags-label\"></i> ${updated.tags.join(\", \")}`;\n tagsEl.hidden = false;\n injectIcons(tagsEl);\n } else {\n tagsEl.hidden = true;\n }\n\n // The grid card / list row for this collection are kept in sync by\n // list-view.ts's own 'collection-updated' listener (store.update()\n // above already triggered it) — it rebuilds the card/row from\n // `updated` rather than patching text in place, which also fixes\n // the click handler's closure (still capturing the pre-edit\n // object otherwise, so reopening it from the list would show\n // stale data again despite the card's visible text looking right).\n\n closeConfirmModal(root, \"col-edit-backdrop\", \"col-edit-modal\");\n host.dispatchEvent(new CustomEvent(\"lexiq-collections:collection-updated\", { bubbles: true, composed: true, detail: { collection: updated } }));\n }\n } catch (err) {\n showInlineError(errorEl, errorMessageFor(err));\n } finally {\n submitting = false;\n setButtonBusy(saveBtn, false);\n }\n });\n\n /* Close the \"Share with\" dropdowns on an outside click. On `document`\n rather than the modal, so it also catches clicks on the host page;\n composedPath() instead of .contains() since this listener sits outside\n the shadow root and `e.target` is retargeted to the host element (same\n reasoning as the identical listener in views/share-modal.ts). */\n document.addEventListener(\"click\", e => {\n if (root.getElementById(\"col-edit-modal\")!.hidden) return;\n const field = root.getElementById(\"col-edit-share-field\")!;\n if (!e.composedPath().includes(field)) sharePicker.closeDropdowns();\n });\n\n root.getElementById(\"col-detail-edit\")!.addEventListener(\"click\", () => {\n if (host._currentCol) openEditModal(host._currentCol);\n });\n root.getElementById(\"btn-add-collection\")!.addEventListener(\"click\", openAddModal);\n })();\n\n /* Collection detail grid ↔ list toggle */\n (function (): void {\n const btnGrid = root.getElementById(\"col-detail-view-grid\")!;\n const btnList = root.getElementById(\"col-detail-view-list\")!;\n\n btnGrid.addEventListener(\"click\", () => {\n host._exitDocSelection?.();\n host._cdvCurrentView = \"grid\";\n btnGrid.setAttribute(\"aria-pressed\", \"true\");\n btnList.setAttribute(\"aria-pressed\", \"false\");\n refreshCdvContainers();\n host._syncColDocPreviewView?.();\n });\n\n btnList.addEventListener(\"click\", () => {\n host._exitDocSelection?.();\n host._cdvCurrentView = \"list\";\n btnGrid.setAttribute(\"aria-pressed\", \"false\");\n btnList.setAttribute(\"aria-pressed\", \"true\");\n if (!host._cdvListBuilt) {\n host._cdvListBuilt = true;\n buildDocListView(host._currentDocs);\n }\n // After the build, so the row count it reads is the real one.\n refreshCdvContainers();\n host._syncColDocPreviewView?.();\n });\n })();\n\n /* Doc grid selection */\n (function (): void {\n const selectBtn = root.getElementById(\"col-detail-select-btn\")!;\n const selbar = root.getElementById(\"col-detail-selbar\")!;\n const selDelete = root.getElementById(\"col-detail-sel-delete\") as HTMLButtonElement;\n const selAll = root.getElementById(\"col-detail-sel-all\")!;\n let selecting = false;\n // The file count the header shows outside selection mode. Kept as a number,\n // not the rendered string, so restoring it re-renders in the current\n // language instead of replaying text captured under the previous one.\n let savedFileCount = 0;\n\n function getCards(): HTMLElement[] {\n if (host._cdvCurrentView === \"list\") {\n return [...root.getElementById(\"col-detail-list\")!.querySelectorAll(\".lq-doc-row\")] as HTMLElement[];\n }\n return [...root.getElementById(\"col-detail-grid\")!.querySelectorAll(\".lq-doc-card\")] as HTMLElement[];\n }\n\n function updateSelState(): void {\n const cards = getCards();\n const n = cards.filter(c => (c.querySelector(\".lq-doc-card__check-input\") as HTMLInputElement | null)?.checked).length;\n setPluralText(root.getElementById(\"col-detail-count\")!, \"detail.selectedDocumentCount\", n);\n selDelete.disabled = n === 0;\n\n // The button already toggles; only its label was fixed. The length guard\n // matters because [].every() is true, which would label an empty list\n // \"Unselect All\".\n setText(selAll, cards.length > 0 && n === cards.length ? \"common.unselectAll\" : \"common.selectAll\");\n\n const hdrCb = root.getElementById(\"doc-list-select-all\") as HTMLInputElement | null;\n if (hdrCb) {\n hdrCb.checked = n > 0 && n === cards.length;\n hdrCb.indeterminate = n > 0 && n < cards.length;\n }\n }\n\n function enterSelection(): void {\n selecting = true;\n savedFileCount = getCards().length;\n setText(selectBtn, \"common.cancel\");\n root.getElementById(\"col-detail-grid\")!.classList.add(\"lq-cdv-grid--selecting\");\n root.getElementById(\"col-detail-list\")!.classList.add(\"lq-cdv-list--selecting\");\n selbar.hidden = false;\n injectIcons(selbar);\n updateSelState();\n }\n\n function exitSelection(): void {\n if (!selecting) return;\n selecting = false;\n setText(selectBtn, \"common.select\");\n root.getElementById(\"col-detail-grid\")!.classList.remove(\"lq-cdv-grid--selecting\");\n root.getElementById(\"col-detail-list\")!.classList.remove(\"lq-cdv-list--selecting\");\n getCards().forEach(c => {\n const cb = c.querySelector(\".lq-doc-card__check-input\") as HTMLInputElement | null;\n if (cb) cb.checked = false;\n c.classList.remove(\"lq-doc-card--selected\");\n });\n selbar.hidden = true;\n selDelete.disabled = true;\n setPluralText(root.getElementById(\"col-detail-count\")!, \"detail.fileCount\", savedFileCount);\n }\n\n host._exitDocSelection = exitSelection;\n\n selectBtn.addEventListener(\"click\", () => (selecting ? exitSelection() : enterSelection()));\n\n root.getElementById(\"col-detail-grid\")!.addEventListener(\"change\", e => {\n const target = e.target as HTMLInputElement;\n if (!target.classList.contains(\"lq-doc-card__check-input\")) return;\n const card = target.closest(\".lq-doc-card\");\n if (card) card.classList.toggle(\"lq-doc-card--selected\", target.checked);\n updateSelState();\n });\n\n root.getElementById(\"col-detail-grid\")!.addEventListener(\"click\", e => {\n if (!selecting) return;\n const target = e.target as HTMLElement;\n const card = target.closest(\".lq-doc-card\");\n if (!card) return;\n if (target.closest(\".lq-doc-card__checkbox\") || target.closest(\".lq-doc-card__btn-del\")) return;\n const cb = card.querySelector(\".lq-doc-card__check-input\") as HTMLInputElement | null;\n if (cb) {\n cb.checked = !cb.checked;\n cb.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n });\n\n root.getElementById(\"col-detail-list\")!.addEventListener(\"change\", e => {\n const target = e.target as HTMLInputElement;\n if (!target.classList.contains(\"lq-doc-card__check-input\")) return;\n const row = target.closest(\".lq-doc-row\");\n if (row) row.classList.toggle(\"lq-doc-card--selected\", target.checked);\n updateSelState();\n });\n\n root.getElementById(\"col-detail-list\")!.addEventListener(\"click\", e => {\n if (!selecting) return;\n const target = e.target as HTMLElement;\n const row = target.closest(\".lq-doc-row\");\n if (!row) return;\n if (target.closest(\".lq-doc-row__cb\") || target.closest(\".lq-doc-card__btn-del\")) return;\n const cb = row.querySelector(\".lq-doc-card__check-input\") as HTMLInputElement | null;\n if (cb) {\n cb.checked = !cb.checked;\n cb.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n });\n\n selAll.addEventListener(\"click\", () => {\n const cards = getCards();\n const allChecked = cards.every(c => (c.querySelector(\".lq-doc-card__check-input\") as HTMLInputElement | null)?.checked);\n cards.forEach(c => {\n const cb = c.querySelector(\".lq-doc-card__check-input\") as HTMLInputElement | null;\n if (cb) {\n cb.checked = !allChecked;\n cb.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n });\n });\n\n selDelete.addEventListener(\"click\", () => {\n const selected = getCards().filter(c => (c.querySelector(\".lq-doc-card__check-input\") as HTMLInputElement | null)?.checked);\n const n = selected.length;\n if (!n) return;\n setPluralText(root.getElementById(\"doc-delete-title\")!, \"detail.deleteDocumentsTitle\", n);\n setDeleteWarning(root.getElementById(\"doc-delete-desc\")!, tPlural(\"detail.documentCount\", n));\n (root.getElementById(\"btn-doc-delete-confirm\") as DocDeleteConfirmButton)._targets = selected;\n clearInlineError(root.getElementById(\"doc-delete-error\")!);\n openConfirmModal(root, \"doc-delete-backdrop\", \"doc-delete-modal\", closeDocDeleteModal);\n });\n\n root.getElementById(\"btn-doc-delete-close\")!.addEventListener(\"click\", closeDocDeleteModal);\n root.getElementById(\"btn-doc-delete-cancel\")!.addEventListener(\"click\", closeDocDeleteModal);\n root.getElementById(\"doc-delete-backdrop\")!.addEventListener(\"click\", closeDocDeleteModal);\n root.getElementById(\"btn-doc-delete-confirm\")!.addEventListener(\"click\", async function (this: DocDeleteConfirmButton) {\n if (docDeleteSubmitting) return;\n const targets = this._targets || [];\n const ids = targets.map(c => c.dataset[\"docId\"]).filter((id): id is string => Boolean(id));\n\n const confirmBtn = root.getElementById(\"btn-doc-delete-confirm\") as HTMLButtonElement;\n const errorEl = root.getElementById(\"doc-delete-error\")!;\n docDeleteSubmitting = true;\n clearInlineError(errorEl);\n setButtonBusy(confirmBtn, true, t(\"common.deleting\"));\n\n try {\n if (ids.length && host._currentCol) await store.removeDocuments(host._currentCol.id, ids);\n targets.forEach(c => c.remove());\n this._targets = null;\n savedFileCount = getCards().length;\n closeConfirmModal(root, \"doc-delete-backdrop\", \"doc-delete-modal\");\n exitSelection();\n setPluralText(root.getElementById(\"col-detail-count\")!, \"detail.fileCount\", savedFileCount);\n refreshCdvEmpty();\n } catch (err) {\n showInlineError(errorEl, errorMessageFor(err));\n } finally {\n docDeleteSubmitting = false;\n setButtonBusy(confirmBtn, false);\n }\n });\n })();\n\n /* Doc delete button. Deleting is the only per-document action left - moving\n a document between collections was removed - so it sits directly on the\n card instead of behind a \"more\" menu that would hold a single entry.\n Delegated on the two containers, since cards are built and replaced as the\n listing refreshes. */\n (function (): void {\n function handleDeleteClick(e: Event): void {\n const target = e.target as HTMLElement;\n const btn = target.closest(\".lq-doc-card__btn-del\") as HTMLElement | null;\n if (!btn) return;\n e.stopPropagation();\n const card = (btn.closest(\".lq-doc-card\") || btn.closest(\".lq-doc-row\")) as HTMLElement | null;\n if (!card) return;\n setText(root.getElementById(\"doc-delete-title\")!, \"detail.deleteDocTitle\");\n // Rows nest .lq-doc-card__name too, so one selector covers both views.\n setDeleteWarning(root.getElementById(\"doc-delete-desc\")!, card.querySelector(\".lq-doc-card__name\")!.textContent || \"\");\n (root.getElementById(\"btn-doc-delete-confirm\") as DocDeleteConfirmButton)._targets = [card];\n clearInlineError(root.getElementById(\"doc-delete-error\")!);\n openConfirmModal(root, \"doc-delete-backdrop\", \"doc-delete-modal\", closeDocDeleteModal);\n }\n\n root.getElementById(\"col-detail-grid\")!.addEventListener(\"click\", handleDeleteClick);\n root.getElementById(\"col-detail-list\")!.addEventListener(\"click\", handleDeleteClick);\n })();\n\n /* Collection detail mobile \"more\" menu — Share/Edit/Refresh/Delete */\n (function (): void {\n const btn = root.getElementById(\"cdv-more-btn\");\n const menu = root.getElementById(\"cdv-more-menu\");\n if (!btn || !menu) return;\n\n function openMenu(): void {\n const r = btn!.getBoundingClientRect();\n menu!.style.top = r.bottom + 4 + \"px\";\n menu!.style.left = Math.max(4, r.right - 200) + \"px\";\n menu!.hidden = false;\n injectIcons(menu!);\n }\n\n function closeMenu(): void {\n menu!.hidden = true;\n }\n\n btn.addEventListener(\"click\", e => {\n e.stopPropagation();\n if (menu.hidden) openMenu();\n else closeMenu();\n });\n\n document.addEventListener(\"click\", e => {\n const path = e.composedPath();\n if (!menu.hidden && !path.includes(menu) && !path.includes(btn)) closeMenu();\n });\n\n root.getElementById(\"cdv-more-share\")!.addEventListener(\"click\", () => {\n closeMenu();\n root.getElementById(\"col-detail-share\")!.click();\n });\n root.getElementById(\"cdv-more-edit\")!.addEventListener(\"click\", () => {\n closeMenu();\n root.getElementById(\"col-detail-edit\")!.click();\n });\n root.getElementById(\"cdv-more-refresh\")!.addEventListener(\"click\", () => {\n closeMenu();\n root.getElementById(\"col-detail-refresh\")!.click();\n });\n root.getElementById(\"cdv-more-delete\")!.addEventListener(\"click\", () => {\n closeMenu();\n root.getElementById(\"col-detail-delete\")!.click();\n });\n })();\n\n host._openColDetail = openColDetail;\n host._closeColDetail = closeColDetail;\n host._refreshCdvEmpty = refreshCdvEmpty;\n host._buildDocCard = buildDocCard;\n host._buildDocListView = buildDocListView;\n}\n","// Every API call of this package goes through @sinequa/atomic's own functions\n// (listContainers, post, fetchPrincipal…), which build their URL from\n// `globalConfig.backendUrl` on each call — so they follow the host's\n// setGlobalConfig() without this package knowing anything about it.\n//\n// The exceptions are the URLs the browser loads itself, which never reach\n// atomic's fetch stack: the preview rendition an <iframe src> points at\n// (views/doc-preview.ts), and the tus upload flow, which is driven by the\n// element's `upload-endpoint` attribute — so those URLs are built here\n// (views/upload-tracker.ts). It used to be resolved against\n// `window.location.href`, which silently sent a relative endpoint to the *host\n// page's* origin — wrong as soon as the front-end isn't served by the Sinequa\n// server. This module resolves it against the configured backend instead, so a\n// config-defined base URL applies to the uploads too.\n//\n// Status polling used to be resolved here as well, by deriving a path from the\n// upload endpoint. It no longer is: it goes through atomic's fetchUploadStatus() like every other call.\nimport { globalConfig } from \"@sinequa/atomic\";\n\n/**\n * The configured backend as an absolute base URL, or `undefined` when no\n * `backendUrl` is configured (same-origin host — atomic itself keeps its\n * endpoints relative in that case).\n */\nfunction backendBase(): string | undefined {\n const backendUrl = globalConfig.backendUrl;\n if (!backendUrl) return undefined;\n // Trailing slash so a relative endpoint resolves *under* backendUrl instead\n // of replacing its last path segment; any slash the host already wrote is\n // collapsed first. `backendUrl` may itself be relative ('/sinequa').\n return new URL(`${backendUrl.replace(/\\/+$/, \"\")}/`, window.location.href).href;\n}\n\n/**\n * Resolves a path that atomic does not fetch for us to an absolute URL: the\n * `upload-endpoint` attribute value, and the `documentCachedContentUrl` the\n * preview web service returns for an `<iframe src>` (views/doc-preview.ts).\n * Both are URLs the browser loads directly rather than passing through atomic's\n * own `get()`/`post()`, so neither picks up `backendUrl` on its own.\n *\n * - an absolute endpoint always wins (it is taken as-is);\n * - with a `backendUrl` configured, a root-relative endpoint\n * ('/api/v2/document-upload/ingest/file') resolves *under* it, so a backendUrl\n * carrying a path prefix ('https://host/sinequa') isn't bypassed;\n * - with no `backendUrl`, it resolves against the page — the historical\n * behavior, unchanged.\n */\nexport function resolveEndpointUrl(endpoint: string): URL {\n const base = backendBase();\n if (!base) return new URL(endpoint, window.location.href);\n return new URL(endpoint.replace(/^\\/+/, \"\"), base);\n}\n","// Migrated from lexiq-prototype collections/js/collection-doc-preview.js.\nimport { injectIcons } from \"../internal/icons\";\nimport { setText, t } from \"../internal/i18n\";\nimport { fetchPreview } from \"@sinequa/atomic\";\nimport { resolveEndpointUrl } from \"../internal/base-url\";\nimport type { CollectionDocument } from \"../store/collections-store\";\nimport type { CollectionsHost } from \"../internal/host-contract\";\n\n// What a search app falls back to when the app config names no query.\nconst DEFAULT_QUERY_NAME = \"_query\";\n\nexport interface Passage {\n page: number;\n text: string;\n}\n\n/* A chat/message \"reference document\" — distinct from a stored CollectionDocument.\n Opened via the host's public openDocumentPreview(docRef) API when previewing a\n document referenced from a chat message rather than one stored in a collection. */\nexport interface RefDocument {\n title: string;\n date: string;\n path: string;\n passages?: Passage[];\n}\n\n/* PLACEHOLDER — a canned document, not anything the user uploaded.\n Clicking a document in a collection no longer lands here: openDocPreview()\n fetches the real rendition (see showRendition below). What still renders these\n pages is openRefDocPreview(), the chat-reference path, because a RefDocument\n carries only title/date/path — no id to look a real document up by. It keeps\n the passages sidebar working against *something* until that path is wired too.\n TODO (ES-33405) — give RefDocument the document id its caller already knows,\n then delete PAGES, buildPages() and the 'passages' body mode outright. */\nconst PAGES: { content: string }[] = [\n {\n content: `<h1>World Health Organization — Cardiovascular Disease Report 2024</h1><p>Cardiovascular diseases (CVDs) are the leading cause of death globally, taking an estimated 17.9 million lives each year. CVDs are a group of disorders of the heart and blood vessels and include coronary heart disease, cerebrovascular disease, rheumatic heart disease and other conditions.</p><p>More than four out of five CVD deaths are due to heart attacks and strokes, and one third of these deaths occur prematurely in people under 70 years of age.</p><h2>Key Facts</h2><ul><li>CVDs are the number 1 cause of death globally, representing 32% of all global deaths.</li><li>An estimated 17.9 million people died from CVDs in 2019.</li><li>85% of all CVD deaths are due to heart attack and stroke.</li><li>Over three quarters of CVD deaths take place in low- and middle-income countries.</li></ul>`\n },\n {\n content: `<h2>1. Behavioural Risk Factors</h2><p>The most important behavioural risk factors of heart disease and stroke are unhealthy diet, physical inactivity, tobacco use and harmful use of alcohol. The effects of behavioural risk factors may show up in individuals as raised blood pressure, raised blood glucose, raised blood lipids, and overweight and obesity.</p><h3>1.1 Tobacco Use</h3><p>Smoking remains one of the most powerful risk factors for cardiovascular disease. Exposure to tobacco smoke — including secondhand smoke — significantly increases the risk of coronary artery disease and stroke.</p><h3>1.2 Physical Inactivity</h3><p>Insufficient physical activity is estimated to cause 6% of the burden of coronary heart disease and 7% of type 2 diabetes. Regular moderate-intensity physical activity reduces the risk of heart disease, stroke and type 2 diabetes.</p><ul><li>Adults should do at least 150–300 minutes of moderate aerobic physical activity per week.</li><li>Reducing sedentary behavior further lowers cardiovascular risk.</li></ul>`\n },\n {\n content: `<h2>2. Raised Blood Pressure</h2><p>Raised blood pressure (hypertension) is the leading risk factor for cardiovascular disease worldwide. High blood pressure greatly increases the risk of heart attack, stroke and kidney failure. The condition often has no symptoms and can go undetected for years.</p><p>Globally, an estimated 1.28 billion adults aged 30–79 years have hypertension, most living in low- and middle-income countries. Only 1 in 5 adults with hypertension have it under control.</p><h3>2.1 Cholesterol and Dyslipidaemia</h3><p>Elevated cholesterol levels increase the risk of heart disease and stroke. Lowering blood cholesterol with statins reduces the risk of heart attacks and deaths from CVD in people who are at high risk.</p><h3>2.2 Diabetes</h3><p>People with diabetes are 2–4 times more likely to develop cardiovascular disease. Poorly controlled blood glucose accelerates atherosclerosis and damages blood vessel walls.</p>`\n },\n {\n content: `<h2>3. Global and Regional Burden</h2><p>Low- and middle-income countries disproportionately bear the burden of cardiovascular disease. In these countries, cardiovascular diseases often occur in younger populations, leading to productive life years lost.</p><h3>3.1 Europe and Central Asia</h3><p>Eastern Europe continues to record some of the world's highest rates of cardiovascular mortality, particularly in men. Factors include high rates of tobacco use, excessive alcohol consumption and limited access to preventive care.</p><h3>3.2 Sub-Saharan Africa</h3><p>While infectious diseases remain dominant, the burden of non-communicable diseases including CVD is rising rapidly. Urbanization, dietary changes, and reduced physical activity are key drivers of this shift.</p><ul><li>Rheumatic heart disease is particularly prevalent in children and young adults in Sub-Saharan Africa.</li><li>Stroke mortality rates are among the highest globally in parts of West Africa.</li></ul>`\n },\n {\n content: `<h2>4. Prevention Approaches</h2><p>Many CVDs can be prevented by addressing behavioural risk factors such as tobacco use, unhealthy diet, obesity, physical inactivity and harmful use of alcohol using population-wide strategies.</p><h3>4.1 Population-Level Interventions</h3><p>Effective population-level policies include tobacco taxation and smoke-free legislation, food reformulation to reduce salt content, trans-fat elimination, and restrictions on marketing of unhealthy foods to children.</p><h3>4.2 Individual-Level Prevention</h3><p>For individuals at high cardiovascular risk, a combination of medication, counselling and lifestyle modification can significantly reduce the probability of heart attack and stroke. Essential medicines include aspirin, beta-blockers, ACE inhibitors and statins.</p>`\n },\n {\n content: `<h2>5. Health System Response</h2><p>Early detection and treatment of people with cardiovascular risk through primary health care programmes is essential to reduce morbidity and mortality from CVD. Strong health systems with equitable access to medicines, diagnostics and clinical services are the cornerstone of a comprehensive CVD response.</p><h3>5.1 Essential Medicines</h3><p>WHO's Model List of Essential Medicines includes medicines for acute and long-term management of CVD. These include anticoagulants, antihypertensives, thrombolytics, diuretics and lipid-lowering agents.</p><h3>5.2 Task Sharing</h3><p>Non-physician health workers can identify and manage patients with high cardiovascular risk in community settings, improving access in areas where physicians are scarce.</p>`\n },\n {\n content: `<h2>6. Cardiac Rehabilitation</h2><p>Cardiac rehabilitation is a medically supervised program designed to help improve the cardiovascular health of patients who have experienced a heart attack, heart failure, angioplasty or stenting, or heart surgery. Structured programmes reduce hospital readmissions and improve quality of life.</p><h3>6.1 Components of Rehabilitation</h3><p>Core components include medical evaluation and exercise testing, physical activity counselling, nutritional guidance, psychological support and smoking cessation programmes.</p><h3>6.2 Evidence Base</h3><p>Meta-analyses confirm that cardiac rehabilitation reduces cardiovascular mortality by approximately 25% and all-cause mortality by 13%. Despite the evidence, access to rehabilitation remains limited in low- and middle-income countries.</p>`\n },\n {\n content: `<h2>7. Digital Health and Innovation</h2><p>Digital health technologies are transforming cardiovascular care. Wearable devices, remote monitoring, artificial intelligence-based diagnostics and electronic health records offer new opportunities for earlier detection, personalised treatment and better adherence monitoring.</p><h3>7.1 Artificial Intelligence</h3><p>Machine learning algorithms have demonstrated capability to detect atrial fibrillation, predict adverse cardiovascular events and identify patients at risk from routine ECG data and retinal photographs.</p><h3>7.2 Telemedicine</h3><p>Remote consultation and monitoring have accelerated since the COVID-19 pandemic. Telemedicine platforms now support medication management, follow-up consultations and real-time blood pressure monitoring in home settings.</p>`\n },\n {\n content: `<h2>8. Policy Recommendations</h2><p>WHO recommends a comprehensive set of policy actions for governments to reduce the burden of cardiovascular disease. These span regulatory, fiscal, health system and community-level domains and are grounded in evidence from high-, middle- and low-income settings.</p><h3>8.1 Regulatory Measures</h3><p>Governments should eliminate industrially produced trans-fatty acids from the food supply and establish clear labelling requirements for saturated fat, sodium and added sugars.</p><h3>8.2 Tobacco and Alcohol Control</h3><p>Raising taxes on tobacco products to at least 75% of retail price is among the most cost-effective public health measures. Alcohol control measures including minimum unit pricing and advertising restrictions should be strengthened.</p>`\n },\n {\n content: `<h2>9. Conclusions and Future Directions</h2><p>Despite progress in some high-income countries, cardiovascular disease remains a leading cause of preventable death worldwide. Achieving global targets for reducing premature mortality from CVD by one third by 2030 requires sustained political commitment, scaled-up financing and multisectoral action.</p><h3>9.1 Research Priorities</h3><p>Key gaps in evidence include understanding heterogeneity of CVD risk across populations, optimal treatment strategies in low-resource settings, and long-term effectiveness of digital health interventions.</p><h3>9.2 Call to Action</h3><p>Governments, health systems, civil society, the private sector and individuals each have a role to play. Strengthening intersectoral collaboration and maintaining accountability through monitoring frameworks are essential to delivering on global commitments.</p>`\n }\n];\n\nexport function initDocPreview(host: CollectionsHost): void {\n const root = host.shadowRoot;\n\n const panel = root.getElementById(\"col-doc-preview\")!;\n const cdpHandle = root.getElementById(\"col-doc-resize-handle\")!;\n const closeBtn = root.getElementById(\"btn-cdp-close\")!;\n const pagesEl = root.getElementById(\"cdp-preview-pages\")!;\n const bodyEl = root.getElementById(\"cdp-preview-body\")!;\n const zoomInBtn = root.getElementById(\"cdp-zoom-in\") as HTMLButtonElement;\n const zoomOutBtn = root.getElementById(\"cdp-zoom-out\") as HTMLButtonElement;\n const pageInput = root.getElementById(\"cdp-page-current\") as HTMLInputElement;\n const pageTotalEl = root.getElementById(\"cdp-page-total\")!;\n const prevBtn = root.getElementById(\"cdp-prev-page\") as HTMLButtonElement;\n const nextBtn = root.getElementById(\"cdp-next-page\") as HTMLButtonElement;\n const pageNav = root.getElementById(\"cdp-page-nav\")!;\n const titleLink = root.getElementById(\"cdp-preview-link\") as HTMLAnchorElement;\n const passagesSidebar = root.getElementById(\"cdp-passages-sidebar\")!;\n const passagesList = root.getElementById(\"cdp-passages-list\")!;\n const passagesColBtn = root.getElementById(\"cdp-passages-collapse\")!;\n const passagesExpBtn = root.getElementById(\"cdp-passages-expand\")!;\n\n const ZOOM_STEP = 0.1;\n const ZOOM_MIN = 0.25;\n const ZOOM_MAX = 2.5;\n let currentZoom = 0.75;\n let activeEl: HTMLElement | null = null;\n let activeIdx = -1;\n let observer: IntersectionObserver | null = null;\n /* Guards against a slow request for a document the user has already clicked\n away from overwriting the body of the one now on screen. Every path that\n replaces the body takes a new token; a response whose token is stale is\n dropped. */\n let bodyToken = 0;\n\n function buildPages(): void {\n pagesEl.innerHTML = PAGES.map((pg, i) => {\n const num = i + 1;\n return `<div class=\"lq-dp-doc-preview__page\" data-page=\"${num}\">${pg.content}<span class=\"lq-dp-doc-preview__page-num\">${num} / ${PAGES.length}</span></div>`;\n }).join(\"\");\n pageTotalEl.textContent = String(PAGES.length);\n }\n\n function applyZoom(z: number): void {\n currentZoom = Math.max(ZOOM_MIN, Math.min(ZOOM_MAX, z));\n pagesEl.style.setProperty(\"zoom\", String(currentZoom));\n zoomOutBtn.disabled = currentZoom <= ZOOM_MIN;\n zoomInBtn.disabled = currentZoom >= ZOOM_MAX;\n }\n\n function scrollToPage(n: number): void {\n const pageEl = pagesEl.querySelector(`.lq-dp-doc-preview__page[data-page=\"${n}\"]`);\n if (pageEl) pageEl.scrollIntoView({ block: \"start\", behavior: \"smooth\" });\n }\n\n function setupObserver(): void {\n if (observer) observer.disconnect();\n const obs = new IntersectionObserver(\n entries => {\n let best: IntersectionObserverEntry | null = null;\n for (const e of entries) {\n if (e.isIntersecting && (!best || e.intersectionRatio > best.intersectionRatio)) best = e;\n }\n if (best) {\n const n = parseInt((best.target as HTMLElement).dataset[\"page\"] || \"\", 10);\n if (!isNaN(n)) {\n pageInput.value = String(n);\n prevBtn.disabled = n <= 1;\n nextBtn.disabled = n >= PAGES.length;\n }\n }\n },\n { root: bodyEl, threshold: [0.1, 0.3, 0.5] }\n );\n observer = obs;\n pagesEl.querySelectorAll(\".lq-dp-doc-preview__page\").forEach(p => obs.observe(p));\n }\n\n function fill(doc: CollectionDocument): void {\n (root.querySelector(\"#cdp-preview-link .oc-link-icon-left\") as HTMLElement).innerHTML = `<i data-icon=\"doc-${doc.type}\"></i>`;\n root.getElementById(\"cdp-preview-title\")!.textContent = doc.name;\n root.getElementById(\"cdp-preview-date\")!.textContent = doc.date;\n root.getElementById(\"cdp-preview-source\")!.textContent = doc.source || \"\";\n injectIcons(panel);\n }\n\n /* Empties the body and drops whatever was driving it, so the next caller\n starts from a clean panel. Invalidates in-flight requests on the way out. */\n function resetBody(): void {\n bodyToken++;\n observer?.disconnect();\n observer = null;\n pagesEl.replaceChildren();\n pagesEl.classList.remove(\"lq-dp-doc-preview__pages--frame\");\n pagesEl.style.removeProperty(\"zoom\");\n }\n\n /* A single translated line in place of the document — loading, or the reason\n there is nothing to show. */\n function showBodyMessage(key: string): void {\n const message = document.createElement(\"div\");\n message.className = \"lq-dp-doc-preview__message\";\n setText(message, key);\n pagesEl.classList.remove(\"lq-dp-doc-preview__pages--frame\");\n pagesEl.replaceChildren(message);\n pagesEl.style.removeProperty(\"zoom\");\n }\n\n /* The header title doubles as a link to the document itself. Without a URL it\n becomes plain text rather than the href=\"#\" it ships with, which looked\n clickable and went nowhere. */\n function setTitleLink(url?: string): void {\n if (url) {\n titleLink.href = url;\n titleLink.removeAttribute(\"aria-disabled\");\n } else {\n titleLink.removeAttribute(\"href\");\n titleLink.setAttribute(\"aria-disabled\", \"true\");\n }\n }\n\n /* Page navigation is meaningful only for the locally-built PAGES: the server\n rendition paginates itself inside its own frame, and driving it from here\n would mean talking the preview's postMessage protocol — which is what\n @sinequa/atomic-angular's PreviewService already does, and what this panel\n should defer to once it moves over (see the TODO on openDocPreview). */\n function setPageNavVisible(visible: boolean): void {\n pageNav.hidden = !visible;\n }\n\n /* Shows the real document: asks the preview web service for this id, exactly\n as a search application does, and frames the converted copy it points at. */\n async function showRendition(doc: CollectionDocument): Promise<void> {\n resetBody();\n const token = bodyToken;\n setPageNavVisible(false);\n setTitleLink(undefined);\n bodyEl.scrollTop = 0;\n showBodyMessage(\"preview.loading\");\n\n try {\n const data = await fetchPreview(doc._id, { name: host.getAttribute(\"query-name\") || DEFAULT_QUERY_NAME, text: \"\" });\n if (token !== bodyToken) return;\n\n if (!data.documentCachedContentUrl) {\n showBodyMessage(\"preview.unavailable\");\n return;\n }\n\n const frame = document.createElement(\"iframe\");\n frame.className = \"lq-dp-doc-preview__frame\";\n frame.title = doc.name;\n frame.src = resolveEndpointUrl(data.documentCachedContentUrl).href;\n pagesEl.classList.add(\"lq-dp-doc-preview__pages--frame\");\n pagesEl.replaceChildren(frame);\n applyZoom(currentZoom);\n setTitleLink(data.record?.url1 || data.record?.originalUrl);\n } catch {\n /* Expected on 11.14.0.2130: the listing hands out the upload-side id, not\n the one the index knows (`<jobId>/<fileName>`), so fetchPreview()\n answers 404/500 until the backend exposes the index id — see PORTED.md\n \"Known gaps\". The container API serves no document content itself.\n Say so in the panel instead of falling back to a stand-in document, which is exactly\n what made the placeholder look like working behaviour. */\n if (token === bodyToken) showBodyMessage(\"preview.unavailable\");\n }\n }\n\n /* TODO (ES-33405) — the app already owns a preview: <PreviewContent> renders\n it from SelectionStore, the way document-card.ts and inline-reference.ts\n open one. This panel should eventually stop rendering its own and just\n publish the clicked document's id for the host to pick up, which also gets\n the in-document search and passage highlighting this panel cannot do. That\n needs an Angular host, so it does not apply to a plain-JS consumer of the\n element; keeping the panel here is the interim. */\n function openDocPreview(doc: CollectionDocument, el: HTMLElement, idx: number): void {\n if (activeEl) activeEl.classList.remove(\"lq-doc-card--preview-active\", \"lq-doc-row--preview-active\");\n activeEl = el;\n activeIdx = idx;\n el.classList.add(el.classList.contains(\"lq-doc-row\") ? \"lq-doc-row--preview-active\" : \"lq-doc-card--preview-active\");\n fill(doc);\n void showRendition(doc);\n panel.classList.add(\"lq-detail-panel--open\");\n cdpHandle.classList.add(\"lq-resize-handle--visible\");\n }\n\n function closeDocPreview(): void {\n panel.classList.remove(\"lq-detail-panel--open\", \"lq-cdp--with-passages\");\n panel.style.width = \"\";\n cdpHandle.classList.remove(\"lq-resize-handle--visible\");\n passagesSidebar.hidden = true;\n passagesSidebar.classList.remove(\"lq-passages-sidebar--collapsed\");\n passagesList.innerHTML = \"\";\n clearHighlights();\n /* Drop the body rather than leave it behind the closed panel: it may hold an\n iframe still loading a document the user has dismissed. */\n resetBody();\n setPageNavVisible(true);\n if (activeEl) {\n activeEl.classList.remove(\"lq-doc-card--preview-active\", \"lq-doc-row--preview-active\");\n activeEl = null;\n activeIdx = -1;\n }\n }\n\n /* Called by the grid↔list toggle to re-attach activeEl to the new DOM element */\n function syncActiveEl(): void {\n if (activeIdx === -1 || !panel.classList.contains(\"lq-detail-panel--open\")) return;\n if (host._cdvCurrentView === \"grid\") {\n const cards = [...root.getElementById(\"col-detail-grid\")!.querySelectorAll(\".lq-doc-card\")] as HTMLElement[];\n if (cards[activeIdx]) {\n activeEl = cards[activeIdx];\n activeEl.classList.add(\"lq-doc-card--preview-active\");\n }\n } else {\n const rows = [...root.getElementById(\"col-detail-list\")!.querySelectorAll(\".lq-doc-row\")] as HTMLElement[];\n if (rows[activeIdx]) {\n activeEl = rows[activeIdx];\n activeEl.classList.add(\"lq-doc-row--preview-active\");\n }\n }\n }\n\n zoomInBtn.addEventListener(\"click\", () => applyZoom(currentZoom + ZOOM_STEP));\n zoomOutBtn.addEventListener(\"click\", () => applyZoom(currentZoom - ZOOM_STEP));\n\n prevBtn.addEventListener(\"click\", () => {\n const n = Math.max(1, parseInt(pageInput.value, 10) - 1);\n scrollToPage(n);\n });\n nextBtn.addEventListener(\"click\", () => {\n const n = Math.min(PAGES.length, parseInt(pageInput.value, 10) + 1);\n scrollToPage(n);\n });\n pageInput.addEventListener(\"change\", () => {\n const n = Math.max(1, Math.min(PAGES.length, parseInt(pageInput.value, 10) || 1));\n pageInput.value = String(n);\n scrollToPage(n);\n });\n\n /* ── Passages sidebar helpers ── */\n\n function clearHighlights(): void {\n pagesEl.querySelectorAll(\"mark.lq-passage-highlight\").forEach(function (mark) {\n const text = document.createTextNode(mark.textContent || \"\");\n mark.replaceWith(text);\n if (text.parentNode) text.parentNode.normalize();\n });\n }\n\n function highlightPassageText(passage: Passage): void {\n clearHighlights();\n const pageEl = pagesEl.querySelector(`.lq-dp-doc-preview__page[data-page=\"${passage.page}\"]`);\n if (!pageEl) return;\n\n const searchPhrase = passage.text.split(/\\s+/).slice(0, 5).join(\" \");\n let highlighted = false;\n\n const walker = document.createTreeWalker(pageEl, NodeFilter.SHOW_TEXT, null);\n let node: Node | null;\n while ((node = walker.nextNode()) && !highlighted) {\n const nodeText = node.textContent || \"\";\n const idx = nodeText.indexOf(searchPhrase);\n if (idx !== -1) {\n try {\n const range = document.createRange();\n range.setStart(node, idx);\n range.setEnd(node, idx + searchPhrase.length);\n const mark = document.createElement(\"mark\");\n mark.className = \"lq-passage-highlight\";\n range.surroundContents(mark);\n highlighted = true;\n } catch {\n /* range crosses element boundary — skip */\n }\n }\n }\n\n if (!highlighted) {\n const firstP = pageEl.querySelector(\"p, li\");\n if (firstP) {\n const mark = document.createElement(\"mark\");\n mark.className = \"lq-passage-highlight\";\n mark.innerHTML = firstP.innerHTML;\n firstP.innerHTML = \"\";\n firstP.appendChild(mark);\n }\n }\n\n setTimeout(function () {\n const hl = pageEl.querySelector(\".lq-passage-highlight\");\n if (hl) hl.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }, 350);\n }\n\n function buildPassages(passages: Passage[]): void {\n passagesList.innerHTML = \"\";\n passages.forEach(function (p, i) {\n const item = document.createElement(\"button\");\n item.className = \"oc-list-item oc-list-item-content oc-list-item-nav lq-passages-sidebar__item\";\n if (i === 0) item.classList.add(\"oc-list-item-selected\");\n const textBlock = document.createElement(\"div\");\n textBlock.className = \"oc-list-item-text-block\";\n const textEl = document.createElement(\"span\");\n textEl.className = \"oc-list-item-text\";\n textEl.textContent = p.text;\n const pageEl = document.createElement(\"span\");\n pageEl.className = \"oc-list-item-subtext\";\n setText(pageEl, \"preview.pageNumber\", { page: p.page });\n textBlock.appendChild(textEl);\n textBlock.appendChild(pageEl);\n item.appendChild(textBlock);\n item.addEventListener(\"click\", function () {\n passagesList.querySelectorAll(\".lq-passages-sidebar__item\").forEach(function (el) {\n el.classList.remove(\"oc-list-item-selected\");\n });\n item.classList.add(\"oc-list-item-selected\");\n scrollToPage(p.page);\n highlightPassageText(p);\n });\n passagesList.appendChild(item);\n });\n }\n\n function openRefDocPreview(doc: RefDocument): void {\n (root.querySelector(\"#cdp-preview-link .oc-link-icon-left\") as HTMLElement).innerHTML = '<i data-icon=\"file-pdf\"></i>';\n root.getElementById(\"cdp-preview-title\")!.textContent = doc.title;\n root.getElementById(\"cdp-preview-date\")!.textContent = doc.date;\n root.getElementById(\"cdp-preview-source\")!.textContent = doc.path;\n injectIcons(panel);\n\n /* Unconditional, where this used to build only into an empty body: the panel\n is shared with openDocPreview(), so what is in there may be a rendition of\n an unrelated document. See the PLACEHOLDER note on PAGES — these are not\n this document's pages either. */\n resetBody();\n setTitleLink(undefined);\n buildPages();\n applyZoom(0.75);\n setupObserver();\n setPageNavVisible(true);\n bodyEl.scrollTop = 0;\n pageInput.value = \"1\";\n prevBtn.disabled = true;\n nextBtn.disabled = PAGES.length <= 1;\n\n buildPassages(doc.passages || []);\n passagesSidebar.classList.remove(\"lq-passages-sidebar--collapsed\");\n passagesSidebar.hidden = false;\n injectIcons(passagesSidebar);\n\n panel.classList.add(\"lq-detail-panel--open\", \"lq-cdp--with-passages\");\n cdpHandle.classList.add(\"lq-resize-handle--visible\");\n\n if (doc.passages && doc.passages.length > 0) {\n setTimeout(function () {\n scrollToPage(doc.passages![0].page);\n highlightPassageText(doc.passages![0]);\n }, 50);\n }\n }\n\n passagesColBtn.addEventListener(\"click\", function () {\n passagesSidebar.classList.add(\"lq-passages-sidebar--collapsed\");\n injectIcons(passagesSidebar);\n });\n passagesExpBtn.addEventListener(\"click\", function () {\n passagesSidebar.classList.remove(\"lq-passages-sidebar--collapsed\");\n injectIcons(passagesSidebar);\n });\n\n host._openRefDocPreview = openRefDocPreview;\n host._closeColDocPreview = closeDocPreview;\n host._syncColDocPreviewView = syncActiveEl;\n closeBtn.addEventListener(\"click\", closeDocPreview);\n\n /* \"Ask follow-up\" — was a direct call into the chat's compose area\n (_setFollowupChip/showReplyOptions/mainInput.focus()); a generic component\n cannot reach into a host chat UI, so this becomes an event instead. */\n root.getElementById(\"btn-cdp-ask-agent\")!.addEventListener(\"click\", () => {\n const iconEl = root.querySelector(\"#cdp-preview-link .oc-link-icon-left i\");\n const titleEl = root.getElementById(\"cdp-preview-title\");\n const iconName = iconEl ? iconEl.getAttribute(\"data-icon\") || \"file-search-reg\" : \"file-search-reg\";\n const title = titleEl ? (titleEl.textContent || \"\").trim() : \"\";\n host.dispatchEvent(\n new CustomEvent(\"lexiq-collections:ask-followup\", {\n bubbles: true,\n composed: true,\n detail: {\n iconName,\n title,\n // Localized here rather than by the host: these travel in the event\n // payload straight into the host's compose area as display text.\n placeholder: t(\"preview.askFollowUpPlaceholder\"),\n suggestions: [t(\"preview.suggestionSummarize\"), t(\"preview.suggestionKeyPoints\"), t(\"preview.suggestionActionItems\")]\n }\n })\n );\n });\n\n /* ── Dedicated resize handle for this panel (left edge) ── */\n let cdpResizing = false,\n cdpStartX = 0,\n cdpStartW = 0;\n cdpHandle.addEventListener(\"mousedown\", e => {\n cdpResizing = true;\n cdpStartX = e.clientX;\n cdpStartW = panel.getBoundingClientRect().width;\n panel.style.transition = \"none\";\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n e.preventDefault();\n });\n document.addEventListener(\"mousemove\", e => {\n if (!cdpResizing) return;\n const mainW = host.getBoundingClientRect().width;\n const available = mainW - 32 - 12; // padding + handle width\n const delta = cdpStartX - e.clientX; // drag left = expand (handle is on left edge)\n const newW = Math.min(Math.max(cdpStartW + delta, 280), available - 360);\n panel.style.width = newW + \"px\";\n });\n document.addEventListener(\"mouseup\", () => {\n if (!cdpResizing) return;\n cdpResizing = false;\n panel.style.transition = \"\";\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n });\n\n root.getElementById(\"col-detail-grid\")!.addEventListener(\"click\", e => {\n const target = e.target as HTMLElement;\n const card = target.closest(\".lq-doc-card\") as HTMLElement | null;\n if (!card) return;\n if (target.closest(\".lq-doc-card__btn-del\") || target.closest(\".lq-doc-card__checkbox\")) return;\n if ((root.getElementById(\"col-detail-grid\") as HTMLElement).classList.contains(\"lq-cdv-grid--selecting\")) return;\n const cards = [...root.getElementById(\"col-detail-grid\")!.querySelectorAll(\".lq-doc-card\")];\n const idx = cards.indexOf(card);\n if (idx === -1 || !host._currentDocs[idx]) return;\n if (activeEl === card) {\n closeDocPreview();\n return;\n }\n openDocPreview(host._currentDocs[idx], card, idx);\n });\n\n root.getElementById(\"col-detail-list\")!.addEventListener(\"click\", e => {\n const target = e.target as HTMLElement;\n const row = target.closest(\".lq-doc-row\") as HTMLElement | null;\n if (!row) return;\n if (target.closest(\".lq-doc-card__btn-del\") || target.closest(\".lq-doc-row__cb\")) return;\n if ((root.getElementById(\"col-detail-list\") as HTMLElement).classList.contains(\"lq-cdv-list--selecting\")) return;\n const rows = [...root.getElementById(\"col-detail-list\")!.querySelectorAll(\".lq-doc-row\")];\n const idx = rows.indexOf(row);\n if (idx === -1 || !host._currentDocs[idx]) return;\n if (activeEl === row) {\n closeDocPreview();\n return;\n }\n openDocPreview(host._currentDocs[idx], row, idx);\n });\n}\n","// Migrated from lexiq-prototype collections/js/collection-share.js, then\n// rewritten for ES-32697/32687: real security.principal search instead of a\n// static mock user/group list, and the container's actual creator/owner/\n// reader model instead of a made-up view/edit/owner permission scheme.\n//\n// The search box + staged chips + Owner/Reader selector are no longer built\n// here: they are the shared control in internal/principal-picker.ts, which the\n// add/edit collection modal drives too (ES-33405). What stays here is the\n// access list — the members already on the container — and the immediate\n// role/remove writes it performs.\nimport { injectIcons } from \"../internal/icons\";\nimport { escapeHtml, setButtonBusy, showInlineError, clearInlineError, openConfirmModal, closeConfirmModal } from \"../internal/dom-utils\";\nimport { errorMessageFor } from \"../internal/error-messages\";\nimport { i18nParams, setPluralText, t } from \"../internal/i18n\";\nimport { avatarHtml, createPrincipalPicker, ROLE_KEYS } from \"../internal/principal-picker\";\nimport type { AssignableRole } from \"../internal/principal-picker\";\nimport { whenCurrentUser } from \"../internal/current-user\";\nimport { ensurePrincipalsResolved, resolvePrincipal } from \"../internal/principal-name-cache\";\nimport { store } from \"../store/collections-store\";\nimport type { Collection } from \"../store/collections-store\";\nimport type { CollectionsHost } from \"../internal/host-contract\";\n\n// One row in the access list — every owner/reader (+ the creator) currently\n// assigned to the container. `resolved: false` means the id isn't in the\n// principal-name-cache (see internal/principal-name-cache.ts for why that can\n// happen and what the UI does about it).\ninterface MemberRow {\n id: string;\n name: string;\n /** Secondary line under the name, when the directory gave one. */\n email?: string;\n isGroup: boolean;\n /** True for the logged-in user's own row, which renders a \"(you)\" marker and no role menu. */\n isSelf: boolean;\n role: \"creator\" | AssignableRole;\n resolved: boolean;\n}\n\nexport function initShareModal(host: CollectionsHost): void {\n const root = host.shadowRoot;\n\n const backdrop = root.getElementById(\"col-share-backdrop\")!;\n const modal = root.getElementById(\"col-share-modal\")!;\n const nameEl = root.getElementById(\"col-share-col-name\")!;\n const accessList = root.getElementById(\"col-share-access-list\")!;\n const accessCount = root.getElementById(\"col-share-access-count\")!;\n const memberPortal = root.getElementById(\"col-share-member-portal\")!;\n const addBtn = root.getElementById(\"btn-col-share-invite\") as HTMLButtonElement;\n const errorEl = root.getElementById(\"col-share-error\")!;\n\n let currentCol: Collection | null = null;\n let members: MemberRow[] = [];\n let confirmRemoveId: string | null = null;\n let portalMemberId: string | null = null;\n let adding = false; // guards btn-col-share-invite (\"Add\")\n let memberActionBusy = false; // guards the whole access list during an immediate role/remove PUT\n\n // Staged users live in the shared picker, not here. `excludeIds` keeps\n // people who already have access out of the results, and the chips carry no\n // role badge: everything staged takes the selector's role, as before.\n const picker = createPrincipalPicker({\n elements: {\n tagWrap: root.getElementById(\"col-share-tag-wrap\")!,\n input: root.getElementById(\"col-share-search-input\") as HTMLInputElement,\n dropdown: root.getElementById(\"col-share-dropdown\")!,\n roleWrap: root.querySelector(\"#col-share-tag-wrap .lq-col-share-perm-wrap\") as HTMLElement,\n roleBtn: root.getElementById(\"col-share-perm-btn\")!,\n roleLabel: root.getElementById(\"col-share-perm-label\")!,\n roleDropdown: root.getElementById(\"col-share-perm-dropdown\")!\n },\n placeholderKey: \"share.searchPlaceholder\",\n ariaLabelKey: \"share.searchUsers\",\n excludeIds: () => members.map(m => m.id),\n onChange: () => {\n addBtn.disabled = !picker.getEntries().length;\n }\n });\n\n function resolveMember(id: string, role: MemberRow[\"role\"]): MemberRow {\n const { name, email, isGroup, resolved, isSelf } = resolvePrincipal(id);\n return { id, name, email, isGroup, role, resolved, isSelf };\n }\n\n // One row per distinct id, highest role first. The creator is normally also\n // in `owners` (every container created since ES-33405 puts them there), so\n // without the dedupe they'd show up twice — once as the immutable creator\n // row and once as an ordinary owner.\n function buildMembersFrom(col: Collection): MemberRow[] {\n const seen = new Set<string>();\n const rows: MemberRow[] = [];\n const add = (id: string, role: MemberRow[\"role\"]): void => {\n if (seen.has(id)) return;\n seen.add(id);\n rows.push(resolveMember(id, role));\n };\n add(col.creatorId, \"creator\");\n col.ownerIds.forEach(id => add(id, \"owner\"));\n col.readerIds.forEach(id => add(id, \"reader\"));\n // Creator pinned to the top, everyone else by name — the ordering\n // agent-builder's useEditAccessList() sorts by.\n return rows.sort((a, b) => {\n const creatorFirst = Number(b.role === \"creator\") - Number(a.role === \"creator\");\n return creatorFirst !== 0 ? creatorFirst : a.name.localeCompare(b.name);\n });\n }\n\n function closeAllMemberDropdowns(): void {\n memberPortal.hidden = true;\n if (portalMemberId) {\n const btn = accessList.querySelector(`[data-member-id=\"${portalMemberId}\"].lq-col-share-member-perm-btn`);\n if (btn) btn.setAttribute(\"aria-expanded\", \"false\");\n portalMemberId = null;\n }\n }\n\n function renderAccessList(): void {\n setPluralText(accessCount, \"share.accessCount\", members.length);\n accessList.classList.toggle(\"lq-col-share-access-list--busy\", memberActionBusy);\n accessList.innerHTML = members\n .map(m => {\n if (m.id === confirmRemoveId) {\n return `<div class=\"lq-col-share-confirm-row\">\n <span class=\"lq-col-share-confirm-text\" data-i18n=\"share.confirmRemove\" data-i18n-params=\"${i18nParams({ name: m.name })}\">${escapeHtml(t(\"share.confirmRemove\", { name: m.name }))}</span>\n <div class=\"lq-col-share-confirm-actions\">\n <button class=\"lq-btn lq-btn--sm lq-btn--tertiary-neutral\" data-action=\"cancel-remove\" data-member-id=\"${m.id}\" data-i18n=\"common.cancel\">${escapeHtml(t(\"common.cancel\"))}</button>\n <button class=\"lq-btn lq-btn--sm lq-btn--secondary-danger\" data-action=\"confirm-remove\" data-member-id=\"${m.id}\" data-i18n=\"common.remove\">${escapeHtml(t(\"common.remove\"))}</button>\n </div>\n </div>`;\n }\n\n const nameClass = m.resolved ? \"lq-col-share-member-name\" : \"lq-col-share-member-name lq-col-share-member-name--pending\";\n const youMarker = m.isSelf ? ` <span class=\"lq-col-share-member-you\" data-i18n=\"share.you\">${escapeHtml(t(\"share.you\"))}</span>` : \"\";\n const nameText =\n (m.resolved\n ? escapeHtml(m.name)\n : `<span data-i18n-attr=\"title:share.unresolvedName\" title=\"${escapeHtml(t(\"share.unresolvedName\"))}\">${escapeHtml(m.name)}</span>`) + youMarker;\n\n // Two rows never get a role menu: the creator (immutable by the API)\n // and your own (an owner who demotes or removes themselves loses the\n // container with no way back — ES-33405).\n const roleKey = m.role === \"creator\" ? \"share.owner\" : ROLE_KEYS[m.role];\n const roleIcon = m.role === \"creator\" || m.role === \"owner\" ? \"crown\" : \"eye\";\n const permEl =\n m.role === \"creator\" || m.isSelf\n ? `<span class=\"lq-col-share-member-perm-label\"><i data-icon=\"${roleIcon}\"></i> <span data-i18n=\"${roleKey}\">${escapeHtml(t(roleKey))}</span></span>`\n : `<div class=\"lq-col-share-member-perm-wrap\">\n <button type=\"button\" class=\"lq-btn lq-btn--sm lq-btn--tertiary-neutral lq-col-share-member-perm-btn\" data-member-id=\"${m.id}\" aria-expanded=\"false\" aria-haspopup=\"listbox\">\n <i data-icon=\"${roleIcon}\"></i> <span data-i18n=\"${ROLE_KEYS[m.role]}\">${escapeHtml(t(ROLE_KEYS[m.role]))}</span> <i data-icon=\"chevron-down\"></i>\n </button>\n </div>`;\n\n return `<div class=\"lq-col-share-member-row\">\n ${avatarHtml(m.name, m.isGroup)}\n <div class=\"lq-col-share-member-info\">\n <span class=\"${nameClass}\">${nameText}</span>\n ${m.email ? `<span class=\"lq-col-share-member-email\">${escapeHtml(m.email)}</span>` : \"\"}\n </div>\n ${permEl}\n </div>`;\n })\n .join(\"\");\n injectIcons(accessList);\n }\n\n function computeAccessArrays(overrideId?: string, overrideRole?: AssignableRole | \"remove\"): { owners: string[]; readers: string[] } {\n const owners: string[] = [];\n const readers: string[] = [];\n members.forEach(m => {\n if (m.role === \"creator\") return;\n const role = m.id === overrideId ? overrideRole : m.role;\n if (role === \"owner\") owners.push(m.id);\n else if (role === \"reader\") readers.push(m.id);\n });\n return { owners, readers };\n }\n\n async function applyMemberChange(memberId: string, newRole: AssignableRole | \"remove\"): Promise<void> {\n if (!currentCol || memberActionBusy) return;\n memberActionBusy = true;\n clearInlineError(errorEl);\n renderAccessList();\n const { owners, readers } = computeAccessArrays(memberId, newRole);\n try {\n const updated = await store.update(currentCol.id, { owners, readers });\n if (!updated) return;\n currentCol = updated;\n host._currentCol = updated;\n members = buildMembersFrom(updated);\n confirmRemoveId = null;\n } catch (err) {\n showInlineError(errorEl, errorMessageFor(err));\n } finally {\n memberActionBusy = false;\n renderAccessList();\n }\n }\n\n function openColShareModal(col: Collection): void {\n currentCol = col;\n members = buildMembersFrom(col);\n confirmRemoveId = null;\n portalMemberId = null;\n memberActionBusy = false;\n memberPortal.hidden = true;\n picker.reset();\n addBtn.disabled = true;\n renderAccessList();\n // Two things can turn up after the first paint: the current user's\n // identity (which decides whose row has no role menu) and the names behind\n // ids the cache had never seen. Both re-render, if this is still the\n // collection on screen.\n void whenCurrentUser().then(() => {\n if (currentCol === col) renderAccessList();\n });\n void ensurePrincipalsResolved(members.map(m => m.id)).then(() => {\n if (currentCol !== col) return;\n members = buildMembersFrom(col);\n renderAccessList();\n });\n clearInlineError(errorEl);\n nameEl.textContent = col.name;\n openConfirmModal(root, \"col-share-backdrop\", \"col-share-modal\", handleShareModalRequestClose);\n setTimeout(() => picker.focus(), 200);\n }\n\n function closeColShareModal(): void {\n closeConfirmModal(root, \"col-share-backdrop\", \"col-share-modal\");\n }\n\n // Escape closes the innermost open thing first — a member-portal dropdown,\n // then the permission dropdown, and only the whole modal if neither is\n // open. Passed to openConfirmModal() as its onRequestClose so Escape goes\n // through the exact same layered logic Escape always has here.\n function handleShareModalRequestClose(): void {\n if (!memberPortal.hidden) {\n closeAllMemberDropdowns();\n return;\n }\n if (picker.hasOpenDropdown()) {\n picker.closeDropdowns();\n return;\n }\n closeColShareModal();\n }\n\n root.getElementById(\"btn-col-share-close\")!.addEventListener(\"click\", closeColShareModal);\n addBtn.addEventListener(\"click\", async () => {\n const staged = picker.getEntries();\n if (!staged.length || !currentCol || adding) return;\n adding = true;\n clearInlineError(errorEl);\n setButtonBusy(addBtn, true, t(\"share.adding\"));\n const newOwnerIds = [...currentCol.ownerIds, ...staged.filter(s => s.role === \"owner\").map(s => s.id)];\n const newReaderIds = [...currentCol.readerIds, ...staged.filter(s => s.role === \"reader\").map(s => s.id)];\n try {\n const updated = await store.update(currentCol.id, { owners: newOwnerIds, readers: newReaderIds });\n if (!updated) return;\n currentCol = updated;\n host._currentCol = updated;\n members = buildMembersFrom(updated);\n picker.reset();\n addBtn.disabled = true;\n renderAccessList();\n } catch (err) {\n showInlineError(errorEl, errorMessageFor(err));\n } finally {\n adding = false;\n setButtonBusy(addBtn, false);\n }\n });\n backdrop.addEventListener(\"click\", closeColShareModal);\n\n document.addEventListener(\"click\", e => {\n if (modal.hidden) return;\n const path = e.composedPath();\n const wrap = root.getElementById(\"col-share-tag-wrap\")!.closest(\".lq-col-share-search-wrap\");\n if (!wrap || !path.includes(wrap)) picker.closeDropdowns();\n // `e.target` is unusable here — since this listener sits outside the\n // shadow root, the target gets retargeted to the <lexiq-collections>\n // host itself (per the Shadow DOM spec), so `e.target.closest(...)`\n // never matches anything inside the shadow tree. Walk the composed path\n // instead, same as the `wrap`/`memberPortal` checks above — this was the\n // actual bug: the row's perm-button click (which just opened the\n // portal) always fell through to closeAllMemberDropdowns() right after,\n // since the \"was this the button that opened it\" guard never held.\n const clickedPermBtn = path.some(el => el instanceof Element && el.classList.contains(\"lq-col-share-member-perm-btn\"));\n if (!memberPortal.hidden && !path.includes(memberPortal) && !clickedPermBtn) {\n closeAllMemberDropdowns();\n }\n });\n\n /* Per-member role portal — Owner/Reader change immediately PUTs; Remove\n shows an inline confirm row in the access list first (ES-32687). */\n memberPortal.addEventListener(\"mousedown\", e => {\n const actionBtn = (e.target as HTMLElement).closest(\"[data-action]\") as HTMLElement | null;\n if (!actionBtn) return;\n e.preventDefault();\n const action = actionBtn.dataset[\"action\"];\n const mid = actionBtn.dataset[\"memberId\"]!;\n actionBtn.classList.add(\"oc-list-item-pressed\");\n setTimeout(() => {\n actionBtn.classList.remove(\"oc-list-item-pressed\");\n closeAllMemberDropdowns();\n if (action === \"role\") {\n void applyMemberChange(mid, actionBtn.dataset[\"role\"] as AssignableRole);\n } else if (action === \"remove\") {\n confirmRemoveId = mid;\n renderAccessList();\n }\n }, 150);\n });\n\n accessList.addEventListener(\"mousedown\", e => {\n if (memberActionBusy) return;\n\n const rowPermBtn = (e.target as HTMLElement).closest(\".lq-col-share-member-perm-btn\") as HTMLElement | null;\n if (rowPermBtn) {\n e.preventDefault();\n const mid = rowPermBtn.dataset[\"memberId\"]!;\n const isOpen = portalMemberId === mid && !memberPortal.hidden;\n closeAllMemberDropdowns();\n picker.closeDropdowns();\n if (!isOpen) {\n memberPortal.innerHTML = `\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md\" data-action=\"role\" data-role=\"owner\" data-member-id=\"${mid}\" role=\"option\" type=\"button\">\n <div class=\"oc-list-item-left\"><i data-icon=\"crown\"></i><div class=\"oc-list-item-text-block\"><span class=\"oc-list-item-text\" data-i18n=\"share.owner\">${escapeHtml(t(\"share.owner\"))}</span></div></div>\n </button>\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md\" data-action=\"role\" data-role=\"reader\" data-member-id=\"${mid}\" role=\"option\" type=\"button\">\n <div class=\"oc-list-item-left\"><i data-icon=\"eye\"></i><div class=\"oc-list-item-text-block\"><span class=\"oc-list-item-text\" data-i18n=\"share.reader\">${escapeHtml(t(\"share.reader\"))}</span></div></div>\n </button>\n <hr style=\"border:none;border-top:1px solid var(--stroke-neutral-base);margin:var(--space-3xs) 0\">\n <button class=\"oc-list-item oc-list-item-menu oc-list-item-md lq-list-item--danger\" data-action=\"remove\" data-member-id=\"${mid}\" role=\"option\" type=\"button\">\n <div class=\"oc-list-item-left\"><div class=\"oc-list-item-text-block\"><span class=\"oc-list-item-text\" data-i18n=\"common.remove\">${escapeHtml(t(\"common.remove\"))}</span></div></div>\n </button>`;\n /* Position portal below the button, right-aligned, in modal coordinates */\n const btnRect = rowPermBtn.getBoundingClientRect();\n const modalRect = modal.getBoundingClientRect();\n memberPortal.style.top = btnRect.bottom - modalRect.top + 4 + \"px\";\n memberPortal.style.right = modalRect.right - btnRect.right + \"px\";\n memberPortal.hidden = false;\n portalMemberId = mid;\n rowPermBtn.setAttribute(\"aria-expanded\", \"true\");\n injectIcons(memberPortal);\n }\n return;\n }\n\n const actionBtn = (e.target as HTMLElement).closest(\"[data-action]\") as HTMLElement | null;\n if (!actionBtn) return;\n e.preventDefault();\n const action = actionBtn.dataset[\"action\"];\n const mid = actionBtn.dataset[\"memberId\"]!;\n if (action === \"confirm-remove\") {\n void applyMemberChange(mid, \"remove\");\n } else if (action === \"cancel-remove\") {\n confirmRemoveId = null;\n renderAccessList();\n }\n });\n\n root.getElementById(\"col-detail-share\")!.addEventListener(\"click\", () => {\n if (host._currentCol) openColShareModal(host._currentCol);\n });\n}\n","// Helpers over @sinequa/atomic's fetchUploadStatus() response, which groups\n// jobs by container.\nimport type { UploadJobStatus, UploadStatusResponse } from \"@sinequa/atomic\";\n\n/** True once a job can no longer change — nothing left to poll for. */\nexport function isJobTerminal(job: UploadJobStatus): boolean {\n if (job.uploadStatus === \"upload_interrupted\") return true;\n return job.indexingStatus === \"complete\" || job.indexingStatus === \"failed\" || job.indexingStatus === \"interrupted\";\n}\n\n/** Flattens the grouped response into a plain job list. */\nexport function allJobs(res: UploadStatusResponse): UploadJobStatus[] {\n return (res.containers ?? []).flatMap(c => c.jobs ?? []);\n}\n","// One cancellable polling loop, shared by the whole element.\n//\n// It replaces views/upload-tracker.ts's former _pollIndexingStatus(): a\n// setTimeout chain PER DOCUMENT, with no handle to cancel, no backoff, and a\n// .catch that re-armed itself forever — so a disconnected element kept hitting\n// the server until the tab closed (flagged in PORTED.md).\n//\n// The loop paces itself from what a tick reports:\n// - `pending: false` -> nothing left to watch, stop (start() revives it);\n// - `changed: true` -> something moved, keep the base interval;\n// - `changed: false` -> idle, widen the delay geometrically up to maxIntervalMs\n// so a job the server never resolves costs a request a minute, not one a second.\n// A thrown tick backs off the same way and does NOT stop the loop: a network\n// blip should not silently end the tracking.\n\nexport interface PollResult {\n /** Something is still being watched — keep polling. */\n pending: boolean;\n /** This tick observed a change; resets the idle backoff. */\n changed?: boolean;\n}\n\nexport interface StatusPollerOptions {\n /** Delay between ticks while things are moving (default 1500 ms). */\n intervalMs?: number;\n /** Ceiling the idle/failure backoff climbs to (default 30000 ms). */\n maxIntervalMs?: number;\n /** Runs one poll. `signal` aborts when the poller is stopped mid-flight. */\n tick(signal: AbortSignal): Promise<PollResult>;\n}\n\nexport class StatusPoller {\n private readonly _intervalMs: number;\n private readonly _maxIntervalMs: number;\n private readonly _tick: (signal: AbortSignal) => Promise<PollResult>;\n\n private _timer: ReturnType<typeof setTimeout> | null = null;\n private _abort: AbortController | null = null;\n private _running = false;\n private _idleSteps = 0;\n\n constructor(options: StatusPollerOptions) {\n this._intervalMs = options.intervalMs ?? 1500;\n this._maxIntervalMs = options.maxIntervalMs ?? 30000;\n this._tick = options.tick;\n }\n\n get running(): boolean {\n return this._running;\n }\n\n /** Idempotent: calling it while already polling does nothing. */\n start(): void {\n if (this._running) return;\n this._running = true;\n this._idleSteps = 0;\n this._schedule(0);\n }\n\n /** Idempotent, and leaves the poller restartable — see the element's disconnectedCallback. */\n stop(): void {\n this._running = false;\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n this._abort?.abort();\n this._abort = null;\n }\n\n private _schedule(delay: number): void {\n if (!this._running) return;\n this._timer = setTimeout(() => {\n this._timer = null;\n void this._run();\n }, delay);\n }\n\n private _backoffDelay(): number {\n return Math.min(this._intervalMs * 2 ** this._idleSteps, this._maxIntervalMs);\n }\n\n private async _run(): Promise<void> {\n if (!this._running) return;\n const controller = new AbortController();\n this._abort = controller;\n try {\n const result = await this._tick(controller.signal);\n if (!this._running) return;\n if (!result.pending) {\n this.stop();\n return;\n }\n if (result.changed) this._idleSteps = 0;\n else this._idleSteps++;\n this._schedule(result.changed ? this._intervalMs : this._backoffDelay());\n } catch {\n // An abort is a deliberate stop, not a failure — nothing to re-arm.\n if (controller.signal.aborted || !this._running) return;\n this._idleSteps++;\n this._schedule(this._backoffDelay());\n } finally {\n if (this._abort === controller) this._abort = null;\n }\n }\n}\n","// Silent, non-navigating attempt to make the session usable again after a 401.\n//\n// Why this exists: an upload that outlives a connection drop comes back to a\n// server that has since forgotten it. tus keeps retrying (see\n// UPLOAD_RETRY_DELAYS in views/upload-tracker.ts) but every attempt carries the\n// stale CSRF token it was given at creation time, so every attempt is a 401 —\n// the retry budget burns down without a single byte moving. The status poll\n// fails the same way at the same moment, for the same reason.\n//\n// Recovering means getting a fresh token into storage; atomic's createHeaders()\n// reads it per request, so tus's onBeforeRequest picks it up on the very next\n// attempt with nothing else to do.\nimport { tryAutoAuthentication } from \"@sinequa/atomic\";\n\nlet _inFlight: Promise<boolean> | null = null;\n\n/**\n * Re-establishes the session without leaving the page, and reports whether it\n * worked.\n *\n * Deliberately `tryAutoAuthentication()` and nothing else:\n *\n * - `hasSession()` is the wrong probe. It answers `true` immediately when a\n * token is in storage, without asking the server — and a stale token in\n * storage is precisely the situation being recovered from, so it would report\n * success while every request kept coming back 401.\n * - `login()` is the wrong door. In `oauth`/`saml` mode it navigates to the\n * identity provider, and a page load destroys every in-flight upload: tus\n * holds the `File` in memory and nothing persists it. Signing in again has to\n * stay the user's explicit choice, not something a background retry triggers.\n *\n * `tryAutoAuthentication()` hits a protected endpoint with `redirect: \"manual\"`,\n * so it never navigates, and a `200` carries the `sinequa-jwt-refresh` header\n * that atomic stores for us. It covers the cases worth covering automatically:\n * an ambient SSO session (IIS/proxy), an OIDC session still live at the IdP, and\n * a cookie that outlived its CSRF token. It answers `false` — never throws —\n * when the user is genuinely signed out, which is the caller's cue to stop\n * retrying and say so.\n *\n * Single-flight: several uploads and the status poll all hit 401 within the same\n * instant, and they share one probe rather than racing a dozen of them.\n *\n * @returns `true` when the session is usable again.\n */\nexport function recoverSession(): Promise<boolean> {\n _inFlight ??= tryAutoAuthentication()\n .catch(() => false)\n .finally(() => {\n _inFlight = null;\n });\n return _inFlight;\n}\n","// Migrated from lexiq-prototype collections/js/upload-tracker.js.\nimport { Upload as TusUpload } from \"tus-js-client\";\nimport { ApiError, createHeaders, onAuthEvent, fetchUploadStatus, listContainerDocuments } from \"@sinequa/atomic\";\nimport type { UploadJobStatus } from \"@sinequa/atomic\";\nimport { store } from \"../store/collections-store\";\nimport type { CollectionDocument } from \"../store/collections-store\";\nimport { injectIcons } from \"../internal/icons\";\nimport { getDocType } from \"../internal/doc-type\";\nimport { getCurrentUser } from \"../internal/current-user\";\nimport { allJobs, isJobTerminal } from \"../internal/upload-jobs\";\nimport { mapDocumentStatus } from \"../store/mappers\";\nimport { StatusPoller } from \"../internal/status-poller\";\nimport type { PollResult } from \"../internal/status-poller\";\nimport { resolveEndpointUrl } from \"../internal/base-url\";\nimport { openConfirmModal, closeConfirmModal } from \"../internal/dom-utils\";\nimport { formatFileSize } from \"../internal/format\";\nimport { setPluralText, setText, t, tPlural } from \"../internal/i18n\";\nimport { recoverSession } from \"../internal/session-recovery\";\nimport type { ContainerDocument } from \"@sinequa/atomic\";\nimport type { CollectionsHost } from \"../internal/host-contract\";\n\n// One page is enough to refresh what the open collection shows: the detail view\n// itself loads page 1 at the same size (see the store's DEFAULT_PAGE_SIZE).\nconst DOC_STATUS_PAGE_SIZE = 100;\n\n// Retry schedule for a tus chunk, in ms. tus caps the number of attempts at this\n// array's LENGTH (see shouldRetry() in tus-js-client), so surviving an outage is\n// a matter of how many entries there are, not just how long they are. The total\n// (~5 min) is deliberately sized on the server's own retention: its cleanup\n// reclaims an incomplete upload idle for 5 minutes and then answers 410 Gone, so\n// retrying past that cannot succeed - at which point the upload is recovered by\n// the 'online' handler below instead.\nconst UPLOAD_RETRY_DELAYS = [0, 1000, 3000, 5000, 10000, 15000, 20000, 30000, 30000, 30000, 30000, 30000, 30000, 30000, 30000];\n\n// Statuses the ingest endpoint uses to say \"this upload will never be accepted\":\n// retrying them only burns requests. Everything else - a network error (status 0),\n// a 5xx, a 429 - is transient and worth another attempt.\n//\n// 401 is deliberately NOT in here even though it is a 4xx. An upload that\n// outlives a connection drop comes back holding a CSRF token the server has\n// since forgotten, so every attempt 401s and the whole retry budget burns\n// without a byte moving - which is exactly the failure this list would make\n// permanent. It is handled on its own in onShouldRetry(): recover the session,\n// then let the same retry carry the fresh token (see internal/session-recovery).\nconst FATAL_UPLOAD_STATUSES = new Set([400, 403, 404, 409, 410, 413, 422, 507]);\n\n/** A retry tus has scheduled: which attempt it is (0-based), and when it fires. */\ninterface RetrySchedule {\n attempt: number;\n retryAtMs: number;\n}\n\ninterface TrackerFileInput {\n id: string;\n name: string;\n type: string;\n}\n\ntype TrackerStatus = \"uploading\" | \"indexing\" | \"done\" | \"error\" | \"rejected\";\n\ninterface TrackerDoc {\n id: string;\n name: string;\n type: string;\n colId: string;\n // 'rejected' is terminal like 'done'/'error': the server will never index the\n // file (a type outside the collection's conversion plan). Without a state of\n // its own such a file sits under \"Indexing\" for ever.\n status: TrackerStatus;\n pct: number;\n // Server-side explanation for an 'error' (job errors[].error) or a 'rejected'\n // (job rejected[].reason) row. The panel used to show a bare icon.\n msg?: string;\n}\n\n/**\n * What the tracker's connection banner is currently saying. Emitted whenever the\n * situation changes, and `null` once everything is healthy again.\n */\nexport interface ConnectionNotice {\n /**\n * - `retrying` - a transfer is waiting out `retryAtMs` before its next attempt;\n * - `reconnecting` - a session recovery is in flight;\n * - `signed-out` - recovery came back negative; nothing moves until the user\n * signs in again.\n */\n phase: \"retrying\" | \"reconnecting\" | \"signed-out\";\n /** Transfers held up by this. 0 when only the status poll is affected. */\n uploads: number;\n /** 1-based number of the attempt about to be made, and the budget it comes from. */\n attempt: number;\n maxAttempts: number;\n /** Epoch ms of the next attempt - the countdown's target (`retrying` only). */\n retryAtMs?: number;\n /** Epoch ms at which the retry budget runs out (`retrying` only). */\n budgetEndsAtMs?: number;\n /** Epoch ms the connection was first reported lost - drives \"lost N ago\". */\n sinceMs: number;\n /**\n * Re-runs the recovery, for the banner's Retry button. Carried on the payload\n * rather than published as another controller method because it is the one\n * thing the banner can DO, and it is meaningless without the notice it belongs\n * to. Absent when there is nothing useful to retry.\n */\n retry?(): void;\n}\n\nexport interface UploadTrackerController {\n addFiles(trackerDocs: TrackerFileInput[], colId: string, colName: string): void;\n onProgress(docId: string, pct: number): void;\n onIndexing(docId: string): void;\n onComplete(docId: string): void;\n onError(docId: string): void;\n /**\n * Feeds in the job-level half of the status API: per-file error messages and\n * rejections, which only `GET .../document-upload/status` reports.\n *\n * Optional on purpose - this interface is published from index.ts and driven\n * by hand by the demo app's /document-upload tester, so a required method\n * would be a breaking change for it. Returns whether anything actually\n * changed, which paces the poller; `void` is accepted so an implementation\n * that does not care still satisfies the type.\n */\n onJobUpdate?(jobs: UploadJobStatus[]): boolean | void;\n /**\n * Drives the connection banner. `null` clears it.\n *\n * Optional for the same reason as `onJobUpdate` - this interface is published\n * from index.ts and driven by hand by the demo app's /document-upload tester.\n */\n onConnectionChange?(notice: ConnectionNotice | null): void;\n}\n\nexport function initUploadTracker(host: CollectionsHost): void {\n const root = host.shadowRoot;\n\n host._uploadTracker = (function (): UploadTrackerController {\n const tracker = root.getElementById(\"lq-upload-tracker\")!;\n const colNameEl = root.getElementById(\"ut-col-name\")!;\n const fileCountEl = root.getElementById(\"ut-file-count\")!;\n const inlineBodyEl = root.getElementById(\"ut-inline-body\")!;\n const detailBodyEl = root.getElementById(\"ut-detail-body\")!;\n const collapseBtn = root.getElementById(\"ut-collapse-btn\")!;\n const dismissBtn = root.getElementById(\"ut-dismiss-btn\")!;\n const lblUpload = root.getElementById(\"ut-lbl-upload\")!;\n const lblIndex = root.getElementById(\"ut-lbl-index\")!;\n const lblDone = root.getElementById(\"ut-lbl-done\")!;\n const lblError = root.getElementById(\"ut-lbl-error\")!;\n const inlineSep = root.getElementById(\"ut-inline-sep\")!;\n const inlineSep2 = root.getElementById(\"ut-inline-sep-2\")!;\n const inlineSep3 = root.getElementById(\"ut-inline-sep-3\")!;\n const inlineUploadStat = root.getElementById(\"ut-inline-upload-stat\")!;\n const inlineIndexStat = root.getElementById(\"ut-inline-index-stat\")!;\n const inlineDoneStat = root.getElementById(\"ut-inline-done-stat\")!;\n const inlineErrorStat = root.getElementById(\"ut-inline-error-stat\")!;\n const peekTextEl = root.getElementById(\"ut-peek-text\")!;\n const connEl = root.getElementById(\"ut-conn\")!;\n const connTitleEl = root.getElementById(\"ut-conn-title\")!;\n const connDetailEl = root.getElementById(\"ut-conn-detail\")!;\n const connCountdownEl = root.getElementById(\"ut-conn-countdown\")!;\n const connRetryBtn = root.getElementById(\"ut-conn-retry\") as HTMLButtonElement;\n\n const _cols = new Map<string, string>(); // colId → colName, insertion-ordered\n let _colIndex = 0; // which collection is visible in expanded view\n let _completedFilesCount = 0; // files removed via per-collection cleanup\n let _totalFiles = 0;\n let _expanded = false;\n const _sectionExpanded = new Map<string, boolean>(); // key: `${colId}:${status}` → bool (default true)\n const _docs = new Map<string, TrackerDoc>();\n let _dismissTimer: ReturnType<typeof setTimeout> | null = null;\n let _hoverTimer: ReturnType<typeof setTimeout> | null = null;\n let _flashTimer: ReturnType<typeof setTimeout> | null = null;\n let _peekNotifyTimer: ReturnType<typeof setTimeout> | null = null;\n let _colCompleteTimer: ReturnType<typeof setTimeout> | null = null;\n let _peekActive = false;\n let _conn: ConnectionNotice | null = null;\n let _connTimer: ReturnType<typeof setInterval> | null = null;\n\n function _docIcon(type: string): string {\n return type === \"pdf\" ? \"col-doc-pdf\" : type === \"csv\" ? \"col-doc-csv\" : \"col-doc-doc\";\n }\n\n // Server-authored strings reach innerHTML below. File and collection names\n // were already interpolated raw before this change, but nothing guarantees\n // the new error/rejection text is safe, so it goes through here.\n function _escapeHtml(text: string): string {\n return text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n }\n\n function _isFinished(d: TrackerDoc): boolean {\n return d.status === \"done\" || d.status === \"error\" || d.status === \"rejected\";\n }\n\n function _isFailed(d: TrackerDoc): boolean {\n return d.status === \"error\" || d.status === \"rejected\";\n }\n\n function _sectionDocs(status: string, colId: string | null = null): TrackerDoc[] {\n return [..._docs.values()].filter(d => d.status === status && (colId === null || d.colId === colId));\n }\n\n function _sectionAvgPct(status: string, colId: string | null = null): number {\n const docs = _sectionDocs(status, colId);\n if (!docs.length) return 0;\n return docs.reduce((s, d) => s + d.pct, 0) / docs.length;\n }\n\n function _isSectionExpanded(colId: string | number | undefined, status: string | undefined): boolean {\n const key = `${colId}:${status}`;\n return _sectionExpanded.has(key) ? _sectionExpanded.get(key)! : true;\n }\n\n function _updateHeader(): void {\n const n = _cols.size;\n if (n === 1) colNameEl.textContent = [..._cols.values()][0];\n else setPluralText(colNameEl, \"tracker.collectionCount\", n);\n setPluralText(fileCountEl, \"tracker.fileCount\", _totalFiles);\n }\n\n // Called whenever a doc's pct changes (pushed by tus's onProgress or by\n // the indexing-status poll) — replaces the old elapsed-time-based ticker\n // now that progress is real, event-driven data rather than a guess.\n function _refreshProgressUI(): void {\n _updateInlineStats();\n if (_expanded) _tickUpdateDetail();\n }\n\n function _truncate(name: string, max: number): string {\n if (name.length <= max) return name;\n const dot = name.lastIndexOf(\".\");\n if (dot > 0 && name.length - dot <= 5) {\n const ext = name.slice(dot);\n return name.slice(0, max - ext.length - 1) + \"…\" + ext;\n }\n return name.slice(0, max - 1) + \"…\";\n }\n\n // A single document is labelled by its (truncated) name; anything else goes\n // through the pluralized catalog entry named by `countKey`.\n function _statLabel(docs: TrackerDoc[], countKey: string): string {\n if (docs.length === 1) return _truncate(docs[0].name, 26);\n return tPlural(countKey, docs.length);\n }\n\n function _currentPeekText(): string {\n const upDocs = _sectionDocs(\"uploading\");\n const procDocs = _sectionDocs(\"indexing\");\n const doneDocs = _sectionDocs(\"done\");\n // Rejections share the \"failed\" chip - they are a terminal non-success\n // like an error - but keep their own section in the expanded body, where\n // there is room to say why.\n const errDocs = [..._docs.values()].filter(_isFailed);\n if (errDocs.length > 0) {\n return errDocs.length === 1 ? _truncate(errDocs[0].name, 22) : tPlural(\"tracker.errorCount\", errDocs.length);\n }\n if (doneDocs.length > 0 && upDocs.length === 0 && procDocs.length === 0) {\n return doneDocs.length === 1 ? _truncate(doneDocs[0].name, 22) : tPlural(\"tracker.indexedCount\", doneDocs.length);\n }\n const active = upDocs.length + procDocs.length;\n return tPlural(\"tracker.fileCount\", active);\n }\n\n function _swapPeekText(newText: string, colorClass: string | null, onSettled?: () => void): void {\n _peekActive = true;\n peekTextEl.classList.add(\"lq-upload-tracker__peek-text--hidden\");\n setTimeout(() => {\n peekTextEl.textContent = newText;\n peekTextEl.className = \"lq-upload-tracker__peek-text\";\n if (colorClass) peekTextEl.classList.add(colorClass);\n peekTextEl.classList.add(\"lq-upload-tracker__peek-text--from-below\");\n void peekTextEl.offsetWidth;\n peekTextEl.classList.remove(\"lq-upload-tracker__peek-text--from-below\");\n if (onSettled) {\n setTimeout(onSettled, 150);\n } else {\n setTimeout(() => {\n _peekActive = false;\n }, 150);\n }\n }, 150);\n }\n\n function _peekNotify(message: string, colorClass: string): void {\n if (!tracker.classList.contains(\"lq-upload-tracker--minimized\")) return;\n if (_peekNotifyTimer) {\n clearTimeout(_peekNotifyTimer);\n _peekNotifyTimer = null;\n }\n const isSuccess = colorClass === \"lq-upload-tracker__peek-text--success\";\n tracker.classList.toggle(\"lq-upload-tracker--peek-success\", isSuccess);\n tracker.classList.toggle(\"lq-upload-tracker--peek-error\", !isSuccess);\n _swapPeekText(message, colorClass, () => {\n _peekNotifyTimer = setTimeout(() => {\n _peekNotifyTimer = null;\n tracker.classList.remove(\"lq-upload-tracker--peek-success\", \"lq-upload-tracker--peek-error\");\n _swapPeekText(_currentPeekText(), null);\n }, 3500);\n });\n }\n\n function _flashCompletion(doc?: TrackerDoc): void {\n if (_expanded || tracker.classList.contains(\"lq-upload-tracker--minimized\")) return;\n if (_flashTimer) {\n clearTimeout(_flashTimer);\n _flashTimer = null;\n }\n const originalCount = fileCountEl.textContent;\n inlineBodyEl.hidden = true;\n fileCountEl.textContent = doc ? _truncate(doc.name, 30) : t(\"tracker.fileIndexed\");\n fileCountEl.classList.add(\"lq-upload-tracker__count--flash\");\n _flashTimer = setTimeout(() => {\n _flashTimer = null;\n fileCountEl.textContent = originalCount;\n fileCountEl.classList.remove(\"lq-upload-tracker__count--flash\");\n if (!_expanded) {\n inlineBodyEl.hidden = false;\n _updateInlineStats();\n }\n }, 3000);\n }\n\n /** m:ss, for a duration in ms. Clamped at 0 so a late tick cannot go negative. */\n function _fmtClock(ms: number): string {\n const secs = Math.max(0, Math.round(ms / 1000));\n return `${Math.floor(secs / 60)}:${String(secs % 60).padStart(2, \"0\")}`;\n }\n\n // The per-second half of the banner, split out because it is the only part\n // worth re-running on a timer - everything else changes once per attempt.\n function _tickConnCountdown(): void {\n if (!_conn) return;\n const now = Date.now();\n const parts: string[] = [];\n if (_conn.phase === \"retrying\" && _conn.retryAtMs !== undefined) {\n const left = _conn.retryAtMs - now;\n parts.push(left > 0 ? t(\"tracker.nextTryIn\", { time: _fmtClock(left) }) : t(\"tracker.tryingNow\"));\n }\n parts.push(t(\"tracker.lostAgo\", { time: _fmtClock(now - _conn.sinceMs) }));\n if (_conn.phase === \"retrying\" && _conn.budgetEndsAtMs !== undefined) {\n parts.push(t(\"tracker.givesUpIn\", { time: _fmtClock(_conn.budgetEndsAtMs - now) }));\n }\n connCountdownEl.textContent = parts.join(\" · \");\n }\n\n function _renderConnection(): void {\n if (_connTimer) {\n clearInterval(_connTimer);\n _connTimer = null;\n }\n\n // Nothing to say - or nowhere to say it. The banner lives inside the\n // tracker panel, and the status poll can legitimately be running with the\n // panel hidden (the detail view starts it for documents someone else\n // uploaded), in which case recovery still happens, just silently.\n if (!_conn || tracker.hidden) {\n connEl.hidden = true;\n tracker.classList.remove(\"lq-upload-tracker--offline\");\n return;\n }\n\n const files = tPlural(\"tracker.uploadCount\", _conn.uploads);\n if (_conn.phase === \"reconnecting\") {\n setText(connTitleEl, \"tracker.reconnecting\");\n setText(connDetailEl, \"tracker.restoringSession\");\n } else if (_conn.phase === \"signed-out\") {\n setText(connTitleEl, \"tracker.signedOut\");\n if (_conn.uploads) setText(connDetailEl, \"tracker.uploadsPaused\", { files });\n else setText(connDetailEl, \"tracker.signInAgain\");\n } else {\n setText(connTitleEl, \"tracker.connectionLost\");\n const retry = { attempt: _conn.attempt, max: _conn.maxAttempts };\n if (_conn.uploads) setText(connDetailEl, \"tracker.retryAttemptWithFiles\", { ...retry, files });\n else setText(connDetailEl, \"tracker.retryAttempt\", retry);\n }\n\n connRetryBtn.hidden = _conn.phase !== \"signed-out\" || !_conn.retry;\n connEl.hidden = false;\n tracker.classList.add(\"lq-upload-tracker--offline\");\n injectIcons(connEl);\n _tickConnCountdown();\n _connTimer = setInterval(_tickConnCountdown, 1000);\n }\n\n connRetryBtn.addEventListener(\"click\", e => {\n e.stopPropagation();\n _conn?.retry?.();\n });\n\n function _updateInlineStats(): void {\n const upDocs = _sectionDocs(\"uploading\");\n const procDocs = _sectionDocs(\"indexing\");\n const doneDocs = _sectionDocs(\"done\");\n // Rejections share the \"failed\" chip - they are a terminal non-success\n // like an error - but keep their own section in the expanded body, where\n // there is room to say why.\n const errDocs = [..._docs.values()].filter(_isFailed);\n\n // Upload/indexing: count only (progress). Done/error: name if single, count if multiple.\n setPluralText(lblUpload, \"tracker.uploadingCount\", upDocs.length);\n setPluralText(lblIndex, \"tracker.indexingCount\", procDocs.length);\n lblDone.textContent = _statLabel(doneDocs, \"tracker.completedCount\");\n lblError.textContent = _statLabel(errDocs, \"tracker.failedCount\");\n\n const multiCol = _cols.size > 1;\n\n inlineUploadStat.hidden = upDocs.length === 0;\n inlineIndexStat.hidden = procDocs.length === 0;\n inlineDoneStat.hidden = doneDocs.length === 0 || multiCol;\n inlineErrorStat.hidden = errDocs.length === 0;\n inlineSep.hidden = upDocs.length === 0 || procDocs.length === 0;\n // sep2 sits between active group and done — hide it in multi-col (done is hidden)\n inlineSep2.hidden = multiCol || (upDocs.length === 0 && procDocs.length === 0) || doneDocs.length === 0;\n // sep3 sits between done and error — in multi-col reuse it as separator between active group and error\n inlineSep3.hidden = multiCol ? (upDocs.length === 0 && procDocs.length === 0) || errDocs.length === 0 : doneDocs.length === 0 || errDocs.length === 0;\n\n const hasErrors = errDocs.length > 0;\n tracker.classList.toggle(\"lq-upload-tracker--has-errors\", hasErrors);\n if (!_peekActive) {\n peekTextEl.textContent = _currentPeekText();\n }\n }\n\n function _tickUpdateDetail(): void {\n // Only the ids are needed here; Map.forEach would hand us the collection\n // name first and leave it unused.\n for (const colId of _cols.keys()) {\n [\"uploading\", \"indexing\"].forEach(status => {\n const section = detailBodyEl.querySelector(`.lq-ut-section[data-sec=\"${status}\"][data-col=\"${colId}\"]`);\n if (!section) return;\n const barFill = section.querySelector(\".lq-ut-section__bar-fill\") as HTMLElement | null;\n if (barFill) barFill.style.width = _sectionAvgPct(status, colId).toFixed(1) + \"%\";\n const docs = _sectionDocs(status, colId);\n section.querySelectorAll(\".lq-ut-doc-row\").forEach((row, i) => {\n const pctEl = row.querySelector(\".lq-ut-doc-row__pct\");\n if (pctEl && docs[i]) pctEl.textContent = Math.round(docs[i].pct) + \"%\";\n });\n });\n }\n }\n\n function _renderSection(status: TrackerStatus, colId: string): string {\n const docs = _sectionDocs(status, colId);\n if (!docs.length) return \"\";\n\n const cfgs: Record<TrackerStatus, { icon: string; titleKey: string; bar: boolean; dots: boolean; toggle: boolean; variant: string }> = {\n uploading: { icon: \"ut-upload\", titleKey: \"tracker.sectionUploading\", bar: true, dots: true, toggle: true, variant: \"\" },\n indexing: { icon: \"ut-sync\", titleKey: \"tracker.sectionIndexing\", bar: true, dots: true, toggle: true, variant: \"\" },\n done: { icon: \"ut-check\", titleKey: \"tracker.sectionCompleted\", bar: false, dots: false, toggle: false, variant: \"done\" },\n error: { icon: \"ut-error\", titleKey: \"tracker.sectionFailed\", bar: false, dots: false, toggle: false, variant: \"error\" },\n rejected: { icon: \"ut-error\", titleKey: \"tracker.sectionNotIndexed\", bar: false, dots: false, toggle: false, variant: \"\" }\n };\n const cfg = cfgs[status];\n const pct = _sectionAvgPct(status, colId);\n const isExpanded = _isSectionExpanded(colId, status);\n\n const docRows = docs\n .map(d => {\n const trailing =\n status === \"done\"\n ? `<span class=\"lq-ut-doc-row__done-label\" data-i18n=\"tracker.complete\">${_escapeHtml(t(\"tracker.complete\"))}</span>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon lq-ut-doc-row__remove\" data-id=\"${d.id}\" data-i18n-attr=\"aria-label:tracker.dismiss\" aria-label=\"${_escapeHtml(t(\"tracker.dismiss\"))}\"><i data-icon=\"panel-close\"></i></button>`\n : status === \"error\"\n ? `<span class=\"lq-ut-doc-row__status lq-ut-doc-row__status--error\"><i data-icon=\"ut-error\"></i></span>`\n : status === \"rejected\"\n ? \"\"\n : `<span class=\"lq-ut-doc-row__pct\">${Math.round(d.pct)}%</span>`;\n // Why the file failed or was skipped, when the server says so. The row\n // truncates, so the full text also goes in the title.\n const msg = d.msg ? `<span class=\"lq-ut-doc-row__msg\" title=\"${_escapeHtml(d.msg)}\">${_escapeHtml(d.msg)}</span>` : \"\";\n return `\n <div class=\"lq-ut-doc-row${status === \"done\" ? \" lq-ut-doc-row--done\" : status === \"error\" ? \" lq-ut-doc-row--error\" : \"\"}\">\n <span class=\"lq-ut-doc-row__icon\"><i data-icon=\"${_docIcon(d.type)}\"></i></span>\n <span class=\"lq-ut-doc-row__name\">${d.name}</span>\n ${msg}\n ${trailing}\n </div>`;\n })\n .join(\"\");\n\n const barHtml = cfg.bar ? `<div class=\"lq-ut-section__bar\"><div class=\"lq-ut-section__bar-fill\" style=\"width:${pct.toFixed(1)}%\"></div></div>` : \"\";\n const dotsHtml = cfg.dots ? `<span class=\"lq-doc-status__dots\"><span></span><span></span><span></span></span>` : \"\";\n const toggleHtml = cfg.toggle\n ? `<button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon lq-ut-section__toggle\" data-sec=\"${status}\" data-col=\"${colId}\" data-i18n-attr=\"aria-label:tracker.toggleSection\" aria-label=\"${_escapeHtml(t(\"tracker.toggleSection\"))}\"><i data-icon=\"chevron-down\"></i></button>`\n : \"\";\n\n return `\n <div class=\"lq-ut-section${cfg.variant ? \" lq-ut-section--\" + cfg.variant : \"\"}\" data-sec=\"${status}\" data-col=\"${colId}\">\n <div class=\"lq-ut-section__row\">\n <span class=\"lq-ut-section__icon\"><i data-icon=\"${cfg.icon}\"></i></span>\n <span class=\"lq-ut-section__title\"><span data-i18n=\"${cfg.titleKey}\">${_escapeHtml(t(cfg.titleKey))}</span>${dotsHtml}</span>\n ${barHtml}\n <span class=\"oc-tab__badge lq-ut-section__badge\">${docs.length}</span>\n ${toggleHtml}\n </div>\n <div class=\"lq-ut-section__docs${isExpanded ? \" lq-ut-section__docs--open\" : \"\"}\" data-sec=\"${status}\" data-col=\"${colId}\">${docRows}</div>\n </div>`;\n }\n\n function _renderDetailBody(): void {\n const colIds = [..._cols.keys()];\n const multiCol = colIds.length > 1;\n _colIndex = Math.min(_colIndex, colIds.length - 1);\n const colId = colIds[_colIndex];\n\n const sections =\n _renderSection(\"uploading\", colId) +\n _renderSection(\"indexing\", colId) +\n _renderSection(\"done\", colId) +\n _renderSection(\"error\", colId) +\n _renderSection(\"rejected\", colId);\n\n if (multiCol) {\n const disablePrev = _colIndex === 0;\n const disableNext = _colIndex === colIds.length - 1;\n detailBodyEl.innerHTML = `\n <div class=\"lq-ut-col-nav\">\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"ut-col-prev\" data-i18n-attr=\"aria-label:tracker.previousCollection\" aria-label=\"${_escapeHtml(t(\"tracker.previousCollection\"))}\"${disablePrev ? \" disabled\" : \"\"}><i data-icon=\"chevron-left\"></i></button>\n <span class=\"lq-ut-col-nav__label\">${_cols.get(colId)}<span class=\"lq-ut-col-nav__page\">${_colIndex + 1}/${colIds.length}</span></span>\n <button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon\" id=\"ut-col-next\" data-i18n-attr=\"aria-label:tracker.nextCollection\" aria-label=\"${_escapeHtml(t(\"tracker.nextCollection\"))}\"${disableNext ? \" disabled\" : \"\"}><i data-icon=\"chevron-right\"></i></button>\n </div>\n ${sections}`;\n } else {\n detailBodyEl.innerHTML = sections;\n }\n\n injectIcons(detailBodyEl);\n\n detailBodyEl.querySelector(\"#ut-col-prev\")?.addEventListener(\"click\", e => {\n e.stopPropagation();\n if (_colIndex > 0) {\n _colIndex--;\n _renderDetailBody();\n }\n });\n detailBodyEl.querySelector(\"#ut-col-next\")?.addEventListener(\"click\", e => {\n e.stopPropagation();\n if (_colIndex < _cols.size - 1) {\n _colIndex++;\n _renderDetailBody();\n }\n });\n\n requestAnimationFrame(() => {\n detailBodyEl.querySelectorAll(\".lq-ut-section__docs\").forEach(el => {\n const e = el as HTMLElement;\n if (_isSectionExpanded(e.dataset[\"col\"], e.dataset[\"sec\"])) e.classList.add(\"lq-ut-section__docs--open\");\n });\n detailBodyEl.querySelectorAll(\".lq-ut-section__toggle\").forEach(btn => {\n const b = btn as HTMLElement;\n if (_isSectionExpanded(b.dataset[\"col\"], b.dataset[\"sec\"])) b.classList.add(\"lq-ut-section__toggle--open\");\n });\n });\n\n detailBodyEl.querySelectorAll(\".lq-ut-section__toggle\").forEach(btn => {\n const b = btn as HTMLElement;\n b.addEventListener(\"click\", () => _toggleSection(b.dataset[\"sec\"], b.dataset[\"col\"]));\n b.addEventListener(\"mouseenter\", () => {\n const isOpen = _isSectionExpanded(b.dataset[\"col\"], b.dataset[\"sec\"]);\n host._tooltip.el.textContent = t(isOpen ? \"common.collapse\" : \"common.expand\");\n host._tooltip.el.className = \"oc-tooltip oc-tooltip-placement-top\";\n host._tooltip.el.style.display = \"\";\n host._tooltip.position(b, \"top\");\n });\n b.addEventListener(\"mouseleave\", () => {\n host._tooltip.el.style.display = \"none\";\n });\n b.addEventListener(\"mousedown\", () => {\n host._tooltip.el.style.display = \"none\";\n });\n });\n\n detailBodyEl.querySelectorAll(\".lq-ut-doc-row__remove\").forEach(btn => {\n const b = btn as HTMLElement;\n b.addEventListener(\"click\", e => {\n e.stopPropagation();\n _docs.delete(b.dataset[\"id\"]!);\n _updateInlineStats();\n _renderDetailBody();\n });\n host._tooltip.attach(b, \"common.remove\", \"top\");\n });\n }\n\n function _toggleSection(status: string | undefined, colId: string | undefined): void {\n const docsEl = detailBodyEl.querySelector(`.lq-ut-section__docs[data-sec=\"${status}\"][data-col=\"${colId}\"]`);\n const toggleEl = detailBodyEl.querySelector(`.lq-ut-section__toggle[data-sec=\"${status}\"][data-col=\"${colId}\"]`);\n if (!docsEl) return;\n const opening = !docsEl.classList.contains(\"lq-ut-section__docs--open\");\n docsEl.classList.toggle(\"lq-ut-section__docs--open\", opening);\n if (toggleEl) toggleEl.classList.toggle(\"lq-ut-section__toggle--open\", opening);\n _sectionExpanded.set(`${colId}:${status}`, opening);\n }\n\n function _setExpanded(v: boolean): void {\n _expanded = v;\n tracker.classList.toggle(\"lq-upload-tracker--expanded\", v);\n inlineBodyEl.hidden = v;\n detailBodyEl.hidden = !v;\n if (v) _renderDetailBody();\n }\n\n function _reset(): void {\n _clearHover();\n if (_flashTimer) {\n clearTimeout(_flashTimer);\n _flashTimer = null;\n }\n if (_peekNotifyTimer) {\n clearTimeout(_peekNotifyTimer);\n _peekNotifyTimer = null;\n }\n if (_colCompleteTimer) {\n clearTimeout(_colCompleteTimer);\n _colCompleteTimer = null;\n }\n if (_connTimer) {\n clearInterval(_connTimer);\n _connTimer = null;\n }\n _peekActive = false;\n _conn = null;\n connEl.hidden = true;\n tracker.classList.remove(\"lq-upload-tracker--offline\");\n tracker.classList.remove(\"lq-upload-tracker--col-complete\");\n peekTextEl.className = \"lq-upload-tracker__peek-text\";\n fileCountEl.classList.remove(\"lq-upload-tracker__count--flash\");\n _docs.clear();\n _cols.clear();\n _colIndex = 0;\n _completedFilesCount = 0;\n _sectionExpanded.clear();\n _totalFiles = 0;\n _expanded = false;\n tracker.hidden = true;\n tracker.classList.remove(\"lq-upload-tracker--expanded\");\n tracker.classList.remove(\"lq-upload-tracker--minimized\");\n tracker.classList.remove(\"lq-upload-tracker--all-done\");\n tracker.classList.remove(\"lq-upload-tracker--dismissing\");\n tracker.classList.remove(\"lq-upload-tracker--peek-success\", \"lq-upload-tracker--peek-error\");\n inlineBodyEl.hidden = false;\n detailBodyEl.hidden = true;\n detailBodyEl.innerHTML = \"\";\n }\n\n function _clearHover(): void {\n if (_hoverTimer) {\n clearTimeout(_hoverTimer);\n _hoverTimer = null;\n }\n tracker.classList.remove(\"lq-upload-tracker--minimized-hover\");\n }\n\n function _minimize(): void {\n if (_expanded) _setExpanded(false);\n _clearHover();\n peekTextEl.textContent = fileCountEl.textContent;\n tracker.style.transition = \"transform 0.18s ease-in\";\n tracker.classList.add(\"lq-upload-tracker--minimized\");\n tracker.addEventListener(\n \"transitionend\",\n () => {\n tracker.style.transition = \"\";\n },\n { once: true }\n );\n }\n\n function _restore(): void {\n _clearHover();\n tracker.classList.remove(\"lq-upload-tracker--minimized\");\n }\n\n function _setAllDone(): void {\n if (_flashTimer) {\n clearTimeout(_flashTimer);\n _flashTimer = null;\n }\n if (_peekNotifyTimer) {\n clearTimeout(_peekNotifyTimer);\n _peekNotifyTimer = null;\n }\n _peekActive = false;\n peekTextEl.className = \"lq-upload-tracker__peek-text\";\n fileCountEl.classList.remove(\"lq-upload-tracker__count--flash\");\n // Collapse expanded state and hide both bodies — header carries the full success message\n _expanded = false;\n tracker.classList.remove(\"lq-upload-tracker--expanded\");\n inlineBodyEl.hidden = true;\n detailBodyEl.hidden = true;\n if (tracker.classList.contains(\"lq-upload-tracker--minimized\")) _restore();\n tracker.classList.add(\"lq-upload-tracker--all-done\");\n const n = _completedFilesCount + [..._docs.values()].filter(d => d.status === \"done\").length;\n setPluralText(fileCountEl, \"tracker.indexedFileCount\", n);\n peekTextEl.textContent = n === 1 ? _truncate([..._docs.values()].find(d => d.status === \"done\")!.name, 22) : tPlural(\"tracker.indexedCount\", n);\n _autoDismiss();\n }\n\n function _autoDismiss(): void {\n if (_dismissTimer) return;\n _dismissTimer = setTimeout(() => {\n _dismissTimer = null;\n tracker.classList.add(\"lq-upload-tracker--dismissing\");\n setTimeout(_reset, 320);\n }, 3000);\n }\n\n collapseBtn.addEventListener(\"click\", e => {\n e.stopPropagation();\n if (tracker.classList.contains(\"lq-upload-tracker--minimized\")) {\n _restore();\n } else {\n _setExpanded(!_expanded);\n }\n });\n\n dismissBtn.addEventListener(\"click\", e => {\n e.stopPropagation();\n if (_dismissTimer) {\n clearTimeout(_dismissTimer);\n _dismissTimer = null;\n }\n if (tracker.classList.contains(\"lq-upload-tracker--minimized\") || tracker.classList.contains(\"lq-upload-tracker--all-done\")) {\n _reset();\n } else {\n _minimize();\n }\n });\n\n tracker.addEventListener(\"mouseenter\", () => {\n if (!tracker.classList.contains(\"lq-upload-tracker--minimized\")) return;\n if (_hoverTimer) {\n clearTimeout(_hoverTimer);\n _hoverTimer = null;\n }\n tracker.classList.add(\"lq-upload-tracker--minimized-hover\");\n });\n\n tracker.addEventListener(\"mouseleave\", () => {\n if (!tracker.classList.contains(\"lq-upload-tracker--minimized\")) return;\n _hoverTimer = setTimeout(() => {\n tracker.classList.remove(\"lq-upload-tracker--minimized-hover\");\n _hoverTimer = null;\n }, 250);\n });\n\n tracker.addEventListener(\"click\", () => {\n if (tracker.classList.contains(\"lq-upload-tracker--minimized\")) _restore();\n });\n\n function _onColComplete(colId: string): void {\n const colName = _cols.get(colId) || \"\";\n const colDocPairs = [..._docs.entries()].filter(([, d]) => d.colId === colId);\n\n const _cleanup = () => {\n _colCompleteTimer = null;\n colDocPairs.forEach(([id]) => _docs.delete(id));\n _completedFilesCount += colDocPairs.length;\n _totalFiles = Math.max(0, _totalFiles - colDocPairs.length);\n _cols.delete(colId);\n _colIndex = Math.min(_colIndex, Math.max(0, _cols.size - 1));\n tracker.classList.remove(\"lq-upload-tracker--col-complete\");\n _updateHeader();\n _updateInlineStats();\n if (_expanded) _renderDetailBody();\n };\n\n if (tracker.classList.contains(\"lq-upload-tracker--minimized\")) {\n _peekNotify(`${_truncate(colName, 18)}: indexed`, \"lq-upload-tracker__peek-text--success\");\n _cleanup();\n return;\n }\n\n // Clear any existing flash or col-complete in progress\n if (_flashTimer) {\n clearTimeout(_flashTimer);\n _flashTimer = null;\n fileCountEl.classList.remove(\"lq-upload-tracker__count--flash\");\n }\n if (_colCompleteTimer) {\n clearTimeout(_colCompleteTimer);\n _colCompleteTimer = null;\n tracker.classList.remove(\"lq-upload-tracker--col-complete\");\n }\n\n // Collapse expanded view so the header is the focus\n if (_expanded) _setExpanded(false);\n\n // Show success header\n tracker.classList.add(\"lq-upload-tracker--col-complete\");\n colNameEl.textContent = _truncate(colName, 28);\n setText(fileCountEl, \"tracker.complete\");\n\n _colCompleteTimer = setTimeout(_cleanup, 3500);\n }\n\n collapseBtn.addEventListener(\"mouseenter\", () => {\n host._tooltip.el.textContent = t(_expanded ? \"common.collapse\" : \"common.expand\");\n host._tooltip.el.className = \"oc-tooltip oc-tooltip-placement-top\";\n host._tooltip.el.style.display = \"\";\n host._tooltip.position(collapseBtn, \"top\");\n });\n collapseBtn.addEventListener(\"mouseleave\", () => {\n host._tooltip.el.style.display = \"none\";\n });\n collapseBtn.addEventListener(\"mousedown\", () => {\n host._tooltip.el.style.display = \"none\";\n });\n\n dismissBtn.addEventListener(\"mouseenter\", () => {\n host._tooltip.el.textContent = t(\n tracker.classList.contains(\"lq-upload-tracker--minimized\") || tracker.classList.contains(\"lq-upload-tracker--all-done\")\n ? \"common.close\"\n : \"common.minimize\"\n );\n host._tooltip.el.className = \"oc-tooltip oc-tooltip-placement-top\";\n host._tooltip.el.style.display = \"\";\n host._tooltip.position(dismissBtn, \"top\");\n });\n dismissBtn.addEventListener(\"mouseleave\", () => {\n host._tooltip.el.style.display = \"none\";\n });\n dismissBtn.addEventListener(\"mousedown\", () => {\n host._tooltip.el.style.display = \"none\";\n });\n\n return {\n addFiles(trackerDocs: TrackerFileInput[], colId: string, colName: string): void {\n if (_dismissTimer) {\n clearTimeout(_dismissTimer);\n _dismissTimer = null;\n }\n if (tracker.classList.contains(\"lq-upload-tracker--minimized\")) _restore();\n _cols.set(colId, colName);\n _colIndex = _cols.size - 1;\n trackerDocs.forEach(td => {\n _docs.set(td.id, { id: td.id, name: td.name, type: td.type, colId, status: \"uploading\", pct: 0 });\n _totalFiles++;\n });\n _updateHeader();\n tracker.hidden = false;\n if (_expanded) _setExpanded(false);\n injectIcons(tracker);\n _updateInlineStats();\n // The panel was hidden until now, so a notice raised while it was (by a\n // poll running for someone else's upload) has not been drawn yet.\n _renderConnection();\n },\n onProgress(docId: string, pct: number): void {\n const doc = _docs.get(docId);\n if (doc) doc.pct = pct;\n _refreshProgressUI();\n },\n onIndexing(docId: string): void {\n const doc = _docs.get(docId);\n if (doc) {\n doc.status = \"indexing\";\n doc.pct = 0;\n }\n _updateInlineStats();\n if (_expanded) _renderDetailBody();\n },\n onComplete(docId: string): void {\n const doc = _docs.get(docId);\n if (doc) {\n doc.status = \"done\";\n doc.pct = 100;\n }\n _updateInlineStats();\n const allDocs = [..._docs.values()];\n const allFinished = allDocs.every(_isFinished);\n const hasErrors = allDocs.some(_isFailed);\n if (allFinished && !hasErrors) {\n if (_flashTimer) {\n clearTimeout(_flashTimer);\n _flashTimer = null;\n inlineBodyEl.hidden = false;\n fileCountEl.classList.remove(\"lq-upload-tracker__count--flash\");\n }\n _setAllDone();\n } else if (doc && _cols.size > 1) {\n const colDocs = allDocs.filter(d => d.colId === doc.colId);\n const colFinished = colDocs.every(_isFinished);\n const colErrors = colDocs.some(_isFailed);\n if (colFinished && !colErrors) {\n _onColComplete(doc.colId);\n } else if (_expanded) {\n _renderDetailBody();\n }\n } else {\n if (_expanded) _renderDetailBody();\n else if (tracker.classList.contains(\"lq-upload-tracker--minimized\")) {\n _peekNotify(doc ? _truncate(doc.name, 22) : t(\"tracker.fileIndexed\"), \"lq-upload-tracker__peek-text--success\");\n } else {\n _flashCompletion(doc);\n }\n }\n },\n // Job-level half of the poll. Tracker ids are `${jobId}/${fileName}`\n // (see _flushToGrid), which is exactly how the status API names a file\n // inside a job - so errors and rejections map back with a plain lookup,\n // no name matching.\n onJobUpdate(jobs: UploadJobStatus[]): boolean {\n let changed = false;\n jobs.forEach(job => {\n (job.errors ?? []).forEach(e => {\n const doc = _docs.get(`${job.jobId}/${e.fileName}`);\n const msg = e.error ?? undefined;\n if (doc && (doc.status !== \"error\" || doc.msg !== msg)) {\n doc.status = \"error\";\n doc.pct = 0;\n doc.msg = msg;\n changed = true;\n }\n });\n (job.rejected ?? []).forEach(r => {\n const doc = _docs.get(`${job.jobId}/${r.fileName}`);\n if (doc && (doc.status !== \"rejected\" || doc.msg !== r.reason)) {\n doc.status = \"rejected\";\n doc.pct = 0;\n doc.msg = r.reason;\n changed = true;\n }\n });\n // Indexing has no per-document percentage anywhere in the API - the\n // job's aggregate is the finest grain there is, so every file of the\n // job shows it.\n const pct = job.indexingProgress?.percentage;\n if (job.indexingStatus === \"indexing\" && typeof pct === \"number\") {\n _docs.forEach((d, id) => {\n if (d.status === \"indexing\" && id.startsWith(`${job.jobId}/`) && d.pct !== pct) {\n d.pct = pct;\n changed = true;\n }\n });\n }\n });\n if (!changed) return false;\n _updateInlineStats();\n if (_expanded) _renderDetailBody();\n return true;\n },\n onConnectionChange(notice: ConnectionNotice | null): void {\n const prevPhase = _conn?.phase ?? null;\n _conn = notice;\n _renderConnection();\n // Minimized, the panel (and its banner) is off-screen: the peek strip is\n // the only thing the user can see, so the phase change goes there too -\n // once per change, not once per repaint of the countdown.\n if (notice && notice.phase !== prevPhase && tracker.classList.contains(\"lq-upload-tracker--minimized\")) {\n _peekNotify(t(notice.phase === \"signed-out\" ? \"tracker.signedOut\" : \"tracker.connectionLost\"), \"lq-upload-tracker__peek-text--error\");\n }\n },\n onError(docId: string): void {\n const doc = _docs.get(docId);\n if (doc) {\n doc.status = \"error\";\n doc.pct = 0;\n }\n _updateInlineStats();\n if (_cols.size === 1) {\n if (tracker.classList.contains(\"lq-upload-tracker--minimized\")) {\n _peekNotify(doc ? _truncate(doc.name, 22) : t(\"tracker.uploadFailed\"), \"lq-upload-tracker__peek-text--error\");\n } else if (_expanded) {\n _renderDetailBody();\n }\n } else if (_expanded) {\n _renderDetailBody();\n }\n }\n };\n })();\n\n /* ── Upload Documents modal ── */\n (function (): void {\n const backdrop = root.getElementById(\"col-upload-backdrop\")!;\n const dropzone = root.getElementById(\"col-upload-dropzone\")!;\n const fileInput = root.getElementById(\"col-upload-input\") as HTMLInputElement;\n const listEl = root.getElementById(\"col-upload-file-list\")!;\n const cancelBtn = root.getElementById(\"btn-col-upload-cancel\")!;\n const uploadBtn = root.getElementById(\"btn-col-upload-confirm\") as HTMLButtonElement;\n\n let _files: File[] = [];\n\n function _replaceStatusBadge(doc: CollectionDocument, key: string): void {\n root.querySelectorAll(`[data-doc-id=\"${doc._id}\"] .lq-doc-status`).forEach(el => {\n const isRow = el.classList.contains(\"lq-doc-status--row\");\n const span = document.createElement(\"span\");\n span.className = isRow ? \"lq-doc-row__date\" : \"lq-doc-card__date\";\n setText(span, key);\n el.replaceWith(span);\n });\n }\n\n function _markIndexing(doc: CollectionDocument): void {\n doc.status = \"indexing\";\n root.querySelectorAll<HTMLElement>(`[data-doc-id=\"${doc._id}\"] .lq-doc-status__label`).forEach(el => setText(el, \"tracker.stageIndexing\"));\n host._uploadTracker?.onIndexing(doc._id);\n }\n\n function _markComplete(doc: CollectionDocument): void {\n doc.status = null;\n doc.date = t(\"format.uploadedJustNow\");\n _replaceStatusBadge(doc, \"format.uploadedJustNow\");\n host._uploadTracker?.onComplete(doc._id);\n }\n\n function _markError(doc: CollectionDocument): void {\n doc.status = \"error\";\n _replaceStatusBadge(doc, \"tracker.uploadFailed\");\n host._uploadTracker?.onError(doc._id);\n }\n\n // tus only covers the byte transfer: onSuccess fires once the server holds\n // every byte, but indexing is a separate server-side job with no tus\n // equivalent. It is observed by polling the Document Upload status API.\n //\n // This replaces a former per-document fetch loop on a\n // `documents/{id}/status` path that the API never had (see PORTED.md).\n // There are two endpoints, at two grains, and both are needed:\n // - GET .../container/{id}/documents -> status + percent PER DOCUMENT\n // - GET .../document-upload/status -> aggregate, errors[] and\n // rejected[] PER JOB\n // Documents this client is still transferring or waiting on. The server's\n // status store can lag a job by a tick or two, so this is what keeps the\n // loop alive until it catches up - and emptying it is what lets it stop.\n const _inFlight = new Set<string>();\n\n // Live tus handles, by document id. Nothing kept a reference before, which\n // made an in-flight upload impossible to resume, abort or even inspect once\n // started - see _resumeStalledUploads(), which is the whole point of this map.\n const _uploads = new Map<string, { upload: TusUpload; doc: CollectionDocument }>();\n\n function _applyDocumentStatuses(colId: string, wireDocs: ContainerDocument[]): { pending: boolean; changed: boolean } {\n const locals = store.getDocuments(colId);\n let pending = false;\n let changed = false;\n\n wireDocs.forEach(w => {\n // status/percent are served but undeclared by atomic's type - same\n // widening as store/mappers.ts does.\n const wire = w as ContainerDocument & { status?: string; percent?: number };\n const next = mapDocumentStatus(wire.status);\n if (next === \"uploading\" || next === \"indexing\") pending = true;\n\n const doc = locals.find(d => d._id === wire.id);\n if (!doc) return;\n\n // While tus is still sending, the local byte-level progress is ahead of\n // anything the server can report: it owns the percentage until tus\n // hands over. An error is the one thing worth taking early.\n if (_inFlight.has(doc._id) && doc.status === \"uploading\") {\n if (next === \"error\") {\n _inFlight.delete(doc._id);\n _markError(doc);\n changed = true;\n }\n return;\n }\n\n if (next === \"indexing\" && doc.status !== \"indexing\") {\n _markIndexing(doc);\n changed = true;\n } else if (next === null && doc.status !== null) {\n _inFlight.delete(doc._id);\n _markComplete(doc);\n changed = true;\n } else if (next === \"error\" && doc.status !== \"error\") {\n _inFlight.delete(doc._id);\n _markError(doc);\n changed = true;\n } else if (next === \"uploading\" && typeof wire.percent === \"number\" && doc.percent !== wire.percent) {\n // Not ours to transfer (another user's upload, or our own seen again\n // after a reload): the server's percentage is all there is.\n doc.percent = wire.percent;\n host._uploadTracker?.onProgress(doc._id, wire.percent);\n changed = true;\n }\n });\n\n return { pending, changed };\n }\n\n async function _pollUploadStatus(signal: AbortSignal): Promise<PollResult> {\n try {\n const result = await _runPollTick(signal);\n _noteHealthy();\n return result;\n } catch (err) {\n // A 401 means the session lapsed, and every further tick would be\n // another 401 at the poller's own pace. Park the loop on the recovery\n // instead: if it works the loop carries on from here (pending: true) and\n // the next tick does the real work; if it does not, report nothing\n // pending so StatusPoller stops itself, and leave restarting to the\n // `authenticated` listener or the banner's Retry button.\n if (err instanceof ApiError && err.status === 401) {\n return { pending: await _recoverSessionAndResume(), changed: false };\n }\n throw err;\n }\n }\n\n async function _runPollTick(signal: AbortSignal): Promise<PollResult> {\n const colId = host._currentCol?.id;\n\n // Scoped to the open collection when there is one - the API documents\n // that as the cheaper lookup - and unscoped otherwise, so the tracker\n // still follows a batch after the user navigates away from it.\n const res = await fetchUploadStatus(colId ? { containerId: colId } : {}, { signal });\n const jobs = allJobs(res);\n\n // Both halves can move on their own - a rejection can surface with no\n // collection open at all - so the tick reports the union, otherwise the\n // idle backoff would widen while things are still happening.\n let changed = host._uploadTracker?.onJobUpdate?.(jobs) === true;\n let pending = jobs.some(j => !isJobTerminal(j));\n\n if (colId) {\n const listing = await listContainerDocuments(colId, { page: 1, pageSize: DOC_STATUS_PAGE_SIZE }, { signal });\n const applied = _applyDocumentStatuses(colId, listing.documents);\n pending = pending || applied.pending;\n changed = changed || applied.changed;\n }\n\n return { pending: pending || _inFlight.size > 0, changed };\n }\n\n const _poller = new StatusPoller({ tick: _pollUploadStatus });\n\n // Published on the host: views/detail-view.ts starts the loop when it opens\n // a collection that still holds unfinished documents (a page reload loses\n // every local tus handle, so the listing is the only way to know), and\n // LexiqCollectionsElement stops it on disconnect.\n host._startUploadPolling = (): void => _poller.start();\n host._stopUploadPolling = (): void => _poller.stop();\n\n function _startUpload(doc: CollectionDocument, file: File, colId: string, jobId: string, fileCount: number, totalBytes: number): void {\n const endpoint = host.getAttribute(\"upload-endpoint\");\n if (!endpoint) {\n _markError(doc);\n return;\n }\n\n const upload = new TusUpload(file, {\n // Absolute, so tus doesn't resolve a relative endpoint against the\n // host page instead of the configured backend.\n endpoint: resolveEndpointUrl(endpoint).href,\n chunkSize: 5 * 1024 * 1024,\n uploadSize: file.size,\n retryDelays: UPLOAD_RETRY_DELAYS,\n removeFingerprintOnSuccess: true,\n // tus's default policy stops retrying the moment `navigator.onLine`\n // reports false - which is exactly when a dropped connection needs\n // riding out, and is why a short outage used to kill the transfer\n // outright. Retry on anything transient and let the schedule above (or\n // the 'online' handler) do the waiting; give up only on the statuses\n // the server uses to refuse the upload for good.\n onShouldRetry(err, retryAttempt) {\n const status = err.originalResponse ? err.originalResponse.getStatus() : 0;\n if (status === 401) {\n // Recoverable, not fatal - unless a recovery has already come back\n // \"genuinely signed out\", in which case another attempt is just\n // another 401. Stop there: the upload lands in the error state and\n // _resumeStalledUploads() picks it up once the user is back.\n void _recoverSessionAndResume();\n if (_signedOut) {\n _clearRetryNotice(doc._id);\n return false;\n }\n } else if (FATAL_UPLOAD_STATUSES.has(status)) {\n _clearRetryNotice(doc._id);\n return false;\n }\n // tus waits retryDelays[retryAttempt] before this attempt and passes\n // that same index here, so the banner's countdown is the real delay,\n // not an estimate of it.\n _noteRetryScheduled(doc._id, retryAttempt);\n return true;\n },\n onAfterResponse(_req, res) {\n // Anything that came back cleanly means the connection is working\n // again for this upload, whatever the retry bookkeeping still says.\n if (res.getStatus() < 400) _noteHealthy(doc._id);\n },\n // The Sinequa ingest endpoint validates these exact tus metadata keys\n // and rejects the creation POST with 400 if any is missing:\n // containerId, jobId, fileName, totalBytes, fileCount.\n // `containerId` is the target collection (Sinequa container id) and\n // `jobId` groups the files of a single upload batch. `totalBytes` and\n // `fileCount` describe the WHOLE job, not this file - identical on\n // every upload of the job - so the server knows how much to expect\n // before it is complete (it enforces a 1 GiB per-job limit on the\n // declared total, answering 413 when it is exceeded).\n metadata: { containerId: colId, jobId, fileName: file.name, totalBytes: String(totalBytes), fileCount: String(fileCount) },\n async onBeforeRequest(req) {\n // A session recovery kicked off by a previous 401 may still be in\n // flight, and carrying the token it is fetching is the entire point of\n // this retry. tus awaits this hook, so waiting here is what makes the\n // first retry (delay 0) useful instead of a guaranteed second 401.\n if (_recovery) await _recovery;\n createHeaders().forEach((value, key) => req.setHeader(key, value));\n },\n onProgress(bytesUploaded, bytesTotal) {\n // The browser's upload-progress events report bytes handed to the\n // socket, not bytes the server has actually processed — on a fast\n // (e.g. localhost) transfer, a stale/delayed event can still be\n // queued after onSuccess already fired and moved doc into\n // 'indexing'. Drop anything that arrives once we've left the\n // 'uploading' phase, so it can't stomp the indexing pct.\n if (doc.status !== \"uploading\") return;\n host._uploadTracker?.onProgress(doc._id, bytesTotal ? (bytesUploaded / bytesTotal) * 100 : 0);\n },\n onSuccess() {\n // Bytes are in; indexing is now the server's business, so the poller\n // owns this document from here. Nothing left to resume.\n _noteHealthy(doc._id);\n _uploads.delete(doc._id);\n _markIndexing(doc);\n _poller.start();\n },\n onError() {\n // The handle is kept: the retry budget is spent, but the upload is\n // not lost - _resumeStalledUploads() can pick it up again, and tus\n // resumes from the server's offset rather than from zero.\n _clearRetryNotice(doc._id);\n _inFlight.delete(doc._id);\n _markError(doc);\n }\n });\n\n _uploads.set(doc._id, { upload, doc });\n\n // Resumes a stalled upload from a previous page load when tus recognizes\n // the same file (name/size/type/lastModified) rather than restarting it.\n upload.findPreviousUploads().then(previousUploads => {\n if (previousUploads.length) upload.resumeFromPreviousUpload(previousUploads[0]);\n upload.start();\n });\n }\n\n // Picks up every upload whose retry budget ran out while the connection was\n // down. tus re-reads the server's offset first, so only the missing bytes\n // are sent. Safe to call at any time: uploads still retrying are left alone,\n // and the File is still held by tus for as long as the tab is open, which is\n // what makes this recovery fully automatic. An upload does not survive the\n // tab closing: a File cannot, and nothing is persisted to make it.\n function _resumeStalledUploads(): void {\n _uploads.forEach(({ upload, doc }) => {\n if (doc.status !== \"error\") return;\n doc.status = \"uploading\";\n _inFlight.add(doc._id);\n host._uploadTracker?.onProgress(doc._id, 0);\n upload.start();\n });\n }\n\n window.addEventListener(\"online\", _resumeStalledUploads);\n\n /* ── Connection loss & session recovery ──────────────────────────────────\n Two independent things stall on the same cause - the tus transfers and the\n status poll - so one small state machine owns both, and one banner speaks\n for both. Everything here is bookkeeping around that: what is waiting, for\n how long, and whether the wait is worth anything. */\n\n // docId -> the retry tus has scheduled for it. Empty means nothing is waiting.\n const _retrying = new Map<string, RetrySchedule>();\n // A recovery is in flight. Distinct from _signedOut: one is \"asking\", the\n // other is the answer.\n let _recovering = false;\n // The last recovery said the user is genuinely signed out. Reset the moment\n // anything re-authenticates.\n let _signedOut = false;\n // When the trouble started, so the banner can say how long it has been.\n // 0 while healthy.\n let _lostSinceMs = 0;\n let _recovery: Promise<boolean> | null = null;\n\n // Uploads that spent their whole budget and are parked in the error state.\n // They are what \"N uploads paused\" counts once retrying has stopped.\n function _stalledUploadCount(): number {\n let n = 0;\n _uploads.forEach(({ doc }) => {\n if (doc.status === \"error\") n++;\n });\n return n;\n }\n\n function _publishConnection(): void {\n if (!_retrying.size && !_recovering && !_signedOut) {\n _lostSinceMs = 0;\n host._uploadTracker?.onConnectionChange?.(null);\n return;\n }\n if (!_lostSinceMs) _lostSinceMs = Date.now();\n\n // The soonest retry is the one the countdown is about: it is the next\n // thing that will actually happen.\n const soonest = [..._retrying.values()].reduce<RetrySchedule | null>((best, r) => (best === null || r.retryAtMs < best.retryAtMs ? r : best), null);\n\n const base = {\n uploads: _retrying.size || _stalledUploadCount(),\n maxAttempts: UPLOAD_RETRY_DELAYS.length,\n sinceMs: _lostSinceMs\n };\n\n if (_recovering) {\n host._uploadTracker?.onConnectionChange?.({\n ...base,\n phase: \"reconnecting\",\n attempt: soonest ? soonest.attempt + 1 : 0\n });\n return;\n }\n if (_signedOut || !soonest) {\n host._uploadTracker?.onConnectionChange?.({\n ...base,\n phase: \"signed-out\",\n attempt: soonest ? soonest.attempt + 1 : 0,\n retry: () => {\n void _recoverSessionAndResume();\n }\n });\n return;\n }\n host._uploadTracker?.onConnectionChange?.({\n ...base,\n phase: \"retrying\",\n // retryAttempt is 0-based; humans count attempts from 1.\n attempt: soonest.attempt + 1,\n retryAtMs: soonest.retryAtMs,\n // What is left of the budget after this attempt, measured from it -\n // i.e. when tus will stop trying on its own.\n budgetEndsAtMs: soonest.retryAtMs + UPLOAD_RETRY_DELAYS.slice(soonest.attempt + 1).reduce((a, b) => a + b, 0)\n });\n }\n\n function _noteRetryScheduled(docId: string, retryAttempt: number): void {\n const delay = UPLOAD_RETRY_DELAYS[retryAttempt] ?? 0;\n _retrying.set(docId, { attempt: retryAttempt, retryAtMs: Date.now() + delay });\n _publishConnection();\n }\n\n /** Drops a scheduled retry - the attempt happened, or will never happen. */\n function _clearRetryNotice(docId: string): void {\n if (_retrying.delete(docId)) _publishConnection();\n }\n\n /**\n * Something came back cleanly, so the session demonstrably works - whatever\n * the last recovery concluded. Without this, one `signed-out` verdict would\n * outlive the sign-in that fixed it and make the NEXT 401, on a healthy\n * session, refuse to retry.\n */\n function _noteHealthy(docId?: string): void {\n const hadRetry = docId !== undefined && _retrying.delete(docId);\n const wasSignedOut = _signedOut;\n _signedOut = false;\n if (hadRetry || wasSignedOut) _publishConnection();\n }\n\n /**\n * Recovers the session and picks up whatever was waiting on it. Single-flight:\n * every stalled upload and the status poll hit 401 within the same instant,\n * and one probe answers for all of them.\n */\n function _recoverSessionAndResume(): Promise<boolean> {\n _recovery ??= _runRecovery().finally(() => {\n _recovery = null;\n });\n return _recovery;\n }\n\n async function _runRecovery(): Promise<boolean> {\n _recovering = true;\n _publishConnection();\n const ok = await recoverSession();\n _recovering = false;\n _signedOut = !ok;\n if (ok) {\n // Uploads still inside their retry budget need nothing: createHeaders()\n // is called per attempt, so the refreshed token is already theirs. Only\n // the ones that ran out have to be pushed.\n _resumeStalledUploads();\n _poller.start();\n }\n _publishConnection();\n return ok;\n }\n\n // The other way back in: the user signed in again (here, or in another tab\n // sharing this session storage). `login()` is never called from here - it\n // navigates for oauth/saml, and a page load destroys every in-flight upload -\n // so this is how a real sign-in reaches us.\n onAuthEvent(\"authenticated\", ({ authenticated }) => {\n if (!authenticated || !host.isConnected) return;\n _signedOut = false;\n _resumeStalledUploads();\n _poller.start();\n _publishConnection();\n });\n\n function _flushToGrid(files: File[]): void {\n if (!files.length || !host._currentCol) return;\n const grid = root.getElementById(\"col-detail-grid\")!;\n const colId = host._currentCol.id;\n\n const docs: CollectionDocument[] = [];\n const trackerDocs: TrackerFileInput[] = [];\n\n // One ingest job groups every file dropped in this batch. All three are\n // job-wide and go out as tus metadata on each of its files.\n const jobId = crypto.randomUUID();\n const fileCount = files.length;\n const totalBytes = files.reduce((n, f) => n + f.size, 0);\n\n files.forEach(f => {\n const doc: CollectionDocument = {\n // The server addresses a document as `<jobId>/<relativePath>` - the\n // shape its own listing returns and the one DELETE documents expects.\n // Deriving the id here instead of minting a random one means the\n // optimistic card already carries the *real* id: it still matches\n // after the listing is re-read, and delete/move work on a document\n // that has not been reloaded yet. (No tus metadata ever carried a\n // client-minted id, contrary to what this comment used to claim.)\n // Holds while we send single files; a rootFolder, folder or zip\n // upload would make relativePath differ from the bare file name.\n _id: `${jobId}/${f.name}`,\n name: f.name,\n containerId: colId,\n size: formatFileSize(f.size),\n type: getDocType(f.name),\n date: t(\"format.uploadedJustNow\"),\n status: \"uploading\",\n jobId,\n uploadedBy: getCurrentUser()?.name || t(\"common.you\")\n };\n docs.push(doc);\n _inFlight.add(doc._id);\n trackerDocs.push({ id: doc._id, name: f.name, type: doc.type });\n });\n\n store.addDocuments(colId, docs);\n\n docs.forEach((doc, i) => {\n if (host._cdvCurrentView === \"grid\") {\n grid.hidden = false;\n const card = host._buildDocCard(doc);\n grid.appendChild(card);\n injectIcons(card);\n }\n _startUpload(doc, files[i], colId, jobId, fileCount, totalBytes);\n });\n\n if (host._cdvCurrentView === \"list\") {\n host._buildDocListView(host._currentDocs);\n }\n\n setPluralText(root.getElementById(\"col-detail-count\")!, \"detail.fileCount\", host._currentDocs.length);\n (root.getElementById(\"col-detail-empty\") as HTMLElement).hidden = true;\n (root.getElementById(\"col-detail-select-btn\") as HTMLElement).hidden = false;\n host._uploadTracker?.addFiles(trackerDocs, host._currentCol.id, host._currentCol.name);\n _poller.start();\n }\n\n // Staging only: dropping or picking files fills the list the modal shows,\n // and nothing leaves the browser until the user presses Upload. The whole\n // selection accumulates here and then goes out as ONE batch (one jobId),\n // instead of a drop starting its own upload the moment it landed.\n //\n // No client-side gatekeeping at all: no type allow-list, no file-count cap,\n // no size cap. Whatever the user picks is sent.\n //\n // What can actually be indexed is the server's call (the collection's\n // conversion plan); it reports the files it will not take in the job's\n // rejected[], shown as the tracker's \"Not indexed\" section. Deciding here\n // instead only hid files the backend may well accept, and went stale every\n // time the conversion plan changed.\n //\n // TODO - upload limits: the caps (max files per job, max size) are expected\n // to become backend options, fetched from the server rather than hard-coded\n // here. Nothing is enforced client-side until then; the server already\n // caps a job at 1 GiB on the declared totalBytes and answers 413 past it,\n // which this client does not surface yet.\n function validateAndAdd(fileList: FileList): void {\n Array.from(fileList).forEach(f => {\n // Same-name files are still collapsed, and now for a hard reason: a\n // document is addressed as `${jobId}/${fileName}`, so two files sharing\n // a name inside one job would collide server-side, not just in the list.\n if (!_files.find(x => x.name === f.name)) _files.push(f);\n });\n renderFileList();\n }\n\n function renderFileList(): void {\n // The label carries the batch size, so what Upload is about to send is\n // readable without counting the rows.\n uploadBtn.disabled = _files.length === 0;\n if (_files.length) setPluralText(uploadBtn, \"upload.uploadCount\", _files.length);\n else setText(uploadBtn, \"detail.upload\");\n\n if (_files.length) {\n listEl.innerHTML = _files\n .map(\n f =>\n `<div class=\"lq-upload-file-row\">\n <i data-icon=\"col-doc-${getDocType(f.name)}\"></i>\n <span class=\"lq-upload-file-row__name\">${f.name}</span>\n </div>`\n )\n .join(\"\");\n injectIcons(listEl);\n listEl.hidden = false;\n } else {\n listEl.hidden = true;\n }\n }\n\n function openUploadModal(): void {\n // The \"Upload\" button is hidden for a reader (views/detail-view.ts), so\n // this is the belt to that braces: the modal is the only way into the\n // tus flow, and a reader has no write access to the container behind it.\n if (host._currentCol?.currentUserRole === \"reader\") return;\n _files = [];\n renderFileList();\n openConfirmModal(root, \"col-upload-backdrop\", \"col-upload-modal\", closeUploadModal);\n }\n\n // Dismissing the modal any other way (Close, Cancel, backdrop, Escape)\n // discards the staged selection - nothing was sent, so there is nothing to\n // keep. openUploadModal() resets _files, which is what makes that true.\n function closeUploadModal(): void {\n closeConfirmModal(root, \"col-upload-backdrop\", \"col-upload-modal\");\n }\n\n function submitUpload(): void {\n if (!_files.length) return;\n _flushToGrid(_files);\n closeUploadModal();\n }\n\n root.getElementById(\"btn-col-upload-close\")!.addEventListener(\"click\", closeUploadModal);\n cancelBtn.addEventListener(\"click\", closeUploadModal);\n uploadBtn.addEventListener(\"click\", submitUpload);\n backdrop.addEventListener(\"click\", closeUploadModal);\n\n dropzone.addEventListener(\"click\", () => fileInput.click());\n dropzone.addEventListener(\"keydown\", e => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n fileInput.click();\n }\n });\n\n fileInput.addEventListener(\"change\", () => {\n if (fileInput.files && fileInput.files.length) validateAndAdd(fileInput.files);\n fileInput.value = \"\";\n });\n\n dropzone.addEventListener(\"dragover\", e => {\n e.preventDefault();\n dropzone.classList.add(\"lq-upload-dropzone--dragover\");\n });\n dropzone.addEventListener(\"dragleave\", () => {\n dropzone.classList.remove(\"lq-upload-dropzone--dragover\");\n });\n dropzone.addEventListener(\"drop\", e => {\n e.preventDefault();\n dropzone.classList.remove(\"lq-upload-dropzone--dragover\");\n if (e.dataTransfer && e.dataTransfer.files.length) validateAndAdd(e.dataTransfer.files);\n });\n\n root.getElementById(\"col-detail-upload\")!.addEventListener(\"click\", openUploadModal);\n })();\n}\n","// <lexiq-collections> — the main custom element. Clones the embedded\n// template into its own shadow root, adopts the shared vendored stylesheet,\n// then wires up each view module (one per lexiq-prototype collections/js/*\n// file) against `this` as the shared `host` instance.\nimport { createTemplate } from \"../internal/template\";\nimport { adoptStylesInto } from \"../internal/styles\";\nimport { createTooltipController } from \"../internal/dom-utils\";\nimport { registerRoot, unregisterRoot } from \"../internal/i18n\";\nimport type { TooltipController } from \"../internal/dom-utils\";\nimport { store } from \"../store/collections-store\";\nimport type { Collection, CollectionDocument } from \"../store/collections-store\";\nimport { initListView } from \"../views/list-view\";\nimport { initDetailView } from \"../views/detail-view\";\nimport { initDocPreview } from \"../views/doc-preview\";\nimport type { RefDocument } from \"../views/doc-preview\";\nimport { initShareModal } from \"../views/share-modal\";\nimport { initUploadTracker } from \"../views/upload-tracker\";\nimport type { UploadTrackerController } from \"../views/upload-tracker\";\nimport type { CollectionsHost } from \"../internal/host-contract\";\nimport { getCurrentUser } from \"../internal/current-user\";\n\n// Built on first use, not at import time: createTemplate() calls\n// document.createElement, which would run DOM code just for importing this\n// module — including when a consumer only wants provideLexiqCollectionsElements().\nlet template: HTMLTemplateElement | null = null;\n\nfunction getTemplate(): HTMLTemplateElement {\n template ??= createTemplate();\n return template;\n}\n\n// Supports an `upload-endpoint` HTML attribute (read directly by\n// upload-tracker.ts via host.getAttribute — no observedAttributes needed,\n// same assumption as `theme`: set before the element is attached/upgraded),\n// and a `query-name` attribute naming the query web service the document\n// preview is fetched against (views/doc-preview.ts; defaults to `_query`).\n// An Angular host would read that name off its app config, which this element\n// has no access to — hence an attribute, like the endpoint above.\nexport class LexiqCollectionsElement extends HTMLElement implements CollectionsHost {\n declare readonly shadowRoot: ShadowRoot;\n\n _initialized = false;\n _pickerContainer!: HTMLDivElement;\n _tooltip!: TooltipController;\n\n // posé par views/list-view.ts\n _colCurrentView!: \"grid\" | \"list\";\n _colGridBuilt!: boolean;\n _colListBuilt!: boolean;\n _showList!: () => Promise<void>;\n _hideList!: () => void;\n _buildCollectionCard!: (col: Collection) => HTMLElement;\n _updateColTabCounts!: () => void;\n _exitColSelection!: () => void;\n _updateColSelCount!: () => void;\n _closeColDeleteModal!: () => void;\n\n // posé par views/detail-view.ts\n _currentCol!: Collection | null;\n _currentDocs!: CollectionDocument[];\n _cdvCurrentView!: \"grid\" | \"list\";\n _cdvListBuilt!: boolean;\n _openColDetail!: (col: Collection) => void;\n _closeColDetail!: () => void;\n _refreshCdvEmpty!: () => void;\n _buildDocCard!: (doc: CollectionDocument) => HTMLElement;\n _buildDocListView!: (docs: CollectionDocument[]) => void;\n _exitDocSelection!: () => void;\n\n // posé par views/doc-preview.ts\n _openRefDocPreview!: (docRef: RefDocument) => void;\n _closeColDocPreview!: () => void;\n _syncColDocPreviewView!: () => void;\n\n // posé par views/upload-tracker.ts\n _uploadTracker!: UploadTrackerController;\n _startUploadPolling?: () => void;\n _stopUploadPolling?: () => void;\n\n constructor() {\n super();\n this.attachShadow({ mode: \"open\" });\n }\n\n connectedCallback(): void {\n if (this._initialized) {\n // Re-attached. Every view is still wired (this callback is one-shot);\n // only the polling loop was stopped on disconnect, and it stops itself\n // again on the first tick if nothing is in flight.\n this._startUploadPolling?.();\n registerRoot(this.shadowRoot);\n return;\n }\n this._initialized = true;\n\n // Kick off fetchPrincipal() (for \"Manage access\"/uploadedBy) as early as\n // possible — return value ignored, see getCurrentUser()'s doc comment.\n getCurrentUser();\n\n const root = this.shadowRoot;\n adoptStylesInto(root);\n root.appendChild(getTemplate().content.cloneNode(true));\n\n this._pickerContainer = document.createElement(\"div\");\n this._pickerContainer.className = \"lq-picker-container\";\n root.appendChild(this._pickerContainer);\n\n this._tooltip = createTooltipController(root);\n\n initListView(this);\n initDetailView(this);\n initDocPreview(this);\n initShareModal(this);\n initUploadTracker(this);\n\n // Last, so every view's markup is in the tree: translates the whole shadow\n // root once and keeps it tracked for later language changes.\n registerRoot(root);\n\n void this._showList();\n }\n\n // Deliberately narrow: connectedCallback never runs twice, so tearing down\n // anything that would need re-initialising would leave a re-attached element\n // broken. Stopping the upload-status poller is safe because it is designed to\n // be restarted - and leaving it running would keep hitting the server with a\n // detached element, which is exactly what the old per-document poll did.\n disconnectedCallback(): void {\n this._stopUploadPolling?.();\n unregisterRoot(this.shadowRoot);\n }\n\n /* ── Public API ── */\n\n showList(): Promise<void> {\n return this._showList();\n }\n\n hideList(): void {\n this._hideList();\n }\n\n async showDetail(collectionId: string): Promise<void> {\n await store.ensureLoaded();\n let col = store.get(collectionId);\n if (!col) {\n // Deep-link case: the id isn't on the loaded page — fetch it directly\n // rather than silently no-oping.\n try {\n col = await store.fetchContainer(collectionId);\n } catch {\n col = null;\n }\n }\n if (col) this._openColDetail(col);\n }\n\n hideDetail(): void {\n this._closeColDetail();\n }\n\n openDocumentPreview(docRef: RefDocument): void {\n this._openRefDocPreview(docRef);\n }\n\n closeDocumentPreview(): void {\n this._closeColDocPreview();\n }\n\n get collections(): Collection[] {\n return store.getAll();\n }\n}\n\n// Registration is intentionally NOT a top-level side effect here (keeps this\n// module tree-shakable). Call defineLexiqCollections() / registerLexiqCollectionsElements()\n// from ../register, or use provideLexiqCollectionsElements() in an Angular app.\n","// A single shared \"portal\" element for UI that must render outside the normal\n// document flow (popovers anchored to an arbitrary host button, the mobile\n// bottom sheet) but still needs our vendored design-system CSS scoped to it —\n// exactly like <lexiq-collections>'s own shadow root, just reusable from\n// anywhere a plain function is called (collection-picker.js has no element\n// instance of its own to hang a shadow root off).\nimport { adoptStylesInto } from \"./styles\";\nimport { registerRoot } from \"./i18n\";\n\nclass LexiqCollectionsOverlayRoot extends HTMLElement {\n _container!: HTMLDivElement;\n\n connectedCallback(): void {\n if (this.shadowRoot) return;\n const root = this.attachShadow({ mode: \"open\" });\n adoptStylesInto(root);\n // Popovers and the mobile sheet render here rather than in an element's own\n // shadow root, so this one is tracked too — it is a singleton that lives for\n // the page's lifetime, hence no matching unregisterRoot.\n registerRoot(root);\n this.style.position = \"fixed\";\n this.style.inset = \"0\";\n this.style.pointerEvents = \"none\";\n this.style.zIndex = \"10000\";\n this._container = document.createElement(\"div\");\n this._container.className = \"lq-picker-container\";\n root.appendChild(this._container);\n }\n}\n\nconst TAG_NAME = \"lexiq-collections-overlay-root\";\n\n// Registration is deliberately NOT a top-level side effect: this module is\n// reachable from the public API (collection-picker -> lexiq-collection-picker),\n// so defining at import time would break SSR/Node — where customElements does\n// not exist — and contradict both the \"side-effect-free\" contract of\n// public-api.ts and the `sideEffects: false` manifest flag. Idempotent and\n// SSR-safe, mirroring ../register.ts.\nfunction defineOverlayRoot(): void {\n if (typeof customElements === \"undefined\") return;\n if (!customElements.get(TAG_NAME)) customElements.define(TAG_NAME, LexiqCollectionsOverlayRoot);\n}\n\nlet instance: LexiqCollectionsOverlayRoot | null = null;\n\n/**\n * A plain Element (living inside a shared, viewport-fixed shadow root) that\n * supports both appendChild (inherits our adoptedStyleSheets) and\n * getBoundingClientRect (matches the viewport) — the fallback append target\n * for collection-picker.js when no host-scoped container is supplied.\n */\nexport function getOverlayRoot(): HTMLDivElement {\n // Must run before createElement below, otherwise the element is never upgraded.\n defineOverlayRoot();\n if (!instance) {\n instance = document.createElement(TAG_NAME) as LexiqCollectionsOverlayRoot;\n document.body.appendChild(instance);\n }\n if (!instance.shadowRoot) instance.connectedCallback();\n return instance._container;\n}\n","// Migrated from lexiq-prototype collections/js/collection-picker.js.\n// Free functions (not a per-host `initXxx`) because the two call sites that\n// need this — <lexiq-collections>' internal \"move to collection\" flow and the\n// standalone <lexiq-collection-picker> host widget — each pass their own\n// shadow-scoped `container`/`root`/`mobileSheet` via the options object, so no\n// module-level host binding is needed. `store` is the one true shared\n// singleton (by design: a collection created from either place must show up\n// in both).\nimport { store } from \"../store/collections-store\";\nimport type { Collection, CollectionDocument } from \"../store/collections-store\";\nimport { injectIcons } from \"../internal/icons\";\nimport { createMobileSheetController, escapeHtml, setButtonBusy, showInlineError, clearInlineError } from \"../internal/dom-utils\";\nimport { t } from \"../internal/i18n\";\nimport type { MobileSheetController } from \"../internal/dom-utils\";\nimport { getOverlayRoot } from \"../internal/overlay-root\";\nimport { errorMessageFor } from \"../internal/error-messages\";\n\n// Both pickers attach documents to a container (\"Save to collection\" /\n// \"Move to collection\"), which is a write — so they only ever list the\n// containers the user can write to. A reader's containers stay visible\n// everywhere that merely reads them (the collections list, the \"@\" mention\n// list), just not here (ES-33405).\nfunction writableCollections(): Collection[] {\n return store.getAll().filter(col => col.currentUserRole !== \"reader\");\n}\n\n// \"Save to collection\" (store.saveDocuments) and \"Move to collection\"\n// (store.moveDocuments) have no backing endpoint in ES-32400 — the container\n// API only exposes CRUD on containers/documents, never \"attach an existing\n// document to a container\". Both now go through atomic's addContainerDocuments()\n// (provisional backend contract) — see BACKEND-REQUEST-save-move-to-collection.md.\n\ntype ClickHandler = (e: Event) => void;\n\ntype SaveButton = HTMLElement & {\n _collectionCard?: CollectionCard | null;\n _cardMobileSheet?: MobileSheetController | null;\n _cardScrollHandler?: (() => void) | null;\n _cardScrollTarget?: EventTarget | null;\n _cardOutsideClick?: ClickHandler | null;\n _saveT1?: ReturnType<typeof setTimeout>;\n _saveT2?: ReturnType<typeof setTimeout>;\n};\n\ntype CollectionCard = HTMLDivElement & {\n _saveBtn?: SaveButton;\n _onSave?: ((name: string) => void) | null;\n _documents?: CollectionDocument[];\n};\n\ntype IncomingDocument = Partial<Pick<CollectionDocument, \"_id\">> & Omit<CollectionDocument, \"_id\">;\n\nexport interface PickerOptions {\n mobileSheet?: MobileSheetController | null;\n root?: ShadowRoot | null;\n container?: HTMLElement | null;\n documents?: IncomingDocument[];\n onSave?: ((name: string) => void) | null;\n onUnsave?: (() => void) | null;\n scrollContainer?: EventTarget | null;\n fromCollectionId?: string | null;\n onMoved?: (() => void) | null;\n}\n\nconst BOOKMARK_SOL = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4.20005 1.40039C3.42786 1.40039 2.80005 2.0282 2.80005 2.80039V11.9004C2.80005 12.152 2.93567 12.386 3.15442 12.5085C3.37317 12.631 3.64224 12.6288 3.8588 12.4998L7.00005 10.6163L10.1391 12.4998C10.3557 12.6288 10.6247 12.6332 10.8435 12.5085C11.0622 12.3838 11.2 12.152 11.2 11.9004V2.80039C11.2 2.0282 10.5722 1.40039 9.80005 1.40039H4.20005Z\" fill=\"currentColor\"/>\n</svg>`;\n\nconst mobileSheets = new WeakMap<ShadowRoot, MobileSheetController>();\n\nfunction mobileSheetFor(options: PickerOptions): MobileSheetController | null {\n if (options.mobileSheet) return options.mobileSheet;\n const root = options.root || (options.container ? (options.container.getRootNode() as ShadowRoot) : null);\n if (!root) return null;\n let sheet = mobileSheets.get(root);\n if (!sheet) {\n sheet = createMobileSheetController(root);\n mobileSheets.set(root, sheet);\n }\n return sheet;\n}\n\nfunction containerFor(options: PickerOptions): HTMLElement {\n return options.container || getOverlayRoot();\n}\n\nfunction isMobile(): boolean {\n return window.innerWidth <= 768;\n}\n\nfunction makeCollectionItem(col: Collection): HTMLDivElement {\n const iconHtml = `<i data-icon=\"${col.icon}\"></i>`;\n const item = document.createElement(\"div\");\n item.className = \"lq-collection-card__item\";\n item.dataset[\"colId\"] = col.id;\n item.innerHTML =\n `<span class=\"lq-collection-card__item-icon\">${iconHtml}</span>` +\n `<span class=\"lq-collection-card__item-name\">${col.name}</span>` +\n `<button class=\"lq-btn lq-btn--secondary lq-btn--sm lq-btn--icon lq-collection-card__add-btn\"><i data-icon=\"btn-add\"></i></button>`;\n item.querySelector(\".lq-collection-card__add-btn\")!.addEventListener(\"click\", e => toggleCollectionAdd(e));\n injectIcons(item);\n return item;\n}\n\n/* Normalize host-supplied document payloads into the shape the store's\n `documents[collectionId]` arrays expect, assigning a real `_id` to each so\n the saved item can later be selected/moved/deleted like any uploaded doc. */\nfunction normalizeDocuments(documents?: IncomingDocument[]): CollectionDocument[] {\n if (!documents || !documents.length) return [];\n return documents.map(doc => ({\n _id: doc._id || \"saved-\" + Date.now() + \"-\" + Math.random().toString(36).slice(2),\n ...doc\n }));\n}\n\nasync function toggleCollectionAdd(e: Event): Promise<void> {\n const btn = e.currentTarget as HTMLButtonElement;\n const card = btn.closest(\".lq-collection-card\") as CollectionCard;\n const itemEl = btn.closest(\".lq-collection-card__item\") as HTMLElement;\n const name = itemEl.querySelector(\".lq-collection-card__item-name\")!.textContent!.trim();\n const errorEl = card.querySelector(\".lq-collection-card__error\") as HTMLElement;\n\n clearInlineError(errorEl);\n setButtonBusy(btn, true);\n try {\n if (card._documents && card._documents.length) {\n await store.saveDocuments(itemEl.dataset[\"colId\"] || \"\", card._documents);\n }\n } catch (err) {\n setButtonBusy(btn, false);\n showInlineError(errorEl, errorMessageFor(err));\n return;\n }\n setButtonBusy(btn, false);\n\n const savedLabel = card.querySelector(\".lq-collection-card__saved-label\") as HTMLElement;\n savedLabel.innerHTML = t(\"picker.addedTo\", { name: `<strong>${escapeHtml(name)}</strong>` });\n btn.dataset[\"added\"] = \"1\";\n btn.classList.replace(\"lq-btn--secondary\", \"lq-btn--primary\");\n btn.innerHTML = `<i data-icon=\"btn-check\"></i>`;\n injectIcons(btn);\n setTimeout(() => {\n closeSaveCard(card._saveBtn);\n card._onSave?.(name);\n }, 900);\n}\n\nfunction showNewCollectionInput(card: HTMLElement): void {\n if (card.querySelector(\".lq-collection-card__new-wrap\")) return;\n\n const list = card.querySelector(\".lq-collection-card__list\") as HTMLElement;\n const sectionHead = card.querySelector(\".lq-collection-card__section-head\") as HTMLElement;\n list.classList.add(\"lq-collection-card__list--dimmed\");\n sectionHead.hidden = true;\n\n const wrap = document.createElement(\"div\");\n wrap.className = \"lq-collection-card__new-wrap\";\n wrap.innerHTML =\n `<div class=\"lq-collection-card__new-form-header\">` +\n `<span class=\"lq-collection-card__new-form-label\" data-i18n=\"picker.collectionName\">${escapeHtml(t(\"picker.collectionName\"))}</span>` +\n `</div>` +\n `<div class=\"lq-collection-card__new-form-row\">` +\n `<div class=\"oc-input-wrap oc-input-size-md lq-collection-card__new-field\">` +\n `<input class=\"oc-input-control\" data-i18n-attr=\"placeholder:picker.namePlaceholder\" placeholder=\"${escapeHtml(t(\"picker.namePlaceholder\"))}\" maxlength=\"50\" autocomplete=\"off\">` +\n `</div>` +\n `<button class=\"lq-btn lq-btn--secondary lq-btn--md lq-btn--icon lq-collection-card__new-cancel\"><i data-icon=\"panel-close\"></i></button>` +\n `<button class=\"lq-btn lq-btn--primary lq-btn--md lq-btn--icon lq-collection-card__new-confirm\" disabled><i data-icon=\"btn-check\"></i></button>` +\n `</div>` +\n `<p class=\"lq-collection-card__new-semantic\" hidden></p>`;\n injectIcons(wrap);\n list.before(wrap);\n\n const DUPLICATE_NAME_MESSAGE = t(\"picker.duplicateName\");\n\n const input = wrap.querySelector(\"input\") as HTMLInputElement;\n const fieldWrap = wrap.querySelector(\".lq-collection-card__new-field\") as HTMLElement;\n const confirmBtn = wrap.querySelector(\".lq-collection-card__new-confirm\") as HTMLButtonElement;\n const semantic = wrap.querySelector(\".lq-collection-card__new-semantic\") as HTMLElement;\n // Locks Cancel/Escape while create() is in flight — same rationale as the\n // other modals' `submitting` guards.\n let submitting = false;\n input.focus();\n\n function existingNames(): string[] {\n return Array.from(list.querySelectorAll(\".lq-collection-card__item-name\")).map(el => (el.textContent || \"\").trim().toLowerCase());\n }\n\n function validate(value: string): boolean {\n const name = value.trim();\n if (!name) {\n fieldWrap.classList.remove(\"oc-input-wrap--error\");\n clearInlineError(semantic);\n confirmBtn.disabled = true;\n return false;\n }\n if (existingNames().includes(name.toLowerCase())) {\n fieldWrap.classList.add(\"oc-input-wrap--error\");\n showInlineError(semantic, DUPLICATE_NAME_MESSAGE);\n confirmBtn.disabled = true;\n return false;\n }\n fieldWrap.classList.remove(\"oc-input-wrap--error\");\n clearInlineError(semantic);\n confirmBtn.disabled = false;\n return true;\n }\n\n input.addEventListener(\"input\", () => validate(input.value));\n\n function doCancel(): void {\n wrap.remove();\n list.classList.remove(\"lq-collection-card__list--dimmed\");\n sectionHead.hidden = false;\n }\n\n function cancel(): void {\n if (submitting) return;\n doCancel();\n }\n\n async function commit(): Promise<void> {\n if (submitting) return;\n if (!validate(input.value)) return;\n\n submitting = true;\n setButtonBusy(confirmBtn, true);\n try {\n const col = await store.create({ name: input.value.trim() });\n const newItem = makeCollectionItem(col);\n newItem.classList.add(\"lq-collection-card__item--new\");\n list.prepend(newItem);\n list.scrollTop = 0;\n doCancel();\n } catch (err) {\n fieldWrap.classList.add(\"oc-input-wrap--error\");\n showInlineError(semantic, errorMessageFor(err));\n } finally {\n submitting = false;\n setButtonBusy(confirmBtn, false);\n }\n }\n\n (wrap.querySelector(\".lq-collection-card__new-cancel\") as HTMLElement).addEventListener(\"click\", cancel);\n confirmBtn.addEventListener(\"click\", commit);\n input.addEventListener(\"keydown\", e => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commit();\n }\n if (e.key === \"Escape\") {\n cancel();\n }\n });\n}\n\nfunction buildCollectionCard(saveBtn: SaveButton, options: PickerOptions): CollectionCard {\n const card: CollectionCard = document.createElement(\"div\");\n card.className = \"lq-collection-card\";\n card.innerHTML =\n `<div class=\"lq-collection-card__header\">` +\n `<span class=\"lq-collection-card__saved-label\">${t(\"picker.savedTo\", { name: `<strong>${escapeHtml(t(\"picker.quickCollection\"))}</strong>` })}</span>` +\n `<button class=\"lq-btn lq-btn--tertiary-neutral lq-btn--sm lq-btn--icon lq-collection-card__unsave-btn\">${BOOKMARK_SOL}</button>` +\n `</div>` +\n `<div class=\"lq-collection-card__body\">` +\n `<div class=\"lq-collection-card__section-head\">` +\n `<span class=\"lq-collection-card__section-title\" data-i18n=\"list.title\">${escapeHtml(t(\"list.title\"))}</span>` +\n `<button class=\"lq-btn lq-btn--tertiary lq-btn--sm lq-collection-card__new-btn\" data-i18n=\"picker.newCollection\">${escapeHtml(t(\"picker.newCollection\"))}</button>` +\n `</div>` +\n `<div class=\"lq-collection-card__list\"></div>` +\n `<p class=\"lq-collection-card__error\" hidden></p>` +\n `</div>`;\n\n const list = card.querySelector(\".lq-collection-card__list\") as HTMLElement;\n writableCollections().forEach(col => list.appendChild(makeCollectionItem(col)));\n\n card._saveBtn = saveBtn;\n card._onSave = options.onSave || null;\n card._documents = normalizeDocuments(options.documents);\n (card.querySelector(\".lq-collection-card__unsave-btn\") as HTMLElement).addEventListener(\"click\", () => triggerSaveFeedback(saveBtn, options));\n (card.querySelector(\".lq-collection-card__new-btn\") as HTMLElement).addEventListener(\"click\", () => showNewCollectionInput(card));\n\n return card;\n}\n\nexport function closeSaveCard(btn?: SaveButton | null): void {\n if (!btn) return;\n const sheet = btn._cardMobileSheet;\n if (isMobile() && btn._collectionCard && sheet) {\n btn._collectionCard = null;\n btn._cardMobileSheet = null;\n sheet.close();\n return;\n }\n if (btn._cardScrollHandler) {\n btn._cardScrollTarget?.removeEventListener(\"scroll\", btn._cardScrollHandler);\n btn._cardScrollHandler = null;\n }\n if (btn._cardOutsideClick) {\n document.removeEventListener(\"mousedown\", btn._cardOutsideClick);\n btn._cardOutsideClick = null;\n }\n if (btn._collectionCard) {\n const card = btn._collectionCard;\n btn._collectionCard = null;\n card.classList.remove(\"lq-collection-card--open\");\n setTimeout(() => card.remove(), 160);\n }\n}\n\nexport function triggerSaveFeedback(btn: SaveButton, options: PickerOptions = {}): void {\n if (btn.dataset[\"saved\"]) {\n clearTimeout(btn._saveT1);\n clearTimeout(btn._saveT2);\n delete btn.dataset[\"saved\"];\n btn.classList.remove(\"lq-btn--saved\", \"lq-btn--copy-exit\");\n btn.innerHTML = `<i data-icon=\"bookmark-plus-reg\"></i>`;\n injectIcons(btn);\n closeSaveCard(btn);\n options.onUnsave?.();\n return;\n }\n btn.dataset[\"saved\"] = \"1\";\n btn.classList.add(\"lq-btn--saved\");\n btn.innerHTML = BOOKMARK_SOL + `<span class=\"lq-copy-label\" data-i18n=\"picker.saved\">${escapeHtml(t(\"picker.saved\"))}</span>`;\n btn._saveT1 = setTimeout(() => {\n btn.classList.add(\"lq-btn--copy-exit\");\n btn._saveT2 = setTimeout(() => {\n btn.classList.remove(\"lq-btn--copy-exit\");\n btn.innerHTML = BOOKMARK_SOL;\n }, 240);\n }, 2000);\n\n const card = buildCollectionCard(btn, options);\n btn._collectionCard = card;\n\n const container = containerFor(options);\n\n if (isMobile()) {\n const sheet = mobileSheetFor({ ...options, container });\n btn._cardMobileSheet = sheet;\n sheet?.open(card, t(\"picker.saveToCollection\"), btn);\n return;\n }\n\n function updatePos(): void {\n const panelRect = container.getBoundingClientRect();\n const btnRect = btn.getBoundingClientRect();\n card.style.top = btnRect.bottom - panelRect.top + 8 + \"px\";\n }\n\n function onOutsideClick(e: Event): void {\n const path = e.composedPath();\n if (!path.includes(card) && !path.includes(btn)) closeSaveCard(btn);\n }\n\n updatePos();\n container.appendChild(card);\n\n const scrollTarget = options.scrollContainer || container;\n scrollTarget.addEventListener(\"scroll\", updatePos);\n btn._cardScrollHandler = updatePos;\n btn._cardScrollTarget = scrollTarget;\n\n requestAnimationFrame(() => {\n card.classList.add(\"lq-collection-card--open\");\n document.addEventListener(\"mousedown\", onOutsideClick);\n btn._cardOutsideClick = onOutsideClick;\n });\n}\n\n/* ── \"Add to collection\" from the bottom action bar of the chat detail panel ── */\nexport function openSaveCard(btn: SaveButton, options: PickerOptions = {}): void {\n if (btn._collectionCard) return;\n\n const card = buildCollectionCard(btn, options);\n (card.querySelector(\".lq-collection-card__header\") as HTMLElement).hidden = true;\n card.classList.add(\"lq-collection-card--above\");\n btn._collectionCard = card;\n\n const container = containerFor(options);\n\n function updatePos(): void {\n const panelRect = container.getBoundingClientRect();\n const btnRect = btn.getBoundingClientRect();\n card.style.top = \"auto\";\n card.style.bottom = panelRect.bottom - btnRect.top + 8 + \"px\";\n }\n function onOutsideClick(e: Event): void {\n const path = e.composedPath();\n if (!path.includes(card) && !path.includes(btn)) closeSaveCard(btn);\n }\n\n updatePos();\n container.appendChild(card);\n requestAnimationFrame(() => {\n card.classList.add(\"lq-collection-card--open\");\n document.addEventListener(\"mousedown\", onOutsideClick);\n btn._cardOutsideClick = onOutsideClick;\n });\n}\n\n/* ── Move-to-collection panel (single instance at a time, matching the\n original prototype's module-level behaviour) ── */\nlet moveCard: HTMLDivElement | null = null;\nlet moveOutsideDown: ClickHandler | null = null;\n\nexport function closeMoveCard(): void {\n if (moveOutsideDown) {\n document.removeEventListener(\"mousedown\", moveOutsideDown);\n moveOutsideDown = null;\n }\n if (moveCard) {\n moveCard.classList.remove(\"lq-collection-card--open\");\n const c = moveCard;\n moveCard = null;\n setTimeout(() => c.remove(), 160);\n }\n}\n\nexport function openMoveToCollection(anchorBtn: SaveButton, targetCards: HTMLElement[] = [], options: PickerOptions = {}): void {\n closeMoveCard();\n\n const mobile = isMobile();\n const sheet = mobileSheetFor(options);\n const closeUI = mobile && sheet ? () => sheet.close() : closeMoveCard;\n\n const body = document.createElement(\"div\");\n body.className = \"lq-collection-card__body\";\n body.innerHTML =\n `<div class=\"lq-collection-card__section-head\">` +\n `<span class=\"lq-collection-card__section-title\" data-i18n=\"list.title\">${escapeHtml(t(\"list.title\"))}</span>` +\n `<button class=\"lq-btn lq-btn--tertiary lq-btn--sm lq-collection-card__new-btn\" data-i18n=\"picker.newCollection\">${escapeHtml(t(\"picker.newCollection\"))}</button>` +\n `</div>` +\n `<div class=\"lq-collection-card__list\"></div>` +\n `<p class=\"lq-collection-card__error\" hidden></p>`;\n\n const list = body.querySelector(\".lq-collection-card__list\") as HTMLElement;\n const errorEl = body.querySelector(\".lq-collection-card__error\") as HTMLElement;\n const addBtnSizeClass = mobile ? \"lq-btn--md\" : \"lq-btn--sm\";\n writableCollections().forEach(col => {\n if (options.fromCollectionId != null && col.id === options.fromCollectionId) return;\n const item = document.createElement(\"div\");\n item.className = \"lq-collection-card__item\";\n item.innerHTML =\n `<span class=\"lq-collection-card__item-icon\"><i data-icon=\"${col.icon}\"></i></span>` +\n `<span class=\"lq-collection-card__item-name\">${col.name}</span>` +\n `<button class=\"lq-btn lq-btn--secondary ${addBtnSizeClass} lq-btn--icon lq-collection-card__add-btn\"><i data-icon=\"btn-add\"></i></button>`;\n\n (item.querySelector(\".lq-collection-card__add-btn\") as HTMLButtonElement).addEventListener(\"click\", async e => {\n const addBtn = e.currentTarget as HTMLButtonElement;\n\n clearInlineError(errorEl);\n setButtonBusy(addBtn, true);\n try {\n if (options.fromCollectionId != null) {\n const docIds = targetCards.map(c => c.dataset[\"docId\"]).filter((id): id is string => Boolean(id));\n if (docIds.length) await store.moveDocuments(options.fromCollectionId, col.id, docIds);\n }\n } catch (err) {\n setButtonBusy(addBtn, false);\n showInlineError(errorEl, errorMessageFor(err));\n return;\n }\n setButtonBusy(addBtn, false);\n\n addBtn.classList.replace(\"lq-btn--secondary\", \"lq-btn--primary\");\n addBtn.innerHTML = `<i data-icon=\"btn-check\"></i>`;\n injectIcons(addBtn);\n setTimeout(() => {\n closeUI();\n targetCards.forEach(c => c.classList.add(\"lq-doc-card--bubble-out\"));\n setTimeout(() => {\n targetCards.forEach(c => c.remove());\n if (options.onMoved) options.onMoved();\n }, 350);\n }, 700);\n });\n\n injectIcons(item);\n list.appendChild(item);\n });\n\n (body.querySelector(\".lq-collection-card__new-btn\") as HTMLElement).addEventListener(\"click\", () => showNewCollectionInput(body));\n\n if (mobile && sheet) {\n sheet.open(body, t(\"picker.moveToCollection\"), anchorBtn);\n return;\n }\n\n const card = document.createElement(\"div\");\n card.className = \"lq-collection-card\";\n card.appendChild(body);\n\n const container = containerFor(options);\n const r = anchorBtn.getBoundingClientRect();\n card.style.position = \"fixed\";\n card.style.right = \"auto\";\n card.style.top = r.bottom + 4 + \"px\";\n card.style.left = Math.max(4, r.right - 300) + \"px\";\n\n moveCard = card;\n moveOutsideDown = e => {\n const path = e.composedPath();\n if (!path.includes(card) && !path.includes(anchorBtn)) closeMoveCard();\n };\n\n container.appendChild(card);\n requestAnimationFrame(() => {\n card.classList.add(\"lq-collection-card--open\");\n document.addEventListener(\"mousedown\", moveOutsideDown!);\n });\n}\n","// <lexiq-collection-picker> — the standalone Save/Move-to-collection popover\n// for host pages that don't embed the full <lexiq-collections> app (e.g. a\n// \"Save\" bookmark button in a host chat's message action bar). Anchors into\n// the HOST's DOM (the anchor button lives outside our shadow root — that's\n// the whole reason this is a separate element from <lexiq-collections>, see\n// the architecture plan's §1), while the floating card itself renders inside\n// our own shadow root so it inherits the vendored design-system CSS.\nimport { adoptStylesInto } from \"../internal/styles\";\nimport { registerRoot, unregisterRoot } from \"../internal/i18n\";\nimport {\n openSaveCard as pickerOpenSaveCard,\n closeSaveCard as pickerCloseSaveCard,\n triggerSaveFeedback as pickerTriggerSaveFeedback,\n openMoveToCollection,\n closeMoveCard\n} from \"../views/collection-picker\";\nimport type { PickerOptions } from \"../views/collection-picker\";\n\nexport class LexiqCollectionPickerElement extends HTMLElement {\n private _initialized = false;\n private _container!: HTMLDivElement;\n\n constructor() {\n super();\n this.attachShadow({ mode: \"open\" });\n }\n\n connectedCallback(): void {\n // Outside the one-shot guard: disconnectedCallback untracks the root, so a\n // re-attached element has to re-register to keep following language changes.\n registerRoot(this.shadowRoot!);\n if (this._initialized) return;\n this._initialized = true;\n\n adoptStylesInto(this.shadowRoot!);\n this._container = document.createElement(\"div\");\n this._container.className = \"lq-picker-container\";\n this.shadowRoot!.appendChild(this._container);\n }\n\n disconnectedCallback(): void {\n unregisterRoot(this.shadowRoot!);\n }\n\n private _withEvents(opts: Partial<PickerOptions>): PickerOptions {\n return {\n ...opts,\n container: this._container,\n onSave: (name: string) => this.dispatchEvent(new CustomEvent(\"save\", { detail: { name }, bubbles: true, composed: true })),\n onUnsave: () => this.dispatchEvent(new CustomEvent(\"unsave\", { bubbles: true, composed: true })),\n onMoved: () => {\n opts.onMoved?.();\n this.dispatchEvent(new CustomEvent(\"moved\", { bubbles: true, composed: true }));\n }\n };\n }\n\n /* ── Public API — same shapes as the in-app window.Collections.* hooks ── */\n\n openSaveCard(anchorEl: HTMLElement, opts: Partial<PickerOptions> = {}): void {\n pickerOpenSaveCard(anchorEl, this._withEvents(opts));\n }\n\n closeSaveCard(anchorEl?: HTMLElement | null): void {\n pickerCloseSaveCard(anchorEl);\n }\n\n triggerSaveFeedback(anchorEl: HTMLElement, opts: Partial<PickerOptions> = {}): void {\n pickerTriggerSaveFeedback(anchorEl, this._withEvents(opts));\n }\n\n openMoveMenu(anchorEl: HTMLElement, targetItems: HTMLElement[], opts: Partial<PickerOptions> = {}): void {\n openMoveToCollection(anchorEl, targetItems, this._withEvents(opts));\n }\n\n closeMoveMenu(): void {\n closeMoveCard();\n }\n}\n\n// Registration lives in ../register (defineLexiqCollectionPicker) — not a\n// top-level side effect, so this module stays tree-shakable.\n","// <lexiq-collection-mention-list> — migrated from lexiq-prototype\n// collections/js/collection-mention-picker.js. Renders the collection rows\n// for a host chat's \"+\"/\"@\" mention menus. Selection state now lives in the\n// shared `store` (toggleSelected/selectedCount) instead of a module-level\n// `selectedCollections` Set, so multiple instances of this element (one per\n// open menu) and <lexiq-collections> itself all stay in sync automatically.\nimport { store } from \"../store/collections-store\";\nimport type { Collection } from \"../store/collections-store\";\nimport { adoptStylesInto } from \"../internal/styles\";\nimport { injectIcons } from \"../internal/icons\";\nimport { registerRoot, setPluralText, t, tPlural, unregisterRoot } from \"../internal/i18n\";\n\nexport class LexiqCollectionMentionListElement extends HTMLElement {\n private _initialized = false;\n private _list!: HTMLDivElement;\n private _onSelectionChanged!: () => void;\n private _onCreated!: () => void;\n private _onCollectionsLoaded!: () => void;\n\n constructor() {\n super();\n this.attachShadow({ mode: \"open\" });\n }\n\n connectedCallback(): void {\n if (!this._initialized) {\n this._initialized = true;\n adoptStylesInto(this.shadowRoot!);\n this._list = document.createElement(\"div\");\n this._list.className = \"lq-mention-list oc-scrollable\";\n this.shadowRoot!.appendChild(this._list);\n void this._build();\n }\n registerRoot(this.shadowRoot!);\n this._onSelectionChanged = () => this._syncChecks();\n store.addEventListener(\"selection-changed\", this._onSelectionChanged);\n store.addEventListener(\"collection-created\", (this._onCreated = () => this._build()));\n // Another <lexiq-collections>/<lexiq-collection-picker> instance may be\n // the one that actually triggers the fetch (ensureLoaded() is shared) —\n // rebuild once it lands so this instance's rows aren't left stale/empty.\n store.addEventListener(\"collections-loaded\", (this._onCollectionsLoaded = () => this._build()));\n }\n\n disconnectedCallback(): void {\n unregisterRoot(this.shadowRoot!);\n store.removeEventListener(\"selection-changed\", this._onSelectionChanged);\n store.removeEventListener(\"collection-created\", this._onCreated);\n store.removeEventListener(\"collections-loaded\", this._onCollectionsLoaded);\n }\n\n private _renderMessage(key: string): void {\n const text = t(key);\n this._list.innerHTML = `<div class=\"oc-list-item oc-list-item-l\"><div class=\"oc-list-item-left\"><div class=\"oc-list-item-text-block\"><span class=\"oc-list-item-text\">${text}</span></div></div></div>`;\n }\n\n private async _build(): Promise<void> {\n this._renderMessage(\"mention.loading\");\n try {\n await store.ensureLoaded();\n } catch {\n this._renderMessage(\"mention.loadError\");\n return;\n }\n this._list.innerHTML = \"\";\n store.getAll().forEach(col => this._list.appendChild(this._buildRow(col)));\n }\n\n private _buildRow(col: Collection): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"oc-list-item oc-list-item-l\";\n row.dataset[\"id\"] = col.id;\n row.dataset[\"name\"] = col.name.toLowerCase();\n\n const left = document.createElement(\"div\");\n left.className = \"oc-list-item-left\";\n\n const checkLabel = document.createElement(\"label\");\n checkLabel.className = \"oc-checkbox-root\";\n\n const checkInput = document.createElement(\"input\");\n checkInput.type = \"checkbox\";\n checkInput.className = \"oc-checkbox-input\";\n checkInput.checked = store.selectedIds.has(col.id);\n\n const hitbox = document.createElement(\"span\");\n hitbox.className = \"oc-checkbox-hitbox\";\n const control = document.createElement(\"span\");\n control.className = \"oc-checkbox-control\";\n const iconCheck = document.createElement(\"span\");\n iconCheck.className = \"oc-checkbox-icon oc-checkbox-icon-check\";\n iconCheck.innerHTML = '<i data-icon=\"checkbox-check\"></i>';\n const iconMinus = document.createElement(\"span\");\n iconMinus.className = \"oc-checkbox-icon oc-checkbox-icon-minus\";\n iconMinus.innerHTML = '<i data-icon=\"checkbox-minus\"></i>';\n control.appendChild(iconCheck);\n control.appendChild(iconMinus);\n hitbox.appendChild(control);\n checkLabel.appendChild(checkInput);\n checkLabel.appendChild(hitbox);\n injectIcons(checkLabel);\n\n const textBlock = document.createElement(\"div\");\n textBlock.className = \"oc-list-item-text-block\";\n\n const nameEl = document.createElement(\"span\");\n nameEl.className = \"oc-list-item-text\";\n nameEl.textContent = col.name;\n\n const countEl = document.createElement(\"span\");\n countEl.className = \"oc-list-item-subtext\";\n setPluralText(countEl, \"mention.documentCount\", col.docs);\n\n textBlock.appendChild(nameEl);\n textBlock.appendChild(countEl);\n left.appendChild(checkLabel);\n left.appendChild(textBlock);\n row.appendChild(left);\n\n row.classList.toggle(\"oc-list-item-selected\", checkInput.checked);\n\n checkInput.addEventListener(\"change\", () => {\n store.toggleSelected(col.id, checkInput.checked);\n row.classList.toggle(\"oc-list-item-selected\", checkInput.checked);\n this._dispatchSelectionChanged();\n });\n\n row.addEventListener(\"click\", e => {\n if (!checkLabel.contains(e.target as Node)) {\n checkInput.checked = !checkInput.checked;\n checkInput.dispatchEvent(new Event(\"change\"));\n }\n });\n\n return row;\n }\n\n private _syncChecks(): void {\n this._list.querySelectorAll(\"[data-id]\").forEach(row => {\n const el = row as HTMLElement;\n const id = el.dataset[\"id\"] ?? \"\";\n const checked = store.selectedIds.has(id);\n const input = el.querySelector('input[type=\"checkbox\"]') as HTMLInputElement | null;\n if (input) input.checked = checked;\n el.classList.toggle(\"oc-list-item-selected\", checked);\n });\n }\n\n private _dispatchSelectionChanged(): void {\n this.dispatchEvent(\n new CustomEvent(\"selection-changed\", {\n detail: { ids: [...store.selectedIds], count: store.selectedCount },\n bubbles: true,\n composed: true\n })\n );\n }\n\n /* ── Public API ── */\n\n get items() {\n return store.getAll().map(col => ({ id: col.id, icon: col.icon, name: col.name, desc: tPlural(\"mention.documentCount\", col.docs) }));\n }\n\n selectById(id: string): void {\n store.toggleSelected(id, true);\n this._syncChecks();\n this._dispatchSelectionChanged();\n }\n}\n\n// Registration lives in ../register (defineLexiqCollectionMentionList) — not a\n// top-level side effect, so this module stays tree-shakable.\n","// Explicit registration API for the native Custom Elements.\n//\n// Registration is deliberately NOT a top-level side effect of the element\n// modules (see custom-elements/*.ts) so that importing a single element class\n// stays tree-shakable. Consumers opt in:\n// - defineX() → register one element (partial, tree-shakable)\n// - registerLexiqCollectionsElements() → register all three\n// - provideLexiqCollectionsElements() → Angular provider (see providers.ts)\n//\n// Each defineX() is idempotent (customElements.get guard) and SSR-safe\n// (no-op when customElements is unavailable).\nimport { LexiqCollectionsElement } from \"./custom-elements/lexiq-collections\";\nimport { LexiqCollectionPickerElement } from \"./custom-elements/lexiq-collection-picker\";\nimport { LexiqCollectionMentionListElement } from \"./custom-elements/lexiq-collection-mention-list\";\n\nexport function defineLexiqCollections(tagName = \"lexiq-collections\"): void {\n if (typeof customElements === \"undefined\") return;\n if (!customElements.get(tagName)) customElements.define(tagName, LexiqCollectionsElement);\n}\n\nexport function defineLexiqCollectionPicker(tagName = \"lexiq-collection-picker\"): void {\n if (typeof customElements === \"undefined\") return;\n if (!customElements.get(tagName)) customElements.define(tagName, LexiqCollectionPickerElement);\n}\n\nexport function defineLexiqCollectionMentionList(tagName = \"lexiq-collection-mention-list\"): void {\n if (typeof customElements === \"undefined\") return;\n if (!customElements.get(tagName)) customElements.define(tagName, LexiqCollectionMentionListElement);\n}\n\nexport function registerLexiqCollectionsElements(): void {\n defineLexiqCollections();\n defineLexiqCollectionPicker();\n defineLexiqCollectionMentionList();\n}\n","import { DestroyRef, EnvironmentProviders, inject, makeEnvironmentProviders, provideEnvironmentInitializer } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { TranslocoService } from \"@jsverse/transloco\";\nimport { map, switchMap } from \"rxjs\";\n\nimport { setTranslator } from \"./internal/i18n\";\nimport { registerLexiqCollectionsElements } from \"./register\";\n\n/**\n * Transloco scope the catalogs ship under. Declared in this library's\n * package.json `i18n` array, which `transloco-scoped-libs` reads to copy\n * `i18n/*.json` into the host app's `assets/i18n/<scope>/` — the same pipeline\n * every other `@sinequa/agent` scope uses, so a host app needs no extra config.\n */\nconst LEXIQ_SCOPE = \"agt-lexiq-collections\";\n\n/**\n * Registers the LexiQ Collections native Custom Elements when the Angular\n * application environment initializes, and — when the host app uses Transloco —\n * bridges its translations into the elements. Add to an app/route `providers`\n * array:\n *\n * ```ts\n * export const appConfig: ApplicationConfig = {\n * providers: [provideLexiqCollectionsElements()],\n * };\n * ```\n *\n * Components using the tags still need `schemas: [CUSTOM_ELEMENTS_SCHEMA]`.\n *\n * Transloco is optional: without it the elements fall back to their bundled\n * English catalog, which is why nothing under `internal/` imports it.\n */\nexport function provideLexiqCollectionsElements(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideEnvironmentInitializer(() => {\n registerLexiqCollectionsElements();\n\n const transloco = inject(TranslocoService, { optional: true });\n if (!transloco) return;\n\n // Resolve the scope file BEFORE installing the translator, so the\n // elements never repaint through a half-translated state: until this\n // completes they render the bundled English, which is correct on its own.\n //\n // The key is passed unscoped with the scope as the third argument —\n // Transloco then applies its own scope-to-prefix mapping (camelCase by\n // default, overridable via `scopeMapping`), which hard-coding the prefix\n // here would get wrong in a host that configures it differently.\n const destroyRef = inject(DestroyRef);\n transloco.langChanges$\n .pipe(\n switchMap(lang => transloco.load(`${LEXIQ_SCOPE}/${lang}`).pipe(map(() => lang))),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe(lang => {\n setTranslator((key, params) => {\n const value = transloco.translate<string>(key, params, LEXIQ_SCOPE);\n // Transloco echoes the (scope-prefixed) key when it cannot resolve\n // it — e.g. the host never ran `transloco-scoped-libs`. Returning\n // undefined hands the lookup back to the bundled English catalog\n // instead of rendering a raw key.\n return value === key || value.endsWith(`.${key}`) ? undefined : value;\n }, lang);\n });\n })\n ]);\n}\n","/**\n * Public API of `@sinequa/atomic-angular/elements` — native Custom Elements\n * (plain HTMLElement classes + Shadow DOM, NOT @angular/elements).\n *\n * This entry point is side-effect-free: importing it does NOT register any\n * element. Register explicitly via the define / register functions or the\n * `provideLexiqCollectionsElements()` Angular provider:\n * - Angular: providers: [provideLexiqCollectionsElements()]\n * - Plain JS: import { registerLexiqCollectionsElements } from '@sinequa/atomic-angular/elements';\n * registerLexiqCollectionsElements();\n * - Partial: import { defineLexiqCollectionPicker } from '...'; defineLexiqCollectionPicker();\n */\n\n// ── Element classes ──\nexport { LexiqCollectionsElement } from \"./custom-elements/lexiq-collections\";\nexport { LexiqCollectionPickerElement } from \"./custom-elements/lexiq-collection-picker\";\nexport { LexiqCollectionMentionListElement } from \"./custom-elements/lexiq-collection-mention-list\";\n\n// ── Shared store + public types ──\nexport { store as collectionsStore } from \"./store/collections-store\";\nexport type { Collection, CollectionDocument, ContainerRole } from \"./store/collections-store\";\nexport type { PickerOptions } from \"./views/collection-picker\";\nexport type { RefDocument } from \"./views/doc-preview\";\n// Exposed so hosts can drive the tracker directly — needed by the demo app's\n// /document-upload tester while the status backend (ES-32409) is unfinished.\nexport type { ConnectionNotice, UploadTrackerController } from \"./views/upload-tracker\";\n\n// ── Registration (tree-shakable, idempotent, SSR-safe) ──\nexport { defineLexiqCollections, defineLexiqCollectionPicker, defineLexiqCollectionMentionList, registerLexiqCollectionsElements } from \"./register\";\n\n// ── i18n ──\n// The elements carry a bundled English catalog and translate through whatever\n// `setTranslator` is given — Transloco (via provideLexiqCollectionsElements),\n// or a host's own engine. See internal/i18n.ts.\nexport { setTranslator, setLang, getLang } from \"./internal/i18n\";\nexport type { Translator, TranslateParams } from \"./internal/i18n\";\n\n// ── Angular integration ──\nexport { provideLexiqCollectionsElements } from \"./providers\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TusUpload","pickerOpenSaveCard","pickerCloseSaveCard","pickerTriggerSaveFeedback"],"mappings":"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"}