{"version":3,"file":"dataengineeringformachinelearning-viking-ui.mjs","sources":["../../src/core/focus.ts","../../src/core/field-a11y.ts","../../src/core/theme.ts","../../src/core/uid.ts","../../src/core/dialog-session.ts","../../src/core/toast-store.ts","../../src/core/optimistic.ts","../../src/core/command-history.ts","../../src/core/lucide-paths.generated.ts","../../src/core/brand-icons.ts","../../src/core/integration-brand-icons.ts","../../src/core/icons.ts","../../src/lib/icon/icon.ts","../../src/lib/toast/toast.ts","../../src/lib/command-history/command-history.service.ts","../../src/core/selection-model.ts","../../src/core/safe-href.ts","../../src/lib/button/button.ts","../../src/lib/bulk-toolbar/bulk-toolbar.ts","../../src/core/disclosure.ts","../../src/lib/disclosure/disclosure.ts","../../src/core/keyboard-shortcuts.ts","../../src/lib/shortcut-help/shortcut-help.service.ts","../../src/lib/kbd/kbd.ts","../../src/lib/modal/modal.ts","../../src/lib/shortcut-help/shortcut-help.ts","../../src/core/preferences.ts","../../src/core/activity-log.ts","../../src/core/onboarding.ts","../../src/web/search-palette/recent-searches.ts","../../src/core/suite-data-pack.ts","../../src/lib/theme/theme.service.ts","../../src/lib/preferences/preferences.service.ts","../../src/lib/activity-list/activity-list.ts","../../src/lib/callout/callout.ts","../../src/lib/core/cva.ts","../../src/lib/checkbox/checkbox.ts","../../src/lib/preferences/preferences-panel.ts","../../src/lib/preferences/preferences-host.ts","../../src/lib/onboarding-checklist/onboarding-checklist.ts","../../src/core/fetch-handle.ts","../../src/core/swr-cache.ts","../../src/core/sanitize-text.ts","../../src/core/deml-widgets.ts","../../src/tokens/series-presets.ts","../../src/web/core/base.ts","../../src/web/core/dom.ts","../../src/lib/core/lucide-paths.generated.ts","../../src/lib/core/brand-icons.ts","../../src/lib/core/integration-brand-icons.ts","../../src/lib/core/icons.ts","../../src/web/core/icons-inline.ts","../../src/web/core/styles.ts","../../src/web/badge/viking-badge-wc.ts","../../src/web/button/viking-button-wc.ts","../../src/web/callout/viking-callout-wc.ts","../../src/web/card/viking-card-wc.ts","../../src/web/field/viking-field-wc.ts","../../src/web/input/viking-input-wc.ts","../../src/web/modal/viking-modal-wc.ts","../../src/web/search-palette/rank-search.ts","../../src/web/search-palette/viking-search-palette-wc.ts","../../src/web/status-card/viking-status-card-wc.ts","../../src/web/status-pill/viking-status-pill-wc.ts","../../src/lib/site-drakkar/site-drakkar.config.ts","../../src/web/core/parsers.ts","../../src/web/core/reactive.ts","../../src/web/site-footer/viking-site-footer-wc.ts","../../src/web/site-navbar/viking-site-navbar-wc.ts","../../src/lib/site-drakkar/suite-search-items.ts","../../src/web/core/algolia-search.ts","../../src/web/suite-search-palette/viking-suite-search-palette-wc.ts","../../src/web/theme-toggle/viking-theme-toggle-wc.ts","../../src/web/suite-header/viking-suite-header-wc.ts","../../src/web/select/viking-select-wc.ts","../../src/web/index.ts","../../src/lib/theme-toggle/theme-toggle.ts","../../src/lib/site-drakkar/site-navbar.ts","../../src/lib/footer/footer.ts","../../src/lib/site-drakkar/site-footer.ts","../../src/lib/app-header/app-header.ts","../../src/lib/app-sidebar/app-sidebar.ts","../../src/lib/app-layout/app-layout.ts","../../src/lib/accordion/accordion.ts","../../src/lib/separator/separator.ts","../../src/lib/auth-panel/auth-panel.ts","../../src/lib/autocomplete/autocomplete.ts","../../src/lib/avatar/avatar.ts","../../src/lib/badge/badge.ts","../../src/lib/bar/bar.ts","../../src/lib/box/box.ts","../../src/lib/brand/brand.ts","../../src/lib/breadcrumbs/breadcrumbs.ts","../../src/lib/button/button-group.ts","../../src/lib/calendar/calendar.ts","../../src/lib/skeleton/skeleton.ts","../../src/lib/card/card.ts","../../src/lib/icon-badge/icon-badge.ts","../../src/lib/typography/heading.ts","../../src/lib/card/card-title.ts","../../src/lib/carousel/carousel.ts","../../src/lib/chart/chart-zoom.ts","../../src/lib/chart/chart.ts","../../src/lib/chart-container/chart-container.ts","../../src/lib/field/field.ts","../../src/lib/spinner/spinner.ts","../../src/lib/input/input.ts","../../src/lib/typography/text.ts","../../src/lib/confirm-dialog/confirm-dialog.service.ts","../../src/lib/confirm-dialog/confirm-dialog.ts","../../src/lib/chart-card-header/chart-card-header.ts","../../src/lib/icon-heading/icon-heading.ts","../../src/lib/chart-empty-state/chart-empty-state.ts","../../src/lib/chart-panel/chart-panel.ts","../../src/lib/page-mockup/page-mockup.ts","../../src/lib/color-picker/color-picker.ts","../../src/lib/collection-preferences/collection-preferences.ts","../../src/lib/command/command.ts","../../src/lib/composer/composer.ts","../../src/lib/context/context.ts","../../src/lib/content-layout/content-layout.ts","../../src/lib/container/container.ts","../../src/lib/date-picker/date-picker.ts","../../src/lib/dropdown/dropdown.ts","../../src/lib/empty-state/empty-state.ts","../../src/lib/error-state/error-state.ts","../../src/lib/editor/editor.ts","../../src/lib/status-badge/status-badge.ts","../../src/lib/status-card/status-card.ts","../../src/lib/uptime-bar/uptime-bar.ts","../../src/lib/uptime-history/uptime-history.ts","../../src/lib/explore-card/explore-card.ts","../../src/lib/fab/fab.ts","../../src/lib/flashbar/flashbar.ts","../../src/lib/form-section/form-section.ts","../../src/lib/form-template/form-template.ts","../../src/lib/file-upload/file-upload.ts","../../src/lib/gauge-arc/gauge-arc.ts","../../src/lib/hud-panel/hud-panel.ts","../../src/lib/help-panel/help-panel.ts","../../src/lib/icon-text/icon-text.ts","../../src/lib/kanban/kanban.ts","../../src/lib/label/label.ts","../../src/lib/loading-overlay/loading-overlay.ts","../../src/lib/layout/layout.ts","../../src/lib/metric-card/metric-card.ts","../../src/lib/menubar/menubar.ts","../../src/lib/native-select/native-select.ts","../../src/lib/navigation-menu/navigation-menu.ts","../../src/lib/navbar/navbar.ts","../../src/lib/otp-input/otp-input.ts","../../src/lib/verification-code-field/verification-code-field.ts","../../src/lib/page-back-link/page-back-link.ts","../../src/lib/page-header/page-header.ts","../../src/lib/page-template/page-template.ts","../../src/lib/section-template/section-template.ts","../../src/lib/pagination/pagination.ts","../../src/lib/pillbox/pillbox.ts","../../src/lib/popover/popover.ts","../../src/lib/property-filter/property-filter.ts","../../src/lib/profile/profile.ts","../../src/lib/progress/progress.ts","../../src/lib/radio/radio.ts","../../src/lib/ring-gauge/ring-gauge.ts","../../src/lib/search-palette/search-palette.ts","../../src/lib/select/select.ts","../../src/lib/scroll-area/scroll-area.ts","../../src/lib/sheet/sheet.ts","../../src/lib/sidebar-nav/sidebar-nav.ts","../../src/lib/page-skeleton/page-skeleton.ts","../../src/lib/virtual-list/virtual-window.ts","../../src/lib/virtual-list/virtual-list.ts","../../src/lib/announcement-card/announcement-card.ts","../../src/lib/status-section/status-section.ts","../../src/lib/status-dashboard/status-dashboard.ts","../../src/lib/status-metric-row/status-metric-row.ts","../../src/lib/status-pill/status-pill.ts","../../src/lib/slider/slider.ts","../../src/lib/split-panel/split-panel.ts","../../src/lib/switch/switch.ts","../../src/lib/table/table.ts","../../src/lib/table/table-header.ts","../../src/lib/tabs/tabs.ts","../../src/lib/tabs/tab.ts","../../src/lib/tabs/tab-panel.ts","../../src/lib/textarea/textarea.ts","../../src/lib/toggle/toggle-group.ts","../../src/lib/toggle/toggle.ts","../../src/lib/time-picker/time-picker.ts","../../src/lib/timeline/timeline.ts","../../src/lib/pipeline-flow/pipeline-flow.ts","../../src/lib/stream-status/stream-status.ts","../../src/lib/status-panel/status-panel.ts","../../src/lib/whitepaper-cta/whitepaper-cta.ts","../../src/lib/wizard/wizard.ts","../../src/lib/tooltip/tooltip.ts","../../src/lib/suite-search-palette/suite-search-palette.ts","../../src/public-api.ts","../../src/dataengineeringformachinelearning-viking-ui.ts"],"sourcesContent":["/**\n * Suite focus helpers — keyboard navigation + restore after overlays.\n * Pure DOM utilities; safe to call from Angular effects / event handlers.\n */\n\nconst FOCUSABLE_SELECTOR = [\n  \"a[href]\",\n  \"area[href]\",\n  \"button:not([disabled])\",\n  \"input:not([disabled]):not([type='hidden'])\",\n  \"select:not([disabled])\",\n  \"textarea:not([disabled])\",\n  \"iframe\",\n  \"object\",\n  \"embed\",\n  \"[contenteditable]:not([contenteditable='false'])\",\n  \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\n/** True when the element can receive keyboard focus. */\nexport function isFocusable(el: Element | null | undefined): el is HTMLElement {\n  if (!(el instanceof HTMLElement)) return false;\n  if (\n    el.hasAttribute(\"disabled\") ||\n    el.getAttribute(\"aria-disabled\") === \"true\"\n  ) {\n    return false;\n  }\n  if (el.closest(\"[inert], [hidden], [aria-hidden='true']\")) return false;\n  const style = globalThis.getComputedStyle?.(el);\n  if (style && (style.visibility === \"hidden\" || style.display === \"none\")) {\n    return false;\n  }\n  return el.matches(FOCUSABLE_SELECTOR);\n}\n\n/** Focusable descendants in document order (excludes the container itself). */\nexport function getFocusableElements(root: ParentNode): HTMLElement[] {\n  const nodes = Array.from(\n    root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n  );\n  return nodes.filter((el) => isFocusable(el));\n}\n\n/** Move focus to the first focusable descendant, or the container if focusable. */\nexport function focusFirst(\n  root: HTMLElement,\n  options: FocusOptions = { preventScroll: true },\n): HTMLElement | null {\n  const candidates = getFocusableElements(root);\n  const target = candidates[0] ?? (isFocusable(root) ? root : null);\n  target?.focus(options);\n  return target;\n}\n\n/** Capture the element that should regain focus when an overlay closes. */\nexport function captureReturnFocus(\n  active: Element | null = typeof document !== \"undefined\"\n    ? document.activeElement\n    : null,\n): HTMLElement | null {\n  return active instanceof HTMLElement ? active : null;\n}\n\n/** Restore focus after dismiss; no-op if the node is gone or not focusable. */\nexport function restoreFocus(\n  el: HTMLElement | null | undefined,\n  options: FocusOptions = { preventScroll: true },\n): void {\n  if (!el || !el.isConnected) return;\n  try {\n    el.focus(options);\n  } catch {\n    /* ignore detached / non-focusable hosts */\n  }\n}\n\nexport type RovingKey =\n  | \"ArrowRight\"\n  | \"ArrowLeft\"\n  | \"ArrowDown\"\n  | \"ArrowUp\"\n  | \"Home\"\n  | \"End\";\n\n/**\n * Roving tabindex index math for tablists / menubars.\n * Returns the next index, or null if the key is not a navigation key.\n */\nexport function nextRovingIndex(\n  key: string,\n  currentIndex: number,\n  length: number,\n  options: { vertical?: boolean; wrap?: boolean } = {},\n): number | null {\n  if (length <= 0) return null;\n  const wrap = options.wrap !== false;\n  const vertical = options.vertical === true;\n  let next = currentIndex;\n\n  switch (key) {\n    case \"ArrowRight\":\n      if (vertical) return null;\n      next = currentIndex + 1;\n      break;\n    case \"ArrowLeft\":\n      if (vertical) return null;\n      next = currentIndex - 1;\n      break;\n    case \"ArrowDown\":\n      if (!vertical) return null;\n      next = currentIndex + 1;\n      break;\n    case \"ArrowUp\":\n      if (!vertical) return null;\n      next = currentIndex - 1;\n      break;\n    case \"Home\":\n      return 0;\n    case \"End\":\n      return length - 1;\n    default:\n      return null;\n  }\n\n  if (wrap) {\n    return (next + length) % length;\n  }\n  return Math.max(0, Math.min(length - 1, next));\n}\n\n/**\n * Horizontal menubar / tablist key handler helper.\n * When orientation is \"both\", arrows work in either axis (FORJD tabs).\n */\nexport function nextRovingIndexBothAxes(\n  key: string,\n  currentIndex: number,\n  length: number,\n): number | null {\n  if (length <= 0) return null;\n  switch (key) {\n    case \"ArrowRight\":\n    case \"ArrowDown\":\n      return (currentIndex + 1) % length;\n    case \"ArrowLeft\":\n    case \"ArrowUp\":\n      return (currentIndex - 1 + length) % length;\n    case \"Home\":\n      return 0;\n    case \"End\":\n      return length - 1;\n    default:\n      return null;\n  }\n}\n\n/** Horizontal menubar / nav list. */\nexport function nextRovingIndexHorizontal(\n  key: string,\n  currentIndex: number,\n  length: number,\n): number | null {\n  return nextRovingIndex(key, currentIndex, length, { vertical: false });\n}\n\n/**\n * Trap Tab / Shift+Tab inside an overlay root (WCAG 2.4.3 + focus retention).\n * Prefer native <dialog>.showModal() when available; this is a defensive fallback.\n */\nexport function trapTabKey(event: KeyboardEvent, root: HTMLElement): void {\n  if (event.key !== \"Tab\") return;\n  const items = getFocusableElements(root);\n  if (items.length === 0) {\n    event.preventDefault();\n    root.focus({ preventScroll: true });\n    return;\n  }\n  const first = items[0];\n  const last = items[items.length - 1];\n  const active =\n    typeof document !== \"undefined\" ? document.activeElement : null;\n  if (event.shiftKey) {\n    if (active === first || !root.contains(active)) {\n      event.preventDefault();\n      last.focus({ preventScroll: true });\n    }\n    return;\n  }\n  if (active === last || !root.contains(active)) {\n    event.preventDefault();\n    first.focus({ preventScroll: true });\n  }\n}\n","/**\n * Field validation a11y — associate description/error with the control and\n * surface invalid state (WCAG 1.3.1 / 3.3.1 / 4.1.2 / 4.1.3).\n */\n\n/** Native + suite control hosts that can receive aria-invalid / describedby. */\nexport const FIELD_CONTROL_SELECTOR = [\n  'input:not([type=\"hidden\"]):not([type=\"submit\"]):not([type=\"button\"]):not([type=\"reset\"]):not([type=\"image\"])',\n  \"textarea\",\n  \"select\",\n  '[role=\"combobox\"]',\n  '[role=\"textbox\"]',\n  '[role=\"spinbutton\"]',\n  '[role=\"searchbox\"]',\n  \"viking-input-wc\",\n].join(\",\");\n\nexport type FieldMessageIds = {\n  descriptionId: string;\n  errorId: string;\n  hasDescription: boolean;\n  hasError: boolean;\n};\n\n/** Space-separated id list for aria-describedby (description kept when error). */\nexport function fieldDescribedBy(ids: FieldMessageIds): string | null {\n  const parts: string[] = [];\n  if (ids.hasDescription) parts.push(ids.descriptionId);\n  if (ids.hasError) parts.push(ids.errorId);\n  return parts.length ? parts.join(\" \") : null;\n}\n\nexport function findFieldControl(root: ParentNode): HTMLElement | null {\n  const found = root.querySelector(FIELD_CONTROL_SELECTOR);\n  return found instanceof HTMLElement ? found : null;\n}\n\n/**\n * Wire aria-describedby + aria-invalid (+ optional required) onto the field control.\n * Safe to call from afterRenderEffect whenever messages change.\n */\nexport function syncFieldControlA11y(\n  root: ParentNode,\n  ids: FieldMessageIds & { required?: boolean },\n): HTMLElement | null {\n  const control = findFieldControl(root);\n  if (!control) return null;\n\n  const describedBy = fieldDescribedBy(ids);\n  if (describedBy) {\n    control.setAttribute(\"aria-describedby\", describedBy);\n  } else {\n    control.removeAttribute(\"aria-describedby\");\n  }\n\n  if (ids.hasError) {\n    control.setAttribute(\"aria-invalid\", \"true\");\n    // viking-input-wc keys invalid chrome off the `error` attribute\n    if (\n      control.localName === \"viking-input-wc\" ||\n      control.localName === \"viking-input\"\n    ) {\n      control.setAttribute(\"error\", \"\");\n    }\n  } else {\n    control.removeAttribute(\"aria-invalid\");\n    if (\n      control.localName === \"viking-input-wc\" ||\n      control.localName === \"viking-input\"\n    ) {\n      control.removeAttribute(\"error\");\n    }\n  }\n\n  if (ids.required) {\n    control.setAttribute(\"aria-required\", \"true\");\n    if (\n      control instanceof HTMLInputElement ||\n      control instanceof HTMLTextAreaElement ||\n      control instanceof HTMLSelectElement\n    ) {\n      control.required = true;\n    }\n  }\n\n  return control;\n}\n","/**\n * Suite theme preference — light / dark / system.\n * Persist preference; resolve against prefers-color-scheme; apply data-theme.\n */\n\nexport type SuiteThemePreference = \"light\" | \"dark\" | \"system\";\nexport type SuiteThemeResolved = \"light\" | \"dark\";\n\n/** Canonical storage key (migrates legacy `theme`). */\nexport const SUITE_THEME_STORAGE_KEY = \"suite-theme\";\nconst LEGACY_THEME_STORAGE_KEY = \"theme\";\n\nexport const SUITE_THEME_CHANGE_EVENT = \"suite-theme-change\";\n\nexport function prefersDarkScheme(\n  media: MediaQueryList | null | undefined = typeof window !== \"undefined\"\n    ? window.matchMedia(\"(prefers-color-scheme: dark)\")\n    : null,\n): boolean {\n  return media?.matches ?? true;\n}\n\n/** WCAG 2.3.3 — true when the user asks for reduced motion. */\nexport function prefersReducedMotion(\n  media: MediaQueryList | null | undefined = typeof window !== \"undefined\"\n    ? window.matchMedia(\"(prefers-reduced-motion: reduce)\")\n    : null,\n): boolean {\n  return media?.matches ?? false;\n}\n\nexport function resolveSuiteTheme(\n  preference: SuiteThemePreference,\n  systemPrefersDark: boolean = prefersDarkScheme(),\n): SuiteThemeResolved {\n  if (preference === \"system\") {\n    return systemPrefersDark ? \"dark\" : \"light\";\n  }\n  return preference;\n}\n\n/** Accessible name for the suite theme toggle (voice / SR). */\nexport function suiteThemeToggleAriaLabel(\n  preference: SuiteThemePreference,\n  resolved: SuiteThemeResolved,\n): string {\n  if (preference === \"system\") {\n    return resolved === \"dark\"\n      ? \"Theme: system (dark). Switch to light\"\n      : \"Theme: system (light). Switch to dark\";\n  }\n  return resolved === \"dark\"\n    ? \"Theme: dark. Switch to light\"\n    : \"Theme: light. Switch to dark\";\n}\n\nexport function parseSuiteThemePreference(\n  value: string | null | undefined,\n): SuiteThemePreference | null {\n  if (value === \"light\" || value === \"dark\" || value === \"system\") {\n    return value;\n  }\n  return null;\n}\n\n/** Read preference: suite-theme → legacy theme → system. */\nexport function readSuiteThemePreference(\n  storage: Pick<Storage, \"getItem\"> | null | undefined = typeof localStorage !==\n  \"undefined\"\n    ? localStorage\n    : null,\n): SuiteThemePreference {\n  if (!storage) return \"system\";\n  const modern = parseSuiteThemePreference(\n    storage.getItem(SUITE_THEME_STORAGE_KEY),\n  );\n  if (modern) return modern;\n  const legacy = parseSuiteThemePreference(\n    storage.getItem(LEGACY_THEME_STORAGE_KEY),\n  );\n  // Legacy only stored light|dark — treat as explicit preference.\n  if (legacy === \"light\" || legacy === \"dark\") return legacy;\n  return \"system\";\n}\n\nexport function writeSuiteThemePreference(\n  preference: SuiteThemePreference,\n  storage:\n    | Pick<Storage, \"setItem\" | \"removeItem\">\n    | null\n    | undefined = typeof localStorage !== \"undefined\" ? localStorage : null,\n): void {\n  if (!storage) return;\n  storage.setItem(SUITE_THEME_STORAGE_KEY, preference);\n  // Keep legacy key in sync for older FOUC scripts / WC readers.\n  if (preference === \"system\") {\n    storage.removeItem(LEGACY_THEME_STORAGE_KEY);\n  } else {\n    storage.setItem(LEGACY_THEME_STORAGE_KEY, preference);\n  }\n}\n\n/** Apply resolved theme to the document. Returns true when DOM actually changed. */\nexport function applySuiteTheme(\n  resolved: SuiteThemeResolved,\n  root: HTMLElement | null = typeof document !== \"undefined\"\n    ? document.documentElement\n    : null,\n): boolean {\n  if (!root) return false;\n  const already =\n    root.getAttribute(\"data-theme\") === resolved &&\n    root.style.colorScheme === resolved &&\n    root.classList.contains(\"dark\") === (resolved === \"dark\");\n  if (already) return false;\n  root.setAttribute(\"data-theme\", resolved);\n  root.classList.toggle(\"dark\", resolved === \"dark\");\n  root.style.colorScheme = resolved;\n  return true;\n}\n\nexport function dispatchSuiteThemeChange(\n  detail: {\n    preference: SuiteThemePreference;\n    resolved: SuiteThemeResolved;\n  },\n  target: EventTarget | null = typeof window !== \"undefined\" ? window : null,\n): void {\n  if (!target) return;\n  target.dispatchEvent(\n    new CustomEvent(SUITE_THEME_CHANGE_EVENT, {\n      bubbles: true,\n      detail,\n    }),\n  );\n}\n\n// --- Single OS preference sync (shared by WC + any static hosts) ---\nlet systemThemeListenerBound = false;\n\n/**\n * Idempotent document-level listener: when preference is `system`, re-apply\n * on OS scheme changes. Avoids N theme-toggle instances each rewriting DOM.\n */\nexport function ensureSuiteSystemThemeListener(): void {\n  if (systemThemeListenerBound || typeof window === \"undefined\") return;\n  if (typeof window.matchMedia !== \"function\") return;\n  systemThemeListenerBound = true;\n  const media = window.matchMedia(\"(prefers-color-scheme: dark)\");\n  media.addEventListener(\"change\", () => {\n    if (readSuiteThemePreference() !== \"system\") return;\n    const resolved = resolveSuiteTheme(\"system\", prefersDarkScheme(media));\n    if (applySuiteTheme(resolved)) {\n      dispatchSuiteThemeChange({ preference: \"system\", resolved });\n    }\n  });\n}\n\n/** Toggle resolved appearance and persist as an explicit light/dark choice. */\nexport function toggleSuiteThemePreference(\n  preference: SuiteThemePreference,\n  systemPrefersDark: boolean = prefersDarkScheme(),\n): SuiteThemePreference {\n  const resolved = resolveSuiteTheme(preference, systemPrefersDark);\n  return resolved === \"dark\" ? \"light\" : \"dark\";\n}\n\n/** Cycle system → light → dark → system (for controls that expose all modes). */\nexport function cycleSuiteThemePreference(\n  preference: SuiteThemePreference,\n): SuiteThemePreference {\n  switch (preference) {\n    case \"system\":\n      return \"light\";\n    case \"light\":\n      return \"dark\";\n    case \"dark\":\n      return \"system\";\n  }\n}\n\n/**\n * Inline FOUC bootstrap (copy into <head> scripts).\n * Mirrors read → resolve → apply without writing storage.\n */\nexport function bootstrapSuiteThemeInline(): string {\n  return `(function(){try{var k=${JSON.stringify(SUITE_THEME_STORAGE_KEY)};var legacy=${JSON.stringify(LEGACY_THEME_STORAGE_KEY)};var p=localStorage.getItem(k)||localStorage.getItem(legacy);var pref=(p==='light'||p==='dark'||p==='system')?p:'system';var dark=window.matchMedia('(prefers-color-scheme: dark)').matches;var theme=pref==='system'?(dark?'dark':'light'):pref;var r=document.documentElement;r.setAttribute('data-theme',theme);r.classList.toggle('dark',theme==='dark');r.style.colorScheme=theme;}catch(e){}})();`;\n}\n","/** Builds a stable unique-id factory (shared by vikingUid / forjdUid). */\nexport function createUidFactory(\n  _namespace = \"suite\",\n): (prefix: string) => string {\n  let counter = 0;\n  return (prefix: string): string => {\n    counter += 1;\n    return `${prefix}-${counter}`;\n  };\n}\n\n/** Generates a stable, unique DOM id for label/control associations. */\nexport const vikingUid = createUidFactory(\"viking\");\n","/**\n * Native <dialog> focus session — shared by modal/sheet (and forjd dialog/sheet).\n * Captures return focus, opens via showModal, traps Tab, restores on close.\n */\n\nimport {\n  captureReturnFocus,\n  focusFirst,\n  restoreFocus,\n  trapTabKey,\n} from \"./focus\";\n\n/** Stateful helper for one native dialog host at a time. */\nexport class NativeDialogSession {\n  private returnFocus: HTMLElement | null = null;\n\n  /**\n   * Sync `open` model → dialog.showModal() / close().\n   * Pass `connected: false` when the host is detached (SSR / destroy).\n   */\n  syncOpen(\n    dialog: HTMLDialogElement,\n    wantOpen: boolean,\n    options?: { connected?: boolean },\n  ): void {\n    if (typeof dialog.showModal !== \"function\") {\n      return;\n    }\n    const connected = options?.connected !== false;\n    if (wantOpen && connected && !dialog.open) {\n      this.returnFocus = captureReturnFocus();\n      dialog.showModal();\n      queueMicrotask(() => focusFirst(dialog));\n    } else if (!wantOpen && dialog.open) {\n      dialog.close();\n    }\n  }\n\n  /** Native `close` event — clear model + restore focus. */\n  onNativeClose(setClosed: () => void): void {\n    setClosed();\n    restoreFocus(this.returnFocus);\n    this.returnFocus = null;\n  }\n\n  /** Backdrop click on the dialog element itself. */\n  onBackdropClick(\n    event: MouseEvent,\n    dialog: HTMLDialogElement,\n    dismissible: boolean,\n    close: () => void,\n  ): void {\n    if (!dismissible) {\n      return;\n    }\n    if (event.target === dialog) {\n      close();\n    }\n  }\n\n  /** Defensive Tab trap (complements native modal focus retention). */\n  onKeydown(event: KeyboardEvent, dialog: HTMLDialogElement): void {\n    trapTabKey(event, dialog);\n  }\n\n  /** Close on destroy if still open. */\n  destroy(dialog: HTMLDialogElement | null | undefined): void {\n    if (dialog?.open) {\n      dialog.close();\n    }\n  }\n}\n","/**\n * Priority-aware toast queue — shared shape for VikingToastService / FjToastService.\n * Non-intrusive: capped visible stack, importance ordering, dedupe, sticky critical.\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/toast-store (FORJD ADR-0020).\n */\n\nimport { signal, type Signal } from \"@angular/core\";\n\nexport type ToastPriority = \"low\" | \"normal\" | \"high\" | \"critical\";\n\nexport type ToastStoreItem = {\n  readonly id: number;\n  readonly priority: ToastPriority;\n  /** When set, a new toast with the same key replaces the prior one. */\n  readonly dedupeKey?: string;\n};\n\nexport type ToastStore<TMessage extends ToastStoreItem> = {\n  readonly messages: Signal<readonly TMessage[]>;\n  nextId: () => number;\n  add: (message: TMessage, durationMs?: number) => number;\n  dismiss: (id: number) => void;\n  clear: () => void;\n  /** Pause auto-dismiss (e.g. pointer hover) — non-intrusive reading time. */\n  pause: (id?: number) => void;\n  /** Resume auto-dismiss after pause. */\n  resume: (id?: number) => void;\n};\n\nexport type CreateToastStoreOptions = {\n  readonly defaultDurationMs?: number;\n  /** Max simultaneous toasts; lower-priority / older ones are dropped. */\n  readonly maxVisible?: number;\n  readonly durationByPriority?: Partial<Record<ToastPriority, number>>;\n};\n\nconst PRIORITY_RANK: Record<ToastPriority, number> = {\n  low: 0,\n  normal: 1,\n  high: 2,\n  critical: 3,\n};\n\nconst DEFAULT_DURATION_BY_PRIORITY: Record<ToastPriority, number> = {\n  low: 2800,\n  normal: 4000,\n  high: 7000,\n  /** Sticky until dismiss — critical must not vanish under the user. */\n  critical: 0,\n};\n\nexport function toastPriorityRank(priority: ToastPriority): number {\n  return PRIORITY_RANK[priority] ?? 1;\n}\n\n/** Map suite tones to a default importance (callers may override). */\nexport function toastPriorityFromTone(\n  tone: string | undefined | null,\n): ToastPriority {\n  switch (tone) {\n    case \"danger\":\n      return \"critical\";\n    case \"warning\":\n      return \"high\";\n    case \"success\":\n      return \"low\";\n    case \"info\":\n    case \"accent\":\n    case \"muted\":\n    default:\n      return \"normal\";\n  }\n}\n\nexport function defaultToastDurationMs(\n  priority: ToastPriority,\n  overrides?: Partial<Record<ToastPriority, number>>,\n): number {\n  return (\n    overrides?.[priority] ?? DEFAULT_DURATION_BY_PRIORITY[priority] ?? 4000\n  );\n}\n\nfunction sortByImportance<T extends ToastStoreItem>(list: readonly T[]): T[] {\n  return [...list].sort((a, b) => {\n    const byPriority =\n      toastPriorityRank(b.priority) - toastPriorityRank(a.priority);\n    if (byPriority !== 0) {\n      return byPriority;\n    }\n    // Newer first within the same priority.\n    return b.id - a.id;\n  });\n}\n\ntype TimerState = {\n  remainingMs: number;\n  startedAt: number;\n  handle: ReturnType<typeof setTimeout> | null;\n  paused: boolean;\n};\n\nexport function createToastStore<TMessage extends ToastStoreItem>(options?: {\n  defaultDurationMs?: number;\n  maxVisible?: number;\n  durationByPriority?: Partial<Record<ToastPriority, number>>;\n}): ToastStore<TMessage> {\n  const maxVisible = Math.max(1, options?.maxVisible ?? 3);\n  const durationByPriority = {\n    ...DEFAULT_DURATION_BY_PRIORITY,\n    ...(options?.durationByPriority ?? {}),\n  };\n  const fallbackDuration = options?.defaultDurationMs ?? 4500;\n  let seq = 0;\n  const items = signal<TMessage[]>([]);\n  const timers = new Map<number, TimerState>();\n\n  const clearTimer = (id: number): void => {\n    const state = timers.get(id);\n    if (state?.handle != null) {\n      clearTimeout(state.handle);\n    }\n    timers.delete(id);\n  };\n\n  const dismiss = (id: number): void => {\n    clearTimer(id);\n    items.update((list) => list.filter((m) => m.id !== id));\n  };\n\n  const schedule = (id: number, durationMs: number): void => {\n    clearTimer(id);\n    if (durationMs <= 0 || typeof globalThis.setTimeout !== \"function\") {\n      return;\n    }\n    const state: TimerState = {\n      remainingMs: durationMs,\n      startedAt: Date.now(),\n      handle: null,\n      paused: false,\n    };\n    state.handle = globalThis.setTimeout(() => dismiss(id), durationMs);\n    timers.set(id, state);\n  };\n\n  return {\n    messages: items.asReadonly(),\n    nextId: () => ++seq,\n    add: (message, durationMs) => {\n      const resolvedDuration =\n        durationMs ?? durationByPriority[message.priority] ?? fallbackDuration;\n\n      items.update((list) => {\n        let next = list;\n        if (message.dedupeKey) {\n          const prior = list.find((row) => row.dedupeKey === message.dedupeKey);\n          if (prior) {\n            clearTimer(prior.id);\n            next = list.filter((row) => row.id !== prior.id);\n          }\n        }\n        next = sortByImportance([...next, message]);\n        while (next.length > maxVisible) {\n          const evicted = next[next.length - 1]!;\n          clearTimer(evicted.id);\n          next = next.slice(0, -1);\n        }\n        return next;\n      });\n\n      schedule(message.id, resolvedDuration);\n      return message.id;\n    },\n    dismiss,\n    clear: () => {\n      for (const id of timers.keys()) {\n        clearTimer(id);\n      }\n      items.set([]);\n    },\n    pause: (id) => {\n      const targets =\n        id == null ? [...timers.keys()] : timers.has(id) ? [id] : [];\n      for (const target of targets) {\n        const state = timers.get(target);\n        if (!state || state.paused || state.handle == null) {\n          continue;\n        }\n        clearTimeout(state.handle);\n        const elapsed = Date.now() - state.startedAt;\n        state.remainingMs = Math.max(0, state.remainingMs - elapsed);\n        state.handle = null;\n        state.paused = true;\n      }\n    },\n    resume: (id) => {\n      const targets =\n        id == null ? [...timers.keys()] : timers.has(id) ? [id] : [];\n      for (const target of targets) {\n        const state = timers.get(target);\n        if (!state || !state.paused) {\n          continue;\n        }\n        state.paused = false;\n        if (state.remainingMs <= 0) {\n          dismiss(target);\n          continue;\n        }\n        state.startedAt = Date.now();\n        state.handle = globalThis.setTimeout(\n          () => dismiss(target),\n          state.remainingMs,\n        );\n      }\n    },\n  };\n}\n","/**\n * Optimistic apply → persist → rollback on failure.\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/optimistic.\n */\n\nexport type OptimisticResult =\n  | { readonly ok: true }\n  | { readonly ok: false; readonly error: unknown };\n\nexport type RunOptimisticOptions<TSnapshot> = {\n  /** Capture prior state before apply (used only on rollback). */\n  snapshot: () => TSnapshot;\n  /** Immediate UI update. */\n  apply: () => void;\n  /** Persist / network / storage — sync or async. */\n  persist: () => void | Promise<void>;\n  /** Restore snapshot when persist throws. */\n  rollback: (snapshot: TSnapshot) => void;\n};\n\n/**\n * Apply UI optimistically, then persist. On persist failure, rollback and\n * return `{ ok: false, error }` without rethrowing (callers may toast).\n */\nexport async function runOptimistic<TSnapshot>(\n  options: RunOptimisticOptions<TSnapshot>,\n): Promise<OptimisticResult> {\n  const prior = options.snapshot();\n  options.apply();\n  try {\n    await options.persist();\n    return { ok: true };\n  } catch (error: unknown) {\n    try {\n      options.rollback(prior);\n    } catch {\n      // Rollback must not mask the original persist failure.\n    }\n    return { ok: false, error };\n  }\n}\n","/**\n * Undo/redo stack for reversible client actions (FORJD ADR-0019).\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/command-history.\n *\n * Use for local UI mutations (theme, recent searches, soft client state).\n * Do not invent server soft-delete here — irreversible API deletes stay confirm-only.\n */\n\nexport type HistoryEntry = {\n  readonly id: string;\n  readonly label: string;\n  readonly undo: () => void | Promise<void>;\n  readonly redo: () => void | Promise<void>;\n};\n\nexport type RunHistoryCommand = {\n  readonly label: string;\n  /** Forward action — runs immediately; history records only on success. */\n  readonly do: () => void | Promise<void>;\n  /** Inverse — restores prior state. */\n  readonly undo: () => void | Promise<void>;\n  readonly id?: string;\n};\n\nexport type CommandHistory = {\n  run: (command: RunHistoryCommand) => Promise<void>;\n  undo: () => Promise<boolean>;\n  redo: () => Promise<boolean>;\n  clear: () => void;\n  canUndo: () => boolean;\n  canRedo: () => boolean;\n  undoLabel: () => string | null;\n  redoLabel: () => string | null;\n  subscribe: (listener: () => void) => () => void;\n};\n\nexport type CreateCommandHistoryOptions = {\n  readonly maxDepth?: number;\n};\n\nconst DEFAULT_MAX_DEPTH = 40;\n\nlet defaultHistory: CommandHistory | null = null;\nlet defaultUnbindShortcuts: (() => void) | null = null;\nlet historySeq = 0;\n\n/** Shared suite history so Angular hosts and optional WC callers share one stack. */\nexport function getDefaultCommandHistory(\n  options?: CreateCommandHistoryOptions,\n): CommandHistory {\n  if (!defaultHistory) {\n    defaultHistory = createCommandHistory(options);\n    // One global shortcut binding for the shared stack (avoid double ⌘Z).\n    if (typeof document !== \"undefined\") {\n      defaultUnbindShortcuts = bindCommandHistoryShortcuts(defaultHistory);\n    }\n  }\n  return defaultHistory;\n}\n\n/** @internal test helper — reset the shared singleton. */\nexport function resetDefaultCommandHistoryForTests(): void {\n  defaultUnbindShortcuts?.();\n  defaultUnbindShortcuts = null;\n  defaultHistory = null;\n}\n\nexport function createCommandHistory(\n  options?: CreateCommandHistoryOptions,\n): CommandHistory {\n  const maxDepth = Math.max(1, options?.maxDepth ?? DEFAULT_MAX_DEPTH);\n  const undoStack: HistoryEntry[] = [];\n  const redoStack: HistoryEntry[] = [];\n  const listeners = new Set<() => void>();\n  let busy = false;\n\n  const notify = (): void => {\n    for (const listener of listeners) {\n      try {\n        listener();\n      } catch {\n        // Listener failures must not break the stack.\n      }\n    }\n  };\n\n  const pushUndo = (entry: HistoryEntry): void => {\n    undoStack.push(entry);\n    while (undoStack.length > maxDepth) {\n      undoStack.shift();\n    }\n    redoStack.length = 0;\n    notify();\n  };\n\n  return {\n    async run(command) {\n      if (busy) {\n        return;\n      }\n      busy = true;\n      try {\n        await command.do();\n        pushUndo({\n          id: command.id ?? `cmd-${++historySeq}`,\n          label: command.label.trim() || \"Action\",\n          undo: command.undo,\n          redo: command.do,\n        });\n      } finally {\n        busy = false;\n      }\n    },\n\n    async undo() {\n      if (busy || undoStack.length === 0) {\n        return false;\n      }\n      busy = true;\n      const entry = undoStack.pop()!;\n      try {\n        await entry.undo();\n        redoStack.push(entry);\n        notify();\n        return true;\n      } catch {\n        undoStack.push(entry);\n        notify();\n        return false;\n      } finally {\n        busy = false;\n      }\n    },\n\n    async redo() {\n      if (busy || redoStack.length === 0) {\n        return false;\n      }\n      busy = true;\n      const entry = redoStack.pop()!;\n      try {\n        await entry.redo();\n        undoStack.push(entry);\n        while (undoStack.length > maxDepth) {\n          undoStack.shift();\n        }\n        notify();\n        return true;\n      } catch {\n        redoStack.push(entry);\n        notify();\n        return false;\n      } finally {\n        busy = false;\n      }\n    },\n\n    clear() {\n      undoStack.length = 0;\n      redoStack.length = 0;\n      notify();\n    },\n\n    canUndo: () => undoStack.length > 0,\n    canRedo: () => redoStack.length > 0,\n    undoLabel: () => undoStack[undoStack.length - 1]?.label ?? null,\n    redoLabel: () => redoStack[redoStack.length - 1]?.label ?? null,\n\n    subscribe(listener) {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n  if (!(target instanceof HTMLElement)) {\n    return false;\n  }\n  const tag = target.tagName;\n  if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") {\n    return true;\n  }\n  if (target.isContentEditable) {\n    return true;\n  }\n  return Boolean(target.closest(\"[contenteditable='true']\"));\n}\n\n/**\n * Bind ⌘Z / Ctrl+Z (undo) and ⌘⇧Z / Ctrl+Y (redo).\n * Skips when focus is in an editable field.\n */\nexport function bindCommandHistoryShortcuts(\n  history: CommandHistory,\n  options?: { readonly target?: Document },\n): () => void {\n  const doc =\n    options?.target ?? (typeof document !== \"undefined\" ? document : null);\n  if (!doc) {\n    return () => undefined;\n  }\n\n  const onKeydown = (event: KeyboardEvent): void => {\n    if (!event.metaKey && !event.ctrlKey) {\n      return;\n    }\n    if (isEditableTarget(event.target)) {\n      return;\n    }\n    const key = event.key.toLowerCase();\n    const shiftRedo = key === \"z\" && event.shiftKey;\n    const yankRedo = key === \"y\" && !event.shiftKey;\n    if (key === \"z\" && !event.shiftKey) {\n      if (!history.canUndo()) {\n        return;\n      }\n      event.preventDefault();\n      void history.undo();\n      return;\n    }\n    if (shiftRedo || yankRedo) {\n      if (!history.canRedo()) {\n        return;\n      }\n      event.preventDefault();\n      void history.redo();\n    }\n  };\n\n  doc.addEventListener(\"keydown\", onKeydown);\n  return () => doc.removeEventListener(\"keydown\", onKeydown);\n}\n","/**\n * AUTO-GENERATED by scripts/sync_lucide_icons.mjs — do not edit by hand.\n * Lucide paths are inlined at build time; lucide is a devDependency only.\n * @see https://lucide.dev\n */\nexport const LUCIDE_ICON_PATHS = {\n  \"alert-circle\":\n    '<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>',\n  \"alert-triangle\":\n    '<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>',\n  \"arrow-left\": '<path d=\"m12 19-7-7 7-7\"/><path d=\"M19 12H5\"/>',\n  \"arrow-right\": '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n  \"arrow-up-right\": '<path d=\"M7 7h10v10\"/><path d=\"M7 17 17 7\"/>',\n  \"bar-chart\":\n    '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n  bell: '<path d=\"M10.268 21a2 2 0 0 0 3.464 0\"/><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"/>',\n  bold: '<path d=\"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\"/>',\n  bolt: '<path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"/>',\n  brain:\n    '<path d=\"M12 18V5\"/><path d=\"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\"/><path d=\"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\"/><path d=\"M17.997 5.125a4 4 0 0 1 2.526 5.77\"/><path d=\"M18 18a4 4 0 0 0 2-7.464\"/><path d=\"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\"/><path d=\"M6 18a4 4 0 0 1-2-7.464\"/><path d=\"M6.003 5.125a4 4 0 0 0-2.526 5.77\"/>',\n  bug: '<path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/>',\n  building:\n    '<path d=\"M12 10h.01\"/><path d=\"M12 14h.01\"/><path d=\"M12 6h.01\"/><path d=\"M16 10h.01\"/><path d=\"M16 14h.01\"/><path d=\"M16 6h.01\"/><path d=\"M8 10h.01\"/><path d=\"M8 14h.01\"/><path d=\"M8 6h.01\"/><path d=\"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/><rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\"/>',\n  calendar:\n    '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n  check: '<path d=\"M20 6 9 17l-5-5\"/>',\n  \"check-circle\": '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n  \"chevron-down\": '<path d=\"m6 9 6 6 6-6\"/>',\n  \"chevron-left\": '<path d=\"m15 18-6-6 6-6\"/>',\n  \"chevron-right\": '<path d=\"m9 18 6-6-6-6\"/>',\n  \"chevron-up\": '<path d=\"m18 15-6-6-6 6\"/>',\n  chip: '<path d=\"M12 20v2\"/><path d=\"M12 2v2\"/><path d=\"M17 20v2\"/><path d=\"M17 2v2\"/><path d=\"M2 12h2\"/><path d=\"M2 17h2\"/><path d=\"M2 7h2\"/><path d=\"M20 12h2\"/><path d=\"M20 17h2\"/><path d=\"M20 7h2\"/><path d=\"M7 20v2\"/><path d=\"M7 2v2\"/><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/><rect x=\"8\" y=\"8\" width=\"8\" height=\"8\" rx=\"1\"/>',\n  clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/>',\n  cloud: '<path d=\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\"/>',\n  cookie:\n    '<path d=\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5\"/><path d=\"M8.5 8.5v.01\"/><path d=\"M16 15.5v.01\"/><path d=\"M12 12v.01\"/><path d=\"M11 17v.01\"/><path d=\"M7 14v.01\"/>',\n  copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n  \"dots-horizontal\":\n    '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n  \"dots-vertical\":\n    '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n  download:\n    '<path d=\"M12 15V3\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m7 10 5 5 5-5\"/>',\n  external:\n    '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n  eye: '<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\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n  \"eye-off\":\n    '<path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\"/><path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\"/><path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\"/><path d=\"m2 2 20 20\"/>',\n  file: '<path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>',\n  filter:\n    '<path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\"/>',\n  fingerprint:\n    '<path d=\"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4\"/><path d=\"M14 13.12c0 2.38 0 6.38-1 8.88\"/><path d=\"M17.29 21.02c.12-.6.43-2.3.5-3.02\"/><path d=\"M2 12a10 10 0 0 1 18-6\"/><path d=\"M2 16h.01\"/><path d=\"M21.8 16c.2-2 .131-5.354 0-6\"/><path d=\"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2\"/><path d=\"M8.65 22c.21-.66.45-1.32.57-2\"/><path d=\"M9 6.8a6 6 0 0 1 9 5.2v2\"/>',\n  folder:\n    '<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"/>',\n  globe:\n    '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/>',\n  \"grip-vertical\":\n    '<circle cx=\"9\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n  heart:\n    '<path d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\"/>',\n  home: '<path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"/><path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/>',\n  image:\n    '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/>',\n  info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n  insights: '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"m19 9-5 5-4-4-3 3\"/>',\n  italic:\n    '<line x1=\"19\" x2=\"10\" y1=\"4\" y2=\"4\"/><line x1=\"14\" x2=\"5\" y1=\"20\" y2=\"20\"/><line x1=\"15\" x2=\"9\" y1=\"4\" y2=\"20\"/>',\n  key: '<path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"/><circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>',\n  link: '<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/>',\n  list: '<path d=\"M3 5h.01\"/><path d=\"M3 12h.01\"/><path d=\"M3 19h.01\"/><path d=\"M8 5h13\"/><path d=\"M8 12h13\"/><path d=\"M8 19h13\"/>',\n  \"list-ordered\":\n    '<path d=\"M11 5h10\"/><path d=\"M11 12h10\"/><path d=\"M11 19h10\"/><path d=\"M4 4h1v5\"/><path d=\"M4 9h2\"/><path d=\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\"/>',\n  loader: '<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>',\n  lock: '<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>',\n  \"log-in\":\n    '<path d=\"m10 17 5-5-5-5\"/><path d=\"M15 12H3\"/><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"/>',\n  \"log-out\":\n    '<path d=\"m16 17 5-5-5-5\"/><path d=\"M21 12H9\"/><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>',\n  mail: '<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"/><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>',\n  menu: '<path d=\"M4 5h16\"/><path d=\"M4 12h16\"/><path d=\"M4 19h16\"/>',\n  minus: '<path d=\"M5 12h14\"/>',\n  moon: '<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/>',\n  network:\n    '<rect x=\"16\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"2\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"9\" y=\"2\" width=\"6\" height=\"6\" rx=\"1\"/><path d=\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\"/><path d=\"M12 12V8\"/>',\n  paperclip:\n    '<path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"/>',\n  pencil:\n    '<path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/><path d=\"m15 5 4 4\"/>',\n  phone:\n    '<path d=\"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\"/>',\n  play: '<path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" fill=\"currentColor\" stroke=\"none\"/>',\n  plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n  policy:\n    '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"m9 12 2 2 4-4\"/>',\n  refresh:\n    '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M8 16H3v5\"/>',\n  rocket:\n    '<path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\"/><path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\"/><path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\"/><path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\"/>',\n  search: '<path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/>',\n  \"search-off\":\n    '<path d=\"m13.5 8.5-5 5\"/><path d=\"m8.5 8.5 5 5\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n  send: '<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\"/><path d=\"m21.854 2.147-10.94 10.939\"/>',\n  server:\n    '<rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/><rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\"/><line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\"/>',\n  settings:\n    '<path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n  shield:\n    '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/>',\n  ship: '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n  sparkle:\n    '<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/><path d=\"M20 2v4\"/><path d=\"M22 4h-4\"/><circle cx=\"4\" cy=\"20\" r=\"2\"/>',\n  speed: '<path d=\"m12 14 4-4\"/><path d=\"M3.34 19a10 10 0 1 1 17.32 0\"/>',\n  star: '<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\"/>',\n  sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2\"/><path d=\"M12 20v2\"/><path d=\"m4.93 4.93 1.41 1.41\"/><path d=\"m17.66 17.66 1.41 1.41\"/><path d=\"M2 12h2\"/><path d=\"M20 12h2\"/><path d=\"m6.34 17.66-1.41 1.41\"/><path d=\"m19.07 4.93-1.41 1.41\"/>',\n  terminal: '<path d=\"M12 19h8\"/><path d=\"m4 17 6-6-6-6\"/>',\n  trash:\n    '<path d=\"M10 11v6\"/><path d=\"M14 11v6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/>',\n  \"trending-up\": '<path d=\"M16 7h6v6\"/><path d=\"m22 7-8.5 8.5-5-5L2 17\"/>',\n  underline:\n    '<path d=\"M6 4v6a6 6 0 0 0 12 0V4\"/><line x1=\"4\" x2=\"20\" y1=\"20\" y2=\"20\"/>',\n  upload:\n    '<path d=\"M12 3v12\"/><path d=\"m17 8-5-5-5 5\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>',\n  user: '<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n  \"user-shield\":\n    '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"M6.376 18.91a6 6 0 0 1 11.249.003\"/><circle cx=\"12\" cy=\"11\" r=\"4\"/>',\n  x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n} as const;\n\nexport type LucideIconName = keyof typeof LUCIDE_ICON_PATHS;\n","/**\n * DEML branded icon paths — optimized SVG geometry (not sourced from Lucide).\n * Use via viking-icon name=\"deml\" | \"deml-compact\" | \"deml-lockup\".\n */\nexport const VIKING_BRAND_ICON_PATHS = {\n  /** Primary bar-chart mark in rounded frame (outline). */\n  deml: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/>',\n  /** Compact monogram for favicons and dense Drakkar shell. */\n  \"deml-compact\":\n    '<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"3\"/><path d=\"M9 16V12M12 16V9M15 16V13\"/>',\n  /** Lockup mark with baseline accent bar. */\n  \"deml-lockup\":\n    '<rect x=\"3\" y=\"3\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/><path d=\"M3 20h18\"/>',\n} as const;\n\n/** Drakkar — Viking-UI / site shell brand marks (Lucide ship, build-time inlined). */\nexport const VIKING_DRAKKAR_ICON_PATHS = {\n  /** Primary Drakkar longship mark (outline). */\n  drakkar:\n    '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n  /** Compact tile for favicons and dense navbar chrome. */\n  \"drakkar-compact\":\n    '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n  /** Lockup mark with baseline accent bar. */\n  \"drakkar-lockup\":\n    '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/><path d=\"M3 21h18\"/>',\n} as const;\n\n/** Filled-path overrides for DEML brand marks. */\nexport const VIKING_BRAND_ICON_FILLED_PATHS: Partial<\n  Record<keyof typeof VIKING_BRAND_ICON_PATHS, string>\n> = {\n  deml: '<path d=\"M5 4a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/>',\n  \"deml-compact\":\n    '<path d=\"M6 5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5zM9 12h1.5v4H9v-4zM12 9h1.5v7H12V9zM15 11h1.5v5H15v-5z\"/>',\n  \"deml-lockup\":\n    '<path d=\"M4 4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/><rect x=\"3\" y=\"19\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\n/** Filled-path overrides for Drakkar brand marks. */\nexport const VIKING_DRAKKAR_ICON_FILLED_PATHS: Partial<\n  Record<keyof typeof VIKING_DRAKKAR_ICON_PATHS, string>\n> = {\n  drakkar:\n    '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/>',\n  \"drakkar-compact\":\n    '<path d=\"M3 3h18a2 2 0 0 1 2 2v18a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\"/><path d=\"M7.5 12.5 12 9.8l4.5 2.7v2.2c0 .8-.5 1.4-1.2 1.7L12 17.8l-3.3-1.6c-.7-.3-1.2-.9-1.2-1.7v-2.2z\"/><rect x=\"11\" y=\"6\" width=\"2\" height=\"5.5\" rx=\"0.35\"/>',\n  \"drakkar-lockup\":\n    '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/><rect x=\"3\" y=\"20\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\nexport type VikingBrandIconName = keyof typeof VIKING_BRAND_ICON_PATHS;\n\nexport type VikingDrakkarIconName = keyof typeof VIKING_DRAKKAR_ICON_PATHS;\n\nexport const VIKING_BRAND_ICON_NAMES_LIST = Object.keys(\n  VIKING_BRAND_ICON_PATHS,\n) as VikingBrandIconName[];\n\nexport const VIKING_DRAKKAR_ICON_NAMES_LIST = Object.keys(\n  VIKING_DRAKKAR_ICON_PATHS,\n) as VikingDrakkarIconName[];\n","/** Official platform brand colors — exception for recognizable integration marks (same policy as Google/Apple in viking-icon). */\nexport const VIKING_INTEGRATION_BRAND_COLORS = {\n  kubernetes: \"#326CE5\",\n  tensorflow: \"#FF6F00\",\n  pytorch: \"#EE4C2C\",\n  \"apache-spark\": \"#E25A1C\",\n  databricks: \"#FF3621\",\n  \"aws-redshift\": \"#8C4FFF\",\n} as const;\n\nexport type VikingIntegrationBrandName =\n  keyof typeof VIKING_INTEGRATION_BRAND_COLORS;\n\nexport const VIKING_INTEGRATION_BRAND_NAMES = Object.keys(\n  VIKING_INTEGRATION_BRAND_COLORS,\n) as VikingIntegrationBrandName[];\n\nexport const isIntegrationBrandIcon = (\n  name: string,\n): name is VikingIntegrationBrandName =>\n  (VIKING_INTEGRATION_BRAND_NAMES as readonly string[]).includes(name);\n\n/**\n * Official product logo paths (24×24 viewBox) sourced from Simple Icons (CC0).\n * Inlined at build time — no runtime icon font or CDN.\n */\nconst VIKING_INTEGRATION_BRAND_PATHS: Record<\n  VikingIntegrationBrandName,\n  string\n> = {\n  kubernetes:\n    \"M10.204 14.35l.007.01-.999 2.413a5.171 5.171 0 0 1-2.075-2.597l2.578-.437.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.143 5.143 0 0 0-.73 3.255l2.514-.725.002-.009zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005.15-2.62a5.144 5.144 0 0 0-3.01 1.442l2.147 1.523.004-.002zm.76 2.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003 2.134-1.513a5.188 5.188 0 0 0-2.992-1.442l.148 2.615.002.001zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.583 1.583 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.606 1.606 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45 6.45 0 0 0-.105-2.332 6.465 6.465 0 0 0-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545 6.545 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142 0-.306-.224-.555-.5-.555-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545 0 0 1-.162.258l-.012.211a6.424 6.424 0 0 0-4.166 2.003 8.373 8.373 0 0 1-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594 0 0 0-.348-.132.481.481 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462 6.462 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453 6.453 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499 6.499 0 0 0 2.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01 2.526.728a5.199 5.199 0 0 0-.108-1.674A5.208 5.208 0 0 0 16.4 9.7zm-4.013 5.325a.437.437 0 0 0-.404-.232.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.164 5.164 0 0 0 3.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44 0 0 0-.27.036.44.44 0 0 0-.214.572l-.003.004 1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44-.004.005z\",\n  tensorflow:\n    \"M1.292 5.856L11.54 0v24l-4.095-2.378V7.603l-6.168 3.564.015-5.31zm21.43 5.311l-.014-5.31L12.46 0v24l4.095-2.378V14.87l3.092 1.788-.018-4.618-3.074-1.756V7.603l6.168 3.564z\",\n  pytorch:\n    \"M12.005 0L4.952 7.053a9.865 9.865 0 000 14.022 9.866 9.866 0 0014.022 0c3.984-3.9 3.986-10.205.085-14.023l-1.744 1.743c2.904 2.905 2.904 7.634 0 10.538s-7.634 2.904-10.538 0-2.904-7.634 0-10.538l4.647-4.646.582-.665zm3.568 3.899a1.327 1.327 0 00-1.327 1.327 1.327 1.327 0 001.327 1.328A1.327 1.327 0 0016.9 5.226 1.327 1.327 0 0015.573 3.9z\",\n  \"apache-spark\":\n    \"M10.812 0c-.425.013-.845.215-1.196.605a3.593 3.593 0 00-.493.722c-.355.667-.425 1.415-.556 2.143a551.9 551.9 0 00-.726 4.087c-.027.16-.096.227-.244.273C5.83 8.386 4.06 8.94 2.3 9.514c-.387.125-.773.289-1.114.506-1.042.665-1.196 1.753-.415 2.71.346.422.79.715 1.284.936 1.1.49 2.202.976 3.3 1.47.019.01.036.013.053.019h-.004l1.306.535c0 .023.002.045 0 .073-.2 2.03-.39 4.063-.58 6.095-.04.419-.012.831.134 1.23.317.87 1.065 1.148 1.881.701.372-.204.666-.497.937-.818 1.372-1.623 2.746-3.244 4.113-4.872.111-.133.205-.15.363-.098.349.117.697.231 1.045.347h.001c.02.012.045.02.073.03l.142.042c1.248.416 2.68.775 3.929 1.19.4.132.622.164 1.045.098.311-.048.592-.062.828-.236.602-.33.995-.957.988-1.682-.005-.427-.154-.813-.35-1.186-.82-1.556-1.637-3.113-2.461-4.666-.078-.148-.076-.243.037-.375 1.381-1.615 2.756-3.236 4.133-4.855.272-.32.513-.658.653-1.058.308-.878-.09-1.57-1-1.741a2.783 2.783 0 00-1.235.069c-1.974.521-3.947 1.041-5.918 1.57-.175.047-.26.015-.355-.144a353.08 353.08 0 00-2.421-4.018 4.61 4.61 0 00-.652-.849c-.371-.37-.802-.549-1.227-.536zm.172 3.703a.592.592 0 01.189.211c.87 1.446 1.742 2.89 2.609 4.338.07.118.135.16.277.121 1.525-.41 3.052-.813 4.579-1.217.367-.098.735-.193 1.103-.289a.399.399 0 01-.1.2c-1.259 1.48-2.516 2.962-3.779 4.438-.11.13-.12.22-.04.37.937 1.803 1.768 3.309 2.498 4.76l-3.696-1.019c-.538-.18-1.077-.358-1.615-.539-.163-.055-.25-.03-.36.1-1.248 1.488-2.504 2.97-3.759 4.454a.398.398 0 01-.18.132c.035-.378.068-.757.104-1.136.149-1.572.297-3.144.451-4.716-.03-.318.117-.405-.322-.545-1.493-.593-3.346-1.321-4.816-1.905a.595.595 0 01.24-.134c1.797-.57 3.595-1.14 5.394-1.705.127-.04.199-.092.211-.233.013-.148.05-.294.076-.441.241-1.363.483-2.726.726-4.088.068-.386.14-.771.21-1.157z\",\n  databricks:\n    \"M.95 14.184L12 20.403l9.919-5.55v2.21L12 22.662l-10.484-5.96-.565.308v.77L12 24l11.05-6.218v-4.317l-.515-.309L12 19.118l-9.867-5.653v-2.21L12 16.805l11.05-6.218V6.32l-.515-.308L12 11.974 2.647 6.681 12 1.388l7.76 4.368.668-.411v-.566L12 0 .95 6.27v.72L12 13.207l9.919-5.55v2.26L12 15.52 1.516 9.56l-.565.308Z\",\n  \"aws-redshift\":\n    \"M16.639 9.932a.822.822 0 0 1-.822-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.823.82m-2.086 4.994a.823.823 0 0 1-.822-.822.822.822 0 0 1 1.645 0 .822.822 0 0 1-.823.822m-5.004-.833a.822.822 0 1 1 .002-1.644.822.822 0 0 1-.002 1.644m-2.083 4.578a.823.823 0 0 1-.823-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.822.82m9.173-11.236a1.68 1.68 0 0 0-1.68 1.676c0 .566.285 1.066.718 1.37l-.782 1.982a1.674 1.674 0 0 0-1.923 1.104l-1.753-.398a1.675 1.675 0 0 0-3.348.103c0 .432.169.823.438 1.12l-.764 1.79c-.028-.001-.053-.008-.08-.008a1.68 1.68 0 0 0-1.68 1.676 1.68 1.68 0 0 0 3.36 0c0-.593-.312-1.112-.778-1.41l.674-1.579c.161.052.33.088.508.088.661 0 1.228-.386 1.502-.94l1.856.42a1.68 1.68 0 0 0 3.327-.325c0-.5-.224-.943-.574-1.25l.822-2.083c.053.005.104.016.157.016a1.68 1.68 0 0 0 1.68-1.676 1.68 1.68 0 0 0-1.68-1.676M12 23.145c-4.17 0-7.286-1.252-7.286-2.37V4.79C6.14 5.938 9.131 6.547 12 6.547c2.869 0 5.86-.609 7.286-1.756v15.983c0 1.12-3.116 2.37-7.286 2.37M12 .856c4.293 0 7.286 1.274 7.286 2.419 0 1.143-2.993 2.418-7.286 2.418-4.293 0-7.286-1.275-7.286-2.418C4.714 2.129 7.707.855 12 .855m8.143 2.419C20.143 1.147 15.947 0 12 0 8.052 0 3.857 1.147 3.857 3.274l.002.01h-.002v17.49C3.857 22.87 8.052 24 12 24c3.947 0 8.143-1.13 8.143-3.226V3.284h-.002l.002-.01\",\n};\n\nconst integrationBrandSvg = (name: VikingIntegrationBrandName): string => {\n  const fill = VIKING_INTEGRATION_BRAND_COLORS[name];\n  const d = VIKING_INTEGRATION_BRAND_PATHS[name];\n  return `<path fill=\"${fill}\" d=\"${d}\"/>`;\n};\n\n/** Multi-path brand SVG markup (24×24 viewBox) — official product logos at brand hue. */\nexport const VIKING_INTEGRATION_BRAND_SVGS: Record<\n  VikingIntegrationBrandName,\n  string\n> = {\n  kubernetes: integrationBrandSvg(\"kubernetes\"),\n  tensorflow: integrationBrandSvg(\"tensorflow\"),\n  pytorch: integrationBrandSvg(\"pytorch\"),\n  \"apache-spark\": integrationBrandSvg(\"apache-spark\"),\n  databricks: integrationBrandSvg(\"databricks\"),\n  \"aws-redshift\": integrationBrandSvg(\"aws-redshift\"),\n};\n\n/** Path markup for icon registry / viking-icon-paths.json sync. */\nexport const VIKING_INTEGRATION_ICON_PATHS = Object.fromEntries(\n  (\n    Object.entries(VIKING_INTEGRATION_BRAND_PATHS) as [\n      VikingIntegrationBrandName,\n      string,\n    ][]\n  ).map(([name, d]) => [name, `<path d=\"${d}\"/>`]),\n) as Record<VikingIntegrationBrandName, string>;\n\nexport type VikingIntegrationIconName = VikingIntegrationBrandName;\n\nexport const VIKING_INTEGRATION_ICON_NAMES_LIST =\n  VIKING_INTEGRATION_BRAND_NAMES;\n","/**\n * Zero-dependency inline SVG icon registry (24×24 stroke icons).\n * Lucide paths are synced at build time; DEML brand marks are custom artwork.\n */\nimport { LUCIDE_ICON_PATHS } from \"./lucide-paths.generated\";\nimport {\n  VIKING_BRAND_ICON_FILLED_PATHS,\n  VIKING_BRAND_ICON_PATHS,\n  VIKING_BRAND_ICON_NAMES_LIST,\n  VIKING_DRAKKAR_ICON_FILLED_PATHS,\n  VIKING_DRAKKAR_ICON_PATHS,\n  VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nimport {\n  VIKING_INTEGRATION_ICON_PATHS,\n  VIKING_INTEGRATION_ICON_NAMES_LIST,\n} from \"./integration-brand-icons\";\n\nexport {\n  VIKING_DRAKKAR_ICON_NAMES_LIST,\n  VIKING_BRAND_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nexport {\n  VIKING_INTEGRATION_ICON_NAMES_LIST,\n  type VikingIntegrationIconName,\n} from \"./integration-brand-icons\";\n\nexport type VikingIconName = keyof typeof VIKING_ICON_PATHS;\n\nexport type VikingIconSizePreset = \"sm\" | \"md\" | \"lg\";\n\nexport type VikingIconVariant = \"outline\" | \"filled\";\n\n/** Semantic color tokens resolved to CSS custom properties. */\nexport type VikingIconColorToken =\n  | \"inherit\"\n  | \"accent\"\n  | \"success\"\n  | \"warning\"\n  | \"danger\"\n  | \"info\"\n  | \"muted\"\n  | \"text\";\n\n/** Pixel sizes for sm / md / lg presets. */\nexport const VIKING_ICON_SIZE_PRESETS: Record<VikingIconSizePreset, number> = {\n  sm: 16,\n  md: 20,\n  lg: 24,\n} as const;\n\n/** Custom icons not covered by Lucide (hub topology, ML model tile, OAuth stubs). */\nconst VIKING_CUSTOM_ICON_PATHS = {\n  hub: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1\"/>',\n  model:\n    '<rect x=\"4\" y=\"8\" width=\"16\" height=\"10\" rx=\"2\"/><path d=\"M8 8V6a4 4 0 0 1 8 0v2\"/>',\n  google:\n    '<path d=\"M12 11.2v2.4h6.6c-.3 1.5-1.8 4.4-6.6 4.4-4 0-7.2-3.3-7.2-7.3S8 3.4 12 3.4c2.3 0 3.9 1 4.8 1.8l3.2-3.1C17.5.8 14.9 0 12 0 5.4 0 0 5.4 0 12s5.4 12 12 12c6.9 0 11.5-4.8 11.5-11.6 0-.8-.1-1.4-.2-1.9H12z\"/>',\n  apple:\n    '<path d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"/>',\n} as const;\n\nexport const VIKING_ICON_PATHS = {\n  ...LUCIDE_ICON_PATHS,\n  ...VIKING_BRAND_ICON_PATHS,\n  ...VIKING_DRAKKAR_ICON_PATHS,\n  ...VIKING_INTEGRATION_ICON_PATHS,\n  ...VIKING_CUSTOM_ICON_PATHS,\n} as const;\n\n/** Filled-path overrides used when variant=\"filled\" (brand marks, solid shapes). */\nexport const VIKING_ICON_FILLED_PATHS: Partial<Record<VikingIconName, string>> =\n  {\n    ...VIKING_BRAND_ICON_FILLED_PATHS,\n    ...VIKING_DRAKKAR_ICON_FILLED_PATHS,\n  };\n\n/** Legacy Material Icons ligature names → Viking icon registry keys. */\nexport const MATERIAL_ICON_ALIASES: Record<string, VikingIconName> = {\n  analytics: \"deml\",\n  security: \"shield\",\n  link: \"link\",\n  visibility: \"eye\",\n  shield: \"shield\",\n  trending_up: \"trending-up\",\n  lock: \"lock\",\n  fingerprint: \"fingerprint\",\n  gpp_maybe: \"shield\",\n  verified_user: \"user-shield\",\n  bolt: \"bolt\",\n  cloud: \"cloud\",\n  lan: \"network\",\n  hub: \"hub\",\n  speed: \"speed\",\n  rocket_launch: \"rocket\",\n  insights: \"insights\",\n  check: \"check\",\n  description: \"file\",\n  vpn_key: \"key\",\n  policy: \"policy\",\n  bug_report: \"bug\",\n  search: \"search\",\n  chevron_left: \"chevron-left\",\n  chevron_right: \"chevron-right\",\n  verified: \"check-circle\",\n  warning: \"alert-triangle\",\n  close: \"x\",\n  account_balance: \"building\",\n  send: \"send\",\n  check_circle: \"check-circle\",\n  play_circle: \"play\",\n  input: \"terminal\",\n  model_training: \"model\",\n  auto_awesome: \"sparkle\",\n  error_outline: \"alert-circle\",\n  home: \"home\",\n  cookie: \"cookie\",\n  search_off: \"search-off\",\n  person_add: \"user\",\n  storage: \"aws-redshift\",\n  data_object: \"aws-redshift\",\n  memory: \"tensorflow\",\n  psychology: \"pytorch\",\n  dns: \"server\",\n  login: \"log-in\",\n};\n\n/** Icons always rendered with fill (play triangle, dot grids). */\nexport const VIKING_FILLED_ICON_NAMES = [\n  \"play\",\n  \"dots-horizontal\",\n  \"dots-vertical\",\n  \"grip-vertical\",\n] as const satisfies readonly VikingIconName[];\n\n/** OAuth / vendor marks rendered with official brand artwork in viking-icon. */\nexport const VIKING_BRAND_ICON_NAMES = [\n  \"google\",\n  \"apple\",\n  ...VIKING_BRAND_ICON_NAMES_LIST,\n] as const satisfies readonly VikingIconName[];\n\nconst VIKING_ICON_COLOR_TOKENS: Record<\n  Exclude<VikingIconColorToken, \"inherit\">,\n  string\n> = {\n  accent: \"var(--viking-accent)\",\n  success: \"var(--viking-success)\",\n  warning: \"var(--viking-warning)\",\n  danger: \"var(--viking-danger)\",\n  info: \"var(--viking-info)\",\n  muted: \"var(--viking-text-muted)\",\n  text: \"var(--viking-text)\",\n};\n\nexport const vikingIconViewBox = (_name: VikingIconName): string => \"0 0 24 24\";\n\n/** Resolve pixel size from preset or explicit value. */\nexport const resolveVikingIconSize = (\n  size: number | undefined,\n  preset: VikingIconSizePreset | null | undefined,\n): number => {\n  if (preset) {\n    return VIKING_ICON_SIZE_PRESETS[preset];\n  }\n  return size ?? VIKING_ICON_SIZE_PRESETS.lg;\n};\n\n/** Resolve semantic color token or raw CSS value for icon tinting. */\nexport const resolveVikingIconColor = (\n  color: VikingIconColorToken | string | undefined,\n): string | undefined => {\n  if (!color || color === \"inherit\") {\n    return undefined;\n  }\n  if (color in VIKING_ICON_COLOR_TOKENS) {\n    return VIKING_ICON_COLOR_TOKENS[\n      color as Exclude<VikingIconColorToken, \"inherit\">\n    ];\n  }\n  return color;\n};\n\nconst VIKING_ICON_PATH_KEYS = new Set(Object.keys(VIKING_ICON_PATHS));\n\n/** Resolve a Viking or legacy Material icon name to a registry key. */\nexport const resolveVikingIcon = (name: string): VikingIconName => {\n  const normalized = name.trim().toLowerCase().replace(/\\s+/g, \"_\");\n  if (VIKING_ICON_PATH_KEYS.has(normalized)) {\n    return normalized as VikingIconName;\n  }\n  const alias = MATERIAL_ICON_ALIASES[normalized];\n  if (alias) {\n    return alias;\n  }\n  return \"info\";\n};\n\nexport const VIKING_ICON_NAMES = Object.keys(\n  VIKING_ICON_PATHS,\n) as VikingIconName[];\n\n/** Lucide-sourced icon names (for docs and showcase grouping). */\nexport const VIKING_LUCIDE_ICON_NAMES = Object.keys(\n  LUCIDE_ICON_PATHS,\n) as (keyof typeof LUCIDE_ICON_PATHS)[];\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  input,\n} from \"@angular/core\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport {\n  VIKING_FILLED_ICON_NAMES,\n  VIKING_ICON_FILLED_PATHS,\n  VIKING_ICON_PATHS,\n  resolveVikingIcon,\n  resolveVikingIconColor,\n  resolveVikingIconSize,\n  vikingIconViewBox,\n  VikingIconColorToken,\n  VikingIconName,\n  VikingIconSizePreset,\n  VikingIconVariant,\n  VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"../../core/icons\";\nimport {\n  isIntegrationBrandIcon,\n  VIKING_INTEGRATION_BRAND_SVGS,\n  type VikingIntegrationBrandName,\n} from \"../../core/integration-brand-icons\";\n\nconst VIKING_FILLED_ICON_SET = new Set<string>(VIKING_FILLED_ICON_NAMES);\nconst VIKING_DRAKKAR_ICON_SET = new Set<string>(VIKING_DRAKKAR_ICON_NAMES_LIST);\n\n/**\n * viking-icon — themeable inline SVG icon (Lucide-sourced registry + DEML brand marks).\n * Zero runtime dependencies; paths are inlined at build time from Lucide.\n *\n * @example Outline with semantic color\n * ```html\n * <viking-icon name=\"search\" sizePreset=\"md\" color=\"accent\" />\n * ```\n *\n * @example Brand mark (outline)\n * ```html\n * <viking-icon name=\"drakkar\" [size]=\"28\" color=\"accent\" />\n * ```\n */\n@Component({\n  selector: \"viking-icon\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class.viking-icon-spin]\": \"spin()\",\n    \"[class.viking-icon-filled]\": \"isFilled()\",\n    \"[class.viking-icon-outline]\": \"!isFilled()\",\n    \"[class.viking-icon-brand-drakkar]\": \"isDrakkarBrand()\",\n    \"[class.viking-icon-sm]\": 'sizePreset() === \"sm\"',\n    \"[class.viking-icon-md]\": 'sizePreset() === \"md\"',\n    \"[class.viking-icon-lg]\":\n      'sizePreset() === \"lg\" || (!sizePreset() && !size())',\n    \"[class.viking-icon-backdrop]\": \"backdrop()\",\n    \"[class.viking-icon-backdrop-success]\":\n      \"backdrop() && backdropTone() === 'success'\",\n    \"[class.viking-icon-backdrop-warning]\":\n      \"backdrop() && backdropTone() === 'warning'\",\n    \"[class.viking-icon-backdrop-danger]\":\n      \"backdrop() && backdropTone() === 'danger'\",\n    \"[class.viking-icon-backdrop-info]\":\n      \"backdrop() && backdropTone() === 'info'\",\n    \"[style.color]\": \"resolvedColor()\",\n    \"aria-hidden\": \"true\",\n  },\n  template: `\n    @if (resolvedName() === \"google\") {\n      <svg\n        class=\"viking-icon-svg viking-icon-brand\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 48 48\"\n        [style.width.px]=\"resolvedSize()\"\n        [style.height.px]=\"resolvedSize()\"\n        aria-hidden=\"true\"\n      >\n        <path\n          fill=\"#EA4335\"\n          d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n        />\n        <path\n          fill=\"#4285F4\"\n          d=\"M46.5 24c0-1.55-.15-3.24-.47-4.77H24v9.03h12.75c-.55 2.83-2.13 5.23-4.53 6.82l7.02 5.44C43.35 36.56 46.5 30.82 46.5 24z\"\n        />\n        <path\n          fill=\"#FBBC05\"\n          d=\"M10.54 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24s.92 7.54 2.56 10.78l7.98-6.19z\"\n        />\n        <path\n          fill=\"#34A853\"\n          d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.02-5.44c-1.99 1.33-4.51 2.15-7.87 2.15-6.26 0-11.57-4.22-13.46-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n        />\n      </svg>\n    } @else if (resolvedName() === \"apple\") {\n      <svg\n        class=\"viking-icon-svg viking-icon-brand\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 24 24\"\n        fill=\"currentColor\"\n        [style.width.px]=\"resolvedSize()\"\n        [style.height.px]=\"resolvedSize()\"\n        aria-hidden=\"true\"\n      >\n        <path\n          d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"\n        />\n      </svg>\n    } @else if (isIntegrationBrand()) {\n      <span\n        class=\"viking-icon-svg-host\"\n        [style.width.px]=\"resolvedSize()\"\n        [style.height.px]=\"resolvedSize()\"\n        [innerHTML]=\"integrationBrandSvg()\"\n      ></span>\n    } @else {\n      <span\n        class=\"viking-icon-svg-host\"\n        [style.width.px]=\"resolvedSize()\"\n        [style.height.px]=\"resolvedSize()\"\n        [innerHTML]=\"svgMarkup()\"\n      ></span>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n        line-height: 0;\n        color: inherit;\n      }\n\n      .viking-icon-svg-host {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n        line-height: 0;\n      }\n\n      .viking-icon-svg-host .viking-icon-svg {\n        width: 100%;\n        height: 100%;\n      }\n\n      :host(.viking-icon-outline) .viking-icon-svg {\n        --viking-icon-stroke-width: 1.75;\n        stroke-width: var(--viking-icon-stroke-width);\n        shape-rendering: geometricPrecision;\n      }\n\n      /* Match static navbar.js brand mark (stroke-width=\"1.8\") — was 1.5 and\n         looked thinner on deml.app than marketing/backend. */\n      :host(.viking-icon-outline.viking-icon-brand-drakkar) .viking-icon-svg {\n        --viking-icon-stroke-width: var(--viking-icon-stroke-width-brand, 1.8);\n        stroke-width: var(--viking-icon-stroke-width);\n      }\n\n      :host(.viking-icon-sm) .viking-icon-svg {\n        --viking-icon-stroke-width: 1.5;\n        stroke-width: var(--viking-icon-stroke-width);\n      }\n\n      :host(.viking-icon-lg) .viking-icon-svg {\n        --viking-icon-stroke-width: 1.75;\n        stroke-width: var(--viking-icon-stroke-width);\n      }\n\n      :host(.viking-icon-filled) .viking-icon-svg {\n        stroke: none;\n      }\n\n      :host(.viking-icon-spin) svg {\n        animation: viking-icon-rotate 0.9s linear infinite;\n      }\n\n      :host(.viking-icon-backdrop) {\n        padding: var(--viking-icon-backdrop-padding, var(--viking-space-0-5));\n        border-radius: var(--viking-radius-lg);\n        background: var(--viking-accent-soft);\n        color: var(--viking-accent-strong);\n        box-shadow: var(--viking-shadow-sm);\n      }\n\n      :host(.viking-icon-backdrop-success) {\n        background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n        color: var(--viking-success);\n      }\n\n      :host(.viking-icon-backdrop-warning) {\n        background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n        color: var(--viking-warning);\n      }\n\n      :host(.viking-icon-backdrop-danger) {\n        background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n        color: var(--viking-danger);\n      }\n\n      :host(.viking-icon-backdrop-info) {\n        background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n        color: var(--viking-info);\n      }\n\n      @keyframes viking-icon-rotate {\n        to {\n          transform: rotate(360deg);\n        }\n      }\n\n      @media (prefers-reduced-motion: reduce) {\n        :host(.viking-icon-spin) svg {\n          animation: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingIcon {\n  private readonly sanitizer = inject(DomSanitizer);\n\n  readonly name = input.required<VikingIconName | string>();\n  /** Explicit pixel size — overridden by sizePreset when set. */\n  readonly size = input<number | undefined>(undefined);\n  /** sm (16px) · md (20px) · lg (24px) */\n  readonly sizePreset = input<VikingIconSizePreset | null>(null);\n  /** outline (stroke) or filled (solid) */\n  readonly variant = input<VikingIconVariant>(\"outline\");\n  /** Semantic token (accent, success, …) or any CSS color value. */\n  readonly color = input<VikingIconColorToken | string | undefined>(undefined);\n  /** Renders icon inside a padded tokenized backdrop (matches viking-icon-badge). */\n  readonly backdrop = input<boolean>(false);\n  readonly backdropTone = input<\n    \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\"\n  >(\"default\");\n  readonly spin = input<boolean>(false);\n\n  protected readonly resolvedName = computed(() =>\n    resolveVikingIcon(this.name()),\n  );\n\n  protected readonly resolvedSize = computed(() =>\n    resolveVikingIconSize(this.size(), this.sizePreset()),\n  );\n\n  protected readonly resolvedColor = computed(() =>\n    resolveVikingIconColor(this.color()),\n  );\n\n  protected readonly viewBox = computed(() =>\n    vikingIconViewBox(this.resolvedName()),\n  );\n\n  protected readonly isFilled = computed(() => {\n    const name = this.resolvedName();\n    if (name === \"google\" || name === \"apple\" || isIntegrationBrandIcon(name)) {\n      return false;\n    }\n    if (this.variant() === \"filled\") {\n      return true;\n    }\n    return VIKING_FILLED_ICON_SET.has(name);\n  });\n\n  protected readonly isDrakkarBrand = computed(() =>\n    VIKING_DRAKKAR_ICON_SET.has(this.resolvedName()),\n  );\n\n  protected readonly isIntegrationBrand = computed(() =>\n    isIntegrationBrandIcon(this.resolvedName()),\n  );\n\n  protected readonly integrationBrandSvg = computed<SafeHtml>(() => {\n    const name = this.resolvedName() as VikingIntegrationBrandName;\n    const html = VIKING_INTEGRATION_BRAND_SVGS[name] ?? \"\";\n    const size = this.resolvedSize();\n    return this.sanitizer.bypassSecurityTrustHtml(\n      `<svg class=\"viking-icon-svg viking-icon-brand viking-icon-integration-brand\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" style=\"width: ${size}px; height: ${size}px;\" aria-hidden=\"true\"><g>${html}</g></svg>`,\n    );\n  });\n\n  protected readonly svgMarkup = computed<SafeHtml>(() => {\n    const name = this.resolvedName();\n    const html =\n      this.isFilled() && VIKING_ICON_FILLED_PATHS[name]\n        ? VIKING_ICON_FILLED_PATHS[name]\n        : (VIKING_ICON_PATHS[name] ?? \"\");\n    const fill = this.isFilled() ? \"currentColor\" : \"none\";\n    const fillRule = this.isFilled() ? ' fill-rule=\"evenodd\"' : \"\";\n    const stroke = this.isFilled() ? \"none\" : \"currentColor\";\n    const size = this.resolvedSize();\n    return this.sanitizer.bypassSecurityTrustHtml(\n      `<svg class=\"viking-icon-svg\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${this.viewBox()}\" fill=\"${fill}\"${fillRule} stroke=\"${stroke}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"width: ${size}px; height: ${size}px;\" aria-hidden=\"true\"><g>${html}</g></svg>`,\n    );\n  });\n}\n\n/** Alias for consumers expecting VikingIconComponent. */\nexport { VikingIcon as VikingIconComponent };\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Injectable,\n  inject,\n  input,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport {\n  createToastStore,\n  toastPriorityFromTone,\n} from \"../../core/toast-store\";\nimport {\n  VikingToastAction,\n  VikingToastInstance,\n  VikingToastOptions,\n} from \"../../core/types\";\n\nconst TONE_ICONS: Record<string, VikingIconName> = {\n  accent: \"info\",\n  success: \"check-circle\",\n  warning: \"alert-triangle\",\n  danger: \"alert-circle\",\n  muted: \"info\",\n};\n\n/**\n * VikingToastService — priority-aware imperative toast API (ADR-0020).\n * Render a single <viking-toaster> outlet near the app root.\n */\n@Injectable({ providedIn: \"root\" })\nexport class VikingToastService {\n  private readonly store = createToastStore<VikingToastInstance>({\n    maxVisible: 3,\n  });\n  readonly toasts = this.store.messages;\n\n  readonly show = (options: VikingToastOptions): number => {\n    const tone = options.tone ?? \"accent\";\n    const priority = options.priority ?? toastPriorityFromTone(tone);\n    const toast: VikingToastInstance = {\n      id: this.store.nextId(),\n      heading: options.heading ?? \"\",\n      text: options.text,\n      tone,\n      priority,\n      duration: options.duration ?? 0,\n      dedupeKey: options.dedupeKey,\n      action: options.action,\n    };\n    // Prefer explicit duration; otherwise store uses priority defaults.\n    const durationMs =\n      options.duration === undefined ? undefined : options.duration;\n    return this.store.add(toast, durationMs);\n  };\n\n  readonly success = (\n    text: string,\n    opts?: Omit<VikingToastOptions, \"text\" | \"tone\" | \"priority\">,\n  ): number => this.show({ ...opts, text, tone: \"success\", priority: \"low\" });\n\n  readonly critical = (\n    text: string,\n    opts?: Omit<VikingToastOptions, \"text\" | \"tone\" | \"priority\">,\n  ): number =>\n    this.show({ ...opts, text, tone: \"danger\", priority: \"critical\" });\n\n  readonly dismiss = (id: number): void => {\n    this.store.dismiss(id);\n  };\n\n  readonly clear = (): void => {\n    this.store.clear();\n  };\n\n  readonly pause = (id?: number): void => {\n    this.store.pause(id);\n  };\n\n  readonly resume = (id?: number): void => {\n    this.store.resume(id);\n  };\n}\n\n/**\n * viking-toaster — fixed-position outlet that renders active toasts.\n */\n@Component({\n  selector: \"viking-toaster\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class.viking-toaster-top]\": \"position() === 'top-end'\",\n    role: \"region\",\n    \"aria-label\": \"Notifications\",\n    \"aria-live\": \"polite\",\n    \"aria-relevant\": \"additions text\",\n    \"aria-atomic\": \"false\",\n  },\n  template: `\n    @for (toast of service.toasts(); track toast.id) {\n      <div\n        class=\"viking-toast\"\n        [class]=\"'viking-toast-' + toast.tone\"\n        [attr.data-tone]=\"toast.tone\"\n        [attr.data-priority]=\"toast.priority\"\n        [attr.role]=\"toast.priority === 'critical' ? 'alert' : 'status'\"\n        [attr.aria-live]=\"\n          toast.priority === 'critical' ? 'assertive' : 'polite'\n        \"\n        (pointerenter)=\"service.pause(toast.id)\"\n        (pointerleave)=\"service.resume(toast.id)\"\n      >\n        <viking-icon\n          class=\"viking-toast-icon\"\n          [name]=\"toneIcon(toast.tone)\"\n          [size]=\"20\"\n        />\n        <div class=\"viking-toast-body\">\n          @if (toast.heading) {\n            <p class=\"viking-toast-heading\">{{ toast.heading }}</p>\n          }\n          <p class=\"viking-toast-text\">{{ toast.text }}</p>\n        </div>\n        @if (toast.action; as action) {\n          <button\n            type=\"button\"\n            class=\"viking-toast-action\"\n            (click)=\"onAction(toast.id, action)\"\n          >\n            {{ action.label }}\n          </button>\n        }\n        <button\n          type=\"button\"\n          class=\"viking-toast-close\"\n          aria-label=\"Dismiss notification\"\n          (click)=\"service.dismiss(toast.id)\"\n        >\n          <viking-icon name=\"x\" [size]=\"16\" />\n        </button>\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        position: fixed;\n        bottom: var(--viking-space-2);\n        right: var(--viking-space-2);\n        left: var(--viking-space-2);\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n        z-index: var(--viking-z-toast);\n        max-width: none;\n        pointer-events: none;\n      }\n      @media (min-width: 768px) {\n        :host {\n          bottom: var(--viking-space-3);\n          right: var(--viking-space-3);\n          left: auto;\n          max-width: min(414px, calc(100vw - var(--viking-space-4)));\n        }\n      }\n      :host(.viking-toaster-top) {\n        bottom: auto;\n        top: var(--viking-space-3);\n      }\n      .viking-toast {\n        pointer-events: auto;\n        display: flex;\n        align-items: flex-start;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-2);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-md);\n        font-family: var(--viking-font-family);\n        animation: viking-toast-in var(--viking-duration) var(--viking-ease-out);\n      }\n      .viking-toast[data-priority=\"low\"] {\n        box-shadow: var(--viking-shadow-sm);\n        opacity: 0.96;\n      }\n      .viking-toast[data-priority=\"critical\"] {\n        box-shadow: var(--viking-shadow-lg);\n      }\n      @keyframes viking-toast-in {\n        from {\n          transform: translateY(var(--viking-space-1));\n          opacity: 0;\n        }\n        to {\n          transform: translateY(0);\n          opacity: 1;\n        }\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .viking-toast {\n          animation: none;\n        }\n      }\n      .viking-toast-icon {\n        margin-top: var(--viking-space-0-5);\n      }\n      .viking-toast-accent .viking-toast-icon {\n        color: var(--viking-accent);\n      }\n      .viking-toast-success .viking-toast-icon {\n        color: var(--viking-success);\n      }\n      .viking-toast-warning .viking-toast-icon {\n        color: var(--viking-warning);\n      }\n      .viking-toast-danger .viking-toast-icon {\n        color: var(--viking-danger);\n      }\n      .viking-toast-body {\n        flex: 1;\n        min-width: 0;\n      }\n      .viking-toast-heading {\n        margin: 0;\n        font-size: var(--viking-font-size);\n        font-weight: 600;\n        color: var(--viking-text);\n      }\n      .viking-toast-text {\n        margin: 0;\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        line-height: 1.45;\n      }\n      .viking-toast-action {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-height: var(--viking-touch-target-min);\n        border: none;\n        background: transparent;\n        color: var(--viking-accent);\n        cursor: pointer;\n        padding: var(--viking-space-0-5) var(--viking-space-1);\n        border-radius: var(--viking-radius);\n        font: inherit;\n        font-weight: var(--viking-font-weight-semibold, 600);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-toast-action:hover {\n        background: var(--viking-accent-soft);\n      }\n      .viking-toast-action:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: 1px;\n      }\n      .viking-toast-close {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-width: var(--viking-touch-target-min);\n        min-height: var(--viking-touch-target-min);\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: var(--viking-space-0-5);\n        border-radius: var(--viking-radius-pill);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-toast-close:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-toast-close:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: 1px;\n      }\n    `,\n  ],\n})\nexport class VikingToaster {\n  protected readonly service = inject(VikingToastService);\n\n  readonly position = input<\"bottom-end\" | \"top-end\">(\"bottom-end\");\n\n  protected toneIcon = (tone: string): VikingIconName =>\n    TONE_ICONS[tone] ?? \"info\";\n\n  protected onAction(id: number, action: VikingToastAction): void {\n    action.onClick();\n    this.service.dismiss(id);\n  }\n}\n","import { isPlatformBrowser } from \"@angular/common\";\nimport {\n  DestroyRef,\n  Injectable,\n  PLATFORM_ID,\n  computed,\n  inject,\n  signal,\n} from \"@angular/core\";\nimport {\n  getDefaultCommandHistory,\n  type RunHistoryCommand,\n} from \"../../core/command-history\";\nimport { VikingToastService } from \"../toast/toast\";\n\n/**\n * Suite command history — ⌘Z / ⌘⇧Z for reversible client actions (FORJD ADR-0019).\n * Shortcuts bind once via `getDefaultCommandHistory()`.\n */\n@Injectable({ providedIn: \"root\" })\nexport class VikingCommandHistoryService {\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly toast = inject(VikingToastService);\n  private readonly history = getDefaultCommandHistory();\n  private readonly version = signal(0);\n\n  readonly canUndo = computed(() => {\n    this.version();\n    return this.history.canUndo();\n  });\n  readonly canRedo = computed(() => {\n    this.version();\n    return this.history.canRedo();\n  });\n  readonly undoLabel = computed(() => {\n    this.version();\n    return this.history.undoLabel();\n  });\n  readonly redoLabel = computed(() => {\n    this.version();\n    return this.history.redoLabel();\n  });\n\n  constructor() {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n    const unsub = this.history.subscribe(() => {\n      this.version.update((n) => n + 1);\n    });\n    this.destroyRef.onDestroy(() => {\n      unsub();\n    });\n  }\n\n  run(command: RunHistoryCommand): Promise<void> {\n    return this.history.run(command);\n  }\n\n  async runWithUndoToast(\n    command: RunHistoryCommand,\n    opts?: { readonly text?: string; readonly duration?: number },\n  ): Promise<void> {\n    await this.history.run(command);\n    this.toast.show({\n      heading: command.label,\n      text: opts?.text ?? \"Press ⌘Z to undo\",\n      tone: \"accent\",\n      priority: \"high\",\n      duration: opts?.duration ?? 6000,\n      action: {\n        label: \"Undo\",\n        onClick: () => {\n          void this.undo();\n        },\n      },\n    });\n  }\n\n  undo(): Promise<boolean> {\n    return this.history.undo();\n  }\n\n  redo(): Promise<boolean> {\n    return this.history.redo();\n  }\n\n  clear(): void {\n    this.history.clear();\n  }\n}\n","/**\n * Multi-select model for list/table bulk actions (FORJD ADR-0021).\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/selection-model.\n *\n * Keys are stable string ids. Hosts own persistence / server calls;\n * this helper only tracks selection set membership.\n */\n\nexport type SelectionModel = {\n  readonly selected: () => readonly string[];\n  readonly size: () => number;\n  readonly isSelected: (id: string) => boolean;\n  readonly allSelected: (ids: readonly string[]) => boolean;\n  readonly someSelected: (ids: readonly string[]) => boolean;\n  toggle: (id: string) => void;\n  select: (id: string) => void;\n  deselect: (id: string) => void;\n  /** Select every id in `ids` (union). */\n  selectMany: (ids: readonly string[]) => void;\n  /** Select exactly `ids` (replace). */\n  setSelected: (ids: readonly string[]) => void;\n  /** Toggle all: if every id selected → clear those; else select all. */\n  toggleAll: (ids: readonly string[]) => void;\n  clear: () => void;\n  /** Drop ids that are no longer in the visible/page set. */\n  pruneTo: (ids: readonly string[]) => void;\n  subscribe: (listener: () => void) => () => void;\n};\n\nexport type CreateSelectionModelOptions = {\n  readonly initial?: readonly string[];\n  readonly maxSelected?: number;\n};\n\nexport function createSelectionModel(\n  options?: CreateSelectionModelOptions,\n): SelectionModel {\n  const maxSelected = options?.maxSelected;\n  const selected = new Set<string>(\n    (options?.initial ?? []).map(String).filter(Boolean),\n  );\n  const listeners = new Set<() => void>();\n\n  const notify = (): void => {\n    for (const listener of listeners) {\n      try {\n        listener();\n      } catch {\n        // Listener failures must not break selection.\n      }\n    }\n  };\n\n  const enforceCap = (): void => {\n    if (maxSelected == null || selected.size <= maxSelected) {\n      return;\n    }\n    const keep = [...selected].slice(0, maxSelected);\n    selected.clear();\n    for (const id of keep) {\n      selected.add(id);\n    }\n  };\n\n  return {\n    selected: () => [...selected],\n    size: () => selected.size,\n    isSelected: (id) => selected.has(String(id)),\n    allSelected: (ids) => {\n      if (!ids.length) {\n        return false;\n      }\n      return ids.every((id) => selected.has(String(id)));\n    },\n    someSelected: (ids) => {\n      if (!ids.length) {\n        return false;\n      }\n      const hits = ids.filter((id) => selected.has(String(id))).length;\n      return hits > 0 && hits < ids.length;\n    },\n    toggle: (id) => {\n      const key = String(id);\n      if (!key) {\n        return;\n      }\n      if (selected.has(key)) {\n        selected.delete(key);\n      } else {\n        selected.add(key);\n        enforceCap();\n      }\n      notify();\n    },\n    select: (id) => {\n      const key = String(id);\n      if (!key || selected.has(key)) {\n        return;\n      }\n      selected.add(key);\n      enforceCap();\n      notify();\n    },\n    deselect: (id) => {\n      if (selected.delete(String(id))) {\n        notify();\n      }\n    },\n    selectMany: (ids) => {\n      let changed = false;\n      for (const id of ids) {\n        const key = String(id);\n        if (!key || selected.has(key)) {\n          continue;\n        }\n        selected.add(key);\n        changed = true;\n      }\n      if (changed) {\n        enforceCap();\n        notify();\n      }\n    },\n    setSelected: (ids) => {\n      selected.clear();\n      for (const id of ids) {\n        const key = String(id);\n        if (key) {\n          selected.add(key);\n        }\n      }\n      enforceCap();\n      notify();\n    },\n    toggleAll: (ids) => {\n      const keys = ids.map(String).filter(Boolean);\n      if (!keys.length) {\n        return;\n      }\n      const allOn = keys.every((id) => selected.has(id));\n      if (allOn) {\n        for (const id of keys) {\n          selected.delete(id);\n        }\n      } else {\n        for (const id of keys) {\n          selected.add(id);\n        }\n        enforceCap();\n      }\n      notify();\n    },\n    clear: () => {\n      if (!selected.size) {\n        return;\n      }\n      selected.clear();\n      notify();\n    },\n    pruneTo: (ids) => {\n      const allow = new Set(ids.map(String));\n      let changed = false;\n      for (const id of [...selected]) {\n        if (!allow.has(id)) {\n          selected.delete(id);\n          changed = true;\n        }\n      }\n      if (changed) {\n        notify();\n      }\n    },\n    subscribe: (listener) => {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n","/**\n * Client navigation hygiene — block XSS URL schemes and open redirects.\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/safe-href\n * (FORJD ADR-0013 / ADR-0016).\n */\n\nexport type SafeHrefOptions = {\n  /**\n   * When set, absolute `http(s)` URLs must match one of these hosts\n   * (exact or subdomain). Relative `/…` and `#…` ignore this list.\n   */\n  readonly allowedHosts?: readonly string[];\n  /**\n   * When true, reject `http:` except loopback (`localhost`, `127.0.0.1`, `::1`).\n   */\n  readonly httpsOnlyExceptLoopback?: boolean;\n};\n\nconst CONTROL_CHARS = /[\\u0000-\\u001F\\u007F]/;\nconst DANGEROUS_SCHEME = /^(javascript|data|vbscript|blob|file):/i;\nconst HAS_SCHEME = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\nconst LOOPBACK_HOSTS = new Set([\"localhost\", \"127.0.0.1\", \"::1\", \"[::1]\"]);\n\nfunction hostAllowed(\n  hostname: string,\n  allowedHosts: readonly string[],\n): boolean {\n  const host = hostname.toLowerCase();\n  return allowedHosts.some((entry) => {\n    const allowed = entry.toLowerCase();\n    return host === allowed || host.endsWith(`.${allowed}`);\n  });\n}\n\n/**\n * Return a safe href for `<a>` / button-as-link, or `null` when unsafe.\n */\nexport function safeHref(\n  raw: string | null | undefined,\n  options: SafeHrefOptions = {},\n): string | null {\n  if (raw == null) {\n    return null;\n  }\n  const href = raw.trim();\n  if (!href || CONTROL_CHARS.test(href)) {\n    return null;\n  }\n\n  if (href.startsWith(\"#\") && !href.includes(\":\")) {\n    return href;\n  }\n\n  if (href.startsWith(\"/\") && !href.startsWith(\"//\")) {\n    return href;\n  }\n\n  if (href.startsWith(\"//\") || DANGEROUS_SCHEME.test(href)) {\n    return null;\n  }\n\n  if (!HAS_SCHEME.test(href)) {\n    return null;\n  }\n\n  let url: URL;\n  try {\n    url = new URL(href);\n  } catch {\n    return null;\n  }\n\n  const protocol = url.protocol.toLowerCase();\n  if (protocol === \"mailto:\" || protocol === \"tel:\") {\n    return href;\n  }\n  if (protocol !== \"http:\" && protocol !== \"https:\") {\n    return null;\n  }\n\n  if (\n    protocol === \"http:\" &&\n    options.httpsOnlyExceptLoopback &&\n    !LOOPBACK_HOSTS.has(url.hostname.toLowerCase())\n  ) {\n    return null;\n  }\n\n  if (\n    options.allowedHosts?.length &&\n    !hostAllowed(url.hostname, options.allowedHosts)\n  ) {\n    return null;\n  }\n\n  return url.href;\n}\n\n/** Normalize an API/origin base to a safe `http(s)` origin+path (no trailing slash). */\nexport function safeHttpBase(\n  raw: string | null | undefined,\n  options: SafeHrefOptions = {},\n): string | null {\n  const href = safeHref(\n    typeof raw === \"string\" ? raw.replace(/\\/+$/, \"\") : raw,\n    options,\n  );\n  if (!href) {\n    return null;\n  }\n  try {\n    const url = new URL(href);\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n      return null;\n    }\n    const path = url.pathname.replace(/\\/+$/, \"\");\n    return `${url.origin}${path === \"/\" ? \"\" : path}`;\n  } catch {\n    return null;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n} from \"@angular/core\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { safeHref } from \"../../core/safe-href\";\nimport { VikingSize } from \"../../core/types\";\n\nexport type VikingButtonVariant =\n  | \"outline\"\n  | \"primary\"\n  | \"secondary\"\n  | \"filled\"\n  | \"danger\"\n  | \"ghost\"\n  | \"subtle\";\n\n/**\n * viking-button — single native control (button or anchor). No nested WC button.\n * Static/marketing surfaces still use `viking-button-wc` where Angular is unavailable.\n * Variants: outline (default), primary, filled, danger, ghost, subtle.\n */\n@Component({\n  selector: \"viking-button\",\n  imports: [NgTemplateOutlet, VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class.viking-full]\": \"fullWidth()\",\n    \"[class.viking-compact]\": \"compact()\",\n    // Host is presentational — interactive ARIA lives on the native control\n    role: \"presentation\",\n  },\n  template: `\n    <ng-template #controlContent>\n      @if (loading()) {\n        <span class=\"viking-btn-spinner\" aria-hidden=\"true\"></span>\n      } @else if (icon()) {\n        <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n      }\n      <span class=\"viking-btn-label\">\n        @if (label()) {\n          {{ label() }}\n        } @else {\n          <ng-content />\n        }\n      </span>\n      @if (!loading() && iconTrailing()) {\n        <viking-icon [name]=\"iconTrailing()!\" [size]=\"iconSize()\" />\n      }\n      @if (kbd()) {\n        <kbd class=\"viking-btn-kbd\">{{ kbd() }}</kbd>\n      }\n    </ng-template>\n\n    @if (safeUrl()) {\n      <a\n        class=\"suite-btn viking-btn\"\n        [class]=\"controlClass()\"\n        [attr.data-variant]=\"suiteVariant()\"\n        [attr.href]=\"isInteractive() ? safeUrl() : null\"\n        [attr.target]=\"target()\"\n        [attr.rel]=\"relAttr()\"\n        [attr.aria-label]=\"accessibleName()\"\n        [attr.aria-busy]=\"loading() ? 'true' : null\"\n        [attr.aria-expanded]=\"ariaExpanded()\"\n        [attr.aria-controls]=\"ariaControls()\"\n        [attr.aria-haspopup]=\"ariaHaspopup()\"\n        [attr.aria-pressed]=\"ariaPressed()\"\n        [attr.aria-current]=\"ariaCurrent()\"\n        [attr.aria-disabled]=\"!isInteractive() ? 'true' : null\"\n        [attr.tabindex]=\"!isInteractive() ? -1 : null\"\n        (click)=\"onClick($event)\"\n      >\n        <ng-container [ngTemplateOutlet]=\"controlContent\" />\n      </a>\n    } @else {\n      <button\n        class=\"suite-btn viking-btn\"\n        [class]=\"controlClass()\"\n        [attr.data-variant]=\"suiteVariant()\"\n        [type]=\"type()\"\n        [disabled]=\"!isInteractive()\"\n        [attr.aria-label]=\"accessibleName()\"\n        [attr.aria-busy]=\"loading() ? 'true' : null\"\n        [attr.aria-expanded]=\"ariaExpanded()\"\n        [attr.aria-controls]=\"ariaControls()\"\n        [attr.aria-haspopup]=\"ariaHaspopup()\"\n        [attr.aria-pressed]=\"ariaPressed()\"\n        [attr.aria-current]=\"ariaCurrent()\"\n        (click)=\"onClick($event)\"\n      >\n        <ng-container [ngTemplateOutlet]=\"controlContent\" />\n      </button>\n    }\n  `,\n  styleUrl: \"./button.scss\",\n})\nexport class VikingButton {\n  readonly variant = input<VikingButtonVariant>(\"outline\");\n  readonly size = input<VikingSize>(\"base\");\n  readonly type = input<\"button\" | \"submit\">(\"button\");\n  readonly icon = input<VikingIconName | null>(null);\n  readonly iconTrailing = input<VikingIconName | null>(null);\n  readonly disabled = input<boolean>(false);\n  readonly loading = input<boolean>(false);\n  readonly square = input<boolean>(false);\n  readonly fullWidth = input<boolean>(false);\n  readonly compact = input<boolean>(false);\n  readonly href = input<string | null>(null);\n  readonly target = input<string | null>(null);\n  readonly kbd = input<string | null>(null);\n  readonly label = input<string>(\"\");\n  /** Forwarded onto the native control (host attrs alone are invisible to AT). */\n  readonly ariaExpanded = input<boolean | string | null>(null, {\n    alias: \"aria-expanded\",\n  });\n  readonly ariaControls = input<string | null>(null, {\n    alias: \"aria-controls\",\n  });\n  readonly ariaHaspopup = input<boolean | string | null>(null, {\n    alias: \"aria-haspopup\",\n  });\n  readonly ariaPressed = input<boolean | string | null>(null, {\n    alias: \"aria-pressed\",\n  });\n  readonly ariaCurrent = input<string | null>(null, { alias: \"aria-current\" });\n\n  readonly pressed = output<MouseEvent>();\n\n  protected readonly iconSize = computed(() =>\n    this.size() === \"base\" ? 20 : 18,\n  );\n\n  /**\n   * Voice/switch: square buttons hide the text label — always expose a name.\n   * Prefer explicit `label`; fall back to a humanized icon name for icon-only.\n   */\n  protected readonly accessibleName = computed(() => {\n    const explicit = this.label().trim();\n    if (explicit) return explicit;\n    if (this.square()) {\n      const icon = this.icon();\n      if (icon) return icon.replace(/-/g, \" \");\n    }\n    return null;\n  });\n\n  protected readonly isInteractive = computed(\n    () => !this.disabled() && !this.loading(),\n  );\n\n  protected readonly controlClass = computed(() => {\n    const size = this.size();\n    return {\n      [`viking-btn-${this.variant()}`]: true,\n      [`viking-btn-${size}`]: size !== \"base\",\n      \"viking-btn-square\": this.square(),\n      \"viking-full\": this.fullWidth(),\n      \"viking-compact\": this.compact(),\n    };\n  });\n\n  /** Maps filled/subtle → suite data-variant contract used by forjd-ui. */\n  protected readonly suiteVariant = computed(() => {\n    const v = this.variant();\n    if (v === \"filled\") return \"primary\";\n    if (v === \"subtle\") return \"ghost\";\n    return v;\n  });\n\n  protected readonly relAttr = computed(() =>\n    this.target() === \"_blank\" ? \"noopener noreferrer\" : null,\n  );\n\n  /** Drop javascript:/data:/protocol-relative hrefs (FORJD ADR-0013). */\n  protected readonly safeUrl = computed(() => safeHref(this.href()));\n\n  protected onClick = (event: MouseEvent): void => {\n    if (!this.isInteractive()) {\n      event.preventDefault();\n      event.stopPropagation();\n      return;\n    }\n    this.pressed.emit(event);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  output,\n} from \"@angular/core\";\nimport { VikingButton } from \"../button/button\";\n\nexport type VikingBulkAction = {\n  readonly id: string;\n  readonly label: string;\n  readonly variant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"danger\";\n  readonly disabled?: boolean;\n};\n\n/**\n * Non-modal bulk action bar — appears when list rows are selected (FORJD ADR-0021).\n */\n@Component({\n  selector: \"viking-bulk-toolbar\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [VikingButton],\n  template: `\n    @if (count() > 0) {\n      <div\n        class=\"suite-bulk-toolbar viking-bulk-toolbar fj-bulk-toolbar\"\n        role=\"region\"\n        [attr.aria-label]=\"ariaLabel()\"\n      >\n        <p\n          class=\"suite-bulk-toolbar-count viking-bulk-toolbar-count fj-bulk-toolbar-count\"\n        >\n          {{ count() }} selected\n        </p>\n        <div\n          class=\"suite-bulk-toolbar-actions viking-bulk-toolbar-actions fj-bulk-toolbar-actions\"\n        >\n          @for (action of actions(); track action.id) {\n            <viking-button\n              type=\"button\"\n              [variant]=\"action.variant ?? 'secondary'\"\n              [disabled]=\"action.disabled ?? false\"\n              (pressed)=\"actionClick.emit(action.id)\"\n            >\n              {{ action.label }}\n            </viking-button>\n          }\n          <viking-button type=\"button\" variant=\"ghost\" (pressed)=\"clear.emit()\">\n            Clear\n          </viking-button>\n        </div>\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: contents;\n      }\n    `,\n  ],\n})\nexport class VikingBulkToolbar {\n  readonly count = input(0);\n  readonly actions = input<readonly VikingBulkAction[]>([]);\n  readonly ariaLabel = input(\"Bulk actions\");\n  readonly actionClick = output<string>();\n  readonly clear = output<void>();\n}\n","/**\n * Progressive disclosure store — smart defaults + remembered expand state\n * (FORJD ADR-0022). Dual-adapter: keep API aligned with forjd-ui core/a11y/disclosure.\n *\n * Advanced sections default collapsed so new users see essentials first.\n * Expand state persists in localStorage (never secrets).\n */\n\nexport const SUITE_DISCLOSURE_STORAGE_KEY = \"suite-disclosure-v1\";\n\nexport type DisclosureStore = {\n  readonly isOpen: (id: string, fallback?: boolean) => boolean;\n  readonly setOpen: (id: string, open: boolean) => void;\n  readonly toggle: (id: string, fallback?: boolean) => void;\n  /** Clear one id (or all) so smart defaults apply again. */\n  readonly reset: (id?: string) => void;\n  /** Remembered expand map (suite data pack — FORJD ADR-0026). */\n  readonly snapshot: () => Readonly<Record<string, boolean>>;\n  /** Merge or replace remembered expand state (suite data pack — FORJD ADR-0026). */\n  readonly importMap: (\n    map: Readonly<Record<string, boolean>>,\n    mode?: \"merge\" | \"replace\",\n  ) => void;\n  readonly subscribe: (listener: () => void) => () => void;\n};\n\nexport type CreateDisclosureStoreOptions = {\n  readonly storageKey?: string;\n  /** Explicit defaults — missing ids fall back to `false` (collapsed). */\n  readonly defaults?: Readonly<Record<string, boolean>>;\n  readonly storage?: Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\"> | null;\n};\n\ntype StorageLike = Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\">;\n\nfunction safeStorage(explicit?: StorageLike | null): StorageLike | null {\n  if (explicit !== undefined) {\n    return explicit;\n  }\n  try {\n    if (typeof globalThis.localStorage === \"undefined\") {\n      return null;\n    }\n    return globalThis.localStorage;\n  } catch {\n    return null;\n  }\n}\n\nfunction readMap(\n  storage: StorageLike | null,\n  key: string,\n): Record<string, boolean> {\n  if (!storage) {\n    return {};\n  }\n  try {\n    const raw = storage.getItem(key);\n    if (!raw) {\n      return {};\n    }\n    const parsed = JSON.parse(raw) as unknown;\n    if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n      return {};\n    }\n    const out: Record<string, boolean> = {};\n    for (const [id, value] of Object.entries(\n      parsed as Record<string, unknown>,\n    )) {\n      if (!id || typeof value !== \"boolean\") {\n        continue;\n      }\n      out[String(id).slice(0, 128)] = value;\n    }\n    return out;\n  } catch {\n    return {};\n  }\n}\n\nfunction writeMap(\n  storage: StorageLike | null,\n  key: string,\n  map: Record<string, boolean>,\n): void {\n  if (!storage) {\n    return;\n  }\n  try {\n    storage.setItem(key, JSON.stringify(map));\n  } catch {\n    // Quota / private mode — keep in-memory only.\n  }\n}\n\nexport function createDisclosureStore(\n  options?: CreateDisclosureStoreOptions,\n): DisclosureStore {\n  const storageKey = options?.storageKey ?? SUITE_DISCLOSURE_STORAGE_KEY;\n  const defaults = { ...(options?.defaults ?? {}) };\n  const storage = safeStorage(options?.storage);\n  let remembered = readMap(storage, storageKey);\n  const listeners = new Set<() => void>();\n\n  const notify = (): void => {\n    for (const listener of listeners) {\n      try {\n        listener();\n      } catch {\n        // Listener failures must not break disclosure.\n      }\n    }\n  };\n\n  const resolve = (id: string, fallback?: boolean): boolean => {\n    const key = String(id).slice(0, 128);\n    if (!key) {\n      return false;\n    }\n    if (Object.prototype.hasOwnProperty.call(remembered, key)) {\n      return remembered[key]!;\n    }\n    if (fallback != null) {\n      return fallback;\n    }\n    if (Object.prototype.hasOwnProperty.call(defaults, key)) {\n      return defaults[key]!;\n    }\n    return false;\n  };\n\n  return {\n    isOpen: (id, fallback) => resolve(id, fallback),\n    setOpen: (id, open) => {\n      const key = String(id).slice(0, 128);\n      if (!key) {\n        return;\n      }\n      if (remembered[key] === open) {\n        return;\n      }\n      remembered = { ...remembered, [key]: open };\n      writeMap(storage, storageKey, remembered);\n      notify();\n    },\n    toggle: (id, fallback) => {\n      const next = !resolve(id, fallback);\n      const key = String(id).slice(0, 128);\n      if (!key) {\n        return;\n      }\n      remembered = { ...remembered, [key]: next };\n      writeMap(storage, storageKey, remembered);\n      notify();\n    },\n    reset: (id) => {\n      if (id == null) {\n        remembered = {};\n        try {\n          storage?.removeItem(storageKey);\n        } catch {\n          // ignore\n        }\n        notify();\n        return;\n      }\n      const key = String(id).slice(0, 128);\n      if (!key || !Object.prototype.hasOwnProperty.call(remembered, key)) {\n        return;\n      }\n      const next = { ...remembered };\n      delete next[key];\n      remembered = next;\n      writeMap(storage, storageKey, remembered);\n      notify();\n    },\n    snapshot: () => ({ ...remembered }),\n    importMap: (map, mode = \"merge\") => {\n      const incoming: Record<string, boolean> = {};\n      for (const [id, value] of Object.entries(map)) {\n        if (!id || typeof value !== \"boolean\") {\n          continue;\n        }\n        incoming[String(id).slice(0, 128)] = value;\n      }\n      remembered =\n        mode === \"replace\" ? incoming : { ...remembered, ...incoming };\n      writeMap(storage, storageKey, remembered);\n      notify();\n    },\n    subscribe: (listener) => {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n\nlet defaultStore: DisclosureStore | null = null;\n\n/** Process-wide suite disclosure store (shared across disclosure hosts). */\nexport function getDefaultDisclosureStore(): DisclosureStore {\n  return (defaultStore ??= createDisclosureStore());\n}\n\n/** Test helper — drop the singleton between suites. */\nexport function resetDefaultDisclosureStore(): void {\n  defaultStore = null;\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n  getDefaultDisclosureStore,\n  type DisclosureStore,\n} from \"../../core/disclosure\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * Progressive disclosure panel — advanced content collapsed by default\n * (FORJD ADR-0022). Chrome: suite-components.css (`.suite-disclosure`).\n */\n@Component({\n  selector: \"viking-disclosure\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [VikingIcon],\n  template: `\n    <div\n      class=\"suite-disclosure viking-disclosure fj-disclosure\"\n      [attr.data-open]=\"open() ? 'true' : 'false'\"\n      [attr.data-level]=\"level()\"\n    >\n      <button\n        type=\"button\"\n        class=\"suite-disclosure-trigger viking-disclosure-trigger fj-disclosure-trigger\"\n        [id]=\"triggerId\"\n        [attr.aria-expanded]=\"open()\"\n        [attr.aria-controls]=\"panelId\"\n        (click)=\"toggle()\"\n      >\n        <span\n          class=\"suite-disclosure-copy viking-disclosure-copy fj-disclosure-copy\"\n        >\n          @if (badge()) {\n            <span\n              class=\"suite-disclosure-badge viking-disclosure-badge fj-disclosure-badge\"\n              >{{ badge() }}</span\n            >\n          }\n          <span\n            class=\"suite-disclosure-heading viking-disclosure-heading fj-disclosure-heading\"\n            >{{ heading() }}</span\n          >\n          @if (description()) {\n            <span\n              class=\"suite-disclosure-description viking-disclosure-description fj-disclosure-description\"\n              >{{ description() }}</span\n            >\n          }\n        </span>\n        <viking-icon\n          class=\"suite-disclosure-chevron viking-disclosure-chevron fj-disclosure-chevron\"\n          [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n          [size]=\"18\"\n        />\n      </button>\n      @if (open()) {\n        <div\n          class=\"suite-disclosure-panel viking-disclosure-panel fj-disclosure-panel\"\n          [id]=\"panelId\"\n          role=\"region\"\n          [attr.aria-labelledby]=\"triggerId\"\n        >\n          <ng-content />\n        </div>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n    `,\n  ],\n})\nexport class VikingDisclosure {\n  private readonly destroyRef = inject(DestroyRef);\n  private store: DisclosureStore = getDefaultDisclosureStore();\n\n  /** Stable section id for persistence (e.g. `deml.settings.telemetry`). */\n  readonly sectionId = input.required<string>();\n  readonly heading = input.required<string>();\n  readonly description = input(\"\");\n  /** Smart default when the user has never toggled this section. */\n  readonly defaultOpen = input(false);\n  /** Small label — default “Advanced” for progressive disclosure. */\n  readonly badge = input(\"Advanced\");\n  readonly level = input<\"default\" | \"inset\">(\"default\");\n\n  protected readonly open = signal(false);\n  protected readonly triggerId = vikingUid(\"viking-disclosure-trigger\");\n  protected readonly panelId = computed(() => `${this.triggerId}-panel`);\n\n  constructor() {\n    effect(() => {\n      this.open.set(this.store.isOpen(this.sectionId(), this.defaultOpen()));\n    });\n    const unsub = this.store.subscribe(() => {\n      this.open.set(this.store.isOpen(this.sectionId(), this.defaultOpen()));\n    });\n    this.destroyRef.onDestroy(unsub);\n  }\n\n  protected toggle(): void {\n    this.store.toggle(this.sectionId(), this.defaultOpen());\n    this.open.set(this.store.isOpen(this.sectionId(), this.defaultOpen()));\n  }\n}\n","/**\n * Suite keyboard shortcut registry + helpers (FORJD ADR-0023).\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/keyboard-shortcuts.\n *\n * Features keep their own listeners (search, undo); this catalog documents\n * them and owns the help chord (`?`). Never store secrets in shortcut state.\n */\n\nexport type SuiteShortcut = {\n  readonly id: string;\n  /**\n   * Display chord tokens. Use `Mod` for ⌘ (macOS) / Ctrl (elsewhere).\n   * Examples: `['Mod', 'K']`, `['/']`, `['?']`, `['Esc']`.\n   */\n  readonly keys: readonly string[];\n  readonly label: string;\n  readonly group: string;\n  readonly description?: string;\n};\n\nexport type ShortcutRegistry = {\n  readonly list: () => readonly SuiteShortcut[];\n  readonly byGroup: () => ReadonlyArray<{\n    readonly group: string;\n    readonly items: readonly SuiteShortcut[];\n  }>;\n  readonly register: (shortcut: SuiteShortcut) => void;\n  readonly unregister: (id: string) => void;\n  readonly subscribe: (listener: () => void) => () => void;\n};\n\nexport type CreateShortcutRegistryOptions = {\n  readonly initial?: readonly SuiteShortcut[];\n};\n\n/** True when keydown should not steal typing focus. */\nexport function isEditableKeyboardTarget(target: EventTarget | null): boolean {\n  if (!(target instanceof HTMLElement)) {\n    return false;\n  }\n  if (target.isContentEditable) {\n    return true;\n  }\n  const tag = target.tagName;\n  if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") {\n    return true;\n  }\n  return Boolean(target.closest('[contenteditable=\"true\"], [role=\"textbox\"]'));\n}\n\nexport function prefersMacModKey(\n  platform: string = typeof navigator !== \"undefined\" ? navigator.platform : \"\",\n): boolean {\n  return /Mac|iPhone|iPad/i.test(platform);\n}\n\n/** Expand `Mod` and join for docs / aria. */\nexport function formatShortcutChord(\n  keys: readonly string[],\n  options?: { readonly mac?: boolean },\n): string {\n  const mac = options?.mac ?? prefersMacModKey();\n  return keys\n    .map((token) => {\n      if (token === \"Mod\") {\n        return mac ? \"⌘\" : \"Ctrl\";\n      }\n      if (token === \"Shift\") {\n        return mac ? \"⇧\" : \"Shift\";\n      }\n      if (token === \"Alt\") {\n        return mac ? \"⌥\" : \"Alt\";\n      }\n      return token;\n    })\n    .join(mac ? \"\" : \"+\");\n}\n\n/** Built-in suite shortcuts (search / undo / help). Bindings live with owners. */\nexport function suiteDefaultShortcuts(): readonly SuiteShortcut[] {\n  return [\n    {\n      id: \"search\",\n      keys: [\"Mod\", \"K\"],\n      label: \"Open search\",\n      group: \"Navigation\",\n      description: \"Command palette — jump to docs and destinations.\",\n    },\n    {\n      id: \"search-slash\",\n      keys: [\"/\"],\n      label: \"Open search\",\n      group: \"Navigation\",\n      description: \"Same as Mod+K when focus is not in a field.\",\n    },\n    {\n      id: \"close-overlay\",\n      keys: [\"Esc\"],\n      label: \"Close overlay\",\n      group: \"Navigation\",\n      description: \"Dismiss search, dialogs, sheets, and shortcut help.\",\n    },\n    {\n      id: \"preferences\",\n      keys: [\"Mod\", \",\"],\n      label: \"Open preferences\",\n      group: \"Navigation\",\n      description: \"Appearance and local UI preferences (FORJD ADR-0024).\",\n    },\n    {\n      id: \"undo\",\n      keys: [\"Mod\", \"Z\"],\n      label: \"Undo\",\n      group: \"Editing\",\n      description: \"Reversible client actions only (FORJD ADR-0019).\",\n    },\n    {\n      id: \"redo\",\n      keys: [\"Mod\", \"Shift\", \"Z\"],\n      label: \"Redo\",\n      group: \"Editing\",\n    },\n    {\n      id: \"redo-y\",\n      keys: [\"Mod\", \"Y\"],\n      label: \"Redo\",\n      group: \"Editing\",\n      description: \"Windows / Linux alternate.\",\n    },\n    {\n      id: \"shortcut-help\",\n      keys: [\"?\"],\n      label: \"Keyboard shortcuts\",\n      group: \"Help\",\n      description: \"Open this reference.\",\n    },\n  ];\n}\n\nexport function createShortcutRegistry(\n  options?: CreateShortcutRegistryOptions,\n): ShortcutRegistry {\n  const byId = new Map<string, SuiteShortcut>();\n  for (const item of options?.initial ?? []) {\n    byId.set(item.id, item);\n  }\n  const listeners = new Set<() => void>();\n\n  const notify = (): void => {\n    for (const listener of listeners) {\n      try {\n        listener();\n      } catch {\n        // Listener failures must not break shortcuts.\n      }\n    }\n  };\n\n  return {\n    list: () => [...byId.values()],\n    byGroup: () => {\n      const groups = new Map<string, SuiteShortcut[]>();\n      for (const item of byId.values()) {\n        const bucket = groups.get(item.group) ?? [];\n        bucket.push(item);\n        groups.set(item.group, bucket);\n      }\n      return [...groups.entries()].map(([group, items]) => ({ group, items }));\n    },\n    register: (shortcut) => {\n      const id = String(shortcut.id).slice(0, 64);\n      if (!id) {\n        return;\n      }\n      byId.set(id, { ...shortcut, id });\n      notify();\n    },\n    unregister: (id) => {\n      if (byId.delete(String(id))) {\n        notify();\n      }\n    },\n    subscribe: (listener) => {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n\nlet defaultRegistry: ShortcutRegistry | null = null;\n\nexport function getDefaultShortcutRegistry(): ShortcutRegistry {\n  if (!defaultRegistry) {\n    defaultRegistry = createShortcutRegistry({\n      initial: suiteDefaultShortcuts(),\n    });\n  }\n  return defaultRegistry;\n}\n\nexport function resetDefaultShortcutRegistry(): void {\n  defaultRegistry = null;\n}\n\n/**\n * Bind `?` (Shift+/) to open shortcut help.\n * Skips editable fields and when a modifier other than Shift is held.\n */\nexport function bindShortcutHelpKey(\n  onOpen: () => void,\n  options?: { readonly target?: Document },\n): () => void {\n  const doc =\n    options?.target ?? (typeof document !== \"undefined\" ? document : null);\n  if (!doc) {\n    return () => undefined;\n  }\n\n  const onKeydown = (event: KeyboardEvent): void => {\n    if (event.defaultPrevented) {\n      return;\n    }\n    if (event.metaKey || event.ctrlKey || event.altKey) {\n      return;\n    }\n    if (event.key !== \"?\") {\n      return;\n    }\n    if (isEditableKeyboardTarget(event.target)) {\n      return;\n    }\n    event.preventDefault();\n    onOpen();\n  };\n\n  doc.addEventListener(\"keydown\", onKeydown);\n  return () => doc.removeEventListener(\"keydown\", onKeydown);\n}\n","import { Injectable, OnDestroy, signal } from \"@angular/core\";\nimport {\n  bindShortcutHelpKey,\n  getDefaultShortcutRegistry,\n  type ShortcutRegistry,\n} from \"../../core/keyboard-shortcuts\";\n\n/**\n * Suite shortcut help — `?` opens the reference dialog (FORJD ADR-0023).\n */\n@Injectable({ providedIn: \"root\" })\nexport class VikingShortcutHelpService implements OnDestroy {\n  private readonly openSignal = signal(false);\n  readonly open = this.openSignal.asReadonly();\n  readonly registry: ShortcutRegistry = getDefaultShortcutRegistry();\n  private readonly unbind: () => void;\n\n  constructor() {\n    this.unbind = bindShortcutHelpKey(() => this.show());\n  }\n\n  show(): void {\n    this.openSignal.set(true);\n  }\n\n  hide(): void {\n    this.openSignal.set(false);\n  }\n\n  setOpen(next: boolean): void {\n    this.openSignal.set(next);\n  }\n\n  ngOnDestroy(): void {\n    this.unbind();\n  }\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\n/**\n * viking-kbd — keyboard hint chip.\n */\n@Component({\n  selector: \"viking-kbd\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-ui);\n        font-weight: 600;\n        line-height: 1.2;\n        color: var(--viking-text-muted);\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border);\n        border-radius: calc(var(--viking-radius) / 2);\n        padding: var(--viking-space-0-5) var(--viking-space-1);\n        min-width: 1.5rem;\n        box-shadow: inset 0 -1px 0\n          color-mix(in srgb, var(--viking-border) 65%, transparent);\n      }\n    `,\n  ],\n})\nexport class VikingKbd {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnDestroy,\n  effect,\n  inject,\n  input,\n  model,\n  viewChild,\n} from \"@angular/core\";\nimport { NativeDialogSession } from \"../../core/dialog-session\";\nimport { vikingUid } from \"../../core/uid\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-modal — dialog built on the native <dialog> element\n *. Toggle via the `open` model.\n */\n@Component({\n  selector: \"viking-modal\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <dialog\n      #dialog\n      class=\"viking-modal\"\n      tabindex=\"-1\"\n      aria-modal=\"true\"\n      [attr.aria-labelledby]=\"heading() ? titleId : null\"\n      [attr.aria-label]=\"heading() ? null : 'Dialog'\"\n      (close)=\"onNativeClose()\"\n      (click)=\"onBackdropClick($event)\"\n      (keydown)=\"onDialogKeydown($event)\"\n      (keydown.escape)=\"dismissible() && open.set(false)\"\n    >\n      <div class=\"viking-modal-surface\">\n        <header class=\"viking-modal-header\">\n          @if (heading()) {\n            <h2 class=\"viking-modal-heading\" [id]=\"titleId\">{{ heading() }}</h2>\n          }\n          @if (dismissible()) {\n            <button\n              type=\"button\"\n              class=\"viking-modal-close\"\n              aria-label=\"Close dialog\"\n              (click)=\"open.set(false)\"\n            >\n              <viking-icon name=\"x\" [size]=\"20\" />\n            </button>\n          }\n        </header>\n        <div class=\"viking-modal-body\"><ng-content /></div>\n        <footer class=\"viking-modal-footer\">\n          <ng-content select=\"[vikingModalActions]\" />\n        </footer>\n      </div>\n    </dialog>\n  `,\n  styles: [\n    `\n      .viking-modal {\n        padding: 0;\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius-lg);\n        background: var(--viking-surface);\n        color: var(--viking-text);\n        box-shadow: var(--viking-shadow-lg);\n        width: min(522px, calc(100vw - var(--viking-space-4)));\n        animation: viking-modal-in var(--viking-duration)\n          var(--viking-ease-default);\n        overflow: hidden;\n      }\n      .viking-modal:not([open]) {\n        display: none !important;\n        pointer-events: none;\n      }\n      .viking-modal::backdrop {\n        background: var(--viking-overlay-backdrop);\n        backdrop-filter: blur(8px);\n        animation: viking-backdrop-in var(--viking-duration-fast)\n          var(--viking-ease-default);\n      }\n      .viking-modal-surface {\n        display: flex;\n        flex-direction: column;\n        padding: var(--viking-space-3);\n        gap: var(--viking-space-2);\n        font-family: var(--viking-font-family);\n      }\n      .viking-modal-header {\n        display: flex;\n        align-items: flex-start;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        padding-bottom: var(--viking-space-1);\n        border-bottom: 1px solid var(--viking-border-subtle);\n      }\n      .viking-modal-heading {\n        margin: 0;\n        font-size: var(--viking-font-size-md);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        color: var(--viking-text);\n        line-height: var(--viking-line-height-tight);\n      }\n      .viking-modal-close {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-control-height-sm);\n        height: var(--viking-control-height-sm);\n        min-width: var(--viking-touch-target-min, 44px);\n        min-height: var(--viking-touch-target-min, 44px);\n        border: 1px solid transparent;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: 0;\n        border-radius: var(--viking-radius);\n        transition: var(--viking-transition-interactive);\n        flex-shrink: 0;\n      }\n      .viking-modal-close:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n        border-color: var(--viking-border-subtle);\n      }\n      .viking-modal-close:active {\n        transform: scale(var(--viking-state-active-scale));\n      }\n      .viking-modal-close:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-modal-body {\n        font-size: var(--viking-font-size);\n        line-height: var(--viking-line-height-relaxed);\n        color: var(--viking-text-muted);\n        animation: viking-fade-in var(--viking-duration)\n          var(--viking-ease-default);\n      }\n      .viking-modal-footer {\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: flex-end;\n        align-items: center;\n        gap: var(--viking-space-2);\n        padding-top: var(--viking-space-2);\n        border-top: 1px solid var(--viking-border-subtle);\n      }\n      .viking-modal-footer:empty {\n        display: none;\n      }\n      /* Projected action wrappers keep buttons in a single slot — spread gap inside */\n      :host ::ng-deep .viking-modal-footer [vikingModalActions] {\n        display: flex;\n        flex-wrap: nowrap;\n        justify-content: flex-end;\n        align-items: center;\n        gap: var(--viking-space-2);\n        width: 100%;\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .viking-modal {\n          animation: none;\n        }\n        .viking-modal::backdrop {\n          animation: none;\n        }\n        .viking-modal-body {\n          animation: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingModal implements OnDestroy {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly dialogRef =\n    viewChild.required<ElementRef<HTMLDialogElement>>(\"dialog\");\n  private readonly session = new NativeDialogSession();\n\n  readonly open = model<boolean>(false);\n  readonly heading = input<string>(\"\");\n  readonly dismissible = input<boolean>(true);\n  protected readonly titleId = vikingUid(\"viking-modal-title\");\n\n  constructor() {\n    effect(() => {\n      this.session.syncOpen(this.dialogRef().nativeElement, this.open(), {\n        connected: this.host.nativeElement.isConnected,\n      });\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.session.destroy(this.dialogRef()?.nativeElement);\n  }\n\n  protected onNativeClose = (): void => {\n    this.session.onNativeClose(() => {\n      if (this.open()) this.open.set(false);\n    });\n  };\n\n  protected onBackdropClick = (event: MouseEvent): void => {\n    this.session.onBackdropClick(\n      event,\n      this.dialogRef().nativeElement,\n      this.dismissible() && this.open(),\n      () => this.open.set(false),\n    );\n  };\n\n  /** Defensive Tab cycle — complements native showModal() focus trap. */\n  protected onDialogKeydown = (event: KeyboardEvent): void => {\n    this.session.onKeydown(event, this.dialogRef().nativeElement);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  computed,\n  inject,\n  signal,\n} from \"@angular/core\";\nimport {\n  formatShortcutChord,\n  prefersMacModKey,\n  type SuiteShortcut,\n} from \"../../core/keyboard-shortcuts\";\nimport { VikingKbd } from \"../kbd/kbd\";\nimport { VikingModal } from \"../modal/modal\";\nimport { VikingShortcutHelpService } from \"./shortcut-help.service\";\n\n/**\n * Keyboard shortcut reference dialog (FORJD ADR-0023).\n * Open via `?` or `VikingShortcutHelpService.show()`.\n */\n@Component({\n  selector: \"viking-shortcut-help\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [VikingModal, VikingKbd],\n  template: `\n    <viking-modal\n      [open]=\"help.open()\"\n      (openChange)=\"help.setOpen($event)\"\n      heading=\"Keyboard shortcuts\"\n    >\n      <div class=\"suite-shortcut-help viking-shortcut-help fj-shortcut-help\">\n        <p\n          class=\"suite-shortcut-help-lede viking-shortcut-help-lede fj-shortcut-help-lede\"\n        >\n          Power-user chords for DEML / FORJD suite chrome. Press\n          <viking-kbd>?</viking-kbd> anytime (outside fields).\n        </p>\n        @for (group of groups(); track group.group) {\n          <section\n            class=\"suite-shortcut-help-group viking-shortcut-help-group fj-shortcut-help-group\"\n            [attr.aria-label]=\"group.group\"\n          >\n            <h3\n              class=\"suite-shortcut-help-group-title viking-shortcut-help-group-title fj-shortcut-help-group-title\"\n            >\n              {{ group.group }}\n            </h3>\n            <ul\n              class=\"suite-shortcut-help-list viking-shortcut-help-list fj-shortcut-help-list\"\n            >\n              @for (item of group.items; track item.id) {\n                <li>\n                  <div\n                    class=\"suite-shortcut-help-row viking-shortcut-help-row fj-shortcut-help-row\"\n                  >\n                    <div>\n                      <p\n                        class=\"suite-shortcut-help-label viking-shortcut-help-label fj-shortcut-help-label\"\n                      >\n                        {{ item.label }}\n                      </p>\n                      @if (item.description) {\n                        <p\n                          class=\"suite-shortcut-help-desc viking-shortcut-help-desc fj-shortcut-help-desc\"\n                        >\n                          {{ item.description }}\n                        </p>\n                      }\n                    </div>\n                    <div\n                      class=\"suite-shortcut-help-keys viking-shortcut-help-keys fj-shortcut-help-keys\"\n                      [attr.aria-label]=\"chord(item)\"\n                    >\n                      @for (token of displayKeys(item); track $index) {\n                        <viking-kbd>{{ token }}</viking-kbd>\n                      }\n                    </div>\n                  </div>\n                </li>\n              }\n            </ul>\n          </section>\n        }\n      </div>\n    </viking-modal>\n  `,\n  styles: [\n    `\n      :host {\n        display: contents;\n      }\n    `,\n  ],\n})\nexport class VikingShortcutHelp {\n  protected readonly help = inject(VikingShortcutHelpService);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly mac = prefersMacModKey();\n  private readonly tick = signal(0);\n\n  constructor() {\n    const unsub = this.help.registry.subscribe(() =>\n      this.tick.update((n) => n + 1),\n    );\n    this.destroyRef.onDestroy(unsub);\n  }\n\n  protected readonly groups = computed(() => {\n    this.tick();\n    return this.help.registry.byGroup();\n  });\n\n  protected displayKeys(item: SuiteShortcut): string[] {\n    return item.keys.map((token) => {\n      if (token === \"Mod\") {\n        return this.mac ? \"⌘\" : \"Ctrl\";\n      }\n      if (token === \"Shift\") {\n        return this.mac ? \"⇧\" : \"Shift\";\n      }\n      if (token === \"Alt\") {\n        return this.mac ? \"⌥\" : \"Alt\";\n      }\n      return token;\n    });\n  }\n\n  protected chord(item: SuiteShortcut): string {\n    return formatShortcutChord(item.keys, { mac: this.mac });\n  }\n}\n","/**\n * Suite preferences store — persist + cross-tab sync (FORJD ADR-0024).\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/preferences.\n *\n * Soft UI chrome only (theme, …). Never store secrets, tokens, or auth.\n * Theme also mirrors `suite-theme` for FOUC / legacy readers.\n */\n\nimport {\n  type SuiteThemePreference,\n  parseSuiteThemePreference,\n  readSuiteThemePreference,\n  writeSuiteThemePreference,\n  SUITE_THEME_STORAGE_KEY,\n} from \"./theme\";\n\nexport const SUITE_PREFERENCES_STORAGE_KEY = \"suite-preferences-v1\";\nexport const SUITE_PREFERENCES_CHANGE_EVENT = \"suite-preferences-change\";\n\nexport type SuitePreferences = {\n  readonly theme: SuiteThemePreference;\n  /** Epoch ms — last-write-wins across tabs. */\n  readonly updatedAt: number;\n};\n\nexport type PreferencesPatch = {\n  readonly theme?: SuiteThemePreference;\n};\n\nexport type PreferencesStore = {\n  readonly get: () => SuitePreferences;\n  readonly patch: (\n    partial: PreferencesPatch,\n    opts?: { readonly source?: \"local\" | \"theme\" | \"sync\" },\n  ) => SuitePreferences;\n  readonly reset: () => SuitePreferences;\n  readonly subscribe: (listener: () => void) => () => void;\n  /** Listen for `storage` + same-tab CustomEvent. */\n  readonly bindSync: (options?: { readonly target?: Window }) => () => void;\n};\n\nexport type CreatePreferencesStoreOptions = {\n  readonly storageKey?: string;\n  readonly storage?: Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\"> | null;\n};\n\ntype StorageLike = Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\">;\n\nfunction safeStorage(explicit?: StorageLike | null): StorageLike | null {\n  if (explicit !== undefined) {\n    return explicit;\n  }\n  try {\n    if (typeof globalThis.localStorage === \"undefined\") {\n      return null;\n    }\n    return globalThis.localStorage;\n  } catch {\n    return null;\n  }\n}\n\nfunction defaults(): SuitePreferences {\n  return {\n    theme: \"system\",\n    updatedAt: 0,\n  };\n}\n\nfunction sanitize(\n  raw: unknown,\n  fallbackTheme: SuiteThemePreference,\n): SuitePreferences {\n  const base = defaults();\n  if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n    return { ...base, theme: fallbackTheme, updatedAt: Date.now() };\n  }\n  const row = raw as Record<string, unknown>;\n  const theme =\n    parseSuiteThemePreference(\n      typeof row[\"theme\"] === \"string\" ? row[\"theme\"] : null,\n    ) ?? fallbackTheme;\n  const updatedAt = Number(row[\"updatedAt\"]);\n  return {\n    theme,\n    updatedAt: Number.isFinite(updatedAt) ? updatedAt : Date.now(),\n  };\n}\n\nfunction readBlob(\n  storage: StorageLike | null,\n  key: string,\n): SuitePreferences | null {\n  if (!storage) {\n    return null;\n  }\n  try {\n    const raw = storage.getItem(key);\n    if (!raw) {\n      return null;\n    }\n    return sanitize(\n      JSON.parse(raw) as unknown,\n      readSuiteThemePreference(storage),\n    );\n  } catch {\n    return null;\n  }\n}\n\nfunction writeBlob(\n  storage: StorageLike | null,\n  key: string,\n  prefs: SuitePreferences,\n): void {\n  if (!storage) {\n    return;\n  }\n  try {\n    storage.setItem(key, JSON.stringify(prefs));\n  } catch {\n    // Quota / private mode — keep in-memory only.\n  }\n}\n\nfunction dispatchChange(prefs: SuitePreferences): void {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n  window.dispatchEvent(\n    new CustomEvent(SUITE_PREFERENCES_CHANGE_EVENT, {\n      bubbles: true,\n      detail: prefs,\n    }),\n  );\n}\n\nexport function createPreferencesStore(\n  options?: CreatePreferencesStoreOptions,\n): PreferencesStore {\n  const storageKey = options?.storageKey ?? SUITE_PREFERENCES_STORAGE_KEY;\n  const storage = safeStorage(options?.storage);\n  const migratedTheme = readSuiteThemePreference(storage);\n  let state: SuitePreferences =\n    readBlob(storage, storageKey) ??\n    ({\n      theme: migratedTheme,\n      updatedAt: Date.now(),\n    } satisfies SuitePreferences);\n\n  if (!readBlob(storage, storageKey)) {\n    writeBlob(storage, storageKey, state);\n  }\n\n  const listeners = new Set<() => void>();\n\n  const notify = (): void => {\n    for (const listener of listeners) {\n      try {\n        listener();\n      } catch {\n        // Listener failures must not break preferences.\n      }\n    }\n  };\n\n  const applyLocal = (\n    next: SuitePreferences,\n    source: \"local\" | \"theme\" | \"sync\",\n  ): SuitePreferences => {\n    state = next;\n    if (source !== \"sync\") {\n      writeBlob(storage, storageKey, state);\n      if (source !== \"theme\") {\n        writeSuiteThemePreference(state.theme, storage);\n      }\n      dispatchChange(state);\n    }\n    notify();\n    return state;\n  };\n\n  return {\n    get: () => state,\n    patch: (partial, opts) => {\n      const source = opts?.source ?? \"local\";\n      const theme = partial.theme ?? state.theme;\n      if (\n        theme === state.theme &&\n        source === \"local\" &&\n        partial.theme != null\n      ) {\n        return state;\n      }\n      if (theme === state.theme && source === \"theme\") {\n        return applyLocal({ theme, updatedAt: Date.now() }, \"theme\");\n      }\n      if (theme === state.theme && source === \"sync\") {\n        return state;\n      }\n      return applyLocal({ theme, updatedAt: Date.now() }, source);\n    },\n    reset: () =>\n      applyLocal({ theme: \"system\", updatedAt: Date.now() }, \"local\"),\n    subscribe: (listener) => {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n    bindSync: (bindOpts) => {\n      const win =\n        bindOpts?.target ?? (typeof window !== \"undefined\" ? window : null);\n      if (!win) {\n        return () => undefined;\n      }\n\n      const onStorage = (event: StorageEvent): void => {\n        if (event.storageArea && storage && event.storageArea !== storage) {\n          return;\n        }\n        if (event.key !== storageKey && event.key !== SUITE_THEME_STORAGE_KEY) {\n          return;\n        }\n        const remote =\n          readBlob(storage, storageKey) ??\n          ({\n            theme: readSuiteThemePreference(storage),\n            updatedAt: Date.now(),\n          } satisfies SuitePreferences);\n        if (\n          remote.theme === state.theme &&\n          remote.updatedAt === state.updatedAt\n        ) {\n          return;\n        }\n        if (remote.updatedAt < state.updatedAt && event.key === storageKey) {\n          return;\n        }\n        applyLocal(remote, \"sync\");\n      };\n\n      const onCustom = (event: Event): void => {\n        const detail = (event as CustomEvent<SuitePreferences>).detail;\n        if (!detail || typeof detail !== \"object\") {\n          return;\n        }\n        const remote = sanitize(detail, state.theme);\n        if (remote.theme === state.theme) {\n          return;\n        }\n        applyLocal(remote, \"sync\");\n      };\n\n      win.addEventListener(\"storage\", onStorage);\n      win.addEventListener(SUITE_PREFERENCES_CHANGE_EVENT, onCustom);\n      return () => {\n        win.removeEventListener(\"storage\", onStorage);\n        win.removeEventListener(SUITE_PREFERENCES_CHANGE_EVENT, onCustom);\n      };\n    },\n  };\n}\n\nlet defaultStore: PreferencesStore | null = null;\n\nexport function getDefaultPreferencesStore(): PreferencesStore {\n  return (defaultStore ??= createPreferencesStore());\n}\n\nexport function resetDefaultPreferencesStore(): void {\n  defaultStore = null;\n}\n","/**\n * Suite activity log — important soft-chrome actions (FORJD ADR-0027).\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/activity-log.\n *\n * Local, capped, metadata-only. Never secrets, tokens, or ciphertext.\n * Not a substitute for server `audit_events` / DEML AuditLog.\n */\n\nexport const SUITE_ACTIVITY_STORAGE_KEY = \"suite-activity-v1\";\nexport const SUITE_ACTIVITY_CHANGE_EVENT = \"suite-activity-change\";\n\nconst DEFAULT_MAX_ENTRIES = 50;\nconst KIND_MAX = 64;\nconst LABEL_MAX = 200;\nconst DETAIL_MAX = 200;\n\nconst SENSITIVE =\n  /fjsvc_|Bearer\\s|eyJ[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9]{10,}|api[_-]?key\\s*[:=]/i;\n\nexport type SuiteActivitySource = \"forjd\" | \"deml\" | \"suite\";\n\nexport type SuiteActivityEntry = {\n  readonly id: string;\n  readonly at: number;\n  readonly kind: string;\n  readonly label: string;\n  readonly detail?: string;\n  readonly source?: SuiteActivitySource;\n};\n\nexport type ActivityLogRecordInput = {\n  readonly kind: string;\n  readonly label: string;\n  readonly detail?: string;\n  readonly source?: SuiteActivitySource;\n  readonly at?: number;\n};\n\nexport type ActivityLog = {\n  readonly list: () => readonly SuiteActivityEntry[];\n  readonly record: (input: ActivityLogRecordInput) => SuiteActivityEntry | null;\n  readonly clear: () => void;\n  readonly subscribe: (listener: () => void) => () => void;\n  readonly bindSync: (options?: { readonly target?: Window }) => () => void;\n};\n\nexport type CreateActivityLogOptions = {\n  readonly storageKey?: string;\n  readonly maxEntries?: number;\n  readonly storage?: Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\"> | null;\n};\n\ntype StorageLike = Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\">;\n\ntype ActivityBlob = {\n  readonly version: 1;\n  readonly entries: readonly SuiteActivityEntry[];\n  readonly updatedAt: number;\n};\n\nfunction safeStorage(explicit?: StorageLike | null): StorageLike | null {\n  if (explicit !== undefined) {\n    return explicit;\n  }\n  try {\n    if (typeof globalThis.localStorage === \"undefined\") {\n      return null;\n    }\n    return globalThis.localStorage;\n  } catch {\n    return null;\n  }\n}\n\nfunction scrubText(value: string, max: number): string | null {\n  const text = value.trim().replace(/\\s+/g, \" \").slice(0, max);\n  if (!text || SENSITIVE.test(text)) {\n    return null;\n  }\n  return text;\n}\n\nfunction sanitizeSource(value: unknown): SuiteActivitySource | undefined {\n  if (value === \"forjd\" || value === \"deml\" || value === \"suite\") {\n    return value;\n  }\n  return undefined;\n}\n\nfunction sanitizeEntry(raw: unknown): SuiteActivityEntry | null {\n  if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n    return null;\n  }\n  const row = raw as Record<string, unknown>;\n  const kind = scrubText(String(row[\"kind\"] ?? \"\"), KIND_MAX);\n  const label = scrubText(String(row[\"label\"] ?? \"\"), LABEL_MAX);\n  if (!kind || !label) {\n    return null;\n  }\n  const detailRaw = row[\"detail\"];\n  const detail =\n    typeof detailRaw === \"string\"\n      ? (scrubText(detailRaw, DETAIL_MAX) ?? undefined)\n      : undefined;\n  const at = Number(row[\"at\"]);\n  const id = String(row[\"id\"] ?? \"\").slice(0, 64) || `act-${at || Date.now()}`;\n  return {\n    id,\n    at: Number.isFinite(at) ? at : Date.now(),\n    kind,\n    label,\n    detail: detail || undefined,\n    source: sanitizeSource(row[\"source\"]),\n  };\n}\n\nfunction readBlob(storage: StorageLike | null, key: string): ActivityBlob {\n  if (!storage) {\n    return { version: 1, entries: [], updatedAt: 0 };\n  }\n  try {\n    const raw = storage.getItem(key);\n    if (!raw) {\n      return { version: 1, entries: [], updatedAt: 0 };\n    }\n    const parsed = JSON.parse(raw) as unknown;\n    if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n      return { version: 1, entries: [], updatedAt: 0 };\n    }\n    const row = parsed as Record<string, unknown>;\n    const entriesRaw = row[\"entries\"];\n    const entries = Array.isArray(entriesRaw)\n      ? entriesRaw\n          .map(sanitizeEntry)\n          .filter((e): e is SuiteActivityEntry => e != null)\n      : [];\n    const updatedAt = Number(row[\"updatedAt\"]);\n    return {\n      version: 1,\n      entries,\n      updatedAt: Number.isFinite(updatedAt) ? updatedAt : 0,\n    };\n  } catch {\n    return { version: 1, entries: [], updatedAt: 0 };\n  }\n}\n\nfunction writeBlob(\n  storage: StorageLike | null,\n  key: string,\n  blob: ActivityBlob,\n): void {\n  if (!storage) {\n    return;\n  }\n  try {\n    storage.setItem(key, JSON.stringify(blob));\n  } catch {\n    // Quota / private mode — keep in-memory only.\n  }\n}\n\nfunction dispatchChange(blob: ActivityBlob): void {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n  window.dispatchEvent(\n    new CustomEvent(SUITE_ACTIVITY_CHANGE_EVENT, {\n      bubbles: true,\n      detail: blob,\n    }),\n  );\n}\n\nlet activitySeq = 0;\n\nexport function createActivityLog(\n  options?: CreateActivityLogOptions,\n): ActivityLog {\n  const storageKey = options?.storageKey ?? SUITE_ACTIVITY_STORAGE_KEY;\n  const maxEntries = Math.max(1, options?.maxEntries ?? DEFAULT_MAX_ENTRIES);\n  const storage = safeStorage(options?.storage);\n  let blob = readBlob(storage, storageKey);\n  if (blob.entries.length > maxEntries) {\n    blob = {\n      ...blob,\n      entries: blob.entries.slice(0, maxEntries),\n      updatedAt: Date.now(),\n    };\n    writeBlob(storage, storageKey, blob);\n  }\n\n  const listeners = new Set<() => void>();\n\n  const notify = (): void => {\n    for (const listener of listeners) {\n      try {\n        listener();\n      } catch {\n        // Listener failures must not break activity.\n      }\n    }\n  };\n\n  const commit = (\n    next: ActivityBlob,\n    source: \"local\" | \"sync\" = \"local\",\n  ): void => {\n    blob = next;\n    if (source !== \"sync\") {\n      writeBlob(storage, storageKey, blob);\n      dispatchChange(blob);\n    }\n    notify();\n  };\n\n  return {\n    list: () => blob.entries,\n    record: (input) => {\n      const kind = scrubText(String(input.kind ?? \"\"), KIND_MAX);\n      const label = scrubText(String(input.label ?? \"\"), LABEL_MAX);\n      if (!kind || !label) {\n        return null;\n      }\n      const detail = input.detail\n        ? (scrubText(input.detail, DETAIL_MAX) ?? undefined)\n        : undefined;\n      const at = input.at ?? Date.now();\n      activitySeq += 1;\n      const entry: SuiteActivityEntry = {\n        id: `act-${at}-${activitySeq}`,\n        at,\n        kind,\n        label,\n        detail: detail || undefined,\n        source: sanitizeSource(input.source),\n      };\n      const entries = [entry, ...blob.entries].slice(0, maxEntries);\n      commit({ version: 1, entries, updatedAt: Date.now() });\n      return entry;\n    },\n    clear: () => {\n      commit({ version: 1, entries: [], updatedAt: Date.now() });\n    },\n    subscribe: (listener) => {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n    bindSync: (bindOpts) => {\n      const win =\n        bindOpts?.target ?? (typeof window !== \"undefined\" ? window : null);\n      if (!win) {\n        return () => undefined;\n      }\n      const onStorage = (event: StorageEvent): void => {\n        if (event.key !== storageKey) {\n          return;\n        }\n        const remote = readBlob(storage, storageKey);\n        if (remote.updatedAt < blob.updatedAt) {\n          return;\n        }\n        commit(remote, \"sync\");\n      };\n      const onCustom = (event: Event): void => {\n        const detail = (event as CustomEvent<ActivityBlob>).detail;\n        if (!detail || typeof detail !== \"object\") {\n          return;\n        }\n        if (Number(detail.updatedAt) <= blob.updatedAt) {\n          return;\n        }\n        const entries = Array.isArray(detail.entries)\n          ? detail.entries\n              .map(sanitizeEntry)\n              .filter((e): e is SuiteActivityEntry => e != null)\n              .slice(0, maxEntries)\n          : [];\n        commit(\n          {\n            version: 1,\n            entries,\n            updatedAt: Number(detail.updatedAt) || Date.now(),\n          },\n          \"sync\",\n        );\n      };\n      win.addEventListener(\"storage\", onStorage);\n      win.addEventListener(SUITE_ACTIVITY_CHANGE_EVENT, onCustom);\n      return () => {\n        win.removeEventListener(\"storage\", onStorage);\n        win.removeEventListener(SUITE_ACTIVITY_CHANGE_EVENT, onCustom);\n      };\n    },\n  };\n}\n\nlet defaultLog: ActivityLog | null = null;\n\nexport function getDefaultActivityLog(): ActivityLog {\n  return (defaultLog ??= createActivityLog());\n}\n\nexport function resetDefaultActivityLog(): void {\n  defaultLog = null;\n}\n\n/** Convenience for adapters — records against the process default log. */\nexport function recordSuiteActivity(\n  input: ActivityLogRecordInput,\n): SuiteActivityEntry | null {\n  return getDefaultActivityLog().record(input);\n}\n","/**\n * Suite onboarding progress — first-time guidance (FORJD ADR-0025).\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/onboarding.\n *\n * Journey state only (dismiss / complete / step ids). Never secrets or tokens.\n * Separate from suite-preferences-v1 (FORJD ADR-0024 soft chrome).\n */\n\nexport const SUITE_ONBOARDING_STORAGE_KEY = \"suite-onboarding-v1\";\nexport const SUITE_ONBOARDING_CHANGE_EVENT = \"suite-onboarding-change\";\n\n/** Legacy DEML keys — migrated once into the suite blob. */\nconst LEGACY_SKIP_KEY = \"deml_onboarding_skipped\";\nconst LEGACY_COMPLETE_KEY = \"deml_onboarding_complete\";\n\nexport type SuiteOnboardingFlow = \"deml-status\" | \"forjd-partner\" | null;\n\nexport type SuiteOnboardingState = {\n  readonly version: 1;\n  readonly dismissed: boolean;\n  readonly completed: boolean;\n  readonly completedSteps: readonly string[];\n  readonly activeFlow: SuiteOnboardingFlow;\n  readonly updatedAt: number;\n};\n\nexport type OnboardingStore = {\n  readonly get: () => SuiteOnboardingState;\n  readonly shouldShowGuide: () => boolean;\n  readonly isStepComplete: (id: string) => boolean;\n  readonly completeStep: (id: string) => void;\n  readonly incompleteStep: (id: string) => void;\n  readonly markComplete: () => void;\n  readonly markDismissed: () => void;\n  readonly setActiveFlow: (flow: SuiteOnboardingFlow) => void;\n  readonly reset: () => void;\n  /** Merge or replace journey state (suite data pack — FORJD ADR-0026). */\n  readonly importState: (raw: unknown, mode?: \"merge\" | \"replace\") => void;\n  readonly subscribe: (listener: () => void) => () => void;\n  readonly bindSync: (options?: { readonly target?: Window }) => () => void;\n};\n\nexport type CreateOnboardingStoreOptions = {\n  readonly storageKey?: string;\n  readonly storage?: Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\"> | null;\n};\n\ntype StorageLike = Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\">;\n\nfunction safeStorage(explicit?: StorageLike | null): StorageLike | null {\n  if (explicit !== undefined) {\n    return explicit;\n  }\n  try {\n    if (typeof globalThis.localStorage === \"undefined\") {\n      return null;\n    }\n    return globalThis.localStorage;\n  } catch {\n    return null;\n  }\n}\n\nfunction defaults(): SuiteOnboardingState {\n  return {\n    version: 1,\n    dismissed: false,\n    completed: false,\n    completedSteps: [],\n    activeFlow: null,\n    updatedAt: 0,\n  };\n}\n\nfunction sanitizeFlow(value: unknown): SuiteOnboardingFlow {\n  if (value === \"deml-status\" || value === \"forjd-partner\") {\n    return value;\n  }\n  return null;\n}\n\nfunction sanitize(raw: unknown): SuiteOnboardingState {\n  const base = defaults();\n  if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n    return { ...base, updatedAt: Date.now() };\n  }\n  const row = raw as Record<string, unknown>;\n  const stepsRaw = row[\"completedSteps\"];\n  const completedSteps = Array.isArray(stepsRaw)\n    ? stepsRaw\n        .map((s) => String(s).slice(0, 64))\n        .filter(Boolean)\n        .slice(0, 32)\n    : [];\n  const updatedAt = Number(row[\"updatedAt\"]);\n  return {\n    version: 1,\n    dismissed: row[\"dismissed\"] === true,\n    completed: row[\"completed\"] === true,\n    completedSteps,\n    activeFlow: sanitizeFlow(row[\"activeFlow\"]),\n    updatedAt: Number.isFinite(updatedAt) ? updatedAt : Date.now(),\n  };\n}\n\nfunction migrateLegacy(\n  storage: StorageLike | null,\n): SuiteOnboardingState | null {\n  if (!storage) {\n    return null;\n  }\n  try {\n    const complete = storage.getItem(LEGACY_COMPLETE_KEY) === \"true\";\n    const skipped = storage.getItem(LEGACY_SKIP_KEY) === \"true\";\n    if (!complete && !skipped) {\n      return null;\n    }\n    return {\n      version: 1,\n      dismissed: skipped && !complete,\n      completed: complete,\n      completedSteps: complete\n        ? [\"welcome\", \"site\", \"endpoint\", \"publish\", \"done\"]\n        : [],\n      activeFlow: \"deml-status\",\n      updatedAt: Date.now(),\n    };\n  } catch {\n    return null;\n  }\n}\n\nfunction clearLegacy(storage: StorageLike | null): void {\n  if (!storage) {\n    return;\n  }\n  try {\n    storage.removeItem(LEGACY_SKIP_KEY);\n    storage.removeItem(LEGACY_COMPLETE_KEY);\n  } catch {\n    // ignore\n  }\n}\n\nfunction readBlob(\n  storage: StorageLike | null,\n  key: string,\n): SuiteOnboardingState | null {\n  if (!storage) {\n    return null;\n  }\n  try {\n    const raw = storage.getItem(key);\n    if (!raw) {\n      return null;\n    }\n    return sanitize(JSON.parse(raw) as unknown);\n  } catch {\n    return null;\n  }\n}\n\nfunction writeBlob(\n  storage: StorageLike | null,\n  key: string,\n  state: SuiteOnboardingState,\n): void {\n  if (!storage) {\n    return;\n  }\n  try {\n    storage.setItem(key, JSON.stringify(state));\n  } catch {\n    // Quota / private mode — keep in-memory only.\n  }\n}\n\nfunction dispatchChange(state: SuiteOnboardingState): void {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n  window.dispatchEvent(\n    new CustomEvent(SUITE_ONBOARDING_CHANGE_EVENT, {\n      bubbles: true,\n      detail: state,\n    }),\n  );\n}\n\nexport function createOnboardingStore(\n  options?: CreateOnboardingStoreOptions,\n): OnboardingStore {\n  const storageKey = options?.storageKey ?? SUITE_ONBOARDING_STORAGE_KEY;\n  const storage = safeStorage(options?.storage);\n  let fromLegacy = false;\n  const existing = readBlob(storage, storageKey);\n  let state: SuiteOnboardingState =\n    existing ??\n    (() => {\n      const migrated = migrateLegacy(storage);\n      if (migrated) {\n        fromLegacy = true;\n        return migrated;\n      }\n      return { ...defaults(), updatedAt: Date.now() };\n    })();\n\n  if (fromLegacy || !existing) {\n    writeBlob(storage, storageKey, state);\n    if (fromLegacy) {\n      clearLegacy(storage);\n    }\n  }\n\n  const listeners = new Set<() => void>();\n\n  const notify = (): void => {\n    for (const listener of listeners) {\n      try {\n        listener();\n      } catch {\n        // Listener failures must not break onboarding.\n      }\n    }\n  };\n\n  const commit = (\n    next: SuiteOnboardingState,\n    source: \"local\" | \"sync\" = \"local\",\n  ): void => {\n    state = next;\n    if (source !== \"sync\") {\n      writeBlob(storage, storageKey, state);\n      dispatchChange(state);\n    }\n    notify();\n  };\n\n  return {\n    get: () => state,\n    shouldShowGuide: () => !state.completed && !state.dismissed,\n    isStepComplete: (id) => state.completedSteps.includes(String(id)),\n    completeStep: (id) => {\n      const key = String(id).slice(0, 64);\n      if (!key || state.completedSteps.includes(key)) {\n        return;\n      }\n      commit({\n        ...state,\n        completedSteps: [...state.completedSteps, key],\n        updatedAt: Date.now(),\n      });\n    },\n    incompleteStep: (id) => {\n      const key = String(id);\n      if (!state.completedSteps.includes(key)) {\n        return;\n      }\n      commit({\n        ...state,\n        completedSteps: state.completedSteps.filter((s) => s !== key),\n        completed: false,\n        updatedAt: Date.now(),\n      });\n    },\n    markComplete: () => {\n      commit({\n        ...state,\n        completed: true,\n        dismissed: false,\n        updatedAt: Date.now(),\n      });\n    },\n    markDismissed: () => {\n      commit({\n        ...state,\n        dismissed: true,\n        updatedAt: Date.now(),\n      });\n    },\n    setActiveFlow: (flow) => {\n      if (flow === state.activeFlow) {\n        return;\n      }\n      commit({\n        ...state,\n        activeFlow: flow,\n        updatedAt: Date.now(),\n      });\n    },\n    reset: () => {\n      commit({ ...defaults(), updatedAt: Date.now() });\n      clearLegacy(storage);\n    },\n    importState: (raw, mode = \"merge\") => {\n      const incoming = sanitize(raw);\n      if (mode === \"replace\") {\n        commit({ ...incoming, updatedAt: Date.now() });\n        return;\n      }\n      const steps = Array.from(\n        new Set([...state.completedSteps, ...incoming.completedSteps]),\n      ).slice(0, 32);\n      commit({\n        version: 1,\n        dismissed: state.dismissed || incoming.dismissed,\n        completed: state.completed || incoming.completed,\n        completedSteps: steps,\n        activeFlow: incoming.activeFlow ?? state.activeFlow,\n        updatedAt: Date.now(),\n      });\n    },\n    subscribe: (listener) => {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n    bindSync: (bindOpts) => {\n      const win =\n        bindOpts?.target ?? (typeof window !== \"undefined\" ? window : null);\n      if (!win) {\n        return () => undefined;\n      }\n      const onStorage = (event: StorageEvent): void => {\n        if (event.key !== storageKey) {\n          return;\n        }\n        const remote = readBlob(storage, storageKey);\n        if (!remote || remote.updatedAt < state.updatedAt) {\n          return;\n        }\n        commit(remote, \"sync\");\n      };\n      const onCustom = (event: Event): void => {\n        const detail = (event as CustomEvent<SuiteOnboardingState>).detail;\n        if (!detail || typeof detail !== \"object\") {\n          return;\n        }\n        const remote = sanitize(detail);\n        if (remote.updatedAt <= state.updatedAt) {\n          return;\n        }\n        commit(remote, \"sync\");\n      };\n      win.addEventListener(\"storage\", onStorage);\n      win.addEventListener(SUITE_ONBOARDING_CHANGE_EVENT, onCustom);\n      return () => {\n        win.removeEventListener(\"storage\", onStorage);\n        win.removeEventListener(SUITE_ONBOARDING_CHANGE_EVENT, onCustom);\n      };\n    },\n  };\n}\n\nlet defaultStore: OnboardingStore | null = null;\n\nexport function getDefaultOnboardingStore(): OnboardingStore {\n  return (defaultStore ??= createOnboardingStore());\n}\n\nexport function resetDefaultOnboardingStore(): void {\n  defaultStore = null;\n}\n\n/** Standard empty-state eyebrow for first-time guidance surfaces. */\nexport const SUITE_EMPTY_GUIDANCE_EYEBROW = \"Getting started\";\n","/**\n * Recent search persistence for the suite command palette (localStorage).\n * Stores query strings and recently opened destinations — never secrets.\n */\n\nimport type { VikingSearchPaletteItem } from \"../core/types\";\n\nexport const DEFAULT_RECENT_STORAGE_KEY = \"viking-search-recent-v1\";\nexport const DEFAULT_RECENT_LIMIT = 8;\n\nexport type VikingRecentSearch = {\n  readonly query: string;\n  readonly title?: string;\n  readonly href?: string;\n  readonly at: number;\n};\n\ntype StorageLike = Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\">;\n\nfunction safeStorage(): StorageLike | null {\n  try {\n    if (typeof globalThis.localStorage === \"undefined\") {\n      return null;\n    }\n    return globalThis.localStorage;\n  } catch {\n    return null;\n  }\n}\n\nfunction normalizeQuery(query: string): string {\n  return query.trim().replace(/\\s+/g, \" \").slice(0, 120);\n}\n\n/** Read recent entries (newest first). */\nexport function readRecentSearches(\n  storageKey: string = DEFAULT_RECENT_STORAGE_KEY,\n  options?: { readonly limit?: number },\n): VikingRecentSearch[] {\n  const limit = options?.limit ?? DEFAULT_RECENT_LIMIT;\n  const storage = safeStorage();\n  if (!storage) {\n    return [];\n  }\n  try {\n    const raw = storage.getItem(storageKey);\n    if (!raw) {\n      return [];\n    }\n    const parsed = JSON.parse(raw) as unknown;\n    if (!Array.isArray(parsed)) {\n      return [];\n    }\n    const out: VikingRecentSearch[] = [];\n    for (const row of parsed) {\n      if (!row || typeof row !== \"object\") {\n        continue;\n      }\n      const query = normalizeQuery(\n        String((row as VikingRecentSearch).query ?? \"\"),\n      );\n      if (!query) {\n        continue;\n      }\n      const title = (row as VikingRecentSearch).title;\n      const href = (row as VikingRecentSearch).href;\n      const at = Number((row as VikingRecentSearch).at) || Date.now();\n      out.push({\n        query,\n        title: typeof title === \"string\" ? title.slice(0, 200) : undefined,\n        href: typeof href === \"string\" ? href.slice(0, 2048) : undefined,\n        at,\n      });\n      if (out.length >= limit) {\n        break;\n      }\n    }\n    return out;\n  } catch {\n    return [];\n  }\n}\n\nfunction writeRecentSearches(\n  entries: readonly VikingRecentSearch[],\n  storageKey: string,\n): void {\n  const storage = safeStorage();\n  if (!storage) {\n    return;\n  }\n  try {\n    storage.setItem(storageKey, JSON.stringify(entries));\n  } catch {\n    // Quota / private mode — ignore.\n  }\n}\n\n/** Restore a prior recent-search snapshot (command-history undo). */\nexport function restoreRecentSearches(\n  entries: readonly VikingRecentSearch[],\n  storageKey: string = DEFAULT_RECENT_STORAGE_KEY,\n): void {\n  if (!entries.length) {\n    clearRecentSearches(storageKey);\n    return;\n  }\n  writeRecentSearches(entries, storageKey);\n}\n\n/** Push a query (and optional destination) to the front of recent history. */\nexport function pushRecentSearch(\n  entry: { query: string; title?: string; href?: string },\n  options?: { readonly storageKey?: string; readonly limit?: number },\n): VikingRecentSearch[] {\n  const storageKey = options?.storageKey ?? DEFAULT_RECENT_STORAGE_KEY;\n  const limit = options?.limit ?? DEFAULT_RECENT_LIMIT;\n  const query = normalizeQuery(entry.query);\n  if (!query) {\n    return readRecentSearches(storageKey, { limit });\n  }\n  const next: VikingRecentSearch = {\n    query,\n    title: entry.title?.slice(0, 200),\n    href: entry.href?.slice(0, 2048),\n    at: Date.now(),\n  };\n  const prior = readRecentSearches(storageKey, { limit: limit * 2 }).filter(\n    (row) => {\n      if (next.href && row.href) {\n        return row.href !== next.href || row.query !== next.query;\n      }\n      return row.query !== next.query;\n    },\n  );\n  const merged = [next, ...prior].slice(0, limit);\n  writeRecentSearches(merged, storageKey);\n  return merged;\n}\n\n/** Clear all recent searches for the key. */\nexport function clearRecentSearches(\n  storageKey: string = DEFAULT_RECENT_STORAGE_KEY,\n): void {\n  const storage = safeStorage();\n  if (!storage) {\n    return;\n  }\n  try {\n    storage.removeItem(storageKey);\n  } catch {\n    // ignore\n  }\n}\n\n/** Map recent rows into palette items for the empty-query state. */\nexport function recentSearchesAsItems(\n  recent: readonly VikingRecentSearch[],\n): VikingSearchPaletteItem[] {\n  return recent.map((row) => ({\n    title: row.title || row.query,\n    href: row.href || `#viking-recent:${encodeURIComponent(row.query)}`,\n    snippet: row.title ? `Recent · ${row.query}` : \"Recent search\",\n    group: \"Recent\",\n    keywords: [\"recent\", row.query],\n  }));\n}\n","/**\n * Suite data pack — export / import soft UI chrome (FORJD ADR-0026).\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/suite-data-pack.\n *\n * Browser JSON only. Never secrets, tokens, auth, or ciphertext.\n * Unrelated to server `/api/v1/exports` (analytics jobs).\n */\n\nimport { getDefaultDisclosureStore } from \"./disclosure\";\nimport { getDefaultOnboardingStore } from \"./onboarding\";\nimport {\n  getDefaultPreferencesStore,\n  type SuitePreferences,\n} from \"./preferences\";\nimport { parseSuiteThemePreference, type SuiteThemePreference } from \"./theme\";\nimport {\n  DEFAULT_RECENT_LIMIT,\n  DEFAULT_RECENT_STORAGE_KEY,\n  readRecentSearches,\n  restoreRecentSearches,\n  type VikingRecentSearch,\n} from \"../web/search-palette/recent-searches\";\n\nexport const SUITE_DATA_PACK_KIND = \"suite-data-pack\" as const;\nexport const SUITE_DATA_PACK_VERSION = 1 as const;\n\nconst FORBIDDEN_KEY =\n  /token|secret|password|fjsvc|jwt|authorization|ciphertext|apikey|api_key|bearer/i;\n\nexport type SuiteDataPackV1 = {\n  readonly kind: typeof SUITE_DATA_PACK_KIND;\n  readonly version: typeof SUITE_DATA_PACK_VERSION;\n  readonly exportedAt: number;\n  readonly preferences?: {\n    readonly theme: SuiteThemePreference;\n    readonly updatedAt: number;\n  };\n  readonly disclosure?: Readonly<Record<string, boolean>>;\n  readonly onboarding?: unknown;\n  readonly recentSearches?: readonly VikingRecentSearch[];\n};\n\nexport type ExportSuiteDataPackOptions = {\n  /** Include command-palette recent queries (off by default — typed history). */\n  readonly includeRecentSearches?: boolean;\n  readonly recentStorageKey?: string;\n};\n\nexport type ImportSuiteDataPackOptions = {\n  readonly mode?: \"merge\" | \"replace\";\n  readonly recentStorageKey?: string;\n};\n\nexport type ParseSuiteDataPackResult =\n  | { readonly ok: true; readonly pack: SuiteDataPackV1 }\n  | { readonly ok: false; readonly error: string };\n\nexport type ApplySuiteDataPackResult = {\n  readonly applied: readonly string[];\n};\n\nfunction assertNoForbiddenKeys(raw: Record<string, unknown>): string | null {\n  for (const key of Object.keys(raw)) {\n    if (FORBIDDEN_KEY.test(key)) {\n      return `Refusing pack field “${key}” — secrets are not portable.`;\n    }\n  }\n  return null;\n}\n\nfunction sanitizeRecent(rows: unknown): VikingRecentSearch[] {\n  if (!Array.isArray(rows)) {\n    return [];\n  }\n  const out: VikingRecentSearch[] = [];\n  for (const row of rows) {\n    if (!row || typeof row !== \"object\") {\n      continue;\n    }\n    const query = String((row as VikingRecentSearch).query ?? \"\")\n      .trim()\n      .replace(/\\s+/g, \" \")\n      .slice(0, 120);\n    if (!query) {\n      continue;\n    }\n    const title = (row as VikingRecentSearch).title;\n    const href = (row as VikingRecentSearch).href;\n    out.push({\n      query,\n      title: typeof title === \"string\" ? title.slice(0, 200) : undefined,\n      href: typeof href === \"string\" ? href.slice(0, 2048) : undefined,\n      at: Number((row as VikingRecentSearch).at) || Date.now(),\n    });\n    if (out.length >= DEFAULT_RECENT_LIMIT) {\n      break;\n    }\n  }\n  return out;\n}\n\nfunction sanitizeDisclosure(raw: unknown): Record<string, boolean> | undefined {\n  if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n    return undefined;\n  }\n  const out: Record<string, boolean> = {};\n  for (const [id, value] of Object.entries(raw as Record<string, unknown>)) {\n    if (!id || typeof value !== \"boolean\") {\n      continue;\n    }\n    out[String(id).slice(0, 128)] = value;\n  }\n  return out;\n}\n\nfunction sanitizePreferences(raw: unknown): SuitePreferences | undefined {\n  if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n    return undefined;\n  }\n  const row = raw as Record<string, unknown>;\n  const theme =\n    parseSuiteThemePreference(\n      typeof row[\"theme\"] === \"string\" ? row[\"theme\"] : null,\n    ) ?? \"system\";\n  const updatedAt = Number(row[\"updatedAt\"]);\n  return {\n    theme,\n    updatedAt: Number.isFinite(updatedAt) ? updatedAt : Date.now(),\n  };\n}\n\n/** Build a portable pack from the current browser suite stores. */\nexport function exportSuiteDataPack(\n  options?: ExportSuiteDataPackOptions,\n): SuiteDataPackV1 {\n  const prefs = getDefaultPreferencesStore().get();\n  const pack: SuiteDataPackV1 = {\n    kind: SUITE_DATA_PACK_KIND,\n    version: SUITE_DATA_PACK_VERSION,\n    exportedAt: Date.now(),\n    preferences: { theme: prefs.theme, updatedAt: prefs.updatedAt },\n    disclosure: getDefaultDisclosureStore().snapshot(),\n    onboarding: getDefaultOnboardingStore().get(),\n  };\n  if (options?.includeRecentSearches) {\n    return {\n      ...pack,\n      recentSearches: readRecentSearches(\n        options.recentStorageKey ?? DEFAULT_RECENT_STORAGE_KEY,\n      ),\n    };\n  }\n  return pack;\n}\n\n/** Validate + sanitize an unknown JSON value into a pack. */\nexport function parseSuiteDataPack(raw: unknown): ParseSuiteDataPackResult {\n  if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n    return { ok: false, error: \"Pack must be a JSON object.\" };\n  }\n  const row = raw as Record<string, unknown>;\n  const forbidden = assertNoForbiddenKeys(row);\n  if (forbidden) {\n    return { ok: false, error: forbidden };\n  }\n  if (row[\"kind\"] !== SUITE_DATA_PACK_KIND) {\n    return { ok: false, error: \"Unrecognized pack kind.\" };\n  }\n  if (row[\"version\"] !== SUITE_DATA_PACK_VERSION) {\n    return { ok: false, error: \"Unsupported pack version.\" };\n  }\n  const exportedAt = Number(row[\"exportedAt\"]);\n  const pack: SuiteDataPackV1 = {\n    kind: SUITE_DATA_PACK_KIND,\n    version: SUITE_DATA_PACK_VERSION,\n    exportedAt: Number.isFinite(exportedAt) ? exportedAt : Date.now(),\n    preferences: sanitizePreferences(row[\"preferences\"]),\n    disclosure: sanitizeDisclosure(row[\"disclosure\"]),\n    onboarding: row[\"onboarding\"],\n    recentSearches: row[\"recentSearches\"]\n      ? sanitizeRecent(row[\"recentSearches\"])\n      : undefined,\n  };\n  return { ok: true, pack };\n}\n\n/** Apply a parsed pack into local suite stores. */\nexport function applySuiteDataPack(\n  pack: SuiteDataPackV1,\n  options?: ImportSuiteDataPackOptions,\n): ApplySuiteDataPackResult {\n  const mode = options?.mode ?? \"merge\";\n  const applied: string[] = [];\n\n  if (pack.preferences) {\n    getDefaultPreferencesStore().patch({ theme: pack.preferences.theme });\n    applied.push(\"preferences\");\n  }\n  if (pack.disclosure) {\n    getDefaultDisclosureStore().importMap(pack.disclosure, mode);\n    applied.push(\"disclosure\");\n  }\n  if (pack.onboarding != null) {\n    getDefaultOnboardingStore().importState(pack.onboarding, mode);\n    applied.push(\"onboarding\");\n  }\n  if (pack.recentSearches) {\n    const key = options?.recentStorageKey ?? DEFAULT_RECENT_STORAGE_KEY;\n    if (mode === \"replace\") {\n      restoreRecentSearches(pack.recentSearches, key);\n    } else {\n      const current = readRecentSearches(key);\n      const seen = new Set(current.map((r) => `${r.query}\\0${r.href ?? \"\"}`));\n      const merged = [...current];\n      for (const row of pack.recentSearches) {\n        const id = `${row.query}\\0${row.href ?? \"\"}`;\n        if (seen.has(id)) {\n          continue;\n        }\n        seen.add(id);\n        merged.push(row);\n      }\n      merged.sort((a, b) => b.at - a.at);\n      restoreRecentSearches(merged.slice(0, DEFAULT_RECENT_LIMIT), key);\n    }\n    applied.push(\"recentSearches\");\n  }\n\n  return { applied };\n}\n\n/** Trigger a browser download of the pack JSON. */\nexport function downloadSuiteDataPack(\n  pack: SuiteDataPackV1,\n  filename = \"suite-data-pack.json\",\n): void {\n  if (typeof document === \"undefined\") {\n    return;\n  }\n  const blob = new Blob([JSON.stringify(pack, null, 2)], {\n    type: \"application/json\",\n  });\n  const url = URL.createObjectURL(blob);\n  const anchor = document.createElement(\"a\");\n  anchor.href = url;\n  anchor.download = filename;\n  anchor.rel = \"noopener\";\n  document.body.appendChild(anchor);\n  anchor.click();\n  anchor.remove();\n  URL.revokeObjectURL(url);\n}\n\n/** Read + parse a user-selected pack file. */\nexport async function readSuiteDataPackFile(\n  file: File,\n): Promise<ParseSuiteDataPackResult> {\n  const text = await file.text();\n  let raw: unknown;\n  try {\n    raw = JSON.parse(text) as unknown;\n  } catch {\n    return { ok: false, error: \"File is not valid JSON.\" };\n  }\n  return parseSuiteDataPack(raw);\n}\n","import { isPlatformBrowser } from \"@angular/common\";\nimport {\n  DestroyRef,\n  Injectable,\n  PLATFORM_ID,\n  computed,\n  inject,\n  signal,\n} from \"@angular/core\";\nimport { runOptimistic } from \"../../core/optimistic\";\nimport { getDefaultPreferencesStore } from \"../../core/preferences\";\nimport {\n  type SuiteThemePreference,\n  type SuiteThemeResolved,\n  applySuiteTheme,\n  dispatchSuiteThemeChange,\n  prefersDarkScheme,\n  readSuiteThemePreference,\n  resolveSuiteTheme,\n  toggleSuiteThemePreference,\n  cycleSuiteThemePreference,\n  writeSuiteThemePreference,\n} from \"../../core/theme\";\nimport { VikingCommandHistoryService } from \"../command-history/command-history.service\";\n\n/**\n * VikingThemeService — suite light/dark/system with persistence + OS sync.\n * Apply `data-theme` on `<html>`; FOUC script should mirror read/resolve.\n * Equality-guarded: skips DOM writes / events when nothing changed.\n * Theme changes are optimistic with storage rollback on failure.\n */\n@Injectable({ providedIn: \"root\" })\nexport class VikingThemeService {\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly history = inject(VikingCommandHistoryService);\n  private media: MediaQueryList | null = null;\n  private readonly onMediaChange = (): void => {\n    if (this.preference() !== \"system\") return;\n    this.applyCurrent();\n  };\n\n  private readonly preferenceSignal = signal<SuiteThemePreference>(\"system\");\n  private readonly systemDarkSignal = signal(true);\n\n  /** Stored preference: light | dark | system. */\n  readonly preference = this.preferenceSignal.asReadonly();\n\n  /** Resolved appearance applied to the document. */\n  readonly theme = computed<SuiteThemeResolved>(() =>\n    resolveSuiteTheme(this.preferenceSignal(), this.systemDarkSignal()),\n  );\n\n  constructor() {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n    const prefs = getDefaultPreferencesStore();\n    this.preferenceSignal.set(prefs.get().theme || readSuiteThemePreference());\n    if (typeof window.matchMedia === \"function\") {\n      this.media = window.matchMedia(\"(prefers-color-scheme: dark)\");\n      this.systemDarkSignal.set(prefersDarkScheme(this.media));\n      this.media.addEventListener(\"change\", this.onMediaChange);\n      this.destroyRef.onDestroy(() => {\n        this.media?.removeEventListener(\"change\", this.onMediaChange);\n      });\n    } else {\n      this.systemDarkSignal.set(true);\n    }\n    // Follow preferences store (cross-tab sync owned by VikingPreferencesService).\n    const unsubPrefs = prefs.subscribe(() => {\n      const next = prefs.get().theme;\n      if (next !== this.preferenceSignal()) {\n        this.preferenceSignal.set(next);\n        this.applyCurrent({ preferenceChanged: true });\n      }\n    });\n    this.destroyRef.onDestroy(unsubPrefs);\n    this.applyCurrent();\n  }\n\n  /**\n   * Optimistic theme change: update UI immediately, persist to storage, roll\n   * back preference + DOM if storage throws (quota / private mode).\n   * Successful changes join the command-history stack (⌘Z / Undo toast).\n   */\n  setPreference(\n    preference: SuiteThemePreference,\n    opts?: { readonly recordHistory?: boolean },\n  ): void {\n    if (preference === this.preferenceSignal()) return;\n    if (!isPlatformBrowser(this.platformId)) {\n      this.preferenceSignal.set(preference);\n      return;\n    }\n\n    const previous = this.preferenceSignal();\n    const commit = async (next: SuiteThemePreference): Promise<void> => {\n      const result = await runOptimistic({\n        snapshot: () => this.preferenceSignal(),\n        apply: () => {\n          this.preferenceSignal.set(next);\n          this.applyCurrent({ preferenceChanged: true });\n        },\n        persist: () => {\n          writeSuiteThemePreference(next);\n          getDefaultPreferencesStore().patch(\n            { theme: next },\n            { source: \"theme\" },\n          );\n        },\n        rollback: (snap) => {\n          this.preferenceSignal.set(snap);\n          this.applyCurrent({ preferenceChanged: true });\n        },\n      });\n      if (!result.ok) {\n        throw result.error ?? new Error(\"Theme preference could not be saved\");\n      }\n    };\n\n    if (opts?.recordHistory === false) {\n      void commit(preference);\n      return;\n    }\n\n    void this.history.run({\n      label: `Theme → ${preference}`,\n      do: () => commit(preference),\n      undo: () => commit(previous),\n    });\n  }\n\n  /** Flip explicit light ↔ dark based on current resolved theme. */\n  toggleTheme(): void {\n    const next = toggleSuiteThemePreference(\n      this.preferenceSignal(),\n      this.systemDarkSignal(),\n    );\n    this.setPreference(next);\n  }\n\n  /** Cycle system → light → dark → system. */\n  cyclePreference(): void {\n    this.setPreference(cycleSuiteThemePreference(this.preferenceSignal()));\n  }\n\n  useSystemPreference(): void {\n    this.setPreference(\"system\");\n  }\n\n  private applyCurrent(opts?: { preferenceChanged?: boolean }): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    const systemDark = this.media\n      ? prefersDarkScheme(this.media)\n      : this.systemDarkSignal();\n    if (systemDark !== this.systemDarkSignal()) {\n      this.systemDarkSignal.set(systemDark);\n    }\n\n    const preference = this.preferenceSignal();\n    const resolved = resolveSuiteTheme(preference, this.systemDarkSignal());\n    const domChanged = applySuiteTheme(resolved);\n    // Dispatch when DOM changed, or preference changed with same resolved\n    // (e.g. system → dark while OS is dark) so labels/subscribers update.\n    if (domChanged || opts?.preferenceChanged) {\n      dispatchSuiteThemeChange({ preference, resolved });\n    }\n  }\n}\n","import { isPlatformBrowser } from \"@angular/common\";\nimport {\n  DestroyRef,\n  Injectable,\n  PLATFORM_ID,\n  inject,\n  signal,\n} from \"@angular/core\";\nimport {\n  getDefaultActivityLog,\n  recordSuiteActivity,\n  type SuiteActivityEntry,\n} from \"../../core/activity-log\";\nimport { getDefaultDisclosureStore } from \"../../core/disclosure\";\nimport {\n  getDefaultPreferencesStore,\n  type SuitePreferences,\n} from \"../../core/preferences\";\nimport {\n  getDefaultShortcutRegistry,\n  isEditableKeyboardTarget,\n} from \"../../core/keyboard-shortcuts\";\nimport {\n  applySuiteDataPack,\n  downloadSuiteDataPack,\n  exportSuiteDataPack,\n  readSuiteDataPackFile,\n} from \"../../core/suite-data-pack\";\nimport type { SuiteThemePreference } from \"../../core/theme\";\nimport { clearRecentSearches } from \"../../web/search-palette/recent-searches\";\nimport { VikingToastService } from \"../toast/toast\";\nimport { VikingThemeService } from \"../theme/theme.service\";\n\n/**\n * Suite preferences — persist + cross-tab sync; open via ⌘, (FORJD ADR-0024).\n * Export / import soft chrome via suite data pack (FORJD ADR-0026).\n * Important actions → suite activity log (FORJD ADR-0027).\n */\n@Injectable({ providedIn: \"root\" })\nexport class VikingPreferencesService {\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly theme = inject(VikingThemeService);\n  private readonly toast = inject(VikingToastService, { optional: true });\n  private readonly store = getDefaultPreferencesStore();\n  private readonly activity = getDefaultActivityLog();\n\n  private readonly openSignal = signal(false);\n  private readonly snapshotSignal = signal<SuitePreferences>(this.store.get());\n  private readonly activitySignal = signal<readonly SuiteActivityEntry[]>(\n    this.activity.list(),\n  );\n\n  readonly open = this.openSignal.asReadonly();\n  readonly snapshot = this.snapshotSignal.asReadonly();\n  readonly activityEntries = this.activitySignal.asReadonly();\n\n  constructor() {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n    const unbindSync = this.store.bindSync();\n    const unbindActivity = this.activity.bindSync();\n    const unsub = this.store.subscribe(() => {\n      this.snapshotSignal.set(this.store.get());\n    });\n    const unsubActivity = this.activity.subscribe(() => {\n      this.activitySignal.set(this.activity.list());\n    });\n    getDefaultShortcutRegistry().register({\n      id: \"preferences\",\n      keys: [\"Mod\", \",\"],\n      label: \"Open preferences\",\n      group: \"Navigation\",\n      description: \"Appearance and local UI preferences (FORJD ADR-0024).\",\n    });\n    const unbindKeys = this.bindOpenShortcut();\n    this.destroyRef.onDestroy(() => {\n      unbindSync();\n      unbindActivity();\n      unsub();\n      unsubActivity();\n      unbindKeys();\n    });\n  }\n\n  show(): void {\n    this.openSignal.set(true);\n  }\n\n  hide(): void {\n    this.openSignal.set(false);\n  }\n\n  setOpen(next: boolean): void {\n    this.openSignal.set(next);\n  }\n\n  setTheme(preference: SuiteThemePreference): void {\n    const prev = this.store.get().theme;\n    this.theme.setPreference(preference);\n    if (prev !== preference) {\n      recordSuiteActivity({\n        kind: \"preferences.theme\",\n        label: `Theme set to ${preference}`,\n        source: \"deml\",\n      });\n    }\n  }\n\n  resetDisclosure(): void {\n    getDefaultDisclosureStore().reset();\n    recordSuiteActivity({\n      kind: \"disclosure.reset\",\n      label: \"Reset advanced sections\",\n      source: \"deml\",\n    });\n  }\n\n  clearSearchHistory(): void {\n    clearRecentSearches();\n    recordSuiteActivity({\n      kind: \"search.clear\",\n      label: \"Cleared search history\",\n      source: \"deml\",\n    });\n  }\n\n  resetAll(): void {\n    this.store.reset();\n    this.theme.setPreference(\"system\", { recordHistory: false });\n    getDefaultDisclosureStore().reset();\n    clearRecentSearches();\n    recordSuiteActivity({\n      kind: \"preferences.reset\",\n      label: \"Reset all preferences\",\n      detail: \"Theme, disclosure, and search history\",\n      source: \"deml\",\n    });\n  }\n\n  clearActivity(): void {\n    this.activity.clear();\n  }\n\n  /** Download soft UI chrome as a suite data pack JSON file (FORJD ADR-0026). */\n  exportDataPack(options?: { readonly includeRecentSearches?: boolean }): void {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n    const pack = exportSuiteDataPack({\n      includeRecentSearches: options?.includeRecentSearches === true,\n    });\n    downloadSuiteDataPack(pack);\n    recordSuiteActivity({\n      kind: \"preferences.export\",\n      label: \"Exported local preferences\",\n      detail: options?.includeRecentSearches\n        ? \"Included search history\"\n        : undefined,\n      source: \"deml\",\n    });\n    this.toast?.success(\"Soft UI chrome only — no tokens or secrets.\", {\n      heading: \"Exported local preferences\",\n    });\n  }\n\n  /** Import a suite data pack file (merge or replace). */\n  async importDataPack(\n    file: File,\n    mode: \"merge\" | \"replace\" = \"merge\",\n  ): Promise<boolean> {\n    if (!isPlatformBrowser(this.platformId)) {\n      return false;\n    }\n    const parsed = await readSuiteDataPackFile(file);\n    if (!parsed.ok) {\n      this.toast?.critical(parsed.error, { heading: \"Import failed\" });\n      return false;\n    }\n    const result = applySuiteDataPack(parsed.pack, { mode });\n    if (parsed.pack.preferences) {\n      this.theme.setPreference(parsed.pack.preferences.theme, {\n        recordHistory: false,\n      });\n    }\n    this.snapshotSignal.set(this.store.get());\n    const label = result.applied.length\n      ? result.applied.join(\", \")\n      : \"nothing to apply\";\n    recordSuiteActivity({\n      kind: \"preferences.import\",\n      label: mode === \"replace\" ? \"Replaced local data\" : \"Merged local data\",\n      detail: label,\n      source: \"deml\",\n    });\n    this.toast?.success(label, {\n      heading: mode === \"replace\" ? \"Replaced local data\" : \"Merged local data\",\n    });\n    return true;\n  }\n\n  private bindOpenShortcut(): () => void {\n    const doc = typeof document !== \"undefined\" ? document : null;\n    if (!doc) {\n      return () => undefined;\n    }\n    const onKeydown = (event: KeyboardEvent): void => {\n      if (event.defaultPrevented) {\n        return;\n      }\n      if (!event.metaKey && !event.ctrlKey) {\n        return;\n      }\n      if (event.key !== \",\") {\n        return;\n      }\n      if (isEditableKeyboardTarget(event.target)) {\n        return;\n      }\n      event.preventDefault();\n      this.show();\n    };\n    doc.addEventListener(\"keydown\", onKeydown);\n    return () => doc.removeEventListener(\"keydown\", onKeydown);\n  }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport type { SuiteActivityEntry } from \"../../core/activity-log\";\n\n/**\n * Compact activity / audit rows for soft-chrome actions (FORJD ADR-0027).\n * Chrome: suite-components.css (`.suite-activity`).\n */\n@Component({\n  selector: \"viking-activity-list\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [DatePipe],\n  host: {\n    class: \"suite-activity viking-activity fj-activity\",\n  },\n  template: `\n    @if (entries().length === 0) {\n      <p class=\"suite-activity-empty viking-activity-empty fj-activity-empty\">\n        {{ emptyLabel() }}\n      </p>\n    } @else {\n      <ol class=\"suite-activity-list viking-activity-list fj-activity-list\">\n        @for (entry of entries(); track entry.id) {\n          <li class=\"suite-activity-item viking-activity-item fj-activity-item\">\n            <div\n              class=\"suite-activity-main viking-activity-main fj-activity-main\"\n            >\n              <span\n                class=\"suite-activity-label viking-activity-label fj-activity-label\"\n                >{{ entry.label }}</span\n              >\n              @if (entry.detail) {\n                <span\n                  class=\"suite-activity-detail viking-activity-detail fj-activity-detail\"\n                  >{{ entry.detail }}</span\n                >\n              }\n            </div>\n            <time\n              class=\"suite-activity-time viking-activity-time fj-activity-time\"\n              [attr.datetime]=\"entry.at | date: 'yyyy-MM-ddTHH:mm:ss.SSSZ'\"\n              >{{ entry.at | date: \"short\" }}</time\n            >\n          </li>\n        }\n      </ol>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n    `,\n  ],\n})\nexport class VikingActivityList {\n  readonly entries = input.required<readonly SuiteActivityEntry[]>();\n  readonly emptyLabel = input(\"No recent activity yet.\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n  signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\nconst TONE_ICONS: Record<string, VikingIconName> = {\n  accent: \"info\",\n  secondary: \"info\",\n  success: \"check-circle\",\n  warning: \"alert-triangle\",\n  danger: \"alert-circle\",\n  info: \"info\",\n  muted: \"info\",\n};\n\n/**\n * viking-callout — highlighted message block.\n */\n@Component({\n  selector: \"viking-callout\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[attr.role]\": \"liveRole()\",\n    \"[attr.aria-live]\": \"liveRole() === 'alert' ? 'assertive' : null\",\n    \"[class]\": \"'viking-callout-' + tone()\",\n    \"[style.display]\": \"dismissed() ? 'none' : null\",\n  },\n  template: `\n    <viking-icon\n      class=\"viking-callout-icon\"\n      [name]=\"resolvedIcon()\"\n      [size]=\"22\"\n    />\n    <div class=\"viking-callout-body\">\n      @if (heading()) {\n        <p class=\"viking-callout-heading\">{{ heading() }}</p>\n      }\n      <div class=\"viking-callout-text\"><ng-content /></div>\n    </div>\n    @if (dismissible()) {\n      <button\n        type=\"button\"\n        class=\"viking-callout-close\"\n        aria-label=\"Dismiss\"\n        (click)=\"dismiss()\"\n      >\n        <viking-icon name=\"x\" [size]=\"18\" />\n      </button>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: flex-start;\n        gap: var(--viking-space-3); /* Improved gap for polish */\n        padding: var(--viking-space-4); /* Generous breathing room */\n        border-radius: var(--viking-radius-xl); /* Consistent softer */\n        background: var(--viking-surface);\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        transition: var(--viking-transition-interactive);\n        box-shadow: var(--viking-shadow-xs);\n      }\n      .viking-callout-icon {\n        margin-top: var(--viking-space-0-5);\n        color: var(--viking-text-muted);\n        flex-shrink: 0;\n      }\n      :host(.viking-callout-accent) {\n        background: var(--viking-accent-soft);\n      }\n      :host(.viking-callout-accent) .viking-callout-icon {\n        color: var(--viking-accent);\n      }\n      :host(.viking-callout-secondary) {\n        background: var(--viking-accent-secondary-soft);\n      }\n      :host(.viking-callout-secondary) .viking-callout-icon {\n        color: var(--viking-accent-secondary);\n      }\n      :host(.viking-callout-info) {\n        background: color-mix(\n          in srgb,\n          var(--viking-info) 10%,\n          var(--viking-surface)\n        );\n      }\n      :host(.viking-callout-info) .viking-callout-icon {\n        color: var(--viking-info);\n      }\n      :host(.viking-callout-success) {\n        background: color-mix(\n          in srgb,\n          var(--viking-success) 10%,\n          var(--viking-surface)\n        );\n      }\n      :host(.viking-callout-success) .viking-callout-icon {\n        color: var(--viking-success);\n      }\n      :host(.viking-callout-warning) {\n        background: color-mix(\n          in srgb,\n          var(--viking-warning) 12%,\n          var(--viking-surface)\n        );\n      }\n      :host(.viking-callout-warning) .viking-callout-icon {\n        color: var(--viking-warning);\n      }\n      :host(.viking-callout-danger) {\n        background: color-mix(\n          in srgb,\n          var(--viking-danger) 12%,\n          var(--viking-surface)\n        );\n        border: 1px solid\n          color-mix(in srgb, var(--viking-danger) 32%, transparent);\n        color: var(--viking-text);\n      }\n      :host(.viking-callout-danger) .viking-callout-icon {\n        color: var(--viking-danger);\n      }\n      :host(.viking-callout-danger) .viking-callout-text {\n        color: var(--viking-text-muted);\n      }\n      :host(.viking-callout-danger) .viking-callout-heading {\n        color: var(--viking-text);\n      }\n      .viking-callout-body {\n        flex: 1;\n        min-width: 0;\n        display: grid;\n        gap: var(--viking-space-1); /* Consistent typography spacing */\n      }\n      .viking-callout-heading {\n        margin: 0;\n        font-size: var(--viking-font-size);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-text);\n        line-height: var(--viking-line-height-tight);\n      }\n      .viking-callout-text {\n        color: var(--viking-text-muted);\n        line-height: var(--viking-line-height-relaxed);\n        font-size: var(--viking-font-size-sm);\n      }\n      .viking-callout-close {\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: var(--viking-space-0-5);\n        border-radius: var(--viking-radius);\n        display: inline-flex;\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-callout-close:hover {\n        color: var(--viking-text);\n        background: color-mix(in srgb, currentColor 8%, transparent);\n      }\n      .viking-callout-close:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: 1px;\n      }\n    `,\n  ],\n})\nexport class VikingCallout {\n  readonly tone = input<VikingTone>(\"accent\");\n  readonly heading = input<string>(\"\");\n  readonly icon = input<VikingIconName | null>(null);\n  readonly dismissible = input<boolean>(false);\n\n  readonly closed = output<void>();\n\n  protected readonly dismissed = signal(false);\n  protected readonly resolvedIcon = computed<VikingIconName>(\n    () => this.icon() ?? TONE_ICONS[this.tone()] ?? \"info\",\n  );\n  protected readonly liveRole = computed(() => {\n    const tone = this.tone();\n    if (tone === \"danger\") return \"alert\";\n    if (tone === \"warning\" || tone === \"success\") return \"status\";\n    return \"note\";\n  });\n\n  protected dismiss = (): void => {\n    this.dismissed.set(true);\n    this.closed.emit();\n  };\n}\n","import { Directive, Provider, Type, forwardRef, signal } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n/** Registers a component as a ControlValueAccessor. */\nexport const provideVikingCva = (component: Type<unknown>): Provider => ({\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => component),\n  multi: true,\n});\n\n/** Shared ControlValueAccessor plumbing for Viking-Material form controls. */\n@Directive()\nexport abstract class VikingControl<T> implements ControlValueAccessor {\n  protected onChange: (value: T) => void = () => {};\n  protected onTouched: () => void = () => {};\n\n  /** Disabled state driven by Angular forms (setDisabledState). */\n  readonly formDisabled = signal(false);\n\n  abstract writeValue(value: T): void;\n\n  registerOnChange(fn: (value: T) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.formDisabled.set(isDisabled);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-checkbox — custom checkbox.\n * ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-checkbox\",\n  imports: [VikingIcon],\n  providers: [provideVikingCva(VikingCheckbox)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <label\n      class=\"viking-checkbox\"\n      [class.viking-disabled]=\"disabled() || formDisabled()\"\n    >\n      <span\n        class=\"viking-checkbox-box\"\n        [class.viking-checked]=\"checked() || indeterminate()\"\n      >\n        <input\n          type=\"checkbox\"\n          [checked]=\"checked()\"\n          [indeterminate]=\"indeterminate()\"\n          [disabled]=\"disabled() || formDisabled()\"\n          (change)=\"toggle($event)\"\n          (blur)=\"onTouched()\"\n        />\n        @if (indeterminate()) {\n          <viking-icon name=\"minus\" [size]=\"14\" />\n        } @else if (checked()) {\n          <viking-icon name=\"check\" [size]=\"14\" />\n        }\n      </span>\n      <span class=\"viking-checkbox-content\">\n        <span class=\"viking-checkbox-label\"><ng-content /></span>\n        @if (description()) {\n          <span class=\"viking-checkbox-description\">{{ description() }}</span>\n        }\n      </span>\n    </label>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      .viking-checkbox {\n        --viking-checkbox-size: 1.125rem;\n        --viking-checkbox-line-height: 1.45;\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-2);\n        cursor: pointer;\n        font-size: var(--viking-font-size);\n        line-height: var(--viking-checkbox-line-height);\n      }\n      /* Multi-line description: pin control to first line */\n      .viking-checkbox:has(.viking-checkbox-description) {\n        align-items: flex-start;\n      }\n      .viking-disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-checkbox-box {\n        position: relative;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        box-sizing: border-box;\n        width: var(--viking-checkbox-size);\n        height: var(--viking-checkbox-size);\n        margin-top: 0;\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius-xs);\n        background: var(--viking-surface);\n        color: var(--viking-accent-content);\n        transition: var(--viking-transition-interactive);\n        flex-shrink: 0;\n        box-shadow: var(--viking-shadow-xs);\n        line-height: 0;\n      }\n      .viking-checkbox:has(.viking-checkbox-description) .viking-checkbox-box {\n        margin-top: calc(\n          (\n              1em *\n                var(--viking-checkbox-line-height) - var(--viking-checkbox-size)\n            ) /\n            2\n        );\n      }\n      /* The native input fills the visual box so clicks and focus land on it. */\n      .viking-checkbox-box input {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        margin: 0;\n        opacity: 0;\n        cursor: pointer;\n      }\n      .viking-checkbox-box viking-icon,\n      .viking-checkbox-box .viking-icon-svg-host,\n      .viking-checkbox-box .viking-icon-svg {\n        display: block;\n        line-height: 0;\n        pointer-events: none;\n      }\n      .viking-checkbox:hover:not(.viking-disabled) .viking-checkbox-box {\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-checkbox-box.viking-checked {\n        background: var(--viking-accent);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-accent) 80%,\n          var(--viking-black)\n        );\n        box-shadow: var(--viking-shadow-sm);\n      }\n      .viking-checkbox-box:has(input:focus-visible) {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-checkbox-content {\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        min-width: 0;\n        flex: 1 1 auto;\n        padding-top: 0;\n      }\n      .viking-checkbox-label {\n        font-size: inherit;\n        color: var(--viking-text);\n        line-height: var(--viking-checkbox-line-height);\n      }\n      .viking-checkbox-description {\n        font-size: var(--viking-font-size-sm, 0.875rem);\n        color: var(--viking-text-muted);\n        line-height: var(--viking-checkbox-line-height);\n      }\n    `,\n  ],\n})\nexport class VikingCheckbox extends VikingControl<boolean> {\n  readonly checked = model<boolean>(false);\n  readonly indeterminate = input<boolean>(false);\n  readonly disabled = input<boolean>(false);\n  readonly description = input<string>(\"\");\n\n  writeValue(value: boolean): void {\n    this.checked.set(!!value);\n  }\n\n  protected toggle = (event: Event): void => {\n    const next = (event.target as HTMLInputElement).checked;\n    this.checked.set(next);\n    this.onChange(next);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  signal,\n  viewChild,\n} from \"@angular/core\";\nimport type { SuiteThemePreference } from \"../../core/theme\";\nimport { VikingActivityList } from \"../activity-list/activity-list\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingCallout } from \"../callout/callout\";\nimport { VikingCheckbox } from \"../checkbox/checkbox\";\nimport { VikingKbd } from \"../kbd/kbd\";\nimport { VikingPreferencesService } from \"./preferences.service\";\n\n/**\n * Preferences form body — theme, export/import, activity\n * (FORJD ADR-0024 / ADR-0026 / ADR-0027).\n */\n@Component({\n  selector: \"viking-preferences-panel\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    VikingActivityList,\n    VikingButton,\n    VikingCallout,\n    VikingCheckbox,\n    VikingKbd,\n  ],\n  template: `\n    <div class=\"suite-preferences viking-preferences fj-preferences\">\n      <p\n        class=\"suite-preferences-lede viking-preferences-lede fj-preferences-lede\"\n      >\n        Appearance syncs across browser tabs on this device. Nothing here is\n        uploaded — secrets and API tokens stay out of preferences.\n      </p>\n\n      <section\n        class=\"suite-preferences-section viking-preferences-section fj-preferences-section\"\n        aria-labelledby=\"viking-prefs-theme\"\n      >\n        <h3\n          id=\"viking-prefs-theme\"\n          class=\"suite-preferences-heading viking-preferences-heading fj-preferences-heading\"\n        >\n          Theme\n        </h3>\n        <div\n          class=\"suite-preferences-theme viking-preferences-theme fj-preferences-theme\"\n          role=\"group\"\n          aria-label=\"Theme preference\"\n        >\n          @for (opt of themeOptions; track opt.value) {\n            <viking-button\n              type=\"button\"\n              [variant]=\"\n                prefs.snapshot().theme === opt.value ? 'primary' : 'outline'\n              \"\n              (pressed)=\"setTheme(opt.value)\"\n            >\n              {{ opt.label }}\n            </viking-button>\n          }\n        </div>\n      </section>\n\n      <section\n        class=\"suite-preferences-section viking-preferences-section fj-preferences-section\"\n        aria-labelledby=\"viking-prefs-transfer\"\n      >\n        <h3\n          id=\"viking-prefs-transfer\"\n          class=\"suite-preferences-heading viking-preferences-heading fj-preferences-heading\"\n        >\n          Export / import\n        </h3>\n        <p\n          class=\"suite-preferences-lede viking-preferences-lede fj-preferences-lede\"\n        >\n          Move theme, disclosure, and onboarding progress between browsers. Soft\n          chrome only — never tokens or sealed data.\n        </p>\n        <viking-checkbox\n          [checked]=\"includeRecent()\"\n          (checkedChange)=\"includeRecent.set($event)\"\n        >\n          Include search history\n        </viking-checkbox>\n        <div\n          class=\"suite-preferences-actions viking-preferences-actions fj-preferences-actions\"\n        >\n          <viking-button\n            type=\"button\"\n            variant=\"secondary\"\n            (pressed)=\"exportPack()\"\n          >\n            Export local data\n          </viking-button>\n          <viking-button\n            type=\"button\"\n            variant=\"secondary\"\n            (pressed)=\"pickImport('merge')\"\n          >\n            Import (merge)\n          </viking-button>\n          <viking-button\n            type=\"button\"\n            variant=\"outline\"\n            (pressed)=\"pickImport('replace')\"\n          >\n            Import (replace)\n          </viking-button>\n        </div>\n        <input\n          #packFile\n          type=\"file\"\n          accept=\"application/json,.json\"\n          class=\"suite-sr-only viking-sr-only fj-sr-only\"\n          (change)=\"onPackFile($event)\"\n        />\n      </section>\n\n      <section\n        class=\"suite-preferences-section viking-preferences-section fj-preferences-section\"\n        aria-labelledby=\"viking-prefs-local\"\n      >\n        <h3\n          id=\"viking-prefs-local\"\n          class=\"suite-preferences-heading viking-preferences-heading fj-preferences-heading\"\n        >\n          Local data\n        </h3>\n        <div\n          class=\"suite-preferences-actions viking-preferences-actions fj-preferences-actions\"\n        >\n          <viking-button\n            type=\"button\"\n            variant=\"secondary\"\n            (pressed)=\"prefs.resetDisclosure()\"\n          >\n            Reset advanced sections\n          </viking-button>\n          <viking-button\n            type=\"button\"\n            variant=\"secondary\"\n            (pressed)=\"prefs.clearSearchHistory()\"\n          >\n            Clear search history\n          </viking-button>\n          <viking-button\n            type=\"button\"\n            variant=\"danger\"\n            (pressed)=\"prefs.resetAll()\"\n          >\n            Reset all preferences\n          </viking-button>\n        </div>\n      </section>\n\n      <section\n        class=\"suite-preferences-section viking-preferences-section fj-preferences-section\"\n        aria-labelledby=\"viking-prefs-activity\"\n      >\n        <h3\n          id=\"viking-prefs-activity\"\n          class=\"suite-preferences-heading viking-preferences-heading fj-preferences-heading\"\n        >\n          Recent activity\n        </h3>\n        <p\n          class=\"suite-preferences-lede viking-preferences-lede fj-preferences-lede\"\n        >\n          Important soft-chrome actions on this device. Metadata only — not a\n          server audit trail.\n        </p>\n        <viking-activity-list [entries]=\"prefs.activityEntries()\" />\n        @if (prefs.activityEntries().length > 0) {\n          <div\n            class=\"suite-preferences-actions viking-preferences-actions fj-preferences-actions\"\n          >\n            <viking-button\n              type=\"button\"\n              variant=\"ghost\"\n              (pressed)=\"prefs.clearActivity()\"\n            >\n              Clear activity\n            </viking-button>\n          </div>\n        }\n      </section>\n\n      <viking-callout tone=\"info\" heading=\"Keyboard\">\n        Press <viking-kbd>⌘</viking-kbd>/<viking-kbd>Ctrl</viking-kbd\n        ><viking-kbd>,</viking-kbd> to open preferences, or\n        <viking-kbd>?</viking-kbd> for all shortcuts.\n      </viking-callout>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n    `,\n  ],\n})\nexport class VikingPreferencesPanel {\n  protected readonly prefs = inject(VikingPreferencesService);\n  private readonly packFile =\n    viewChild<ElementRef<HTMLInputElement>>(\"packFile\");\n\n  protected readonly includeRecent = signal(false);\n  private importMode: \"merge\" | \"replace\" = \"merge\";\n\n  protected readonly themeOptions: {\n    readonly value: SuiteThemePreference;\n    readonly label: string;\n  }[] = [\n    { value: \"system\", label: \"System\" },\n    { value: \"light\", label: \"Light\" },\n    { value: \"dark\", label: \"Dark\" },\n  ];\n\n  protected setTheme(value: SuiteThemePreference): void {\n    this.prefs.setTheme(value);\n  }\n\n  protected exportPack(): void {\n    this.prefs.exportDataPack({\n      includeRecentSearches: this.includeRecent(),\n    });\n  }\n\n  protected pickImport(mode: \"merge\" | \"replace\"): void {\n    this.importMode = mode;\n    const input = this.packFile()?.nativeElement;\n    if (!input) {\n      return;\n    }\n    input.value = \"\";\n    input.click();\n  }\n\n  protected onPackFile(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    const file = input.files?.[0];\n    if (!file) {\n      return;\n    }\n    void this.prefs.importDataPack(file, this.importMode);\n  }\n}\n","import { ChangeDetectionStrategy, Component, inject } from \"@angular/core\";\nimport { VikingModal } from \"../modal/modal\";\nimport { VikingPreferencesPanel } from \"./preferences-panel\";\nimport { VikingPreferencesService } from \"./preferences.service\";\n\n/** Preferences modal — open via ⌘, / Ctrl+, or VikingPreferencesService.show(). */\n@Component({\n  selector: \"viking-preferences\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [VikingModal, VikingPreferencesPanel],\n  template: `\n    <viking-modal\n      [open]=\"prefs.open()\"\n      (openChange)=\"prefs.setOpen($event)\"\n      heading=\"Preferences\"\n    >\n      <viking-preferences-panel />\n    </viking-modal>\n  `,\n  styles: [\n    `\n      :host {\n        display: contents;\n      }\n    `,\n  ],\n})\nexport class VikingPreferences {\n  protected readonly prefs = inject(VikingPreferencesService);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n} from \"@angular/core\";\nimport { RouterLink } from \"@angular/router\";\nimport { recordSuiteActivity } from \"../../core/activity-log\";\nimport {\n  SUITE_EMPTY_GUIDANCE_EYEBROW,\n  getDefaultOnboardingStore,\n  type OnboardingStore,\n  type SuiteOnboardingFlow,\n} from \"../../core/onboarding\";\nimport { vikingUid } from \"../../core/uid\";\nimport { safeHref } from \"../../core/safe-href\";\nimport { VikingButton } from \"../button/button\";\n\n/** One checklist row for first-time guidance (FORJD ADR-0025). */\nexport type VikingOnboardingStep = {\n  readonly id: string;\n  readonly title: string;\n  readonly description?: string;\n  /** In-app route (preferred) or absolute http(s) URL. */\n  readonly href?: string;\n  readonly routerLink?: string | readonly string[];\n  readonly actionLabel?: string;\n};\n\n/**\n * First-time onboarding checklist — persists via createOnboardingStore\n * (FORJD ADR-0025). Chrome: suite-components.css (`.suite-onboarding`).\n * Empty surfaces should keep using viking-empty-state with\n * SUITE_EMPTY_GUIDANCE_EYEBROW.\n */\n@Component({\n  selector: \"viking-onboarding-checklist\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [VikingButton, RouterLink],\n  host: {\n    class: \"suite-onboarding viking-onboarding fj-onboarding\",\n    \"[attr.data-complete]\": 'allDone() ? \"true\" : null',\n    \"[hidden]\": \"hidden()\",\n  },\n  template: `\n    @if (!hidden()) {\n      <header\n        class=\"suite-onboarding-header viking-onboarding-header fj-onboarding-header\"\n      >\n        <div\n          class=\"suite-onboarding-copy viking-onboarding-copy fj-onboarding-copy\"\n        >\n          <p\n            class=\"suite-onboarding-eyebrow viking-onboarding-eyebrow fj-onboarding-eyebrow\"\n          >\n            {{ eyebrow() }}\n          </p>\n          <h2\n            class=\"suite-onboarding-title viking-onboarding-title fj-onboarding-title\"\n            [id]=\"titleId\"\n          >\n            {{ heading() }}\n          </h2>\n          @if (description()) {\n            <p\n              class=\"suite-onboarding-description viking-onboarding-description fj-onboarding-description\"\n            >\n              {{ description() }}\n            </p>\n          }\n        </div>\n        <p\n          class=\"suite-onboarding-progress viking-onboarding-progress fj-onboarding-progress\"\n          aria-live=\"polite\"\n        >\n          {{ completedCount() }} of {{ steps().length }} complete\n        </p>\n      </header>\n\n      <ol\n        class=\"suite-onboarding-list viking-onboarding-list fj-onboarding-list\"\n        [attr.aria-labelledby]=\"titleId\"\n      >\n        @for (step of steps(); track step.id) {\n          <li\n            class=\"suite-onboarding-item viking-onboarding-item fj-onboarding-item\"\n            [attr.data-done]=\"isDone(step.id) ? 'true' : null\"\n          >\n            <label\n              class=\"suite-onboarding-row viking-onboarding-row fj-onboarding-row\"\n            >\n              <input\n                type=\"checkbox\"\n                class=\"suite-onboarding-check viking-onboarding-check fj-onboarding-check\"\n                [checked]=\"isDone(step.id)\"\n                (change)=\"toggleStep(step.id, $event)\"\n              />\n              <span\n                class=\"suite-onboarding-body viking-onboarding-body fj-onboarding-body\"\n              >\n                <span\n                  class=\"suite-onboarding-step-title viking-onboarding-step-title fj-onboarding-step-title\"\n                  >{{ step.title }}</span\n                >\n                @if (step.description) {\n                  <span\n                    class=\"suite-onboarding-step-detail viking-onboarding-step-detail fj-onboarding-step-detail\"\n                    >{{ step.description }}</span\n                  >\n                }\n              </span>\n            </label>\n            @if (step.routerLink; as link) {\n              <a\n                class=\"suite-onboarding-action viking-onboarding-action fj-onboarding-action\"\n                [routerLink]=\"link\"\n                (click)=\"onAction(step.id)\"\n              >\n                {{ step.actionLabel || \"Open\" }}\n              </a>\n            } @else if (stepHref(step); as href) {\n              <a\n                class=\"suite-onboarding-action viking-onboarding-action fj-onboarding-action\"\n                [href]=\"href\"\n                (click)=\"onAction(step.id)\"\n              >\n                {{ step.actionLabel || \"Open\" }}\n              </a>\n            }\n          </li>\n        }\n      </ol>\n\n      <footer\n        class=\"suite-onboarding-footer viking-onboarding-footer fj-onboarding-footer\"\n      >\n        @if (allDone()) {\n          <viking-button variant=\"primary\" type=\"button\" (pressed)=\"finish()\">\n            {{ finishLabel() }}\n          </viking-button>\n        }\n        @if (dismissible()) {\n          <viking-button variant=\"ghost\" type=\"button\" (pressed)=\"dismiss()\">\n            {{ dismissLabel() }}\n          </viking-button>\n        }\n      </footer>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      :host[hidden] {\n        display: none;\n      }\n    `,\n  ],\n})\nexport class VikingOnboardingChecklist {\n  private readonly destroyRef = inject(DestroyRef);\n  private store: OnboardingStore = getDefaultOnboardingStore();\n\n  readonly flowId = input<SuiteOnboardingFlow>(null);\n  readonly heading = input(\"Getting started\");\n  readonly description = input(\"\");\n  readonly eyebrow = input(SUITE_EMPTY_GUIDANCE_EYEBROW);\n  readonly steps = input.required<readonly VikingOnboardingStep[]>();\n  readonly dismissible = input(true);\n  readonly dismissLabel = input(\"Dismiss\");\n  readonly finishLabel = input(\"I'm done\");\n  /** Hide when the store says the guide should not show (completed / dismissed). */\n  readonly autoHide = input(true);\n\n  readonly stepChange = output<{\n    readonly id: string;\n    readonly complete: boolean;\n  }>();\n  readonly dismissed = output<void>();\n  readonly completed = output<void>();\n\n  protected readonly titleId = vikingUid(\"viking-onboarding-title\");\n  protected readonly tick = signal(0);\n\n  protected readonly completedCount = computed(() => {\n    this.tick();\n    return this.steps().filter((s) => this.store.isStepComplete(s.id)).length;\n  });\n\n  protected readonly allDone = computed(() => {\n    this.tick();\n    const list = this.steps();\n    return (\n      list.length > 0 && list.every((s) => this.store.isStepComplete(s.id))\n    );\n  });\n\n  protected readonly hidden = computed(() => {\n    this.tick();\n    if (!this.autoHide()) {\n      return false;\n    }\n    return !this.store.shouldShowGuide();\n  });\n\n  constructor() {\n    effect(() => {\n      const flow = this.flowId();\n      if (flow) {\n        this.store.setActiveFlow(flow);\n      }\n    });\n    const unsub = this.store.subscribe(() => {\n      this.tick.update((n) => n + 1);\n    });\n    this.destroyRef.onDestroy(unsub);\n  }\n\n  protected isDone(id: string): boolean {\n    this.tick();\n    return this.store.isStepComplete(id);\n  }\n\n  protected stepHref(step: VikingOnboardingStep): string | null {\n    if (!step.href) {\n      return null;\n    }\n    return safeHref(step.href);\n  }\n\n  protected toggleStep(id: string, event: Event): void {\n    const checked = (event.target as HTMLInputElement).checked;\n    if (checked) {\n      this.store.completeStep(id);\n    } else {\n      this.store.incompleteStep(id);\n    }\n    this.stepChange.emit({ id, complete: checked });\n    this.tick.update((n) => n + 1);\n  }\n\n  protected onAction(id: string): void {\n    this.store.completeStep(id);\n    this.stepChange.emit({ id, complete: true });\n    this.tick.update((n) => n + 1);\n  }\n\n  protected finish(): void {\n    this.store.markComplete();\n    recordSuiteActivity({\n      kind: \"onboarding.complete\",\n      label: \"Completed onboarding checklist\",\n      detail: this.flowId() ?? undefined,\n      source: \"deml\",\n    });\n    this.completed.emit();\n    this.tick.update((n) => n + 1);\n  }\n\n  protected dismiss(): void {\n    this.store.markDismissed();\n    recordSuiteActivity({\n      kind: \"onboarding.dismiss\",\n      label: \"Dismissed onboarding checklist\",\n      detail: this.flowId() ?? undefined,\n      source: \"deml\",\n    });\n    this.dismissed.emit();\n    this.tick.update((n) => n + 1);\n  }\n}\n","/**\n * Canonical client data-fetching handle — flat phase/data/error signals.\n * Dual-adapter: keep API aligned with FORJD `app/core/fetch/fetch-handle`\n * (FORJD ADR-0011). Presentation binds isLoading / isError / isSuccess;\n * domain code owns fetchers — viking-ui does not call backends.\n */\n\nimport { computed, signal, type Signal } from \"@angular/core\";\n\n/** Shared lifecycle for any client request (probe, GET, mutation read-back). */\nexport type FetchPhase = \"idle\" | \"loading\" | \"success\" | \"error\";\n\n/** Soft or hard settle — prefer this over throw when the domain returns outcomes. */\nexport type FetchSettled<TData, TError = string> =\n  | { readonly ok: true; readonly data: TData }\n  | { readonly ok: false; readonly error: TError };\n\nexport type CreateFetchHandleOptions = {\n  /** Default `idle`. Use `loading` when the view probes immediately on mount. */\n  readonly initialPhase?: FetchPhase;\n};\n\nexport type FetchHandle<TData, TError = string> = {\n  readonly phase: Signal<FetchPhase>;\n  readonly data: Signal<TData | null>;\n  readonly error: Signal<TError | null>;\n  readonly isIdle: Signal<boolean>;\n  readonly isLoading: Signal<boolean>;\n  readonly isSuccess: Signal<boolean>;\n  readonly isError: Signal<boolean>;\n  /**\n   * Run a throwing fetcher. Sets loading → success|error.\n   * Superseded / aborted generations do not write success or error.\n   */\n  run(\n    fetcher: (signal: AbortSignal) => Promise<TData>,\n    mapError?: (cause: unknown) => TError,\n  ): Promise<TData | null>;\n  /**\n   * Run a soft-settled fetcher (no throw for domain outcomes).\n   * Use for continuity probes that return ok | soft-failure.\n   */\n  runSettled(\n    fetcher: (signal: AbortSignal) => Promise<FetchSettled<TData, TError>>,\n  ): Promise<void>;\n  /** Force error without a network round-trip (e.g. offline event). */\n  fail(error: TError): void;\n  /**\n   * Apply a settled result without entering `loading` (SWR background revalidation).\n   * Does not abort an in-flight `run` / `runSettled`.\n   */\n  applySettled(settled: FetchSettled<TData, TError>): void;\n  /** Return to idle and drop data/error. */\n  reset(): void;\n  /**\n   * Abort the in-flight request (if any).\n   * If still `loading` with no successor run, returns to `idle` (DestroyRef-safe).\n   */\n  abort(): void;\n};\n\n// --- Error mapping ---\n\n/** Safe string for UI error slots — never stringify tokens/ciphertext. */\nexport function fetchErrorMessage(\n  cause: unknown,\n  fallback = \"Request failed\",\n): string {\n  if (typeof cause === \"string\" && cause.trim()) {\n    return cause;\n  }\n  if (cause instanceof Error && cause.message.trim()) {\n    return cause.message;\n  }\n  return fallback;\n}\n\n// --- Handle factory ---\n\n/**\n * Create a local fetch handle (component- or service-owned).\n * Flat signals only — no nested `{ status, data, error }` VM object.\n */\nexport function createFetchHandle<TData, TError = string>(\n  options: CreateFetchHandleOptions = {},\n): FetchHandle<TData, TError> {\n  const phase = signal<FetchPhase>(options.initialPhase ?? \"idle\");\n  const data = signal<TData | null>(null);\n  const error = signal<TError | null>(null);\n  let controller: AbortController | null = null;\n  let generation = 0;\n\n  const isIdle = computed(() => phase() === \"idle\");\n  const isLoading = computed(() => phase() === \"loading\");\n  const isSuccess = computed(() => phase() === \"success\");\n  const isError = computed(() => phase() === \"error\");\n\n  function begin(): { signal: AbortSignal; gen: number } {\n    controller?.abort();\n    controller = new AbortController();\n    generation += 1;\n    const gen = generation;\n    phase.set(\"loading\");\n    error.set(null);\n    return { signal: controller.signal, gen };\n  }\n\n  function isCurrent(gen: number, signal: AbortSignal): boolean {\n    return gen === generation && !signal.aborted;\n  }\n\n  async function run(\n    fetcher: (signal: AbortSignal) => Promise<TData>,\n    mapError: (cause: unknown) => TError = (cause) =>\n      fetchErrorMessage(cause) as TError,\n  ): Promise<TData | null> {\n    const { signal, gen } = begin();\n    try {\n      const value = await fetcher(signal);\n      if (!isCurrent(gen, signal)) {\n        return null;\n      }\n      data.set(value);\n      error.set(null);\n      phase.set(\"success\");\n      return value;\n    } catch (cause: unknown) {\n      if (!isCurrent(gen, signal)) {\n        return null;\n      }\n      error.set(mapError(cause));\n      phase.set(\"error\");\n      return null;\n    }\n  }\n\n  async function runSettled(\n    fetcher: (signal: AbortSignal) => Promise<FetchSettled<TData, TError>>,\n  ): Promise<void> {\n    const { signal, gen } = begin();\n    try {\n      const settled = await fetcher(signal);\n      if (!isCurrent(gen, signal)) {\n        return;\n      }\n      if (settled.ok) {\n        data.set(settled.data);\n        error.set(null);\n        phase.set(\"success\");\n        return;\n      }\n      error.set(settled.error);\n      phase.set(\"error\");\n    } catch (cause: unknown) {\n      if (!isCurrent(gen, signal)) {\n        return;\n      }\n      error.set(fetchErrorMessage(cause) as TError);\n      phase.set(\"error\");\n    }\n  }\n\n  function fail(next: TError): void {\n    controller?.abort();\n    generation += 1;\n    error.set(next);\n    phase.set(\"error\");\n  }\n\n  function applySettled(settled: FetchSettled<TData, TError>): void {\n    if (settled.ok) {\n      data.set(settled.data);\n      error.set(null);\n      phase.set(\"success\");\n      return;\n    }\n    error.set(settled.error);\n    phase.set(\"error\");\n  }\n\n  function reset(): void {\n    controller?.abort();\n    generation += 1;\n    phase.set(\"idle\");\n    data.set(null);\n    error.set(null);\n  }\n\n  function abort(): void {\n    controller?.abort();\n    generation += 1;\n    controller = null;\n    if (phase() === \"loading\") {\n      phase.set(\"idle\");\n    }\n  }\n\n  return {\n    phase: phase.asReadonly(),\n    data: data.asReadonly(),\n    error: error.asReadonly(),\n    isIdle,\n    isLoading,\n    isSuccess,\n    isError,\n    run,\n    runSettled,\n    fail,\n    applySettled,\n    reset,\n    abort,\n  };\n}\n","/**\n * Stale-while-revalidate cache with generation-guarded writes.\n * Dual-adapter: keep API aligned with FORJD `app/core/fetch/swr-cache`\n * (FORJD ADR-0012). One cache instance per resource — compose; no mega keyed store.\n */\n\nexport type SwrCachePolicy = {\n  /** Serve without network when age &lt; freshMs. */\n  readonly freshMs: number;\n  /** Serve cached value and revalidate in background when freshMs ≤ age &lt; staleMs. */\n  readonly staleMs: number;\n};\n\nexport type SwrReadSource = \"fresh\" | \"stale\" | \"network\";\n\nexport type SwrReadResult<T> = {\n  readonly value: T;\n  readonly source: SwrReadSource;\n};\n\nexport type CreateSwrCacheOptions<T> = {\n  readonly policy: SwrCachePolicy;\n  /** Return false to skip storing (e.g. offline). Caller still receives the value. */\n  readonly shouldCache?: (value: T) => boolean;\n};\n\nexport type SwrCache<T> = {\n  /** SWR read: fresh hit | stale+background revalidate | blocking network. */\n  read(fetcher: () => Promise<T>): Promise<SwrReadResult<T>>;\n  /** Hard drop — bump generation so in-flight writes cannot repopulate. */\n  invalidate(): void;\n  /**\n   * Soft invalidate — keep value but age it past `freshMs` so the next `read`\n   * returns stale and kicks background revalidation.\n   */\n  markStale(): void;\n  /**\n   * Force a background revalidate when a value exists.\n   * Failed revalidation keeps the previous value (SWR).\n   */\n  revalidate(fetcher: () => Promise<T>): Promise<T | null>;\n  /** Current value without fetching. */\n  peek(): T | null;\n  /** Age in ms, or `null` when empty. */\n  ageMs(now?: number): number | null;\n  /** Notify on successful cache writes (network / revalidate). */\n  subscribe(listener: (value: T) => void): () => void;\n};\n\nfunction assertPolicy(policy: SwrCachePolicy): void {\n  if (!(policy.freshMs >= 0) || !(policy.staleMs >= policy.freshMs)) {\n    throw new Error(\"SwrCachePolicy: require staleMs >= freshMs >= 0\");\n  }\n}\n\n/**\n * Create a single-resource SWR cache.\n * Prefer one instance per URL/resource over a multi-key global map (ADR-0010).\n */\nexport function createSwrCache<T>(\n  options: CreateSwrCacheOptions<T>,\n): SwrCache<T> {\n  assertPolicy(options.policy);\n  const { freshMs, staleMs } = options.policy;\n  const shouldCache = options.shouldCache ?? (() => true);\n\n  let value: T | null = null;\n  let cachedAt = 0;\n  let generation = 0;\n  let inflight: Promise<T> | null = null;\n  let inflightGen = -1;\n  const listeners = new Set<(value: T) => void>();\n\n  function publish(next: T): void {\n    for (const listener of listeners) {\n      try {\n        listener(next);\n      } catch {\n        // Listener errors must not break cache writes.\n      }\n    }\n  }\n\n  function write(next: T, gen: number): boolean {\n    if (gen !== generation) {\n      return false;\n    }\n    if (!shouldCache(next)) {\n      return false;\n    }\n    value = next;\n    cachedAt = Date.now();\n    publish(next);\n    return true;\n  }\n\n  function fetchAndStore(fetcher: () => Promise<T>, gen: number): Promise<T> {\n    if (inflight && inflightGen === gen) {\n      return inflight;\n    }\n    let promise!: Promise<T>;\n    promise = (async () => {\n      try {\n        const next = await fetcher();\n        write(next, gen);\n        return next;\n      } finally {\n        if (inflight === promise) {\n          inflight = null;\n          inflightGen = -1;\n        }\n      }\n    })();\n    inflight = promise;\n    inflightGen = gen;\n    return promise;\n  }\n\n  async function read(fetcher: () => Promise<T>): Promise<SwrReadResult<T>> {\n    const now = Date.now();\n    const age = value != null ? now - cachedAt : Number.POSITIVE_INFINITY;\n\n    if (value != null && age < freshMs) {\n      return { value, source: \"fresh\" };\n    }\n\n    if (value != null && age < staleMs) {\n      const gen = generation;\n      void fetchAndStore(fetcher, gen).catch(() => {\n        /* keep stale on revalidation failure */\n      });\n      return { value, source: \"stale\" };\n    }\n\n    const gen = generation;\n    const next = await fetchAndStore(fetcher, gen);\n    return { value: next, source: \"network\" };\n  }\n\n  function invalidate(): void {\n    generation += 1;\n    value = null;\n    cachedAt = 0;\n    inflight = null;\n    inflightGen = -1;\n  }\n\n  function markStale(): void {\n    if (value == null) {\n      return;\n    }\n    // Force age >= freshMs while remaining < staleMs when policy allows.\n    cachedAt = Date.now() - freshMs;\n  }\n\n  async function revalidate(fetcher: () => Promise<T>): Promise<T | null> {\n    if (value == null) {\n      return null;\n    }\n    const gen = generation;\n    try {\n      return await fetchAndStore(fetcher, gen);\n    } catch {\n      return value;\n    }\n  }\n\n  function peek(): T | null {\n    return value;\n  }\n\n  function ageMs(now = Date.now()): number | null {\n    if (value == null) {\n      return null;\n    }\n    return Math.max(0, now - cachedAt);\n  }\n\n  function subscribe(listener: (value: T) => void): () => void {\n    listeners.add(listener);\n    return () => {\n      listeners.delete(listener);\n    };\n  }\n\n  return {\n    read,\n    invalidate,\n    markStale,\n    revalidate,\n    peek,\n    ageMs,\n    subscribe,\n  };\n}\n","/**\n * Plain-text sanitizer + HTML encoding for UGC / third-party strings.\n * Dual-adapter: keep API aligned with forjd-ui core/a11y/sanitize-text\n * (FORJD ADR-0014 / ADR-0015).\n */\n\nexport type SanitizeTextOptions = {\n  readonly maxLength?: number;\n  readonly allowNewlines?: boolean;\n};\n\nconst TAG_RE = /<[^>]*>/g;\nconst CONTROL_RE = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u009F]/g;\n\n/** Strip markup/controls from a display string (never trust third-party HTML). */\nexport function sanitizeDisplayText(\n  raw: string | null | undefined,\n  options: SanitizeTextOptions = {},\n): string {\n  if (raw == null) {\n    return \"\";\n  }\n  let text = String(raw);\n  text = text.replace(TAG_RE, \"\");\n  if (options.allowNewlines) {\n    text = text.replace(/\\r\\n?/g, \"\\n\").replace(CONTROL_RE, \" \");\n    text = text.replace(/[ \\t]+\\n/g, \"\\n\").replace(/\\n{3,}/g, \"\\n\\n\");\n    text = text.replace(/[^\\S\\n]+/g, \" \");\n  } else {\n    text = text.replace(/[\\r\\n\\t]+/g, \" \").replace(CONTROL_RE, \" \");\n    text = text.replace(/\\s+/g, \" \");\n  }\n  text = text.trim();\n  const max = options.maxLength;\n  if (max != null && max >= 0 && text.length > max) {\n    text = text.slice(0, max).trimEnd();\n  }\n  return text;\n}\n\n/** Sanitize then HTML-escape for attribute / template-literal sinks. */\nexport function encodeForHtml(\n  raw: string | null | undefined,\n  options: SanitizeTextOptions = {},\n): string {\n  return sanitizeDisplayText(raw, options)\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\");\n}\n","/**\n * Optional browser globals for suite chrome (search palette, cookie, bug report).\n * Surfaces register handlers; callers invoke without deep coupling.\n */\n\nexport type DemlWidgets = {\n  openSearch?: () => void;\n  closeSearch?: () => void;\n  openCookieSettings?: () => void;\n  openBugReport?: () => void;\n};\n\nexport type DemlGlobal = typeof globalThis & {\n  DemlWidgets?: DemlWidgets;\n};\n\nexport function readDemlWidgets(): DemlWidgets {\n  if (typeof globalThis === \"undefined\") {\n    return {};\n  }\n  return (globalThis as DemlGlobal).DemlWidgets ?? {};\n}\n\nexport function writeDemlWidgets(patch: DemlWidgets): DemlWidgets {\n  const next: DemlWidgets = { ...readDemlWidgets(), ...patch };\n  if (typeof globalThis !== \"undefined\") {\n    (globalThis as DemlGlobal).DemlWidgets = next;\n  }\n  return next;\n}\n","/** Fixed series palette — Role B; keep in sync with suite-tokens.css --suite-series-* */\nexport const VIKING_SERIES_PRESETS = [\n  \"var(--suite-series-1)\",\n  \"var(--suite-series-2)\",\n  \"var(--suite-series-3)\",\n  \"var(--suite-series-4)\",\n  \"var(--suite-series-5)\",\n  \"var(--suite-series-6)\",\n  \"var(--suite-series-7)\",\n  \"var(--suite-series-8)\",\n] as const;\n\nexport const VIKING_SERIES_DEFAULT = VIKING_SERIES_PRESETS[0];\n\nexport type VikingSeriesPreset = (typeof VIKING_SERIES_PRESETS)[number];\n","/** Attaches constructable stylesheet to a shadow root (with fallback). */\nexport const attachShadowStyles = (shadow: ShadowRoot, css: string): void => {\n  if (\n    \"adoptedStyleSheets\" in Document.prototype &&\n    \"replaceSync\" in CSSStyleSheet.prototype\n  ) {\n    const sheet = new CSSStyleSheet();\n    sheet.replaceSync(css);\n    shadow.adoptedStyleSheets = [sheet];\n    return;\n  }\n\n  const style = document.createElement(\"style\");\n  style.textContent = css;\n  shadow.append(style);\n};\n\n/** Reads a boolean attribute presence/value. */\nexport const readBoolAttr = (el: HTMLElement, name: string): boolean =>\n  el.hasAttribute(name) && el.getAttribute(name) !== \"false\";\n\n/** Safely sets form value when ElementInternals is fully supported (e.g. not in jsdom). */\nexport const setFormValue = (\n  internals: ElementInternals | null,\n  value: string,\n): void => {\n  if (internals && typeof internals.setFormValue === \"function\") {\n    internals.setFormValue(value);\n  }\n};\n\n/** Attaches ElementInternals where available without breaking older WebKit or test DOMs. */\nexport const attachElementInternals = (\n  el: HTMLElement,\n): ElementInternals | null => {\n  const attachInternals = (\n    el as HTMLElement & { attachInternals?: () => ElementInternals }\n  ).attachInternals;\n  return typeof attachInternals === \"function\"\n    ? attachInternals.call(el)\n    : null;\n};\n\n/** Opens a native dialog when showModal is available. */\nexport const showModalDialog = (dialog: HTMLDialogElement | null): void => {\n  if (dialog && typeof dialog.showModal === \"function\" && !dialog.open) {\n    dialog.showModal();\n  }\n};\n\n/** Closes a native dialog when close is available. */\nexport const closeModalDialog = (dialog: HTMLDialogElement | null): void => {\n  if (dialog && typeof dialog.close === \"function\" && dialog.open) {\n    dialog.close();\n  }\n};\n","/**\n * DOM helpers for Viking web components.\n * HTMLElementBase is SSR-safe when the DOM constructor is unavailable.\n */\n\n/** Constructor shape used by custom element classes. */\nexport type HTMLElementBaseCtor = {\n  new (): HTMLElement;\n  prototype: HTMLElement;\n};\n\n/**\n * Minimal stand-in for SSR/prerender — cast once at the boundary.\n * Runtime browsers always take the real HTMLElement branch.\n */\nconst SSRHTMLElementBase = class {} as HTMLElementBaseCtor;\n\nexport const HTMLElementBase: HTMLElementBaseCtor =\n  typeof HTMLElement === \"undefined\" ? SSRHTMLElementBase : HTMLElement;\n\n/** Stable unique id for associating labels and controls. */\nexport const vikingWcUid = (prefix: string): string =>\n  `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n\n/** Escape text for safe innerHTML insertion. */\nexport const escapeHtml = (value: string): string => {\n  const entities: Record<string, string> = {\n    \"&\": \"&amp;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\",\n    '\"': \"&quot;\",\n    \"'\": \"&#39;\",\n  };\n\n  return value.replace(\n    /[&<>\"']/g,\n    (character) => entities[character] ?? character,\n  );\n};\n\n/** Platform modifier label for keyboard shortcut hints. */\nexport const modKeyLabel = (): string =>\n  typeof navigator !== \"undefined\" &&\n  /Mac|iPhone|iPad/i.test(navigator.platform)\n    ? \"⌘\"\n    : \"Ctrl\";\n\n/** Register a custom element when the runtime supports it (skip during SSR/prerender). */\nexport const defineCustomElement = (\n  tag: string,\n  ctor: CustomElementConstructor,\n): void => {\n  if (typeof customElements === \"undefined\" || customElements.get(tag)) {\n    return;\n  }\n  customElements.define(tag, ctor);\n};\n\n/** Register an alias tag with a fresh subclass; customElements disallows reusing constructors. */\nexport const defineCustomElementAlias = <T extends CustomElementConstructor>(\n  tag: string,\n  ctor: T,\n): void => {\n  if (typeof customElements === \"undefined\" || customElements.get(tag)) {\n    return;\n  }\n  customElements.define(tag, class extends ctor {});\n};\n","/**\n * AUTO-GENERATED by scripts/sync_lucide_icons.mjs — do not edit by hand.\n * Lucide paths are inlined at build time; lucide is a devDependency only.\n * @see https://lucide.dev\n */\nexport const LUCIDE_ICON_PATHS = {\n  \"alert-circle\":\n    '<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>',\n  \"alert-triangle\":\n    '<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>',\n  \"arrow-left\": '<path d=\"m12 19-7-7 7-7\"/><path d=\"M19 12H5\"/>',\n  \"arrow-right\": '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n  \"arrow-up-right\": '<path d=\"M7 7h10v10\"/><path d=\"M7 17 17 7\"/>',\n  \"bar-chart\":\n    '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n  bell: '<path d=\"M10.268 21a2 2 0 0 0 3.464 0\"/><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"/>',\n  bold: '<path d=\"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\"/>',\n  bolt: '<path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"/>',\n  brain:\n    '<path d=\"M12 18V5\"/><path d=\"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\"/><path d=\"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\"/><path d=\"M17.997 5.125a4 4 0 0 1 2.526 5.77\"/><path d=\"M18 18a4 4 0 0 0 2-7.464\"/><path d=\"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\"/><path d=\"M6 18a4 4 0 0 1-2-7.464\"/><path d=\"M6.003 5.125a4 4 0 0 0-2.526 5.77\"/>',\n  bug: '<path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/>',\n  building:\n    '<path d=\"M12 10h.01\"/><path d=\"M12 14h.01\"/><path d=\"M12 6h.01\"/><path d=\"M16 10h.01\"/><path d=\"M16 14h.01\"/><path d=\"M16 6h.01\"/><path d=\"M8 10h.01\"/><path d=\"M8 14h.01\"/><path d=\"M8 6h.01\"/><path d=\"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/><rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\"/>',\n  calendar:\n    '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n  check: '<path d=\"M20 6 9 17l-5-5\"/>',\n  \"check-circle\": '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n  \"chevron-down\": '<path d=\"m6 9 6 6 6-6\"/>',\n  \"chevron-left\": '<path d=\"m15 18-6-6 6-6\"/>',\n  \"chevron-right\": '<path d=\"m9 18 6-6-6-6\"/>',\n  \"chevron-up\": '<path d=\"m18 15-6-6-6 6\"/>',\n  chip: '<path d=\"M12 20v2\"/><path d=\"M12 2v2\"/><path d=\"M17 20v2\"/><path d=\"M17 2v2\"/><path d=\"M2 12h2\"/><path d=\"M2 17h2\"/><path d=\"M2 7h2\"/><path d=\"M20 12h2\"/><path d=\"M20 17h2\"/><path d=\"M20 7h2\"/><path d=\"M7 20v2\"/><path d=\"M7 2v2\"/><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/><rect x=\"8\" y=\"8\" width=\"8\" height=\"8\" rx=\"1\"/>',\n  clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/>',\n  cloud: '<path d=\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\"/>',\n  cookie:\n    '<path d=\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5\"/><path d=\"M8.5 8.5v.01\"/><path d=\"M16 15.5v.01\"/><path d=\"M12 12v.01\"/><path d=\"M11 17v.01\"/><path d=\"M7 14v.01\"/>',\n  copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n  \"dots-horizontal\":\n    '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n  \"dots-vertical\":\n    '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n  download:\n    '<path d=\"M12 15V3\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m7 10 5 5 5-5\"/>',\n  external:\n    '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n  eye: '<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\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n  \"eye-off\":\n    '<path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\"/><path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\"/><path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\"/><path d=\"m2 2 20 20\"/>',\n  file: '<path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>',\n  filter:\n    '<path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\"/>',\n  fingerprint:\n    '<path d=\"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4\"/><path d=\"M14 13.12c0 2.38 0 6.38-1 8.88\"/><path d=\"M17.29 21.02c.12-.6.43-2.3.5-3.02\"/><path d=\"M2 12a10 10 0 0 1 18-6\"/><path d=\"M2 16h.01\"/><path d=\"M21.8 16c.2-2 .131-5.354 0-6\"/><path d=\"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2\"/><path d=\"M8.65 22c.21-.66.45-1.32.57-2\"/><path d=\"M9 6.8a6 6 0 0 1 9 5.2v2\"/>',\n  folder:\n    '<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"/>',\n  globe:\n    '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/>',\n  \"grip-vertical\":\n    '<circle cx=\"9\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n  heart:\n    '<path d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\"/>',\n  home: '<path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"/><path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/>',\n  image:\n    '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/>',\n  info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n  insights: '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"m19 9-5 5-4-4-3 3\"/>',\n  italic:\n    '<line x1=\"19\" x2=\"10\" y1=\"4\" y2=\"4\"/><line x1=\"14\" x2=\"5\" y1=\"20\" y2=\"20\"/><line x1=\"15\" x2=\"9\" y1=\"4\" y2=\"20\"/>',\n  key: '<path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"/><circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>',\n  link: '<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/>',\n  list: '<path d=\"M3 5h.01\"/><path d=\"M3 12h.01\"/><path d=\"M3 19h.01\"/><path d=\"M8 5h13\"/><path d=\"M8 12h13\"/><path d=\"M8 19h13\"/>',\n  \"list-ordered\":\n    '<path d=\"M11 5h10\"/><path d=\"M11 12h10\"/><path d=\"M11 19h10\"/><path d=\"M4 4h1v5\"/><path d=\"M4 9h2\"/><path d=\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\"/>',\n  loader: '<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>',\n  lock: '<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>',\n  \"log-in\":\n    '<path d=\"m10 17 5-5-5-5\"/><path d=\"M15 12H3\"/><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"/>',\n  \"log-out\":\n    '<path d=\"m16 17 5-5-5-5\"/><path d=\"M21 12H9\"/><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>',\n  mail: '<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"/><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>',\n  menu: '<path d=\"M4 5h16\"/><path d=\"M4 12h16\"/><path d=\"M4 19h16\"/>',\n  minus: '<path d=\"M5 12h14\"/>',\n  moon: '<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/>',\n  network:\n    '<rect x=\"16\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"2\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"9\" y=\"2\" width=\"6\" height=\"6\" rx=\"1\"/><path d=\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\"/><path d=\"M12 12V8\"/>',\n  paperclip:\n    '<path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"/>',\n  pencil:\n    '<path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/><path d=\"m15 5 4 4\"/>',\n  phone:\n    '<path d=\"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\"/>',\n  play: '<path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" fill=\"currentColor\" stroke=\"none\"/>',\n  plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n  policy:\n    '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"m9 12 2 2 4-4\"/>',\n  refresh:\n    '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M8 16H3v5\"/>',\n  rocket:\n    '<path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\"/><path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\"/><path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\"/><path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\"/>',\n  search: '<path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/>',\n  \"search-off\":\n    '<path d=\"m13.5 8.5-5 5\"/><path d=\"m8.5 8.5 5 5\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n  send: '<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\"/><path d=\"m21.854 2.147-10.94 10.939\"/>',\n  server:\n    '<rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/><rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\"/><line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\"/>',\n  settings:\n    '<path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n  shield:\n    '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/>',\n  ship: '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n  sparkle:\n    '<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/><path d=\"M20 2v4\"/><path d=\"M22 4h-4\"/><circle cx=\"4\" cy=\"20\" r=\"2\"/>',\n  speed: '<path d=\"m12 14 4-4\"/><path d=\"M3.34 19a10 10 0 1 1 17.32 0\"/>',\n  star: '<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\"/>',\n  sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2\"/><path d=\"M12 20v2\"/><path d=\"m4.93 4.93 1.41 1.41\"/><path d=\"m17.66 17.66 1.41 1.41\"/><path d=\"M2 12h2\"/><path d=\"M20 12h2\"/><path d=\"m6.34 17.66-1.41 1.41\"/><path d=\"m19.07 4.93-1.41 1.41\"/>',\n  terminal: '<path d=\"M12 19h8\"/><path d=\"m4 17 6-6-6-6\"/>',\n  trash:\n    '<path d=\"M10 11v6\"/><path d=\"M14 11v6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/>',\n  \"trending-up\": '<path d=\"M16 7h6v6\"/><path d=\"m22 7-8.5 8.5-5-5L2 17\"/>',\n  underline:\n    '<path d=\"M6 4v6a6 6 0 0 0 12 0V4\"/><line x1=\"4\" x2=\"20\" y1=\"20\" y2=\"20\"/>',\n  upload:\n    '<path d=\"M12 3v12\"/><path d=\"m17 8-5-5-5 5\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>',\n  user: '<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n  \"user-shield\":\n    '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"M6.376 18.91a6 6 0 0 1 11.249.003\"/><circle cx=\"12\" cy=\"11\" r=\"4\"/>',\n  x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n} as const;\n\nexport type LucideIconName = keyof typeof LUCIDE_ICON_PATHS;\n","/**\n * DEML branded icon paths — optimized SVG geometry (not sourced from Lucide).\n * Use via viking-icon name=\"deml\" | \"deml-compact\" | \"deml-lockup\".\n */\nexport const VIKING_BRAND_ICON_PATHS = {\n  /** Primary bar-chart mark in rounded frame (outline). */\n  deml: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/>',\n  /** Compact monogram for favicons and dense Drakkar shell. */\n  \"deml-compact\":\n    '<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"3\"/><path d=\"M9 16V12M12 16V9M15 16V13\"/>',\n  /** Lockup mark with baseline accent bar. */\n  \"deml-lockup\":\n    '<rect x=\"3\" y=\"3\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/><path d=\"M3 20h18\"/>',\n} as const;\n\n/** Drakkar — Viking-UI / site shell brand marks (Lucide ship, build-time inlined). */\nexport const VIKING_DRAKKAR_ICON_PATHS = {\n  /** Primary Drakkar longship mark (outline). */\n  drakkar:\n    '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n  /** Compact tile for favicons and dense navbar chrome. */\n  \"drakkar-compact\":\n    '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n  /** Lockup mark with baseline accent bar. */\n  \"drakkar-lockup\":\n    '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/><path d=\"M3 21h18\"/>',\n} as const;\n\n/** Filled-path overrides for DEML brand marks. */\nexport const VIKING_BRAND_ICON_FILLED_PATHS: Partial<\n  Record<keyof typeof VIKING_BRAND_ICON_PATHS, string>\n> = {\n  deml: '<path d=\"M5 4a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/>',\n  \"deml-compact\":\n    '<path d=\"M6 5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5zM9 12h1.5v4H9v-4zM12 9h1.5v7H12V9zM15 11h1.5v5H15v-5z\"/>',\n  \"deml-lockup\":\n    '<path d=\"M4 4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/><rect x=\"3\" y=\"19\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\n/** Filled-path overrides for Drakkar brand marks. */\nexport const VIKING_DRAKKAR_ICON_FILLED_PATHS: Partial<\n  Record<keyof typeof VIKING_DRAKKAR_ICON_PATHS, string>\n> = {\n  drakkar:\n    '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/>',\n  \"drakkar-compact\":\n    '<path d=\"M3 3h18a2 2 0 0 1 2 2v18a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\"/><path d=\"M7.5 12.5 12 9.8l4.5 2.7v2.2c0 .8-.5 1.4-1.2 1.7L12 17.8l-3.3-1.6c-.7-.3-1.2-.9-1.2-1.7v-2.2z\"/><rect x=\"11\" y=\"6\" width=\"2\" height=\"5.5\" rx=\"0.35\"/>',\n  \"drakkar-lockup\":\n    '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/><rect x=\"3\" y=\"20\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\nexport type VikingBrandIconName = keyof typeof VIKING_BRAND_ICON_PATHS;\n\nexport type VikingDrakkarIconName = keyof typeof VIKING_DRAKKAR_ICON_PATHS;\n\nexport const VIKING_BRAND_ICON_NAMES_LIST = Object.keys(\n  VIKING_BRAND_ICON_PATHS,\n) as VikingBrandIconName[];\n\nexport const VIKING_DRAKKAR_ICON_NAMES_LIST = Object.keys(\n  VIKING_DRAKKAR_ICON_PATHS,\n) as VikingDrakkarIconName[];\n","/** Official platform brand colors — exception for recognizable integration marks (same policy as Google/Apple in viking-icon). */\nexport const VIKING_INTEGRATION_BRAND_COLORS = {\n  kubernetes: \"#326CE5\",\n  tensorflow: \"#FF6F00\",\n  pytorch: \"#EE4C2C\",\n  \"apache-spark\": \"#E25A1C\",\n  databricks: \"#FF3621\",\n  \"aws-redshift\": \"#8C4FFF\",\n} as const;\n\nexport type VikingIntegrationBrandName =\n  keyof typeof VIKING_INTEGRATION_BRAND_COLORS;\n\nexport const VIKING_INTEGRATION_BRAND_NAMES = Object.keys(\n  VIKING_INTEGRATION_BRAND_COLORS,\n) as VikingIntegrationBrandName[];\n\nexport const isIntegrationBrandIcon = (\n  name: string,\n): name is VikingIntegrationBrandName =>\n  (VIKING_INTEGRATION_BRAND_NAMES as readonly string[]).includes(name);\n\n/**\n * Official product logo paths (24×24 viewBox) sourced from Simple Icons (CC0).\n * Inlined at build time — no runtime icon font or CDN.\n */\nconst VIKING_INTEGRATION_BRAND_PATHS: Record<\n  VikingIntegrationBrandName,\n  string\n> = {\n  kubernetes:\n    \"M10.204 14.35l.007.01-.999 2.413a5.171 5.171 0 0 1-2.075-2.597l2.578-.437.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.143 5.143 0 0 0-.73 3.255l2.514-.725.002-.009zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005.15-2.62a5.144 5.144 0 0 0-3.01 1.442l2.147 1.523.004-.002zm.76 2.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003 2.134-1.513a5.188 5.188 0 0 0-2.992-1.442l.148 2.615.002.001zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.583 1.583 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.606 1.606 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45 6.45 0 0 0-.105-2.332 6.465 6.465 0 0 0-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545 6.545 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142 0-.306-.224-.555-.5-.555-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545 0 0 1-.162.258l-.012.211a6.424 6.424 0 0 0-4.166 2.003 8.373 8.373 0 0 1-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594 0 0 0-.348-.132.481.481 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462 6.462 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453 6.453 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499 6.499 0 0 0 2.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01 2.526.728a5.199 5.199 0 0 0-.108-1.674A5.208 5.208 0 0 0 16.4 9.7zm-4.013 5.325a.437.437 0 0 0-.404-.232.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.164 5.164 0 0 0 3.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44 0 0 0-.27.036.44.44 0 0 0-.214.572l-.003.004 1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44-.004.005z\",\n  tensorflow:\n    \"M1.292 5.856L11.54 0v24l-4.095-2.378V7.603l-6.168 3.564.015-5.31zm21.43 5.311l-.014-5.31L12.46 0v24l4.095-2.378V14.87l3.092 1.788-.018-4.618-3.074-1.756V7.603l6.168 3.564z\",\n  pytorch:\n    \"M12.005 0L4.952 7.053a9.865 9.865 0 000 14.022 9.866 9.866 0 0014.022 0c3.984-3.9 3.986-10.205.085-14.023l-1.744 1.743c2.904 2.905 2.904 7.634 0 10.538s-7.634 2.904-10.538 0-2.904-7.634 0-10.538l4.647-4.646.582-.665zm3.568 3.899a1.327 1.327 0 00-1.327 1.327 1.327 1.327 0 001.327 1.328A1.327 1.327 0 0016.9 5.226 1.327 1.327 0 0015.573 3.9z\",\n  \"apache-spark\":\n    \"M10.812 0c-.425.013-.845.215-1.196.605a3.593 3.593 0 00-.493.722c-.355.667-.425 1.415-.556 2.143a551.9 551.9 0 00-.726 4.087c-.027.16-.096.227-.244.273C5.83 8.386 4.06 8.94 2.3 9.514c-.387.125-.773.289-1.114.506-1.042.665-1.196 1.753-.415 2.71.346.422.79.715 1.284.936 1.1.49 2.202.976 3.3 1.47.019.01.036.013.053.019h-.004l1.306.535c0 .023.002.045 0 .073-.2 2.03-.39 4.063-.58 6.095-.04.419-.012.831.134 1.23.317.87 1.065 1.148 1.881.701.372-.204.666-.497.937-.818 1.372-1.623 2.746-3.244 4.113-4.872.111-.133.205-.15.363-.098.349.117.697.231 1.045.347h.001c.02.012.045.02.073.03l.142.042c1.248.416 2.68.775 3.929 1.19.4.132.622.164 1.045.098.311-.048.592-.062.828-.236.602-.33.995-.957.988-1.682-.005-.427-.154-.813-.35-1.186-.82-1.556-1.637-3.113-2.461-4.666-.078-.148-.076-.243.037-.375 1.381-1.615 2.756-3.236 4.133-4.855.272-.32.513-.658.653-1.058.308-.878-.09-1.57-1-1.741a2.783 2.783 0 00-1.235.069c-1.974.521-3.947 1.041-5.918 1.57-.175.047-.26.015-.355-.144a353.08 353.08 0 00-2.421-4.018 4.61 4.61 0 00-.652-.849c-.371-.37-.802-.549-1.227-.536zm.172 3.703a.592.592 0 01.189.211c.87 1.446 1.742 2.89 2.609 4.338.07.118.135.16.277.121 1.525-.41 3.052-.813 4.579-1.217.367-.098.735-.193 1.103-.289a.399.399 0 01-.1.2c-1.259 1.48-2.516 2.962-3.779 4.438-.11.13-.12.22-.04.37.937 1.803 1.768 3.309 2.498 4.76l-3.696-1.019c-.538-.18-1.077-.358-1.615-.539-.163-.055-.25-.03-.36.1-1.248 1.488-2.504 2.97-3.759 4.454a.398.398 0 01-.18.132c.035-.378.068-.757.104-1.136.149-1.572.297-3.144.451-4.716-.03-.318.117-.405-.322-.545-1.493-.593-3.346-1.321-4.816-1.905a.595.595 0 01.24-.134c1.797-.57 3.595-1.14 5.394-1.705.127-.04.199-.092.211-.233.013-.148.05-.294.076-.441.241-1.363.483-2.726.726-4.088.068-.386.14-.771.21-1.157z\",\n  databricks:\n    \"M.95 14.184L12 20.403l9.919-5.55v2.21L12 22.662l-10.484-5.96-.565.308v.77L12 24l11.05-6.218v-4.317l-.515-.309L12 19.118l-9.867-5.653v-2.21L12 16.805l11.05-6.218V6.32l-.515-.308L12 11.974 2.647 6.681 12 1.388l7.76 4.368.668-.411v-.566L12 0 .95 6.27v.72L12 13.207l9.919-5.55v2.26L12 15.52 1.516 9.56l-.565.308Z\",\n  \"aws-redshift\":\n    \"M16.639 9.932a.822.822 0 0 1-.822-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.823.82m-2.086 4.994a.823.823 0 0 1-.822-.822.822.822 0 0 1 1.645 0 .822.822 0 0 1-.823.822m-5.004-.833a.822.822 0 1 1 .002-1.644.822.822 0 0 1-.002 1.644m-2.083 4.578a.823.823 0 0 1-.823-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.822.82m9.173-11.236a1.68 1.68 0 0 0-1.68 1.676c0 .566.285 1.066.718 1.37l-.782 1.982a1.674 1.674 0 0 0-1.923 1.104l-1.753-.398a1.675 1.675 0 0 0-3.348.103c0 .432.169.823.438 1.12l-.764 1.79c-.028-.001-.053-.008-.08-.008a1.68 1.68 0 0 0-1.68 1.676 1.68 1.68 0 0 0 3.36 0c0-.593-.312-1.112-.778-1.41l.674-1.579c.161.052.33.088.508.088.661 0 1.228-.386 1.502-.94l1.856.42a1.68 1.68 0 0 0 3.327-.325c0-.5-.224-.943-.574-1.25l.822-2.083c.053.005.104.016.157.016a1.68 1.68 0 0 0 1.68-1.676 1.68 1.68 0 0 0-1.68-1.676M12 23.145c-4.17 0-7.286-1.252-7.286-2.37V4.79C6.14 5.938 9.131 6.547 12 6.547c2.869 0 5.86-.609 7.286-1.756v15.983c0 1.12-3.116 2.37-7.286 2.37M12 .856c4.293 0 7.286 1.274 7.286 2.419 0 1.143-2.993 2.418-7.286 2.418-4.293 0-7.286-1.275-7.286-2.418C4.714 2.129 7.707.855 12 .855m8.143 2.419C20.143 1.147 15.947 0 12 0 8.052 0 3.857 1.147 3.857 3.274l.002.01h-.002v17.49C3.857 22.87 8.052 24 12 24c3.947 0 8.143-1.13 8.143-3.226V3.284h-.002l.002-.01\",\n};\n\nconst integrationBrandSvg = (name: VikingIntegrationBrandName): string => {\n  const fill = VIKING_INTEGRATION_BRAND_COLORS[name];\n  const d = VIKING_INTEGRATION_BRAND_PATHS[name];\n  return `<path fill=\"${fill}\" d=\"${d}\"/>`;\n};\n\n/** Multi-path brand SVG markup (24×24 viewBox) — official product logos at brand hue. */\nexport const VIKING_INTEGRATION_BRAND_SVGS: Record<\n  VikingIntegrationBrandName,\n  string\n> = {\n  kubernetes: integrationBrandSvg(\"kubernetes\"),\n  tensorflow: integrationBrandSvg(\"tensorflow\"),\n  pytorch: integrationBrandSvg(\"pytorch\"),\n  \"apache-spark\": integrationBrandSvg(\"apache-spark\"),\n  databricks: integrationBrandSvg(\"databricks\"),\n  \"aws-redshift\": integrationBrandSvg(\"aws-redshift\"),\n};\n\n/** Path markup for icon registry / viking-icon-paths.json sync. */\nexport const VIKING_INTEGRATION_ICON_PATHS = Object.fromEntries(\n  (\n    Object.entries(VIKING_INTEGRATION_BRAND_PATHS) as [\n      VikingIntegrationBrandName,\n      string,\n    ][]\n  ).map(([name, d]) => [name, `<path d=\"${d}\"/>`]),\n) as Record<VikingIntegrationBrandName, string>;\n\nexport type VikingIntegrationIconName = VikingIntegrationBrandName;\n\nexport const VIKING_INTEGRATION_ICON_NAMES_LIST =\n  VIKING_INTEGRATION_BRAND_NAMES;\n","/**\n * Zero-dependency inline SVG icon registry (24×24 stroke icons).\n * Lucide paths are synced at build time; DEML brand marks are custom artwork.\n */\nimport { LUCIDE_ICON_PATHS } from \"./lucide-paths.generated\";\nimport {\n  VIKING_BRAND_ICON_FILLED_PATHS,\n  VIKING_BRAND_ICON_PATHS,\n  VIKING_BRAND_ICON_NAMES_LIST,\n  VIKING_DRAKKAR_ICON_FILLED_PATHS,\n  VIKING_DRAKKAR_ICON_PATHS,\n  VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nimport {\n  VIKING_INTEGRATION_ICON_PATHS,\n  VIKING_INTEGRATION_ICON_NAMES_LIST,\n} from \"./integration-brand-icons\";\n\nexport {\n  VIKING_DRAKKAR_ICON_NAMES_LIST,\n  VIKING_BRAND_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nexport {\n  VIKING_INTEGRATION_ICON_NAMES_LIST,\n  type VikingIntegrationIconName,\n} from \"./integration-brand-icons\";\n\nexport type VikingIconName = keyof typeof VIKING_ICON_PATHS;\n\nexport type VikingIconSizePreset = \"sm\" | \"md\" | \"lg\";\n\nexport type VikingIconVariant = \"outline\" | \"filled\";\n\n/** Semantic color tokens resolved to CSS custom properties. */\nexport type VikingIconColorToken =\n  | \"inherit\"\n  | \"accent\"\n  | \"success\"\n  | \"warning\"\n  | \"danger\"\n  | \"info\"\n  | \"muted\"\n  | \"text\";\n\n/** Pixel sizes for sm / md / lg presets. */\nexport const VIKING_ICON_SIZE_PRESETS: Record<VikingIconSizePreset, number> = {\n  sm: 16,\n  md: 20,\n  lg: 24,\n} as const;\n\n/** Custom icons not covered by Lucide (hub topology, ML model tile, OAuth stubs). */\nconst VIKING_CUSTOM_ICON_PATHS = {\n  hub: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1\"/>',\n  model:\n    '<rect x=\"4\" y=\"8\" width=\"16\" height=\"10\" rx=\"2\"/><path d=\"M8 8V6a4 4 0 0 1 8 0v2\"/>',\n  google:\n    '<path d=\"M12 11.2v2.4h6.6c-.3 1.5-1.8 4.4-6.6 4.4-4 0-7.2-3.3-7.2-7.3S8 3.4 12 3.4c2.3 0 3.9 1 4.8 1.8l3.2-3.1C17.5.8 14.9 0 12 0 5.4 0 0 5.4 0 12s5.4 12 12 12c6.9 0 11.5-4.8 11.5-11.6 0-.8-.1-1.4-.2-1.9H12z\"/>',\n  apple:\n    '<path d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"/>',\n} as const;\n\nexport const VIKING_ICON_PATHS = {\n  ...LUCIDE_ICON_PATHS,\n  ...VIKING_BRAND_ICON_PATHS,\n  ...VIKING_DRAKKAR_ICON_PATHS,\n  ...VIKING_INTEGRATION_ICON_PATHS,\n  ...VIKING_CUSTOM_ICON_PATHS,\n} as const;\n\n/** Filled-path overrides used when variant=\"filled\" (brand marks, solid shapes). */\nexport const VIKING_ICON_FILLED_PATHS: Partial<Record<VikingIconName, string>> =\n  {\n    ...VIKING_BRAND_ICON_FILLED_PATHS,\n    ...VIKING_DRAKKAR_ICON_FILLED_PATHS,\n  };\n\n/** Legacy Material Icons ligature names → Viking icon registry keys. */\nexport const MATERIAL_ICON_ALIASES: Record<string, VikingIconName> = {\n  analytics: \"deml\",\n  security: \"shield\",\n  link: \"link\",\n  visibility: \"eye\",\n  shield: \"shield\",\n  trending_up: \"trending-up\",\n  lock: \"lock\",\n  fingerprint: \"fingerprint\",\n  gpp_maybe: \"shield\",\n  verified_user: \"user-shield\",\n  bolt: \"bolt\",\n  cloud: \"cloud\",\n  lan: \"network\",\n  hub: \"hub\",\n  speed: \"speed\",\n  rocket_launch: \"rocket\",\n  insights: \"insights\",\n  check: \"check\",\n  description: \"file\",\n  vpn_key: \"key\",\n  policy: \"policy\",\n  bug_report: \"bug\",\n  search: \"search\",\n  chevron_left: \"chevron-left\",\n  chevron_right: \"chevron-right\",\n  verified: \"check-circle\",\n  warning: \"alert-triangle\",\n  close: \"x\",\n  account_balance: \"building\",\n  send: \"send\",\n  check_circle: \"check-circle\",\n  play_circle: \"play\",\n  input: \"terminal\",\n  model_training: \"model\",\n  auto_awesome: \"sparkle\",\n  error_outline: \"alert-circle\",\n  home: \"home\",\n  cookie: \"cookie\",\n  search_off: \"search-off\",\n  person_add: \"user\",\n  storage: \"aws-redshift\",\n  data_object: \"aws-redshift\",\n  memory: \"tensorflow\",\n  psychology: \"pytorch\",\n  dns: \"server\",\n  login: \"log-in\",\n};\n\n/** Icons always rendered with fill (play triangle, dot grids). */\nexport const VIKING_FILLED_ICON_NAMES = [\n  \"play\",\n  \"dots-horizontal\",\n  \"dots-vertical\",\n  \"grip-vertical\",\n] as const satisfies readonly VikingIconName[];\n\n/** OAuth / vendor marks rendered with official brand artwork in viking-icon. */\nexport const VIKING_BRAND_ICON_NAMES = [\n  \"google\",\n  \"apple\",\n  ...VIKING_BRAND_ICON_NAMES_LIST,\n] as const satisfies readonly VikingIconName[];\n\nconst VIKING_ICON_COLOR_TOKENS: Record<\n  Exclude<VikingIconColorToken, \"inherit\">,\n  string\n> = {\n  accent: \"var(--viking-accent)\",\n  success: \"var(--viking-success)\",\n  warning: \"var(--viking-warning)\",\n  danger: \"var(--viking-danger)\",\n  info: \"var(--viking-info)\",\n  muted: \"var(--viking-text-muted)\",\n  text: \"var(--viking-text)\",\n};\n\nexport const vikingIconViewBox = (_name: VikingIconName): string => \"0 0 24 24\";\n\n/** Resolve pixel size from preset or explicit value. */\nexport const resolveVikingIconSize = (\n  size: number | undefined,\n  preset: VikingIconSizePreset | null | undefined,\n): number => {\n  if (preset) {\n    return VIKING_ICON_SIZE_PRESETS[preset];\n  }\n  return size ?? VIKING_ICON_SIZE_PRESETS.lg;\n};\n\n/** Resolve semantic color token or raw CSS value for icon tinting. */\nexport const resolveVikingIconColor = (\n  color: VikingIconColorToken | string | undefined,\n): string | undefined => {\n  if (!color || color === \"inherit\") {\n    return undefined;\n  }\n  if (color in VIKING_ICON_COLOR_TOKENS) {\n    return VIKING_ICON_COLOR_TOKENS[\n      color as Exclude<VikingIconColorToken, \"inherit\">\n    ];\n  }\n  return color;\n};\n\nconst VIKING_ICON_PATH_KEYS = new Set(Object.keys(VIKING_ICON_PATHS));\n\n/** Resolve a Viking or legacy Material icon name to a registry key. */\nexport const resolveVikingIcon = (name: string): VikingIconName => {\n  const normalized = name.trim().toLowerCase().replace(/\\s+/g, \"_\");\n  if (VIKING_ICON_PATH_KEYS.has(normalized)) {\n    return normalized as VikingIconName;\n  }\n  const alias = MATERIAL_ICON_ALIASES[normalized];\n  if (alias) {\n    return alias;\n  }\n  return \"info\";\n};\n\nexport const VIKING_ICON_NAMES = Object.keys(\n  VIKING_ICON_PATHS,\n) as VikingIconName[];\n\n/** Lucide-sourced icon names (for docs and showcase grouping). */\nexport const VIKING_LUCIDE_ICON_NAMES = Object.keys(\n  LUCIDE_ICON_PATHS,\n) as (keyof typeof LUCIDE_ICON_PATHS)[];\n","import {\n  resolveVikingIcon,\n  VIKING_FILLED_ICON_NAMES,\n  VIKING_ICON_FILLED_PATHS,\n  VIKING_ICON_PATHS,\n  type VikingIconName,\n} from \"../../lib/core/icons\";\n\nconst FILLED_ICON_SET = new Set<string>(VIKING_FILLED_ICON_NAMES);\n\n/**\n * Renders a zero-dependency inline SVG icon for Web Components.\n * Uses the same registry as `viking-icon` in Angular.\n */\nexport const renderInlineIcon = (\n  name: string,\n  size = 16,\n  className = \"viking-wc-icon\",\n): string => {\n  const resolved = resolveVikingIcon(name);\n  const filled = FILLED_ICON_SET.has(resolved);\n  const paths = filled\n    ? (VIKING_ICON_FILLED_PATHS[resolved as VikingIconName] ??\n      VIKING_ICON_PATHS[resolved])\n    : VIKING_ICON_PATHS[resolved];\n\n  if (filled) {\n    return `<svg class=\"${className}\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"currentColor\" fill-rule=\"evenodd\" aria-hidden=\"true\">${paths}</svg>`;\n  }\n\n  return `<svg class=\"${className}\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${paths}</svg>`;\n};\n\n/** Default tone → icon mapping shared by callout and badge surfaces. */\nexport const TONE_ICON_NAMES: Record<string, string> = {\n  accent: \"info\",\n  secondary: \"info\",\n  success: \"check-circle\",\n  warning: \"alert-triangle\",\n  danger: \"alert-circle\",\n  info: \"info\",\n  muted: \"info\",\n  subtle: \"info\",\n};\n","/**\n * Shadow DOM styles for Viking-UI Web Components.\n * All values reference --viking-* tokens inherited from the document :root.\n */\n\nexport const VIKING_BUTTON_STYLES = `\n/* Host is a transparent layout shell — never paint button chrome on the host\n   (that creates a visual/semantic \"button in a button\" with the inner control). */\n:host {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-family: var(--viking-font-family);\n  margin: 0;\n  padding: 0;\n  border: none;\n  background: transparent;\n  box-shadow: none;\n  min-height: 0;\n  min-width: 0;\n  color: inherit;\n  cursor: default;\n}\n\n:host::before,\n:host::after {\n  display: none !important;\n  content: none !important;\n}\n\n:host([full-width]) {\n  display: flex;\n  width: 100%;\n}\n\n:host([full-width]) .viking-btn {\n  width: 100%;\n  min-width: 0;\n}\n\n:host([compact]) .viking-btn {\n  min-width: 0;\n}\n\n:host([square]) {\n  flex: 0 0 auto;\n}\n\n.viking-btn {\n  --viking-btn-depth-shadow:\n    var(--viking-shadow-sm),\n    inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 7%, transparent),\n    inset 0 -1px 0 color-mix(in srgb, var(--viking-black) 18%, transparent);\n  --viking-btn-hover-shadow: var(--viking-shadow-hover);\n  --viking-btn-press-shadow:\n    inset 0 1px 3px color-mix(in srgb, var(--viking-black) 34%, transparent),\n    inset 0 -1px 0 color-mix(in srgb, var(--viking-white-pure) 3%, transparent),\n    var(--viking-shadow-xs);\n\n  font-family: inherit;\n  font-size: var(--viking-font-size-ui, var(--viking-font-size-sm));\n  font-weight: var(--viking-font-weight-semibold);\n  letter-spacing: var(--viking-letter-spacing-wide);\n  line-height: var(--viking-line-height-snug);\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--viking-space-2);\n  min-height: var(--viking-control-height);\n  padding: var(--viking-space-0-5) var(--viking-control-padding-x);\n  border-radius: var(--viking-button-radius, var(--viking-radius-lg));\n  border: 1px solid transparent;\n  cursor: pointer;\n  text-decoration: none;\n  transition: var(--viking-transition-interactive);\n  width: auto;\n  min-width: var(--viking-btn-min-width, 120px);\n  white-space: nowrap;\n  position: relative;\n  background-clip: padding-box;\n  isolation: isolate;\n  user-select: none;\n  -webkit-tap-highlight-color: transparent;\n  box-sizing: border-box;\n  overflow: hidden;\n  box-shadow: var(--viking-btn-depth-shadow);\n}\n\n.viking-btn::before {\n  content: \"\";\n  position: absolute;\n  inset: 1px 1px auto;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    transparent,\n    color-mix(in srgb, var(--viking-metallic-100) 58%, transparent),\n    transparent\n  );\n  pointer-events: none;\n  opacity: 0.88;\n  transition: var(--viking-transition-interactive);\n}\n\n.viking-btn:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n  z-index: 1;\n}\n\n.viking-btn:disabled,\n.viking-btn[aria-busy='true'] {\n  opacity: var(--viking-state-disabled-opacity);\n  cursor: not-allowed;\n  transform: none !important;\n  box-shadow: none !important;\n}\n\n.viking-btn[aria-busy='true'] {\n  cursor: wait;\n}\n\n.viking-btn[aria-busy='true']:not(.viking-btn-square) {\n  min-width: var(\n    --viking-btn-loading-min-width,\n    var(--viking-btn-min-width, 120px)\n  );\n}\n\n.viking-btn[aria-busy='true']::before,\n.viking-btn[aria-busy='true'] .viking-btn-label {\n  opacity: 0.78;\n  transform: translateY(1px);\n}\n\n.viking-btn[aria-busy='true'] .viking-btn-spinner {\n  opacity: 0.85;\n}\n\n.viking-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: auto 0 0 0;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    transparent,\n    color-mix(\n      in srgb,\n      var(--viking-metallic-100) 24%,\n      transparent\n    ),\n    transparent\n  );\n  pointer-events: none;\n  opacity: 0.45;\n  transition: var(--viking-transition-interactive);\n}\n\n.viking-btn-sm {\n  min-height: var(--viking-control-height-sm);\n  padding: 0 var(--viking-space-2);\n  font-size: var(--viking-font-size-xs);\n  min-width: auto;\n}\n\n.viking-btn-xs {\n  min-height: var(--viking-control-height-xs);\n  padding: 0 var(--viking-space-2);\n  font-size: var(--viking-font-size-xs);\n  min-width: auto;\n}\n\n.viking-btn-square {\n  display: inline-grid;\n  place-items: center;\n  width: var(--viking-control-height);\n  min-width: var(--viking-control-height);\n  max-width: var(--viking-control-height);\n  height: var(--viking-control-height);\n  min-height: var(--viking-control-height);\n  padding: 0;\n  line-height: 1;\n}\n\n.viking-btn-square.viking-btn-sm {\n  width: var(--viking-control-height-sm);\n  min-width: var(--viking-control-height-sm);\n  max-width: var(--viking-control-height-sm);\n  height: var(--viking-control-height-sm);\n  min-height: var(--viking-control-height-sm);\n}\n\n.viking-btn-square.viking-btn-xs {\n  width: var(--viking-control-height-xs);\n  min-width: var(--viking-control-height-xs);\n  max-width: var(--viking-control-height-xs);\n  height: var(--viking-control-height-xs);\n  min-height: var(--viking-control-height-xs);\n}\n\n.viking-btn-square .viking-btn-label {\n  display: inline-grid;\n  place-items: center;\n  width: 100%;\n  height: 100%;\n  line-height: 1;\n}\n\n.viking-btn-square ::slotted(*) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  margin: 0;\n  line-height: 1;\n}\n\n.viking-btn-square ::slotted(svg),\n.viking-btn-square ::slotted([data-viking-icon]) {\n  width: var(--viking-icon-size-md, 20px);\n  height: var(--viking-icon-size-md, 20px);\n}\n\n::slotted(viking-icon),\n::slotted(.viking-icon),\n::slotted([data-viking-icon]) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--viking-icon-size-md);\n  height: var(--viking-icon-size-md);\n  line-height: 1;\n  flex-shrink: 0;\n  pointer-events: none;\n  flex: 0 0 auto;\n  margin-block: calc(var(--viking-space-0-5) * -1);\n  align-self: center;\n}\n\n.viking-btn-outline {\n  background: var(--viking-surface-recipe, var(--viking-surface));\n  color: var(--viking-text);\n  border-color: var(--viking-border-strong);\n  box-shadow: var(--viking-btn-depth-shadow);\n}\n\n.viking-btn-outline:hover:not(:disabled):not([aria-busy='true']) {\n  background: color-mix(in srgb, var(--viking-accent) 5%, var(--viking-surface-alt));\n  border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));\n  box-shadow: var(--viking-btn-hover-shadow);\n  transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-outline:active:not(:disabled):not([aria-busy='true']) {\n  transform: translateY(0) scale(var(--viking-state-active-scale));\n  box-shadow: var(--viking-btn-press-shadow);\n  border-color: var(--viking-border-strong);\n}\n\n.viking-btn-primary {\n  background:\n    linear-gradient(\n      180deg,\n      color-mix(in srgb, var(--viking-white-pure) 12%, transparent) 0%,\n      transparent 42%\n    ),\n    linear-gradient(\n      135deg,\n      color-mix(in srgb, var(--viking-electric-300) 18%, transparent) 0%,\n      transparent 55%\n    ),\n    var(--viking-accent);\n  color: var(--viking-accent-content);\n  border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));\n  box-shadow:\n    var(--viking-btn-depth-shadow),\n    inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 12%, transparent);\n}\n\n.viking-btn-primary:hover:not(:disabled):not([aria-busy='true']) {\n  background:\n    linear-gradient(\n      180deg,\n      color-mix(in srgb, var(--viking-white-pure) 16%, transparent) 0%,\n      transparent 44%\n    ),\n    linear-gradient(\n      135deg,\n      color-mix(in srgb, var(--viking-electric-200) 20%, transparent) 0%,\n      transparent 58%\n    ),\n    var(--viking-accent-hover);\n  border-color: var(--viking-accent-hover);\n  box-shadow: var(--viking-btn-hover-shadow);\n  transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-primary:active:not(:disabled):not([aria-busy='true']) {\n  transform: translateY(0) scale(var(--viking-state-active-scale));\n  box-shadow: var(--viking-btn-press-shadow);\n  border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));\n}\n\n.viking-btn-secondary {\n  background:\n    linear-gradient(\n      180deg,\n      color-mix(in srgb, var(--viking-white-pure) 11%, transparent) 0%,\n      transparent 42%\n    ),\n    var(--viking-accent-secondary);\n  color: var(--viking-accent-secondary-content);\n  border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));\n  box-shadow:\n    var(--viking-btn-depth-shadow),\n    inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 10%, transparent);\n}\n\n.viking-btn-secondary:hover:not(:disabled):not([aria-busy='true']) {\n  background:\n    linear-gradient(\n      180deg,\n      color-mix(in srgb, var(--viking-white-pure) 14%, transparent) 0%,\n      transparent 44%\n    ),\n    var(--viking-accent-secondary-hover);\n  border-color: var(--viking-accent-secondary-hover);\n  box-shadow: var(--viking-btn-hover-shadow);\n  transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-secondary:active:not(:disabled):not([aria-busy='true']) {\n  transform: translateY(0) scale(var(--viking-state-active-scale));\n  box-shadow: var(--viking-btn-press-shadow);\n  border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));\n}\n\n.viking-btn-filled {\n  background: var(--viking-surface-recipe-muted, var(--viking-surface-alt));\n  color: var(--viking-text);\n  border-color: var(--viking-border);\n  box-shadow: var(--viking-shadow-xs);\n}\n\n.viking-btn-filled:hover:not(:disabled):not([aria-busy='true']) {\n  border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));\n  background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));\n  box-shadow: var(--viking-btn-hover-shadow);\n  transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-filled:active:not(:disabled):not([aria-busy='true']) {\n  transform: translateY(0) scale(var(--viking-state-active-scale));\n  box-shadow: var(--viking-btn-press-shadow);\n  border-color: color-mix(in srgb, var(--viking-accent) 20%, var(--viking-border));\n  background: color-mix(in srgb, var(--viking-surface-alt) 84%, var(--viking-accent));\n}\n\n.viking-btn-danger {\n  background:\n    linear-gradient(\n      180deg,\n      color-mix(in srgb, var(--viking-white-pure) 10%, transparent) 0%,\n      transparent 42%\n    ),\n    var(--viking-danger);\n  color: var(--viking-on-danger);\n  border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));\n  box-shadow:\n    var(--viking-btn-depth-shadow),\n    inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 10%, transparent);\n}\n\n.viking-btn-danger:hover:not(:disabled):not([aria-busy='true']) {\n  background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));\n  border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));\n  box-shadow: var(--viking-btn-hover-shadow);\n  transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-danger:active:not(:disabled):not([aria-busy='true']) {\n  transform: translateY(0) scale(var(--viking-state-active-scale));\n  border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));\n  background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));\n  box-shadow: var(--viking-btn-press-shadow);\n}\n\n.viking-btn-ghost {\n  background: transparent;\n  color: var(--viking-text);\n  min-width: auto;\n  box-shadow: none;\n  border-color: transparent;\n}\n\n.viking-btn-ghost:hover:not(:disabled):not([aria-busy='true']) {\n  background: var(--viking-accent-soft);\n  color: var(--viking-accent-strong);\n  border-color: var(--viking-border-subtle);\n  box-shadow: inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 5%, transparent);\n  transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-ghost:active:not(:disabled):not([aria-busy='true']) {\n  transform: translateY(0) scale(var(--viking-state-active-scale));\n  background: var(--viking-accent-soft);\n  color: var(--viking-accent-strong);\n}\n\n.viking-btn-subtle {\n  background: transparent;\n  color: var(--viking-text-muted);\n  border-color: var(--viking-border-subtle);\n  min-width: auto;\n  box-shadow: none;\n}\n\n.viking-btn-subtle:hover:not(:disabled):not([aria-busy='true']) {\n  color: var(--viking-text);\n  background: var(--viking-accent-soft);\n  border-color: var(--viking-border-strong);\n  box-shadow: inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 5%, transparent);\n}\n\n.viking-btn-subtle:active:not(:disabled):not([aria-busy='true']) {\n  transform: translateY(0) scale(var(--viking-state-active-scale));\n  border-color: var(--viking-border);\n  background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));\n  box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 24%, transparent);\n}\n\n.viking-btn:active:not(:disabled):not([aria-busy='true']) {\n  transform: translateY(0) scale(var(--viking-state-active-scale));\n}\n\n.viking-btn-label {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--viking-space-1);\n  line-height: 1.2;\n  min-height: var(--viking-icon-size-md);\n  min-width: 0;\n  text-align: center;\n  white-space: nowrap;\n}\n\n.viking-btn-label ::slotted(*) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n  line-height: 1;\n}\n\n.viking-btn-label ::slotted([data-viking-icon]),\n.viking-btn-label ::slotted(svg),\n.viking-btn-label ::slotted(viking-icon) {\n  width: var(--viking-icon-size-md);\n  height: var(--viking-icon-size-md);\n}\n\n.viking-btn-spinner {\n  flex: 0 0 auto;\n  width: var(--viking-icon-size-sm, 18px);\n  height: var(--viking-icon-size-sm, 18px);\n  aspect-ratio: 1;\n  border: 2px solid currentColor;\n  border-right-color: transparent;\n  border-radius: var(--viking-radius-pill);\n  animation: viking-spin 0.8s linear infinite;\n  margin-inline-end: var(--viking-space-0-5);\n}\n\n@keyframes viking-spin {\n  to { transform: rotate(360deg); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .viking-btn-spinner { animation-duration: 0.01ms; }\n  .viking-btn { transition-duration: 0.01ms; }\n}\n`;\n\nexport const VIKING_INPUT_STYLES = `\n:host {\n  display: block;\n  font-family: var(--viking-font-family);\n}\n\n.viking-input-shell {\n  display: flex;\n  align-items: center;\n  gap: var(--viking-space-1);\n  min-height: var(--viking-control-height);\n  padding: 0 var(--viking-control-padding-x);\n  font-family: inherit;\n  font-size: var(--viking-font-size);\n  color: var(--viking-text);\n  background: var(--viking-surface-recipe-muted, var(--viking-surface-alt));\n  border: 1px solid color-mix(in srgb, var(--viking-border-strong) 68%, var(--viking-border));\n  border-radius: var(--viking-radius-md);\n  box-shadow:\n    var(--viking-shadow-xs),\n    inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 4%, transparent);\n  transition: var(--viking-transition-interactive);\n  width: 100%;\n  min-width: 0;\n  box-sizing: border-box;\n}\n\n.viking-input-shell:hover:not(.viking-disabled):not(.viking-loading) {\n  border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));\n  box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-input-shell:focus-within:not(.viking-loading) {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n  border-color: var(--viking-accent);\n  box-shadow:\n    var(--viking-shadow-sm),\n    0 0 0 1px color-mix(in srgb, var(--viking-accent) 22%, transparent);\n}\n\n.viking-input-shell.viking-disabled,\n.viking-input-shell.viking-loading {\n  opacity: var(--viking-state-disabled-opacity);\n}\n\n.viking-input-shell.viking-loading {\n  cursor: wait;\n}\n\n.viking-input-native {\n  flex: 1;\n  min-width: 0;\n  width: 100%;\n  border: none;\n  outline: none !important;\n  background: transparent;\n  color: var(--viking-text);\n  font-family: inherit;\n  font-size: inherit;\n  padding: 0;\n}\n\n.viking-input-native::placeholder {\n  color: var(--viking-text-muted);\n}\n\ninput {\n  flex: 1;\n  min-width: 0;\n  border: none;\n  outline: none !important;\n  background: transparent;\n  color: var(--viking-text);\n  font-family: inherit;\n  font-size: inherit;\n  padding: 0;\n}\n\ninput::placeholder {\n  color: var(--viking-text-muted);\n}\n\ninput:disabled {\n  cursor: not-allowed;\n}\n\n.viking-input-clear {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--viking-touch-target-comfort, 44px);\n  min-height: var(--viking-touch-target-comfort, 44px);\n  border: none;\n  background: transparent;\n  color: var(--viking-text-muted);\n  cursor: pointer;\n  padding: var(--viking-space-0-5);\n  border-radius: var(--viking-radius-pill);\n  transition: var(--viking-transition-interactive);\n  flex-shrink: 0;\n  -webkit-tap-highlight-color: transparent;\n}\n\n.viking-input-clear:hover {\n  color: var(--viking-text);\n  background: var(--viking-accent-soft);\n}\n\n.viking-input-clear:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.viking-input-spinner {\n  width: 1rem;\n  height: 1rem;\n  aspect-ratio: 1;\n  border: 2px solid var(--viking-text-muted);\n  border-right-color: transparent;\n  border-radius: var(--viking-radius-pill);\n  animation: viking-spin 0.8s linear infinite;\n  flex-shrink: 0;\n}\n\n@keyframes viking-spin {\n  to { transform: rotate(360deg); }\n}\n`;\n\nexport const VIKING_FIELD_STYLES = `\n:host {\n  display: block;\n  font-family: var(--viking-font-family);\n  color: var(--viking-text);\n  min-width: 0;\n}\n\n:host([hidden]) {\n  display: none;\n}\n\n:host([width='full']) {\n  width: 100%;\n}\n\n:host([width='half']) {\n  width: 100%;\n  max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n}\n\n.viking-field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--viking-space-2);\n}\n\n.viking-field-label-row {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: var(--viking-space-2);\n  margin-bottom: var(--viking-space-0-5);\n}\n\n.viking-field-label {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--viking-space-0-5);\n  font-size: var(--viking-font-size-ui);\n  font-weight: var(--viking-font-weight-bold);\n  color: var(--viking-text);\n  line-height: var(--viking-line-height-snug);\n  cursor: pointer;\n  margin: 0 0 var(--viking-space-1);\n}\n\n.viking-field-required {\n  color: var(--viking-danger-text);\n}\n\n.viking-field-control {\n  min-width: 0;\n}\n\n.viking-field-description,\n.viking-field-error {\n  margin: 0;\n  font-size: var(--viking-font-size-xs);\n  line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-field-description {\n  color: var(--viking-text-muted);\n}\n\n.viking-field-error {\n  color: var(--viking-danger-text);\n}\n\n.viking-sr-only {\n  position: absolute !important;\n  width: var(--viking-space-px, 1px) !important;\n  height: var(--viking-space-px, 1px) !important;\n  padding: 0 !important;\n  margin: calc(-1 * var(--viking-space-px, 1px)) !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  clip-path: inset(50%) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n`;\n\nexport const VIKING_BADGE_STYLES = `\n:host {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--viking-space-0-5);\n  padding: var(--viking-space-0-5) var(--viking-space-1);\n  font-family: var(--viking-font-family);\n  font-size: var(--viking-font-size-xs);\n  font-weight: var(--viking-font-weight-semibold);\n  letter-spacing: var(--viking-letter-spacing-wide);\n  line-height: var(--viking-line-height-snug);\n  border-radius: var(--viking-radius-pill);\n  border: 1px solid var(--viking-border);\n  background: var(--viking-surface-alt);\n  color: var(--viking-text);\n  white-space: nowrap;\n  transition: var(--viking-transition-interactive);\n  box-shadow: var(--viking-shadow-xs);\n}\n\n:host([size='sm']) {\n  padding: 0 var(--viking-space-1);\n  font-size: var(--viking-font-size-2xs);\n}\n\n:host([tone='accent']) {\n  background: var(--viking-accent);\n  border-color: color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));\n  color: var(--viking-accent-content);\n  box-shadow: var(--viking-shadow-sm);\n}\n\n:host([tone='secondary']) {\n  background: color-mix(in srgb, var(--viking-accent-secondary) 16%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-accent-secondary) 55%, transparent);\n  color: var(--viking-accent-secondary);\n}\n\n:host([tone='success']) {\n  background: color-mix(in srgb, var(--viking-success) 16%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-success) 55%, transparent);\n  color: var(--viking-success);\n}\n\n:host([tone='warning']) {\n  background: color-mix(in srgb, var(--viking-warning) 18%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-warning) 55%, transparent);\n  color: var(--viking-warning);\n}\n\n:host([tone='danger']) {\n  background: color-mix(in srgb, var(--viking-danger) 14%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-danger) 50%, transparent);\n  color: var(--viking-danger-text);\n}\n\n:host([tone='info']) {\n  background: color-mix(in srgb, var(--viking-info) 14%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-info) 50%, transparent);\n  color: var(--viking-info);\n}\n\n:host([tone='muted']),\n:host([tone='subtle']) {\n  color: var(--viking-text-muted);\n  background: var(--viking-surface);\n  border-color: var(--viking-border-subtle);\n}\n\n.viking-wc-icon {\n  flex-shrink: 0;\n}\n\n.viking-badge-remove {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--viking-touch-target-comfort, 44px);\n  min-height: var(--viking-touch-target-comfort, 44px);\n  border: none;\n  background: transparent;\n  color: currentColor;\n  cursor: pointer;\n  padding: var(--viking-space-0-5);\n  border-radius: var(--viking-radius-pill);\n  transition: var(--viking-transition-interactive);\n  margin-left: calc(var(--viking-space-0-5) * -1);\n}\n\n.viking-badge-remove:hover {\n  background: color-mix(in srgb, currentColor 12%, transparent);\n}\n\n.viking-badge-remove:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n`;\n\nexport const VIKING_CALLOUT_STYLES = `\n:host {\n  display: block;\n  font-family: var(--viking-font-family);\n}\n\n:host([hidden]) {\n  display: none;\n}\n\n.viking-callout {\n  display: flex;\n  align-items: flex-start;\n  gap: var(--viking-space-2);\n  padding: var(--viking-space-2);\n  border-radius: var(--viking-radius-lg);\n  border: 1px solid var(--viking-border);\n  border-left-width: 3px;\n  background: var(--viking-surface-alt);\n  color: var(--viking-text);\n  font-size: var(--viking-font-size-sm);\n  box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-callout-icon {\n  flex-shrink: 0;\n  margin-top: var(--viking-space-0-5);\n  color: var(--viking-text-muted);\n}\n\n.viking-callout-body {\n  flex: 1;\n  min-width: 0;\n}\n\n.viking-callout-heading {\n  margin: 0 0 var(--viking-space-0-5);\n  font-size: var(--viking-font-size-ui);\n  font-weight: var(--viking-font-weight-bold);\n  color: var(--viking-text);\n}\n\n.viking-callout-text {\n  margin: 0;\n  color: var(--viking-text);\n  line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-callout-close {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--viking-touch-target-comfort, 44px);\n  min-height: var(--viking-touch-target-comfort, 44px);\n  border: none;\n  background: transparent;\n  color: var(--viking-text-muted);\n  cursor: pointer;\n  padding: var(--viking-space-0-5);\n  border-radius: var(--viking-radius);\n  transition: var(--viking-transition-interactive);\n  flex-shrink: 0;\n}\n\n.viking-callout-close:hover {\n  color: var(--viking-text);\n  background: color-mix(in srgb, currentColor 8%, transparent);\n}\n\n.viking-callout-close:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.viking-callout-accent {\n  border-color: var(--viking-accent);\n  border-left-color: var(--viking-accent);\n  background: var(--viking-accent-soft);\n}\n\n.viking-callout-accent .viking-callout-icon {\n  color: var(--viking-accent);\n}\n\n.viking-callout-secondary {\n  border-color: color-mix(in srgb, var(--viking-accent-secondary) 45%, transparent);\n  border-left-color: var(--viking-accent-secondary);\n  background: var(--viking-accent-secondary-soft);\n}\n\n.viking-callout-secondary .viking-callout-icon {\n  color: var(--viking-accent-secondary);\n}\n\n.viking-callout-info {\n  border-color: color-mix(in srgb, var(--viking-info) 45%, transparent);\n  border-left-color: var(--viking-info);\n  background: color-mix(in srgb, var(--viking-info) 10%, var(--viking-surface));\n}\n\n.viking-callout-info .viking-callout-icon {\n  color: var(--viking-info);\n}\n\n.viking-callout-success {\n  border-color: color-mix(in srgb, var(--viking-success) 45%, transparent);\n  border-left-color: var(--viking-success);\n  background: color-mix(in srgb, var(--viking-success) 10%, var(--viking-surface));\n}\n\n.viking-callout-success .viking-callout-icon {\n  color: var(--viking-success);\n}\n\n.viking-callout-warning {\n  border-color: color-mix(in srgb, var(--viking-warning) 45%, transparent);\n  border-left-color: var(--viking-warning);\n  background: color-mix(in srgb, var(--viking-warning) 12%, var(--viking-surface));\n}\n\n.viking-callout-warning .viking-callout-icon {\n  color: var(--viking-warning);\n}\n\n.viking-callout-danger {\n  border-color: var(--viking-danger);\n  border-left-color: var(--viking-danger);\n  background: color-mix(in srgb, var(--viking-crimson-600) 22%, var(--viking-surface));\n  color: var(--viking-white);\n}\n\n.viking-callout-danger .viking-callout-icon {\n  color: var(--viking-crimson-400);\n}\n\n.viking-callout-danger .viking-callout-text {\n  color: var(--viking-white);\n}\n`;\n\nexport const VIKING_SELECT_STYLES = `\n:host {\n  display: block;\n  font-family: var(--viking-font-family);\n  min-width: 0;\n}\n\n:host([width='full']) {\n  width: 100%;\n}\n\n:host([width='half']) {\n  width: 100%;\n  max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n}\n\n.viking-field {\n  display: flex;\n  flex-direction: column;\n  gap: var(--viking-space-1);\n}\n\n.viking-field-label {\n  font-size: var(--viking-font-size-ui);\n  font-weight: var(--viking-font-weight-bold);\n  color: var(--viking-text);\n}\n\n.viking-field-description {\n  margin: 0;\n  font-size: var(--viking-font-size-xs);\n  color: var(--viking-text-muted);\n}\n\n.viking-field-error {\n  margin: 0;\n  font-size: var(--viking-font-size-xs);\n  color: var(--viking-danger);\n}\n\n.viking-sr-only {\n  position: absolute !important;\n  width: var(--viking-space-px, 1px) !important;\n  height: var(--viking-space-px, 1px) !important;\n  padding: 0 !important;\n  margin: calc(-1 * var(--viking-space-px, 1px)) !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  clip-path: inset(50%) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.viking-select-native {\n  width: 100%;\n  min-height: var(--viking-control-height);\n  padding: 0 var(--viking-space-2);\n  border: 1px solid var(--viking-border-strong);\n  border-radius: var(--viking-radius);\n  background: var(--viking-surface);\n  color: var(--viking-text);\n  font-family: inherit;\n  font-size: var(--viking-font-size);\n  cursor: pointer;\n  transition: var(--viking-transition-interactive);\n  box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-select-native:hover:not(:disabled) {\n  border-color: var(--viking-accent-strong);\n  box-shadow: var(--viking-shadow-md);\n}\n\n.viking-select-native:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.viking-select-native:disabled {\n  opacity: var(--viking-state-disabled-opacity);\n  cursor: not-allowed;\n}\n\n.viking-select-native[aria-invalid='true'] {\n  border-color: var(--viking-danger);\n}\n`;\n\nexport const VIKING_MODAL_STYLES = `\n:host {\n  display: contents;\n}\n\n.viking-modal-backdrop:not([open]) {\n  display: none !important;\n  pointer-events: none;\n}\n\n.viking-modal-backdrop {\n  position: fixed;\n  inset: 0;\n  z-index: var(--viking-z-overlay, 10001);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--viking-space-3);\n  background: var(--viking-overlay-backdrop);\n  backdrop-filter: blur(8px);\n  -webkit-backdrop-filter: blur(8px);\n  border: none;\n  animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);\n}\n\n.viking-modal-panel {\n  display: flex;\n  flex-direction: column;\n  gap: var(--viking-space-2);\n  width: min(522px, calc(100vw - var(--viking-space-4)));\n  max-height: calc(100vh - var(--viking-space-6));\n  padding: var(--viking-space-3);\n  border: 1px solid var(--viking-border-strong);\n  border-radius: var(--viking-radius-lg);\n  background: var(--viking-surface);\n  color: var(--viking-text);\n  box-shadow: var(--viking-shadow-lg);\n  font-family: var(--viking-font-family);\n  position: relative;\n  overflow: hidden;\n  animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);\n}\n\n.viking-modal-panel::before {\n  content: '';\n  position: absolute;\n  inset: 0 0 auto;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    transparent,\n    color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n    transparent\n  );\n  pointer-events: none;\n}\n\n.viking-modal-header {\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: var(--viking-space-2);\n  padding-bottom: var(--viking-space-1);\n  border-bottom: 1px solid var(--viking-border-subtle);\n}\n\n.viking-modal-heading {\n  margin: 0;\n  font-size: var(--viking-font-size-md);\n  font-weight: var(--viking-font-weight-bold);\n  letter-spacing: var(--viking-letter-spacing-tight);\n  color: var(--viking-text);\n  line-height: var(--viking-line-height-tight);\n}\n\n.viking-modal-close {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--viking-touch-target-comfort, 44px);\n  min-height: var(--viking-touch-target-comfort, 44px);\n  border: 1px solid transparent;\n  background: transparent;\n  color: var(--viking-text-muted);\n  cursor: pointer;\n  border-radius: var(--viking-radius);\n  transition: var(--viking-transition-interactive);\n  flex-shrink: 0;\n}\n\n.viking-modal-close:hover {\n  color: var(--viking-text);\n  background: var(--viking-accent-soft);\n  border-color: var(--viking-border-subtle);\n}\n\n.viking-modal-close:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.viking-modal-body {\n  overflow-y: auto;\n  color: var(--viking-text-muted);\n  font-size: var(--viking-font-size);\n  line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-modal-footer {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--viking-space-2);\n  justify-content: flex-end;\n  padding-top: var(--viking-space-2);\n  border-top: 1px solid var(--viking-border-subtle);\n}\n\n.viking-modal-footer:empty {\n  display: none;\n}\n\n@keyframes viking-backdrop-in {\n  from { opacity: 0; }\n  to { opacity: 1; }\n}\n\n@keyframes viking-modal-in {\n  from {\n    opacity: 0;\n    transform: translateY(var(--viking-space-1)) scale(0.98);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0) scale(1);\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .viking-modal-backdrop,\n  .viking-modal-panel {\n    animation: none;\n  }\n}\n`;\n\nexport const VIKING_SEARCH_PALETTE_STYLES = `\n:host {\n  display: contents;\n}\n\n.viking-search-palette-backdrop {\n  position: fixed;\n  inset: 0;\n  z-index: var(--viking-z-overlay, 10001);\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n  padding: 10vh var(--viking-space-2) var(--viking-space-2);\n  background: var(--viking-overlay-backdrop);\n  backdrop-filter: blur(8px);\n  -webkit-backdrop-filter: blur(8px);\n  border: none;\n  animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);\n}\n\n.viking-search-palette-backdrop:not([open]) {\n  display: none !important;\n  pointer-events: none;\n}\n\n.viking-search-palette {\n  display: flex;\n  flex-direction: column;\n  background: var(--viking-surface-raised, var(--viking-surface));\n  border: 1px solid var(--viking-border-strong);\n  border-radius: var(--viking-radius-lg);\n  box-shadow: var(--viking-shadow-lg);\n  overflow: hidden;\n  max-width: 600px;\n  width: min(100%, 600px);\n  margin: 0 auto;\n  font-family: var(--viking-font-family);\n  color: var(--viking-text);\n  animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);\n  position: relative;\n  isolation: isolate;\n}\n\n.viking-search-palette::before {\n  content: '';\n  position: absolute;\n  inset: 0 0 auto;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    transparent,\n    color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n    transparent\n  );\n  pointer-events: none;\n  z-index: 1;\n}\n\n.viking-search-palette-header {\n  display: flex;\n  align-items: center;\n  padding: var(--viking-space-2);\n  border-bottom: 1px solid var(--viking-border);\n  gap: var(--viking-space-1);\n  background: color-mix(in srgb, var(--viking-bg) 26%, var(--viking-surface-raised));\n}\n\n.viking-search-palette-header:focus-within {\n  border-bottom-color: var(--viking-accent);\n  box-shadow: inset 0 -2px 0 var(--viking-accent-soft);\n}\n\n.viking-search-palette-icon {\n  color: var(--viking-text-muted);\n  flex-shrink: 0;\n}\n\n.viking-search-palette-input {\n  flex: 1;\n  background: none;\n  border: none;\n  outline: none;\n  font-size: calc(var(--viking-font-size) * 1.05);\n  color: var(--viking-text);\n  font-family: inherit;\n  min-width: 0;\n}\n\n.viking-search-palette-input::placeholder {\n  color: var(--viking-text-muted);\n}\n\n.viking-search-palette-close {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: var(--viking-touch-target-comfort, 44px);\n  min-height: var(--viking-touch-target-comfort, 44px);\n  border: none;\n  background: transparent;\n  color: var(--viking-text-muted);\n  cursor: pointer;\n  padding: var(--viking-space-0-5);\n  border-radius: var(--viking-radius);\n  transition: var(--viking-transition-interactive);\n  flex-shrink: 0;\n}\n\n.viking-search-palette-close:hover {\n  color: var(--viking-text);\n  background: var(--viking-accent-soft);\n}\n\n.viking-search-palette-close:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-palette-body {\n  max-height: 50vh;\n  overflow-y: auto;\n  padding: var(--viking-space-2);\n}\n\n.viking-search-palette-footer {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--viking-space-1);\n  padding: var(--viking-space-1) var(--viking-space-2);\n  border-top: 1px solid var(--viking-border);\n  font-size: calc(var(--viking-font-size) * 0.85);\n  color: var(--viking-text-muted);\n}\n\n.viking-kbd {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 1.5rem;\n  padding: var(--viking-space-0-5) var(--viking-space-1);\n  font-family: inherit;\n  font-size: calc(var(--viking-font-size) * 0.75);\n  border-radius: calc(var(--viking-radius) / 2);\n  border: 1px solid var(--viking-border);\n  background: var(--viking-surface-alt);\n}\n\n.viking-search-results {\n  display: flex;\n  flex-direction: column;\n  gap: var(--viking-space-1);\n}\n\n.viking-search-group-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: var(--viking-space-1);\n  margin: var(--viking-space-1) 0 var(--viking-space-0-5);\n  padding: 0 var(--viking-space-1);\n}\n\n.viking-search-group-header .viking-search-group-label {\n  margin: 0;\n  padding: 0;\n}\n\n.viking-search-group-label {\n  margin: var(--viking-space-1) 0 var(--viking-space-0-5);\n  padding: 0 var(--viking-space-1);\n  font-size: var(--viking-font-size-2xs);\n  font-weight: var(--viking-font-weight-semibold);\n  letter-spacing: var(--viking-letter-spacing-caps);\n  text-transform: uppercase;\n  color: var(--viking-text-muted);\n}\n\n.viking-search-clear-recent {\n  border: none;\n  background: transparent;\n  color: var(--viking-text-muted);\n  font: inherit;\n  font-size: var(--viking-font-size-2xs);\n  letter-spacing: var(--viking-letter-spacing-caps);\n  text-transform: uppercase;\n  cursor: pointer;\n  padding: var(--viking-space-0-5) var(--viking-space-1);\n  border-radius: var(--viking-radius);\n  min-height: var(--viking-touch-target-comfort, 44px);\n}\n\n.viking-search-clear-recent:hover {\n  color: var(--viking-text);\n  background: var(--viking-accent-soft);\n}\n\n.viking-search-clear-recent:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-result {\n  display: flex;\n  align-items: center;\n  min-height: var(--viking-control-height-sm, 36px);\n  padding: var(--viking-space-1) var(--viking-space-2);\n  border-radius: var(--viking-radius);\n  background: var(--viking-surface-alt);\n  border: 1px solid var(--viking-border-subtle);\n  cursor: pointer;\n  transition: var(--viking-transition-interactive);\n  gap: var(--viking-space-1);\n  text-decoration: none;\n  color: inherit;\n}\n\n.viking-search-result:hover,\n.viking-search-result.is-selected {\n  background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface-alt));\n  border-color: color-mix(in srgb, var(--viking-accent) 42%, var(--viking-border-strong));\n  box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-search-result:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-result-title {\n  font-size: var(--viking-font-size-sm);\n  font-weight: var(--viking-font-weight-semibold);\n  color: var(--viking-text);\n}\n\n.viking-search-result-snippet {\n  font-size: var(--viking-font-size-xs);\n  color: var(--viking-text-muted);\n}\n\n.viking-search-empty {\n  padding: var(--viking-space-3);\n  text-align: center;\n  color: var(--viking-text-muted);\n  font-size: var(--viking-font-size-sm);\n}\n\n@keyframes viking-backdrop-in {\n  from { opacity: 0; }\n  to { opacity: 1; }\n}\n\n@keyframes viking-modal-in {\n  from {\n    opacity: 0;\n    transform: translateY(var(--viking-space-1)) scale(0.98);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0) scale(1);\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .viking-search-palette-backdrop,\n  .viking-search-palette {\n    animation: none;\n  }\n}\n`;\n","import { attachShadowStyles } from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon, TONE_ICON_NAMES } from \"../core/icons-inline\";\nimport { VIKING_BADGE_STYLES } from \"../core/styles\";\nimport type { VikingWcTone } from \"../core/types\";\n\nconst TONES = new Set<VikingWcTone>([\n  \"accent\",\n  \"secondary\",\n  \"success\",\n  \"warning\",\n  \"danger\",\n  \"info\",\n  \"muted\",\n  \"subtle\",\n]);\n\n/**\n * Framework-agnostic Viking badge Web Component.\n * Tag: `viking-badge` (legacy alias: `viking-badge-wc`)\n *\n * @attr tone - Semantic color: accent | secondary | success | warning | danger | info | muted\n * @attr size - Compact density: sm\n * @attr icon - Viking icon registry name (pairs with label for a11y)\n * @attr removable - Shows remove control; dispatches `viking-removed`\n *\n * @example\n * <viking-badge-wc tone=\"success\" icon=\"check\">Healthy</viking-badge-wc>\n */\nexport class VikingBadgeWc extends HTMLElementBase {\n  static readonly tag = \"viking-badge\";\n  static readonly legacyTag = \"viking-badge-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\"tone\", \"size\", \"icon\", \"removable\"];\n  }\n\n  private readonly shadow: ShadowRoot;\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_BADGE_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.render();\n    }\n  }\n\n  private get tone(): VikingWcTone | null {\n    const value = (this.getAttribute(\"tone\") ?? \"\") as VikingWcTone;\n    return TONES.has(value) ? value : null;\n  }\n\n  private get size(): \"sm\" | null {\n    return this.getAttribute(\"size\") === \"sm\" ? \"sm\" : null;\n  }\n\n  private get removable(): boolean {\n    return (\n      this.hasAttribute(\"removable\") &&\n      this.getAttribute(\"removable\") !== \"false\"\n    );\n  }\n\n  private readonly onRemove = (): void => {\n    this.dispatchEvent(\n      new CustomEvent(\"viking-removed\", { bubbles: true, composed: true }),\n    );\n  };\n\n  private render(): void {\n    const tone = this.tone;\n    if (tone && this.getAttribute(\"tone\") !== tone) {\n      this.setAttribute(\"tone\", tone);\n    } else if (!tone && this.hasAttribute(\"tone\")) {\n      this.removeAttribute(\"tone\");\n    }\n\n    const size = this.size;\n    if (size && this.getAttribute(\"size\") !== size) {\n      this.setAttribute(\"size\", size);\n    } else if (!size && this.hasAttribute(\"size\")) {\n      this.removeAttribute(\"size\");\n    }\n\n    const iconName =\n      this.getAttribute(\"icon\") ?? (tone ? TONE_ICON_NAMES[tone] : null);\n    const iconMarkup = iconName ? renderInlineIcon(iconName, 16) : \"\";\n\n    this.shadow.innerHTML = `\n      ${iconMarkup}\n      <span part=\"label\"><slot></slot></span>\n      ${this.removable ? `<button type=\"button\" class=\"viking-badge-remove\" part=\"remove\" aria-label=\"Remove\">${renderInlineIcon(\"x\", 14)}</button>` : \"\"}\n    `;\n\n    this.shadow\n      .querySelector(\".viking-badge-remove\")\n      ?.addEventListener(\"click\", this.onRemove);\n  }\n}\n\nexport const registerVikingBadgeWc = (): void => {\n  defineCustomElement(VikingBadgeWc.tag, VikingBadgeWc);\n  defineCustomElementAlias(VikingBadgeWc.legacyTag, VikingBadgeWc);\n};\n","import { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport { defineCustomElement, escapeHtml, HTMLElementBase } from \"../core/dom\";\nimport { VIKING_BUTTON_STYLES } from \"../core/styles\";\n\nconst VARIANTS = new Set([\n  \"outline\",\n  \"primary\",\n  \"secondary\",\n  \"filled\",\n  \"danger\",\n  \"ghost\",\n  \"subtle\",\n]);\n\nconst SIZES = new Set([\"sm\", \"xs\"]);\n\n/**\n * Framework-agnostic Viking button Web Component.\n * Tag: `viking-button-wc` — for static HTML / marketing only.\n * Angular apps must use `viking-button` (native control; never nest this WC).\n *\n * Host is a layout shell only; the single interactive control is the inner\n * `<button>` / `<a>` in shadow DOM. Do not style the host as a button.\n *\n * @example\n * <viking-button-wc variant=\"primary\">Launch</viking-button-wc>\n */\nexport class VikingButtonWc extends HTMLElementBase {\n  /** Reserved for Angular `viking-button` — do not register as a custom element. */\n  static readonly angularTag = \"viking-button\";\n  static readonly tag = \"viking-button-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"variant\",\n      \"size\",\n      \"type\",\n      \"disabled\",\n      \"loading\",\n      \"href\",\n      \"target\",\n      \"aria-label\",\n      \"aria-busy\",\n      \"square\",\n      \"full-width\",\n      \"compact\",\n    ];\n  }\n\n  private readonly shadow: ShadowRoot;\n  private control: HTMLButtonElement | HTMLAnchorElement | null = null;\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_BUTTON_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n    this.addEventListener(\"click\", this.onClick);\n  }\n\n  disconnectedCallback(): void {\n    this.removeEventListener(\"click\", this.onClick);\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.render();\n    }\n  }\n\n  private readonly onClick = (event: Event): void => {\n    if (this.disabled || this.loading) {\n      event.preventDefault();\n      event.stopPropagation();\n      return;\n    }\n    this.dispatchEvent(\n      new CustomEvent(\"viking-press\", {\n        bubbles: true,\n        composed: true,\n        detail: event,\n      }),\n    );\n  };\n\n  private get variant(): string {\n    const value = this.getAttribute(\"variant\") ?? \"outline\";\n    return VARIANTS.has(value) ? value : \"outline\";\n  }\n\n  private get size(): string | null {\n    const value = this.getAttribute(\"size\");\n    return value && SIZES.has(value) ? value : null;\n  }\n\n  private get disabled(): boolean {\n    return readBoolAttr(this, \"disabled\");\n  }\n\n  private get loading(): boolean {\n    return readBoolAttr(this, \"loading\");\n  }\n\n  private get square(): boolean {\n    return readBoolAttr(this, \"square\");\n  }\n\n  private render(): void {\n    const href = this.getAttribute(\"href\");\n    const isLink = Boolean(href);\n    const tag = isLink ? \"a\" : \"button\";\n    // Do not set role on host; the inner native <button> or <a> provides the semantics.\n    // Setting role here caused \"button in button\" perception with the Angular wrapper and accessibility double announcement.\n\n    const classes = [\n      \"viking-btn\",\n      `viking-btn-${this.variant}`,\n      this.size ? `viking-btn-${this.size}` : \"\",\n      this.square ? \"viking-btn-square\" : \"\",\n    ]\n      .filter(Boolean)\n      .join(\" \");\n\n    const label = this.getAttribute(\"aria-label\") ?? \"\";\n    const busy =\n      this.getAttribute(\"aria-busy\") === \"true\" || this.loading ? \"true\" : null;\n    const type = escapeHtml(this.getAttribute(\"type\") ?? \"button\");\n    const hrefValue = href ? escapeHtml(href) : \"\";\n    const target = this.getAttribute(\"target\");\n    const safeTarget = target ? escapeHtml(target) : \"\";\n\n    // type stays on the native control only — never leave type=\"button\" on the host,\n    // which reads as a second button to DevTools / a11y scanners.\n    if (this.hasAttribute(\"type\") && !isLink) {\n      this.removeAttribute(\"type\");\n    }\n\n    this.shadow.innerHTML = `\n      <${tag}\n        class=\"${classes}\"\n        part=\"control\"\n        ${isLink ? `href=\"${hrefValue}\"` : `type=\"${type}\"`}\n        ${isLink && safeTarget ? `target=\"${safeTarget}\"` : \"\"}\n        ${isLink && target === \"_blank\" ? 'rel=\"noopener noreferrer\"' : \"\"}\n        ${this.disabled || this.loading ? \"disabled\" : \"\"}\n        ${label ? `aria-label=\"${escapeHtml(label)}\"` : \"\"}\n        ${busy ? `aria-busy=\"${busy}\"` : \"\"}\n        ${this.disabled && isLink ? 'aria-disabled=\"true\" tabindex=\"-1\"' : \"\"}\n      >\n        ${this.loading ? '<span class=\"viking-btn-spinner\" aria-hidden=\"true\"></span>' : \"\"}\n        <span class=\"viking-btn-label\" part=\"label\"><slot></slot></span>\n      </${tag}>\n    `;\n\n    this.control = this.shadow.querySelector(tag);\n  }\n}\n\nexport const registerVikingButtonWc = (): void => {\n  defineCustomElement(VikingButtonWc.tag, VikingButtonWc);\n};\n","import { attachShadowStyles } from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n  HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon, TONE_ICON_NAMES } from \"../core/icons-inline\";\nimport { VIKING_CALLOUT_STYLES } from \"../core/styles\";\nimport type { VikingWcTone } from \"../core/types\";\n\nconst TONES = new Set<VikingWcTone>([\n  \"accent\",\n  \"secondary\",\n  \"success\",\n  \"warning\",\n  \"danger\",\n  \"info\",\n  \"muted\",\n]);\n\n/**\n * Framework-agnostic Viking callout Web Component.\n * Tag: `viking-callout` (legacy alias: `viking-callout-wc`)\n *\n * @attr tone - Semantic tone (default: info)\n * @attr heading - Bold callout title\n * @attr icon - Override leading icon from the Viking registry\n * @attr dismissible - Shows dismiss control; dispatches `viking-close`\n *\n * @example\n * <viking-callout-wc tone=\"warning\" heading=\"Degraded worker\">Lag exceeds 3s.</viking-callout-wc>\n */\nexport class VikingCalloutWc extends HTMLElementBase {\n  static readonly tag = \"viking-callout\";\n  static readonly legacyTag = \"viking-callout-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\"tone\", \"heading\", \"icon\", \"dismissible\", \"hidden\"];\n  }\n\n  private readonly shadow: ShadowRoot;\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_CALLOUT_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.render();\n    }\n  }\n\n  private get tone(): VikingWcTone {\n    const value = (this.getAttribute(\"tone\") ?? \"info\") as VikingWcTone;\n    return TONES.has(value) ? value : \"info\";\n  }\n\n  private get dismissible(): boolean {\n    return (\n      this.hasAttribute(\"dismissible\") &&\n      this.getAttribute(\"dismissible\") !== \"false\"\n    );\n  }\n\n  private readonly onDismiss = (): void => {\n    this.setAttribute(\"hidden\", \"\");\n    this.dispatchEvent(\n      new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n    );\n  };\n\n  private render(): void {\n    const heading = this.getAttribute(\"heading\") ?? \"\";\n    const iconName =\n      this.getAttribute(\"icon\") ?? TONE_ICON_NAMES[this.tone] ?? \"info\";\n    const iconMarkup = renderInlineIcon(iconName, 22, \"viking-callout-icon\");\n\n    this.shadow.innerHTML = `\n      <div class=\"viking-callout viking-callout-${this.tone}\" role=\"note\" part=\"surface\">\n        <span part=\"icon\">${iconMarkup}</span>\n        <div class=\"viking-callout-body\" part=\"body\">\n          ${heading ? `<p class=\"viking-callout-heading\" part=\"heading\">${escapeHtml(heading)}</p>` : \"\"}\n          <div class=\"viking-callout-text\" part=\"text\"><slot></slot></div>\n        </div>\n        ${this.dismissible ? `<button type=\"button\" class=\"viking-callout-close\" part=\"close\" aria-label=\"Dismiss\">${renderInlineIcon(\"x\", 18)}</button>` : \"\"}\n      </div>\n    `;\n\n    this.shadow\n      .querySelector(\".viking-callout-close\")\n      ?.addEventListener(\"click\", this.onDismiss);\n  }\n}\n\nexport const registerVikingCalloutWc = (): void => {\n  defineCustomElement(VikingCalloutWc.tag, VikingCalloutWc);\n  defineCustomElementAlias(VikingCalloutWc.legacyTag, VikingCalloutWc);\n};\n","import {\n  defineCustomElement,\n  defineCustomElementAlias,\n  HTMLElementBase,\n} from \"../core/dom\";\n\n/**\n * Framework-agnostic Viking card Web Component (light DOM — inherits global viking-card CSS).\n * Tag: `viking-card` (legacy alias: `viking-card-wc`)\n *\n * Uses light DOM so slotted content inherits `viking-card`, `viking-card-header`, and related\n * classes from the synced static CSS bundle.\n *\n * @attr compact - Applies `viking-card-compact` padding\n * @attr interactive - Hover lift for clickable cards\n * @attr title - Accessible name when the card is a landmark region\n *\n * @example\n * <viking-card-wc compact title=\"Event throughput\">\n *   <div class=\"viking-card-header\">\n *     <h3 class=\"viking-heading viking-heading-sm\">Event throughput</h3>\n *   </div>\n *   <p class=\"viking-text-muted\">8.2K events/sec</p>\n * </viking-card-wc>\n */\nexport class VikingCardWc extends HTMLElementBase {\n  static readonly tag = \"viking-card\";\n  static readonly legacyTag = \"viking-card-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\"compact\", \"interactive\", \"title\", \"loading\"];\n  }\n\n  connectedCallback(): void {\n    this.syncClasses();\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.syncClasses();\n    }\n  }\n\n  private syncClasses(): void {\n    this.classList.add(\"viking-card\");\n    this.classList.toggle(\"viking-card-compact\", this.hasAttribute(\"compact\"));\n    this.classList.toggle(\n      \"viking-card-interactive\",\n      this.hasAttribute(\"interactive\"),\n    );\n    this.classList.toggle(\"viking-card-loading\", this.hasAttribute(\"loading\"));\n\n    const title = this.getAttribute(\"title\");\n    if (title) {\n      this.setAttribute(\"role\", \"region\");\n      this.setAttribute(\"aria-label\", title);\n    } else {\n      this.removeAttribute(\"role\");\n      this.removeAttribute(\"aria-label\");\n    }\n  }\n}\n\nexport const registerVikingCardWc = (): void => {\n  defineCustomElement(VikingCardWc.tag, VikingCardWc);\n  defineCustomElementAlias(VikingCardWc.legacyTag, VikingCardWc);\n};\n","import { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n  HTMLElementBase,\n  vikingWcUid,\n} from \"../core/dom\";\nimport { VIKING_FIELD_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic Viking field stack Web Component.\n * Tag: `viking-field` (legacy alias: `viking-field-wc`)\n *\n * Description/error live in light DOM so slotted controls can reference them\n * via aria-describedby (shadow ids are not reachable from light-DOM controls).\n *\n * @attr label - Visible field label\n * @attr description - Helper text below the control\n * @attr error - Validation message; sets aria-invalid on the slotted control\n * @attr required - Adds a non-color-only required marker\n * @attr width - full | half\n *\n * @slot default - Form control, usually `viking-input`, `viking-select`, or native input/select\n */\nexport class VikingFieldWc extends HTMLElementBase {\n  static readonly tag = \"viking-field\";\n  static readonly legacyTag = \"viking-field-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\"label\", \"description\", \"error\", \"required\", \"width\"];\n  }\n\n  private readonly shadow: ShadowRoot;\n  private readonly labelId = vikingWcUid(\"viking-field-label\");\n  private readonly descriptionId = vikingWcUid(\"viking-field-description\");\n  private readonly errorId = vikingWcUid(\"viking-field-error\");\n  private slotEl: HTMLSlotElement | null = null;\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_FIELD_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n    this.syncLightMessages();\n    this.syncControlA11y();\n  }\n\n  disconnectedCallback(): void {\n    this.slotEl?.removeEventListener(\"slotchange\", this.onSlotChange);\n    this.clearLightMessages();\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.render();\n      this.syncLightMessages();\n      this.syncControlA11y();\n    }\n  }\n\n  private get control(): HTMLElement | null {\n    const assigned = this.slotEl?.assignedElements({ flatten: true }) ?? [];\n    return (\n      assigned.find(\n        (node): node is HTMLElement => node instanceof HTMLElement,\n      ) ?? null\n    );\n  }\n\n  private readonly focusControl = (): void => {\n    const control = this.control as HTMLElement & { focus?: () => void };\n    control?.focus?.();\n  };\n\n  private readonly onSlotChange = (): void => {\n    this.syncControlA11y();\n  };\n\n  private clearLightMessages(): void {\n    this.querySelectorAll(\":scope > [data-viking-field-msg]\").forEach((node) =>\n      node.remove(),\n    );\n  }\n\n  /**\n   * Light-DOM messages so aria-describedby ids resolve for slotted controls.\n   * Visual chrome comes from suite/viking global `.viking-field-*` classes.\n   */\n  private syncLightMessages(): void {\n    this.clearLightMessages();\n    const description = this.getAttribute(\"description\") ?? \"\";\n    const error = this.getAttribute(\"error\") ?? \"\";\n\n    if (description) {\n      const p = document.createElement(\"p\");\n      p.id = this.descriptionId;\n      p.className = \"viking-field-description suite-field-description\";\n      p.setAttribute(\"data-viking-field-msg\", \"description\");\n      p.textContent = description;\n      this.append(p);\n    }\n\n    if (error) {\n      const p = document.createElement(\"p\");\n      p.id = this.errorId;\n      p.className = \"viking-field-error suite-field-error\";\n      p.setAttribute(\"data-viking-field-msg\", \"error\");\n      p.setAttribute(\"role\", \"alert\");\n      p.setAttribute(\"aria-live\", \"assertive\");\n      p.setAttribute(\"aria-atomic\", \"true\");\n      const prefix = document.createElement(\"span\");\n      prefix.className = \"suite-sr-only viking-sr-only\";\n      prefix.textContent = \"Error: \";\n      p.append(prefix, document.createTextNode(error));\n      this.append(p);\n    }\n  }\n\n  private readonly syncControlA11y = (): void => {\n    const control = this.control;\n    if (!control) {\n      return;\n    }\n\n    const description = this.getAttribute(\"description\") ?? \"\";\n    const error = this.getAttribute(\"error\") ?? \"\";\n    const describedBy = [\n      description && this.descriptionId,\n      error && this.errorId,\n    ]\n      .filter(Boolean)\n      .join(\" \");\n\n    const label = this.getAttribute(\"label\") ?? \"\";\n    if (label && !control.hasAttribute(\"aria-label\")) {\n      control.setAttribute(\"aria-label\", label);\n    }\n\n    if (describedBy) {\n      control.setAttribute(\"aria-describedby\", describedBy);\n    } else {\n      control.removeAttribute(\"aria-describedby\");\n    }\n    control.removeAttribute(\"aria-description\");\n\n    if (error) {\n      control.setAttribute(\"aria-invalid\", \"true\");\n      control.setAttribute(\"error\", error);\n    } else {\n      control.removeAttribute(\"aria-invalid\");\n      control.removeAttribute(\"error\");\n    }\n\n    if (readBoolAttr(this, \"required\")) {\n      control.setAttribute(\"required\", \"\");\n      control.setAttribute(\"aria-required\", \"true\");\n    }\n  };\n\n  private render(): void {\n    const label = this.getAttribute(\"label\") ?? \"\";\n    const required = readBoolAttr(this, \"required\");\n    const hasError = !!this.getAttribute(\"error\");\n\n    this.shadow.innerHTML = `\n      <div class=\"viking-field${hasError ? \" viking-field-invalid\" : \"\"}\" part=\"field\" role=\"group\" aria-labelledby=\"${this.labelId}\">\n        ${\n          label\n            ? `<div class=\"viking-field-label-row\" part=\"label-row\">\n                <span class=\"viking-field-label\" part=\"label\" id=\"${this.labelId}\">\n                  <span>${escapeHtml(label)}</span>\n                  ${required ? `<span class=\"viking-field-required\" aria-label=\"required\">*</span>` : \"\"}\n                </span>\n              </div>`\n            : `<span id=\"${this.labelId}\" hidden>Form field</span>`\n        }\n        <div class=\"viking-field-control\" part=\"control\"><slot></slot></div>\n      </div>\n    `;\n\n    this.slotEl = this.shadow.querySelector(\"slot\");\n    this.slotEl?.addEventListener(\"slotchange\", this.onSlotChange);\n    this.shadow\n      .querySelector(\".viking-field-label\")\n      ?.addEventListener(\"click\", this.focusControl);\n  }\n}\n\nexport const registerVikingFieldWc = (): void => {\n  defineCustomElement(VikingFieldWc.tag, VikingFieldWc);\n  defineCustomElementAlias(VikingFieldWc.legacyTag, VikingFieldWc);\n};\n","import {\n  attachElementInternals,\n  attachShadowStyles,\n  readBoolAttr,\n  setFormValue,\n} from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n  HTMLElementBase,\n} from \"../core/dom\";\nimport { VIKING_INPUT_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic Viking input Web Component with form association.\n * Tag: `viking-input` (legacy alias: `viking-input-wc`)\n *\n * @example\n * <viking-input placeholder=\"Email\" name=\"email\" type=\"email\"></viking-input>\n */\nexport class VikingInputWc extends HTMLElementBase {\n  static readonly formAssociated = true;\n  static readonly tag = \"viking-input\";\n  static readonly legacyTag = \"viking-input-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"type\",\n      \"placeholder\",\n      \"value\",\n      \"disabled\",\n      \"loading\",\n      \"clearable\",\n      \"name\",\n      \"autocomplete\",\n      \"required\",\n      \"readonly\",\n      \"minlength\",\n      \"maxlength\",\n      \"pattern\",\n      \"error\",\n      \"aria-label\",\n      \"aria-describedby\",\n      \"aria-invalid\",\n      \"aria-required\",\n      \"bare\",\n    ];\n  }\n\n  private readonly shadow: ShadowRoot;\n  private readonly internals: ElementInternals | null;\n  private input: HTMLInputElement | null = null;\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    this.internals = attachElementInternals(this);\n    attachShadowStyles(this.shadow, VIKING_INPUT_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n    this.syncFormValue();\n  }\n\n  attributeChangedCallback(name: string): void {\n    if (!this.isConnected) {\n      return;\n    }\n    if (name === \"value\" && this.input) {\n      this.input.value = this.getAttribute(\"value\") ?? \"\";\n      this.syncFormValue();\n      return;\n    }\n    this.render();\n  }\n\n  get value(): string {\n    return this.input?.value ?? this.getAttribute(\"value\") ?? \"\";\n  }\n\n  set value(next: string) {\n    const normalized = next ?? \"\";\n    if (this.getAttribute(\"value\") !== normalized) {\n      this.setAttribute(\"value\", normalized);\n    }\n    if (this.input && this.input.value !== normalized) {\n      this.input.value = normalized;\n    }\n    this.syncFormValue();\n  }\n\n  private get disabled(): boolean {\n    return readBoolAttr(this, \"disabled\");\n  }\n\n  private get loading(): boolean {\n    return readBoolAttr(this, \"loading\");\n  }\n\n  private get clearable(): boolean {\n    return readBoolAttr(this, \"clearable\");\n  }\n\n  private get bare(): boolean {\n    return readBoolAttr(this, \"bare\");\n  }\n\n  private readonly onInput = (): void => {\n    const next = this.input?.value ?? \"\";\n    this.syncFormValue();\n    this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true }));\n    this.dispatchEvent(new Event(\"change\", { bubbles: true, composed: true }));\n    if (this.getAttribute(\"value\") !== next) {\n      this.setAttribute(\"value\", next);\n    }\n  };\n\n  private readonly onBlur = (): void => {\n    this.dispatchEvent(new Event(\"blur\", { bubbles: true, composed: true }));\n  };\n\n  private readonly onClear = (): void => {\n    this.value = \"\";\n    this.input?.focus();\n    this.dispatchEvent(\n      new CustomEvent(\"viking-cleared\", { bubbles: true, composed: true }),\n    );\n    this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true }));\n  };\n\n  private syncFormValue(): void {\n    setFormValue(this.internals, this.value);\n  }\n\n  private render(): void {\n    const shellClasses = [\n      \"viking-input-shell\",\n      this.disabled ? \"viking-disabled\" : \"\",\n      this.loading ? \"viking-loading\" : \"\",\n    ]\n      .filter(Boolean)\n      .join(\" \");\n\n    const type = escapeHtml(this.getAttribute(\"type\") ?? \"text\");\n    const rawPlaceholder = this.getAttribute(\"placeholder\") ?? \"\";\n    const placeholder = escapeHtml(rawPlaceholder);\n    const value = escapeHtml(this.getAttribute(\"value\") ?? \"\");\n    const name = escapeHtml(this.getAttribute(\"name\") ?? \"\");\n    const label =\n      this.getAttribute(\"aria-label\") ?? (rawPlaceholder || \"Text input\");\n    const autocomplete = escapeHtml(this.getAttribute(\"autocomplete\") ?? \"\");\n    const describedBy = escapeHtml(this.getAttribute(\"aria-describedby\") ?? \"\");\n    const minLength = escapeHtml(this.getAttribute(\"minlength\") ?? \"\");\n    const maxLength = escapeHtml(this.getAttribute(\"maxlength\") ?? \"\");\n    const pattern = escapeHtml(this.getAttribute(\"pattern\") ?? \"\");\n    const invalid =\n      this.hasAttribute(\"error\") ||\n      this.getAttribute(\"aria-invalid\") === \"true\";\n    const required =\n      readBoolAttr(this, \"required\") ||\n      this.getAttribute(\"aria-required\") === \"true\";\n    const readonly = readBoolAttr(this, \"readonly\");\n    const descriptionFallback = this.resolveDescribedByText();\n    const showClear =\n      this.clearable && value.length > 0 && !this.loading && !this.bare;\n    // name + autocomplete on the native input enable password managers / SMS OTP autofill.\n    // aria-description bridges light-DOM message ids into the shadow input when\n    // cross-root aria-describedby resolution is unavailable.\n    const nativeAttrs = `\n      ${name ? `name=\"${name}\"` : \"\"}\n      ${this.disabled || this.loading ? \"disabled\" : \"\"}\n      ${required ? \"required\" : \"\"}\n      ${readonly ? \"readonly\" : \"\"}\n      aria-label=\"${escapeHtml(label)}\"\n      ${describedBy ? `aria-describedby=\"${describedBy}\"` : \"\"}\n      ${descriptionFallback ? `aria-description=\"${escapeHtml(descriptionFallback)}\"` : \"\"}\n      ${this.loading ? 'aria-busy=\"true\"' : \"\"}\n      ${invalid ? 'aria-invalid=\"true\"' : \"\"}\n      ${autocomplete ? `autocomplete=\"${autocomplete}\"` : \"\"}\n      ${minLength ? `minlength=\"${minLength}\"` : \"\"}\n      ${maxLength ? `maxlength=\"${maxLength}\"` : \"\"}\n      ${pattern ? `pattern=\"${pattern}\"` : \"\"}\n    `;\n\n    if (this.bare) {\n      this.shadow.innerHTML = `\n        <input\n          part=\"input\"\n          class=\"viking-input-native\"\n          type=\"${type}\"\n          placeholder=\"${placeholder}\"\n          value=\"${value}\"\n          ${nativeAttrs}\n        />\n      `;\n    } else {\n      this.shadow.innerHTML = `\n        <div class=\"${shellClasses}\" part=\"shell\">\n          <slot name=\"leading\"></slot>\n          <input\n            part=\"input\"\n            type=\"${type}\"\n            placeholder=\"${placeholder}\"\n            value=\"${value}\"\n            ${nativeAttrs}\n          />\n          ${this.loading ? '<span class=\"viking-input-spinner\" aria-hidden=\"true\"></span>' : \"\"}\n          ${showClear ? '<button type=\"button\" class=\"viking-input-clear\" aria-label=\"Clear input\" part=\"clear\">×</button>' : \"\"}\n          <slot name=\"trailing\"></slot>\n        </div>\n      `;\n    }\n\n    this.input = this.shadow.querySelector(\"input\");\n    this.input?.addEventListener(\"input\", this.onInput);\n    this.input?.addEventListener(\"blur\", this.onBlur);\n\n    const clearBtn = this.shadow.querySelector(\".viking-input-clear\");\n    clearBtn?.addEventListener(\"click\", this.onClear);\n    this.syncInternalsAria();\n  }\n\n  /** Resolve light-DOM description/error text for shadow-input fallback. */\n  private resolveDescribedByText(): string {\n    const raw = this.getAttribute(\"aria-describedby\") ?? \"\";\n    if (!raw.trim()) return \"\";\n    const root =\n      this.getRootNode() instanceof Document\n        ? (this.getRootNode() as Document)\n        : document;\n    return raw\n      .split(/\\s+/)\n      .map((id) => root.getElementById(id)?.textContent?.trim() ?? \"\")\n      .filter(Boolean)\n      .join(\" \");\n  }\n\n  /** Prefer ElementInternals ARIA reflection when the engine supports it. */\n  private syncInternalsAria(): void {\n    if (!this.internals) return;\n    const internals = this.internals as ElementInternals & {\n      ariaInvalid?: string;\n      ariaDescribedByElements?: Element[];\n    };\n    const invalid =\n      this.hasAttribute(\"error\") ||\n      this.getAttribute(\"aria-invalid\") === \"true\";\n    if (\"ariaInvalid\" in internals) {\n      internals.ariaInvalid = invalid ? \"true\" : \"false\";\n    }\n    if (!(\"ariaDescribedByElements\" in internals)) return;\n    const raw = this.getAttribute(\"aria-describedby\") ?? \"\";\n    const root =\n      this.getRootNode() instanceof Document\n        ? (this.getRootNode() as Document)\n        : document;\n    const els = raw\n      .split(/\\s+/)\n      .map((id) => root.getElementById(id))\n      .filter((el): el is HTMLElement => el instanceof HTMLElement);\n    try {\n      internals.ariaDescribedByElements = els;\n    } catch {\n      /* older engines */\n    }\n  }\n}\n\nexport const registerVikingInputWc = (): void => {\n  defineCustomElement(VikingInputWc.tag, VikingInputWc);\n  defineCustomElementAlias(VikingInputWc.legacyTag, VikingInputWc);\n};\n\n/** Register only the internal wrapper tag used by Angular components. */\nexport const registerVikingInputWcElement = (): void => {\n  defineCustomElementAlias(VikingInputWc.legacyTag, VikingInputWc);\n};\n","import {\n  attachShadowStyles,\n  closeModalDialog,\n  showModalDialog,\n} from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n  HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport { VIKING_MODAL_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic modal Web Component using native `<dialog>` semantics.\n * Tag: `viking-modal-wc` (Angular reserves `viking-modal`; alias: `viking-dialog`)\n *\n * @attr open - When present, shows the modal\n * @attr title - Dialog title for aria-label / heading\n * @attr dismissible - Allow Escape and backdrop click to close (default: true)\n *\n * @slot default - Modal body content\n * @slot actions - Footer action buttons\n *\n * @method openModal() - Programmatically open\n * @method closeModal() - Programmatically close\n *\n * @event viking-close - Fired when the dialog closes\n *\n * @example\n * <viking-modal-wc title=\"Confirm deploy\">\n *   <p>Push v2.0.0 to production?</p>\n *   <viking-button-wc slot=\"actions\" variant=\"primary\">Deploy</viking-button-wc>\n * </viking-modal-wc>\n */\nexport class VikingModalWc extends HTMLElementBase {\n  /** Reserved for Angular `viking-modal` — do not register as a custom element. */\n  static readonly angularTag = \"viking-modal\";\n  static readonly tag = \"viking-modal-wc\";\n  static readonly dialogTag = \"viking-dialog\";\n\n  static get observedAttributes(): string[] {\n    return [\"open\", \"title\", \"dismissible\"];\n  }\n\n  private readonly shadow: ShadowRoot;\n  private dialogEl: HTMLDialogElement | null = null;\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_MODAL_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n    this.syncOpen();\n    this.dialogEl?.addEventListener(\"close\", this.onClose);\n    this.dialogEl?.addEventListener(\"click\", this.onBackdropClick);\n  }\n\n  disconnectedCallback(): void {\n    this.dialogEl?.removeEventListener(\"close\", this.onClose);\n    this.dialogEl?.removeEventListener(\"click\", this.onBackdropClick);\n  }\n\n  attributeChangedCallback(name: string): void {\n    if (!this.isConnected) {\n      return;\n    }\n    if (name === \"open\") {\n      this.syncOpen();\n      return;\n    }\n    if (name === \"title\") {\n      this.updateTitle();\n      return;\n    }\n    if (name === \"dismissible\") {\n      this.render();\n      this.syncOpen();\n    }\n  }\n\n  /** Opens the modal dialog. */\n  openModal(): void {\n    this.setAttribute(\"open\", \"\");\n    this.syncOpen();\n  }\n\n  /** Closes the modal dialog. */\n  closeModal(): void {\n    this.removeAttribute(\"open\");\n    closeModalDialog(this.dialogEl);\n  }\n\n  /** @deprecated Use openModal() */\n  open(): void {\n    this.openModal();\n  }\n\n  /** @deprecated Use closeModal() */\n  close(): void {\n    this.closeModal();\n  }\n\n  private get dismissible(): boolean {\n    return this.getAttribute(\"dismissible\") !== \"false\";\n  }\n\n  private readonly onClose = (): void => {\n    this.removeAttribute(\"open\");\n    this.dispatchEvent(\n      new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n    );\n  };\n\n  private readonly onBackdropClick = (event: MouseEvent): void => {\n    if (!this.dismissible) {\n      return;\n    }\n    if (event.target === this.dialogEl) {\n      this.closeModal();\n    }\n  };\n\n  private syncOpen(): void {\n    if (!this.dialogEl) {\n      return;\n    }\n    const shouldOpen = this.hasAttribute(\"open\");\n    if (shouldOpen && !this.dialogEl.open) {\n      showModalDialog(this.dialogEl);\n      queueMicrotask(() => {\n        const closeBtn = this.shadow.querySelector<HTMLButtonElement>(\n          \".viking-modal-close\",\n        );\n        (closeBtn ?? this.dialogEl)?.focus();\n      });\n    } else if (!shouldOpen && this.dialogEl.open) {\n      closeModalDialog(this.dialogEl);\n    }\n  }\n\n  private updateTitle(): void {\n    const title = this.getAttribute(\"title\") ?? \"Dialog\";\n    const heading = this.shadow.querySelector(\".viking-modal-heading\");\n    if (heading) {\n      heading.textContent = title;\n    }\n    this.dialogEl?.setAttribute(\"aria-label\", title);\n  }\n\n  private render(): void {\n    const title = this.getAttribute(\"title\") ?? \"Dialog\";\n\n    this.shadow.innerHTML = `\n      <dialog class=\"viking-modal-backdrop\" aria-label=\"${escapeHtml(title)}\" aria-modal=\"true\">\n        <div class=\"viking-modal-panel\" part=\"panel\" role=\"document\">\n          <header class=\"viking-modal-header\" part=\"header\">\n            <h2 class=\"viking-modal-heading\" part=\"title\">${escapeHtml(title)}</h2>\n            ${this.dismissible ? `<button type=\"button\" class=\"viking-modal-close\" part=\"close\" aria-label=\"Close dialog\">${renderInlineIcon(\"x\", 20)}</button>` : \"\"}\n          </header>\n          <div class=\"viking-modal-body\" part=\"body\"><slot></slot></div>\n          <footer class=\"viking-modal-footer\" part=\"footer\"><slot name=\"actions\"></slot></footer>\n        </div>\n      </dialog>\n    `;\n\n    this.dialogEl = this.shadow.querySelector(\"dialog\");\n    this.shadow\n      .querySelector(\".viking-modal-close\")\n      ?.addEventListener(\"click\", () => this.closeModal());\n    this.dialogEl?.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Escape\" && this.dismissible) {\n        event.preventDefault();\n        this.closeModal();\n      }\n    });\n  }\n}\n\nexport const registerVikingModalWc = (): void => {\n  defineCustomElement(VikingModalWc.tag, VikingModalWc);\n  defineCustomElementAlias(VikingModalWc.dialogTag, VikingModalWc);\n};\n","/**\n * Fast ranked matching for the suite command palette.\n * Prefer title prefix / exact hits over keyword / snippet noise.\n */\n\nimport type { VikingSearchPaletteItem } from \"../core/types\";\n\nconst MAX_RESULTS = 48;\n\n/** Score one item against a query (0 = no match). */\nexport function scoreSearchItem(\n  item: VikingSearchPaletteItem,\n  query: string,\n): number {\n  const q = query.trim().toLowerCase();\n  if (!q) {\n    return 0;\n  }\n  const title = item.title.toLowerCase();\n  if (title === q) {\n    return 100;\n  }\n  if (title.startsWith(q)) {\n    return 80;\n  }\n  if (title.includes(q)) {\n    return 60;\n  }\n\n  const keywords = (item.keywords ?? []).join(\" \").toLowerCase();\n  if (keywords.includes(q)) {\n    return 45;\n  }\n\n  const tokens = q.split(/\\s+/).filter(Boolean);\n  if (tokens.length > 1) {\n    let hits = 0;\n    for (const token of tokens) {\n      if (\n        title.includes(token) ||\n        keywords.includes(token) ||\n        (item.snippet ?? \"\").toLowerCase().includes(token)\n      ) {\n        hits += 1;\n      }\n    }\n    if (hits === tokens.length) {\n      return 50;\n    }\n    if (hits > 0) {\n      return 12 * hits;\n    }\n  }\n\n  const snippet = (item.snippet ?? \"\").toLowerCase();\n  if (snippet.includes(q)) {\n    return 25;\n  }\n  const group = (item.group ?? \"\").toLowerCase();\n  if (group.includes(q)) {\n    return 15;\n  }\n  const href = item.href.toLowerCase();\n  if (href.includes(q)) {\n    return 10;\n  }\n  return 0;\n}\n\n/** Filter + rank items; empty query returns the curated list unchanged (caller may inject recents). */\nexport function rankSearchItems(\n  items: readonly VikingSearchPaletteItem[],\n  query: string,\n  options?: { readonly limit?: number },\n): VikingSearchPaletteItem[] {\n  const limit = options?.limit ?? MAX_RESULTS;\n  const q = query.trim();\n  if (!q) {\n    return items.slice(0, Math.max(0, limit));\n  }\n  return items\n    .map((item) => ({ item, score: scoreSearchItem(item, q) }))\n    .filter((row) => row.score > 0)\n    .sort(\n      (a, b) => b.score - a.score || a.item.title.localeCompare(b.item.title),\n    )\n    .slice(0, Math.max(0, limit))\n    .map((row) => row.item);\n}\n","import { readDemlWidgets } from \"../../core/deml-widgets\";\nimport {\n  attachShadowStyles,\n  readBoolAttr,\n  closeModalDialog,\n  showModalDialog,\n} from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n  HTMLElementBase,\n  modKeyLabel,\n  vikingWcUid,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport { VIKING_SEARCH_PALETTE_STYLES } from \"../core/styles\";\nimport type { VikingSearchPaletteItem } from \"../core/types\";\nimport { getDefaultCommandHistory } from \"../../core/command-history\";\nimport { rankSearchItems } from \"./rank-search\";\nimport {\n  DEFAULT_RECENT_STORAGE_KEY,\n  clearRecentSearches,\n  pushRecentSearch,\n  readRecentSearches,\n  recentSearchesAsItems,\n  restoreRecentSearches,\n} from \"./recent-searches\";\n\nexport type { VikingSearchPaletteItem };\n\nconst RECENT_HREF_PREFIX = \"#viking-recent:\";\n\nconst parseItems = (el: HTMLElement): VikingSearchPaletteItem[] => {\n  const raw = el.getAttribute(\"items\");\n  if (!raw) {\n    return [];\n  }\n  try {\n    const parsed = JSON.parse(raw) as VikingSearchPaletteItem[];\n    return Array.isArray(parsed) ? parsed : [];\n  } catch {\n    return [];\n  }\n};\n\nconst recentStorageKey = (el: HTMLElement): string =>\n  el.getAttribute(\"recent-storage-key\")?.trim() || DEFAULT_RECENT_STORAGE_KEY;\n\nconst resolveVisibleItems = (\n  el: HTMLElement,\n  query: string,\n): VikingSearchPaletteItem[] => {\n  const curated = parseItems(el);\n  const q = query.trim();\n  if (q) {\n    return rankSearchItems(curated, q);\n  }\n  const recent = recentSearchesAsItems(\n    readRecentSearches(recentStorageKey(el)),\n  );\n  // Recents first, then curated platform links (dedupe by href+title).\n  const seen = new Set(recent.map((item) => `${item.title}:${item.href}`));\n  const rest = curated.filter((item) => {\n    const key = `${item.title}:${item.href}`;\n    if (seen.has(key)) {\n      return false;\n    }\n    seen.add(key);\n    return true;\n  });\n  return [...recent, ...rest];\n};\n\nconst groupItems = (\n  items: VikingSearchPaletteItem[],\n): { group: string | null; items: VikingSearchPaletteItem[] }[] => {\n  const groups = new Map<string | null, VikingSearchPaletteItem[]>();\n  items.forEach((item) => {\n    const key = item.group ?? null;\n    const bucket = groups.get(key) ?? [];\n    bucket.push(item);\n    groups.set(key, bucket);\n  });\n  return Array.from(groups.entries()).map(([group, grouped]) => ({\n    group,\n    items: grouped,\n  }));\n};\n\n/**\n * Framework-agnostic command palette / search overlay Web Component.\n * Tag: `viking-command-palette`\n * Aliases: `viking-search-palette`, `viking-search-palette-wc`\n *\n * @attr open - When present, shows the palette\n * @attr global-shortcut - Bind ⌘K / Ctrl+K and `/` to open\n * @attr placeholder - Search input placeholder\n * @attr items - JSON array of `{ title, href, snippet?, group? }`\n * @attr recent-storage-key - localStorage key for recent searches\n *\n * @method openPalette() - Programmatically open\n * @method closePalette() - Programmatically close\n *\n * @event viking-close - Palette closed\n * @event viking-query - `{ detail: { query: string } }` on input\n * @event viking-select - `{ detail: { item } }` when a result is activated\n *\n * @example\n * <viking-command-palette\n *   global-shortcut\n *   items='[{\"title\":\"Components\",\"href\":\"/components\",\"group\":\"Docs\"}]'\n * ></viking-command-palette>\n */\nexport class VikingSearchPaletteWc extends HTMLElementBase {\n  static readonly tag = \"viking-command-palette\";\n  static readonly searchTag = \"viking-search-palette\";\n  static readonly legacyTag = \"viking-search-palette-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"open\",\n      \"placeholder\",\n      \"items\",\n      \"global-shortcut\",\n      \"recent-storage-key\",\n    ];\n  }\n\n  private readonly shadow: ShadowRoot;\n  private dialogEl: HTMLDialogElement | null = null;\n  private inputEl: HTMLInputElement | null = null;\n  private resultsEl: HTMLDivElement | null = null;\n  private globalKeyHandler: ((event: KeyboardEvent) => void) | null = null;\n  private readonly resultsId = vikingWcUid(\"viking-search-results\");\n  private readonly inputId = vikingWcUid(\"viking-search-input\");\n  private query = \"\";\n  private activeIndex = 0;\n  private flatResults: VikingSearchPaletteItem[] = [];\n  private readonly history = getDefaultCommandHistory();\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_SEARCH_PALETTE_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n    this.removeAttribute(\"open\");\n    this.syncOpen();\n    this.bindGlobalShortcut();\n    this.dialogEl?.addEventListener(\"close\", this.onClose);\n    this.dialogEl?.addEventListener(\"click\", this.onBackdropClick);\n    this.inputEl?.addEventListener(\"input\", this.onInput);\n    this.inputEl?.addEventListener(\"keydown\", this.onInputKeydown);\n  }\n\n  disconnectedCallback(): void {\n    this.dialogEl?.removeEventListener(\"close\", this.onClose);\n    this.dialogEl?.removeEventListener(\"click\", this.onBackdropClick);\n    this.inputEl?.removeEventListener(\"input\", this.onInput);\n    this.inputEl?.removeEventListener(\"keydown\", this.onInputKeydown);\n    this.unbindGlobalShortcut();\n  }\n\n  attributeChangedCallback(name: string): void {\n    if (!this.isConnected) {\n      return;\n    }\n    if (name === \"open\") {\n      this.syncOpen();\n    }\n    if (name === \"global-shortcut\") {\n      this.unbindGlobalShortcut();\n      this.bindGlobalShortcut();\n    }\n    if (name === \"items\" || name === \"placeholder\") {\n      if (name === \"placeholder\" && this.inputEl) {\n        const placeholder =\n          this.getAttribute(\"placeholder\") ??\n          \"Search documentation, dashboard, API…\";\n        this.inputEl.placeholder = placeholder;\n        this.inputEl.setAttribute(\"aria-label\", placeholder);\n      } else {\n        this.renderResults();\n      }\n    }\n  }\n\n  /** Opens the command palette. */\n  openPalette(): void {\n    this.setAttribute(\"open\", \"\");\n    this.syncOpen();\n  }\n\n  /** Closes the command palette. */\n  closePalette(): void {\n    this.removeAttribute(\"open\");\n    closeModalDialog(this.dialogEl);\n  }\n\n  /** Sets the query string and re-renders filtered results. */\n  search(query: string): void {\n    this.query = query;\n    if (this.inputEl) {\n      this.inputEl.value = query;\n    }\n    this.activeIndex = 0;\n    this.renderResults();\n    this.dispatchEvent(\n      new CustomEvent(\"viking-query\", {\n        bubbles: true,\n        composed: true,\n        detail: { query: this.query },\n      }),\n    );\n  }\n\n  private readonly onClose = (): void => {\n    this.removeAttribute(\"open\");\n    this.query = \"\";\n    this.activeIndex = 0;\n    if (this.inputEl) {\n      this.inputEl.value = \"\";\n    }\n    this.dispatchEvent(\n      new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n    );\n  };\n\n  private readonly onBackdropClick = (event: MouseEvent): void => {\n    if (event.target === this.dialogEl) {\n      this.closePalette();\n    }\n  };\n\n  private readonly onInput = (event: Event): void => {\n    this.query =\n      (event.target as HTMLInputElement).value ?? this.inputEl?.value ?? \"\";\n    this.activeIndex = 0;\n    this.renderResults();\n    this.dispatchEvent(\n      new CustomEvent(\"viking-query\", {\n        bubbles: true,\n        composed: true,\n        detail: { query: this.query },\n      }),\n    );\n  };\n\n  private readonly onInputKeydown = (event: KeyboardEvent): void => {\n    if (event.key === \"Escape\") {\n      event.preventDefault();\n      this.closePalette();\n      return;\n    }\n\n    if (this.flatResults.length === 0) {\n      return;\n    }\n\n    if (event.key === \"ArrowDown\") {\n      event.preventDefault();\n      this.activeIndex = Math.min(\n        this.flatResults.length - 1,\n        this.activeIndex + 1,\n      );\n      this.renderResults();\n      this.scrollActiveIntoView();\n      return;\n    }\n\n    if (event.key === \"ArrowUp\") {\n      event.preventDefault();\n      this.activeIndex = Math.max(0, this.activeIndex - 1);\n      this.renderResults();\n      this.scrollActiveIntoView();\n      return;\n    }\n\n    if (event.key === \"Enter\") {\n      event.preventDefault();\n      const item = this.flatResults[this.activeIndex];\n      if (item) {\n        this.activateItem(item);\n      }\n    }\n  };\n\n  private bindGlobalShortcut(): void {\n    if (!readBoolAttr(this, \"global-shortcut\")) {\n      return;\n    }\n    this.globalKeyHandler = (event: KeyboardEvent) => {\n      const modK =\n        (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\";\n      const slashOpen =\n        event.key === \"/\" &&\n        !event.metaKey &&\n        !event.ctrlKey &&\n        !event.altKey &&\n        !this.hasAttribute(\"open\") &&\n        !isEditableTarget(event.target);\n      if (!modK && !slashOpen) {\n        return;\n      }\n      event.preventDefault();\n      if (modK && this.hasAttribute(\"open\")) {\n        this.closePalette();\n        return;\n      }\n      this.openPalette();\n    };\n    document.addEventListener(\"keydown\", this.globalKeyHandler);\n  }\n\n  private unbindGlobalShortcut(): void {\n    if (this.globalKeyHandler) {\n      document.removeEventListener(\"keydown\", this.globalKeyHandler);\n      this.globalKeyHandler = null;\n    }\n  }\n\n  private syncOpen(): void {\n    if (!this.dialogEl) {\n      return;\n    }\n    const shouldOpen = this.hasAttribute(\"open\");\n    if (shouldOpen && !this.dialogEl.open) {\n      this.dialogEl.removeAttribute(\"aria-hidden\");\n      showModalDialog(this.dialogEl);\n      this.activeIndex = 0;\n      this.renderResults();\n      queueMicrotask(() => this.inputEl?.focus());\n    } else if (!shouldOpen && this.dialogEl.open) {\n      closeModalDialog(this.dialogEl);\n      this.dialogEl.setAttribute(\"aria-hidden\", \"true\");\n    } else if (!shouldOpen) {\n      this.dialogEl.setAttribute(\"aria-hidden\", \"true\");\n    }\n  }\n\n  private scrollActiveIntoView(): void {\n    const active = this.resultsEl?.querySelector(\n      \".viking-search-result.is-selected\",\n    );\n    active?.scrollIntoView({ block: \"nearest\" });\n  }\n\n  private activateItem(item: VikingSearchPaletteItem): void {\n    // Recent query chips re-run the search instead of navigating.\n    if (item.href.startsWith(RECENT_HREF_PREFIX)) {\n      const encoded = item.href.slice(RECENT_HREF_PREFIX.length);\n      let query = item.title;\n      try {\n        query = decodeURIComponent(encoded) || item.title;\n      } catch {\n        query = item.title;\n      }\n      this.search(query);\n      return;\n    }\n\n    const rememberQuery = this.query.trim() || item.title;\n    pushRecentSearch(\n      {\n        query: rememberQuery,\n        title: item.title,\n        href: item.href !== \"#\" ? item.href : undefined,\n      },\n      { storageKey: recentStorageKey(this) },\n    );\n\n    this.dispatchEvent(\n      new CustomEvent(\"viking-select\", {\n        bubbles: true,\n        composed: true,\n        detail: { item },\n      }),\n    );\n    this.closePalette();\n\n    if (item.action === \"cookie-settings\") {\n      readDemlWidgets().openCookieSettings?.();\n      return;\n    }\n\n    if (item.action === \"bug-report\") {\n      const openBugReport = readDemlWidgets().openBugReport;\n      if (openBugReport) {\n        openBugReport();\n        return;\n      }\n    }\n\n    if (item.href && item.href !== \"#\") {\n      // Absolute cross-origin links and same-origin routes both navigate.\n      try {\n        const target = new URL(item.href, window.location.href);\n        if (target.origin === window.location.origin) {\n          window.location.assign(\n            `${target.pathname}${target.search}${target.hash}`,\n          );\n        } else {\n          window.location.assign(target.href);\n        }\n      } catch {\n        window.location.assign(item.href);\n      }\n    }\n  }\n\n  private renderResults(): void {\n    if (!this.resultsEl) {\n      return;\n    }\n\n    const filtered = resolveVisibleItems(this, this.query);\n    this.flatResults = filtered;\n    const hasRecent =\n      !this.query.trim() && filtered.some((item) => item.group === \"Recent\");\n\n    if (filtered.length === 0) {\n      const q = this.query.trim();\n      this.resultsEl.innerHTML = `<p class=\"viking-search-empty\" role=\"status\">${q ? \"No results found\" : \"Start typing to search…\"}</p>`;\n      this.inputEl?.removeAttribute(\"aria-activedescendant\");\n      return;\n    }\n\n    if (this.activeIndex >= filtered.length) {\n      this.activeIndex = filtered.length - 1;\n    }\n\n    let resultIndex = 0;\n    const grouped = groupItems(filtered);\n    const clearRecent = hasRecent\n      ? `<button type=\"button\" class=\"viking-search-clear-recent\" data-clear-recent>Clear recent</button>`\n      : \"\";\n\n    const markup = grouped\n      .map(({ group, items: groupItemsList }) => {\n        const groupLabel = group\n          ? `<div class=\"viking-search-group-header\" role=\"presentation\"><p class=\"viking-search-group-label\">${escapeHtml(group)}</p>${group === \"Recent\" ? clearRecent : \"\"}</div>`\n          : \"\";\n        const rows = groupItemsList\n          .map((item) => {\n            const id = `${this.resultsId}-result-${resultIndex}`;\n            const selected = resultIndex === this.activeIndex;\n            resultIndex += 1;\n            return `\n              <a\n                id=\"${id}\"\n                class=\"viking-search-result${selected ? \" is-selected\" : \"\"}\"\n                role=\"option\"\n                aria-selected=\"${selected}\"\n                href=\"${escapeHtml(item.href)}\"\n                part=\"result\"\n                data-index=\"${resultIndex - 1}\"\n              >\n                <div>\n                  <div class=\"viking-search-result-title\">${escapeHtml(item.title)}</div>\n                  ${item.snippet ? `<div class=\"viking-search-result-snippet\">${escapeHtml(item.snippet)}</div>` : \"\"}\n                </div>\n              </a>`;\n          })\n          .join(\"\");\n        return `${groupLabel}${rows}`;\n      })\n      .join(\"\");\n\n    this.resultsEl.innerHTML = `<div class=\"viking-search-results\" id=\"${this.resultsId}\" role=\"listbox\" aria-label=\"Search results\">${markup}</div>`;\n\n    this.resultsEl\n      .querySelector(\"[data-clear-recent]\")\n      ?.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        const key = recentStorageKey(this);\n        const snapshot = readRecentSearches(key);\n        if (!snapshot.length) {\n          return;\n        }\n        void this.history.run({\n          label: \"Cleared recent searches\",\n          do: () => {\n            clearRecentSearches(key);\n            this.renderResults();\n          },\n          undo: () => {\n            restoreRecentSearches(snapshot, key);\n            this.renderResults();\n          },\n        });\n      });\n\n    const activeId = `${this.resultsId}-result-${this.activeIndex}`;\n    this.inputEl?.setAttribute(\"aria-activedescendant\", activeId);\n    this.inputEl?.setAttribute(\"role\", \"combobox\");\n    this.inputEl?.setAttribute(\"aria-expanded\", \"true\");\n    this.inputEl?.setAttribute(\"aria-controls\", this.resultsId);\n\n    this.resultsEl.querySelectorAll(\".viking-search-result\").forEach((node) => {\n      node.addEventListener(\"click\", (event) => {\n        const mouse = event as MouseEvent;\n        // Allow new-tab / middle-click via native <a href>.\n        if (\n          mouse.metaKey ||\n          mouse.ctrlKey ||\n          mouse.shiftKey ||\n          mouse.button === 1\n        ) {\n          this.closePalette();\n          return;\n        }\n        event.preventDefault();\n        const index = Number((node as HTMLElement).dataset[\"index\"] ?? 0);\n        const item = this.flatResults[index];\n        if (item) {\n          this.activateItem(item);\n        }\n      });\n      node.addEventListener(\"mouseenter\", () => {\n        const index = Number((node as HTMLElement).dataset[\"index\"] ?? 0);\n        if (index === this.activeIndex) {\n          return;\n        }\n        this.activeIndex = index;\n        this.resultsEl\n          ?.querySelectorAll(\".viking-search-result\")\n          .forEach((row, i) => {\n            const selected = i === index;\n            row.classList.toggle(\"is-selected\", selected);\n            row.setAttribute(\"aria-selected\", selected ? \"true\" : \"false\");\n          });\n        const activeId = `${this.resultsId}-result-${index}`;\n        this.inputEl?.setAttribute(\"aria-activedescendant\", activeId);\n      });\n    });\n  }\n\n  private render(): void {\n    const placeholder =\n      this.getAttribute(\"placeholder\") ??\n      \"Search documentation, dashboard, API…\";\n    const mod = modKeyLabel();\n\n    this.shadow.innerHTML = `\n      <dialog class=\"viking-search-palette-backdrop\" aria-label=\"Search\" aria-hidden=\"true\">\n        <div class=\"viking-search-palette\" part=\"panel\" role=\"document\">\n          <div class=\"viking-search-palette-header\" part=\"header\">\n            <span class=\"viking-search-palette-icon\" aria-hidden=\"true\">${renderInlineIcon(\"search\", 24)}</span>\n            <input\n              id=\"${this.inputId}\"\n              type=\"search\"\n              class=\"viking-search-palette-input\"\n              part=\"input\"\n              placeholder=\"${escapeHtml(placeholder)}\"\n              aria-label=\"${escapeHtml(placeholder)}\"\n              aria-autocomplete=\"list\"\n              autocomplete=\"off\"\n              spellcheck=\"false\"\n            />\n            <button type=\"button\" class=\"viking-search-palette-close\" part=\"close\" aria-label=\"Close search\">${renderInlineIcon(\"x\", 20)}</button>\n          </div>\n          <div class=\"viking-search-palette-body\" part=\"body\">\n            <slot></slot>\n            <div class=\"viking-search-results-host\"></div>\n          </div>\n          <footer class=\"viking-search-palette-footer\" part=\"footer\">\n            <span class=\"viking-kbd\">${mod}</span><span class=\"viking-kbd\">K</span> /\n            <span class=\"viking-kbd\">/</span> open ·\n            <span class=\"viking-kbd\">↑</span><span class=\"viking-kbd\">↓</span> navigate ·\n            <span class=\"viking-kbd\">Enter</span> open ·\n            <span class=\"viking-kbd\">Esc</span> close ·\n            <span class=\"viking-kbd\">?</span> all shortcuts\n          </footer>\n        </div>\n      </dialog>\n    `;\n\n    this.dialogEl = this.shadow.querySelector(\"dialog\");\n    this.inputEl = this.shadow.querySelector(\"input\");\n    this.resultsEl = this.shadow.querySelector(\".viking-search-results-host\");\n\n    this.shadow\n      .querySelector(\".viking-search-palette-close\")\n      ?.addEventListener(\"click\", () => this.closePalette());\n\n    this.dialogEl?.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Escape\") {\n        event.preventDefault();\n        this.closePalette();\n      }\n    });\n  }\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n  if (!(target instanceof HTMLElement)) {\n    return false;\n  }\n  const tag = target.tagName;\n  if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") {\n    return true;\n  }\n  if (target.isContentEditable) {\n    return true;\n  }\n  return Boolean(target.closest(\"[contenteditable='true']\"));\n}\n\nexport const registerVikingSearchPaletteWc = (): void => {\n  defineCustomElement(VikingSearchPaletteWc.tag, VikingSearchPaletteWc);\n  defineCustomElementAlias(\n    VikingSearchPaletteWc.searchTag,\n    VikingSearchPaletteWc,\n  );\n  defineCustomElementAlias(\n    VikingSearchPaletteWc.legacyTag,\n    VikingSearchPaletteWc,\n  );\n};\n","import {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n  HTMLElementBase,\n} from \"../core/dom\";\nimport type { VikingWcTone } from \"../core/types\";\n\nconst TONES = new Set<VikingWcTone>([\n  \"accent\",\n  \"secondary\",\n  \"success\",\n  \"warning\",\n  \"danger\",\n  \"info\",\n  \"muted\",\n]);\n\n/**\n * Framework-agnostic status page card with title/subtitle, optional status chip,\n * and optional action slot.\n * Tag: `viking-status-card` (legacy alias: `viking-status-card-wc`)\n *\n * @attr title - Card heading\n * @attr subtitle - Supporting body text\n * @attr status - Optional status chip label\n * @attr status-tone - accent | secondary | success | warning | danger | info | muted\n * @attr status-clickable - Wrap status in anchor style token (visual-only)\n * @attr href - Optional outbound/intra-app card link\n * @attr compact - Reduce padding and spacing\n * @attr loading - Reserved loading state class\n */\nexport class VikingStatusCardWc extends HTMLElementBase {\n  static readonly tag = \"viking-status-card\";\n  static readonly legacyTag = \"viking-status-card-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"title\",\n      \"subtitle\",\n      \"status\",\n      \"status-tone\",\n      \"status-dot\",\n      \"href\",\n      \"target\",\n      \"compact\",\n      \"loading\",\n      \"interactive\",\n      \"aria-label\",\n    ];\n  }\n\n  private readonly shadow = this.attachShadow({ mode: \"open\" });\n\n  connectedCallback(): void {\n    this.render();\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.render();\n    }\n  }\n\n  private get compact(): boolean {\n    const compact = this.getAttribute(\"compact\");\n    return compact !== null && compact !== \"false\";\n  }\n\n  private get loading(): boolean {\n    const loading = this.getAttribute(\"loading\");\n    return loading !== null && loading !== \"false\";\n  }\n\n  private get interactive(): boolean {\n    const interactive = this.getAttribute(\"interactive\");\n    return interactive !== null && interactive !== \"false\";\n  }\n\n  private get href(): string | null {\n    return this.getAttribute(\"href\");\n  }\n\n  private get target(): string | null {\n    return this.getAttribute(\"target\");\n  }\n\n  private get statusTone(): VikingWcTone {\n    const raw = (this.getAttribute(\"status-tone\") ?? \"muted\") as VikingWcTone;\n    return TONES.has(raw) ? raw : \"muted\";\n  }\n\n  private get statusDot(): boolean {\n    const statusDot = this.getAttribute(\"status-dot\");\n    return statusDot !== null && statusDot !== \"false\";\n  }\n\n  private get cardTitle(): string {\n    return this.getAttribute(\"title\") ?? \"\";\n  }\n\n  private get subtitle(): string {\n    return this.getAttribute(\"subtitle\") ?? \"\";\n  }\n\n  private get status(): string {\n    return this.getAttribute(\"status\") ?? \"\";\n  }\n\n  private render(): void {\n    const hasStatus = this.status.length > 0;\n    const title = this.cardTitle;\n    const subtitle = this.subtitle;\n    const compactClass = this.compact ? \" status-card--compact\" : \"\";\n    const loadingClass = this.loading ? \" status-card--loading\" : \"\";\n    const interactiveClass = this.interactive\n      ? \" status-card--interactive\"\n      : \"\";\n    const wrapperClass = `status-card${compactClass}${loadingClass}${interactiveClass}`;\n    const rel = this.target === \"_blank\" ? ' rel=\"noopener noreferrer\"' : \"\";\n    const statusDot = this.statusDot\n      ? '<span class=\"status-card__status-dot\" aria-hidden=\"true\"></span>'\n      : \"\";\n    const statusChip = hasStatus\n      ? `<span class=\"status-card__status status-card__status-${this.statusTone}\" part=\"status\">${statusDot}<span>${escapeHtml(this.status)}</span></span>`\n      : \"\";\n    const safeHref = this.href ? escapeHtml(this.href) : \"\";\n    const safeLabel = escapeHtml(this.getAttribute(\"aria-label\") ?? \"\");\n\n    const wrapperTag = safeHref ? \"a\" : \"div\";\n\n    const header = `\n      <header class=\"status-card__header\">\n        <div class=\"status-card__title-wrap\">\n          ${\n            title\n              ? `<h3 class=\"status-card__title\" part=\"title\">${escapeHtml(title)}</h3>`\n              : \"\"\n          }\n          ${\n            subtitle\n              ? `<p class=\"status-card__subtitle\" part=\"subtitle\">${escapeHtml(subtitle)}</p>`\n              : \"\"\n          }\n        </div>\n        ${\n          hasStatus || statusDot\n            ? `<div class=\"status-card__status-wrap\">${statusChip}</div>`\n            : \"\"\n        }\n      </header>\n    `;\n\n    this.shadow.innerHTML = `\n      <style>\n        ${VIKING_STATUS_CARD_STYLES}\n      </style>\n      <${wrapperTag}\n        class=\"${wrapperClass}\"\n        part=\"card\"\n        ${safeHref ? `href=\"${safeHref}\"` : \"\"}\n        ${this.target ? `target=\"${escapeHtml(this.target)}\"` : \"\"}\n        ${safeHref ? rel : \"\"}\n        ${safeLabel ? `aria-label=\"${safeLabel}\"` : \"\"}\n      >\n        ${header}\n        <section class=\"status-card__body\">\n          <slot></slot>\n        </section>\n      </${wrapperTag}>\n    `;\n  }\n}\n\nconst VIKING_STATUS_CARD_STYLES = `\n:host {\n  display: block;\n}\n\n:host([compact]) .status-card,\n:host .status-card--compact {\n  padding: var(--viking-space-3); /* Slightly increased compact breathing while staying compact */\n  gap: var(--viking-space-3);\n  border-radius: var(--viking-radius-lg);\n}\n\n.status-card {\n  display: grid;\n  gap: var(--viking-space-4);\n  width: 100%;\n  padding: var(--viking-card-padding);\n  border-radius: var(--viking-radius-xl); /* Increased rounding for premium structured feel */\n  border: 1px solid var(--viking-border);\n  background: var(--viking-surface);\n  color: var(--viking-text);\n  box-sizing: border-box;\n  transition: var(--viking-transition-interactive);\n  text-decoration: none;\n}\n\n.status-card--interactive {\n  cursor: pointer;\n}\n\n.status-card--interactive:hover {\n  border-color: var(--viking-accent-strong);\n  box-shadow: var(--viking-shadow-sm);\n  transform: translateY(calc(var(--viking-state-hover-lift) * -1));\n}\n\n.status-card--loading {\n  pointer-events: none;\n  opacity: var(--viking-state-disabled-opacity);\n}\n\n.status-card__header {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  gap: var(--viking-space-3);\n  align-items: flex-start;\n  min-width: 0;\n  padding-bottom: var(--viking-space-3); /* Better breathing in header */\n  margin-bottom: var(--viking-space-3);\n  border-bottom: 1px solid var(--viking-border);\n}\n\n.status-card__title-wrap {\n  display: grid;\n  gap: var(--viking-space-1);\n  min-width: 0;\n  flex: 1 1 min(100%, 18rem);\n}\n\n.status-card__title {\n  margin: 0;\n  font-size: var(--viking-font-size-xl);\n  font-weight: var(--viking-font-weight-bold);\n  letter-spacing: var(--viking-letter-spacing-tight);\n  line-height: var(--viking-line-height-tight);\n}\n\n.status-card__subtitle {\n  margin: 0;\n  max-width: 60ch;\n  color: var(--viking-text-muted);\n  font-size: var(--viking-font-size-sm);\n  line-height: var(--viking-line-height-relaxed);\n}\n\n.status-card__status-wrap {\n  display: inline-flex;\n  align-items: center;\n  justify-content: flex-end;\n  flex: 0 1 auto;\n  min-width: 0;\n}\n\n.status-card__status {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--viking-space-1);\n  max-width: fit-content;\n  padding: calc(var(--viking-space-0-5) - var(--viking-space-px))\n    var(--viking-space-1);\n  border-radius: var(--viking-radius-pill);\n  border: 1px solid var(--viking-border-subtle);\n  background: color-mix(in srgb, var(--viking-surface) 92%, transparent);\n  color: var(--viking-text-muted);\n  text-transform: capitalize;\n  font-size: var(--viking-font-size-xs);\n  font-weight: var(--viking-font-weight-semibold);\n  letter-spacing: var(--viking-letter-spacing-wide);\n}\n\n.status-card__status-dot {\n  width: var(--viking-space-1);\n  height: var(--viking-space-1);\n  border-radius: var(--viking-radius-full);\n  background: currentColor;\n  flex: 0 0 auto;\n}\n\n.status-card__status-success {\n  background: color-mix(in srgb, var(--viking-success) 12%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-success) 40%, transparent);\n  color: var(--viking-success);\n}\n\n.status-card__status-warning {\n  background: color-mix(in srgb, var(--viking-warning) 12%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-warning) 40%, transparent);\n  color: var(--viking-warning);\n}\n\n.status-card__status-danger {\n  background: color-mix(in srgb, var(--viking-danger) 12%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-danger) 45%, transparent);\n  color: var(--viking-danger-text);\n}\n\n.status-card__status-accent {\n  background: color-mix(in srgb, var(--viking-accent) 12%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-accent) 40%, transparent);\n  color: var(--viking-accent);\n}\n\n.status-card__status-secondary {\n  background: color-mix(in srgb, var(--viking-accent-secondary) 12%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-accent-secondary) 40%, transparent);\n  color: var(--viking-accent-secondary);\n}\n\n.status-card__status-info {\n  background: color-mix(in srgb, var(--viking-info) 12%, var(--viking-surface));\n  border-color: color-mix(in srgb, var(--viking-info) 40%, transparent);\n  color: var(--viking-info);\n}\n\n.status-card__status-muted {\n  background: var(--viking-surface);\n  border-color: var(--viking-border-subtle);\n  color: var(--viking-text-muted);\n}\n\n.status-card__body {\n  display: grid;\n  gap: var(--viking-space-4); /* Improved vertical rhythm inside the card body for breathing */\n  min-width: 0;\n  width: 100%;\n}\n\n.status-card__body > * {\n  width: 100%;\n  min-width: 0;\n}\n`;\n\nexport const registerVikingStatusCardWc = (): void => {\n  defineCustomElement(VikingStatusCardWc.tag, VikingStatusCardWc);\n  defineCustomElementAlias(VikingStatusCardWc.legacyTag, VikingStatusCardWc);\n};\n\n/** Register only the internal wrapper tag used by Angular components. */\nexport const registerVikingStatusCardWcElement = (): void => {\n  defineCustomElementAlias(VikingStatusCardWc.legacyTag, VikingStatusCardWc);\n};\n","import { attachShadowStyles } from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n  HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport type { VikingWcTone } from \"../core/types\";\n\nconst TONES = new Set<VikingWcTone>([\n  \"accent\",\n  \"secondary\",\n  \"success\",\n  \"warning\",\n  \"danger\",\n  \"info\",\n  \"muted\",\n]);\n\n/**\n * Framework-agnostic Viking status pill.\n * Tag: `viking-status-pill` (legacy alias: `viking-status-pill-wc`)\n *\n * @attr tone - accent | secondary | success | warning | danger | info | muted\n * @attr icon - Optional icon name for leading glyph\n * @attr href - Optional navigation target\n * @attr compact - Reduced pill footprint\n * @attr dot - Shows a status dot\n * @attr removable - Renders a close control; emits `viking-pill-removed`\n */\nexport class VikingStatusPillWc extends HTMLElementBase {\n  static readonly tag = \"viking-status-pill\";\n  static readonly legacyTag = \"viking-status-pill-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"tone\",\n      \"icon\",\n      \"href\",\n      \"target\",\n      \"compact\",\n      \"dot\",\n      \"removable\",\n      \"aria-label\",\n    ];\n  }\n\n  private readonly shadow: ShadowRoot;\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_STATUS_PILL_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.render();\n    }\n  }\n\n  private get tone(): VikingWcTone {\n    const raw = (this.getAttribute(\"tone\") ?? \"muted\") as VikingWcTone;\n    return TONES.has(raw) ? raw : \"muted\";\n  }\n\n  private get compact(): boolean {\n    const compact = this.getAttribute(\"compact\");\n    return compact !== null && compact !== \"false\";\n  }\n\n  private get removable(): boolean {\n    const removable = this.getAttribute(\"removable\");\n    return removable !== null && removable !== \"false\";\n  }\n\n  private get href(): string | null {\n    return this.getAttribute(\"href\");\n  }\n\n  private get icon(): string | null {\n    return this.getAttribute(\"icon\");\n  }\n\n  private get showDot(): boolean {\n    const dot = this.getAttribute(\"dot\");\n    return dot !== null && dot !== \"false\";\n  }\n\n  private readonly onRemove = (): void => {\n    this.dispatchEvent(\n      new CustomEvent(\"viking-pill-removed\", {\n        bubbles: true,\n        composed: true,\n      }),\n    );\n  };\n\n  private render(): void {\n    const tone = this.tone;\n    const compact = this.compact ? \" status-pill--compact\" : \"\";\n    const icon = this.icon\n      ? renderInlineIcon(this.icon, 14, \"status-pill__icon\")\n      : \"\";\n    const dot = this.showDot\n      ? `<span class=\"status-pill__dot\" aria-hidden=\"true\"></span>`\n      : \"\";\n    const label = `<span class=\"status-pill__label\" part=\"label\"><slot></slot></span>`;\n    const ariaLabel = escapeHtml(this.getAttribute(\"aria-label\") ?? \"\");\n    const href = this.href;\n    const target = this.getAttribute(\"target\");\n    const rel = href && target === \"_blank\" ? ' rel=\"noopener noreferrer\"' : \"\";\n\n    if (href) {\n      this.shadow.innerHTML = `\n        <a\n          class=\"status-pill status-pill-${tone}${compact}\"\n          part=\"control\"\n          href=\"${escapeHtml(href)}\"\n          ${target ? `target=\"${escapeHtml(target)}\"${rel}` : \"\"}\n          ${ariaLabel ? `aria-label=\"${ariaLabel}\"` : \"\"}\n        >\n          ${dot}\n          ${icon}\n          ${label}\n        </a>\n      `;\n      return;\n    }\n\n    this.shadow.innerHTML = `\n      <span\n        class=\"status-pill status-pill-${tone}${compact}\"\n        part=\"control\"\n        ${ariaLabel ? `role=\"status\" aria-label=\"${ariaLabel}\"` : \"\"}\n      >\n        ${dot}\n        ${icon}\n        ${label}\n        ${\n          this.removable\n            ? '<button type=\"button\" class=\"status-pill__remove\" part=\"remove\" aria-label=\"Remove\"><span class=\"status-pill__remove-icon\" aria-hidden=\"true\">&times;</span></button>'\n            : \"\"\n        }\n      </span>\n    `;\n\n    this.shadow\n      .querySelector<HTMLButtonElement>(\".status-pill__remove\")\n      ?.addEventListener(\"click\", this.onRemove);\n  }\n}\n\nconst VIKING_STATUS_PILL_STYLES = `\n:host {\n  display: inline-flex;\n}\n\n.status-pill {\n  --viking-status-pill-bg: color-mix(in srgb, var(--viking-surface-alt) 88%, var(--viking-surface));\n  --viking-status-pill-text: var(--viking-text-muted);\n  --viking-status-pill-border: var(--viking-border-subtle);\n  --viking-status-pill-shadow: var(--viking-shadow-xs);\n\n  display: inline-flex;\n  align-items: center;\n  gap: var(--viking-space-0-5);\n  padding: var(--viking-space-0-5) var(--viking-space-2);\n  border-radius: var(--viking-radius-pill);\n  border: 1px solid var(--viking-status-pill-border);\n  background: var(--viking-status-pill-bg);\n  color: var(--viking-status-pill-text);\n  font-family: var(--viking-font-family);\n  font-size: var(--viking-font-size-xs);\n  font-weight: var(--viking-font-weight-semibold);\n  letter-spacing: var(--viking-letter-spacing-caps);\n  line-height: var(--viking-line-height-snug);\n  white-space: nowrap;\n  text-transform: uppercase;\n  box-shadow: var(--viking-status-pill-shadow);\n}\n\n:host(:hover) .status-pill {\n  text-decoration: none;\n}\n\n.status-pill--compact {\n  padding: var(--viking-space-0-5);\n  font-size: var(--viking-font-size-2xs);\n}\n\n.status-pill__label {\n  display: inline-flex;\n  align-items: center;\n}\n\n.status-pill__dot {\n  width: var(--viking-space-1);\n  height: var(--viking-space-1);\n  border-radius: var(--viking-radius-full);\n  background: currentColor;\n  flex: 0 0 auto;\n}\n\n.status-pill__icon,\n::slotted([data-viking-icon]) {\n  width: var(--viking-space-3);\n  height: var(--viking-space-3);\n  color: currentColor;\n  flex-shrink: 0;\n}\n\n.status-pill__remove {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid transparent;\n  background: transparent;\n  color: currentColor;\n  border-radius: var(--viking-radius-full);\n  width: var(--viking-touch-target-min);\n  height: var(--viking-touch-target-min);\n  margin-right: calc(var(--viking-space-0-5) * -1);\n  padding: 0;\n  cursor: pointer;\n}\n\n.status-pill__remove:hover {\n  background: color-mix(in srgb, currentColor 10%, transparent);\n}\n\n.status-pill__remove:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.status-pill-accent {\n  --viking-status-pill-bg: color-mix(in srgb, var(--viking-accent) 18%, var(--viking-surface));\n  --viking-status-pill-text: var(--viking-accent);\n  --viking-status-pill-border: color-mix(in srgb, var(--viking-accent) 52%, transparent);\n}\n\n.status-pill-secondary {\n  --viking-status-pill-bg: color-mix(in srgb, var(--viking-accent-secondary) 16%, var(--viking-surface));\n  --viking-status-pill-text: var(--viking-accent-secondary);\n  --viking-status-pill-border: color-mix(in srgb, var(--viking-accent-secondary) 52%, transparent);\n}\n\n.status-pill-success {\n  --viking-status-pill-bg: color-mix(in srgb, var(--viking-success) 16%, var(--viking-surface));\n  --viking-status-pill-text: var(--viking-success);\n  --viking-status-pill-border: color-mix(in srgb, var(--viking-success) 55%, transparent);\n}\n\n.status-pill-warning {\n  --viking-status-pill-bg: color-mix(in srgb, var(--viking-warning) 16%, var(--viking-surface));\n  --viking-status-pill-text: var(--viking-warning);\n  --viking-status-pill-border: color-mix(in srgb, var(--viking-warning) 55%, transparent);\n}\n\n.status-pill-danger {\n  --viking-status-pill-bg: color-mix(in srgb, var(--viking-danger) 14%, var(--viking-surface));\n  --viking-status-pill-text: var(--viking-danger-text);\n  --viking-status-pill-border: color-mix(in srgb, var(--viking-danger) 50%, transparent);\n}\n\n.status-pill-info {\n  --viking-status-pill-bg: color-mix(in srgb, var(--viking-info) 14%, var(--viking-surface));\n  --viking-status-pill-text: var(--viking-info);\n  --viking-status-pill-border: color-mix(in srgb, var(--viking-info) 50%, transparent);\n}\n\n.status-pill-muted {\n  --viking-status-pill-bg: var(--viking-surface);\n  --viking-status-pill-text: var(--viking-text-muted);\n  --viking-status-pill-border: var(--viking-border-subtle);\n}\n\n.status-pill a {\n  color: inherit;\n}\n\na.status-pill {\n  text-decoration: none;\n}\n`;\n\nexport const registerVikingStatusPillWc = (): void => {\n  defineCustomElement(VikingStatusPillWc.tag, VikingStatusPillWc);\n  defineCustomElementAlias(VikingStatusPillWc.legacyTag, VikingStatusPillWc);\n};\n\n/** Register only the internal wrapper tag used by Angular components. */\nexport const registerVikingStatusPillWcElement = (): void => {\n  defineCustomElementAlias(VikingStatusPillWc.legacyTag, VikingStatusPillWc);\n};\n","import { VikingIconName } from \"../core/icons\";\n\n/**\n * Drakkar — the Viking longship that carries the site shell (navbar, footer, nav links)\n * across marketing, app, and backend surfaces.\n */\n\n/** Which DEML surface the Drakkar shell is rendering on (navbar + footer). */\nexport type SiteDrakkarContext = \"app\" | \"marketing\" | \"backend\" | \"docs\";\n\nexport interface SiteUrls {\n  app: string;\n  marketing: string;\n  backend: string;\n}\n\nexport interface SiteNavLink {\n  id: string;\n  label: string;\n  icon: VikingIconName;\n  appHref: string;\n  marketingHref: string;\n  external?: boolean;\n  requireAuth?: boolean;\n  /** Routes served by deml.app — resolved to absolute app URLs off-app. */\n  platform?: boolean;\n}\n\nexport interface SiteFooterLink {\n  label: string;\n  appHref: string;\n  marketingHref: string;\n  external?: boolean;\n  action?: \"cookie-settings\" | \"bug-report\";\n  /** Routes served by deml.app — resolved to absolute app URLs off-app. */\n  platform?: boolean;\n  requireAuth?: boolean;\n}\n\nexport interface SiteFooterColumn {\n  title: string;\n  links: SiteFooterLink[];\n}\n\n/** Primary navbar links (desktop + mobile). Shown on every surface. */\nexport const SITE_NAV_LINKS: readonly SiteNavLink[] = [\n  {\n    id: \"blue-notes\",\n    label: \"Blue Notes\",\n    icon: \"file\",\n    appHref: \"https://dataengineeringformachinelearning.com/blog/\",\n    marketingHref: \"/blog/\",\n  },\n  {\n    id: \"book\",\n    label: \"Book\",\n    icon: \"policy\",\n    appHref: \"https://dataengineeringformachinelearning.com/book/\",\n    marketingHref: \"/book\",\n  },\n  {\n    id: \"dashboard\",\n    label: \"Dashboard\",\n    icon: \"home\",\n    appHref: \"/dashboard\",\n    marketingHref: \"/dashboard\",\n    requireAuth: true,\n    platform: true,\n  },\n  {\n    id: \"sites\",\n    label: \"Sites\",\n    icon: \"building\",\n    appHref: \"/settings\",\n    marketingHref: \"/settings\",\n    requireAuth: true,\n    platform: true,\n  },\n  {\n    id: \"account\",\n    label: \"Account\",\n    icon: \"user\",\n    appHref: \"/account\",\n    marketingHref: \"/account\",\n    requireAuth: true,\n    platform: true,\n  },\n] as const;\n\nexport const SITE_FOOTER_COLUMNS: readonly SiteFooterColumn[] = [\n  {\n    title: \"Platforms\",\n    links: [\n      {\n        label: \"DEML\",\n        appHref: \"/\",\n        marketingHref: \"https://deml.app/\",\n        platform: true,\n      },\n      {\n        label: \"FORJD\",\n        appHref: \"https://forjd.co/\",\n        marketingHref: \"https://forjd.co/\",\n        external: true,\n      },\n      {\n        label: \"Explore\",\n        appHref: \"/explore\",\n        marketingHref: \"/explore\",\n        platform: true,\n      },\n      {\n        label: \"Dashboard\",\n        appHref: \"/dashboard\",\n        marketingHref: \"/dashboard\",\n        platform: true,\n        requireAuth: true,\n      },\n    ],\n  },\n  {\n    title: \"Resources\",\n    links: [\n      {\n        label: \"Community\",\n        appHref: \"https://dataengineeringformachinelearning.com/\",\n        marketingHref: \"/\",\n      },\n      {\n        label: \"Whitepaper\",\n        appHref: \"https://dataengineeringformachinelearning.com/whitepaper/\",\n        marketingHref: \"/whitepaper\",\n      },\n      {\n        label: \"Book\",\n        appHref: \"https://dataengineeringformachinelearning.com/book/\",\n        marketingHref: \"/book\",\n      },\n      {\n        label: \"Blue Notes\",\n        appHref: \"https://dataengineeringformachinelearning.com/blog/\",\n        marketingHref: \"/blog/\",\n      },\n      {\n        label: \"DEML Swagger\",\n        appHref: \"https://backend.deml.app/api/v1/docs\",\n        marketingHref: \"https://backend.deml.app/api/v1/docs\",\n        external: true,\n      },\n      {\n        label: \"DEML ReDoc\",\n        appHref: \"https://backend.deml.app/api/v1/redoc\",\n        marketingHref: \"https://backend.deml.app/api/v1/redoc\",\n        external: true,\n      },\n      {\n        label: \"FORJD capabilities\",\n        appHref: \"https://backend.forjd.co/api/v1/capabilities\",\n        marketingHref: \"https://backend.forjd.co/api/v1/capabilities\",\n        external: true,\n      },\n    ],\n  },\n  {\n    title: \"Support\",\n    links: [\n      {\n        label: \"Platform Status\",\n        appHref: \"/status/platform-status\",\n        marketingHref: \"/status/platform-status\",\n        platform: true,\n      },\n      {\n        label: \"Report a Bug\",\n        appHref: \"#\",\n        marketingHref: \"#\",\n        action: \"bug-report\",\n      },\n    ],\n  },\n  {\n    title: \"Legal & Compliance\",\n    links: [\n      {\n        label: \"Privacy Policy\",\n        appHref: \"https://dataengineeringformachinelearning.com/privacy/\",\n        marketingHref: \"/privacy\",\n      },\n      {\n        label: \"Terms of Service\",\n        appHref: \"https://dataengineeringformachinelearning.com/terms/\",\n        marketingHref: \"/terms\",\n      },\n      {\n        label: \"SOC2 Compliance\",\n        appHref: \"https://dataengineeringformachinelearning.com/compliance/\",\n        marketingHref: \"/compliance\",\n      },\n      {\n        label: \"GDPR Compliance\",\n        appHref: \"https://dataengineeringformachinelearning.com/privacy/#gdpr\",\n        marketingHref: \"/privacy#gdpr\",\n      },\n      {\n        label: \"Cookie Settings\",\n        appHref: \"#\",\n        marketingHref: \"#\",\n        action: \"cookie-settings\",\n      },\n    ],\n  },\n] as const;\n\nexport const BUG_REPORT_QUERY = \"reportBug=1\";\nexport const COOKIE_SETTINGS_QUERY = \"cookieSettings=1\";\n\nconst isAbsoluteUrl = (href: string): boolean => /^https?:\\/\\//i.test(href);\n\nconst joinBase = (base: string, path: string): string => {\n  if (isAbsoluteUrl(path)) {\n    return path;\n  }\n  const normalizedBase = base.replace(/\\/$/, \"\");\n  const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n  return `${normalizedBase}${normalizedPath}`;\n};\n\nexport const bugReportHref = (urls: SiteUrls): string =>\n  `${joinBase(urls.app, \"/\")}?${BUG_REPORT_QUERY}`;\n\nexport const cookieSettingsHref = (urls: SiteUrls): string =>\n  `${joinBase(urls.marketing, \"/\")}?${COOKIE_SETTINGS_QUERY}`;\n\nconst resolveMarketingContentHref = (\n  href: string,\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n): string => {\n  if (isAbsoluteUrl(href)) {\n    return href;\n  }\n  if (href.startsWith(\"mailto:\")) {\n    return href;\n  }\n  if (context === \"marketing\" && href.startsWith(\"/\")) {\n    return href;\n  }\n  return joinBase(urls.marketing, href);\n};\n\nconst resolvePlatformHref = (\n  href: string,\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n): string => {\n  if (context === \"app\") {\n    return href;\n  }\n  return joinBase(urls.app, href);\n};\n\nexport const resolveNavHref = (\n  link: SiteNavLink,\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n): string => {\n  if (link.platform) {\n    return resolvePlatformHref(link.appHref, context, urls);\n  }\n  if (context === \"app\") {\n    return link.appHref;\n  }\n  return resolveMarketingContentHref(link.marketingHref, context, urls);\n};\n\nexport const resolveFooterHref = (\n  link: SiteFooterLink,\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n): string => {\n  if (link.action === \"bug-report\") {\n    return context === \"app\" ? \"#\" : bugReportHref(urls);\n  }\n  if (link.action === \"cookie-settings\") {\n    return cookieSettingsHref(urls);\n  }\n  if (link.platform) {\n    return resolvePlatformHref(link.appHref, context, urls);\n  }\n  if (context === \"app\") {\n    return link.appHref;\n  }\n  return resolveMarketingContentHref(link.marketingHref, context, urls);\n};\n\nexport const resolveBrandHref = (\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n): string => {\n  if (context === \"marketing\") {\n    return \"/\";\n  }\n  return urls.marketing;\n};\n\n/** Navbar links; auth-gated entries appear only when the session is active. */\nexport const visibleNavLinks = (\n  links: readonly SiteNavLink[],\n  isAuthenticated = false,\n): SiteNavLink[] =>\n  links.filter((link) => !link.requireAuth || isAuthenticated);\n\nexport const isAppRouterPath = (href: string): boolean =>\n  !isAbsoluteUrl(href) && href.startsWith(\"/\");\n\nexport const DEFAULT_SITE_URLS: SiteUrls = {\n  app: \"https://deml.app\",\n  marketing: \"https://dataengineeringformachinelearning.com\",\n  backend: \"https://backend.deml.app\",\n};\n","/**\n * Attribute parsers for Viking-UI Web Components.\n * Pure helpers — no framework runtime, no DOM dependency.\n */\n\n/** Boolean attribute: presence-true unless explicit \"false\" / \"0\" / \"off\" / \"no\". */\nexport const parseBoolean = (value: string | null | undefined): boolean => {\n  if (value == null) {\n    return false;\n  }\n  const normalized = value.trim().toLowerCase();\n  if (normalized === \"\" || normalized === \"true\" || normalized === \"1\") {\n    return true;\n  }\n  if (\n    normalized === \"false\" ||\n    normalized === \"0\" ||\n    normalized === \"off\" ||\n    normalized === \"no\"\n  ) {\n    return false;\n  }\n  return true;\n};\n\n/** Finite number from attribute string; falls back to `fallback` when invalid. */\nexport const parseNumber = (\n  value: string | null | undefined,\n  fallback = 0,\n): number => {\n  if (value == null || value.trim() === \"\") {\n    return fallback;\n  }\n  const parsed = Number(value);\n  return Number.isFinite(parsed) ? parsed : fallback;\n};\n\n/** JSON attribute; returns `undefined` on empty or parse failure. */\nexport const parseJson = <T>(\n  value: string | null | undefined,\n): T | undefined => {\n  if (value == null || value.trim() === \"\") {\n    return undefined;\n  }\n  try {\n    return JSON.parse(value) as T;\n  } catch {\n    return undefined;\n  }\n};\n\n/**\n * Constrained string enum from attribute.\n * Returns `fallback` (first option when omitted) if value is not in `options`.\n */\nexport const parseSelect = <T extends string>(\n  value: string | null | undefined,\n  options: readonly T[],\n  fallback?: T,\n): T => {\n  const defaultValue = fallback ?? options[0];\n  if (defaultValue === undefined) {\n    throw new Error(\"parseSelect requires a non-empty options list\");\n  }\n  if (value == null) {\n    return defaultValue;\n  }\n  return (options as readonly string[]).includes(value)\n    ? (value as T)\n    : defaultValue;\n};\n","import { HTMLElementBase } from \"./dom\";\n\nexport type VikingAttrOptions<T> = {\n  parser?: (value: string | null) => T;\n  default?: T;\n};\n\n/**\n * VikingReactiveElement — lightweight reactivity for vanilla Web Components.\n *\n * Zero framework runtime. Batches attribute/prop-driven updates with\n * `queueMicrotask`, stays SSR-safe via {@link HTMLElementBase}, and keeps\n * `observedAttributes` / `attributeChangedCallback` as the attribute source of truth.\n *\n * Opt-in for multi-attribute hosts (footer, suite chrome). Simple badges/buttons\n * may keep extending {@link HTMLElementBase} directly.\n */\n/**\n * Prop bag for reactive web components — specialize per host.\n * Values may be nested objects (e.g. SiteUrls); keep index value as unknown.\n */\nexport type VikingWcProps = Record<string, unknown>;\n\nexport abstract class VikingReactiveElement<\n  TProps extends VikingWcProps = VikingWcProps,\n> extends HTMLElementBase {\n  private _props: Partial<TProps> = {};\n  private _updateScheduled = false;\n\n  connectedCallback(): void {\n    this.scheduleRender();\n  }\n\n  attributeChangedCallback(\n    _name: string,\n    oldValue: string | null,\n    newValue: string | null,\n  ): void {\n    if (oldValue === newValue) {\n      return;\n    }\n    if (this.isConnected) {\n      this.scheduleRender();\n    }\n  }\n\n  /**\n   * Read a host attribute with optional typed parsing.\n   * Attributes remain the source of truth for declarative HTML.\n   */\n  protected attr<K extends string>(key: K): string | null;\n  protected attr<T>(\n    key: string,\n    options: VikingAttrOptions<T> & { default: T },\n  ): T;\n  protected attr<T>(key: string, options: VikingAttrOptions<T>): T | undefined;\n  protected attr<T>(\n    key: string,\n    options?: VikingAttrOptions<T>,\n  ): T | string | null | undefined {\n    const raw = this.getAttribute(key);\n    if (options?.parser) {\n      if (raw == null && options.default !== undefined) {\n        return options.default;\n      }\n      return options.parser(raw);\n    }\n    if (raw == null) {\n      return options?.default !== undefined\n        ? (String(options.default) as T)\n        : null;\n    }\n    return raw;\n  }\n\n  /** Internal reactive property (not reflected unless subclass reflects it). */\n  protected setProp<K extends keyof TProps>(key: K, value: TProps[K]): void {\n    if (Object.is(this._props[key], value)) {\n      return;\n    }\n    this._props[key] = value;\n    if (this.isConnected) {\n      this.scheduleRender();\n    }\n  }\n\n  protected getProp<K extends keyof TProps>(key: K): TProps[K] | undefined {\n    return this._props[key];\n  }\n\n  /** Public alias for subclasses / tests that need an explicit re-render. */\n  protected requestUpdate(): void {\n    this.scheduleRender();\n  }\n\n  /** Coalesce multiple attribute/prop changes into one microtask render. */\n  protected scheduleRender(): void {\n    if (this._updateScheduled) {\n      return;\n    }\n    this._updateScheduled = true;\n    queueMicrotask(() => {\n      this._updateScheduled = false;\n      if (!this.isConnected) {\n        return;\n      }\n      this.render();\n    });\n  }\n\n  /** Subclass paints light or shadow DOM. */\n  protected abstract render(): void;\n}\n","import {\n  SiteDrakkarContext,\n  SiteFooterLink,\n  SiteUrls,\n  SITE_FOOTER_COLUMNS,\n  DEFAULT_SITE_URLS,\n  resolveFooterHref,\n} from \"../../lib/site-drakkar/site-drakkar.config\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n} from \"../core/dom\";\nimport { parseNumber, parseSelect } from \"../core/parsers\";\nimport { VikingReactiveElement } from \"../core/reactive\";\n\nconst VALID_CONTEXTS = [\"app\", \"marketing\", \"backend\", \"docs\"] as const;\n\ntype FooterContext = (typeof VALID_CONTEXTS)[number];\n\nconst detectContext = (): FooterContext => {\n  if (typeof document === \"undefined\") {\n    return \"marketing\";\n  }\n  const explicit = document.documentElement.getAttribute(\"data-deml-context\");\n  if (explicit && (VALID_CONTEXTS as readonly string[]).includes(explicit)) {\n    return explicit as FooterContext;\n  }\n\n  if (typeof window === \"undefined\") {\n    return \"marketing\";\n  }\n  const host = window.location.hostname;\n  if (host.startsWith(\"backend.\")) {\n    return \"backend\";\n  }\n  if (host.startsWith(\"ui.\")) {\n    return \"docs\";\n  }\n  if (host.includes(\"deml.app\")) {\n    return \"app\";\n  }\n  return \"marketing\";\n};\n\ntype FooterProps = {\n  context: SiteDrakkarContext;\n  urls: SiteUrls;\n  year: number;\n};\n\n/**\n * viking-site-footer-wc — unified static Drakkar footer for non-Angular surfaces.\n * Extends {@link VikingReactiveElement} so multi-attr updates batch into one paint.\n */\nexport class VikingSiteFooterWc extends VikingReactiveElement<FooterProps> {\n  static readonly tag = \"viking-site-footer\";\n  static readonly legacyTag = \"viking-site-footer-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"context\",\n      \"app-url\",\n      \"marketing-url\",\n      \"backend-url\",\n      \"year\",\n      \"authenticated\",\n    ];\n  }\n\n  private readonly onAuthState = (event: Event): void => {\n    const detail = (event as CustomEvent<{ isAuthenticated?: boolean }>).detail;\n    this.toggleAttribute(\"authenticated\", detail?.isAuthenticated === true);\n  };\n\n  override connectedCallback(): void {\n    window.addEventListener(\"deml:auth-state\", this.onAuthState);\n    if (document.documentElement.dataset[\"authenticated\"] === \"true\") {\n      this.setAttribute(\"authenticated\", \"\");\n    }\n    super.connectedCallback();\n  }\n\n  disconnectedCallback(): void {\n    window.removeEventListener(\"deml:auth-state\", this.onAuthState);\n  }\n\n  private resolveContext(): SiteDrakkarContext {\n    return this.attr(\"context\", {\n      parser: (raw) =>\n        parseSelect(raw, VALID_CONTEXTS, detectContext()) as SiteDrakkarContext,\n      default: detectContext() as SiteDrakkarContext,\n    });\n  }\n\n  private resolveUrls(): SiteUrls {\n    const env =\n      (globalThis as { __DEML?: Partial<SiteUrls> & Record<string, string> })\n        .__DEML ?? {};\n    return {\n      app: this.getAttribute(\"app-url\") ?? env.app ?? DEFAULT_SITE_URLS.app,\n      marketing:\n        this.getAttribute(\"marketing-url\") ??\n        env.marketing ??\n        DEFAULT_SITE_URLS.marketing,\n      backend:\n        this.getAttribute(\"backend-url\") ??\n        env.backend ??\n        DEFAULT_SITE_URLS.backend,\n    };\n  }\n\n  private resolveYear(): number {\n    return this.attr(\"year\", {\n      parser: (raw) => parseNumber(raw, new Date().getFullYear()),\n      default: new Date().getFullYear(),\n    });\n  }\n\n  protected render(): void {\n    // Attributes are source of truth — do not setProp() here (object refs re-queue renders).\n    const context = this.resolveContext();\n    const urls = this.resolveUrls();\n    const year = this.resolveYear();\n    const authenticated = this.hasAttribute(\"authenticated\");\n\n    const links = SITE_FOOTER_COLUMNS.map((column) => {\n      const items = column.links\n        .filter((link) => !link.requireAuth || authenticated)\n        .map((link: SiteFooterLink) => {\n          const href = resolveFooterHref(link, context, urls);\n          return `\n          <li>\n            <a href=\"${escapeHtml(href)}\">${escapeHtml(link.label)}</a>\n          </li>\n        `;\n        })\n        .join(\"\");\n\n      return `\n      <div class=\"footer-column\">\n        <h2 class=\"footer-column-title\">${escapeHtml(column.title)}</h2>\n        <ul class=\"footer-list\">\n          ${items}\n        </ul>\n      </div>\n    `;\n    }).join(\"\");\n\n    this.innerHTML = `\n      <footer class=\"mega-footer\">\n        <div class=\"footer-content\">\n          <nav class=\"footer-directory\" aria-label=\"Footer Directory\">\n            ${links}\n          </nav>\n\n          <section class=\"footer-bottom\">\n            <div class=\"footer-badges-top\">\n              <span\n                class=\"usa-badge\"\n                id=\"usa-badge\"\n              >\n                <span class=\"usa-badge-icon\" aria-hidden=\"true\">🇺🇸</span>\n                <span>Made in the U.S.A</span>\n              </span>\n            </div>\n\n            <div class=\"footer-compliance-row\">\n              <div class=\"copyright-info\">\n                <span class=\"copyright-text\">\n                  Copyright © ${year} Data Engineering for Machine Learning by\n                  <a href=\"https://joealongi.dev/\" target=\"_blank\" rel=\"noopener noreferrer\">Joe Alongi</a>.\n                  All rights reserved.\n                </span>\n              </div>\n            </div>\n          </section>\n        </div>\n      </footer>\n    `;\n  }\n}\n\nexport const registerVikingSiteFooterWc = (): void => {\n  defineCustomElement(VikingSiteFooterWc.tag, VikingSiteFooterWc);\n  defineCustomElementAlias(VikingSiteFooterWc.legacyTag, VikingSiteFooterWc);\n};\n\nregisterVikingSiteFooterWc();\n","import {\n  DEFAULT_SITE_URLS,\n  SITE_NAV_LINKS,\n  SiteDrakkarContext,\n  SiteUrls,\n  resolveBrandHref,\n  resolveNavHref,\n} from \"../../lib/site-drakkar/site-drakkar.config\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\n\nconst VALID_CONTEXTS = new Set<SiteDrakkarContext>([\n  \"app\",\n  \"marketing\",\n  \"backend\",\n  \"docs\",\n]);\n\nconst detectContext = (): SiteDrakkarContext => {\n  const explicit = document.documentElement.getAttribute(\"data-deml-context\");\n  if (explicit && VALID_CONTEXTS.has(explicit as SiteDrakkarContext)) {\n    return explicit as SiteDrakkarContext;\n  }\n\n  const host = window.location.hostname;\n  if (host.startsWith(\"ui.\")) {\n    return \"docs\";\n  }\n  if (host.startsWith(\"backend.\")) {\n    return \"backend\";\n  }\n  if (host.includes(\"deml.app\")) {\n    return \"app\";\n  }\n  return \"marketing\";\n};\n\nconst readContext = (el: HTMLElement): SiteDrakkarContext => {\n  const attr = el.getAttribute(\"context\") as SiteDrakkarContext | null;\n  if (attr && VALID_CONTEXTS.has(attr)) {\n    return attr;\n  }\n  return detectContext();\n};\n\nconst readBoolAttr = (el: HTMLElement, name: string): boolean => {\n  const value = el.getAttribute(name);\n  return value !== null && value !== \"false\";\n};\n\nconst readUrls = (el: HTMLElement): SiteUrls => {\n  const env =\n    (globalThis as { __DEML?: Partial<SiteUrls> & Record<string, string> })\n      .__DEML ?? {};\n  return {\n    app: el.getAttribute(\"app-url\") ?? env.app ?? DEFAULT_SITE_URLS.app,\n    marketing:\n      el.getAttribute(\"marketing-url\") ??\n      env.marketing ??\n      DEFAULT_SITE_URLS.marketing,\n    backend:\n      el.getAttribute(\"backend-url\") ??\n      env.backend ??\n      DEFAULT_SITE_URLS.backend,\n  };\n};\n\nconst readAuthState = (el: HTMLElement): boolean =>\n  readBoolAttr(el, \"authenticated\");\n\nconst readShowSearch = (el: HTMLElement): boolean => {\n  const explicit = el.getAttribute(\"show-search\");\n  if (explicit === null) {\n    return true;\n  }\n  return readBoolAttr(el, \"show-search\");\n};\n\nconst readSignInHref = (el: HTMLElement, urls: SiteUrls): string => {\n  const explicit = el.getAttribute(\"sign-in-href\");\n  if (explicit) {\n    return explicit;\n  }\n  const landing = el.getAttribute(\"return-url\") ?? window.location.href;\n  return `${urls.app}/login?returnUrl=${encodeURIComponent(landing)}`;\n};\n\nconst renderNavIcon = (\n  name: string,\n  size: number,\n  options: { color?: string; id?: string; className?: string } = {},\n): string => {\n  const id = options.id ? ` id=\"${escapeHtml(options.id)}\"` : \"\";\n  const color = options.color\n    ? ` data-viking-icon-color=\"${escapeHtml(options.color)}\"`\n    : \"\";\n  const className = options.className\n    ? ` class=\"${escapeHtml(options.className)}\"`\n    : \"\";\n  return `<span${id}${className} data-viking-icon=\"${escapeHtml(name)}\" data-viking-icon-size=\"${size}\"${color} aria-hidden=\"true\">${renderInlineIcon(name, size, \"viking-navbar-inline-icon\")}</span>`;\n};\n\n/**\n * viking-site-navbar-wc — unified static Drakkar navbar for non-Angular surfaces.\n * Styling is supplied by viking-ui global CSS.\n */\nexport class VikingSiteNavbarWc extends HTMLElement {\n  static readonly tag = \"viking-site-navbar\";\n  static readonly legacyTag = \"viking-site-navbar-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"context\",\n      \"app-url\",\n      \"marketing-url\",\n      \"backend-url\",\n      \"authenticated\",\n      \"show-search\",\n      \"sign-in-href\",\n      \"dashboard-href\",\n      \"return-url\",\n    ];\n  }\n\n  private mobileMenuOpen = false;\n\n  connectedCallback(): void {\n    this.render();\n    this.addEventListener(\"click\", this.onHostClick);\n    document.addEventListener(\"click\", this.onDocumentClick);\n    document.addEventListener(\"keydown\", this.onDocumentKeydown);\n    window.addEventListener(\"resize\", this.onWindowResize);\n  }\n\n  disconnectedCallback(): void {\n    this.removeEventListener(\"click\", this.onHostClick);\n    document.removeEventListener(\"click\", this.onDocumentClick);\n    document.removeEventListener(\"keydown\", this.onDocumentKeydown);\n    window.removeEventListener(\"resize\", this.onWindowResize);\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.render();\n    }\n  }\n\n  private renderNavLinks(\n    context: SiteDrakkarContext,\n    urls: SiteUrls,\n    kind: \"desktop\" | \"mobile\" = \"desktop\",\n  ): string {\n    const linkClass = kind === \"mobile\" ? \"mobile-nav-btn\" : \"nav-btn\";\n    return SITE_NAV_LINKS.map((link) => {\n      const href = resolveNavHref(link, context, urls);\n      const isProtected = link.requireAuth;\n      const hidden = isProtected ? \" hidden\" : \"\";\n      const authAttr = isProtected ? ' data-require-auth=\"true\"' : \"\";\n\n      return `\n        <a\n          href=\"${escapeHtml(href)}\"\n          class=\"${linkClass}\"\n          data-nav-id=\"${escapeHtml(link.id)}\"\n          ${authAttr}\n          ${hidden}\n        >\n          ${renderNavIcon(link.icon, 16)}\n          <span>${escapeHtml(link.label)}</span>\n        </a>\n      `;\n    }).join(\"\");\n  }\n\n  private renderAuthDesktop(\n    authenticated: boolean,\n    signInHref: string,\n    dashboardHref: string,\n  ): string {\n    const href = authenticated ? dashboardHref : signInHref;\n    return `\n      <div class=\"desktop-auth\" role=\"group\" aria-label=\"Account actions\">\n        <viking-button-wc\n          variant=\"primary\"\n          class=\"auth-btn\"\n          href=\"${escapeHtml(href)}\"\n          id=\"auth-btn-desktop\"\n        >\n          ${renderNavIcon(authenticated ? \"home\" : \"arrow-right\", 16, {\n            id: \"auth-icon-desktop\",\n          })}\n          <span id=\"auth-text-desktop\">${\n            authenticated ? \"Dashboard\" : \"Sign In\"\n          }</span>\n        </viking-button-wc>\n        <viking-button-wc\n          variant=\"ghost\"\n          class=\"auth-btn auth-signout-btn\"\n          id=\"auth-signout-desktop\"\n          ${authenticated ? \"\" : \" hidden\"}\n        >\n          Sign Out\n        </viking-button-wc>\n      </div>\n    `;\n  }\n\n  private renderAuthMobile(\n    authenticated: boolean,\n    dashboardHref: string,\n    signInHref: string,\n  ): string {\n    return `\n      <div class=\"mobile-divider\"></div>\n      <viking-button-wc\n        variant=\"primary\"\n        full-width\n        class=\"mobile-auth-btn auth-btn\"\n        href=\"${escapeHtml(authenticated ? dashboardHref : signInHref)}\"\n        id=\"auth-btn-mobile\"\n      >\n        ${renderNavIcon(authenticated ? \"home\" : \"arrow-right\", 16, {\n          id: \"auth-icon-mobile\",\n        })}\n        <span id=\"auth-text-mobile\">${\n          authenticated ? \"Dashboard\" : \"Sign In\"\n        }</span>\n      </viking-button-wc>\n      <viking-button-wc\n        variant=\"ghost\"\n        full-width\n        class=\"mobile-auth-btn auth-btn auth-signout-btn\"\n        id=\"auth-signout-mobile\"\n        ${authenticated ? \"\" : \" hidden\"}\n      >\n        Sign Out\n      </viking-button-wc>\n    `;\n  }\n\n  private renderSearchButton(showSearch: boolean): string {\n    if (!showSearch) {\n      return \"\";\n    }\n\n    const shortcut = navigator.platform.match(/Mac|iPhone|iPad/i)\n      ? \"⌘K\"\n      : \"Ctrl+K\";\n    return `\n      <div class=\"navbar-search\" role=\"search\">\n        <viking-button-wc\n          variant=\"outline\"\n          square\n          compact\n          class=\"navbar-search-trigger\"\n          aria-label=\"Open search (${shortcut})\"\n          id=\"navbar-search-trigger\"\n        >\n          ${renderNavIcon(\"search\", 20)}\n        </viking-button-wc>\n      </div>\n    `;\n  }\n\n  private render(): void {\n    const context = readContext(this);\n    const urls = readUrls(this);\n    const authenticated = readAuthState(this);\n    const showSearch = readShowSearch(this);\n    const brandHref = resolveBrandHref(context, urls);\n    const signInHref = readSignInHref(this, urls);\n    const dashboardHref =\n      this.getAttribute(\"dashboard-href\") ?? `${urls.app}/dashboard`;\n    const desktopNavLinks = this.renderNavLinks(context, urls, \"desktop\");\n    const mobileNavLinks = this.renderNavLinks(context, urls, \"mobile\");\n    const desktopAuth = this.renderAuthDesktop(\n      authenticated,\n      signInHref,\n      dashboardHref,\n    );\n    const mobileAuth = this.renderAuthMobile(\n      authenticated,\n      dashboardHref,\n      signInHref,\n    );\n    const search = this.renderSearchButton(showSearch);\n\n    this.innerHTML = `\n      <header class=\"navbar\">\n        <div class=\"navbar-content\">\n          <div class=\"navbar-left\">\n            <a href=\"${escapeHtml(brandHref)}\" class=\"navbar-brand\" aria-label=\"Go to homepage\" id=\"navbar-brand-link\">\n              ${renderNavIcon(\"drakkar\", 28, {\n                color: \"accent\",\n                className: \"brand-icon navbar-logo\",\n              })}\n            </a>\n          </div>\n\n          <nav class=\"navbar-center desktop-nav\" aria-label=\"Main navigation\">\n            ${desktopNavLinks}\n          </nav>\n\n          <div class=\"navbar-right\">\n            ${search}\n            ${desktopAuth}\n            <viking-theme-toggle-wc class=\"theme-toggle-btn\" aria-label=\"Toggle light and dark theme\"></viking-theme-toggle-wc>\n            <viking-button-wc\n              variant=\"outline\"\n              square\n              class=\"menu-toggle-btn\"\n              aria-label=\"Toggle navigation menu\"\n              aria-controls=\"mobile-menu\"\n              aria-expanded=\"false\"\n              id=\"mobile-menu-btn\"\n            >\n              ${renderNavIcon(\"menu\", 24)}\n            </viking-button-wc>\n          </div>\n        </div>\n\n        <nav class=\"mobile-menu\" id=\"mobile-menu\" aria-label=\"Mobile navigation\" hidden>\n          ${mobileNavLinks}\n          ${mobileAuth}\n        </nav>\n      </header>\n    `;\n    this.syncMobileMenu();\n  }\n\n  private readonly onHostClick = (event: Event): void => {\n    const path =\n      typeof event.composedPath === \"function\" ? event.composedPath() : [];\n    const clickedToggle = path.some(\n      (node) => node instanceof HTMLElement && node.id === \"mobile-menu-btn\",\n    );\n\n    if (clickedToggle) {\n      event.preventDefault();\n      this.toggleMobileMenu();\n      return;\n    }\n\n    const clickedMobileItem = path.some(\n      (node) =>\n        node instanceof HTMLElement &&\n        node.closest?.(\"#mobile-menu\") &&\n        (node.matches(\"a\") || node.matches(\"viking-button-wc\")),\n    );\n\n    if (clickedMobileItem) {\n      this.closeMobileMenu();\n    }\n  };\n\n  private readonly onDocumentClick = (event: MouseEvent): void => {\n    if (!this.mobileMenuOpen) {\n      return;\n    }\n    const target = event.target;\n    if (target instanceof Node && !this.contains(target)) {\n      this.closeMobileMenu();\n    }\n  };\n\n  private readonly onDocumentKeydown = (event: KeyboardEvent): void => {\n    if (event.key === \"Escape\") {\n      this.closeMobileMenu();\n    }\n  };\n\n  private readonly onWindowResize = (): void => {\n    if (window.matchMedia(\"(min-width: 768px)\").matches) {\n      this.closeMobileMenu();\n    }\n  };\n\n  private toggleMobileMenu(): void {\n    this.mobileMenuOpen = !this.mobileMenuOpen;\n    this.syncMobileMenu();\n  }\n\n  private closeMobileMenu(): void {\n    if (!this.mobileMenuOpen) {\n      return;\n    }\n    this.mobileMenuOpen = false;\n    this.syncMobileMenu();\n  }\n\n  private syncMobileMenu(): void {\n    const menu = this.querySelector<HTMLElement>(\"#mobile-menu\");\n    const toggle = this.querySelector<HTMLElement>(\"#mobile-menu-btn\");\n    if (!menu || !toggle) {\n      return;\n    }\n\n    menu.classList.toggle(\"open\", this.mobileMenuOpen);\n    menu.toggleAttribute(\"hidden\", !this.mobileMenuOpen);\n    toggle.setAttribute(\n      \"aria-expanded\",\n      this.mobileMenuOpen ? \"true\" : \"false\",\n    );\n    toggle.setAttribute(\n      \"aria-label\",\n      this.mobileMenuOpen ? \"Close navigation menu\" : \"Toggle navigation menu\",\n    );\n    toggle.innerHTML = renderNavIcon(this.mobileMenuOpen ? \"x\" : \"menu\", 24);\n  }\n}\n\nexport const registerVikingSiteNavbarWc = (): void => {\n  defineCustomElement(VikingSiteNavbarWc.tag, VikingSiteNavbarWc);\n  defineCustomElementAlias(VikingSiteNavbarWc.legacyTag, VikingSiteNavbarWc);\n};\n","import type {\n  SiteDrakkarContext,\n  SiteFooterLink,\n  SiteNavLink,\n  SiteUrls,\n} from \"./site-drakkar.config\";\nimport {\n  SITE_FOOTER_COLUMNS,\n  SITE_NAV_LINKS,\n  bugReportHref,\n  cookieSettingsHref,\n  resolveFooterHref,\n  resolveNavHref,\n} from \"./site-drakkar.config\";\n\n/** Curated command-palette entry for cross-surface navigation. */\nexport type SuiteSearchItem = {\n  title: string;\n  href: string;\n  snippet?: string;\n  group?: string;\n  keywords?: string[];\n  action?: \"cookie-settings\" | \"bug-report\";\n};\n\nconst dedupeItems = (items: SuiteSearchItem[]): SuiteSearchItem[] => {\n  const seen = new Set<string>();\n  return items.filter((item) => {\n    const key = `${item.title}:${item.href}:${item.action ?? \"\"}`;\n    if (seen.has(key)) {\n      return false;\n    }\n    seen.add(key);\n    return true;\n  });\n};\n\nconst navItem = (\n  link: SiteNavLink,\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n): SuiteSearchItem => ({\n  title: link.label,\n  href: resolveNavHref(link, context, urls),\n  snippet: `Open ${link.label}`,\n  group: \"Platform\",\n  keywords: [link.id, link.label.toLowerCase(), \"navigate\", \"go\"],\n});\n\nconst footerItem = (\n  link: SiteFooterLink,\n  columnTitle: string,\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n): SuiteSearchItem => {\n  if (link.action === \"cookie-settings\") {\n    return {\n      title: link.label,\n      href: cookieSettingsHref(urls),\n      snippet: \"Manage analytics and cookie preferences\",\n      group: columnTitle,\n      keywords: [\"cookies\", \"consent\", \"privacy\", \"gdpr\"],\n      action: \"cookie-settings\",\n    };\n  }\n\n  if (link.action === \"bug-report\") {\n    return {\n      title: link.label,\n      href: context === \"app\" ? \"#\" : bugReportHref(urls),\n      snippet: \"Submit a product issue or regression\",\n      group: columnTitle,\n      keywords: [\"bug\", \"issue\", \"support\", \"feedback\"],\n      action: \"bug-report\",\n    };\n  }\n\n  return {\n    title: link.label,\n    href: resolveFooterHref(link, context, urls),\n    snippet: `Open ${link.label}`,\n    group: columnTitle,\n    keywords: [link.label.toLowerCase(), columnTitle.toLowerCase()],\n  };\n};\n\n/** Static entries that are not derived from Drakkar nav/footer config. */\nconst SUITE_SEARCH_EXTRAS: readonly Omit<SuiteSearchItem, \"href\">[] = [\n  {\n    title: \"DEML product showcase\",\n    snippet: \"Operational intelligence product home on deml.app\",\n    group: \"Resources\",\n    keywords: [\"deml\", \"product\", \"showcase\", \"docs\", \"quick start\"],\n  },\n  {\n    title: \"DEML Swagger\",\n    snippet: \"Interactive DEML control-plane OpenAPI\",\n    group: \"Resources\",\n    keywords: [\"api\", \"openapi\", \"swagger\", \"rest\", \"deml\"],\n  },\n  {\n    title: \"DEML ReDoc\",\n    snippet: \"Readable DEML control-plane API reference\",\n    group: \"Resources\",\n    keywords: [\"api\", \"openapi\", \"redoc\", \"rest\", \"deml\"],\n  },\n  {\n    title: \"FORJD capabilities\",\n    snippet: \"Public FORJD capability matrix (data plane)\",\n    group: \"Resources\",\n    keywords: [\"api\", \"capabilities\", \"forjd\", \"streaming\"],\n  },\n];\n\nconst resolveExtraHref = (\n  extra: (typeof SUITE_SEARCH_EXTRAS)[number],\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n): string => {\n  switch (extra.title) {\n    case \"DEML product showcase\":\n      return `${urls.app.replace(/\\/$/, \"\")}/`;\n    case \"DEML Swagger\":\n      return `${urls.backend.replace(/\\/$/, \"\")}/api/v1/docs`;\n    case \"DEML ReDoc\":\n      return `${urls.backend.replace(/\\/$/, \"\")}/api/v1/redoc`;\n    case \"FORJD capabilities\":\n      return \"https://backend.forjd.co/api/v1/capabilities\";\n    default:\n      return context === \"app\" ? urls.app : urls.marketing;\n  }\n};\n\n/**\n * Builds curated command-palette links for deml.app, marketing, and backend.\n * Used by the static widget and Angular `viking-suite-search-palette`.\n */\nexport const buildSuiteSearchItems = (\n  context: SiteDrakkarContext,\n  urls: SiteUrls,\n  options?: { docsOrigin?: string; authenticated?: boolean },\n): SuiteSearchItem[] => {\n  const authenticated = options?.authenticated ?? context === \"app\";\n\n  const items: SuiteSearchItem[] = [\n    ...SITE_NAV_LINKS.filter((link) => !link.requireAuth || authenticated).map(\n      (link) => navItem(link, context, urls),\n    ),\n    ...SITE_FOOTER_COLUMNS.flatMap((column) =>\n      column.links\n        .filter((link) => !link.requireAuth || authenticated)\n        .map((link) => footerItem(link, column.title, context, urls)),\n    ),\n    ...SUITE_SEARCH_EXTRAS.map((extra) => ({\n      ...extra,\n      href: resolveExtraHref(extra, context, urls),\n    })),\n  ];\n\n  if (context === \"app\") {\n    items.push(\n      {\n        title: \"Explore status pages\",\n        href: \"/explore\",\n        snippet: \"Public status directory\",\n        group: \"App\",\n        keywords: [\"explore\", \"status\", \"directory\", \"public\"],\n      },\n      {\n        title: \"Platform status\",\n        href: \"/status/platform-status\",\n        snippet: \"Live public sentinel for the DEML stack\",\n        group: \"App\",\n        keywords: [\"platform-status\", \"tenant0\", \"health\", \"sla\"],\n      },\n      {\n        title: \"Login\",\n        href: \"/login\",\n        snippet: \"Sign in or complete SMS MFA\",\n        group: \"App\",\n        keywords: [\"login\", \"sign in\", \"auth\", \"mfa\"],\n      },\n    );\n\n    if (authenticated) {\n      items.push(\n        {\n          title: \"Dashboard\",\n          href: \"/dashboard\",\n          snippet: \"CES overview, KPIs, and performance telemetry\",\n          group: \"App\",\n          keywords: [\"dashboard\", \"ces\", \"home\", \"overview\", \"kpi\"],\n        },\n        {\n          title: \"Analytics\",\n          href: \"/analytics\",\n          snippet: \"Latency, origins, threat charts, and gauges\",\n          group: \"App\",\n          keywords: [\"analytics\", \"charts\", \"latency\", \"map\", \"threat\"],\n        },\n        {\n          title: \"Status pages\",\n          href: \"/status\",\n          snippet: \"Your published and draft status surfaces\",\n          group: \"App\",\n          keywords: [\"status\", \"pages\", \"uptime\", \"incidents\"],\n        },\n        {\n          title: \"Vulnerabilities\",\n          href: \"/vulnerabilities\",\n          snippet: \"SOC triage and vulnerability Kanban\",\n          group: \"App\",\n          keywords: [\"vulnerabilities\", \"soc\", \"semgrep\", \"trivy\", \"kanban\"],\n        },\n        {\n          title: \"Account\",\n          href: \"/account\",\n          snippet: \"Profile, MFA enrollment, and linked accounts\",\n          group: \"App\",\n          keywords: [\"account\", \"profile\", \"mfa\", \"oauth\"],\n        },\n        {\n          title: \"Settings\",\n          href: \"/settings\",\n          snippet: \"Workspace domains, billing, and security\",\n          group: \"App\",\n          keywords: [\"settings\", \"sites\", \"workspace\", \"configuration\"],\n        },\n        {\n          title: \"Billing & subscription\",\n          href: \"/settings/billing\",\n          snippet: \"Manage plan, invoices, and payment methods\",\n          group: \"App\",\n          keywords: [\"billing\", \"stripe\", \"subscription\", \"payment\"],\n        },\n        {\n          title: \"Security settings\",\n          href: \"/settings/security\",\n          snippet: \"Keys, sessions, and access controls\",\n          group: \"App\",\n          keywords: [\"security\", \"keys\", \"auth\", \"rbac\"],\n        },\n      );\n    }\n  }\n\n  if (context === \"backend\") {\n    items.push(\n      {\n        title: \"OpenAPI / Swagger\",\n        href: `${urls.backend.replace(/\\/$/, \"\")}/api/v1/docs`,\n        snippet: \"Interactive DEML control-plane sandbox\",\n        group: \"Backend\",\n        keywords: [\"swagger\", \"openapi\", \"docs\", \"api\"],\n      },\n      {\n        title: \"ReDoc\",\n        href: `${urls.backend.replace(/\\/$/, \"\")}/api/v1/redoc`,\n        snippet: \"Readable DEML control-plane reference\",\n        group: \"Backend\",\n        keywords: [\"redoc\", \"openapi\", \"docs\", \"api\"],\n      },\n    );\n  }\n\n  return dedupeItems(items);\n};\n","/**\n * Lightweight Algolia multi-index search for suite command palette.\n * Uses public search-only key from window.ALGOLIA_CONFIG — no SDK runtime.\n */\n\nexport type AlgoliaConfig = {\n  appId?: string;\n  apiKey?: string;\n  indexNames?: string[];\n  env?: string;\n};\n\nexport type AlgoliaHitItem = {\n  title: string;\n  href: string;\n  snippet?: string;\n  group?: string;\n  keywords?: string[];\n};\n\n/** DocSearch / crawler hierarchy levels commonly present on page indexes. */\nexport type AlgoliaHierarchy = {\n  lvl0?: string;\n  lvl1?: string;\n  lvl2?: string;\n  lvl3?: string;\n  lvl4?: string;\n  lvl5?: string;\n  lvl6?: string;\n};\n\n/** Raw hit shape retrieved from suite page indexes. */\nexport type AlgoliaPageHit = {\n  objectID?: string;\n  url?: string;\n  url_without_anchor?: string;\n  permalink?: string;\n  link?: string;\n  title?: string;\n  description?: string;\n  content?: string;\n  path?: string;\n  hostname?: string;\n  keywords?: string;\n  hierarchy?: AlgoliaHierarchy;\n  type?: string;\n};\n\ntype AlgoliaMultiQueryResult = {\n  hits?: AlgoliaPageHit[];\n  index?: string;\n};\n\ntype AlgoliaMultiQueryResponse = {\n  results?: AlgoliaMultiQueryResult[];\n};\n\ntype AlgoliaGlobal = typeof globalThis & {\n  ALGOLIA_CONFIG?: AlgoliaConfig;\n};\n\nconst DEFAULT_INDEXES: readonly string[] = [\n  \"dataengineeringformachinelearning_com_zjafyosh2v_pages\",\n  \"deml_app_pages\",\n  \"deml_backend_pages\",\n];\n\n/** Map crawler index names → public origin when hits only store path. */\nconst INDEX_ORIGIN: Readonly<Record<string, string>> = {\n  dataengineeringformachinelearning_com_zjafyosh2v_pages:\n    \"https://dataengineeringformachinelearning.com\",\n  deml_app_pages: \"https://deml.app\",\n  deml_backend_pages: \"https://backend.deml.app\",\n};\n\nconst readConfig = (): AlgoliaConfig => {\n  if (typeof globalThis === \"undefined\") {\n    return {};\n  }\n  return (globalThis as AlgoliaGlobal).ALGOLIA_CONFIG ?? {};\n};\n\nconst asString = (value: unknown): string | null =>\n  typeof value === \"string\" && value.trim() ? value : null;\n\nconst asHttpUrl = (value: unknown): string | null => {\n  const raw = asString(value);\n  if (!raw) {\n    return null;\n  }\n  if (/^https?:\\/\\//i.test(raw)) {\n    return raw;\n  }\n  return null;\n};\n\nconst resolveHitUrl = (\n  hit: AlgoliaPageHit,\n  indexName: string,\n): string | null => {\n  const objectId = asString(hit.objectID);\n  const direct =\n    asHttpUrl(hit.url) ||\n    asHttpUrl(hit.url_without_anchor) ||\n    asHttpUrl(hit.permalink) ||\n    asHttpUrl(hit.link) ||\n    asHttpUrl(objectId);\n  if (direct) {\n    return direct;\n  }\n\n  const path = asString(hit.path);\n  if (!path) {\n    return null;\n  }\n\n  const hostname = asString(hit.hostname);\n  const origin =\n    INDEX_ORIGIN[indexName] ||\n    (hostname ? `https://${hostname.replace(/^https?:\\/\\//i, \"\")}` : null);\n  if (!origin) {\n    return null;\n  }\n  try {\n    return new URL(path.startsWith(\"/\") ? path : `/${path}`, origin).href;\n  } catch {\n    return null;\n  }\n};\n\nconst hitToItem = (\n  hit: AlgoliaPageHit,\n  indexName: string,\n): AlgoliaHitItem | null => {\n  const url = resolveHitUrl(hit, indexName);\n  if (!url) {\n    return null;\n  }\n\n  const hierarchy = hit.hierarchy;\n  const title =\n    asString(hit.title) ||\n    asString(hierarchy?.lvl1) ||\n    asString(hierarchy?.lvl0) ||\n    asString(hit.path) ||\n    url;\n\n  const description =\n    asString(hit.description) ||\n    (asString(hit.content) ?? \"\").slice(0, 160) ||\n    asString(hierarchy?.lvl2) ||\n    \"\";\n\n  let hostname = asString(hit.hostname);\n  if (!hostname) {\n    try {\n      hostname = new URL(url).hostname;\n    } catch {\n      hostname = indexName;\n    }\n  }\n\n  const keywordField = asString(hit.keywords);\n  const path = asString(hit.path) ?? \"\";\n\n  return {\n    title: title.slice(0, 120),\n    href: url,\n    snippet: description\n      ? `${hostname} · ${description.slice(0, 140)}`\n      : hostname,\n    group: \"Live pages\",\n    keywords: [\n      hostname,\n      indexName,\n      path,\n      ...(keywordField ? keywordField.split(/[,\\s]+/).filter(Boolean) : []),\n    ].filter((value): value is string => Boolean(value)),\n  };\n};\n\n/**\n * Query all configured Algolia page indexes. Returns empty array when\n * config/key missing or network fails (callers fall back to curated items).\n */\nexport const searchAlgoliaPages = async (\n  query: string,\n  options?: { hitsPerPage?: number; signal?: AbortSignal },\n): Promise<AlgoliaHitItem[]> => {\n  const q = query.trim();\n  if (!q || q.length < 2) {\n    return [];\n  }\n\n  const cfg = readConfig();\n  const appId = cfg.appId || \"ZJAFYOSH2V\";\n  const apiKey = cfg.apiKey || \"\";\n  if (!apiKey) {\n    return [];\n  }\n\n  const indexes =\n    cfg.indexNames && cfg.indexNames.length > 0\n      ? cfg.indexNames\n      : [...DEFAULT_INDEXES];\n  const hitsPerPage = options?.hitsPerPage ?? 8;\n\n  const endpoint = `https://${appId}-dsn.algolia.net/1/indexes/*/queries`;\n  try {\n    const response = await fetch(endpoint, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-Algolia-Application-Id\": appId,\n        \"X-Algolia-API-Key\": apiKey,\n      },\n      body: JSON.stringify({\n        requests: indexes.map((indexName) => ({\n          indexName,\n          params: new URLSearchParams({\n            query: q,\n            hitsPerPage: String(hitsPerPage),\n            attributesToRetrieve: [\n              \"url\",\n              \"url_without_anchor\",\n              \"permalink\",\n              \"link\",\n              \"title\",\n              \"description\",\n              \"content\",\n              \"path\",\n              \"hostname\",\n              \"keywords\",\n              \"hierarchy\",\n              \"type\",\n              \"objectID\",\n            ].join(\",\"),\n            attributesToHighlight: \"[]\",\n          }).toString(),\n        })),\n      }),\n      signal: options?.signal,\n    });\n\n    if (!response.ok) {\n      return [];\n    }\n\n    const payload = (await response.json()) as AlgoliaMultiQueryResponse;\n\n    const seen = new Set<string>();\n    const items: AlgoliaHitItem[] = [];\n\n    (payload.results ?? []).forEach((result, index) => {\n      const indexName = result.index || indexes[index] || \"pages\";\n      (result.hits ?? []).forEach((hit) => {\n        const item = hitToItem(hit, indexName);\n        if (!item || seen.has(item.href)) {\n          return;\n        }\n        seen.add(item.href);\n        items.push(item);\n      });\n    });\n\n    return items;\n  } catch {\n    return [];\n  }\n};\n\nexport const ALGOLIA_DEFAULT_INDEXES = DEFAULT_INDEXES;\n","import {\n  DEFAULT_SITE_URLS,\n  type SiteDrakkarContext,\n  type SiteUrls,\n} from \"../../lib/site-drakkar/site-drakkar.config\";\nimport { buildSuiteSearchItems } from \"../../lib/site-drakkar/suite-search-items\";\nimport { searchAlgoliaPages } from \"../core/algolia-search\";\nimport { readBoolAttr } from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  HTMLElementBase,\n} from \"../core/dom\";\nimport {\n  VikingSearchPaletteWc,\n  registerVikingSearchPaletteWc,\n  type VikingSearchPaletteItem,\n} from \"../search-palette/viking-search-palette-wc\";\n\nconst VALID_CONTEXTS = new Set<SiteDrakkarContext>([\n  \"app\",\n  \"marketing\",\n  \"backend\",\n  \"docs\",\n]);\n\nconst detectContext = (): SiteDrakkarContext => {\n  const explicit = document.documentElement.getAttribute(\"data-deml-context\");\n  if (explicit && VALID_CONTEXTS.has(explicit as SiteDrakkarContext)) {\n    return explicit as SiteDrakkarContext;\n  }\n\n  const host = window.location.hostname;\n  if (host.startsWith(\"ui.\")) {\n    return \"docs\";\n  }\n  if (host.includes(\"deml.app\") && !host.startsWith(\"backend.\")) {\n    return \"app\";\n  }\n  if (host.startsWith(\"backend.\")) {\n    return \"backend\";\n  }\n  return \"marketing\";\n};\n\nconst readUrls = (el: HTMLElement): SiteUrls => {\n  const env = (globalThis as { __DEML?: Partial<SiteUrls> }).__DEML ?? {};\n  return {\n    app: el.getAttribute(\"app-url\") ?? env.app ?? DEFAULT_SITE_URLS.app,\n    marketing:\n      el.getAttribute(\"marketing-url\") ??\n      env.marketing ??\n      DEFAULT_SITE_URLS.marketing,\n    backend:\n      el.getAttribute(\"backend-url\") ??\n      env.backend ??\n      DEFAULT_SITE_URLS.backend,\n  };\n};\n\nconst readContext = (el: HTMLElement): SiteDrakkarContext => {\n  const raw = el.getAttribute(\"context\");\n  if (raw && VALID_CONTEXTS.has(raw as SiteDrakkarContext)) {\n    return raw as SiteDrakkarContext;\n  }\n  return detectContext();\n};\n\nconst readAuthenticated = (el: HTMLElement): boolean =>\n  el.hasAttribute(\"authenticated\") ||\n  document.documentElement.dataset[\"authenticated\"] === \"true\";\n\n/**\n * Unified cross-suite command palette Web Component.\n * Tag: `viking-suite-command-palette`\n * Aliases: `viking-suite-search-palette`, `viking-suite-search-palette-wc`\n *\n * Curated ⌘K navigation for marketing, docs, deml.app, and backend surfaces.\n * Composes `viking-command-palette` with suite links from site-drakkar config.\n *\n * @attr context - Surface: app | marketing | backend | docs (auto-detected when omitted)\n * @attr app-url - Override deml.app origin\n * @attr marketing-url - Override marketing origin\n * @attr backend-url - Override backend origin\n * @attr global-shortcut - Bind ⌘K / Ctrl+K (default: on)\n * @attr placeholder - Search input placeholder\n * @attr authenticated - Include account-only navigation entries\n *\n * @method openPalette() - Programmatically open\n * @method closePalette() - Programmatically close\n *\n * @example\n * <viking-suite-command-palette context=\"marketing\" global-shortcut></viking-suite-command-palette>\n */\nexport class VikingSuiteSearchPaletteWc extends HTMLElementBase {\n  static readonly tag = \"viking-suite-command-palette\";\n  static readonly searchTag = \"viking-suite-search-palette\";\n  static readonly legacyTag = \"viking-suite-search-palette-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"context\",\n      \"app-url\",\n      \"marketing-url\",\n      \"backend-url\",\n      \"placeholder\",\n      \"global-shortcut\",\n      \"authenticated\",\n    ];\n  }\n\n  private paletteEl: VikingSearchPaletteWc | null = null;\n  private itemsLoaded = false;\n  private curatedItems: VikingSearchPaletteItem[] = [];\n  private queryTimer: ReturnType<typeof setTimeout> | null = null;\n  private searchAbort: AbortController | null = null;\n  private readonly onAuthState = (event: Event): void => {\n    const detail = (event as CustomEvent<{ isAuthenticated?: boolean }>).detail;\n    this.toggleAttribute(\"authenticated\", detail?.isAuthenticated === true);\n  };\n  private readonly onPaletteQuery = (event: Event): void => {\n    const detail = (event as CustomEvent<{ query?: string }>).detail;\n    const query = detail?.query ?? \"\";\n    this.scheduleAlgoliaSearch(query);\n  };\n\n  connectedCallback(): void {\n    registerVikingSearchPaletteWc();\n    window.addEventListener(\"deml:auth-state\", this.onAuthState);\n    this.ensurePalette();\n    void this.loadItems();\n  }\n\n  disconnectedCallback(): void {\n    window.removeEventListener(\"deml:auth-state\", this.onAuthState);\n    this.paletteEl?.removeEventListener(\"viking-query\", this.onPaletteQuery);\n    if (this.queryTimer) {\n      clearTimeout(this.queryTimer);\n      this.queryTimer = null;\n    }\n    this.searchAbort?.abort();\n  }\n\n  attributeChangedCallback(name: string): void {\n    if (!this.isConnected) {\n      return;\n    }\n    if (name === \"placeholder\" && this.paletteEl) {\n      const placeholder =\n        this.getAttribute(\"placeholder\") ??\n        \"Search documentation, dashboard, settings…\";\n      this.paletteEl.setAttribute(\"placeholder\", placeholder);\n      return;\n    }\n    if (name === \"global-shortcut\" && this.paletteEl) {\n      if (\n        readBoolAttr(this, \"global-shortcut\") ||\n        !this.hasAttribute(\"global-shortcut\")\n      ) {\n        this.paletteEl.setAttribute(\"global-shortcut\", \"\");\n      } else {\n        this.paletteEl.removeAttribute(\"global-shortcut\");\n      }\n      return;\n    }\n    if (\n      name === \"context\" ||\n      name === \"app-url\" ||\n      name === \"marketing-url\" ||\n      name === \"backend-url\" ||\n      name === \"authenticated\"\n    ) {\n      void this.loadItems(true);\n    }\n  }\n\n  /** Opens the unified command palette. */\n  openPalette(): void {\n    this.ensurePalette();\n    void this.loadItems().then(() => this.paletteEl?.openPalette());\n  }\n\n  /** Closes the unified command palette. */\n  closePalette(): void {\n    this.paletteEl?.closePalette();\n  }\n\n  private ensurePalette(): void {\n    if (this.paletteEl) {\n      return;\n    }\n\n    this.paletteEl = document.createElement(\n      \"viking-command-palette\",\n    ) as VikingSearchPaletteWc;\n    this.paletteEl.id = \"deml-command-palette\";\n\n    const placeholder =\n      this.getAttribute(\"placeholder\") ??\n      \"Search documentation, dashboard, settings…\";\n    this.paletteEl.setAttribute(\"placeholder\", placeholder);\n\n    if (\n      readBoolAttr(this, \"global-shortcut\") ||\n      !this.hasAttribute(\"global-shortcut\")\n    ) {\n      this.paletteEl.setAttribute(\"global-shortcut\", \"\");\n    }\n\n    this.paletteEl.addEventListener(\"viking-query\", this.onPaletteQuery);\n    this.append(this.paletteEl);\n  }\n\n  private scheduleAlgoliaSearch(query: string): void {\n    if (this.queryTimer) {\n      clearTimeout(this.queryTimer);\n    }\n    this.queryTimer = setTimeout(() => {\n      void this.mergeAlgoliaResults(query);\n    }, 180);\n  }\n\n  private async mergeAlgoliaResults(query: string): Promise<void> {\n    if (!this.paletteEl) {\n      return;\n    }\n    if (!this.itemsLoaded) {\n      await this.loadItems();\n    }\n\n    const q = query.trim();\n    if (q.length < 2) {\n      this.paletteEl.setAttribute(\"items\", JSON.stringify(this.curatedItems));\n      return;\n    }\n\n    this.searchAbort?.abort();\n    this.searchAbort = new AbortController();\n\n    const remote = await searchAlgoliaPages(q, {\n      hitsPerPage: 6,\n      signal: this.searchAbort.signal,\n    });\n\n    const curatedMatches = this.curatedItems;\n    const seen = new Set(\n      curatedMatches.map((item) => item.href.replace(/\\/$/, \"\")),\n    );\n    const remoteOnly = remote\n      .filter((item) => {\n        const key = item.href.replace(/\\/$/, \"\");\n        if (seen.has(key)) {\n          return false;\n        }\n        seen.add(key);\n        return true;\n      })\n      .map((item) => ({\n        ...item,\n        // Ensure local substring filter keeps Algolia fuzzy hits visible.\n        keywords: [...(item.keywords ?? []), q, item.title, item.href],\n      })) as VikingSearchPaletteItem[];\n\n    this.paletteEl.setAttribute(\n      \"items\",\n      JSON.stringify([...curatedMatches, ...remoteOnly]),\n    );\n  }\n\n  private async loadItems(force = false): Promise<void> {\n    if (!this.paletteEl || (this.itemsLoaded && !force)) {\n      return;\n    }\n\n    const context = readContext(this);\n    const urls = readUrls(this);\n    const docsOrigin =\n      context === \"docs\" ? window.location.origin : \"https://deml.app\";\n    let items: VikingSearchPaletteItem[] = buildSuiteSearchItems(\n      context,\n      urls,\n      {\n        docsOrigin,\n        authenticated: readAuthenticated(this),\n      },\n    );\n\n    try {\n      // Product apps serve under /assets/; Storybook also mounts dist at /.\n      const response =\n        (await fetch(\"/assets/site-drakkar.json\", { cache: \"no-cache\" }).catch(\n          () => null,\n        )) ||\n        (await fetch(\"/site-drakkar.json\", { cache: \"no-cache\" }).catch(\n          () => null,\n        ));\n      if (response?.ok) {\n        // Config presence validates CDN path; curated builder remains SSoT.\n        items = buildSuiteSearchItems(context, urls, {\n          docsOrigin,\n          authenticated: readAuthenticated(this),\n        });\n      }\n    } catch {\n      // Bundled config is authoritative when JSON is unavailable.\n    }\n\n    this.curatedItems = items;\n    this.paletteEl.setAttribute(\"items\", JSON.stringify(items));\n    this.itemsLoaded = true;\n  }\n}\n\nexport const registerVikingSuiteSearchPaletteWc = (): void => {\n  defineCustomElement(\n    VikingSuiteSearchPaletteWc.tag,\n    VikingSuiteSearchPaletteWc,\n  );\n  defineCustomElementAlias(\n    VikingSuiteSearchPaletteWc.searchTag,\n    VikingSuiteSearchPaletteWc,\n  );\n  defineCustomElementAlias(\n    VikingSuiteSearchPaletteWc.legacyTag,\n    VikingSuiteSearchPaletteWc,\n  );\n};\n","import { attachShadowStyles } from \"../core/base\";\nimport { defineCustomElement, HTMLElementBase } from \"../core/dom\";\nimport {\n  SUITE_THEME_CHANGE_EVENT,\n  applySuiteTheme,\n  dispatchSuiteThemeChange,\n  ensureSuiteSystemThemeListener,\n  prefersDarkScheme,\n  readSuiteThemePreference,\n  resolveSuiteTheme,\n  toggleSuiteThemePreference,\n  writeSuiteThemePreference,\n  type SuiteThemePreference,\n  type SuiteThemeResolved,\n} from \"../../core/theme\";\n\nconst VIKING_THEME_TOGGLE_STYLES = `\n:host { display: inline-flex; }\n.theme-toggle-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  width: var(--suite-control-height, var(--viking-control-height, 40px));\n  height: var(--suite-control-height, var(--viking-control-height, 40px));\n  min-width: var(--suite-touch, 44px);\n  min-height: var(--suite-touch, 44px);\n  padding: 0;\n  border: 1px solid color-mix(in srgb, var(--suite-primary, var(--viking-accent)) 32%, var(--suite-border-strong, var(--viking-border)));\n  border-radius: var(--suite-radius-control, var(--viking-radius));\n  background: color-mix(in srgb, var(--suite-primary, var(--viking-accent)) 8%, var(--suite-surface, var(--viking-surface)));\n  color: var(--suite-primary, var(--viking-accent-strong, var(--viking-ring)));\n  box-shadow: var(--suite-shadow-sm, var(--viking-shadow-sm));\n  cursor: pointer;\n  transition: var(--suite-transition, var(--viking-transition-interactive));\n  -webkit-tap-highlight-color: transparent;\n}\n.theme-toggle-btn:hover {\n  border-color: var(--suite-primary-hover, var(--viking-accent-strong));\n  background: color-mix(in srgb, var(--suite-primary, var(--viking-accent)) 14%, var(--suite-surface-2, var(--viking-surface-alt)));\n  box-shadow: var(--suite-shadow-md, var(--viking-shadow-md));\n}\n.theme-toggle-btn:focus-visible {\n  outline: var(--suite-ring-width, 2px) solid var(--suite-ring, var(--viking-ring));\n  outline-offset: var(--suite-ring-offset, 2px);\n}\n.theme-icon { display: none; }\n.theme-icon.is-visible { display: block; }\n@media (min-width: 768px) {\n  .theme-toggle-btn {\n    min-width: var(--suite-control-height, 40px);\n    min-height: var(--suite-control-height, 40px);\n  }\n}\n`;\n\nconst currentResolved = (): SuiteThemeResolved =>\n  resolveSuiteTheme(readSuiteThemePreference(), prefersDarkScheme());\n\n/**\n * Framework-agnostic theme toggle Web Component.\n * Tag: `viking-theme-toggle-wc`\n */\nexport class VikingThemeToggleWc extends HTMLElementBase {\n  static readonly tag = \"viking-theme-toggle-wc\";\n\n  private readonly shadow: ShadowRoot;\n  private button: HTMLButtonElement | null = null;\n  private sunIcon: SVGElement | null = null;\n  private moonIcon: SVGElement | null = null;\n\n  private readonly onStorage = (): void => {\n    this.syncIcons();\n  };\n\n  private readonly onThemeChange = (): void => {\n    this.syncIcons();\n  };\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_THEME_TOGGLE_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n    this.syncIcons();\n    this.button?.addEventListener(\"click\", this.onClick);\n    window.addEventListener(\"storage\", this.onStorage);\n    // Canonical event only — avoid double sync from legacy viking-theme-change\n    window.addEventListener(SUITE_THEME_CHANGE_EVENT, this.onThemeChange);\n    // One document-level OS sync; this instance only refreshes icons\n    ensureSuiteSystemThemeListener();\n  }\n\n  disconnectedCallback(): void {\n    this.button?.removeEventListener(\"click\", this.onClick);\n    window.removeEventListener(\"storage\", this.onStorage);\n    window.removeEventListener(SUITE_THEME_CHANGE_EVENT, this.onThemeChange);\n  }\n\n  private readonly onClick = (): void => {\n    const preference = readSuiteThemePreference();\n    const next: SuiteThemePreference = toggleSuiteThemePreference(\n      preference,\n      prefersDarkScheme(),\n    );\n    writeSuiteThemePreference(next);\n    const resolved = resolveSuiteTheme(next, prefersDarkScheme());\n    applySuiteTheme(resolved);\n    dispatchSuiteThemeChange({ preference: next, resolved });\n    this.syncIcons();\n  };\n\n  private syncIcons = (): void => {\n    const isDark = currentResolved() === \"dark\";\n    this.sunIcon?.classList.toggle(\"is-visible\", isDark);\n    this.moonIcon?.classList.toggle(\"is-visible\", !isDark);\n    const pref = readSuiteThemePreference();\n    const label =\n      pref === \"system\"\n        ? isDark\n          ? \"Theme: system (dark). Switch to light\"\n          : \"Theme: system (light). Switch to dark\"\n        : isDark\n          ? \"Theme: dark. Switch to light\"\n          : \"Theme: light. Switch to dark\";\n    this.button?.setAttribute(\"aria-label\", label);\n    this.button?.setAttribute(\"title\", label);\n  };\n\n  private render(): void {\n    const label =\n      this.getAttribute(\"aria-label\") ?? \"Toggle light and dark theme\";\n    this.shadow.innerHTML = `\n      <button type=\"button\" class=\"theme-toggle-btn suite-theme-toggle\" part=\"control\" aria-label=\"${label}\">\n        <svg class=\"theme-icon theme-icon-sun\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n          <circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n          <path stroke=\"currentColor\" stroke-width=\"2\" d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41\"/>\n        </svg>\n        <svg class=\"theme-icon theme-icon-moon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n          <path fill=\"currentColor\" d=\"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z\"/>\n        </svg>\n      </button>\n    `;\n    attachShadowStyles(this.shadow, VIKING_THEME_TOGGLE_STYLES);\n    this.button = this.shadow.querySelector(\"button\");\n    this.sunIcon = this.shadow.querySelector(\".theme-icon-sun\");\n    this.moonIcon = this.shadow.querySelector(\".theme-icon-moon\");\n  }\n}\n\nexport const registerVikingThemeToggleWc = (): void => {\n  defineCustomElement(VikingThemeToggleWc.tag, VikingThemeToggleWc);\n};\n","import {\n  DEFAULT_SITE_URLS,\n  type SiteDrakkarContext,\n  type SiteUrls,\n  resolveBrandHref,\n  resolveNavHref,\n  SITE_NAV_LINKS,\n  visibleNavLinks,\n} from \"../../lib/site-drakkar/site-drakkar.config\";\nimport { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport {\n  defineCustomElement,\n  escapeHtml,\n  HTMLElementBase,\n  modKeyLabel,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport {\n  registerVikingSuiteSearchPaletteWc,\n  type VikingSuiteSearchPaletteWc,\n} from \"../suite-search-palette/viking-suite-search-palette-wc\";\nimport { registerVikingThemeToggleWc } from \"../theme-toggle/viking-theme-toggle-wc\";\n\nconst VALID_CONTEXTS = new Set<SiteDrakkarContext>([\n  \"app\",\n  \"marketing\",\n  \"backend\",\n  \"docs\",\n]);\n\nconst VIKING_SUITE_HEADER_STYLES = `\n:host {\n  display: block;\n  position: sticky;\n  top: 0;\n  z-index: var(--viking-z-sticky, 50);\n  color: var(--viking-text);\n  font-family: var(--viking-font-family);\n}\n\n* {\n  box-sizing: border-box;\n}\n\n.suite-header {\n  width: 100%;\n  min-height: var(--viking-navbar-height, var(--viking-space-8));\n  background: var(--viking-surface);\n  border-bottom: var(--viking-border-width, 1px) solid var(--viking-border);\n  box-shadow: var(--viking-shadow-xs);\n  isolation: isolate;\n}\n\n.suite-header__bar {\n  display: grid;\n  grid-template-columns: minmax(max-content, auto) minmax(0, 1fr) max-content;\n  align-items: center;\n  gap: var(--viking-space-1);\n  width: 100%;\n  max-width: var(--viking-container-max-width);\n  min-height: var(--viking-navbar-height, var(--viking-space-8));\n  margin-inline: auto;\n  padding-inline: var(--viking-page-gutter);\n}\n\n.suite-header__brand {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--viking-space-1);\n  min-width: 0;\n  min-height: var(--viking-control-height);\n  color: var(--viking-text);\n  text-decoration: none;\n  border-radius: var(--viking-radius);\n}\n\n.suite-header__brand:focus-visible,\n.suite-header__link:focus-visible,\n.suite-header__icon-button:focus-visible,\n.suite-header__auth-link:focus-visible,\n.suite-header__user-trigger:focus-visible,\n.suite-header__menu-link:focus-visible,\n.suite-header__menu-button:focus-visible {\n  outline: var(--viking-ring-width) solid var(--viking-ring);\n  outline-offset: var(--viking-ring-offset);\n}\n\n.suite-header__mark {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--viking-space-4);\n  height: var(--viking-space-4);\n  color: var(--viking-accent);\n  flex: 0 0 auto;\n}\n\n.suite-header__lockup {\n  display: none;\n  min-width: 0;\n  color: var(--viking-text);\n  font-size: var(--viking-font-size-sm);\n  font-weight: var(--viking-font-weight-bold);\n  line-height: var(--viking-line-height-tight);\n  letter-spacing: var(--viking-letter-spacing-caps);\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n.suite-header__nav {\n  display: none;\n  align-items: center;\n  justify-content: center;\n  gap: var(--viking-space-0-5);\n  min-width: 0;\n  overflow: hidden;\n}\n\n.suite-header__link {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--viking-space-0-5);\n  min-width: 0;\n  height: var(--viking-control-height);\n  padding-inline: var(--viking-space-2);\n  color: var(--viking-text-muted);\n  border-radius: var(--viking-radius) var(--viking-radius) 0 0;\n  font-size: var(--viking-font-size-sm);\n  font-weight: var(--viking-font-weight-semibold);\n  line-height: var(--viking-line-height-none);\n  letter-spacing: var(--viking-letter-spacing-caps);\n  text-decoration: none;\n  text-transform: uppercase;\n  white-space: nowrap;\n  transition: var(--viking-transition-interactive);\n}\n\n.suite-header__link:hover,\n.suite-header__link[aria-current='page'] {\n  color: var(--viking-text);\n  background: var(--viking-surface-alt);\n}\n\n.suite-header__actions {\n  display: inline-flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: var(--viking-space-1);\n  min-width: 0;\n}\n\n.suite-header__icon-button,\n.suite-header__menu-button,\n.suite-header__user-trigger,\n.suite-header__auth-link {\n  min-height: var(--viking-control-height);\n  border: var(--viking-border-width, 1px) solid var(--viking-border-strong);\n  border-radius: var(--viking-radius);\n  background: var(--viking-surface);\n  color: var(--viking-text);\n  box-shadow: var(--viking-shadow-sm);\n  cursor: pointer;\n  font-family: inherit;\n  transition: var(--viking-transition-interactive);\n  -webkit-tap-highlight-color: transparent;\n}\n\n.suite-header__icon-button,\n.suite-header__menu-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--viking-control-height);\n  min-width: var(--viking-control-height);\n  padding: 0;\n}\n\n.suite-header__icon-button:hover,\n.suite-header__menu-button:hover,\n.suite-header__user-trigger:hover,\n.suite-header__auth-link:hover {\n  border-color: var(--viking-accent-strong);\n  background: var(--viking-surface-alt);\n  box-shadow: var(--viking-shadow-md);\n}\n\n.suite-header__auth-link {\n  display: none;\n  align-items: center;\n  justify-content: center;\n  gap: var(--viking-space-0-5);\n  min-width: max-content;\n  padding-inline: var(--viking-space-2);\n  background: var(--viking-accent);\n  border-color: var(--viking-accent);\n  color: var(--viking-accent-content);\n  font-size: var(--viking-font-size-sm);\n  font-weight: var(--viking-font-weight-bold);\n  line-height: var(--viking-line-height-none);\n  letter-spacing: var(--viking-letter-spacing-caps);\n  text-decoration: none;\n  text-transform: uppercase;\n}\n\n.suite-header__auth-icon,\n.suite-header__menu-icon,\n.suite-header__action-icon,\n.suite-header__avatar-icon,\n.suite-header__chevron {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n}\n\n.suite-header__auth-link:hover {\n  background: var(--viking-accent-hover);\n  color: var(--viking-accent-content);\n}\n\n.suite-header__user {\n  position: relative;\n  display: none;\n}\n\n.suite-header__user-trigger {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: var(--viking-space-1);\n  min-width: max-content;\n  padding-inline: var(--viking-space-1);\n}\n\n.suite-header__avatar {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--viking-space-3);\n  height: var(--viking-space-3);\n  border-radius: var(--viking-radius-full);\n  background: var(--viking-accent-soft);\n  color: var(--viking-accent-strong);\n}\n\n.suite-header__user-text {\n  display: none;\n  max-width: var(--viking-space-16);\n  overflow: hidden;\n  color: var(--viking-text);\n  font-size: var(--viking-font-size-sm);\n  font-weight: var(--viking-font-weight-semibold);\n  line-height: var(--viking-line-height-tight);\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.suite-header__menu {\n  position: absolute;\n  inset-block-start: calc(100% + var(--viking-space-1));\n  inset-inline-end: 0;\n  display: none;\n  min-width: var(--viking-space-24);\n  padding: var(--viking-space-1);\n  background: var(--viking-surface);\n  border: var(--viking-border-width, 1px) solid var(--viking-border-strong);\n  border-radius: var(--viking-radius);\n  box-shadow: var(--viking-shadow-lg);\n}\n\n.suite-header__user[data-open='true'] .suite-header__menu {\n  display: grid;\n  gap: var(--viking-space-0-5);\n}\n\n.suite-header__menu-label {\n  padding: var(--viking-space-1);\n  color: var(--viking-text-muted);\n  font-size: var(--viking-font-size-xs);\n  line-height: var(--viking-line-height-tight);\n}\n\n.suite-header__menu-label strong {\n  display: block;\n  color: var(--viking-text);\n  font-size: var(--viking-font-size-sm);\n}\n\n.suite-header__menu-link,\n.suite-header__menu-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: flex-start;\n  gap: var(--viking-space-1);\n  width: 100%;\n  min-height: var(--viking-control-height);\n  padding-inline: var(--viking-space-1);\n  background: transparent;\n  border: 0;\n  border-radius: var(--viking-radius-sm);\n  box-shadow: none;\n  color: var(--viking-text);\n  font: inherit;\n  text-align: start;\n  text-decoration: none;\n}\n\n.suite-header__menu-link:hover,\n.suite-header__menu-button:hover {\n  background: var(--viking-surface-alt);\n}\n\n.suite-header__mobile {\n  display: none;\n  width: 100%;\n  max-width: var(--viking-container-max-width);\n  margin-inline: auto;\n  padding: 0 var(--viking-page-gutter) var(--viking-space-2);\n}\n\n.suite-header[data-menu-open='true'] .suite-header__mobile {\n  display: grid;\n  gap: var(--viking-space-1);\n}\n\n.suite-header__mobile .suite-header__link,\n.suite-header__mobile .suite-header__auth-link,\n.suite-header__mobile .suite-header__menu-button {\n  display: inline-flex;\n  justify-content: flex-start;\n  width: 100%;\n  border-radius: var(--viking-radius);\n}\n\n.suite-header__mobile .suite-header__auth-link {\n  justify-content: center;\n  margin-block-start: var(--viking-space-1);\n}\n\nviking-suite-command-palette {\n  display: contents;\n}\n\n@media (min-width: 600px) {\n  .suite-header__lockup,\n  .suite-header__user-text {\n    display: inline;\n  }\n}\n\n@media (min-width: 768px) {\n  .suite-header__bar {\n    padding-inline: var(--viking-page-gutter-lg);\n  }\n\n  .suite-header__nav {\n    display: flex;\n  }\n\n  .suite-header__auth-link,\n  .suite-header__user {\n    display: inline-flex;\n  }\n\n  .suite-header__menu-button {\n    display: none;\n  }\n\n  .suite-header[data-menu-open='true'] .suite-header__mobile {\n    display: none;\n  }\n}\n`;\n\nconst detectContext = (): SiteDrakkarContext => {\n  const explicit = document.documentElement.getAttribute(\"data-deml-context\");\n  if (explicit && VALID_CONTEXTS.has(explicit as SiteDrakkarContext)) {\n    return explicit as SiteDrakkarContext;\n  }\n\n  const host = window.location.hostname;\n  if (host.startsWith(\"ui.\")) {\n    return \"docs\";\n  }\n  if (host.startsWith(\"backend.\")) {\n    return \"backend\";\n  }\n  if (host.includes(\"deml.app\")) {\n    return \"app\";\n  }\n  return \"marketing\";\n};\n\nconst readContext = (el: HTMLElement): SiteDrakkarContext => {\n  const raw = el.getAttribute(\"context\");\n  if (raw && VALID_CONTEXTS.has(raw as SiteDrakkarContext)) {\n    return raw as SiteDrakkarContext;\n  }\n  return detectContext();\n};\n\nconst readUrls = (el: HTMLElement): SiteUrls => {\n  const env = (globalThis as { __DEML?: Partial<SiteUrls> }).__DEML ?? {};\n  return {\n    app: el.getAttribute(\"app-url\") ?? env.app ?? DEFAULT_SITE_URLS.app,\n    marketing:\n      el.getAttribute(\"marketing-url\") ??\n      env.marketing ??\n      DEFAULT_SITE_URLS.marketing,\n    backend:\n      el.getAttribute(\"backend-url\") ??\n      env.backend ??\n      DEFAULT_SITE_URLS.backend,\n  };\n};\n\nconst isCurrentHref = (href: string): boolean => {\n  try {\n    const url = new URL(href, window.location.origin);\n    return (\n      url.origin === window.location.origin &&\n      url.pathname === window.location.pathname\n    );\n  } catch {\n    return false;\n  }\n};\n\n/**\n * Unified framework-agnostic DEML suite header.\n * Tag: `viking-suite-header`\n *\n * @attr context - Surface: app | marketing | backend | docs (auto-detected when omitted)\n * @attr authenticated - Render the user menu instead of Sign In\n * @attr user-name - Display name for the authenticated user menu\n * @attr user-email - Secondary user menu label\n * @attr sign-in-href - Fallback href for static Sign In navigation\n */\nexport class VikingSuiteHeaderWc extends HTMLElementBase {\n  static readonly tag = \"viking-suite-header\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"context\",\n      \"app-url\",\n      \"marketing-url\",\n      \"backend-url\",\n      \"authenticated\",\n      \"user-name\",\n      \"user-email\",\n      \"sign-in-href\",\n      \"dashboard-href\",\n    ];\n  }\n\n  private readonly shadow: ShadowRoot;\n  private menuOpen = false;\n  private userMenuOpen = false;\n  private paletteEl: VikingSuiteSearchPaletteWc | null = null;\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    attachShadowStyles(this.shadow, VIKING_SUITE_HEADER_STYLES);\n  }\n\n  connectedCallback(): void {\n    registerVikingThemeToggleWc();\n    registerVikingSuiteSearchPaletteWc();\n    this.render();\n    document.addEventListener(\"click\", this.onDocumentClick);\n  }\n\n  disconnectedCallback(): void {\n    document.removeEventListener(\"click\", this.onDocumentClick);\n  }\n\n  attributeChangedCallback(): void {\n    if (this.isConnected) {\n      this.render();\n    }\n  }\n\n  openSearch(): void {\n    this.paletteEl?.openPalette();\n    this.dispatchEvent(\n      new CustomEvent(\"viking-search-open\", { bubbles: true, composed: true }),\n    );\n  }\n\n  private readonly onDocumentClick = (event: MouseEvent): void => {\n    if (event.composedPath().includes(this)) {\n      return;\n    }\n    if (this.menuOpen || this.userMenuOpen) {\n      this.menuOpen = false;\n      this.userMenuOpen = false;\n      this.syncOpenState();\n    }\n  };\n\n  private readonly onSearchClick = (): void => {\n    this.openSearch();\n  };\n\n  private readonly onMenuClick = (): void => {\n    this.menuOpen = !this.menuOpen;\n    this.syncOpenState();\n  };\n\n  private readonly onUserClick = (): void => {\n    this.userMenuOpen = !this.userMenuOpen;\n    this.syncOpenState();\n  };\n\n  private readonly onSignInClick = (event: Event): void => {\n    const signInEvent = new CustomEvent(\"viking-sign-in\", {\n      bubbles: true,\n      cancelable: true,\n      composed: true,\n      detail: event,\n    });\n    this.dispatchEvent(signInEvent);\n    if (signInEvent.defaultPrevented) {\n      event.preventDefault();\n    }\n  };\n\n  private readonly onSignOutClick = (): void => {\n    this.userMenuOpen = false;\n    this.menuOpen = false;\n    this.syncOpenState();\n    this.dispatchEvent(\n      new CustomEvent(\"viking-sign-out\", { bubbles: true, composed: true }),\n    );\n  };\n\n  private syncOpenState(): void {\n    const header = this.shadow.querySelector<HTMLElement>(\".suite-header\");\n    const menuButton =\n      this.shadow.querySelector<HTMLButtonElement>(\"[data-menu-toggle]\");\n    const user = this.shadow.querySelector<HTMLElement>(\".suite-header__user\");\n    const userButton =\n      this.shadow.querySelector<HTMLButtonElement>(\"[data-user-toggle]\");\n    header?.setAttribute(\"data-menu-open\", String(this.menuOpen));\n    menuButton?.setAttribute(\"aria-expanded\", String(this.menuOpen));\n    user?.setAttribute(\"data-open\", String(this.userMenuOpen));\n    userButton?.setAttribute(\"aria-expanded\", String(this.userMenuOpen));\n  }\n\n  private renderNavLinks(\n    context: SiteDrakkarContext,\n    urls: SiteUrls,\n    authenticated: boolean,\n  ): string {\n    return visibleNavLinks(SITE_NAV_LINKS, authenticated)\n      .map((link) => {\n        const href = resolveNavHref(link, context, urls);\n        const current = isCurrentHref(href) ? ' aria-current=\"page\"' : \"\";\n        return `\n          <a class=\"suite-header__link\" href=\"${escapeHtml(href)}\"${current}>\n            ${renderInlineIcon(link.icon, 16, \"suite-header__link-icon\")}\n            <span>${escapeHtml(link.label)}</span>\n          </a>\n        `;\n      })\n      .join(\"\");\n  }\n\n  private renderAuth(\n    urls: SiteUrls,\n    authenticated: boolean,\n    mobile = false,\n  ): string {\n    if (!authenticated) {\n      const signInHref =\n        this.getAttribute(\"sign-in-href\") ?? `${urls.app}/login`;\n      return `\n        <a class=\"suite-header__auth-link\" href=\"${escapeHtml(signInHref)}\" data-sign-in>\n          <span>Sign In</span>\n          ${renderInlineIcon(\"arrow-right\", 16, \"suite-header__auth-icon\")}\n        </a>\n      `;\n    }\n\n    if (mobile) {\n      return `\n        <a class=\"suite-header__menu-link\" href=\"${escapeHtml(this.getDashboardHref(urls))}\">\n          ${renderInlineIcon(\"home\", 16, \"suite-header__menu-icon\")}\n          <span>Dashboard</span>\n        </a>\n        <button class=\"suite-header__menu-button\" type=\"button\" data-sign-out>\n          ${renderInlineIcon(\"log-out\", 16, \"suite-header__menu-icon\")}\n          <span>Sign Out</span>\n        </button>\n      `;\n    }\n\n    const userName = this.getAttribute(\"user-name\") ?? \"Account\";\n    const userEmail = this.getAttribute(\"user-email\") ?? \"\";\n    return `\n      <div class=\"suite-header__user\" data-open=\"${String(this.userMenuOpen)}\">\n        <button\n          class=\"suite-header__user-trigger\"\n          type=\"button\"\n          aria-haspopup=\"menu\"\n          aria-expanded=\"${String(this.userMenuOpen)}\"\n          data-user-toggle\n        >\n          <span class=\"suite-header__avatar\" aria-hidden=\"true\">\n            ${renderInlineIcon(\"user\", 16, \"suite-header__avatar-icon\")}\n          </span>\n          <span class=\"suite-header__user-text\">${escapeHtml(userName)}</span>\n          ${renderInlineIcon(\"chevron-down\", 16, \"suite-header__chevron\")}\n        </button>\n        <div class=\"suite-header__menu\" role=\"menu\">\n          <div class=\"suite-header__menu-label\">\n            <strong>${escapeHtml(userName)}</strong>\n            ${userEmail ? `<span>${escapeHtml(userEmail)}</span>` : \"\"}\n          </div>\n          <a class=\"suite-header__menu-link\" role=\"menuitem\" href=\"${escapeHtml(\n            this.getDashboardHref(urls),\n          )}\">\n            ${renderInlineIcon(\"home\", 16, \"suite-header__menu-icon\")}\n            <span>Dashboard</span>\n          </a>\n          <button class=\"suite-header__menu-button\" type=\"button\" role=\"menuitem\" data-sign-out>\n            ${renderInlineIcon(\"log-out\", 16, \"suite-header__menu-icon\")}\n            <span>Sign Out</span>\n          </button>\n        </div>\n      </div>\n    `;\n  }\n\n  private getDashboardHref(urls: SiteUrls): string {\n    return this.getAttribute(\"dashboard-href\") ?? `${urls.app}/dashboard`;\n  }\n\n  private render(): void {\n    const context = readContext(this);\n    const urls = readUrls(this);\n    const authenticated = readBoolAttr(this, \"authenticated\");\n    const navLinks = this.renderNavLinks(context, urls, authenticated);\n    const brandHref = resolveBrandHref(context, urls);\n    const shortcut = `${modKeyLabel()}K`;\n\n    this.shadow.innerHTML = `\n      <header class=\"suite-header\" data-menu-open=\"${String(this.menuOpen)}\">\n        <div class=\"suite-header__bar\">\n          <a class=\"suite-header__brand\" href=\"${escapeHtml(\n            brandHref,\n          )}\" aria-label=\"Data Engineering for Machine Learning home\">\n            <span class=\"suite-header__mark\" aria-hidden=\"true\">\n              ${renderInlineIcon(\"drakkar\", 28, \"suite-header__brand-icon\")}\n            </span>\n            <span class=\"suite-header__lockup\">DEML</span>\n          </a>\n\n          <nav class=\"suite-header__nav\" aria-label=\"Main navigation\">\n            ${navLinks}\n          </nav>\n\n          <div class=\"suite-header__actions\">\n            <button\n              class=\"suite-header__icon-button\"\n              type=\"button\"\n              aria-label=\"Open command palette (${shortcut})\"\n              title=\"Open command palette (${shortcut})\"\n              data-search-trigger\n            >\n              ${renderInlineIcon(\"search\", 18, \"suite-header__action-icon\")}\n            </button>\n            ${this.renderAuth(urls, authenticated)}\n            <viking-theme-toggle-wc></viking-theme-toggle-wc>\n            <button\n              class=\"suite-header__menu-button\"\n              type=\"button\"\n              aria-label=\"Toggle navigation menu\"\n              aria-expanded=\"${String(this.menuOpen)}\"\n              data-menu-toggle\n            >\n              ${renderInlineIcon(this.menuOpen ? \"x\" : \"menu\", 18, \"suite-header__action-icon\")}\n            </button>\n          </div>\n        </div>\n\n        <nav class=\"suite-header__mobile\" aria-label=\"Mobile navigation\">\n          ${navLinks}\n          ${this.renderAuth(urls, authenticated, true)}\n        </nav>\n      </header>\n      <viking-suite-command-palette\n        context=\"${context}\"\n        app-url=\"${escapeHtml(urls.app)}\"\n        marketing-url=\"${escapeHtml(urls.marketing)}\"\n        backend-url=\"${escapeHtml(urls.backend)}\"\n        global-shortcut\n      ></viking-suite-command-palette>\n    `;\n\n    this.paletteEl = this.shadow.querySelector(\"viking-suite-command-palette\");\n    this.shadow\n      .querySelector(\"[data-search-trigger]\")\n      ?.addEventListener(\"click\", this.onSearchClick);\n    this.shadow\n      .querySelector(\"[data-menu-toggle]\")\n      ?.addEventListener(\"click\", this.onMenuClick);\n    this.shadow\n      .querySelector(\"[data-user-toggle]\")\n      ?.addEventListener(\"click\", this.onUserClick);\n    this.shadow\n      .querySelectorAll(\"[data-sign-in]\")\n      .forEach((control) =>\n        control.addEventListener(\"click\", this.onSignInClick),\n      );\n    this.shadow\n      .querySelectorAll(\"[data-sign-out]\")\n      .forEach((control) =>\n        control.addEventListener(\"click\", this.onSignOutClick),\n      );\n  }\n}\n\nexport const registerVikingSuiteHeaderWc = (): void => {\n  defineCustomElement(VikingSuiteHeaderWc.tag, VikingSuiteHeaderWc);\n};\n","import {\n  attachElementInternals,\n  attachShadowStyles,\n  setFormValue,\n} from \"../core/base\";\nimport {\n  defineCustomElement,\n  defineCustomElementAlias,\n  escapeHtml,\n  HTMLElementBase,\n  vikingWcUid,\n} from \"../core/dom\";\nimport { VIKING_SELECT_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic native select Web Component with form association.\n * Tag: `viking-select` (legacy alias: `viking-select-wc`)\n *\n * Place `<option>` elements as light DOM children; they are mirrored into the shadow select.\n *\n * @attr label - Visible field label\n * @attr name - Form field name (participates in form submission via ElementInternals)\n * @attr value - Selected option value\n * @attr placeholder - Placeholder option text when no value is selected\n * @attr description - Helper text below the control\n * @attr error - Validation message; sets aria-invalid\n * @attr width - full | half (default: half)\n * @attr disabled - Disables the control\n * @attr required - Marks field as required\n *\n * @event viking-change - `{ detail: { value: string } }`\n *\n * @example\n * <viking-select-wc label=\"Retention\" name=\"retention\" value=\"30d\">\n *   <option value=\"7d\">7 days</option>\n *   <option value=\"30d\">30 days</option>\n * </viking-select-wc>\n */\nexport class VikingSelectWc extends HTMLElementBase {\n  static readonly formAssociated = true;\n  static readonly tag = \"viking-select\";\n  static readonly legacyTag = \"viking-select-wc\";\n\n  static get observedAttributes(): string[] {\n    return [\n      \"label\",\n      \"name\",\n      \"value\",\n      \"placeholder\",\n      \"description\",\n      \"error\",\n      \"width\",\n      \"disabled\",\n      \"required\",\n    ];\n  }\n\n  private readonly shadow: ShadowRoot;\n  private readonly internals: ElementInternals | null;\n  private selectEl: HTMLSelectElement | null = null;\n  private optionObserver: MutationObserver | null = null;\n  private readonly controlId = vikingWcUid(\"viking-select\");\n\n  constructor() {\n    super();\n    this.shadow = this.attachShadow({ mode: \"open\" });\n    this.internals = attachElementInternals(this);\n    attachShadowStyles(this.shadow, VIKING_SELECT_STYLES);\n  }\n\n  connectedCallback(): void {\n    this.render();\n    this.syncOptions();\n    this.observeOptions();\n    this.selectEl?.addEventListener(\"change\", this.onChange);\n  }\n\n  disconnectedCallback(): void {\n    this.selectEl?.removeEventListener(\"change\", this.onChange);\n    this.optionObserver?.disconnect();\n    this.optionObserver = null;\n  }\n\n  attributeChangedCallback(name: string): void {\n    if (!this.isConnected) {\n      return;\n    }\n    if (name === \"value\" && this.selectEl) {\n      this.selectEl.value = this.getAttribute(\"value\") ?? \"\";\n      this.syncFormValue();\n      return;\n    }\n    if (name === \"error\" || name === \"description\" || name === \"label\") {\n      this.render();\n      this.syncOptions();\n      return;\n    }\n    this.render();\n    this.syncOptions();\n  }\n\n  get value(): string {\n    return this.selectEl?.value ?? this.getAttribute(\"value\") ?? \"\";\n  }\n\n  set value(next: string) {\n    this.setAttribute(\"value\", next);\n    if (this.selectEl) {\n      this.selectEl.value = next;\n    }\n    this.syncFormValue();\n  }\n\n  private readonly onChange = (): void => {\n    const value = this.selectEl?.value ?? \"\";\n    this.setAttribute(\"value\", value);\n    this.syncFormValue();\n    this.dispatchEvent(\n      new CustomEvent(\"viking-change\", {\n        bubbles: true,\n        composed: true,\n        detail: { value },\n      }),\n    );\n  };\n\n  private syncFormValue(): void {\n    setFormValue(this.internals, this.value);\n  }\n\n  private observeOptions(): void {\n    this.optionObserver?.disconnect();\n    this.optionObserver = new MutationObserver(() => this.syncOptions());\n    this.optionObserver.observe(this, {\n      childList: true,\n      subtree: true,\n      characterData: true,\n    });\n  }\n\n  private render(): void {\n    const label = this.getAttribute(\"label\") ?? \"\";\n    const name = this.getAttribute(\"name\") ?? \"\";\n    const disabled = this.hasAttribute(\"disabled\");\n    const required = this.hasAttribute(\"required\");\n    const error = this.getAttribute(\"error\") ?? \"\";\n    const description = this.getAttribute(\"description\") ?? \"\";\n    const describedBy = [\n      description && `${this.controlId}-desc`,\n      error && `${this.controlId}-error`,\n    ]\n      .filter(Boolean)\n      .join(\" \");\n\n    this.shadow.innerHTML = `\n      <div class=\"viking-field\" part=\"field\">\n        ${label ? `<label class=\"viking-field-label\" part=\"label\" for=\"${this.controlId}\">${escapeHtml(label)}</label>` : \"\"}\n        <select\n          id=\"${this.controlId}\"\n          class=\"viking-select-native\"\n          part=\"control\"\n          ${name ? `name=\"${escapeHtml(name)}\"` : \"\"}\n          ${disabled ? \"disabled\" : \"\"}\n          ${required ? \"required\" : \"\"}\n          ${error ? 'aria-invalid=\"true\"' : \"\"}\n          ${describedBy ? `aria-describedby=\"${describedBy}\"` : \"\"}\n        ></select>\n        ${description ? `<p id=\"${this.controlId}-desc\" class=\"viking-field-description\" part=\"description\">${escapeHtml(description)}</p>` : \"\"}\n        ${error ? `<p id=\"${this.controlId}-error\" class=\"viking-field-error\" part=\"error\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\"><span class=\"viking-sr-only\">Error: </span>${escapeHtml(error)}</p>` : \"\"}\n      </div>\n    `;\n\n    this.selectEl = this.shadow.querySelector(\"select\");\n    const value = this.getAttribute(\"value\");\n    if (this.selectEl && value) {\n      this.selectEl.value = value;\n    }\n    this.syncFormValue();\n  }\n\n  private syncOptions(): void {\n    if (!this.selectEl) {\n      return;\n    }\n\n    const currentValue = this.selectEl.value;\n    this.selectEl.innerHTML = \"\";\n    const options = this.querySelectorAll(\"option\");\n\n    if (options.length === 0) {\n      const placeholder = this.getAttribute(\"placeholder\") ?? \"Select…\";\n      const opt = document.createElement(\"option\");\n      opt.value = \"\";\n      opt.textContent = placeholder;\n      opt.disabled = true;\n      opt.selected = !this.getAttribute(\"value\");\n      this.selectEl.append(opt);\n      return;\n    }\n\n    options.forEach((opt) => {\n      this.selectEl?.append(opt.cloneNode(true));\n    });\n\n    const value = this.getAttribute(\"value\");\n    if (value) {\n      this.selectEl.value = value;\n    } else if (currentValue) {\n      this.selectEl.value = currentValue;\n    }\n    this.syncFormValue();\n  }\n}\n\nexport const registerVikingSelectWc = (): void => {\n  defineCustomElement(VikingSelectWc.tag, VikingSelectWc);\n  defineCustomElementAlias(VikingSelectWc.legacyTag, VikingSelectWc);\n};\n","import { registerVikingBadgeWc } from \"./badge/viking-badge-wc\";\nimport { registerVikingButtonWc } from \"./button/viking-button-wc\";\nimport { registerVikingCalloutWc } from \"./callout/viking-callout-wc\";\nimport { registerVikingCardWc } from \"./card/viking-card-wc\";\nimport { registerVikingFieldWc } from \"./field/viking-field-wc\";\nimport { registerVikingInputWc } from \"./input/viking-input-wc\";\nimport { registerVikingModalWc } from \"./modal/viking-modal-wc\";\nimport { registerVikingSearchPaletteWc } from \"./search-palette/viking-search-palette-wc\";\nimport { registerVikingStatusCardWc } from \"./status-card/viking-status-card-wc\";\nimport { registerVikingStatusPillWc } from \"./status-pill/viking-status-pill-wc\";\nimport {\n  registerVikingSiteFooterWc,\n  VikingSiteFooterWc,\n} from \"./site-footer/viking-site-footer-wc\";\nimport {\n  registerVikingSiteNavbarWc,\n  VikingSiteNavbarWc,\n} from \"./site-navbar/viking-site-navbar-wc\";\nimport { registerVikingSuiteHeaderWc } from \"./suite-header/viking-suite-header-wc\";\nimport { registerVikingSuiteSearchPaletteWc } from \"./suite-search-palette/viking-suite-search-palette-wc\";\nimport { registerVikingSelectWc } from \"./select/viking-select-wc\";\nimport { registerVikingThemeToggleWc } from \"./theme-toggle/viking-theme-toggle-wc\";\n\nexport { VikingBadgeWc, registerVikingBadgeWc } from \"./badge/viking-badge-wc\";\nexport {\n  VikingButtonWc,\n  registerVikingButtonWc,\n} from \"./button/viking-button-wc\";\nexport {\n  VikingCalloutWc,\n  registerVikingCalloutWc,\n} from \"./callout/viking-callout-wc\";\nexport { VikingCardWc, registerVikingCardWc } from \"./card/viking-card-wc\";\nexport { VikingFieldWc, registerVikingFieldWc } from \"./field/viking-field-wc\";\nexport { VikingInputWc, registerVikingInputWc } from \"./input/viking-input-wc\";\nexport { VikingModalWc, registerVikingModalWc } from \"./modal/viking-modal-wc\";\nexport {\n  VikingSearchPaletteWc,\n  registerVikingSearchPaletteWc,\n  type VikingSearchPaletteItem,\n} from \"./search-palette/viking-search-palette-wc\";\nexport { rankSearchItems, scoreSearchItem } from \"./search-palette/rank-search\";\nexport {\n  DEFAULT_RECENT_LIMIT,\n  DEFAULT_RECENT_STORAGE_KEY,\n  clearRecentSearches,\n  pushRecentSearch,\n  readRecentSearches,\n  recentSearchesAsItems,\n  restoreRecentSearches,\n  type VikingRecentSearch,\n} from \"./search-palette/recent-searches\";\nexport {\n  bindCommandHistoryShortcuts,\n  createCommandHistory,\n  getDefaultCommandHistory,\n  type CommandHistory,\n  type RunHistoryCommand,\n} from \"../core/command-history\";\nexport {\n  VikingStatusCardWc,\n  registerVikingStatusCardWc,\n} from \"./status-card/viking-status-card-wc\";\nexport {\n  VikingStatusPillWc,\n  registerVikingStatusPillWc,\n} from \"./status-pill/viking-status-pill-wc\";\nexport {\n  VikingSuiteSearchPaletteWc,\n  registerVikingSuiteSearchPaletteWc,\n} from \"./suite-search-palette/viking-suite-search-palette-wc\";\nexport {\n  VikingSuiteHeaderWc,\n  registerVikingSuiteHeaderWc,\n} from \"./suite-header/viking-suite-header-wc\";\nexport {\n  VikingSiteFooterWc,\n  registerVikingSiteFooterWc,\n} from \"./site-footer/viking-site-footer-wc\";\nexport {\n  VikingSiteNavbarWc,\n  registerVikingSiteNavbarWc,\n} from \"./site-navbar/viking-site-navbar-wc\";\nexport {\n  VikingSelectWc,\n  registerVikingSelectWc,\n} from \"./select/viking-select-wc\";\nexport {\n  VikingThemeToggleWc,\n  registerVikingThemeToggleWc,\n} from \"./theme-toggle/viking-theme-toggle-wc\";\nexport type { VikingWcTone } from \"./core/types\";\nexport { VikingReactiveElement, type VikingAttrOptions } from \"./core/reactive\";\nexport {\n  parseBoolean,\n  parseJson,\n  parseNumber,\n  parseSelect,\n} from \"./core/parsers\";\nexport {\n  searchAlgoliaPages,\n  ALGOLIA_DEFAULT_INDEXES,\n  type AlgoliaHitItem,\n  type AlgoliaConfig,\n} from \"./core/algolia-search\";\n\n/** Register all Viking-UI Web Components. Safe to call multiple times. */\nexport const registerVikingElements = (): void => {\n  registerVikingButtonWc();\n  registerVikingFieldWc();\n  registerVikingInputWc();\n  registerVikingBadgeWc();\n  registerVikingCalloutWc();\n  registerVikingCardWc();\n  registerVikingSelectWc();\n  registerVikingModalWc();\n  registerVikingSearchPaletteWc();\n  registerVikingStatusCardWc();\n  registerVikingStatusPillWc();\n  registerVikingSuiteHeaderWc();\n  registerVikingSuiteSearchPaletteWc();\n  registerVikingSiteNavbarWc();\n  registerVikingSiteFooterWc();\n  registerVikingThemeToggleWc();\n};\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n  suiteThemeToggleAriaLabel,\n  type SuiteThemePreference,\n  type SuiteThemeResolved,\n} from \"../../core/theme\";\n\n/**\n * viking-theme-toggle — light/dark control (resolved theme + optional preference).\n * Chrome: suite-theme-toggle / .theme-toggle-btn\n */\n@Component({\n  selector: \"viking-theme-toggle\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [VikingIcon],\n  host: { class: \"viking-theme-toggle-host suite-theme-toggle-host\" },\n  template: `\n    <button\n      type=\"button\"\n      class=\"suite-theme-toggle theme-toggle-btn fj-theme-toggle viking-theme-toggle\"\n      id=\"theme-toggle-btn\"\n      [attr.aria-label]=\"ariaLabel()\"\n      [attr.title]=\"ariaLabel()\"\n      [attr.data-theme]=\"theme()\"\n      [attr.data-preference]=\"preference()\"\n      (click)=\"toggle.emit()\"\n    >\n      <viking-icon [name]=\"icon()\" [size]=\"20\" aria-hidden=\"true\" />\n    </button>\n  `,\n})\nexport class VikingThemeToggle {\n  /** Resolved appearance currently on the document. */\n  readonly theme = input<SuiteThemeResolved>(\"dark\");\n  /** Stored preference (system when following OS). */\n  readonly preference = input<SuiteThemePreference>(\"system\");\n  readonly toggle = output<void>();\n\n  protected readonly icon = computed(() =>\n    this.theme() === \"dark\" ? \"sun\" : \"moon\",\n  );\n\n  protected readonly ariaLabel = computed(() =>\n    suiteThemeToggleAriaLabel(this.preference(), this.theme()),\n  );\n}\n","import { isPlatformBrowser } from \"@angular/common\";\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  ElementRef,\n  PLATFORM_ID,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n} from \"@angular/core\";\nimport { RouterLink, RouterLinkActive } from \"@angular/router\";\nimport { readDemlWidgets } from \"../../core/deml-widgets\";\nimport {\n  captureReturnFocus,\n  focusFirst,\n  restoreFocus,\n  trapTabKey,\n} from \"../../core/focus\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingThemeToggle } from \"../theme-toggle/theme-toggle\";\nimport {\n  DEFAULT_SITE_URLS,\n  isAppRouterPath,\n  resolveBrandHref,\n  resolveNavHref,\n  SITE_NAV_LINKS,\n  SiteDrakkarContext,\n  SiteUrls,\n  visibleNavLinks,\n} from \"./site-drakkar.config\";\n\n/** Stable RouterLinkActive options — avoid new object literals each CD. */\nconst ROUTER_LINK_EXACT = { exact: true } as const;\nconst ROUTER_LINK_PREFIX = { exact: false } as const;\n\n/**\n * viking-site-navbar — canonical site header shared across DEML surfaces.\n * Uses `.navbar` markup + viking-ui.css (same structure as marketing/backend static HTML).\n */\n@Component({\n  selector: \"viking-site-navbar\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    RouterLink,\n    RouterLinkActive,\n    VikingButton,\n    VikingIcon,\n    VikingThemeToggle,\n  ],\n  styleUrl: \"./site-navbar.scss\",\n  template: `\n    <header class=\"navbar\">\n      <div class=\"navbar-content\">\n        <div class=\"navbar-left\">\n          @if (context() === \"app\") {\n            <a\n              [href]=\"brandHref()\"\n              class=\"navbar-brand\"\n              aria-label=\"Go to marketing homepage\"\n              (click)=\"onBrandClick($event)\"\n            >\n              <viking-icon\n                name=\"drakkar\"\n                [size]=\"28\"\n                color=\"accent\"\n                class=\"brand-icon navbar-logo\"\n              />\n            </a>\n          } @else {\n            <a\n              [href]=\"brandHref()\"\n              class=\"navbar-brand\"\n              aria-label=\"Go to homepage\"\n            >\n              <viking-icon\n                name=\"drakkar\"\n                [size]=\"28\"\n                color=\"accent\"\n                class=\"brand-icon navbar-logo\"\n              />\n            </a>\n          }\n        </div>\n\n        <nav class=\"navbar-center desktop-nav\" aria-label=\"Main navigation\">\n          @for (item of navItems(); track item.link.id) {\n            @if (item.useRouter) {\n              <a\n                [routerLink]=\"item.link.appHref\"\n                routerLinkActive=\"active\"\n                [routerLinkActiveOptions]=\"item.routerLinkActiveOptions\"\n                class=\"nav-btn\"\n              >\n                <viking-icon [name]=\"item.link.icon\" [size]=\"16\" />\n                <span>{{ item.link.label }}</span>\n              </a>\n            } @else {\n              <a\n                [href]=\"item.href\"\n                class=\"nav-btn\"\n                (click)=\"onExternalClick($event, item.link)\"\n              >\n                <viking-icon [name]=\"item.link.icon\" [size]=\"16\" />\n                <span>{{ item.link.label }}</span>\n              </a>\n            }\n          }\n        </nav>\n\n        <div class=\"navbar-right\">\n          @if (showSearch()) {\n            <div class=\"navbar-search\" role=\"search\">\n              <viking-button\n                variant=\"outline\"\n                class=\"navbar-search-trigger\"\n                [square]=\"true\"\n                [compact]=\"true\"\n                id=\"navbar-search-trigger\"\n                icon=\"search\"\n                label=\"Open search (⌘K)\"\n                (pressed)=\"openSearch()\"\n              />\n            </div>\n          }\n\n          <div class=\"desktop-auth\" role=\"group\" aria-label=\"Account actions\">\n            @if (!isAuthenticated()) {\n              <viking-button\n                variant=\"primary\"\n                icon=\"arrow-right\"\n                class=\"auth-btn auth-btn-desktop\"\n                id=\"auth-btn-desktop\"\n                [loading]=\"isBusy()\"\n                (pressed)=\"login.emit()\"\n              >\n                Sign In\n              </viking-button>\n            } @else {\n              <viking-button\n                variant=\"ghost\"\n                class=\"auth-btn auth-signout-btn\"\n                id=\"auth-signout-desktop\"\n                [loading]=\"isBusy()\"\n                (pressed)=\"logout.emit()\"\n                >Sign Out</viking-button\n              >\n            }\n          </div>\n\n          <viking-theme-toggle\n            [theme]=\"theme()\"\n            [preference]=\"themePreference()\"\n            (toggle)=\"themeToggle.emit()\"\n          />\n\n          <viking-button\n            variant=\"outline\"\n            [square]=\"true\"\n            class=\"menu-toggle-btn\"\n            [icon]=\"mobileMenuOpen() ? 'x' : 'menu'\"\n            id=\"mobile-menu-btn\"\n            aria-controls=\"mobile-menu\"\n            [aria-expanded]=\"mobileMenuOpen() ? 'true' : 'false'\"\n            [label]=\"\n              mobileMenuOpen()\n                ? 'Close navigation menu'\n                : 'Toggle navigation menu'\n            \"\n            (pressed)=\"toggleMobileMenu()\"\n          />\n        </div>\n      </div>\n\n      <nav\n        class=\"mobile-menu\"\n        id=\"mobile-menu\"\n        [class.open]=\"mobileMenuOpen()\"\n        [attr.hidden]=\"mobileMenuOpen() ? null : ''\"\n        aria-label=\"Mobile navigation\"\n        tabindex=\"-1\"\n        (keydown)=\"onMobileMenuKeydown($event)\"\n      >\n        @for (item of navItems(); track item.link.id + \"-mobile\") {\n          @if (item.useRouter) {\n            <a\n              [routerLink]=\"item.link.appHref\"\n              routerLinkActive=\"active\"\n              [routerLinkActiveOptions]=\"item.routerLinkActiveOptions\"\n              class=\"mobile-nav-btn\"\n              (click)=\"closeMobileMenu()\"\n            >\n              <viking-icon [name]=\"item.link.icon\" [size]=\"16\" />\n              <span>{{ item.link.label }}</span>\n            </a>\n          } @else {\n            <a\n              [href]=\"item.href\"\n              class=\"mobile-nav-btn\"\n              (click)=\"onExternalClick($event, item.link); closeMobileMenu()\"\n            >\n              <viking-icon [name]=\"item.link.icon\" [size]=\"16\" />\n              <span>{{ item.link.label }}</span>\n            </a>\n          }\n        }\n\n        <div class=\"mobile-divider\"></div>\n\n        @if (!isAuthenticated()) {\n          <viking-button\n            variant=\"primary\"\n            icon=\"arrow-right\"\n            class=\"mobile-auth-btn auth-btn\"\n            id=\"auth-btn-mobile\"\n            [loading]=\"isBusy()\"\n            [fullWidth]=\"true\"\n            (pressed)=\"login.emit(); closeMobileMenu()\"\n          >\n            Sign In\n          </viking-button>\n        } @else {\n          <viking-button\n            variant=\"ghost\"\n            class=\"mobile-auth-btn auth-btn auth-signout-btn\"\n            id=\"auth-signout-mobile\"\n            [loading]=\"isBusy()\"\n            [fullWidth]=\"true\"\n            (pressed)=\"logout.emit(); closeMobileMenu()\"\n          >\n            Sign Out\n          </viking-button>\n        }\n      </nav>\n    </header>\n  `,\n})\nexport class VikingSiteNavbar {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly destroyRef = inject(DestroyRef);\n\n  readonly context = input<SiteDrakkarContext>(\"app\");\n  readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n  readonly isAuthenticated = input<boolean>(false);\n  readonly isBusy = input<boolean>(false);\n  readonly theme = input<\"light\" | \"dark\">(\"dark\");\n  readonly themePreference = input<\"light\" | \"dark\" | \"system\">(\"system\");\n  readonly showSearch = input<boolean>(false);\n\n  readonly login = output<void>();\n  readonly logout = output<void>();\n  readonly themeToggle = output<void>();\n  readonly searchOpen = output<void>();\n  readonly marketingNavigate = output<string>();\n\n  protected readonly mobileMenuOpen = signal(false);\n  private mobileMenuReturnFocus: HTMLElement | null = null;\n\n  protected readonly navLinks = computed(() =>\n    visibleNavLinks(SITE_NAV_LINKS, this.isAuthenticated()),\n  );\n\n  /** Pre-resolved hrefs + stable routerLinkActiveOptions for the template. */\n  protected readonly navItems = computed(() => {\n    const ctx = this.context();\n    const urls = this.urls();\n    return this.navLinks().map((link) => ({\n      link,\n      href: resolveNavHref(link, ctx, urls),\n      useRouter: ctx === \"app\" && isAppRouterPath(link.appHref),\n      routerLinkActiveOptions:\n        link.appHref === \"/explore\" ? ROUTER_LINK_EXACT : ROUTER_LINK_PREFIX,\n    }));\n  });\n\n  protected readonly brandHref = computed(() =>\n    resolveBrandHref(this.context(), this.urls()),\n  );\n\n  constructor() {\n    // Focus into the drawer on open; restore to the toggle on close\n    let wasOpen = false;\n    effect(() => {\n      const isOpen = this.mobileMenuOpen();\n      if (!isPlatformBrowser(this.platformId)) return;\n      queueMicrotask(() => {\n        const menu =\n          this.host.nativeElement.querySelector<HTMLElement>(\"#mobile-menu\");\n        if (isOpen && !wasOpen) {\n          this.mobileMenuReturnFocus = captureReturnFocus();\n          if (menu) focusFirst(menu);\n        } else if (!isOpen && wasOpen) {\n          restoreFocus(this.mobileMenuReturnFocus);\n          this.mobileMenuReturnFocus = null;\n        }\n        wasOpen = isOpen;\n      });\n    });\n\n    // Document listeners only while the mobile menu is open (avoids CD on every click)\n    effect((onCleanup) => {\n      if (!this.mobileMenuOpen() || !isPlatformBrowser(this.platformId)) {\n        return;\n      }\n      const onClick = (event: MouseEvent): void => {\n        const target = event.target;\n        if (!(target instanceof Node)) return;\n        const path =\n          typeof event.composedPath === \"function\"\n            ? event.composedPath()\n            : [target];\n        const menu = this.host.nativeElement.querySelector(\"#mobile-menu\");\n        const toggle =\n          this.host.nativeElement.querySelector(\"#mobile-menu-btn\");\n        const clickedInside = path.some(\n          (node) =>\n            node instanceof Node &&\n            ((menu !== null && (node === menu || menu.contains(node))) ||\n              (toggle !== null && (node === toggle || toggle.contains(node)))),\n        );\n        if (!clickedInside) {\n          this.closeMobileMenu();\n        }\n      };\n      const onKeydown = (event: KeyboardEvent): void => {\n        if (event.key === \"Escape\") {\n          this.closeMobileMenu();\n        }\n      };\n      document.addEventListener(\"click\", onClick);\n      document.addEventListener(\"keydown\", onKeydown);\n      onCleanup(() => {\n        document.removeEventListener(\"click\", onClick);\n        document.removeEventListener(\"keydown\", onKeydown);\n      });\n    });\n\n    if (isPlatformBrowser(this.platformId)) {\n      const desktopQuery = window.matchMedia(\"(min-width: 768px)\");\n      const onViewport = (event: MediaQueryListEvent): void => {\n        if (event.matches) {\n          this.closeMobileMenu();\n        }\n      };\n      desktopQuery.addEventListener(\"change\", onViewport);\n      this.destroyRef.onDestroy(() => {\n        desktopQuery.removeEventListener(\"change\", onViewport);\n      });\n    }\n  }\n\n  protected onBrandClick(event: MouseEvent): void {\n    if (this.context() !== \"app\") {\n      return;\n    }\n    event.preventDefault();\n    this.marketingNavigate.emit(this.brandHref());\n  }\n\n  protected onExternalClick(\n    event: MouseEvent,\n    link: (typeof SITE_NAV_LINKS)[number],\n  ): void {\n    if (this.context() !== \"app\") {\n      return;\n    }\n    const href = resolveNavHref(link, this.context(), this.urls());\n    try {\n      const targetOrigin = new URL(href, window.location.origin).origin;\n      const marketingOrigin = new URL(this.urls().marketing).origin;\n      if (targetOrigin !== marketingOrigin) {\n        return;\n      }\n    } catch {\n      return;\n    }\n    event.preventDefault();\n    this.marketingNavigate.emit(href);\n  }\n\n  protected toggleMobileMenu(): void {\n    if (!this.isMobileViewport()) {\n      this.closeMobileMenu();\n      return;\n    }\n    this.mobileMenuOpen.update((open) => !open);\n  }\n\n  protected closeMobileMenu(): void {\n    if (this.mobileMenuOpen()) {\n      this.mobileMenuOpen.set(false);\n    }\n  }\n\n  protected onMobileMenuKeydown(event: KeyboardEvent): void {\n    const menu =\n      this.host.nativeElement.querySelector<HTMLElement>(\"#mobile-menu\");\n    if (menu) trapTabKey(event, menu);\n  }\n\n  protected openSearch(): void {\n    this.closeMobileMenu();\n    this.searchOpen.emit();\n    readDemlWidgets().openSearch?.();\n  }\n\n  private isMobileViewport(): boolean {\n    return (\n      typeof window === \"undefined\" ||\n      !window.matchMedia(\"(min-width: 768px)\").matches\n    );\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n} from \"@angular/core\";\n\n/**\n * viking-footer — site-wide Drakkar footer shell. Project directory columns and bottom row via slots.\n * Static apps (marketing, backend) use the same class names from viking-ui.css.\n */\n@Component({\n  selector: \"viking-footer\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: \"viking-footer-host\" },\n  template: `\n    <footer class=\"viking-footer mega-footer\">\n      <div class=\"viking-footer-content footer-content\">\n        <ng-content select=\"[vikingFooterDirectory]\" />\n        <section class=\"viking-footer-bottom footer-bottom\">\n          <ng-content select=\"[vikingFooterBottom]\" />\n        </section>\n      </div>\n    </footer>\n  `,\n  styleUrl: \"../../styles/components/footer.scss\",\n})\nexport class VikingFooter {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n} from \"@angular/core\";\nimport { RouterLink } from \"@angular/router\";\nimport { VikingFooter } from \"../footer/footer\";\nimport {\n  cookieSettingsHref,\n  DEFAULT_SITE_URLS,\n  isAppRouterPath,\n  resolveFooterHref,\n  SITE_FOOTER_COLUMNS,\n  SiteDrakkarContext,\n  SiteFooterLink,\n  SiteUrls,\n} from \"./site-drakkar.config\";\n\n/**\n * viking-site-footer — canonical site footer shared across DEML surfaces.\n */\n@Component({\n  selector: \"viking-site-footer\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [RouterLink, VikingFooter],\n  template: `\n    <viking-footer>\n      <nav\n        vikingFooterDirectory\n        class=\"viking-footer-directory footer-directory\"\n        aria-label=\"Footer Directory\"\n      >\n        @for (column of columns(); track column.title) {\n          <div class=\"footer-column\">\n            <h2 class=\"footer-column-title\">{{ column.title }}</h2>\n            <ul class=\"footer-list\">\n              @for (link of column.links; track link.label) {\n                <li>\n                  @if (link.action === \"cookie-settings\") {\n                    @if (context() === \"marketing\") {\n                      <a href=\"#\" (click)=\"onCookieSettings($event)\">{{\n                        link.label\n                      }}</a>\n                    } @else {\n                      <a\n                        [href]=\"cookieSettingsUrl()\"\n                        (click)=\"\n                          onMarketingHrefClick($event, cookieSettingsUrl())\n                        \"\n                        >{{ link.label }}</a\n                      >\n                    }\n                  } @else if (link.action === \"bug-report\") {\n                    @if (context() === \"app\") {\n                      <a href=\"#\" (click)=\"onBugReport($event)\">{{\n                        link.label\n                      }}</a>\n                    } @else {\n                      <a [href]=\"resolveHref(link)\">{{ link.label }}</a>\n                    }\n                  } @else if (context() === \"app\" && isAppRoute(link)) {\n                    <a [routerLink]=\"link.appHref\">{{ link.label }}</a>\n                  } @else {\n                    <a\n                      [href]=\"resolveHref(link)\"\n                      (click)=\"onExternalClick($event, link)\"\n                      >{{ link.label }}</a\n                    >\n                  }\n                </li>\n              }\n            </ul>\n          </div>\n        }\n      </nav>\n\n      <ng-container vikingFooterBottom>\n        <div class=\"footer-badges-top\">\n          <span class=\"usa-badge viking-usa-badge\" id=\"usa-badge\">\n            <span\n              class=\"usa-badge-icon viking-usa-badge-icon\"\n              aria-hidden=\"true\"\n              >🇺🇸</span\n            >\n            <span>Made in the U.S.A</span>\n          </span>\n        </div>\n\n        <div class=\"footer-compliance-row\">\n          <div class=\"copyright-info\">\n            <span class=\"copyright-text\">\n              Copyright © {{ year() }} Data Engineering for Machine Learning by\n              <a\n                href=\"https://joealongi.dev/\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                >Joe Alongi</a\n              >. All rights reserved.\n            </span>\n          </div>\n        </div>\n      </ng-container>\n    </viking-footer>\n  `,\n})\nexport class VikingSiteFooter {\n  readonly context = input<SiteDrakkarContext>(\"app\");\n  readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n  readonly year = input<number>(new Date().getFullYear());\n  readonly isAuthenticated = input<boolean>(false);\n\n  readonly cookieSettings = output<Event>();\n  readonly bugReport = output<Event>();\n  readonly marketingNavigate = output<string>();\n\n  protected readonly columns = computed(() =>\n    SITE_FOOTER_COLUMNS.map((column) => ({\n      ...column,\n      links: column.links.filter(\n        (link) => !link.requireAuth || this.isAuthenticated(),\n      ),\n    })),\n  );\n\n  protected readonly cookieSettingsUrl = () => cookieSettingsHref(this.urls());\n\n  protected resolveHref = (link: SiteFooterLink): string =>\n    resolveFooterHref(link, this.context(), this.urls());\n\n  protected isAppRoute = (link: SiteFooterLink): boolean =>\n    !link.action && isAppRouterPath(link.appHref);\n\n  protected onCookieSettings(event: Event): void {\n    event.preventDefault();\n    this.cookieSettings.emit(event);\n  }\n\n  protected onBugReport(event: Event): void {\n    event.preventDefault();\n    this.bugReport.emit(event);\n  }\n\n  protected onExternalClick(event: Event, link: SiteFooterLink): void {\n    this.onMarketingHrefClick(event, this.resolveHref(link));\n  }\n\n  protected onMarketingHrefClick(event: Event, href: string): void {\n    if (this.context() !== \"app\") {\n      return;\n    }\n    try {\n      const targetOrigin = new URL(href, window.location.origin).origin;\n      const marketingOrigin = new URL(this.urls().marketing).origin;\n      if (targetOrigin !== marketingOrigin) {\n        return;\n      }\n    } catch {\n      return;\n    }\n    event.preventDefault();\n    this.marketingNavigate.emit(href);\n  }\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-app-header — sticky application header with brand, nav, actions, and mobile menu slots.\n * Styles live in the component library so all apps share one navbar implementation.\n */\n@Component({\n  selector: \"viking-app-header\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <header class=\"viking-app-header\">\n      <div class=\"viking-app-header-content\">\n        <div class=\"viking-app-header-left\">\n          <ng-content select=\"[vikingAppHeaderBrand]\" />\n        </div>\n        <nav\n          class=\"viking-app-header-center viking-app-header-desktop-nav\"\n          aria-label=\"Main navigation\"\n        >\n          <ng-content select=\"[vikingAppHeaderNav]\" />\n        </nav>\n        <div class=\"viking-app-header-right\">\n          <div class=\"viking-app-header-desktop-auth\">\n            <ng-content select=\"[vikingAppHeaderAuth]\" />\n          </div>\n          <div class=\"viking-app-header-actions\">\n            <ng-content select=\"[vikingAppHeaderActions]\" />\n          </div>\n        </div>\n      </div>\n      <nav\n        class=\"viking-app-header-mobile\"\n        [class.viking-open]=\"mobileMenuOpen()\"\n        [attr.aria-label]=\"mobileMenuLabel()\"\n      >\n        <ng-content select=\"[vikingAppHeaderMobile]\" />\n      </nav>\n    </header>\n  `,\n  styleUrl: \"./app-header.scss\",\n})\nexport class VikingAppHeader {\n  readonly mobileMenuOpen = input<boolean>(false);\n  readonly mobileMenuLabel = input<string>(\"Mobile navigation\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  input,\n  output,\n} from \"@angular/core\";\n\n/**\n * viking-app-sidebar — dashboard sidebar shell styles (project nav markup inside).\n * Width is driven by the `--viking-sidebar-width` CSS variable on the host.\n */\n@Component({\n  selector: \"viking-app-sidebar\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: \"viking-app-sidebar-host\",\n    \"[style.--viking-sidebar-width.px]\": \"collapsed() ? null : width()\",\n  },\n  template: `<ng-content />`,\n  styleUrl: \"./app-sidebar.scss\",\n})\nexport class VikingAppSidebar {\n  readonly collapsed = input<boolean>(false);\n  readonly dragging = input<boolean>(false);\n  readonly width = input<number>(260);\n  readonly resizeStart = output<MouseEvent>();\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  afterNextRender,\n  computed,\n  contentChildren,\n  effect,\n  inject,\n  input,\n  model,\n  output,\n  signal,\n} from \"@angular/core\";\nimport { VikingIconComponent } from \"../icon/icon\";\n\nexport type VikingAppLayoutDensity = \"compact\" | \"default\" | \"loose\";\nexport type VikingSplitPanelSize = \"compact\" | \"default\" | \"large\";\n\n/** Declarative drawer entry selected by viking-app-layout.activeDrawerId. */\n@Component({\n  selector: \"viking-app-layout-drawer\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-app-layout-drawer\",\n    \"[attr.hidden]\": \"active() ? null : ''\",\n  },\n  template: `<ng-content />`,\n})\nexport class VikingAppLayoutDrawer {\n  readonly drawerId = input.required<string>();\n  readonly label = input<string>(\"Contextual drawer\");\n  readonly active = signal<boolean>(false);\n}\n\n/** Responsive application shell with independently collapsible navigation and tools. */\n@Component({\n  selector: \"viking-app-layout\",\n  standalone: true,\n  imports: [VikingIconComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class]\": \"hostClass()\",\n    \"[attr.data-density]\": \"densityContext()\",\n  },\n  template: `\n    @if (hasSidebar()) {\n      <aside\n        id=\"viking-app-layout-sidebar\"\n        class=\"viking-app-layout__sidebar\"\n        [class.viking-app-layout__sidebar--open]=\"sidebarOpen()\"\n        [attr.aria-hidden]=\"!sidebarOpen()\"\n        aria-label=\"Primary navigation\"\n      >\n        <ng-content select=\"[vikingAppLayoutSidebar]\" />\n      </aside>\n    }\n\n    <div class=\"viking-app-layout__main\">\n      @if (\n        headerContent() ||\n        (hasSidebar() && sidebarCollapsible()) ||\n        (toolsVisible() && toolsCollapsible())\n      ) {\n        <header class=\"viking-app-layout__header\">\n          @if (hasSidebar() && sidebarCollapsible()) {\n            <button\n              class=\"viking-app-layout__toggle\"\n              type=\"button\"\n              aria-label=\"Toggle navigation\"\n              aria-controls=\"viking-app-layout-sidebar\"\n              [attr.aria-expanded]=\"sidebarOpen()\"\n              (click)=\"toggleSidebar()\"\n            >\n              <viking-icon name=\"menu\" [size]=\"20\" [ariaHidden]=\"true\" />\n            </button>\n          }\n          <div class=\"viking-app-layout__header-content\">\n            <ng-content select=\"[vikingAppLayoutHeader]\" />\n          </div>\n          @if (toolsVisible() && toolsCollapsible()) {\n            <button\n              class=\"viking-app-layout__toggle\"\n              type=\"button\"\n              aria-label=\"Toggle tools panel\"\n              aria-controls=\"viking-app-layout-tools\"\n              [attr.aria-expanded]=\"toolsOpen()\"\n              (click)=\"toggleTools()\"\n            >\n              <viking-icon name=\"settings\" [size]=\"20\" [ariaHidden]=\"true\" />\n            </button>\n          }\n        </header>\n      }\n\n      <div class=\"viking-app-layout__content\">\n        <div class=\"viking-app-layout__notifications\">\n          <ng-content select=\"[vikingAppLayoutNotifications]\" />\n        </div>\n        <div class=\"viking-app-layout__breadcrumbs\">\n          <ng-content select=\"[vikingAppLayoutBreadcrumbs]\" />\n        </div>\n        <ng-content select=\"[vikingAppLayoutContent]\" />\n      </div>\n\n      @if (hasSplitPanel()) {\n        <section\n          id=\"viking-app-layout-split-panel\"\n          class=\"viking-app-layout__split-panel\"\n          [class.viking-app-layout__split-panel--open]=\"splitPanelOpen()\"\n          [attr.aria-hidden]=\"!splitPanelOpen()\"\n          [attr.aria-label]=\"splitPanelLabel()\"\n        >\n          <header class=\"viking-app-layout__split-panel-header\">\n            <span>{{ splitPanelLabel() }}</span>\n            <button\n              class=\"viking-app-layout__toggle\"\n              type=\"button\"\n              aria-label=\"Close split panel\"\n              aria-controls=\"viking-app-layout-split-panel\"\n              [attr.aria-expanded]=\"splitPanelOpen()\"\n              (click)=\"toggleSplitPanel()\"\n            >\n              <viking-icon name=\"x\" [size]=\"20\" [ariaHidden]=\"true\" />\n            </button>\n          </header>\n          <div class=\"viking-app-layout__split-panel-body\">\n            <ng-content select=\"[vikingAppLayoutSplitPanel]\" />\n          </div>\n        </section>\n      }\n\n      @if (footerContent()) {\n        <footer class=\"viking-app-layout__footer\">\n          <ng-content select=\"[vikingAppLayoutFooter]\" />\n        </footer>\n      }\n    </div>\n\n    @if (toolsVisible()) {\n      <aside\n        id=\"viking-app-layout-tools\"\n        class=\"viking-app-layout__tools\"\n        [class.viking-app-layout__tools--open]=\"toolsOpen()\"\n        [attr.aria-hidden]=\"!toolsOpen()\"\n        aria-label=\"Contextual tools\"\n      >\n        <ng-content\n          select=\"[vikingAppLayoutTools], [vikingAppLayoutTrailing]\"\n        />\n      </aside>\n    }\n\n    @if (activeDrawerId()) {\n      <aside\n        id=\"viking-app-layout-drawer\"\n        class=\"viking-app-layout__drawer\"\n        [attr.aria-label]=\"resolvedDrawerLabel()\"\n      >\n        <header class=\"viking-app-layout__drawer-header\">\n          <span>{{ resolvedDrawerLabel() }}</span>\n          <button\n            class=\"viking-app-layout__toggle\"\n            type=\"button\"\n            aria-label=\"Close drawer\"\n            aria-controls=\"viking-app-layout-drawer\"\n            (click)=\"closeDrawer()\"\n          >\n            <viking-icon name=\"x\" [size]=\"20\" [ariaHidden]=\"true\" />\n          </button>\n        </header>\n        <div class=\"viking-app-layout__drawer-body\">\n          <ng-content\n            select=\"viking-app-layout-drawer, [vikingAppLayoutDrawer]\"\n          />\n        </div>\n      </aside>\n    }\n\n    @if (\n      (hasSidebar() && sidebarOpen()) ||\n      (toolsVisible() && toolsOpen()) ||\n      activeDrawerId()\n    ) {\n      <button\n        class=\"viking-app-layout__scrim\"\n        type=\"button\"\n        aria-label=\"Close application panels\"\n        (click)=\"closePanels()\"\n      ></button>\n    }\n  `,\n})\nexport class VikingAppLayout {\n  private readonly destroyRef = inject(DestroyRef);\n\n  readonly hasSidebar = input<boolean>(false);\n  readonly hasTools = input<boolean>(false);\n  /** @deprecated Use hasTools. */\n  readonly hasTrailingSidebar = input<boolean>(false);\n  readonly headerContent = input<boolean>(false);\n  readonly footerContent = input<boolean>(false);\n  readonly sidebarCollapsible = input<boolean>(true);\n  readonly toolsCollapsible = input<boolean>(true);\n  readonly autoOpenSidebar = input<boolean>(true);\n  readonly hasSplitPanel = input<boolean>(false);\n  readonly splitPanelLabel = input<string>(\"Details\");\n  readonly splitPanelSize = input<VikingSplitPanelSize>(\"default\");\n  readonly drawerLabel = input<string>(\"Contextual drawer\");\n  readonly density = input<VikingAppLayoutDensity>(\"default\");\n  readonly sidebarOpen = model<boolean>(false);\n  readonly toolsOpen = model<boolean>(false);\n  readonly splitPanelOpen = model<boolean>(false);\n  readonly activeDrawerId = model<string | null>(null);\n  readonly sidebarToggle = output<boolean>();\n  readonly toolsToggle = output<boolean>();\n  readonly splitPanelToggle = output<boolean>();\n  readonly drawerChange = output<string | null>();\n  private readonly drawers = contentChildren(VikingAppLayoutDrawer, {\n    descendants: true,\n  });\n  protected readonly toolsVisible = computed(\n    () => this.hasTools() || this.hasTrailingSidebar(),\n  );\n  protected readonly densityContext = computed(() =>\n    this.density() === \"loose\" ? \"comfortable\" : this.density(),\n  );\n  protected readonly resolvedDrawerLabel = computed(\n    () =>\n      this.drawers()\n        .find((drawer) => drawer.drawerId() === this.activeDrawerId())\n        ?.label() ?? this.drawerLabel(),\n  );\n\n  constructor() {\n    effect(() => {\n      const activeId = this.activeDrawerId();\n      for (const drawer of this.drawers()) {\n        const next = drawer.drawerId() === activeId;\n        if (drawer.active() !== next) {\n          drawer.active.set(next);\n        }\n      }\n    });\n    afterNextRender(() => {\n      const desktopQuery = window.matchMedia(\"(min-width: 1024px)\");\n      const syncSidebarForViewport = (\n        event: MediaQueryList | MediaQueryListEvent,\n      ): void => {\n        if (!this.autoOpenSidebar()) return;\n        if (this.sidebarOpen() === event.matches) return;\n        this.sidebarOpen.set(event.matches);\n      };\n\n      syncSidebarForViewport(desktopQuery);\n      desktopQuery.addEventListener(\"change\", syncSidebarForViewport);\n      this.destroyRef.onDestroy(() => {\n        desktopQuery.removeEventListener(\"change\", syncSidebarForViewport);\n      });\n    });\n  }\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-app-layout\",\n      `viking-app-layout--${this.density()}`,\n      this.hasSidebar() && this.sidebarOpen()\n        ? \"viking-app-layout--sidebar-open\"\n        : \"\",\n      this.toolsVisible() && this.toolsOpen()\n        ? \"viking-app-layout--tools-open\"\n        : \"\",\n      this.hasSplitPanel()\n        ? `viking-app-layout--split-panel-${this.splitPanelSize()}`\n        : \"\",\n      this.hasSidebar() &&\n      this.sidebarCollapsible() &&\n      !this.headerContent() &&\n      !(this.toolsVisible() && this.toolsCollapsible())\n        ? \"viking-app-layout--sidebar-toggle-only\"\n        : \"\",\n      this.splitPanelOpen() ? \"viking-app-layout--split-panel-open\" : \"\",\n      this.activeDrawerId() ? \"viking-app-layout--drawer-open\" : \"\",\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n\n  protected readonly toggleSidebar = (): void => {\n    const next = !this.sidebarOpen();\n    this.sidebarOpen.set(next);\n    this.sidebarToggle.emit(next);\n  };\n\n  protected readonly toggleTools = (): void => {\n    const next = !this.toolsOpen();\n    this.toolsOpen.set(next);\n    this.toolsToggle.emit(next);\n  };\n\n  protected readonly closePanels = (): void => {\n    this.sidebarOpen.set(false);\n    this.toolsOpen.set(false);\n    this.closeDrawer();\n  };\n\n  protected readonly toggleSplitPanel = (): void => {\n    const next = !this.splitPanelOpen();\n    this.splitPanelOpen.set(next);\n    this.splitPanelToggle.emit(next);\n  };\n\n  protected readonly closeDrawer = (): void => {\n    this.activeDrawerId.set(null);\n    this.drawerChange.emit(null);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-accordion — collapsible content panels.\n * Set exclusive to allow only one open item at a time.\n */\n@Component({\n  selector: \"viking-accordion\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: block;\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        overflow: hidden;\n      }\n      :host ::ng-deep viking-accordion-item:not(:last-child) {\n        border-bottom: 1px solid var(--viking-border);\n      }\n    `,\n  ],\n})\nexport class VikingAccordion {\n  readonly exclusive = input<boolean>(false);\n\n  private openItem: VikingAccordionItem | null = null;\n\n  /** Called by items when they open, to enforce exclusive mode. */\n  readonly notifyOpened = (item: VikingAccordionItem): void => {\n    if (this.exclusive() && this.openItem && this.openItem !== item) {\n      this.openItem.expanded.set(false);\n    }\n    this.openItem = item;\n  };\n}\n\n/** A single expandable section within viking-accordion. */\n@Component({\n  selector: \"viking-accordion-item\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <button\n      type=\"button\"\n      class=\"viking-accordion-trigger\"\n      [id]=\"triggerId\"\n      [attr.aria-expanded]=\"expanded()\"\n      [attr.aria-controls]=\"panelId\"\n      (click)=\"toggle()\"\n    >\n      <span class=\"viking-accordion-heading\">{{ heading() }}</span>\n      <viking-icon\n        [name]=\"expanded() ? 'chevron-up' : 'chevron-down'\"\n        [size]=\"18\"\n      />\n    </button>\n    @if (expanded()) {\n      <div\n        class=\"viking-accordion-panel\"\n        [id]=\"panelId\"\n        role=\"region\"\n        [attr.aria-labelledby]=\"triggerId\"\n      >\n        <ng-content />\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      .viking-accordion-trigger {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        width: 100%;\n        border: none;\n        background: transparent;\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-ui);\n        font-weight: 700;\n        padding: var(--viking-space-2);\n        cursor: pointer;\n        text-align: left;\n        transition: var(--viking-transition);\n      }\n      .viking-accordion-trigger:hover {\n        background: var(--viking-accent-soft);\n      }\n      .viking-accordion-trigger:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: -3px;\n      }\n      .viking-accordion-panel {\n        padding: 0 var(--viking-space-2) var(--viking-space-2);\n        color: var(--viking-text-muted);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        line-height: 1.6;\n      }\n    `,\n  ],\n})\nexport class VikingAccordionItem {\n  private readonly accordion = inject(VikingAccordion, { optional: true });\n\n  readonly heading = input.required<string>();\n  readonly expanded = model<boolean>(false);\n\n  protected readonly panelId = vikingUid(\"viking-accordion-panel\");\n  protected readonly triggerId = vikingUid(\"viking-accordion-trigger\");\n\n  protected toggle = (): void => {\n    this.expanded.update((value) => !value);\n    if (this.expanded()) {\n      this.accordion?.notifyOpened(this);\n    }\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-separator — horizontal/vertical rule with optional label\n *.\n */\n@Component({\n  selector: \"viking-separator\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"separator\",\n    \"[attr.aria-orientation]\": \"orientation()\",\n    \"[class.viking-vertical]\": \"orientation() === 'vertical'\",\n  },\n  template: `\n    @if (text() && orientation() === \"horizontal\") {\n      <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n      <span class=\"viking-separator-text\">{{ text() }}</span>\n      <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n    } @else {\n      <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-2);\n        width: 100%;\n      }\n      :host(.viking-vertical) {\n        width: auto;\n        align-self: stretch;\n      }\n      .viking-separator-line {\n        flex: 1;\n        border-top: 1px solid var(--viking-border);\n      }\n      :host(.viking-vertical) .viking-separator-line {\n        flex: none;\n        border-top: none;\n        border-left: 1px solid var(--viking-border);\n        height: 100%;\n        min-height: var(--viking-space-3);\n      }\n      .viking-separator-text {\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        white-space: nowrap;\n      }\n    `,\n  ],\n})\nexport class VikingSeparator {\n  readonly orientation = input<\"horizontal\" | \"vertical\">(\"horizontal\");\n  readonly text = input<string>(\"\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  output,\n} from \"@angular/core\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingSeparator } from \"../separator/separator\";\n\n/**\n * viking-auth-panel — access portal / sign-in layout template.\n * Full-width stacked actions, Google + Apple OAuth row, WCAG-friendly structure.\n */\n@Component({\n  selector: \"viking-auth-panel\",\n  imports: [VikingButton, VikingSeparator],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: \"viking-auth-panel-host\" },\n  template: `\n    <section class=\"viking-auth-panel\" aria-labelledby=\"viking-auth-title\">\n      <header class=\"viking-auth-header\">\n        @if (tag()) {\n          <div class=\"viking-auth-tag-row\">\n            <span class=\"viking-auth-tag\">{{ tag() }}</span>\n          </div>\n        }\n        <h1 id=\"viking-auth-title\" class=\"viking-auth-title\">{{ title() }}</h1>\n        @if (subtitle()) {\n          <p class=\"viking-auth-subtitle\">{{ subtitle() }}</p>\n        }\n      </header>\n\n      <div class=\"viking-auth-body\">\n        <ng-content />\n      </div>\n\n      <ng-content select=\"[vikingAuthLinks]\" />\n\n      @if (showSocial()) {\n        <viking-separator text=\"or\" />\n        <div\n          class=\"viking-auth-social\"\n          role=\"group\"\n          aria-label=\"Social sign-in\"\n        >\n          <viking-button\n            variant=\"outline\"\n            type=\"button\"\n            icon=\"google\"\n            [fullWidth]=\"true\"\n            [loading]=\"socialLoading()\"\n            [disabled]=\"socialLoading()\"\n            (pressed)=\"googleSignIn.emit()\"\n          >\n            Sign In with Google\n          </viking-button>\n          <viking-button\n            variant=\"outline\"\n            type=\"button\"\n            icon=\"apple\"\n            [fullWidth]=\"true\"\n            [loading]=\"socialLoading()\"\n            [disabled]=\"socialLoading()\"\n            (pressed)=\"appleSignIn.emit()\"\n          >\n            Sign In with Apple\n          </viking-button>\n        </div>\n      }\n\n      <footer class=\"viking-auth-footer\">\n        <ng-content select=\"[vikingAuthFooter]\" />\n      </footer>\n    </section>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n        max-width: 520px;\n        margin-inline: auto;\n        font-family: var(--viking-font-family);\n      }\n      .viking-auth-panel {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-4);\n        width: 100%;\n        padding: var(--viking-card-padding);\n        background: var(--viking-surface-recipe, var(--viking-surface));\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius-xl);\n        box-shadow: var(--viking-shadow-md);\n        box-sizing: border-box;\n      }\n      .viking-auth-header {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-2);\n        margin-bottom: var(--viking-space-2);\n      }\n      .viking-auth-tag-row {\n        display: flex;\n        align-items: center;\n      }\n      .viking-auth-tag {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        font-size: var(--viking-font-size-ui);\n        font-weight: 700;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n        color: var(--viking-text-muted);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-accent-soft);\n      }\n      .viking-auth-tag::before {\n        content: \"\";\n        width: var(--viking-space-1);\n        height: var(--viking-space-1);\n        border-radius: 50%;\n        background: var(--viking-accent);\n        flex-shrink: 0;\n      }\n      .viking-auth-title {\n        margin: 0;\n        font-size: var(--viking-font-size-xl);\n        font-weight: 700;\n        letter-spacing: var(--header-letter-spacing, -0.02em);\n        color: var(--viking-text);\n        line-height: var(--viking-line-height-tight);\n      }\n      .viking-auth-subtitle {\n        margin: 0;\n        font-size: var(--viking-font-size);\n        line-height: 1.6;\n        color: var(--viking-text-muted);\n      }\n      .viking-auth-body {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n      }\n      :host ::ng-deep .viking-auth-stack {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n      }\n      :host ::ng-deep .viking-auth-stack viking-callout {\n        width: 100%;\n      }\n      :host ::ng-deep .viking-auth-stack .login-form,\n      :host ::ng-deep .login-form {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n        max-width: 100%;\n        margin-inline: 0;\n      }\n      .viking-auth-social {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n      }\n      .viking-auth-footer {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n        margin-top: var(--viking-space-4);\n        padding-top: var(--viking-space-3);\n        border-top: 1px solid var(--viking-border);\n      }\n      :host ::ng-deep [vikingAuthFooter] {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n      }\n      :host ::ng-deep [vikingAuthLinks].viking-auth-links,\n      :host ::ng-deep .viking-auth-links {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-2);\n        width: 100%;\n      }\n      /* Uniform full-width stack: fields, inputs, and every action button. */\n      :host ::ng-deep viking-field,\n      :host ::ng-deep viking-input,\n      :host ::ng-deep viking-input-wc,\n      :host ::ng-deep viking-verification-code-field,\n      :host ::ng-deep viking-callout,\n      :host ::ng-deep .viking-auth-social,\n      :host ::ng-deep [vikingAuthFooter],\n      :host ::ng-deep [vikingAuthLinks] {\n        width: 100%;\n        max-width: 100%;\n        box-sizing: border-box;\n      }\n      :host ::ng-deep viking-button {\n        display: block !important;\n        width: 100% !important;\n        max-width: 100% !important;\n        min-width: 0 !important;\n      }\n      :host ::ng-deep viking-button .viking-btn {\n        width: 100% !important;\n        min-width: 0 !important;\n        max-width: 100% !important;\n        box-sizing: border-box;\n      }\n      :host ::ng-deep viking-input .viking-input,\n      :host ::ng-deep viking-input-wc,\n      :host ::ng-deep viking-input input,\n      :host ::ng-deep .viking-input-control {\n        width: 100%;\n        box-sizing: border-box;\n      }\n    `,\n  ],\n})\nexport class VikingAuthPanel {\n  readonly tag = input(\"Access Portal\");\n  readonly title = input.required<string>();\n  readonly subtitle = input(\n    \"Secure entry to the DEML (DATA ENGINEERING FOR MACHINE LEARNING).\",\n  );\n  readonly showSocial = input(true);\n  readonly socialLoading = input(false);\n\n  readonly googleSignIn = output<void>();\n  readonly appleSignIn = output<void>();\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  computed,\n  inject,\n  input,\n  model,\n  output,\n  signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-autocomplete — text input with filtered suggestions\n *. ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-autocomplete\",\n  imports: [VikingIcon],\n  providers: [provideVikingCva(VikingAutocomplete)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"(document:click)\": \"onDocumentClick($event)\" },\n  template: `\n    <div class=\"viking-control viking-autocomplete-shell\">\n      <viking-icon class=\"viking-autocomplete-icon\" name=\"search\" [size]=\"20\" />\n      <input\n        type=\"text\"\n        role=\"combobox\"\n        [placeholder]=\"placeholder()\"\n        [value]=\"value()\"\n        [disabled]=\"disabled() || formDisabled()\"\n        [attr.aria-expanded]=\"open()\"\n        [attr.aria-controls]=\"panelId\"\n        [attr.aria-activedescendant]=\"\n          open() && filtered().length > 0 ? optionId(activeIndex()) : null\n        \"\n        [attr.aria-label]=\"label() || null\"\n        aria-autocomplete=\"list\"\n        aria-haspopup=\"listbox\"\n        (input)=\"onInput($event)\"\n        (focus)=\"open.set(true)\"\n        (keydown)=\"onKeydown($event)\"\n        (blur)=\"onTouched()\"\n      />\n    </div>\n    @if (open() && filtered().length > 0) {\n      <div class=\"viking-autocomplete-panel\" role=\"listbox\" [id]=\"panelId\">\n        @for (item of filtered(); track item; let index = $index) {\n          <button\n            type=\"button\"\n            role=\"option\"\n            class=\"viking-autocomplete-option\"\n            [id]=\"optionId(index)\"\n            [class.viking-active]=\"index === activeIndex()\"\n            [attr.aria-selected]=\"index === activeIndex()\"\n            (mousedown)=\"$event.preventDefault()\"\n            (click)=\"pick(item)\"\n            (mouseenter)=\"activeIndex.set(index)\"\n          >\n            {{ item }}\n          </button>\n        }\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: block;\n      }\n      .viking-autocomplete-shell {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        min-height: var(--viking-control-height);\n        padding: 0 var(--viking-space-2);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-sm);\n        transition: var(--viking-transition);\n      }\n      .viking-autocomplete-shell:focus-within {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-autocomplete-icon {\n        color: var(--viking-text-muted);\n      }\n      input {\n        flex: 1;\n        min-width: 0;\n        border: none;\n        outline: none;\n        background: transparent;\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n      }\n      input::placeholder {\n        color: var(--viking-text-muted);\n      }\n      .viking-autocomplete-panel {\n        position: absolute;\n        top: calc(100% + var(--viking-space-1));\n        left: 0;\n        right: 0;\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-0-5);\n        margin: 0;\n        padding: var(--viking-space-1);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-md);\n        z-index: var(--viking-z-overlay);\n        max-height: 288px;\n        overflow: auto;\n      }\n      .viking-autocomplete-option {\n        padding: var(--viking-space-1);\n        border: none;\n        background: transparent;\n        text-align: left;\n        width: 100%;\n        border-radius: calc(var(--viking-radius) / 1.5);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        cursor: pointer;\n      }\n      .viking-autocomplete-option:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: -2px;\n      }\n      .viking-active {\n        background: var(--viking-accent-soft);\n      }\n    `,\n  ],\n})\nexport class VikingAutocomplete extends VikingControl<string> {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  readonly suggestions = input.required<string[]>();\n  readonly value = model<string>(\"\");\n  readonly placeholder = input<string>(\"\");\n  readonly label = input<string>(\"\");\n  readonly disabled = input<boolean>(false);\n\n  readonly selected = output<string>();\n\n  protected readonly open = signal(false);\n  protected readonly activeIndex = signal(0);\n  protected readonly panelId = vikingUid(\"viking-autocomplete-panel\");\n  protected optionId = (index: number): string =>\n    `${this.panelId}-option-${index}`;\n\n  protected readonly filtered = computed(() => {\n    const query = this.value().toLowerCase().trim();\n    if (!query) {\n      return this.suggestions();\n    }\n    return this.suggestions().filter((item) =>\n      item.toLowerCase().includes(query),\n    );\n  });\n\n  writeValue(value: string): void {\n    this.value.set(value ?? \"\");\n  }\n\n  protected onInput = (event: Event): void => {\n    const next = (event.target as HTMLInputElement).value;\n    this.value.set(next);\n    this.onChange(next);\n    this.open.set(true);\n    this.activeIndex.set(0);\n  };\n\n  protected pick = (item: string): void => {\n    this.value.set(item);\n    this.onChange(item);\n    this.selected.emit(item);\n    this.open.set(false);\n  };\n\n  protected onKeydown = (event: KeyboardEvent): void => {\n    if (!this.open()) {\n      return;\n    }\n    const items = this.filtered();\n    switch (event.key) {\n      case \"ArrowDown\":\n        event.preventDefault();\n        this.activeIndex.update((index) =>\n          Math.min(items.length - 1, index + 1),\n        );\n        break;\n      case \"ArrowUp\":\n        event.preventDefault();\n        this.activeIndex.update((index) => Math.max(0, index - 1));\n        break;\n      case \"Enter\":\n        if (items[this.activeIndex()]) {\n          event.preventDefault();\n          this.pick(items[this.activeIndex()]);\n        }\n        break;\n      case \"Escape\":\n        this.open.set(false);\n        break;\n    }\n  };\n\n  protected onDocumentClick = (event: Event): void => {\n    if (\n      this.open() &&\n      !this.host.nativeElement.contains(event.target as Node)\n    ) {\n      this.open.set(false);\n    }\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  signal,\n} from \"@angular/core\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-avatar — image or initials avatar with optional status indicator.\n */\n@Component({\n  selector: \"viking-avatar\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[style.width.px]\": \"size()\",\n    \"[style.height.px]\": \"size()\",\n    \"[class.viking-avatar-square]\": \"square()\",\n  },\n  template: `\n    @if (src() && !imageFailed()) {\n      <img\n        class=\"suite-media\"\n        [src]=\"src()\"\n        [alt]=\"name()\"\n        [attr.width]=\"size()\"\n        [attr.height]=\"size()\"\n        loading=\"lazy\"\n        decoding=\"async\"\n        (error)=\"imageFailed.set(true)\"\n      />\n    } @else {\n      <span class=\"viking-avatar-initials\">\n        {{ initials() }}\n      </span>\n    }\n    @if (status()) {\n      <span\n        class=\"viking-avatar-status\"\n        [class]=\"'viking-status-' + status()\"\n        role=\"status\"\n      >\n        <span class=\"viking-visually-hidden\">{{ status() }}</span>\n      </span>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border);\n        overflow: visible;\n        flex-shrink: 0;\n      }\n      :host(.viking-avatar-square) {\n        border-radius: var(--viking-radius);\n      }\n      img {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        border-radius: inherit;\n      }\n      .viking-avatar-initials {\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-ui);\n        font-weight: 600;\n        color: var(--viking-text);\n        text-transform: uppercase;\n        letter-spacing: 0.02em;\n        user-select: none;\n      }\n      .viking-avatar-status {\n        position: absolute;\n        right: -1px;\n        bottom: -1px;\n        width: 27%;\n        height: 27%;\n        min-width: 9px;\n        min-height: 9px;\n        border-radius: var(--viking-radius-pill);\n        border: 2px solid var(--viking-surface);\n      }\n      .viking-status-success {\n        background: var(--viking-success);\n      }\n      .viking-status-warning {\n        background: var(--viking-warning);\n      }\n      .viking-status-danger {\n        background: var(--viking-danger);\n      }\n      .viking-status-accent {\n        background: var(--viking-accent);\n      }\n      .viking-status-muted {\n        background: var(--viking-text-muted);\n      }\n      .viking-visually-hidden {\n        position: absolute;\n        width: 1px;\n        height: 1px;\n        overflow: hidden;\n        clip: rect(0 0 0 0);\n        white-space: nowrap;\n      }\n    `,\n  ],\n})\nexport class VikingAvatar {\n  readonly src = input<string | null>(null);\n  readonly name = input<string>(\"\");\n  readonly size = input<number>(45);\n  readonly square = input<boolean>(false);\n  readonly status = input<VikingTone | null>(null);\n\n  protected readonly imageFailed = signal(false);\n\n  protected readonly initials = computed(() => {\n    const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n    if (parts.length === 0) {\n      return \"?\";\n    }\n    const first = parts[0].charAt(0);\n    const last = parts.length > 1 ? parts[parts.length - 1].charAt(0) : \"\";\n    return `${first}${last}`;\n  });\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingSize, VikingTone } from \"../../core/types\";\n\n/**\n * viking-badge — status pill.\n * Tones map to THEME.md semantic colors only.\n */\n@Component({\n  selector: \"viking-badge\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `\n    @if (icon()) {\n      <viking-icon [name]=\"icon()!\" [size]=\"16\" />\n    }\n    <ng-content />\n    @if (removable()) {\n      <button\n        type=\"button\"\n        class=\"viking-badge-remove\"\n        aria-label=\"Remove\"\n        (click)=\"removed.emit()\"\n      >\n        <viking-icon name=\"x\" [size]=\"14\" />\n      </button>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-0-5);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-xs);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-wide);\n        line-height: var(--viking-line-height-snug);\n        min-height: var(--viking-badge-height);\n        padding: 0 var(--viking-space-1);\n        border-radius: var(--viking-radius-pill);\n        border: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-component-border);\n        background: var(--viking-component-bg-subtle);\n        color: var(--viking-text);\n        white-space: nowrap;\n        transition: var(--viking-transition-interactive);\n        box-shadow: none;\n      }\n      :host(.viking-badge-sm) {\n        padding: 0 var(--viking-space-1);\n        font-size: var(--viking-font-size-2xs);\n      }\n      :host(.viking-badge-accent) {\n        background: var(--viking-accent-soft);\n        border-color: color-mix(in srgb, var(--viking-accent) 32%, transparent);\n        color: var(--viking-accent-strong);\n        box-shadow: none;\n      }\n      :host(.viking-badge-secondary) {\n        background: var(--viking-accent-secondary-soft);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-accent-secondary) 32%,\n          transparent\n        );\n        color: var(--viking-accent-secondary);\n      }\n      :host(.viking-badge-success) {\n        background: var(--viking-success-soft);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-success) 32%,\n          transparent\n        );\n        color: var(--viking-success);\n      }\n      :host(.viking-badge-warning) {\n        background: var(--viking-warning-soft);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-warning) 32%,\n          transparent\n        );\n        color: var(--viking-warning);\n      }\n      :host(.viking-badge-danger) {\n        background: var(--viking-danger-soft);\n        border-color: color-mix(in srgb, var(--viking-danger) 32%, transparent);\n        color: var(--viking-danger-text);\n      }\n      :host(.viking-badge-info) {\n        background: var(--viking-info-soft);\n        border-color: color-mix(in srgb, var(--viking-info) 32%, transparent);\n        color: var(--viking-info);\n      }\n      :host(.viking-badge-muted) {\n        color: var(--viking-text-muted);\n        background: var(--viking-surface);\n        border-color: var(--viking-border-subtle);\n      }\n      .viking-badge-remove {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-width: var(--viking-touch-target-comfort);\n        min-height: var(--viking-touch-target-comfort);\n        border: none;\n        background: transparent;\n        color: currentColor;\n        cursor: pointer;\n        padding: var(--viking-space-0-5);\n        border-radius: var(--viking-radius-pill);\n        transition: var(--viking-transition-interactive);\n        margin-left: calc(var(--viking-space-0-5) * -1);\n        position: relative;\n      }\n      .viking-badge-remove::before {\n        content: \"\";\n        position: absolute;\n        inset: 50%;\n        width: var(--viking-touch-target-min);\n        height: var(--viking-touch-target-min);\n        transform: translate(-50%, -50%);\n      }\n      .viking-badge-remove:hover {\n        background: color-mix(in srgb, currentColor 12%, transparent);\n      }\n      .viking-badge-remove:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-badge-remove:active {\n        transform: scale(var(--viking-state-active-scale));\n      }\n    `,\n  ],\n})\nexport class VikingBadge {\n  readonly tone = input<VikingTone | \"neutral\">(\"neutral\");\n  readonly size = input<VikingSize>(\"base\");\n  readonly icon = input<VikingIconName | null>(null);\n  readonly removable = input<boolean>(false);\n\n  readonly removed = output<void>();\n\n  protected readonly hostClass = computed(() => ({\n    [`viking-badge-${this.tone()}`]: this.tone() !== \"neutral\",\n    \"viking-badge-sm\": this.size() !== \"base\",\n  }));\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/** viking-bar — vertical bar for mock charts and decorative grids. */\n@Component({\n  selector: \"viking-bar\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-bar\",\n    \"[style.--viking-bar-height.%]\": \"height()\",\n  },\n  template: \"\",\n  styles: [\n    `\n      :host {\n        display: block;\n        flex: 1;\n        height: calc(var(--viking-bar-height, 50) * 1%);\n        background: linear-gradient(\n          180deg,\n          var(--viking-accent),\n          var(--viking-accent-strong, var(--viking-info))\n        );\n        border-radius: 4px 4px 0 0;\n        opacity: 0.85;\n      }\n    `,\n  ],\n})\nexport class VikingBar {\n  readonly height = input<number>(50);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\nexport type VikingBoxPadding = \"none\" | \"compact\" | \"default\" | \"loose\";\nexport type VikingBoxVariant = \"transparent\" | \"surface\" | \"muted\" | \"inset\";\n\n/** Lightweight content grouping primitive for metadata, empty states, and nested regions. */\n@Component({\n  selector: \"viking-box\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingBox {\n  readonly padding = input<VikingBoxPadding>(\"default\");\n  readonly variant = input<VikingBoxVariant>(\"transparent\");\n  readonly display = input<\"block\" | \"stack\" | \"cluster\">(\"block\");\n  readonly textAlign = input<\"start\" | \"center\" | \"end\">(\"start\");\n\n  protected readonly hostClass = computed(\n    () =>\n      `viking-box viking-box--${this.variant()} viking-box--padding-${this.padding()} ` +\n      `viking-box--${this.display()} viking-box--align-${this.textAlign()}`,\n  );\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-brand — logo + wordmark lockup.\n * Project a custom logo (img/svg) or fall back to a monogram tile.\n */\n@Component({\n  selector: \"viking-brand\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [VikingIcon],\n  template: `\n    @if (logoSrc()) {\n      <img\n        class=\"suite-media viking-brand-logo\"\n        [src]=\"logoSrc()\"\n        [alt]=\"name() + ' logo'\"\n        width=\"24\"\n        height=\"24\"\n        decoding=\"async\"\n        fetchpriority=\"high\"\n        loading=\"eager\"\n      />\n    } @else {\n      <viking-icon\n        name=\"drakkar\"\n        [size]=\"28\"\n        color=\"accent\"\n        class=\"viking-brand-mark-icon\"\n      />\n    }\n    <span class=\"viking-brand-name\">{{ name() }}</span>\n    <ng-content />\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        font-family: var(--viking-font-family);\n        color: var(--viking-text);\n        text-decoration: none;\n      }\n      .viking-brand-logo {\n        height: var(--viking-space-3);\n        width: auto;\n      }\n      .viking-brand-mark-icon {\n        color: var(--viking-accent);\n        flex-shrink: 0;\n      }\n      .viking-brand-name {\n        font-weight: 700;\n        font-size: var(--viking-font-size-ui);\n        letter-spacing: var(--header-letter-spacing, -0.02em);\n        white-space: nowrap;\n      }\n    `,\n  ],\n})\nexport class VikingBrand {\n  readonly name = input.required<string>();\n  readonly logoSrc = input<string | null>(null);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport interface VikingBreadcrumb {\n  label: string;\n  href?: string;\n}\n\n/**\n * viking-breadcrumbs — hierarchy navigation.\n */\n@Component({\n  selector: \"viking-breadcrumbs\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <nav aria-label=\"Breadcrumb\">\n      <ol class=\"viking-breadcrumbs\">\n        @for (item of items(); track item.label; let last = $last) {\n          <li class=\"viking-breadcrumb\">\n            @if (item.href && !last) {\n              <a [href]=\"item.href\">{{ item.label }}</a>\n            } @else {\n              <span [attr.aria-current]=\"last ? 'page' : null\">{{\n                item.label\n              }}</span>\n            }\n            @if (!last) {\n              <viking-icon name=\"chevron-right\" [size]=\"16\" />\n            }\n          </li>\n        }\n      </ol>\n    </nav>\n  `,\n  styles: [\n    `\n      .viking-breadcrumbs {\n        display: flex;\n        align-items: center;\n        flex-wrap: wrap;\n        gap: var(--viking-space-1);\n        margin: 0;\n        padding: 0;\n        list-style: none;\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        line-height: 1;\n      }\n      .viking-breadcrumb {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        color: var(--viking-text-muted);\n        line-height: 1;\n        min-height: 1.5rem;\n      }\n      .viking-breadcrumb a,\n      .viking-breadcrumb span {\n        display: inline-flex;\n        align-items: center;\n        line-height: 1;\n      }\n      .viking-breadcrumb viking-icon,\n      .viking-breadcrumb ::ng-deep svg {\n        display: block;\n        flex-shrink: 0;\n        align-self: center;\n      }\n      .viking-breadcrumb a {\n        color: var(--viking-text-muted);\n        text-decoration: none;\n        border-bottom: 1px solid transparent;\n        padding: var(--viking-space-0-5) 0;\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-breadcrumb a:hover {\n        color: var(--viking-accent-strong);\n        border-bottom-color: var(--viking-accent-strong);\n      }\n      .viking-breadcrumb a:focus-visible {\n        color: var(--viking-accent-strong);\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n        border-radius: var(--viking-radius-xs);\n      }\n      .viking-breadcrumb span[aria-current=\"page\"] {\n        color: var(--viking-text);\n        font-weight: var(--viking-font-weight-semibold);\n      }\n    `,\n  ],\n})\nexport class VikingBreadcrumbs {\n  readonly items = input.required<VikingBreadcrumb[]>();\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\n/**\n * viking-button-group — fuses buttons with shared borders\n *.\n */\n@Component({\n  selector: \"viking-button-group\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { role: \"group\" },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        border-radius: var(--viking-radius-lg); /* More polished rounding */\n        box-shadow: var(--viking-shadow-sm);\n        overflow: hidden;\n        gap: var(--viking-space-px); /* Subtle seam between grouped buttons */\n        background: var(--viking-border-subtle);\n      }\n      :host ::ng-deep viking-button .viking-btn {\n        box-shadow: none;\n        min-width: 0;\n        border-radius: 0; /* Fused look */\n      }\n      :host ::ng-deep viking-button:first-child .viking-btn {\n        border-top-left-radius: var(--viking-radius-lg);\n        border-bottom-left-radius: var(--viking-radius-lg);\n      }\n      :host ::ng-deep viking-button:last-child .viking-btn {\n        border-top-right-radius: var(--viking-radius-lg);\n        border-bottom-right-radius: var(--viking-radius-lg);\n      }\n      :host ::ng-deep viking-button .viking-btn:hover,\n      :host ::ng-deep viking-button .viking-btn:focus-visible {\n        z-index: 1;\n        position: relative;\n      }\n    `,\n  ],\n})\nexport class VikingButtonGroup {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  model,\n  signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\ninterface CalendarDay {\n  iso: string;\n  day: number;\n  inMonth: boolean;\n  isToday: boolean;\n}\n\nconst MONTHS = [\n  \"January\",\n  \"February\",\n  \"March\",\n  \"April\",\n  \"May\",\n  \"June\",\n  \"July\",\n  \"August\",\n  \"September\",\n  \"October\",\n  \"November\",\n  \"December\",\n];\n\nconst WEEKDAYS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\nconst toIso = (date: Date): string =>\n  `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\n\n/**\n * viking-calendar — month-grid date selection.\n * Value is an ISO date string (YYYY-MM-DD). ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-calendar\",\n  imports: [VikingIcon],\n  providers: [provideVikingCva(VikingCalendar)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"viking-calendar\">\n      <div class=\"viking-calendar-header\">\n        <button\n          type=\"button\"\n          class=\"viking-calendar-nav\"\n          aria-label=\"Previous month\"\n          (click)=\"move(-1)\"\n        >\n          <viking-icon name=\"chevron-left\" [size]=\"18\" />\n        </button>\n        <span class=\"viking-calendar-title\" aria-live=\"polite\">{{\n          title()\n        }}</span>\n        <button\n          type=\"button\"\n          class=\"viking-calendar-nav\"\n          aria-label=\"Next month\"\n          (click)=\"move(1)\"\n        >\n          <viking-icon name=\"chevron-right\" [size]=\"18\" />\n        </button>\n      </div>\n      <div\n        class=\"viking-calendar-grid\"\n        role=\"group\"\n        [attr.aria-label]=\"title()\"\n      >\n        @for (weekday of weekdays; track weekday) {\n          <span class=\"viking-calendar-weekday\" aria-hidden=\"true\">{{\n            weekday\n          }}</span>\n        }\n        @for (day of days(); track day.iso) {\n          <button\n            type=\"button\"\n            class=\"viking-calendar-day\"\n            [class.viking-outside]=\"!day.inMonth\"\n            [class.viking-today]=\"day.isToday\"\n            [class.viking-selected]=\"day.iso === value()\"\n            [attr.aria-label]=\"day.iso\"\n            [attr.aria-pressed]=\"day.iso === value()\"\n            (click)=\"pick(day)\"\n          >\n            {{ day.day }}\n          </button>\n        }\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      .viking-calendar {\n        display: inline-block;\n        padding: var(--viking-space-2);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        font-family: var(--viking-font-family);\n      }\n      .viking-calendar-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-1);\n        margin-bottom: var(--viking-space-1);\n      }\n      .viking-calendar-title {\n        font-size: var(--viking-font-size);\n        font-weight: 600;\n        color: var(--viking-text);\n      }\n      .viking-calendar-nav {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-width: var(--viking-touch-target-comfort);\n        min-height: var(--viking-touch-target-comfort);\n        border: 1px solid var(--viking-border);\n        background: transparent;\n        color: var(--viking-text-muted);\n        border-radius: var(--viking-radius-sm);\n        padding: var(--viking-space-0-5);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n        -webkit-tap-highlight-color: transparent;\n      }\n      .viking-calendar-nav:hover {\n        color: var(--viking-text);\n        border-color: var(--viking-accent-strong);\n        background: var(--viking-accent-soft);\n      }\n      .viking-calendar-nav:active {\n        transform: scale(var(--viking-state-active-scale));\n      }\n      .viking-calendar-nav:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-calendar-grid {\n        display: grid;\n        grid-template-columns: repeat(7, 1fr);\n        gap: var(--viking-space-0-5);\n      }\n      .viking-calendar-weekday {\n        text-align: center;\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        padding: calc(var(--viking-space-1) / 2);\n      }\n      .viking-calendar-day {\n        width: 100%;\n        aspect-ratio: 1;\n        min-width: var(--viking-control-height-sm);\n        min-height: var(--viking-control-height-sm);\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        border: 1px solid transparent;\n        background: transparent;\n        color: var(--viking-text);\n        border-radius: var(--viking-radius-sm);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n        font-variant-numeric: tabular-nums;\n        -webkit-tap-highlight-color: transparent;\n      }\n      .viking-calendar-day:hover:not(.viking-selected) {\n        background: var(--viking-accent-soft);\n      }\n      .viking-calendar-day:active:not(.viking-selected) {\n        transform: scale(var(--viking-state-active-scale));\n      }\n      .viking-calendar-day:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-outside {\n        color: var(--viking-text-muted);\n      }\n      .viking-today {\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-selected {\n        background: var(--viking-accent);\n        color: var(--viking-accent-content);\n        font-weight: 600;\n      }\n    `,\n  ],\n})\nexport class VikingCalendar extends VikingControl<string | null> {\n  readonly value = model<string | null>(null);\n\n  protected readonly weekdays = WEEKDAYS;\n  protected readonly viewDate = signal(new Date());\n\n  protected readonly title = computed(() => {\n    const view = this.viewDate();\n    return `${MONTHS[view.getMonth()]} ${view.getFullYear()}`;\n  });\n\n  protected readonly days = computed<CalendarDay[]>(() => {\n    const view = this.viewDate();\n    const year = view.getFullYear();\n    const month = view.getMonth();\n    const firstOfMonth = new Date(year, month, 1);\n    const start = new Date(year, month, 1 - firstOfMonth.getDay());\n    const todayIso = toIso(new Date());\n    return Array.from({ length: 42 }, (_, index) => {\n      const date = new Date(\n        start.getFullYear(),\n        start.getMonth(),\n        start.getDate() + index,\n      );\n      const iso = toIso(date);\n      return {\n        iso,\n        day: date.getDate(),\n        inMonth: date.getMonth() === month,\n        isToday: iso === todayIso,\n      };\n    });\n  });\n\n  writeValue(value: string | null): void {\n    this.value.set(value);\n    if (value) {\n      const [year, month] = value.split(\"-\").map(Number);\n      this.viewDate.set(new Date(year, month - 1, 1));\n    }\n  }\n\n  protected move = (delta: number): void => {\n    this.viewDate.update(\n      (view) => new Date(view.getFullYear(), view.getMonth() + delta, 1),\n    );\n  };\n\n  protected pick = (day: CalendarDay): void => {\n    this.value.set(day.iso);\n    this.onChange(day.iso);\n    this.onTouched();\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-skeleton — loading placeholder.\n */\n@Component({\n  selector: \"viking-skeleton\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"aria-hidden\": \"true\",\n    \"[class.viking-skeleton-circle]\": \"shape() === 'circle'\",\n    \"[style.width]\": \"width()\",\n    \"[style.height]\": \"height()\",\n  },\n  template: ``,\n  styles: [\n    `\n      :host {\n        display: block;\n        border-radius: var(--viking-radius-sm);\n        background: linear-gradient(\n          100deg,\n          var(--viking-surface-alt) 38%,\n          color-mix(\n              in srgb,\n              var(--viking-text-muted) 10%,\n              var(--viking-surface-alt)\n            )\n            50%,\n          var(--viking-surface-alt) 62%\n        );\n        background-size: 200% 100%;\n        animation: viking-shimmer 1.6s ease-in-out infinite;\n      }\n      :host(.viking-skeleton-circle) {\n        border-radius: var(--viking-radius-pill);\n      }\n      @media (prefers-reduced-motion: reduce) {\n        :host {\n          animation: none;\n          background: var(--viking-surface-alt);\n        }\n      }\n    `,\n  ],\n})\nexport class VikingSkeleton {\n  readonly shape = input<\"line\" | \"rect\" | \"circle\">(\"line\");\n  readonly width = input<string>(\"100%\");\n  readonly height = input<string>(\"var(--viking-font-size-sm)\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  input,\n} from \"@angular/core\";\nimport { VikingSkeleton } from \"../skeleton/skeleton\";\n\n/**\n * viking-card — surface container.\n * Compose with viking-card-header / viking-card-footer for structured layouts.\n */\n@Component({\n  selector: \"viking-card\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class.viking-card-interactive]\": \"interactive()\",\n    \"[class.viking-card-loading]\": \"loading()\",\n    \"[class.viking-card-compact]\": \"compact()\",\n    \"[attr.aria-busy]\": \"loading() ? 'true' : null\",\n    \"[attr.tabindex]\": \"interactive() ? 0 : null\",\n    \"[attr.role]\": \"interactive() ? 'button' : null\",\n    \"(keydown.enter)\": \"onActivate($event)\",\n    \"(keydown.space)\": \"onActivate($event)\",\n  },\n  template: `\n    @if (loading()) {\n      <div class=\"viking-card-skeleton\" aria-hidden=\"true\">\n        <viking-skeleton height=\"var(--viking-font-size-lg)\" width=\"45%\" />\n        <viking-skeleton height=\"var(--viking-font-size-sm)\" width=\"80%\" />\n        <viking-skeleton height=\"var(--viking-font-size-sm)\" width=\"65%\" />\n      </div>\n    } @else {\n      <ng-content />\n    }\n  `,\n  imports: [VikingSkeleton],\n  styles: [\n    `\n      :host {\n        display: grid;\n        gap: var(--viking-card-content-gap, var(--viking-space-3));\n        width: 100%;\n        background: var(--viking-surface-recipe);\n        border: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-border-container);\n        border-radius: var(--viking-card-radius, var(--viking-radius-lg));\n        padding: var(--viking-card-padding, var(--viking-space-3));\n        color: var(--viking-text);\n        transition: var(--viking-transition-interactive);\n        min-width: 0;\n        align-self: stretch;\n        box-sizing: border-box;\n        box-shadow: var(--viking-shadow-sm);\n      }\n\n      /* Clearer visual separation when cards sit on other surfaces */\n      :host(.viking-card) {\n        border-color: var(--viking-border-container);\n      }\n      :host(.viking-card-headerless) .viking-card-header,\n      :host(.viking-card-headerless) viking-card-header {\n        display: none;\n      }\n      :host(.viking-card-interactive) {\n        cursor: pointer;\n      }\n      :host(.viking-card-interactive):focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n        border-color: var(--viking-accent-strong);\n      }\n      :host(.viking-card-interactive):hover {\n        border-color: var(--viking-accent-strong);\n        box-shadow: var(--viking-shadow-hover);\n        background: var(--viking-surface-recipe-elevated);\n        transform: translateY(var(--viking-state-hover-lift));\n      }\n      :host(.viking-card-interactive):active {\n        transform: translateY(0) scale(var(--viking-state-active-scale));\n        box-shadow: var(--viking-shadow-hover);\n      }\n      :host(.viking-card-loading) {\n        pointer-events: none;\n      }\n      :host(.viking-card-compact) {\n        padding: var(--viking-card-padding-compact, var(--viking-space-3));\n        gap: var(--viking-card-content-gap-compact, var(--viking-space-2));\n      }\n\n      /* Structured content sections for premium polish */\n      :host ::ng-deep .viking-card-header,\n      :host ::ng-deep viking-card-header {\n        padding-bottom: var(--viking-space-4);\n        margin-bottom: 0;\n        border-bottom: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-border-subtle);\n      }\n\n      :host ::ng-deep .viking-card-content,\n      :host ::ng-deep .viking-card-body {\n        padding: 0;\n      }\n\n      :host ::ng-deep .viking-card-footer {\n        padding-top: var(--viking-space-4);\n        margin-top: 0;\n        border-top: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-border-subtle);\n      }\n\n      .viking-card-skeleton {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-2);\n      }\n    `,\n  ],\n})\nexport class VikingCard {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  readonly interactive = input<boolean>(false);\n  readonly loading = input<boolean>(false);\n  readonly compact = input<boolean>(false);\n\n  protected onActivate = (event: Event): void => {\n    if (!this.interactive() || this.loading()) {\n      return;\n    }\n    event.preventDefault();\n    this.host.nativeElement.click();\n  };\n}\n\n/** Header row for viking-card. */\n@Component({\n  selector: \"viking-card-header\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-4);\n        padding-bottom: var(--viking-space-4);\n        margin-bottom: 0;\n        border-bottom: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-border-subtle);\n      }\n      /* Support slotted left meta + right actions uniformly */\n      :host ::ng-deep > * {\n        display: inline-flex;\n        align-items: center;\n      }\n\n      :host ::ng-deep viking-card-title {\n        flex: 1 1 auto;\n        min-width: 0;\n      }\n    `,\n  ],\n})\nexport class VikingCardHeader {}\n\n/** Footer row for viking-card. */\n@Component({\n  selector: \"viking-card-footer\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: center;\n        justify-content: flex-end;\n        gap: var(--viking-space-2);\n        padding-top: var(--viking-space-4);\n        margin-top: 0;\n        border-top: 1px solid var(--viking-border-subtle);\n      }\n    `,\n  ],\n})\nexport class VikingCardFooter {}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n  VikingIconColorToken,\n  VikingIconName,\n  VikingIconSizePreset,\n} from \"../../core/icons\";\n\nexport type VikingIconBadgeTone =\n  | \"default\"\n  | \"success\"\n  | \"warning\"\n  | \"danger\"\n  | \"info\";\n\n/**\n * viking-icon-badge — consistent icon backdrop for empty states, callouts, and metric headers.\n */\n@Component({\n  selector: \"viking-icon-badge\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-icon-badge\",\n    \"[class.viking-icon-badge-success]\": \"tone() === 'success'\",\n    \"[class.viking-icon-badge-warning]\": \"tone() === 'warning'\",\n    \"[class.viking-icon-badge-danger]\": \"tone() === 'danger'\",\n    \"[class.viking-icon-badge-info]\": \"tone() === 'info'\",\n    \"[attr.aria-hidden]\": 'decorative() ? \"true\" : null',\n  },\n  template: `\n    <viking-icon\n      [name]=\"icon()\"\n      [size]=\"size()\"\n      [sizePreset]=\"sizePreset()\"\n      [color]=\"color()\"\n      [variant]=\"variant()\"\n    />\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n        width: var(--viking-icon-badge-size, var(--viking-space-6));\n        height: var(--viking-icon-badge-size, var(--viking-space-6));\n        padding: var(--viking-icon-badge-padding, var(--viking-space-0-5));\n        box-sizing: border-box;\n        border-radius: var(--viking-radius-lg);\n        background: var(--viking-accent-soft);\n        color: var(--viking-accent-strong);\n        box-shadow: var(--viking-shadow-sm);\n      }\n\n      :host(.viking-icon-badge-success) {\n        background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n        color: var(--viking-success);\n      }\n\n      :host(.viking-icon-badge-warning) {\n        background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n        color: var(--viking-warning);\n      }\n\n      :host(.viking-icon-badge-danger) {\n        background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n        color: var(--viking-danger);\n      }\n\n      :host(.viking-icon-badge-info) {\n        background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n        color: var(--viking-info);\n      }\n    `,\n  ],\n})\nexport class VikingIconBadge {\n  readonly icon = input.required<VikingIconName>();\n  readonly tone = input<VikingIconBadgeTone>(\"default\");\n  readonly size = input<number | undefined>(28);\n  readonly sizePreset = input<VikingIconSizePreset | null>(null);\n  readonly color = input<VikingIconColorToken | string | undefined>(undefined);\n  readonly variant = input<\"outline\" | \"filled\">(\"outline\");\n  readonly decorative = input<boolean>(true);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\n/**\n * viking-heading — consistent heading sizes.\n */\n@Component({\n  selector: \"viking-heading\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"heading\",\n    \"[attr.aria-level]\": \"ariaLevel()\",\n    \"[class]\": \"hostClass()\",\n  },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-text);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        font-size: var(--viking-font-size);\n        line-height: var(--viking-line-height-tight);\n        margin: 0 0 var(--viking-space-3) 0;\n      }\n      :host(.viking-heading-sm) {\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-medium);\n        margin-bottom: var(--viking-space-2);\n      }\n      :host(.viking-heading-lg) {\n        font-size: var(--viking-font-size-lg);\n        font-weight: var(--viking-font-weight-semibold);\n        margin-bottom: var(--viking-space-4);\n      }\n      :host(.viking-heading-xl) {\n        font-size: var(--viking-font-size-xl);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        margin-bottom: var(--viking-space-4);\n      }\n      /* Marketing / hero display — opt-in via viking-font-display on host or parent */\n      :host(.viking-font-display),\n      :host-context(.viking-font-display) {\n        font-weight: var(--viking-font-weight-extrabold, 800);\n        letter-spacing: var(--viking-letter-spacing-caps, 0.08em);\n        text-transform: uppercase;\n        line-height: var(--viking-line-height-none, 1);\n      }\n      :host(.viking-heading-xl.viking-font-display),\n      :host-context(.viking-font-display):host(.viking-heading-xl) {\n        font-size: clamp(\n          var(--viking-font-size-2xl, 30px),\n          4.5vw,\n          var(--viking-font-size-4xl, 48px)\n        );\n      }\n    `,\n  ],\n})\nexport class VikingHeading {\n  readonly size = input<\"sm\" | \"base\" | \"lg\" | \"xl\">(\"base\");\n  readonly level = input<1 | 2 | 3 | 4>(3);\n\n  protected readonly ariaLevel = computed(() => this.level());\n  protected readonly hostClass = computed(\n    () => `viking-heading-${this.size()}`,\n  );\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIconBadge, VikingIconBadgeTone } from \"../icon-badge/icon-badge\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingHeading } from \"../typography/heading\";\n\n/**\n * viking-card-title — card header title row with tokenized icon badge + heading.\n * Compose inside viking-card-header for premium, consistent section titles.\n */\n@Component({\n  selector: \"viking-card-title\",\n  imports: [VikingIconBadge, VikingHeading],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: \"viking-card-title\" },\n  template: `\n    <viking-icon-badge [icon]=\"icon()\" [tone]=\"tone()\" [size]=\"iconSize()\" />\n    <viking-heading [level]=\"level()\" [size]=\"size()\">\n      <ng-content />\n    </viking-heading>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-2);\n        flex: 1 1 auto;\n        min-width: 0;\n        margin: 0;\n      }\n\n      :host ::ng-deep viking-icon-badge {\n        align-self: center;\n        flex-shrink: 0;\n      }\n\n      :host ::ng-deep viking-heading {\n        display: flex;\n        align-items: center;\n        flex: 1 1 auto;\n        min-width: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        margin: 0 !important;\n        padding: 0;\n        line-height: 1.25;\n        font-size: var(--viking-font-size-lg);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        text-transform: none;\n      }\n    `,\n  ],\n})\nexport class VikingCardTitle {\n  readonly icon = input.required<VikingIconName>();\n  readonly tone = input<VikingIconBadgeTone>(\"default\");\n  readonly level = input<1 | 2 | 3 | 4>(2);\n  /** Card section titles stay compact — marketing display uses viking-font-display. */\n  readonly size = input<\"sm\" | \"base\" | \"lg\" | \"xl\">(\"lg\");\n  readonly iconSize = input<number>(20);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  contentChildren,\n  signal,\n  viewChild,\n} from \"@angular/core\";\nimport { prefersReducedMotion } from \"../../core/theme\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/** A single slide inside viking-carousel. */\n@Component({\n  selector: \"viking-carousel-slide\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { role: \"group\", \"aria-roledescription\": \"slide\" },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        flex: 0 0 100%;\n        scroll-snap-align: start;\n        display: block;\n        box-sizing: border-box;\n      }\n    `,\n  ],\n})\nexport class VikingCarouselSlide {}\n\n/**\n * viking-carousel — scroll-snap slideshow.\n */\n@Component({\n  selector: \"viking-carousel\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"aria-roledescription\": \"carousel\" },\n  template: `\n    <div\n      class=\"viking-carousel-viewport\"\n      #viewport\n      tabindex=\"0\"\n      role=\"group\"\n      aria-label=\"Carousel slides\"\n      aria-roledescription=\"carousel\"\n      (scroll)=\"onScroll()\"\n      (keydown)=\"onViewportKeydown($event)\"\n    >\n      <ng-content />\n    </div>\n    <div class=\"viking-carousel-controls\">\n      <button\n        type=\"button\"\n        class=\"viking-carousel-nav\"\n        aria-label=\"Previous slide\"\n        [disabled]=\"index() <= 0\"\n        (click)=\"goTo(index() - 1)\"\n      >\n        <viking-icon name=\"chevron-left\" [size]=\"18\" />\n      </button>\n      <div class=\"viking-carousel-dots\">\n        @for (slide of slides(); track $index) {\n          <button\n            type=\"button\"\n            class=\"viking-carousel-dot\"\n            [class.viking-active]=\"$index === index()\"\n            [attr.aria-label]=\"'Go to slide ' + ($index + 1)\"\n            [attr.aria-current]=\"$index === index()\"\n            (click)=\"goTo($index)\"\n          ></button>\n        }\n      </div>\n      <button\n        type=\"button\"\n        class=\"viking-carousel-nav\"\n        aria-label=\"Next slide\"\n        [disabled]=\"index() >= slides().length - 1\"\n        (click)=\"goTo(index() + 1)\"\n      >\n        <viking-icon name=\"chevron-right\" [size]=\"18\" />\n      </button>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      .viking-carousel-viewport {\n        display: flex;\n        overflow-x: auto;\n        scroll-snap-type: x mandatory;\n        scroll-behavior: smooth;\n        border-radius: var(--viking-radius);\n        border: 1px solid var(--viking-border);\n        background: var(--viking-surface);\n        scrollbar-width: none;\n      }\n      .viking-carousel-viewport::-webkit-scrollbar {\n        display: none;\n      }\n      .viking-carousel-viewport:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-carousel-controls {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: var(--viking-space-2);\n        margin-top: var(--viking-space-1);\n      }\n      .viking-carousel-nav {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-width: var(--viking-touch-target-comfort);\n        min-height: var(--viking-touch-target-comfort);\n        border: 1px solid var(--viking-border-strong);\n        background: var(--viking-surface);\n        color: var(--viking-text);\n        border-radius: var(--viking-radius-pill);\n        padding: var(--viking-space-1);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n        -webkit-tap-highlight-color: transparent;\n      }\n      .viking-carousel-nav:hover:not(:disabled) {\n        border-color: var(--viking-accent-strong);\n        background: var(--viking-accent-soft);\n        box-shadow: var(--viking-shadow-sm);\n        transform: translateY(var(--viking-state-hover-lift));\n      }\n      .viking-carousel-nav:active:not(:disabled) {\n        transform: translateY(0) scale(var(--viking-state-active-scale));\n      }\n      .viking-carousel-nav:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-carousel-nav:disabled {\n        opacity: 0.45;\n        cursor: not-allowed;\n      }\n      .viking-carousel-dots {\n        display: flex;\n        gap: var(--viking-space-1);\n      }\n      .viking-carousel-dot {\n        position: relative;\n        width: var(--viking-space-1);\n        height: var(--viking-space-1);\n        border-radius: var(--viking-radius-pill);\n        border: 1px solid var(--viking-border-strong);\n        background: var(--viking-surface-alt);\n        cursor: pointer;\n        padding: 0;\n        transition: var(--viking-transition-interactive);\n        -webkit-tap-highlight-color: transparent;\n      }\n      .viking-carousel-dot::before {\n        content: \"\";\n        position: absolute;\n        inset: 50%;\n        width: var(--viking-touch-target-min);\n        height: var(--viking-touch-target-min);\n        transform: translate(-50%, -50%);\n      }\n      .viking-carousel-dot:hover:not(.viking-active) {\n        border-color: var(--viking-accent-strong);\n        background: var(--viking-accent-soft);\n      }\n      .viking-carousel-dot.viking-active {\n        background: var(--viking-accent);\n        border-color: var(--viking-accent);\n        box-shadow: 0 0 0 2px var(--viking-accent-soft);\n      }\n      .viking-carousel-dot:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .viking-carousel-viewport {\n          scroll-behavior: auto;\n        }\n        .viking-carousel-nav:hover:not(:disabled),\n        .viking-carousel-nav:active:not(:disabled) {\n          transform: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingCarousel {\n  private readonly viewport =\n    viewChild.required<ElementRef<HTMLElement>>(\"viewport\");\n\n  protected readonly slides = contentChildren(VikingCarouselSlide);\n  protected readonly index = signal(0);\n  private scrollRaf = 0;\n\n  protected goTo = (target: number): void => {\n    const clamped = Math.min(this.slides().length - 1, Math.max(0, target));\n    const element = this.viewport().nativeElement;\n    // Read once, then write — avoid interleaved layout in a loop.\n    const width = element.clientWidth;\n    element.scrollTo({\n      left: clamped * width,\n      behavior: prefersReducedMotion() ? \"auto\" : \"smooth\",\n    });\n    this.index.set(clamped);\n  };\n\n  /** Switch / keyboard: arrows move slides when the viewport is focused. */\n  protected onViewportKeydown = (event: KeyboardEvent): void => {\n    if (event.key === \"ArrowLeft\") {\n      event.preventDefault();\n      this.goTo(this.index() - 1);\n      return;\n    }\n    if (event.key === \"ArrowRight\") {\n      event.preventDefault();\n      this.goTo(this.index() + 1);\n    }\n  };\n\n  protected onScroll = (): void => {\n    if (this.scrollRaf) {\n      return;\n    }\n    this.scrollRaf = requestAnimationFrame(() => {\n      this.scrollRaf = 0;\n      const element = this.viewport().nativeElement;\n      const width = element.clientWidth;\n      if (width > 0) {\n        this.index.set(Math.round(element.scrollLeft / width));\n      }\n    });\n  };\n}\n","/** Visible index window for chart zoom/pan (inclusive start, exclusive end). */\nexport interface ChartZoomWindow {\n  start: number;\n  end: number;\n}\n\nexport const fullChartWindow = (count: number): ChartZoomWindow => ({\n  start: 0,\n  end: Math.max(count, 1),\n});\n\n/** Clamp zoom window to valid bounds with a minimum visible span. */\nexport const clampChartWindow = (\n  window: ChartZoomWindow,\n  count: number,\n  minSpan = 3,\n): ChartZoomWindow => {\n  if (count <= 0) {\n    return { start: 0, end: 0 };\n  }\n  const span = Math.max(minSpan, Math.min(count, window.end - window.start));\n  let start = Math.max(0, Math.min(window.start, count - span));\n  let end = start + span;\n  if (end > count) {\n    end = count;\n    start = Math.max(0, end - span);\n  }\n  return { start, end };\n};\n\n/** Wheel delta → narrower/wider window centered on cursor fraction (0–1). */\nexport const zoomChartWindow = (\n  current: ChartZoomWindow,\n  count: number,\n  cursorFraction: number,\n  deltaY: number,\n  minSpan = 3,\n): ChartZoomWindow => {\n  if (count <= minSpan) {\n    return fullChartWindow(count);\n  }\n  const span = current.end - current.start;\n  const factor = deltaY < 0 ? 0.85 : 1.15;\n  const nextSpan = Math.max(\n    minSpan,\n    Math.min(count, Math.round(span * factor)),\n  );\n  const anchor = current.start + span * cursorFraction;\n  const raw: ChartZoomWindow = {\n    start: Math.round(anchor - nextSpan * cursorFraction),\n    end: Math.round(anchor - nextSpan * cursorFraction) + nextSpan,\n  };\n  return clampChartWindow(raw, count, minSpan);\n};\n\n/** Drag delta in data points → pan window. */\nexport const panChartWindow = (\n  current: ChartZoomWindow,\n  count: number,\n  deltaPoints: number,\n  minSpan = 3,\n): ChartZoomWindow =>\n  clampChartWindow(\n    { start: current.start - deltaPoints, end: current.end - deltaPoints },\n    count,\n    minSpan,\n  );\n\n/** Slice series rows and category labels for the active window. */\nexport const sliceChartData = <T>(values: T[], window: ChartZoomWindow): T[] =>\n  values.slice(window.start, window.end);\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ElementRef,\n  effect,\n  input,\n  OnDestroy,\n  signal,\n  viewChild,\n} from \"@angular/core\";\nimport {\n  VikingChartCurve,\n  VikingChartKind,\n  VikingChartSeries,\n  VikingDonutSegment,\n  VikingTone,\n} from \"../../core/types\";\nimport {\n  ChartZoomWindow,\n  clampChartWindow,\n  fullChartWindow,\n  panChartWindow,\n  sliceChartData,\n  zoomChartWindow,\n} from \"./chart-zoom\";\nimport { vikingUid } from \"../../core/uid\";\n\ninterface ChartPath {\n  name: string;\n  tone: VikingTone;\n  line: string;\n  area: string;\n  gradientId: string;\n}\n\ninterface ChartPoint {\n  x: number;\n  y: number;\n  tone: VikingTone;\n}\n\ninterface BarRect {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  tone: VikingTone;\n  radiusTop: boolean;\n}\n\ninterface DonutSlice {\n  label: string;\n  tone: VikingTone;\n  path: string;\n}\n\ninterface AxisLabel {\n  x: number;\n  y: number;\n  text: string;\n  anchor: \"start\" | \"middle\" | \"end\";\n}\n\ninterface TickMark {\n  x: number;\n  y1: number;\n  y2: number;\n}\n\ninterface ChartTooltip {\n  x: number;\n  y: number;\n  /** SVG plot X for the hover cursor (data-aligned). */\n  cursorX: number;\n  cursorWidth: number;\n  label: string;\n  values: {\n    name: string;\n    value: string;\n    tone: VikingTone;\n  }[];\n}\n\ninterface Gutter {\n  top: number;\n  right: number;\n  bottom: number;\n  left: number;\n}\n\nexport type VikingChartScaleStart = \"auto\" | \"min\" | \"zero\";\n\nconst TONE_VARS: Record<VikingTone, string> = {\n  accent: \"var(--viking-accent)\",\n  secondary: \"var(--viking-accent-secondary)\",\n  success: \"var(--viking-success)\",\n  warning: \"var(--viking-warning)\",\n  danger: \"var(--viking-danger)\",\n  info: \"var(--viking-info)\",\n  muted: \"var(--viking-text-muted)\",\n};\n\nconst WIDTH = 720;\nconst HEIGHT_DEFAULT = 240;\nconst HEIGHT_COMPACT = 200;\nconst HEIGHT_FILL = 280;\nconst HEIGHT_FILL_LINE = 240;\nconst HEIGHT_SPARKLINE = 48;\nconst BAR_WIDTH_MIN = 12;\nconst BAR_WIDTH_MAX = 96;\nconst SINGLE_BAR_WIDTH = 72;\nconst BAR_MIN_VISIBLE_HEIGHT_DEFAULT = 3;\nconst LABEL_MAX_DEFAULT = 8; /* fewer for cleaner mobile readability */\nconst LABEL_MAX_FILL = 14;\nconst TOOLTIP_MAX_WIDTH = 176;\nconst TOOLTIP_ROW_HEIGHT = 24;\n\nconst resolveBarWidth = (\n  slotWidth: number,\n  count: number,\n  widthPercent: number,\n): number => {\n  if (count <= 1) {\n    return SINGLE_BAR_WIDTH;\n  }\n  return Math.min(\n    BAR_WIDTH_MAX,\n    Math.max(BAR_WIDTH_MIN, slotWidth * (widthPercent / 100)),\n  );\n};\n\nconst resolveBarHeight = (\n  value: number,\n  normalized: number,\n  plotHeight: number,\n  minVisible: number,\n): number => {\n  if (value === 0) {\n    return minVisible;\n  }\n  return Math.max(normalized * plotHeight, 0);\n};\n\nconst formatTick = (value: number): string => {\n  if (value >= 1_000_000) {\n    return `${(value / 1_000_000).toFixed(1)}M`;\n  }\n  if (value >= 10_000) {\n    return `${Math.round(value / 1000)}K`;\n  }\n  if (value >= 1000) {\n    return `${(value / 1000).toFixed(1)}K`;\n  }\n  if (Number.isInteger(value)) {\n    return `${value}`;\n  }\n  return value.toFixed(value < 10 ? 1 : 0);\n};\n\nconst truncateLabel = (label: string, max = 10): string =>\n  label.length > max ? `${label.slice(0, max - 1)}…` : label;\n\nconst parseGutter = (\n  value: number | string | undefined,\n  sparkline: boolean,\n): Gutter => {\n  if (sparkline) {\n    // Small inset so stroke/area are not clipped at the edge of the slot\n    return { top: 4, right: 2, bottom: 4, left: 2 };\n  }\n  if (value === undefined || value === null) {\n    // Premium well-spaced breathing: generous for clean axes & labels\n    return { top: 12, right: 20, bottom: 36, left: 44 };\n  }\n  if (typeof value === \"number\") {\n    return { top: value, right: value, bottom: value, left: value };\n  }\n  const parts = value\n    .trim()\n    .split(/\\s+/)\n    .map((part) => Number(part));\n  if (parts.length === 1) {\n    return { top: parts[0], right: parts[0], bottom: parts[0], left: parts[0] };\n  }\n  if (parts.length === 2) {\n    return { top: parts[0], right: parts[1], bottom: parts[0], left: parts[1] };\n  }\n  if (parts.length === 3) {\n    return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[1] };\n  }\n  return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[3] };\n};\n\nconst buildLinearPath = (points: { x: number; y: number }[]): string => {\n  if (points.length === 0) {\n    return \"\";\n  }\n  return `M${points.map((point) => `${point.x.toFixed(1)},${point.y.toFixed(1)}`).join(\" L\")}`;\n};\n\nconst buildSmoothPath = (points: { x: number; y: number }[]): string => {\n  if (points.length < 3) {\n    return buildLinearPath(points);\n  }\n  let path = `M${points[0].x.toFixed(1)},${points[0].y.toFixed(1)}`;\n  for (let index = 0; index < points.length - 1; index += 1) {\n    const current = points[index];\n    const next = points[index + 1];\n    const previous = points[index - 1] ?? current;\n    const after = points[index + 2] ?? next;\n    const cp1x = current.x + (next.x - previous.x) / 6;\n    const segmentMinY = Math.min(current.y, next.y);\n    const segmentMaxY = Math.max(current.y, next.y);\n    const cp1y = Math.min(\n      segmentMaxY,\n      Math.max(segmentMinY, current.y + (next.y - previous.y) / 6),\n    );\n    const cp2x = next.x - (after.x - current.x) / 6;\n    const cp2y = Math.min(\n      segmentMaxY,\n      Math.max(segmentMinY, next.y - (after.y - current.y) / 6),\n    );\n    path += ` C${cp1x.toFixed(1)},${cp1y.toFixed(1)} ${cp2x.toFixed(1)},${cp2y.toFixed(1)} ${next.x.toFixed(1)},${next.y.toFixed(1)}`;\n  }\n  return path;\n};\n\n/**\n * viking-chart — zero-dependency native SVG charts styled after Viking UI.\n */\n@Component({\n  selector: \"viking-chart\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class.viking-chart-fill-host]\": \"fill()\",\n    \"[class.viking-chart-sparkline-host]\": \"kind() === 'sparkline'\",\n  },\n  template: `\n    <figure\n      class=\"viking-chart\"\n      [class.viking-chart-fill]=\"fill()\"\n      [class.viking-chart-compact]=\"compact() && !fill()\"\n      [class.viking-chart-sparkline]=\"isSparkline()\"\n      [class.viking-chart-has-legend]=\"legendVisible()\"\n    >\n      @if (label()) {\n        <figcaption class=\"sr-only\" [id]=\"'viking-chart-label-' + chartId\">\n          {{ label() }}\n        </figcaption>\n      }\n      @if (summary()) {\n        <p class=\"sr-only\" [id]=\"'viking-chart-summary-' + chartId\">\n          {{ summary() }}\n        </p>\n      }\n      <div\n        #chartViewport\n        class=\"viking-chart-viewport\"\n        [class.viking-chart-zoomable]=\"\n          zoomable() && !isSparkline() && kind() !== 'donut'\n        \"\n        [attr.tabindex]=\"isZoomInteractive() ? 0 : null\"\n        [attr.aria-label]=\"\n          isZoomInteractive()\n            ? (label() || 'Chart') +\n              '. Use plus and minus to zoom, arrow keys to pan, and Home to reset.'\n            : null\n        \"\n        (wheel)=\"onWheel($event)\"\n        (keydown)=\"onKeydown($event)\"\n        (dblclick)=\"resetZoom()\"\n        (pointerdown)=\"onPanStart($event)\"\n        (pointermove)=\"onPanMove($event); onPointerMove($event)\"\n        (pointerup)=\"onPanEnd()\"\n        (pointerleave)=\"onPanEnd(); onPointerLeave()\"\n        (pointercancel)=\"onPanEnd(); onPointerLeave()\"\n      >\n        <svg\n          [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n          [attr.preserveAspectRatio]=\"preserveAspectRatio()\"\n          shape-rendering=\"geometricPrecision\"\n          focusable=\"false\"\n          role=\"img\"\n          [attr.aria-label]=\"label() ? null : 'Chart'\"\n          [attr.aria-labelledby]=\"\n            label() ? 'viking-chart-label-' + chartId : null\n          \"\n          [attr.aria-describedby]=\"\n            summary() ? 'viking-chart-summary-' + chartId : null\n          \"\n        >\n          @if (kind() === \"donut\") {\n            @for (slice of donutSlices(); track slice.label) {\n              <path\n                class=\"viking-chart-donut-slice\"\n                [attr.d]=\"slice.path\"\n                [style.fill]=\"toneVar(slice.tone)\"\n              />\n            }\n            @if (donutSlices().length > 0) {\n              <circle\n                class=\"viking-chart-donut-hole\"\n                [attr.cx]=\"width() / 2\"\n                [attr.cy]=\"plotCy()\"\n                [attr.r]=\"donutInnerRadius()\"\n              />\n              <text\n                class=\"viking-chart-donut-total\"\n                [attr.x]=\"width() / 2\"\n                [attr.y]=\"plotCy()\"\n                text-anchor=\"middle\"\n                dominant-baseline=\"central\"\n              >\n                {{ donutTotalLabel() }}\n              </text>\n            }\n          } @else {\n            <defs>\n              <clipPath [attr.id]=\"plotClipId\">\n                <rect\n                  [attr.x]=\"resolvedGutter().left\"\n                  [attr.y]=\"plotTop()\"\n                  [attr.width]=\"\n                    width() - resolvedGutter().left - resolvedGutter().right\n                  \"\n                  [attr.height]=\"plotBottom() - plotTop()\"\n                />\n              </clipPath>\n              @for (path of paths(); track path.gradientId) {\n                <linearGradient\n                  class=\"viking-chart-area-gradient\"\n                  [attr.id]=\"path.gradientId\"\n                  x1=\"0\"\n                  y1=\"0\"\n                  x2=\"0\"\n                  y2=\"1\"\n                  [style.color]=\"toneVar(path.tone)\"\n                >\n                  <stop class=\"viking-chart-area-stop-start\" offset=\"0%\" />\n                  <stop class=\"viking-chart-area-stop-end\" offset=\"100%\" />\n                </linearGradient>\n              }\n            </defs>\n            @if (!isSparkline()) {\n              @for (line of gridLines(); track line) {\n                <line\n                  class=\"viking-chart-grid\"\n                  [attr.x1]=\"resolvedGutter().left\"\n                  [attr.x2]=\"width() - resolvedGutter().right\"\n                  [attr.y1]=\"line\"\n                  [attr.y2]=\"line\"\n                ></line>\n              }\n              <line\n                class=\"viking-chart-axis-line\"\n                [attr.x1]=\"resolvedGutter().left\"\n                [attr.x2]=\"width() - resolvedGutter().right\"\n                [attr.y1]=\"plotBottom()\"\n                [attr.y2]=\"plotBottom()\"\n              ></line>\n              @for (tick of yAxisLabels(); track tick.text + tick.y) {\n                <text\n                  class=\"viking-chart-axis-y\"\n                  [attr.x]=\"resolvedGutter().left - 10\"\n                  [attr.y]=\"tick.y\"\n                  [attr.text-anchor]=\"tick.anchor\"\n                  dominant-baseline=\"middle\"\n                >\n                  {{ tick.text }}\n                </text>\n              }\n              @for (tick of xAxisLabels(); track tick.text + tick.x) {\n                <text\n                  class=\"viking-chart-axis-x\"\n                  [attr.x]=\"tick.x\"\n                  [attr.y]=\"height() - 10\"\n                  [attr.text-anchor]=\"tick.anchor\"\n                >\n                  {{ tick.text }}\n                </text>\n              }\n              @for (mark of xTickMarks(); track mark.x) {\n                <line\n                  class=\"viking-chart-tick\"\n                  [attr.x1]=\"mark.x\"\n                  [attr.x2]=\"mark.x\"\n                  [attr.y1]=\"mark.y1\"\n                  [attr.y2]=\"mark.y2\"\n                ></line>\n              }\n              @if (activeTooltip(); as tip) {\n                @if (tip.cursorWidth > 0) {\n                  <rect\n                    class=\"viking-chart-cursor-area\"\n                    [attr.x]=\"tip.cursorX\"\n                    [attr.y]=\"plotTop()\"\n                    [attr.width]=\"tip.cursorWidth\"\n                    [attr.height]=\"plotBottom() - plotTop()\"\n                  />\n                } @else {\n                  <line\n                    class=\"viking-chart-cursor\"\n                    [attr.x1]=\"tip.cursorX\"\n                    [attr.x2]=\"tip.cursorX\"\n                    [attr.y1]=\"plotTop()\"\n                    [attr.y2]=\"plotBottom()\"\n                  />\n                }\n              }\n            }\n            @if (isBarKind()) {\n              @for (\n                bar of barRects();\n                track bar.x + \"-\" + bar.y + \"-\" + bar.tone\n              ) {\n                <rect\n                  class=\"viking-chart-bar\"\n                  [attr.x]=\"bar.x\"\n                  [attr.y]=\"bar.y\"\n                  [attr.width]=\"bar.width\"\n                  [attr.height]=\"bar.height\"\n                  [style.fill]=\"toneVar(bar.tone)\"\n                  [attr.rx]=\"bar.radiusTop ? barRadius() : 0\"\n                  [attr.ry]=\"bar.radiusTop ? barRadius() : 0\"\n                />\n              }\n            } @else {\n              <g [attr.clip-path]=\"plotClipUrl\">\n                @for (path of paths(); track path.name) {\n                  @if (renderArea()) {\n                    <path\n                      class=\"viking-chart-area\"\n                      [attr.d]=\"path.area\"\n                      [style.fill]=\"'url(#' + path.gradientId + ')'\"\n                    ></path>\n                  }\n                  <path\n                    class=\"viking-chart-line\"\n                    [attr.d]=\"path.line\"\n                    [style.stroke]=\"toneVar(path.tone)\"\n                  ></path>\n                }\n                @if (renderPoints()) {\n                  @for (\n                    point of linePoints();\n                    track point.x + \"-\" + point.y + \"-\" + point.tone\n                  ) {\n                    <circle\n                      class=\"viking-chart-point\"\n                      [attr.cx]=\"point.x\"\n                      [attr.cy]=\"point.y\"\n                      [attr.r]=\"pointRadius()\"\n                      [style.fill]=\"toneVar(point.tone)\"\n                    />\n                  }\n                }\n              </g>\n            }\n          }\n        </svg>\n        @if (zoomActive()) {\n          <button\n            type=\"button\"\n            class=\"viking-chart-zoom-reset\"\n            (click)=\"resetZoom()\"\n          >\n            Reset zoom\n          </button>\n        }\n\n        @if (activeTooltip(); as tip) {\n          <div\n            class=\"viking-chart-tooltip visible\"\n            [style.left.px]=\"tip.x\"\n            [style.top.px]=\"tip.y\"\n          >\n            <div class=\"tt-label\">{{ tip.label }}</div>\n            @for (item of tip.values; track item.name) {\n              <div class=\"tt-series-value\">\n                <span\n                  class=\"viking-chart-swatch\"\n                  [style.background]=\"toneVar(item.tone)\"\n                ></span>\n                <span>{{ item.name }}</span>\n                <strong>{{ item.value }}</strong>\n              </div>\n            }\n          </div>\n        }\n      </div>\n      @if (legendVisible()) {\n        <figcaption class=\"viking-chart-legend\">\n          @if (kind() === \"donut\") {\n            @for (item of segments(); track item.label) {\n              @if (item.value > 0) {\n                <span class=\"viking-chart-legend-item\">\n                  <span\n                    class=\"viking-chart-swatch\"\n                    [style.background]=\"toneVar(item.tone ?? 'accent')\"\n                  ></span>\n                  {{ item.label }}\n                </span>\n              }\n            }\n          } @else {\n            @for (item of series(); track item.name) {\n              <span class=\"viking-chart-legend-item\">\n                <span\n                  class=\"viking-chart-swatch\"\n                  [style.background]=\"toneVar(item.tone ?? 'accent')\"\n                ></span>\n                {{ item.name }}\n              </span>\n            }\n          }\n        </figcaption>\n      }\n    </figure>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n      }\n      :host(.viking-chart-fill-host) {\n        display: block;\n        flex: 0 0 auto;\n        min-height: 0;\n        height: auto;\n      }\n      :host(.viking-chart-sparkline-host) {\n        display: inline-block;\n        width: auto;\n        max-width: 100%;\n      }\n      :host(.viking-chart-wide) {\n        display: block;\n        width: 100%;\n      }\n      .viking-chart {\n        margin: 0;\n        font-family: var(--viking-font-family);\n        overflow: visible;\n        width: 100%;\n        max-width: 100%;\n        box-sizing: border-box;\n        container-type: inline-size;\n        padding: var(--viking-chart-padding, var(--viking-space-1) 0);\n        border: none;\n        background: transparent;\n        box-shadow: none;\n      }\n      .viking-chart:not(.viking-chart-fill):not(.viking-chart-sparkline) {\n        height: var(--viking-chart-plot-height);\n        min-height: var(--viking-chart-plot-height);\n        max-height: var(--viking-chart-plot-height);\n      }\n      .viking-chart-fill {\n        flex: 0 0 auto;\n        display: flex;\n        flex-direction: column;\n        align-items: stretch;\n        justify-content: center;\n        height: var(--viking-chart-plot-height);\n        min-height: var(--viking-chart-plot-height);\n        max-height: var(--viking-chart-plot-height);\n        --viking-chart-axis-size: var(\n          --viking-chart-text-size,\n          var(--viking-font-size-base)\n        );\n      }\n      .viking-chart-sparkline {\n        width: 5rem;\n        aspect-ratio: 3 / 1;\n        padding: 0;\n        overflow: visible;\n      }\n      :host(.viking-chart-wide) .viking-chart-sparkline {\n        width: 100%;\n        aspect-ratio: auto;\n        height: var(--viking-chart-sparkline-height, 2.75rem);\n      }\n      .viking-chart-sparkline .viking-chart-line {\n        stroke-width: 2;\n        stroke-linecap: round;\n        stroke-linejoin: round;\n      }\n      .viking-chart-sparkline .viking-chart-area {\n        opacity: 0.16;\n      }\n      .viking-chart-viewport {\n        position: relative;\n        width: 100%;\n        flex: 1 1 0;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        min-height: 0;\n        overflow: visible;\n        box-sizing: border-box;\n      }\n      .viking-chart-viewport.viking-chart-zoomable {\n        cursor: grab;\n        touch-action: none;\n      }\n      .viking-chart-viewport.viking-chart-zoomable:active {\n        cursor: grabbing;\n      }\n      .viking-chart-viewport:not(.viking-chart-zoomable) {\n        cursor: crosshair;\n      }\n      .viking-chart-zoom-reset {\n        position: absolute;\n        top: var(--viking-space-0-5);\n        right: var(--viking-space-0-5);\n        z-index: 2;\n        padding: var(--viking-space-0-5) var(--viking-space-1);\n        font-size: var(--viking-font-size-sm);\n        font-family: var(--viking-font-family);\n        color: var(--viking-text-muted);\n        background: color-mix(in srgb, var(--viking-surface) 88%, transparent);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius-md);\n        cursor: pointer;\n      }\n      .viking-chart-zoom-reset:focus-visible {\n        outline: 2px solid var(--viking-ring);\n        outline-offset: 2px;\n      }\n      svg {\n        display: block;\n        width: 100%;\n        height: auto;\n        max-width: 100%;\n        background: transparent;\n        overflow: visible;\n        -webkit-backface-visibility: hidden;\n        backface-visibility: hidden;\n      }\n      .viking-chart:not(.viking-chart-fill):not(.viking-chart-sparkline) svg {\n        height: 100%;\n        min-height: 0;\n        max-height: 100%;\n      }\n      .viking-chart-fill svg {\n        width: 100%;\n        height: 100%;\n        min-height: 0;\n        max-height: 100%;\n      }\n      .viking-chart-fill:not(.viking-chart-has-legend) svg {\n        aspect-ratio: auto;\n      }\n      .viking-chart-sparkline svg {\n        min-height: 0;\n        border: none;\n      }\n      .viking-chart-compact svg {\n        max-height: min(\n          var(--viking-chart-max-height, clamp(13rem, 36vw, 17.5rem)),\n          13.75rem\n        );\n      }\n      .viking-chart-grid {\n        stroke: var(\n          --viking-chart-grid-stroke,\n          color-mix(in srgb, var(--viking-text-muted) 18%, transparent)\n        );\n        stroke-width: var(--viking-chart-grid-width, 1);\n        stroke-dasharray: var(--viking-chart-grid-dash, 4 4);\n      }\n      .viking-chart-axis-line,\n      .viking-chart-tick {\n        stroke: var(\n          --viking-chart-axis-stroke,\n          color-mix(in srgb, var(--viking-text-muted) 28%, transparent)\n        );\n        stroke-width: var(--viking-chart-axis-width, 1);\n      }\n      .viking-chart-axis-y,\n      .viking-chart-axis-x {\n        fill: var(--viking-chart-axis-color, var(--viking-text-muted));\n        font-size: max(\n          var(--viking-chart-label-size, var(--viking-font-size-base)),\n          var(--viking-chart-axis-size, var(--viking-font-size-base))\n        );\n        font-family: var(--viking-font-family);\n        font-weight: var(--viking-font-weight-medium);\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-chart-axis-x {\n        font-weight: var(--viking-font-weight-regular);\n      }\n      .viking-chart-axis-y {\n        font-weight: var(--viking-font-weight-medium);\n      }\n      .viking-chart-cursor {\n        stroke: var(\n          --viking-chart-cursor-stroke,\n          color-mix(in srgb, var(--viking-text) 35%, transparent)\n        );\n        stroke-width: var(--viking-chart-cursor-width, 1);\n        stroke-dasharray: var(--viking-chart-cursor-dash, 3 3);\n        pointer-events: none;\n      }\n      .viking-chart-cursor-area {\n        fill: color-mix(in srgb, var(--viking-text) 6%, transparent);\n        stroke: none;\n        pointer-events: none;\n      }\n      .viking-chart-line {\n        fill: none;\n        stroke-width: var(--viking-chart-line-width, 2);\n        stroke-linecap: round;\n        stroke-linejoin: round;\n        vector-effect: non-scaling-stroke;\n      }\n      .viking-chart-fill .viking-chart-line {\n        stroke-width: var(--viking-chart-line-width-fill, 2);\n      }\n      .viking-chart-area {\n        opacity: 1;\n        stroke: none;\n      }\n      .viking-chart-area-stop-start,\n      .viking-chart-area-stop-end {\n        stop-color: currentColor;\n      }\n      .viking-chart-area-stop-start {\n        stop-opacity: var(--viking-chart-area-opacity-start);\n      }\n      .viking-chart-area-stop-end {\n        stop-opacity: var(--viking-chart-area-opacity-end);\n      }\n      .viking-chart-point {\n        stroke: var(--viking-chart-point-stroke, var(--viking-surface));\n        stroke-width: 2;\n        vector-effect: non-scaling-stroke;\n      }\n      .viking-chart-bar {\n        opacity: 0.92;\n      }\n      .viking-chart-donut-slice {\n        stroke: var(--viking-surface);\n        stroke-width: 2;\n      }\n      .viking-chart-donut-hole {\n        fill: var(--viking-surface);\n      }\n      .viking-chart-donut-total {\n        fill: var(--viking-text);\n        font-size: var(--viking-chart-text-size, var(--viking-font-size-base));\n        font-weight: 700;\n        font-family: var(--viking-font-family);\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-chart-fill .viking-chart-donut-total {\n        font-size: var(--viking-chart-text-size, var(--viking-font-size-base));\n      }\n      .viking-chart-legend {\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: center;\n        gap: var(\n          --viking-chart-legend-gap,\n          var(--viking-space-2) var(--viking-space-3)\n        );\n        margin: var(--viking-chart-legend-margin, var(--viking-space-3) 0 0);\n        font-size: var(--viking-chart-legend-size, var(--viking-font-size-xs));\n        color: var(--viking-text-muted);\n      }\n      .viking-chart-fill .viking-chart-legend {\n        margin: var(\n          --viking-chart-legend-margin-fill,\n          var(--viking-space-4) 0 0\n        );\n      }\n      .viking-chart-legend-item {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        line-height: 1.2;\n      }\n      .viking-chart-swatch {\n        width: var(--viking-chart-swatch-size, 8px);\n        height: var(--viking-chart-swatch-size, 8px);\n        border-radius: 999px;\n        display: inline-block;\n        flex-shrink: 0;\n        border: none;\n      }\n\n      /* Local tooltip fallback (global .viking-chart-tooltip in chart.scss wins for consistency) */\n      .viking-chart-tooltip {\n        position: absolute;\n        pointer-events: none;\n        display: none;\n        flex-direction: column;\n        gap: var(--viking-space-0-5);\n        padding: var(\n          --viking-chart-tooltip-padding,\n          var(--viking-space-1) var(--viking-space-1)\n        );\n        background: var(\n          --viking-chart-tooltip-bg,\n          color-mix(in srgb, var(--viking-surface) 94%, transparent)\n        );\n        border: 1px solid\n          var(\n            --viking-chart-tooltip-border,\n            color-mix(in srgb, var(--viking-border) 70%, transparent)\n          );\n        border-radius: var(--viking-chart-tooltip-radius, var(--viking-radius));\n        box-shadow: var(--viking-shadow-sm);\n        backdrop-filter: none;\n        font-size: var(--viking-chart-tooltip-size, var(--viking-font-size-xs));\n        color: var(--viking-chart-tooltip-text, var(--viking-text));\n        white-space: nowrap;\n        z-index: var(--viking-z-tooltip);\n      }\n      .viking-chart-tooltip.visible {\n        display: flex;\n      }\n      .tt-series-value {\n        display: grid;\n        grid-template-columns: auto minmax(0, 1fr) auto;\n        align-items: center;\n        gap: var(--viking-space-1);\n        font-size: var(--viking-font-size-xs);\n      }\n      .tt-series-value strong {\n        font-weight: var(--viking-font-weight-semibold);\n        font-variant-numeric: tabular-nums lining-nums;\n      }\n      .sr-only {\n        position: absolute !important;\n        width: 1px !important;\n        height: 1px !important;\n        padding: 0 !important;\n        margin: calc(var(--viking-space-px) * -1) !important;\n        overflow: hidden !important;\n        clip: rect(0, 0, 0, 0) !important;\n        white-space: nowrap !important;\n        border: 0 !important;\n      }\n    `,\n  ],\n})\nexport class VikingChart implements AfterViewInit, OnDestroy {\n  protected readonly chartId = vikingUid(\"viking-chart\");\n  protected readonly plotClipId = `${this.chartId}-plot-clip`;\n  protected readonly plotClipUrl = `url(#${this.plotClipId})`;\n  private readonly viewportRef =\n    viewChild.required<ElementRef<HTMLDivElement>>(\"chartViewport\");\n  private readonly viewportWidth = signal(WIDTH);\n  private readonly viewportHeight = signal(0);\n  private resizeObserver?: ResizeObserver;\n\n  ngAfterViewInit(): void {\n    const viewport = this.viewportRef().nativeElement;\n    const updateViewport = (\n      bounds?: Pick<DOMRectReadOnly, \"width\" | \"height\">,\n    ): void => {\n      const measured = bounds ?? viewport.getBoundingClientRect();\n      if (measured.width > 0) {\n        this.viewportWidth.set(Math.round(measured.width));\n      }\n      if (measured.height > 0) {\n        this.viewportHeight.set(Math.round(measured.height));\n      }\n    };\n\n    updateViewport();\n    if (typeof ResizeObserver !== \"undefined\") {\n      this.resizeObserver = new ResizeObserver((entries) => {\n        const entry = entries[0];\n        updateViewport(entry?.contentRect);\n      });\n      this.resizeObserver.observe(viewport);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.resizeObserver?.disconnect();\n  }\n\n  readonly kind = input<VikingChartKind>(\"line\");\n  readonly series = input<VikingChartSeries[]>([{ name: \"Series\", data: [] }]);\n  readonly categories = input<string[]>([]);\n  readonly segments = input<VikingDonutSegment[]>([]);\n  readonly label = input<string>(\"\");\n  readonly showArea = input<boolean>(false);\n  readonly compact = input<boolean>(false);\n  readonly fill = input<boolean>(false);\n  readonly curve = input<VikingChartCurve>(\"smooth\");\n  readonly showPoints = input<boolean>(false);\n  readonly pointRadius = input<number>(5);\n  readonly barWidth = input<number | undefined>(undefined);\n  readonly barRadius = input<number>(2);\n  readonly barMinHeight = input<number>(BAR_MIN_VISIBLE_HEIGHT_DEFAULT);\n  readonly gutter = input<number | string | undefined>(undefined);\n  readonly tickCount = input<number>(3); /* cleaner, less crowded on mobile */\n  readonly showLegend = input<boolean | undefined>(undefined);\n  readonly summary = input<string>(\"\");\n  readonly scaleStart = input<VikingChartScaleStart>(\"auto\");\n  /** Enable wheel zoom + drag pan on line/bar charts (premium clean interaction). */\n  readonly zoomable = input<boolean>(false);\n\n  private readonly zoomWindow = signal<ChartZoomWindow | null>(null);\n  private panStartX: number | null = null;\n  private panStartWindow: ChartZoomWindow | null = null;\n\n  constructor() {\n    effect(() => {\n      const count = this.series()[0]?.data.length ?? 0;\n      if (count === 0) {\n        this.zoomWindow.set(null);\n      }\n    });\n  }\n\n  /** Slice series/categories to the active zoom window. */\n  protected readonly dataWindow = computed(() => {\n    const count = this.series()[0]?.data.length ?? 0;\n    const zoom = this.zoomWindow();\n    if (\n      !this.zoomable() ||\n      !zoom ||\n      this.isSparkline() ||\n      this.kind() === \"donut\"\n    ) {\n      return fullChartWindow(count);\n    }\n    return clampChartWindow(zoom, count);\n  });\n\n  protected readonly effectiveSeries = computed(() => {\n    const window = this.dataWindow();\n    return this.series().map((item) => ({\n      ...item,\n      data: sliceChartData(item.data, window),\n    }));\n  });\n\n  protected readonly effectiveCategories = computed(() =>\n    sliceChartData(this.categories(), this.dataWindow()),\n  );\n\n  protected readonly zoomActive = computed(() => {\n    const count = this.series()[0]?.data.length ?? 0;\n    const window = this.dataWindow();\n    return (\n      this.zoomable() && count > 0 && (window.start > 0 || window.end < count)\n    );\n  });\n\n  protected resetZoom = (): void => {\n    this.zoomWindow.set(null);\n  };\n\n  protected onWheel = (event: WheelEvent): void => {\n    if (!this.zoomable() || this.isSparkline() || this.kind() === \"donut\") {\n      return;\n    }\n    event.preventDefault();\n    const count = this.series()[0]?.data.length ?? 0;\n    if (count <= 3) {\n      return;\n    }\n    const current = this.zoomWindow() ?? fullChartWindow(count);\n    const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n    const fraction = Math.min(\n      1,\n      Math.max(0, (event.clientX - rect.left) / rect.width),\n    );\n    this.zoomWindow.set(\n      zoomChartWindow(current, count, fraction, event.deltaY),\n    );\n  };\n\n  protected onKeydown = (event: KeyboardEvent): void => {\n    if (!this.isZoomInteractive()) {\n      return;\n    }\n    const count = this.series()[0]?.data.length ?? 0;\n    if (count <= 3) {\n      return;\n    }\n    const current = this.zoomWindow() ?? fullChartWindow(count);\n\n    if (event.key === \"+\" || event.key === \"=\") {\n      event.preventDefault();\n      this.zoomWindow.set(zoomChartWindow(current, count, 0.5, -100));\n      return;\n    }\n    if (event.key === \"-\") {\n      event.preventDefault();\n      this.zoomWindow.set(zoomChartWindow(current, count, 0.5, 100));\n      return;\n    }\n    if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\n      event.preventDefault();\n      this.zoomWindow.set(\n        panChartWindow(current, count, event.key === \"ArrowLeft\" ? 1 : -1),\n      );\n      return;\n    }\n    if (event.key === \"Home\") {\n      event.preventDefault();\n      this.resetZoom();\n    }\n  };\n\n  protected onPanStart = (event: PointerEvent): void => {\n    if (\n      !this.zoomable() ||\n      this.isSparkline() ||\n      this.kind() === \"donut\" ||\n      event.button !== 0\n    ) {\n      return;\n    }\n    const count = this.series()[0]?.data.length ?? 0;\n    if (count <= 3) {\n      return;\n    }\n    this.panStartX = event.clientX;\n    this.panStartWindow = this.zoomWindow() ?? fullChartWindow(count);\n    (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n  };\n\n  protected onPanMove = (event: PointerEvent): void => {\n    if (this.panStartX === null || !this.panStartWindow) {\n      return;\n    }\n    const count = this.series()[0]?.data.length ?? 0;\n    const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n    const span = this.panStartWindow.end - this.panStartWindow.start;\n    const deltaPx = event.clientX - this.panStartX;\n    const deltaPoints = Math.round((deltaPx / rect.width) * span);\n    this.zoomWindow.set(\n      panChartWindow(this.panStartWindow, count, deltaPoints),\n    );\n  };\n\n  protected onPanEnd = (): void => {\n    this.panStartX = null;\n    this.panStartWindow = null;\n  };\n\n  /* ===== Tooltip (premium clean hover) ===== */\n  protected readonly activeTooltip = signal<ChartTooltip | null>(null);\n\n  protected onPointerMove = (event: PointerEvent): void => {\n    if (this.isSparkline() || this.kind() === \"donut\") {\n      return;\n    }\n    const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n    const series = this.effectiveSeries();\n    if (!series.length || !series[0]?.data.length) {\n      this.activeTooltip.set(null);\n      return;\n    }\n    const plotWidth =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n    const relX = Math.min(\n      Math.max(0, event.clientX - rect.left - this.resolvedGutter().left),\n      plotWidth,\n    );\n    const count = series[0].data.length;\n    const idx = this.isBarKind()\n      ? Math.floor((relX / Math.max(1, plotWidth)) * count)\n      : Math.round((relX / Math.max(1, plotWidth)) * (count - 1));\n    const clamped = Math.max(0, Math.min(series[0].data.length - 1, idx));\n\n    const primary = series[0];\n    const val = primary.data[clamped];\n    const cats = this.effectiveCategories();\n    const xLabel = cats[clamped] ?? `${clamped + 1}`;\n\n    // Position tooltip inside viewport near the point\n    const { min, max } = this.valueRange();\n    const range = max - min || 1;\n    const bottom = this.plotBottom();\n    const top = this.plotTop();\n    const plotHeight = bottom - top;\n    const slotWidth = this.isBarKind() ? plotWidth / count : 0;\n    const cursorX = this.isBarKind()\n      ? this.resolvedGutter().left + clamped * slotWidth\n      : this.xPosition(clamped, count, plotWidth);\n    const dataX = this.isBarKind() ? cursorX + slotWidth / 2 : cursorX;\n    const dataY = this.isBarKind()\n      ? top + 8\n      : bottom - ((val - min) / range) * plotHeight;\n    const values = series.map((item) => ({\n      name: item.name,\n      value: formatTick(item.data[clamped] ?? 0),\n      tone: item.tone ?? \"accent\",\n    }));\n    const tooltipWidth = Math.min(\n      TOOLTIP_MAX_WIDTH,\n      Math.max(0, rect.width - 16),\n    );\n    const tooltipHeight = 32 + values.length * TOOLTIP_ROW_HEIGHT;\n    const maxX = Math.max(8, rect.width - tooltipWidth - 8);\n    const maxY = Math.max(8, rect.height - tooltipHeight - 8);\n\n    this.activeTooltip.set({\n      x: Math.min(maxX, Math.max(8, dataX + 8)),\n      y: Math.min(maxY, Math.max(8, dataY - 28)),\n      cursorX,\n      cursorWidth: slotWidth,\n      label: xLabel,\n      values,\n    });\n  };\n\n  protected onPointerLeave = (): void => {\n    this.activeTooltip.set(null);\n  };\n\n  protected readonly width = computed(() => this.viewportWidth());\n\n  protected readonly isSparkline = computed(() => this.kind() === \"sparkline\");\n\n  protected readonly isZoomInteractive = computed(\n    () => this.zoomable() && !this.isSparkline() && this.kind() !== \"donut\",\n  );\n\n  protected readonly resolvedGutter = computed(() => {\n    if (this.gutter() !== undefined && this.gutter() !== null) {\n      return parseGutter(this.gutter(), this.isSparkline());\n    }\n    return parseGutter(undefined, this.isSparkline());\n  });\n\n  protected readonly legendVisible = computed(() => {\n    const explicit = this.showLegend();\n    if (explicit !== undefined) {\n      return explicit;\n    }\n    const kind = this.kind();\n    if (kind === \"donut\") {\n      return this.segments().some((item) => item.value > 0);\n    }\n    if (kind === \"sparkline\") {\n      return false;\n    }\n    if (kind === \"grouped-bar\" || kind === \"stacked-bar\") {\n      return this.series().length > 0;\n    }\n    return this.series().length > 1;\n  });\n\n  protected readonly height = computed(() => {\n    const measuredHeight = this.viewportHeight();\n    if (measuredHeight > 0) {\n      return measuredHeight;\n    }\n    if (this.isSparkline()) {\n      return HEIGHT_SPARKLINE;\n    }\n    if (this.fill()) {\n      if (this.kind() === \"donut\") {\n        return HEIGHT_FILL;\n      }\n      if (this.isLineKind()) {\n        return HEIGHT_FILL_LINE;\n      }\n      return HEIGHT_FILL;\n    }\n    return this.compact() ? HEIGHT_COMPACT : HEIGHT_DEFAULT;\n  });\n\n  protected readonly preserveAspectRatio = computed(() => \"xMidYMid meet\");\n\n  protected readonly plotBottom = computed(\n    () => this.height() - this.resolvedGutter().bottom,\n  );\n  protected readonly plotTop = computed(() => this.resolvedGutter().top);\n  protected readonly plotCy = computed(() => this.height() / 2);\n\n  protected readonly donutInnerRadius = computed(() => {\n    const plotH = this.plotBottom() - this.plotTop();\n    const plotW =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n    const outer = Math.min(plotW, plotH) / 2 - 6;\n    return outer * 0.58;\n  });\n\n  protected readonly isBarKind = computed(() => {\n    const kind = this.kind();\n    return kind === \"bar\" || kind === \"grouped-bar\" || kind === \"stacked-bar\";\n  });\n\n  protected readonly isLineKind = computed(() => {\n    const kind = this.kind();\n    return kind === \"line\" || kind === \"area\";\n  });\n\n  private readonly resolvedBarWidth = computed(() => {\n    const explicit = this.barWidth();\n    if (explicit !== undefined) {\n      return explicit;\n    }\n    if (this.kind() === \"grouped-bar\") {\n      return 80;\n    }\n    if (this.kind() === \"stacked-bar\") {\n      return 65;\n    }\n    return 85;\n  });\n\n  protected readonly renderArea = computed(\n    () => this.kind() === \"area\" || this.showArea() || this.isSparkline(),\n  );\n\n  protected readonly renderPoints = computed(\n    () => this.showPoints() && !this.isSparkline() && !this.isBarKind(),\n  );\n\n  protected toneVar = (tone: VikingTone): string => TONE_VARS[tone];\n\n  protected readonly valueRange = computed(() => {\n    const kind = this.kind();\n    const series = this.effectiveSeries();\n\n    if (kind === \"stacked-bar\") {\n      const count = series[0]?.data.length ?? 0;\n      const sums = Array.from({ length: count }, (_, index) =>\n        series.reduce((sum, item) => sum + (item.data[index] ?? 0), 0),\n      );\n      if (sums.length === 0) {\n        return { min: 0, max: 1 };\n      }\n      const max = Math.max(...sums);\n      return { min: 0, max: max || 1 };\n    }\n\n    const all = series.flatMap((item) => item.data);\n    if (all.length === 0) {\n      return { min: 0, max: 1 };\n    }\n    const dataMin = Math.min(...all);\n    const dataMax = Math.max(...all);\n\n    if (this.isSparkline()) {\n      if (dataMax === dataMin) {\n        const pad = Math.max(Math.abs(dataMax) * 0.15, 0.5);\n        return { min: dataMax - pad, max: dataMax + pad };\n      }\n      const padding = Math.max((dataMax - dataMin) * 0.15, 0.5);\n      return { min: dataMin - padding, max: dataMax + padding };\n    }\n\n    const useZeroBaseline =\n      this.scaleStart() === \"zero\" ||\n      (this.scaleStart() === \"auto\" && this.isBarKind());\n\n    if (!useZeroBaseline) {\n      if (dataMax === dataMin) {\n        const padding = Math.max(Math.abs(dataMax) * 0.05, 0.5);\n        return { min: dataMin - padding, max: dataMax + padding };\n      }\n      const padding = Math.max((dataMax - dataMin) * 0.08, 0.5);\n      return { min: dataMin - padding, max: dataMax + padding };\n    }\n\n    // Bars default to a zero baseline so magnitude comparisons remain honest.\n    const min = Math.min(0, dataMin);\n    let max = Math.max(0, dataMax);\n    if (max === min) {\n      max = min + 1;\n    } else {\n      const span = max - min;\n      max = max + Math.max(span * 0.14, Math.abs(max) * 0.05, 1);\n      // Nice round-ish upper bound for calmer tick labels\n      const magnitude = Math.pow(10, Math.floor(Math.log10(Math.max(max, 1))));\n      const step = magnitude / 2;\n      if (step > 0) {\n        max = Math.ceil(max / step) * step;\n      }\n    }\n    return { min, max };\n  });\n\n  protected readonly gridLines = computed(() => {\n    const bottom = this.plotBottom();\n    const top = this.plotTop();\n    const count = this.tickCount();\n    const lines: number[] = [];\n    for (let index = 0; index <= count; index += 1) {\n      lines.push(top + ((bottom - top) * index) / count);\n    }\n    return lines;\n  });\n\n  protected readonly yAxisLabels = computed<AxisLabel[]>(() => {\n    const { min, max } = this.valueRange();\n    const bottom = this.plotBottom();\n    const top = this.plotTop();\n    const count = this.tickCount();\n    const labels: AxisLabel[] = [];\n\n    for (let index = 0; index <= count; index += 1) {\n      const value = max - ((max - min) * index) / count;\n      const y = top + ((bottom - top) * index) / count;\n      labels.push({ x: 0, y, text: formatTick(value), anchor: \"end\" });\n    }\n\n    return labels;\n  });\n\n  protected readonly xAxisLabels = computed<AxisLabel[]>(() => {\n    if (this.kind() === \"donut\" || this.isSparkline()) {\n      return [];\n    }\n\n    const primary = this.effectiveSeries()[0];\n    const count = primary?.data.length ?? 0;\n    if (count === 0) {\n      return [];\n    }\n\n    const cats = this.effectiveCategories();\n    const plotWidth =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n    // Cleaner density: fewer labels on mobile-ish, premium well-spaced aesthetic\n    const maxLabels = this.fill() ? 7 : 5;\n    const labelMax = this.fill() ? LABEL_MAX_FILL : LABEL_MAX_DEFAULT;\n    const step = Math.max(1, Math.ceil(count / maxLabels));\n    const labels: AxisLabel[] = [];\n\n    for (let index = 0; index < count; index += step) {\n      const x = this.xPosition(index, count, plotWidth);\n      const text = cats[index]\n        ? truncateLabel(cats[index], labelMax)\n        : `${index + 1}`;\n      labels.push({ x, y: this.height(), text, anchor: \"middle\" });\n    }\n\n    if ((count - 1) % step !== 0 && count > 1) {\n      const last = count - 1;\n      const x = this.xPosition(last, count, plotWidth);\n      const text = cats[last]\n        ? truncateLabel(cats[last], labelMax)\n        : `${last + 1}`;\n      if (!labels.some((item) => item.text === text)) {\n        labels.push({ x, y: this.height(), text, anchor: \"middle\" });\n      }\n    }\n\n    return labels;\n  });\n\n  private readonly xPosition = (\n    index: number,\n    count: number,\n    plotWidth: number,\n  ): number => {\n    const left = this.resolvedGutter().left;\n    if (this.isBarKind()) {\n      return left + ((index + 0.5) / Math.max(1, count)) * plotWidth;\n    }\n    return (\n      left +\n      (count === 1\n        ? plotWidth / 2\n        : (index / Math.max(1, count - 1)) * plotWidth)\n    );\n  };\n\n  protected readonly xTickMarks = computed<TickMark[]>(() => {\n    const bottom = this.plotBottom();\n    return this.xAxisLabels().map((label) => ({\n      x: label.x,\n      y1: bottom,\n      y2: bottom + 5,\n    }));\n  });\n\n  protected readonly paths = computed<ChartPath[]>(() => {\n    const all = this.effectiveSeries().flatMap((item) => item.data);\n    if (all.length === 0) {\n      return [];\n    }\n\n    const { min, max } = this.valueRange();\n    const range = max - min || 1;\n    const bottom = this.plotBottom();\n    const top = this.plotTop();\n    const plotHeight = bottom - top;\n    const plotWidth =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n    const buildPath =\n      this.curve() === \"smooth\" ? buildSmoothPath : buildLinearPath;\n\n    return this.effectiveSeries().map((item, seriesIndex) => {\n      const points = item.data.map((value, index) => {\n        const x = this.xPosition(index, item.data.length, plotWidth);\n        const y = bottom - ((value - min) / range) * plotHeight;\n        return { x, y };\n      });\n      const line = buildPath(points);\n      const firstX = points[0]?.x ?? this.resolvedGutter().left;\n      const lastX = points.at(-1)?.x ?? firstX;\n      const area = line\n        ? `${line} L${lastX},${bottom} L${firstX},${bottom} Z`\n        : \"\";\n      return {\n        name: item.name,\n        tone: item.tone ?? \"accent\",\n        line,\n        area,\n        gradientId: `${this.chartId}-area-gradient-${seriesIndex}`,\n      };\n    });\n  });\n\n  protected readonly linePoints = computed<ChartPoint[]>(() => {\n    const all = this.effectiveSeries().flatMap((item) => item.data);\n    if (all.length === 0) {\n      return [];\n    }\n\n    const { min, max } = this.valueRange();\n    const range = max - min || 1;\n    const bottom = this.plotBottom();\n    const top = this.plotTop();\n    const plotHeight = bottom - top;\n    const plotWidth =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n\n    return this.effectiveSeries().flatMap((item) =>\n      item.data.map((value, index) => {\n        const x = this.xPosition(index, item.data.length, plotWidth);\n        const y = bottom - ((value - min) / range) * plotHeight;\n        return { x, y, tone: item.tone ?? \"accent\" };\n      }),\n    );\n  });\n\n  protected readonly barRects = computed<BarRect[]>(() => {\n    const kind = this.kind();\n    if (kind === \"stacked-bar\") {\n      return this.stackedBarRects();\n    }\n    if (kind === \"grouped-bar\") {\n      return this.groupedBarRects();\n    }\n    return this.singleBarRects();\n  });\n\n  private readonly singleBarRects = computed<BarRect[]>(() => {\n    const primary = this.effectiveSeries()[0];\n    if (!primary?.data.length) {\n      return [];\n    }\n\n    const { min, max } = this.valueRange();\n    const range = max - min || 1;\n    const bottom = this.plotBottom();\n    const top = this.plotTop();\n    const plotHeight = bottom - top;\n    const plotWidth =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n    const widthPercent = this.resolvedBarWidth();\n    const slotWidth = plotWidth / primary.data.length;\n    const barWidth = resolveBarWidth(\n      slotWidth,\n      primary.data.length,\n      widthPercent,\n    );\n\n    const minVisible = this.barMinHeight();\n\n    return primary.data.map((value, index) => {\n      const normalized = (value - min) / range;\n      const height = resolveBarHeight(\n        value,\n        normalized,\n        plotHeight,\n        minVisible,\n      );\n      const x =\n        this.resolvedGutter().left +\n        index * slotWidth +\n        (slotWidth - barWidth) / 2;\n      const y = bottom - height;\n      return {\n        x,\n        y,\n        width: barWidth,\n        height,\n        tone: primary.tone ?? \"accent\",\n        radiusTop: true,\n      };\n    });\n  });\n\n  private readonly groupedBarRects = computed<BarRect[]>(() => {\n    const series = this.effectiveSeries();\n    const count = series[0]?.data.length ?? 0;\n    if (!count) {\n      return [];\n    }\n\n    const { min, max } = this.valueRange();\n    const range = max - min || 1;\n    const bottom = this.plotBottom();\n    const top = this.plotTop();\n    const plotHeight = bottom - top;\n    const plotWidth =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n    const groupWidth = plotWidth / count;\n    const widthPercent = this.resolvedBarWidth();\n    const groupBarWidth = resolveBarWidth(groupWidth, count, widthPercent);\n    const barWidth = Math.max(3, groupBarWidth / series.length);\n    const rects: BarRect[] = [];\n\n    for (let index = 0; index < count; index += 1) {\n      const groupStart = this.resolvedGutter().left + index * groupWidth;\n      const groupInner = groupBarWidth;\n      const groupOffset = (groupWidth - groupInner) / 2;\n\n      const minVisible = this.barMinHeight();\n\n      series.forEach((item, seriesIndex) => {\n        const value = item.data[index] ?? 0;\n        const normalized = (value - min) / range;\n        const height = resolveBarHeight(\n          value,\n          normalized,\n          plotHeight,\n          minVisible,\n        );\n        const x = groupStart + groupOffset + seriesIndex * barWidth;\n        const y = bottom - height;\n        rects.push({\n          x,\n          y,\n          width: Math.max(3, barWidth - 2),\n          height,\n          tone: item.tone ?? \"accent\",\n          radiusTop: true,\n        });\n      });\n    }\n\n    return rects;\n  });\n\n  private readonly stackedBarRects = computed<BarRect[]>(() => {\n    const series = this.effectiveSeries();\n    const count = series[0]?.data.length ?? 0;\n    if (!count) {\n      return [];\n    }\n\n    const { max } = this.valueRange();\n    const range = max || 1;\n    const bottom = this.plotBottom();\n    const top = this.plotTop();\n    const plotHeight = bottom - top;\n    const plotWidth =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n    const widthPercent = this.resolvedBarWidth();\n    const slotWidth = plotWidth / count;\n    const barWidth = resolveBarWidth(slotWidth, count, widthPercent);\n    const rects: BarRect[] = [];\n\n    for (let index = 0; index < count; index += 1) {\n      let cursor = bottom;\n      const x =\n        this.resolvedGutter().left +\n        index * slotWidth +\n        (slotWidth - barWidth) / 2;\n\n      series.forEach((item, seriesIndex) => {\n        const value = item.data[index] ?? 0;\n        const height = Math.max(0, (value / range) * plotHeight);\n        cursor -= height;\n        rects.push({\n          x,\n          y: cursor,\n          width: barWidth,\n          height,\n          tone: item.tone ?? \"accent\",\n          radiusTop: seriesIndex === series.length - 1,\n        });\n      });\n    }\n\n    return rects;\n  });\n\n  protected readonly donutTotalLabel = computed(() => {\n    const total = this.segments()\n      .filter((item) => item.value > 0)\n      .reduce((sum, item) => sum + item.value, 0);\n    return formatTick(total);\n  });\n\n  protected readonly donutSlices = computed<DonutSlice[]>(() => {\n    const items = this.segments().filter((item) => item.value > 0);\n    const total = items.reduce((sum, item) => sum + item.value, 0);\n    if (total <= 0) {\n      return [];\n    }\n\n    const cx = this.width() / 2;\n    const cy = this.plotCy();\n    const plotH = this.plotBottom() - this.plotTop();\n    const plotW =\n      this.width() - this.resolvedGutter().left - this.resolvedGutter().right;\n    const outer = Math.min(plotW, plotH) / 2 - 6;\n    const inner = outer * 0.58;\n    let cursor = -Math.PI / 2;\n\n    return items.map((item) => {\n      const angle = (item.value / total) * Math.PI * 2;\n      const start = cursor;\n      const end = cursor + angle;\n      cursor = end;\n\n      if (items.length === 1) {\n        const path = [\n          `M ${cx - outer} ${cy}`,\n          `A ${outer} ${outer} 0 1 1 ${cx + outer} ${cy}`,\n          `A ${outer} ${outer} 0 1 1 ${cx - outer} ${cy}`,\n          `M ${cx - inner} ${cy}`,\n          `A ${inner} ${inner} 0 1 0 ${cx + inner} ${cy}`,\n          `A ${inner} ${inner} 0 1 0 ${cx - inner} ${cy}`,\n          \"Z\",\n        ].join(\" \");\n        return { label: item.label, tone: item.tone ?? \"accent\", path };\n      }\n\n      const x1 = cx + outer * Math.cos(start);\n      const y1 = cy + outer * Math.sin(start);\n      const x2 = cx + outer * Math.cos(end);\n      const y2 = cy + outer * Math.sin(end);\n      const x3 = cx + inner * Math.cos(end);\n      const y3 = cy + inner * Math.sin(end);\n      const x4 = cx + inner * Math.cos(start);\n      const y4 = cy + inner * Math.sin(start);\n      const large = angle > Math.PI ? 1 : 0;\n      const path = `M ${x1} ${y1} A ${outer} ${outer} 0 ${large} 1 ${x2} ${y2} L ${x3} ${y3} A ${inner} ${inner} 0 ${large} 0 ${x4} ${y4} Z`;\n      return { label: item.label, tone: item.tone ?? \"accent\", path };\n    });\n  });\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport type VikingChartContainerVariant = \"default\" | \"subtle\" | \"gradient\";\n\n/**\n * viking-chart-container — wrapper for consistent inlaid chart presentation.\n * Inspired by Ghost analytics cards and Cloudscape Container pattern.\n * Ensures perfect padding, responsive sizing, and subtle background framing.\n */\n@Component({\n  selector: \"viking-chart-container\",\n  standalone: true,\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class]\": \"hostClass()\",\n  },\n  template: `\n    <div class=\"viking-chart-container\">\n      @if (heading()) {\n        <header class=\"viking-chart-container__header\">\n          <h2 class=\"viking-chart-container__heading\">{{ heading() }}</h2>\n          @if (description()) {\n            <p class=\"viking-chart-container__description\">\n              {{ description() }}\n            </p>\n          }\n          @if (infoTooltip()) {\n            <div class=\"viking-chart-container__tooltip\">\n              <viking-icon name=\"info\" [size]=\"16\" [title]=\"infoTooltip()\" />\n            </div>\n          }\n        </header>\n      }\n      <div class=\"viking-chart-container__plot\">\n        <ng-content />\n      </div>\n      @if (legendPosition()) {\n        <footer\n          class=\"viking-chart-container__legend viking-chart-container__legend--{{\n            legendPosition()\n          }}\"\n        ></footer>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host(.viking-chart-container-wrapper) {\n        display: block;\n        width: 100%;\n        max-width: 100%;\n      }\n      .viking-chart-container {\n        display: flex;\n        flex-direction: column;\n        width: 100%;\n        border: 1px solid var(--viking-border-subtle);\n        border-radius: var(--viking-radius-xl);\n        background: var(\n          --viking-chart-container-bg,\n          var(--viking-surface-card)\n        );\n        overflow: hidden;\n      }\n      .viking-chart-container__header {\n        display: flex;\n        align-items: flex-start;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        padding: var(--viking-chart-container-padding, var(--viking-space-3));\n        border-bottom: 1px solid var(--viking-border-subtle);\n      }\n      .viking-chart-container__heading {\n        margin: 0;\n        font-size: var(--viking-font-size-ui);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        color: var(--viking-text);\n      }\n      .viking-chart-container__description {\n        margin: var(--viking-space-0-5) 0 0;\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text-muted);\n      }\n      .viking-chart-container__tooltip {\n        color: var(--viking-text-muted);\n        cursor: help;\n      }\n      .viking-chart-container__plot {\n        flex: 1;\n        width: 100%;\n        min-height: 0;\n        padding: var(\n          --viking-chart-container-plot-padding,\n          var(--viking-space-2)\n        );\n        background: var(--viking-chart-container-plot-bg, transparent);\n      }\n      .viking-chart-container__legend {\n        padding: var(--viking-space-2) var(--viking-space-3)\n          var(--viking-space-3);\n        font-size: var(--viking-font-size-xs);\n        color: var(--viking-text-muted);\n      }\n      .viking-chart-container__legend--bottom {\n        border-top: 1px solid var(--viking-border-subtle);\n      }\n      /* Variant styles */\n      .viking-chart-container--subtle {\n        --viking-chart-container-bg: color-mix(\n          in srgb,\n          var(--viking-accent) 4%,\n          transparent\n        );\n        --viking-chart-container-plot-bg: transparent;\n      }\n      .viking-chart-container--gradient {\n        --viking-chart-container-bg: linear-gradient(\n          180deg,\n          color-mix(in srgb, var(--viking-accent) 6%, transparent) 0%,\n          transparent 100%\n        );\n        --viking-chart-container-plot-bg: transparent;\n      }\n      /* Responsive sizing */\n      :host(.viking-chart-container-auto) .viking-chart-container {\n        aspect-ratio: var(--viking-chart-container-ratio, 16 / 9);\n        max-height: var(--viking-chart-container-max-height, 500px);\n      }\n      :host(.viking-chart-container-time-series) .viking-chart-container {\n        aspect-ratio: 3 / 1;\n        max-height: 240px;\n      }\n      :host(.viking-chart-container-full) .viking-chart-container {\n        aspect-ratio: var(--viking-chart-container-full-ratio, auto);\n        min-height: 20rem;\n      }\n    `,\n  ],\n})\nexport class VikingChartContainer {\n  readonly heading = input<string>(\"\");\n  readonly description = input<string>(\"\");\n  readonly infoTooltip = input<string>(\"\");\n  readonly variant = input<VikingChartContainerVariant>(\"default\");\n  readonly legendPosition = input<\"bottom\" | \"side\" | \"\">(\"bottom\");\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-chart-container-wrapper\",\n      `viking-chart-container--${this.variant()}`,\n      this.heading() ? \"viking-chart-container-has-header\" : \"\",\n    ].join(\" \"),\n  );\n}\n","import {\n  afterRenderEffect,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  input,\n} from \"@angular/core\";\nimport { syncFieldControlA11y } from \"../../core/field-a11y\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-field — label / description / error wrapper for any control.\n *\n * Associates helper + validation text via aria-describedby, marks the control\n * aria-invalid when error is set, and announces errors (role=alert).\n */\n@Component({\n  selector: \"viking-field\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"suite-field viking-field\",\n    \"[class.viking-field-invalid]\": \"!!error()\",\n    \"[attr.data-invalid]\": 'error() ? \"true\" : null',\n    role: \"group\",\n    \"[attr.aria-labelledby]\": \"label() ? labelId : null\",\n  },\n  template: `\n    <!-- Projected control is wrapped for implicit label association. -->\n    <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -->\n    <label class=\"viking-field-label-wrap suite-field-label-wrap\">\n      @if (label()) {\n        <span\n          class=\"viking-field-label suite-field-label suite-label\"\n          [id]=\"labelId\"\n        >\n          {{ label() }}\n          @if (required()) {\n            <span class=\"viking-field-required\" aria-hidden=\"true\">*</span>\n          }\n        </span>\n      }\n      <ng-content />\n    </label>\n    @if (description()) {\n      <p\n        class=\"viking-field-description suite-field-description\"\n        [id]=\"descriptionId\"\n      >\n        {{ description() }}\n      </p>\n    }\n    @if (error()) {\n      <p\n        class=\"viking-field-error suite-field-error\"\n        [id]=\"errorId\"\n        role=\"alert\"\n        aria-live=\"assertive\"\n        aria-atomic=\"true\"\n      >\n        <span class=\"suite-sr-only viking-sr-only\">Error: </span>{{ error() }}\n      </p>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      :host(.viking-field-invalid) {\n        animation: viking-shake var(--viking-duration-slow)\n          var(--viking-ease-default);\n      }\n      .viking-field-label-wrap {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-2);\n      }\n      .viking-field-label {\n        display: block;\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-text);\n        letter-spacing: var(--viking-letter-spacing-wide);\n        line-height: var(--viking-line-height-tight);\n        margin: 0 0 var(--viking-space-1);\n      }\n      .viking-field-required {\n        color: var(--viking-danger);\n        margin-left: var(--viking-space-0-5);\n      }\n      .viking-field-description,\n      .viking-field-error {\n        margin: var(--viking-space-1) 0 0;\n        font-size: var(--viking-font-size-sm);\n        line-height: var(--viking-line-height-normal);\n      }\n      .viking-field-description {\n        color: var(--viking-text-muted);\n      }\n      .viking-field-error {\n        color: var(--viking-danger-text, var(--viking-danger));\n        font-weight: var(--viking-font-weight-semibold);\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-0-5);\n      }\n      .viking-field-error::before {\n        content: \"\";\n        width: 6px;\n        height: 6px;\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-danger);\n        flex-shrink: 0;\n      }\n      :host(.viking-field-invalid) ::ng-deep .viking-control {\n        border-color: var(--viking-danger);\n        box-shadow: 0 0 0 1px\n          color-mix(in srgb, var(--viking-danger) 25%, transparent);\n      }\n      :host ::ng-deep viking-select,\n      :host ::ng-deep viking-native-select {\n        display: block;\n        width: 100%;\n        min-width: 0;\n      }\n      @media (prefers-reduced-motion: reduce) {\n        :host(.viking-field-invalid) {\n          animation: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingField {\n  readonly label = input<string>(\"\");\n  readonly description = input<string>(\"\");\n  readonly error = input<string>(\"\");\n  readonly required = input<boolean>(false);\n\n  protected readonly descriptionId = vikingUid(\"viking-field-description\");\n  protected readonly errorId = vikingUid(\"viking-field-error\");\n  protected readonly labelId = vikingUid(\"viking-field-label\");\n\n  private readonly host = inject(ElementRef<HTMLElement>);\n\n  constructor() {\n    afterRenderEffect(() => {\n      const description = this.description();\n      const error = this.error();\n      syncFieldControlA11y(this.host.nativeElement, {\n        descriptionId: this.descriptionId,\n        errorId: this.errorId,\n        hasDescription: !!description,\n        hasError: !!error,\n        required: this.required(),\n      });\n    });\n  }\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-spinner — clinical loading indicator.\n */\n@Component({\n  selector: \"viking-spinner\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"status\",\n    \"aria-live\": \"polite\",\n    \"[attr.aria-label]\": \"label()\",\n    \"[class.viking-spinner-branded]\": \"branded()\",\n  },\n  template: `\n    <svg\n      class=\"viking-spinner-svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      [attr.width]=\"size()\"\n      [attr.height]=\"size()\"\n      aria-hidden=\"true\"\n    >\n      <circle class=\"viking-spinner-track\" cx=\"12\" cy=\"12\" r=\"9\" />\n      <circle\n        class=\"viking-spinner-arc\"\n        cx=\"12\"\n        cy=\"12\"\n        r=\"9\"\n        stroke-linecap=\"round\"\n      />\n    </svg>\n    @if (branded()) {\n      <span class=\"viking-spinner-wordmark\" aria-hidden=\"true\">DEML</span>\n    }\n  `,\n})\nexport class VikingSpinner {\n  readonly size = input<number>(20);\n  readonly label = input<string>(\"Loading\");\n  readonly branded = input<boolean>(false);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  CUSTOM_ELEMENTS_SCHEMA,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingSpinner } from \"../spinner/spinner\";\nimport { registerVikingInputWcElement } from \"../../web/input/viking-input-wc\";\nimport type { VikingInputWc } from \"../../web/input/viking-input-wc\";\n\nregisterVikingInputWcElement();\n\n/**\n * viking-input — thin Angular wrapper around `viking-input-wc`.\n * ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-input\",\n  imports: [VikingIcon, VikingSpinner],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  providers: [provideVikingCva(VikingInput)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <viking-input-wc\n      [attr.type]=\"type()\"\n      [attr.name]=\"name() || null\"\n      [attr.placeholder]=\"placeholder()\"\n      [attr.value]=\"value()\"\n      [attr.disabled]=\"isDisabled() ? '' : null\"\n      [attr.loading]=\"loading() ? '' : null\"\n      [attr.clearable]=\"clearable() ? '' : null\"\n      [attr.autocomplete]=\"autocomplete() || null\"\n      [attr.aria-label]=\"label() || placeholder() || 'Text input'\"\n      (input)=\"onWcInput($event)\"\n      (blur)=\"onTouched()\"\n      (viking-cleared)=\"clear()\"\n    >\n      @if (icon()) {\n        <viking-icon\n          slot=\"leading\"\n          class=\"viking-input-icon\"\n          [name]=\"icon()!\"\n          [size]=\"20\"\n        />\n      }\n      @if (loading()) {\n        <viking-spinner slot=\"trailing\" [size]=\"16\" label=\"Loading input\" />\n      } @else if (iconTrailing()) {\n        <viking-icon\n          slot=\"trailing\"\n          class=\"viking-input-icon\"\n          [name]=\"iconTrailing()!\"\n          [size]=\"20\"\n        />\n      }\n      @if (kbd()) {\n        <kbd slot=\"trailing\" class=\"viking-input-kbd\">{{ kbd() }}</kbd>\n      }\n    </viking-input-wc>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      .viking-input-icon {\n        color: var(--viking-text-muted);\n      }\n      .viking-input-kbd {\n        font-family: var(--viking-font-family-mono);\n        font-size: var(--viking-font-size-xs);\n        color: var(--viking-text-muted);\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius-xs);\n        padding: 0 var(--viking-space-0-5);\n        line-height: 1.4;\n      }\n    `,\n  ],\n})\nexport class VikingInput extends VikingControl<string> {\n  readonly value = model<string>(\"\");\n  readonly type = input<string>(\"text\");\n  /** Native input name — required for password managers and form autofill. */\n  readonly name = input<string>(\"\");\n  readonly placeholder = input<string>(\"\");\n  readonly label = input<string>(\"\");\n  readonly icon = input<VikingIconName | null>(null);\n  readonly iconTrailing = input<VikingIconName | null>(null);\n  readonly kbd = input<string | null>(null);\n  readonly clearable = input<boolean>(false);\n  readonly loading = input<boolean>(false);\n  readonly disabled = input<boolean>(false);\n  readonly autocomplete = input<string>(\"\");\n\n  readonly cleared = output<void>();\n\n  protected isDisabled = (): boolean => this.disabled() || this.formDisabled();\n\n  writeValue(value: string): void {\n    this.value.set(value ?? \"\");\n  }\n\n  protected onWcInput = (event: Event): void => {\n    const wc = event.currentTarget as VikingInputWc | null;\n    const next = wc?.value ?? this.value();\n    this.value.set(next);\n    this.onChange(next);\n  };\n\n  protected clear = (): void => {\n    this.value.set(\"\");\n    this.onChange(\"\");\n    this.cleared.emit();\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\n/**\n * viking-text — body text with semantic variants.\n */\n@Component({\n  selector: \"viking-text\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        line-height: var(--viking-line-height-relaxed);\n        color: var(--viking-text);\n        margin: 0 0 var(--viking-space-2) 0;\n      }\n      :host(.viking-text-inline) {\n        display: inline;\n      }\n      :host(.viking-text-muted) {\n        color: var(--viking-text-muted);\n      }\n      :host(.viking-text-strong) {\n        font-weight: var(--viking-font-weight-semibold);\n      }\n      :host(.viking-text-accent) {\n        color: var(--viking-accent);\n        font-weight: var(--viking-font-weight-medium);\n      }\n    `,\n  ],\n})\nexport class VikingText {\n  readonly variant = input<\"default\" | \"muted\" | \"strong\" | \"accent\">(\n    \"default\",\n  );\n  readonly inline = input<boolean>(false);\n\n  protected readonly hostClass = computed(() => ({\n    [`viking-text-${this.variant()}`]: this.variant() !== \"default\",\n    \"viking-text-inline\": this.inline(),\n  }));\n}\n","import { Injectable, signal } from \"@angular/core\";\n\nexport interface VikingConfirmDialogData {\n  title?: string;\n  message: string;\n  type?: \"alert\" | \"confirm\" | \"prompt\";\n  confirmText?: string;\n  confirmBtnText?: string;\n  /** Secondary action label (confirm dialogs only). Defaults to \"Cancel\". */\n  cancelBtnText?: string;\n  confirmBtnColor?: \"primary\" | \"warn\" | \"accent\";\n}\n\nexport type VikingOnboardingDialogData = {\n  message: string;\n  force?: boolean;\n};\n\n/** Discriminated active overlay — narrow with `kind` (no casts). */\nexport type VikingDialogState =\n  | { kind: \"confirm\"; data: VikingConfirmDialogData }\n  | { kind: \"search\" }\n  | { kind: \"onboarding\"; data: VikingOnboardingDialogData };\n\n/** @deprecated Prefer narrowing `VikingDialogState.kind`. */\nexport type VikingDialogKind = VikingDialogState[\"kind\"];\n\n/** Programmatic confirm / prompt / overlay orchestration for Viking-UI modals. */\n@Injectable({ providedIn: \"root\" })\nexport class VikingDialogService {\n  readonly active = signal<VikingDialogState | null>(null);\n\n  private confirmResolver: ((value: boolean) => void) | null = null;\n  private onboardingResolver: ((value: boolean | undefined) => void) | null =\n    null;\n\n  openConfirm(data: VikingConfirmDialogData): Promise<boolean> {\n    this.closeActive(false);\n    return new Promise<boolean>((resolve) => {\n      this.confirmResolver = resolve;\n      this.active.set({ kind: \"confirm\", data });\n    });\n  }\n\n  resolveConfirm(result: boolean): void {\n    this.confirmResolver?.(result);\n    this.confirmResolver = null;\n    this.active.set(null);\n  }\n\n  /** Update an open confirm without replacing its pending promise resolver. */\n  updateConfirm(data: Partial<VikingConfirmDialogData>): void {\n    const active = this.active();\n    if (active?.kind !== \"confirm\") {\n      return;\n    }\n    this.active.set({\n      kind: \"confirm\",\n      data: { ...active.data, ...data },\n    });\n  }\n\n  openSearch(): void {\n    if (this.active()?.kind === \"search\") {\n      return;\n    }\n    this.closeActive(false);\n    this.active.set({ kind: \"search\" });\n  }\n\n  closeSearch(): void {\n    if (this.active()?.kind === \"search\") {\n      this.active.set(null);\n    }\n  }\n\n  openOnboarding(force = false): Promise<boolean | undefined> {\n    this.closeActive(false);\n    return new Promise<boolean | undefined>((resolve) => {\n      this.onboardingResolver = resolve;\n      this.active.set({ kind: \"onboarding\", data: { message: \"\", force } });\n    });\n  }\n\n  resolveOnboarding(result?: boolean): void {\n    this.onboardingResolver?.(result);\n    this.onboardingResolver = null;\n    this.active.set(null);\n  }\n\n  closeActive(cancelPending = true): void {\n    if (cancelPending) {\n      this.confirmResolver?.(false);\n      this.onboardingResolver?.(undefined);\n    }\n    this.confirmResolver = null;\n    this.onboardingResolver = null;\n    this.active.set(null);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  signal,\n} from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingField } from \"../field/field\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingInput } from \"../input/input\";\nimport { VikingModal } from \"../modal/modal\";\nimport { VikingText } from \"../typography/text\";\nimport type { VikingIconName } from \"../../core/icons\";\nimport {\n  VikingConfirmDialogData,\n  VikingDialogService,\n} from \"./confirm-dialog.service\";\n\n/**\n * viking-confirm-dialog — alert / confirm / prompt modal wired to VikingDialogService.\n */\n@Component({\n  selector: \"viking-confirm-dialog\",\n  imports: [\n    FormsModule,\n    VikingModal,\n    VikingButton,\n    VikingField,\n    VikingInput,\n    VikingText,\n    VikingIcon,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (data(); as dialogData) {\n      <viking-modal\n        [open]=\"open()\"\n        [heading]=\"heading()\"\n        (openChange)=\"onOpenChange($event)\"\n      >\n        <div class=\"viking-confirm-body\">\n          <div class=\"viking-confirm-title-row\">\n            <viking-icon [name]=\"iconName()\" [size]=\"24\" />\n            <viking-text>{{ dialogData.message }}</viking-text>\n          </div>\n          @if (dialogData.type === \"prompt\" && dialogData.confirmText) {\n            <viking-field\n              label=\"Verification text\"\n              [description]=\"'Type ' + dialogData.confirmText + ' to proceed'\"\n            >\n              <viking-input\n                [ngModel]=\"inputValue()\"\n                (ngModelChange)=\"inputValue.set($event)\"\n                autocomplete=\"off\"\n                (keyup.enter)=\"onConfirm()\"\n              />\n            </viking-field>\n          }\n        </div>\n        <div vikingModalActions>\n          @if (dialogData.type !== \"alert\") {\n            <viking-button variant=\"outline\" (pressed)=\"onCancel()\">\n              {{ dialogData.cancelBtnText || \"Cancel\" }}\n            </viking-button>\n          }\n          <viking-button\n            [variant]=\"\n              dialogData.confirmBtnColor === 'warn' ? 'danger' : 'primary'\n            \"\n            [disabled]=\"!isValid()\"\n            [icon]=\"\n              dialogData.type === 'alert'\n                ? 'check-circle'\n                : dialogData.confirmBtnColor === 'warn'\n                  ? 'trash'\n                  : 'check'\n            \"\n            (pressed)=\"onConfirm()\"\n          >\n            {{\n              dialogData.confirmBtnText ||\n                (dialogData.type === \"alert\" ? \"OK\" : \"Confirm\")\n            }}\n          </viking-button>\n        </div>\n      </viking-modal>\n    }\n  `,\n  styles: [\n    `\n      .viking-confirm-body {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-2);\n      }\n      .viking-confirm-title-row {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-2);\n      }\n    `,\n  ],\n})\nexport class VikingConfirmDialog {\n  private readonly vikingDialog = inject(VikingDialogService);\n\n  protected readonly inputValue = signal<string>(\"\");\n\n  protected readonly data = computed((): VikingConfirmDialogData | null => {\n    const active = this.vikingDialog.active();\n    return active?.kind === \"confirm\" ? active.data : null;\n  });\n\n  protected readonly open = computed(() => this.data() !== null);\n\n  protected readonly heading = computed(() => {\n    const data = this.data();\n    if (!data) return \"\";\n    return (\n      data.title ??\n      (data.type === \"alert\"\n        ? \"Notice\"\n        : data.type === \"prompt\"\n          ? \"Verification Required\"\n          : \"Confirm Action\")\n    );\n  });\n\n  protected readonly iconName = computed((): VikingIconName => {\n    const data = this.data();\n    if (!data) return \"info\";\n    if (data.type === \"alert\") return \"info\";\n    if (data.confirmBtnColor === \"warn\") return \"alert-triangle\";\n    return \"info\";\n  });\n\n  protected readonly isValid = computed(() => {\n    const data = this.data();\n    if (!data || data.type !== \"prompt\" || !data.confirmText) {\n      return true;\n    }\n    return this.inputValue() === data.confirmText;\n  });\n\n  protected onCancel = (): void => {\n    this.inputValue.set(\"\");\n    this.vikingDialog.resolveConfirm(false);\n  };\n\n  protected onConfirm = (): void => {\n    if (!this.isValid()) return;\n    this.inputValue.set(\"\");\n    this.vikingDialog.resolveConfirm(true);\n  };\n\n  protected onOpenChange = (next: boolean): void => {\n    if (!next) {\n      this.onCancel();\n    }\n  };\n}\n\nexport type { VikingConfirmDialogData };\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-chart-card-header — shared label / value / trend header for analytics chart cards.\n */\n@Component({\n  selector: \"viking-chart-card-header\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: \"chart-custom-header\" },\n  template: `\n    <div class=\"chart-custom-title\">{{ title() }}</div>\n    @if (hasData()) {\n      <div class=\"chart-custom-value\">{{ value() }}</div>\n      @if (trend()) {\n        <div class=\"chart-custom-trend\">{{ trend() }}</div>\n      }\n    } @else {\n      <div class=\"chart-custom-value chart-value-muted\">{{ emptyLabel() }}</div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        align-items: flex-start;\n        gap: var(--viking-space-1);\n        /* Integrated with viking-card rhythm — generous but not sparse */\n        padding: var(--viking-space-3) var(--viking-space-4)\n          var(--viking-space-2);\n        width: 100%;\n        box-sizing: border-box;\n        flex-shrink: 0;\n        border-bottom: 1px solid var(--viking-border-subtle);\n        margin-bottom: 0;\n      }\n\n      .chart-custom-title {\n        color: var(--viking-text-muted, var(--text-muted));\n        font-size: var(--viking-font-size-xs);\n        font-family: var(--viking-font-family);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        font-weight: var(--viking-font-weight-semibold);\n        margin: 0;\n        text-transform: uppercase;\n      }\n\n      .chart-custom-value {\n        color: var(--viking-text, var(--text-color));\n        font-size: var(--viking-font-size-md);\n        font-family: var(--viking-font-family);\n        font-weight: var(--viking-font-weight-bold);\n        line-height: var(--viking-line-height-tight);\n        margin: 0;\n      }\n\n      .chart-custom-trend {\n        color: var(--viking-accent);\n        font-size: var(--viking-font-size-sm, 14px);\n        font-family: var(--viking-font-family);\n        font-weight: var(--viking-font-weight-semibold, 600);\n        letter-spacing: 0.02em;\n        margin: 0;\n      }\n\n      .chart-value-muted {\n        font-size: var(--viking-font-size-md) !important;\n        font-weight: var(--viking-font-weight-semibold, 600) !important;\n        color: var(--text-muted) !important;\n        letter-spacing: var(--viking-letter-spacing-caps, 0.05em);\n        text-transform: uppercase;\n      }\n    `,\n  ],\n})\nexport class VikingChartCardHeader {\n  readonly title = input.required<string>();\n  readonly value = input<string>(\"\");\n  readonly emptyLabel = input<string>(\"Awaiting signal\");\n  readonly trend = input<string>(\"\");\n  readonly hasData = input<boolean>(false);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  input,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-icon-heading — icon + title row with shared vertical alignment.\n * Use in bento cards, integration tiles, and docs panels.\n */\n@Component({\n  selector: \"viking-icon-heading\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [VikingIcon],\n  host: {\n    class: \"viking-icon-heading\",\n    \"[class.viking-icon-heading--lg]\": 'size() === \"lg\"',\n  },\n  template: `\n    <span class=\"viking-icon-heading__icon\" aria-hidden=\"true\">\n      <viking-icon [name]=\"icon()\" [size]=\"24\" color=\"accent\" />\n    </span>\n    @if (headingLevel() === \"h2\") {\n      <h2 class=\"viking-icon-heading__title\"><ng-content /></h2>\n    } @else {\n      <h3 class=\"viking-icon-heading__title\"><ng-content /></h3>\n    }\n  `,\n})\nexport class VikingIconHeading {\n  readonly icon = input.required<VikingIconName>();\n  readonly size = input<\"md\" | \"lg\">(\"md\");\n  readonly headingLevel = input<\"h2\" | \"h3\">(\"h3\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIconBadge } from \"../icon-badge/icon-badge\";\nimport { VikingIconName } from \"../../core/icons\";\n\nexport type VikingChartEmptyTone = \"default\" | \"secure\" | \"loading\";\nexport type VikingChartEmptyLayout = \"fill\" | \"overlay\" | \"compact\" | \"inline\";\n\n/**\n * viking-chart-empty-state — standardized dashed “waiting for data” overlay for chart panels.\n * Fills its parent chart body by default; use layout=\"overlay\" for map/canvas stacks.\n */\n@Component({\n  selector: \"viking-chart-empty-state\",\n  imports: [VikingIconBadge],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"status\",\n    class: \"viking-chart-empty-state empty-chart-state\",\n    \"[class.is-secure]\": \"tone() === 'secure'\",\n    \"[class.is-loading]\": \"tone() === 'loading'\",\n    \"[class.compact]\": \"layout() === 'compact'\",\n    \"[class.viking-chart-empty-overlay]\": \"layout() === 'overlay'\",\n    \"[class.viking-chart-empty-fill]\": \"layout() === 'fill'\",\n    \"[class.viking-chart-empty-inline]\": \"layout() === 'inline'\",\n  },\n  template: `\n    @if (tone() === \"loading\") {\n      <div class=\"viking-chart-skeleton\" aria-hidden=\"true\"></div>\n      <h3 class=\"empty-title\">{{ title() }}</h3>\n      <p class=\"empty-subtitle\">{{ description() }}</p>\n    } @else {\n      <viking-icon-badge\n        [icon]=\"icon()\"\n        [tone]=\"tone() === 'secure' ? 'success' : 'default'\"\n      />\n      <h3 class=\"empty-title\">{{ title() }}</h3>\n      <p class=\"empty-subtitle\">{{ description() }}</p>\n    }\n    <div class=\"viking-chart-empty-actions\">\n      <ng-content />\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        text-align: center;\n        width: 100%;\n        box-sizing: border-box;\n        /* Unified clean empty state with modern spacing */\n        padding: var(\n          --viking-chart-empty-padding,\n          var(--viking-space-5) var(--viking-space-4)\n        );\n        border-radius: var(--viking-radius-xl);\n        background: var(--viking-surface-alt);\n        border: 1px dashed var(--viking-border);\n        box-shadow: var(--viking-shadow-inner);\n        gap: var(--viking-chart-empty-gap, var(--viking-space-3));\n        animation: viking-fade-in var(--viking-duration)\n          var(--viking-ease-default);\n      }\n\n      :host(.viking-chart-empty-fill) {\n        flex: 1 1 auto;\n        min-height: var(\n          --viking-chart-empty-min-height,\n          var(--viking-chart-fill-min-height, clamp(16rem, 32vw, 17.5rem))\n        );\n      }\n\n      viking-icon-badge {\n        margin-bottom: var(--viking-space-2);\n      }\n\n      .empty-title {\n        margin: 0 0 var(--viking-space-1) 0;\n        font-size: var(--viking-font-size-md);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        color: var(--viking-text);\n        line-height: var(--viking-line-height-tight);\n      }\n\n      :host(.viking-chart-empty-overlay) {\n        position: absolute;\n        inset: 0;\n        z-index: 1;\n        min-height: 100%;\n        margin: 0;\n        background: color-mix(\n          in srgb,\n          var(--viking-surface-alt) 94%,\n          transparent\n        );\n      }\n\n      :host(.compact) {\n        min-height: var(--viking-space-14);\n        padding: var(--viking-space-3);\n      }\n\n      :host(.viking-chart-empty-inline) {\n        border: none;\n        background: transparent;\n        box-shadow: none;\n        min-height: auto;\n        flex: 1 1 auto;\n        justify-content: center;\n        padding: var(--viking-space-4) var(--viking-space-2);\n      }\n\n      :host(.is-secure) .viking-icon-badge {\n        background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n        color: var(--viking-success);\n      }\n\n      :host(.is-loading) {\n        background: transparent;\n        border-style: solid;\n        box-shadow: none;\n        padding: var(--viking-space-2);\n      }\n\n      :host(.is-loading) .viking-chart-skeleton {\n        width: 100%;\n        min-height: 120px;\n        border-radius: var(--viking-radius-md);\n      }\n\n      .empty-subtitle {\n        margin: 0;\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text-muted);\n        line-height: var(--viking-line-height-relaxed);\n        max-width: 28rem;\n      }\n\n      .viking-chart-empty-actions {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        justify-content: center;\n        gap: var(--viking-space-2);\n        margin-top: var(--viking-space-2);\n      }\n\n      .viking-chart-empty-actions:empty {\n        display: none;\n      }\n\n      @media (prefers-reduced-motion: reduce) {\n        :host {\n          animation: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingChartEmptyState {\n  readonly title = input.required<string>();\n  readonly description = input.required<string>();\n  readonly icon = input<VikingIconName>(\"globe\");\n  readonly tone = input<VikingChartEmptyTone>(\"default\");\n  readonly layout = input<VikingChartEmptyLayout>(\"fill\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\nexport type VikingChartPanelSize = \"large\" | \"medium\";\nexport type VikingChartPanelBody = \"default\" | \"origin-map\";\n\n/** Optional loading flag — when true renders a skeleton in body for chart content. */\n\n/**\n * viking-chart-panel — outlined analytics card shell with consistent header/body rhythm.\n */\n@Component({\n  selector: \"viking-chart-panel\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"status-card-outlined viking-chart-panel\",\n    \"[class.viking-chart-panel-large]\": \"size() === 'large'\",\n    \"[class.viking-chart-panel-medium]\": \"size() === 'medium'\",\n    \"[class.viking-chart-panel-origin-map]\": \"body() === 'origin-map'\",\n    \"[class.viking-chart-panel-loading]\": \"loading()\",\n  },\n  template: `\n    <ng-content select=\"viking-chart-card-header\" />\n    <div [class]=\"bodyClasses()\">\n      @if (loading()) {\n        <div class=\"viking-chart-skeleton\" aria-hidden=\"true\"></div>\n      } @else {\n        <ng-content />\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: grid;\n        grid-template-rows: auto minmax(0, 1fr);\n        container-type: inline-size;\n        container-name: viking-chart-panel;\n        position: relative;\n        overflow: hidden;\n        min-width: 0;\n        color: var(--viking-text);\n        background: var(--viking-surface-recipe);\n        border: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-border-container);\n        border-radius: var(--viking-card-radius);\n        box-shadow: var(--viking-shadow-xs), var(--viking-surface-highlight);\n      }\n\n      :host(.viking-chart-panel-large) {\n        min-height: var(--viking-chart-panel-min-height-lg, 26rem);\n      }\n\n      :host(.viking-chart-panel-medium) {\n        min-height: var(--viking-chart-panel-min-height-md, 24rem);\n      }\n\n      .viking-chart-panel-body {\n        flex: 1 1 auto;\n        display: flex;\n        flex-direction: column;\n        align-items: stretch;\n        justify-content: flex-start;\n        position: relative;\n        overflow: hidden;\n        padding: var(--viking-space-content-gap);\n        box-sizing: border-box;\n        gap: var(--viking-space-3);\n        min-width: 0;\n      }\n\n      @container viking-chart-panel (min-width: 37.5rem) {\n        .viking-chart-panel-body {\n          padding: var(--viking-space-container-gap);\n        }\n      }\n\n      .viking-chart-panel-body > viking-chart {\n        flex: 0 0 auto;\n        width: 100%;\n        min-width: 0;\n        min-height: 0;\n        align-self: stretch;\n      }\n\n      .viking-chart-panel-body > viking-chart-empty-state {\n        flex: 1 1 auto;\n        width: 100%;\n        min-width: 0;\n        min-height: 0;\n        align-self: stretch;\n      }\n\n      :host(.viking-chart-panel-large) .viking-chart-panel-body {\n        --viking-chart-empty-min-height: var(\n          --viking-chart-empty-min-height-lg,\n          clamp(14.5rem, 30vw, 17.5rem)\n        );\n        --viking-chart-fill-min-height: var(\n          --viking-chart-fill-min-height-lg,\n          clamp(14.5rem, 30vw, 17.5rem)\n        );\n        min-height: var(--viking-chart-panel-body-min-height-lg, 18rem);\n      }\n\n      :host(.viking-chart-panel-medium) .viking-chart-panel-body {\n        --viking-chart-empty-min-height: var(\n          --viking-chart-empty-min-height,\n          clamp(13.5rem, 28vw, 16.5rem)\n        );\n        --viking-chart-fill-min-height: var(\n          --viking-chart-fill-min-height,\n          clamp(13.5rem, 28vw, 16.5rem)\n        );\n        min-height: var(--viking-chart-panel-body-min-height-md, 16.5rem);\n      }\n\n      :host(.viking-chart-panel-medium.viking-chart-panel-origin-map)\n        .viking-chart-panel-body,\n      :host(.viking-chart-panel-medium)\n        .viking-chart-panel-body.origin-map-container {\n        --viking-chart-empty-min-height: var(\n          --viking-chart-map-min-height,\n          22rem\n        );\n        min-height: var(--viking-chart-map-min-height, 22rem);\n        overflow: hidden;\n      }\n\n      :host(.viking-chart-panel-origin-map) ::ng-deep .origin-map-canvas {\n        flex: 1 1 auto;\n        height: var(--viking-chart-map-min-height, 22rem);\n        min-height: var(--viking-chart-map-min-height, 22rem);\n        width: 100%;\n        display: block;\n        border-radius: var(--viking-radius-md, 8px);\n        z-index: 0;\n        background: var(--viking-surface-inset, var(--viking-surface-alt));\n        position: relative;\n        visibility: visible;\n        overflow: hidden;\n      }\n\n      :host(.viking-chart-panel-origin-map) ::ng-deep .leaflet-container {\n        width: 100% !important;\n        height: 100% !important;\n        min-height: var(--viking-chart-map-min-height, 22rem);\n        background: var(--viking-surface-inset, var(--viking-surface-alt));\n        font: inherit;\n        border-radius: inherit;\n      }\n\n      :host(.viking-chart-panel-origin-map) ::ng-deep .leaflet-pane,\n      :host(.viking-chart-panel-origin-map) ::ng-deep .leaflet-map-pane {\n        z-index: 1;\n      }\n\n      :host(.viking-chart-panel-origin-map) ::ng-deep .leaflet-tile-pane {\n        filter: none;\n      }\n\n      :host(.viking-chart-panel-origin-map) ::ng-deep .leaflet-overlay-pane {\n        z-index: 4;\n      }\n\n      :host(.viking-chart-panel-origin-map) ::ng-deep .leaflet-marker-pane,\n      :host(.viking-chart-panel-origin-map) ::ng-deep .leaflet-tooltip-pane {\n        z-index: 6;\n      }\n\n      :host(.viking-chart-panel-origin-map) ::ng-deep .leaflet-tile {\n        max-width: none !important;\n        max-height: none !important;\n      }\n\n      :host(.viking-chart-panel-loading) .viking-chart-panel-body {\n        align-items: center;\n        justify-content: center;\n      }\n    `,\n  ],\n})\nexport class VikingChartPanel {\n  readonly size = input<VikingChartPanelSize>(\"medium\");\n  readonly body = input<VikingChartPanelBody>(\"default\");\n  readonly loading = input<boolean>(false);\n\n  protected readonly bodyClasses = computed(() => {\n    const sizeClass =\n      this.size() === \"large\"\n        ? \"chart-container-large\"\n        : \"chart-container-medium\";\n    const bodyVariant =\n      this.body() === \"origin-map\" ? \" origin-map-container\" : \"\";\n    return `card-body-clean viking-chart-panel-body ${sizeClass}${bodyVariant}`;\n  });\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\nexport type VikingPageMockupVariant =\n  | \"security-ops\"\n  | \"analytics\"\n  | \"dashboard\"\n  | \"status\"\n  | \"explore\";\n\nexport type VikingPageMockupGauge = {\n  label: string;\n  value: string;\n  primary?: boolean;\n};\n\nexport type VikingPageMockupStat = {\n  label: string;\n  value: string;\n};\n\nconst VARIANT_DEFAULTS: Record<\n  VikingPageMockupVariant,\n  {\n    title: string;\n    gauges: VikingPageMockupGauge[];\n    stats: VikingPageMockupStat[];\n    bars: number[];\n    chartMode: \"bars\" | \"line\";\n  }\n> = {\n  \"security-ops\": {\n    title: \"deml.app / security-ops\",\n    gauges: [\n      { label: \"Threat\", value: \"12%\" },\n      { label: \"CES\", value: \"94\", primary: true },\n      { label: \"Stability\", value: \"99%\" },\n    ],\n    stats: [\n      { label: \"P99\", value: \"42ms\" },\n      { label: \"Requests\", value: \"12.4K\" },\n      { label: \"Incidents\", value: \"0\" },\n    ],\n    bars: [45, 72, 58, 85, 63, 91, 78, 55],\n    chartMode: \"bars\",\n  },\n  analytics: {\n    title: \"deml.app / analytics\",\n    gauges: [\n      { label: \"Latency\", value: \"38ms\" },\n      { label: \"Throughput\", value: \"8.2K\", primary: true },\n      { label: \"Uptime\", value: \"99.9%\" },\n    ],\n    stats: [\n      { label: \"P99\", value: \"61ms\" },\n      { label: \"Regions\", value: \"14\" },\n      { label: \"Anomalies\", value: \"2\" },\n    ],\n    bars: [38, 55, 48, 70, 62, 88, 74, 66],\n    chartMode: \"line\",\n  },\n  dashboard: {\n    title: \"deml.app / dashboard\",\n    gauges: [\n      { label: \"Health\", value: \"96\" },\n      { label: \"Score\", value: \"88\", primary: true },\n      { label: \"SLA\", value: \"99.7%\" },\n    ],\n    stats: [\n      { label: \"Open\", value: \"3\" },\n      { label: \"Visitors\", value: \"1.1K\" },\n      { label: \"Forecast\", value: \"82%\" },\n    ],\n    bars: [50, 64, 52, 78, 69, 84, 71, 60],\n    chartMode: \"bars\",\n  },\n  status: {\n    title: \"deml.app / platform-status\",\n    gauges: [\n      { label: \"API\", value: \"OK\" },\n      { label: \"Ingest\", value: \"OK\", primary: true },\n      { label: \"ML\", value: \"OK\" },\n    ],\n    stats: [\n      { label: \"SLA\", value: \"99.99%\" },\n      { label: \"Latency\", value: \"158ms\" },\n      { label: \"Services\", value: \"12\" },\n    ],\n    bars: [80, 82, 79, 88, 90, 86, 91, 89],\n    chartMode: \"line\",\n  },\n  explore: {\n    title: \"deml.app / explore\",\n    gauges: [\n      { label: \"Public\", value: \"48\" },\n      { label: \"Verified\", value: \"19\", primary: true },\n      { label: \"Live\", value: \"31\" },\n    ],\n    stats: [\n      { label: \"Pages\", value: \"48\" },\n      { label: \"Pro\", value: \"19\" },\n      { label: \"Views\", value: \"6.3K\" },\n    ],\n    bars: [42, 58, 49, 66, 54, 73, 61, 57],\n    chartMode: \"bars\",\n  },\n};\n\n/**\n * viking-page-mockup — angled product window mock for heroes and empty states.\n * Overflows slightly so the 3D transform never clips on the trailing edge.\n */\n@Component({\n  selector: \"viking-page-mockup\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-page-mockup hero-mockup\",\n    \"[attr.aria-hidden]\": \"decorative() ? 'true' : null\",\n    \"[attr.aria-label]\": \"decorative() ? null : resolvedTitle()\",\n  },\n  template: `\n    <div class=\"viking-page-mockup-window mockup-window\">\n      <div class=\"viking-page-mockup-titlebar mockup-titlebar\">\n        <span class=\"viking-page-mockup-dot mockup-dot\"></span>\n        <span class=\"viking-page-mockup-dot mockup-dot\"></span>\n        <span class=\"viking-page-mockup-dot mockup-dot\"></span>\n        <span class=\"viking-page-mockup-title mockup-title\">{{\n          resolvedTitle()\n        }}</span>\n      </div>\n      <div class=\"viking-page-mockup-body mockup-body\">\n        <div\n          class=\"viking-page-mockup-sidebar mockup-sidebar\"\n          aria-hidden=\"true\"\n        >\n          <span\n            class=\"viking-page-mockup-nav-item mockup-nav-item active\"\n          ></span>\n          <span class=\"viking-page-mockup-nav-item mockup-nav-item\"></span>\n          <span class=\"viking-page-mockup-nav-item mockup-nav-item\"></span>\n        </div>\n        <div class=\"viking-page-mockup-main mockup-main\">\n          <div class=\"viking-page-mockup-gauges mockup-gauges\">\n            @for (gauge of resolvedGauges(); track gauge.label) {\n              <div\n                class=\"viking-page-mockup-gauge mockup-gauge\"\n                [class.primary]=\"!!gauge.primary\"\n              >\n                <span class=\"viking-page-mockup-gauge-label gauge-label\">{{\n                  gauge.label\n                }}</span>\n                <span class=\"viking-page-mockup-gauge-val gauge-val\">{{\n                  gauge.value\n                }}</span>\n              </div>\n            }\n          </div>\n          <div\n            class=\"viking-page-mockup-chart mockup-chart\"\n            [class.is-line]=\"resolvedChartMode() === 'line'\"\n            aria-hidden=\"true\"\n          >\n            @for (height of resolvedBars(); track $index) {\n              <div\n                class=\"viking-page-mockup-bar chart-bar\"\n                [attr.data-height]=\"height\"\n              ></div>\n            }\n          </div>\n          <div class=\"viking-page-mockup-stats mockup-stats-row\">\n            @for (stat of resolvedStats(); track stat.label) {\n              <div class=\"viking-page-mockup-stat mockup-stat\">\n                <span>{{ stat.label }}</span>\n                <strong>{{ stat.value }}</strong>\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n      }\n    `,\n  ],\n})\nexport class VikingPageMockup {\n  readonly variant = input<VikingPageMockupVariant>(\"security-ops\");\n  readonly title = input<string>(\"\");\n  readonly gauges = input<VikingPageMockupGauge[] | null>(null);\n  readonly stats = input<VikingPageMockupStat[] | null>(null);\n  readonly bars = input<number[] | null>(null);\n  readonly chartMode = input<\"bars\" | \"line\" | null>(null);\n  readonly decorative = input<boolean>(true);\n\n  private readonly defaults = computed(\n    () => VARIANT_DEFAULTS[this.variant()] ?? VARIANT_DEFAULTS[\"security-ops\"],\n  );\n\n  protected readonly resolvedTitle = computed(\n    () => this.title() || this.defaults().title,\n  );\n  protected readonly resolvedGauges = computed(\n    () => this.gauges() ?? this.defaults().gauges,\n  );\n  protected readonly resolvedStats = computed(\n    () => this.stats() ?? this.defaults().stats,\n  );\n  protected readonly resolvedBars = computed(\n    () => this.bars() ?? this.defaults().bars,\n  );\n  protected readonly resolvedChartMode = computed(\n    () => this.chartMode() ?? this.defaults().chartMode,\n  );\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n  VIKING_SERIES_DEFAULT,\n  VIKING_SERIES_PRESETS,\n} from \"../../tokens/series-presets\";\n\n/**\n * viking-color-picker — swatch presets + custom color input\n *. ControlValueAccessor-compatible.\n * Default presets are the THEME.md palette.\n */\n@Component({\n  selector: \"viking-color-picker\",\n  imports: [VikingIcon],\n  providers: [provideVikingCva(VikingColorPicker)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"viking-color-picker\"\n      role=\"group\"\n      [attr.aria-label]=\"label() || 'Color picker'\"\n    >\n      @for (preset of presets(); track preset) {\n        <button\n          type=\"button\"\n          class=\"viking-color-swatch\"\n          [class.viking-selected]=\"preset === value()\"\n          [style.background]=\"preset\"\n          [attr.aria-label]=\"'Color ' + preset\"\n          [attr.aria-pressed]=\"preset === value()\"\n          (click)=\"pick(preset)\"\n        >\n          @if (preset === value()) {\n            <viking-icon name=\"check\" [size]=\"16\" />\n          }\n        </button>\n      }\n      <label class=\"viking-color-custom\" [style.background]=\"value()\">\n        <input\n          type=\"color\"\n          [value]=\"value()\"\n          [disabled]=\"disabled() || formDisabled()\"\n          aria-label=\"Custom color\"\n          (input)=\"onInput($event)\"\n        />\n        <viking-icon name=\"pencil\" [size]=\"16\" />\n      </label>\n      <code class=\"viking-color-value\">{{ value() }}</code>\n    </div>\n  `,\n  styles: [\n    `\n      .viking-color-picker {\n        display: flex;\n        align-items: center;\n        flex-wrap: wrap;\n        gap: var(--viking-space-1);\n        font-family: var(--viking-font-family);\n      }\n      .viking-color-swatch,\n      .viking-color-custom {\n        position: relative;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-space-4);\n        height: var(--viking-space-4);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius-sm);\n        cursor: pointer;\n        color: var(--viking-accent-content);\n        transition: var(--viking-transition-interactive);\n        padding: 0;\n        box-shadow: var(--viking-shadow-xs);\n      }\n      .viking-color-swatch:hover,\n      .viking-color-custom:hover {\n        transform: scale(1.08);\n        border-color: var(--viking-accent-strong);\n        box-shadow: var(--viking-shadow-sm);\n        z-index: 1;\n      }\n      .viking-selected {\n        border-color: var(--viking-text);\n        box-shadow:\n          var(--viking-shadow-sm),\n          0 0 0 2px color-mix(in srgb, var(--viking-accent) 35%, transparent),\n          inset 0 1px 0 rgba(255, 255, 255, 0.12);\n        transform: scale(1.04);\n      }\n      .viking-color-swatch:focus-visible,\n      .viking-color-custom:focus-within {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      /* The native input fills the swatch so clicks and focus land on it. */\n      .viking-color-custom input {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        margin: 0;\n        opacity: 0;\n        cursor: pointer;\n      }\n      .viking-color-value {\n        font-family: var(--viking-font-family-mono);\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text-muted);\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border-subtle);\n        border-radius: var(--viking-radius-xs);\n        padding: var(--viking-space-0-5) var(--viking-space-1);\n        font-variant-numeric: tabular-nums;\n        letter-spacing: 0.02em;\n        text-transform: uppercase;\n      }\n    `,\n  ],\n})\nexport class VikingColorPicker extends VikingControl<string> {\n  readonly value = model<string>(VIKING_SERIES_DEFAULT);\n  readonly label = input<string>(\"\");\n  readonly disabled = input<boolean>(false);\n  /** Preset swatches — THEME.md Series color palette (premium charcoal / teal / crimson). */\n  readonly presets = input<string[]>([...VIKING_SERIES_PRESETS]);\n\n  writeValue(value: string): void {\n    this.value.set(value || VIKING_SERIES_DEFAULT);\n  }\n\n  protected pick = (color: string): void => {\n    this.value.set(color);\n    this.onChange(color);\n    this.onTouched();\n  };\n\n  protected onInput = (event: Event): void => {\n    this.pick((event.target as HTMLInputElement).value);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nexport interface VikingCollectionPreference {\n  id: string;\n  label: string;\n  description?: string;\n  sticky?: boolean;\n}\n\nexport type VikingCollectionPreferenceSection = \"table\" | \"density\" | \"sticky\";\n\n/**\n * viking-collection-preferences — table preferences dialog for column selection.\n * Based on Cloudscape Collection Preferences pattern, adapted for Viking-UI.\n * Used for configuring table views in analytics and dashboards.\n */\n@Component({\n  selector: \"viking-collection-preferences\",\n  standalone: true,\n  imports: [FormsModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"viking-collection-preferences\">\n      <header class=\"viking-collection-preferences__header\">\n        <h2 class=\"viking-collection-preferences__title\">Preferences</h2>\n      </header>\n      <div class=\"viking-collection-preferences__body\">\n        @for (section of preferenceSections(); track section) {\n          <section class=\"viking-collection-preferences__section\">\n            <h3 class=\"viking-collection-preferences__section-title\">\n              {{ sectionLabels[section] }}\n            </h3>\n            <div class=\"viking-collection-preferences__options\">\n              @for (option of getSectionOptions(section); track option.id) {\n                <label class=\"viking-collection-preferences__option\">\n                  <input\n                    type=\"checkbox\"\n                    class=\"viking-collection-preferences__checkbox\"\n                    [checked]=\"isOptionSelected(option.id)\"\n                    (change)=\"toggleOption(option.id, $event)\"\n                  />\n                  <span class=\"viking-collection-preferences__label\">{{\n                    option.label\n                  }}</span>\n                  @if (option.description) {\n                    <span class=\"viking-collection-preferences__description\">{{\n                      option.description\n                    }}</span>\n                  }\n                </label>\n              }\n            </div>\n          </section>\n        }\n      </div>\n      <footer class=\"viking-collection-preferences__footer\">\n        <button\n          type=\"button\"\n          class=\"viking-collection-preferences__button viking-collection-preferences__button--secondary\"\n          (click)=\"cancel.emit()\"\n        >\n          Cancel\n        </button>\n        <button\n          type=\"button\"\n          class=\"viking-collection-preferences__button viking-collection-preferences__button--primary\"\n          (click)=\"apply.emit(selected())\"\n        >\n          Apply\n        </button>\n      </footer>\n    </div>\n  `,\n  styles: [\n    `\n      :host(.viking-collection-preferences-wrapper) {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      .viking-collection-preferences {\n        display: flex;\n        flex-direction: column;\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        min-width: 280px;\n      }\n      .viking-collection-preferences__header {\n        padding: var(--viking-space-2);\n        border-bottom: 1px solid var(--viking-border);\n      }\n      .viking-collection-preferences__title {\n        margin: 0;\n        font-size: var(--viking-font-size-ui);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        color: var(--viking-text);\n      }\n      .viking-collection-preferences__body {\n        flex: 1;\n        padding: var(--viking-space-2);\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n      }\n      .viking-collection-preferences__section {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n      }\n      .viking-collection-preferences__section-title {\n        margin: 0;\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-wide);\n        text-transform: uppercase;\n        color: var(--viking-text-muted);\n      }\n      .viking-collection-preferences__options {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n      }\n      .viking-collection-preferences__option {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-0-5);\n        padding: var(--viking-space-1);\n        cursor: pointer;\n        border-radius: var(--viking-radius-sm);\n        transition: var(--viking-transition);\n      }\n      .viking-collection-preferences__option:hover {\n        background: var(--viking-accent-soft);\n      }\n      .viking-collection-preferences__option:focus-within {\n        background: var(--viking-accent-soft);\n      }\n      .viking-collection-preferences__checkbox {\n        width: 16px;\n        height: 16px;\n        accent-color: var(--viking-accent);\n        cursor: pointer;\n      }\n      .viking-collection-preferences__label {\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n      }\n      .viking-collection-preferences__description {\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text-muted);\n      }\n      .viking-collection-preferences__footer {\n        display: flex;\n        justify-content: flex-end;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-2);\n        border-top: 1px solid var(--viking-border);\n      }\n      .viking-collection-preferences__button {\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-medium);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        border-radius: var(--viking-radius-sm);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-collection-preferences__button--primary {\n        background: var(--viking-accent);\n        color: var(--viking-on-accent);\n        border: 1px solid transparent;\n      }\n      .viking-collection-preferences__button--primary:hover {\n        background: var(--viking-accent-hover);\n      }\n      .viking-collection-preferences__button--secondary {\n        background: transparent;\n        color: var(--viking-text-muted);\n        border: 1px solid var(--viking-border);\n      }\n      .viking-collection-preferences__button--secondary:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n    `,\n  ],\n})\nexport class VikingCollectionPreferences {\n  readonly preferences = input<VikingCollectionPreference[]>([]);\n  readonly selected = model<string[]>([]);\n\n  readonly apply = output<string[]>();\n  readonly cancel = output<void>();\n\n  protected readonly sectionLabels: Record<\n    VikingCollectionPreferenceSection,\n    string\n  > = {\n    table: \"Table\",\n    density: \"Density\",\n    sticky: \"Sticky\",\n  };\n\n  protected readonly preferenceSections = computed(\n    () =>\n      Object.keys(this.sectionLabels) as VikingCollectionPreferenceSection[],\n  );\n\n  protected isOptionSelected(id: string): boolean {\n    return this.selected().includes(id);\n  }\n\n  protected toggleOption(id: string, event: Event): void {\n    const input = event.target as HTMLInputElement;\n    this.selected.update((items) =>\n      input.checked ? [...items, id] : items.filter((item) => item !== id),\n    );\n  }\n\n  protected getSectionOptions(\n    section: VikingCollectionPreferenceSection,\n  ): VikingCollectionPreference[] {\n    return this.preferences().filter((opt) =>\n      section === \"table\"\n        ? !opt.sticky && !opt.description?.includes(\"density\")\n        : section === \"density\"\n          ? opt.description?.includes(\"density\")\n          : opt.sticky,\n    );\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  computed,\n  effect,\n  input,\n  model,\n  output,\n  signal,\n  untracked,\n  viewChild,\n} from \"@angular/core\";\nimport { captureReturnFocus, restoreFocus, trapTabKey } from \"../../core/focus\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingCommandItem } from \"../../core/types\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-command — command palette.\n * Toggle with the `open` model; emits `executed` when an item is chosen.\n */\n@Component({\n  selector: \"viking-command\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"(keydown.escape)\": \"dismiss()\" },\n  template: `\n    @if (open()) {\n      <button\n        type=\"button\"\n        class=\"viking-command-backdrop\"\n        tabindex=\"-1\"\n        aria-label=\"Close command palette\"\n        (click)=\"dismiss()\"\n      ></button>\n      <div\n        #dialogRoot\n        class=\"viking-command\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        aria-label=\"Command palette\"\n        tabindex=\"-1\"\n        (keydown)=\"onDialogKeydown($event)\"\n      >\n        <div class=\"viking-command-search\">\n          <viking-icon name=\"search\" [size]=\"20\" aria-hidden=\"true\" />\n          <input\n            #queryInput\n            type=\"text\"\n            role=\"combobox\"\n            [placeholder]=\"placeholder()\"\n            [value]=\"query()\"\n            aria-label=\"Search commands\"\n            aria-autocomplete=\"list\"\n            aria-haspopup=\"listbox\"\n            [attr.aria-expanded]=\"true\"\n            [attr.aria-controls]=\"listboxId\"\n            [attr.aria-activedescendant]=\"\n              activeId() ? optionId(activeId()!) : null\n            \"\n            (input)=\"onQuery($event)\"\n            (keydown)=\"onKeydown($event)\"\n          />\n          <button\n            type=\"button\"\n            class=\"viking-command-close\"\n            aria-label=\"Close command palette\"\n            (click)=\"dismiss()\"\n          >\n            <viking-icon name=\"x\" [size]=\"18\" aria-hidden=\"true\" />\n          </button>\n        </div>\n        <div\n          class=\"viking-command-list\"\n          role=\"listbox\"\n          [id]=\"listboxId\"\n          aria-label=\"Commands\"\n        >\n          @for (group of groups(); track group.name) {\n            <p class=\"viking-command-group\" role=\"presentation\">\n              {{ group.name }}\n            </p>\n            @for (item of group.items; track item.id) {\n              <button\n                type=\"button\"\n                role=\"option\"\n                class=\"viking-command-item\"\n                [id]=\"optionId(item.id)\"\n                [class.viking-active]=\"item.id === activeId()\"\n                [attr.aria-selected]=\"item.id === activeId()\"\n                (click)=\"run(item)\"\n                (mouseenter)=\"activeId.set(item.id)\"\n              >\n                @if (item.icon) {\n                  <viking-icon [name]=\"item.icon\" [size]=\"18\" />\n                }\n                <span class=\"viking-command-label\">{{ item.label }}</span>\n                @if (item.kbd) {\n                  <kbd>{{ item.kbd }}</kbd>\n                }\n              </button>\n            }\n          }\n          @if (filtered().length === 0) {\n            <p class=\"viking-command-empty\">No results for “{{ query() }}”</p>\n          }\n        </div>\n      </div>\n    }\n  `,\n  styles: [\n    `\n      .viking-command-backdrop {\n        position: fixed;\n        inset: 0;\n        border: none;\n        background: var(--viking-overlay-backdrop, rgba(49, 57, 60, 0.55));\n        backdrop-filter: blur(4px);\n        z-index: var(--viking-z-overlay);\n        cursor: default;\n      }\n      .viking-command {\n        position: fixed;\n        top: 12vh;\n        left: 50%;\n        transform: translateX(-50%);\n        width: min(576px, calc(100vw - var(--viking-space-4)));\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-md);\n        z-index: calc(var(--viking-z-overlay) + 1);\n        font-family: var(--viking-font-family);\n        overflow: hidden;\n      }\n      .viking-command-search {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-2);\n        border-bottom: 1px solid var(--viking-border);\n        color: var(--viking-text-muted);\n        transition: var(--viking-transition-colors);\n      }\n      .viking-command-search:focus-within {\n        border-bottom-color: var(--viking-accent);\n        box-shadow: inset 0 -2px 0 var(--viking-accent-soft);\n      }\n      .viking-command-search input {\n        flex: 1;\n        min-width: 0;\n        border: none;\n        outline: none;\n        background: transparent;\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n      }\n      .viking-command-close {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n        min-width: var(--viking-touch-target-min, 44px);\n        min-height: var(--viking-touch-target-min, 44px);\n        border: 1px solid transparent;\n        border-radius: var(--viking-radius);\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: 0;\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-command-close:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n        border-color: var(--viking-border-subtle);\n      }\n      .viking-command-close:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      kbd {\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border);\n        border-radius: calc(var(--viking-radius) / 2);\n        padding: 0 var(--viking-space-1);\n        line-height: 1.4;\n      }\n      .viking-command-list {\n        max-height: 342px;\n        overflow: auto;\n        padding: var(--viking-space-1);\n      }\n      .viking-command-group {\n        margin: var(--viking-space-1) var(--viking-space-1)\n          var(--viking-space-0-5);\n        font-size: var(--viking-font-size);\n        font-weight: 600;\n        text-transform: uppercase;\n        letter-spacing: 0.06em;\n        color: var(--viking-text-muted);\n      }\n      .viking-command-item {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        width: 100%;\n        min-height: var(--viking-control-height-sm);\n        border: none;\n        background: transparent;\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        border-radius: var(--viking-radius-sm);\n        cursor: pointer;\n        text-align: left;\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-command-item:hover:not(.viking-active),\n      .viking-command-item.viking-active {\n        background: var(--viking-accent-soft);\n      }\n      .viking-command-item:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-command-item:active {\n        transform: scale(var(--viking-state-active-scale));\n      }\n      .viking-command-label {\n        flex: 1;\n      }\n      .viking-command-empty {\n        margin: 0;\n        padding: var(--viking-space-2);\n        color: var(--viking-text-muted);\n        font-size: var(--viking-font-size);\n        text-align: center;\n      }\n    `,\n  ],\n})\nexport class VikingCommand {\n  readonly items = input.required<VikingCommandItem[]>();\n  readonly open = model<boolean>(false);\n  readonly placeholder = input<string>(\"Type a command or search…\");\n\n  readonly executed = output<VikingCommandItem>();\n\n  private readonly queryInput =\n    viewChild<ElementRef<HTMLInputElement>>(\"queryInput\");\n  private readonly dialogRoot =\n    viewChild<ElementRef<HTMLElement>>(\"dialogRoot\");\n  private readonly commandUid = vikingUid(\"viking-command\");\n  protected readonly listboxId = `${this.commandUid}-listbox`;\n  private returnFocus: HTMLElement | null = null;\n\n  protected readonly query = signal(\"\");\n  protected readonly activeId = signal<string>(\"\");\n\n  protected optionId = (id: string): string =>\n    `${this.commandUid}-option-${id}`;\n\n  constructor() {\n    // Reset + focus only on closed → open edge (not on items() churn while open)\n    let wasOpen = false;\n    effect(() => {\n      const isOpen = this.open();\n      if (isOpen && !wasOpen) {\n        this.returnFocus = captureReturnFocus();\n        const firstId = untracked(() => this.items()[0]?.id ?? \"\");\n        this.query.set(\"\");\n        this.activeId.set(firstId);\n        queueMicrotask(() => this.queryInput()?.nativeElement.focus());\n      } else if (!isOpen && wasOpen) {\n        restoreFocus(this.returnFocus);\n        this.returnFocus = null;\n      }\n      wasOpen = isOpen;\n    });\n  }\n\n  protected dismiss = (): void => {\n    this.open.set(false);\n  };\n\n  protected onDialogKeydown = (event: KeyboardEvent): void => {\n    const root = this.dialogRoot()?.nativeElement;\n    if (root) trapTabKey(event, root);\n  };\n\n  protected readonly filtered = computed(() => {\n    const query = this.query().toLowerCase().trim();\n    if (!query) {\n      return this.items();\n    }\n    return this.items().filter((item) =>\n      item.label.toLowerCase().includes(query),\n    );\n  });\n\n  protected readonly groups = computed(() => {\n    const map = new Map<string, VikingCommandItem[]>();\n    for (const item of this.filtered()) {\n      const group = item.group ?? \"Commands\";\n      map.set(group, [...(map.get(group) ?? []), item]);\n    }\n    return [...map.entries()].map(([name, items]) => ({ name, items }));\n  });\n\n  protected onQuery = (event: Event): void => {\n    this.query.set((event.target as HTMLInputElement).value);\n    this.activeId.set(this.filtered()[0]?.id ?? \"\");\n  };\n\n  protected run = (item: VikingCommandItem): void => {\n    this.executed.emit(item);\n    this.dismiss();\n    this.query.set(\"\");\n  };\n\n  protected onKeydown = (event: KeyboardEvent): void => {\n    const items = this.filtered();\n    const index = items.findIndex((item) => item.id === this.activeId());\n    if (event.key === \"ArrowDown\") {\n      event.preventDefault();\n      this.activeId.set(items[Math.min(items.length - 1, index + 1)]?.id ?? \"\");\n    } else if (event.key === \"ArrowUp\") {\n      event.preventDefault();\n      this.activeId.set(items[Math.max(0, index - 1)]?.id ?? \"\");\n    } else if (event.key === \"Enter\") {\n      const active =\n        items.find((item) => item.id === this.activeId()) ?? items[0];\n      if (active) {\n        event.preventDefault();\n        this.run(active);\n      }\n    }\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-composer — message composer with attachments and send action\n *.\n */\n@Component({\n  selector: \"viking-composer\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"viking-composer\">\n      <textarea\n        rows=\"1\"\n        [placeholder]=\"placeholder()\"\n        [value]=\"value()\"\n        [disabled]=\"disabled()\"\n        [attr.aria-label]=\"placeholder() || 'Message'\"\n        (input)=\"onInput($event)\"\n        (keydown)=\"onKeydown($event)\"\n      ></textarea>\n      <div class=\"viking-composer-actions\">\n        <div class=\"viking-composer-tools\">\n          @if (allowAttachments()) {\n            <button\n              type=\"button\"\n              class=\"viking-composer-tool\"\n              aria-label=\"Attach file\"\n              (click)=\"attach.emit()\"\n            >\n              <viking-icon name=\"paperclip\" [size]=\"20\" />\n            </button>\n          }\n          <ng-content />\n        </div>\n        <button\n          type=\"button\"\n          class=\"viking-composer-send\"\n          aria-label=\"Send message\"\n          [disabled]=\"disabled() || !value().trim()\"\n          (click)=\"send()\"\n        >\n          <viking-icon name=\"send\" [size]=\"18\" />\n          <span>Send</span>\n        </button>\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      .viking-composer {\n        display: flex;\n        flex-direction: column;\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-sm);\n        transition: var(--viking-transition);\n        font-family: var(--viking-font-family);\n      }\n      .viking-composer:focus-within {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      textarea {\n        border: none;\n        outline: none;\n        resize: none;\n        background: transparent;\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        line-height: 1.55;\n        padding: var(--viking-space-2);\n        min-height: var(--viking-space-5);\n      }\n      textarea::placeholder {\n        color: var(--viking-text-muted);\n      }\n      .viking-composer-actions {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-1) var(--viking-space-2)\n          var(--viking-space-1) var(--viking-space-1);\n        border-top: 1px solid var(--viking-border);\n      }\n      .viking-composer-tools {\n        display: flex;\n        align-items: center;\n        gap: calc(var(--viking-space-1) / 2);\n      }\n      .viking-composer-tool {\n        display: inline-flex;\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: var(--viking-space-1);\n        border-radius: calc(var(--viking-radius) / 1.5);\n        transition: var(--viking-transition);\n      }\n      .viking-composer-tool:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-composer-tool:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: 1px;\n      }\n      .viking-composer-send {\n        display: inline-flex;\n        align-items: center;\n        gap: calc(var(--viking-space-1) / 1.5);\n        border: 1px solid var(--viking-accent);\n        background: var(--viking-accent);\n        color: var(--viking-accent-content);\n        font-family: var(--viking-font-family);\n        /* >= 18.67px bold qualifies as WCAG large text (3:1 on accent fill). */\n        font-size: calc(var(--viking-font-size) * 1.05);\n        font-weight: 700;\n        padding: calc(var(--viking-space-1) / 1.5) var(--viking-space-2);\n        border-radius: var(--viking-radius);\n        cursor: pointer;\n        transition: var(--viking-transition);\n      }\n      .viking-composer-send:hover:not(:disabled) {\n        background: var(--viking-accent-strong);\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-composer-send:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-composer-send:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n    `,\n  ],\n})\nexport class VikingComposer {\n  readonly value = model<string>(\"\");\n  readonly placeholder = input<string>(\"Write a message…\");\n  readonly disabled = input<boolean>(false);\n  readonly allowAttachments = input<boolean>(true);\n\n  readonly sent = output<string>();\n  readonly attach = output<void>();\n\n  protected onInput = (event: Event): void => {\n    const el = event.target as HTMLTextAreaElement;\n    this.value.set(el.value);\n    el.style.height = \"auto\";\n    el.style.height = `${el.scrollHeight}px`;\n  };\n\n  protected onKeydown = (event: KeyboardEvent): void => {\n    if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey)) {\n      event.preventDefault();\n      this.send();\n    }\n  };\n\n  protected send = (): void => {\n    const message = this.value().trim();\n    if (message) {\n      this.sent.emit(message);\n      this.value.set(\"\");\n    }\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  signal,\n} from \"@angular/core\";\n\n/**\n * viking-context — right-click context menu.\n * Wrap the target content and project menu content with the `vikingMenu` attribute\n * (typically viking-menu-item elements).\n */\n@Component({\n  selector: \"viking-context\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"(contextmenu)\": \"onContextMenu($event)\",\n    \"(document:click)\": \"closed()\",\n    \"(keydown.escape)\": \"closed()\",\n  },\n  template: `\n    <ng-content />\n    @if (open()) {\n      <div\n        class=\"viking-context-menu\"\n        role=\"menu\"\n        [style.left.px]=\"position().x\"\n        [style.top.px]=\"position().y\"\n      >\n        <ng-content select=\"[vikingMenu]\" />\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        position: relative;\n      }\n      .viking-context-menu {\n        position: absolute;\n        min-width: 198px;\n        padding: var(--viking-space-1);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-md);\n        z-index: var(--viking-z-overlay);\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-0-5);\n      }\n    `,\n  ],\n})\nexport class VikingContext {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  protected readonly open = signal(false);\n  protected readonly position = signal({ x: 0, y: 0 });\n\n  protected onContextMenu = (event: MouseEvent): void => {\n    event.preventDefault();\n    const rect = this.host.nativeElement.getBoundingClientRect();\n    this.position.set({\n      x: event.clientX - rect.left,\n      y: event.clientY - rect.top,\n    });\n    this.open.set(true);\n  };\n\n  protected closed = (): void => {\n    this.open.set(false);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\nexport type VikingContentLayoutType =\n  | \"dashboard\"\n  | \"resource\"\n  | \"collection\"\n  | \"form\"\n  | \"wizard\"\n  | \"documentation\";\nexport type VikingContentLayoutWidth = \"readable\" | \"default\" | \"wide\" | \"full\";\nexport type VikingContentLayoutDensity = \"compact\" | \"default\" | \"loose\";\n\n/** Route-owned page interior with predictable breadcrumb, notification, header, and body regions. */\n@Component({\n  selector: \"viking-content-layout\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `\n    <div class=\"viking-content-layout__inner\">\n      <div class=\"viking-content-layout__breadcrumbs\">\n        <ng-content select=\"[vikingContentBreadcrumbs]\" />\n      </div>\n      <div class=\"viking-content-layout__notifications\">\n        <ng-content select=\"[vikingContentNotifications]\" />\n      </div>\n      <header class=\"viking-content-layout__header\">\n        <div class=\"viking-content-layout__heading\">\n          <ng-content select=\"[vikingContentHeader]\" />\n        </div>\n        <div class=\"viking-content-layout__actions\">\n          <ng-content select=\"[vikingContentActions]\" />\n        </div>\n      </header>\n      <main class=\"viking-content-layout__body\"><ng-content /></main>\n      <footer class=\"viking-content-layout__footer\">\n        <ng-content select=\"[vikingContentFooter]\" />\n      </footer>\n    </div>\n  `,\n})\nexport class VikingContentLayout {\n  readonly type = input<VikingContentLayoutType>(\"resource\");\n  readonly width = input<VikingContentLayoutWidth>(\"default\");\n  readonly density = input<VikingContentLayoutDensity>(\"default\");\n  readonly headerVariant = input<\"default\" | \"high-contrast\">(\"default\");\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-content-layout\",\n      `viking-content-layout--${this.type()}`,\n      `viking-content-layout--${this.width()}`,\n      `viking-content-layout--${this.density()}`,\n      `viking-content-layout--header-${this.headerVariant()}`,\n    ].join(\" \"),\n  );\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport { VikingIconComponent } from \"../icon/icon\";\n\nexport type VikingContainerVariant = \"surface\" | \"inset\" | \"transparent\";\nexport type VikingContainerPadding = \"compact\" | \"default\" | \"none\";\nexport type VikingContainerWidth = \"readable\" | \"default\" | \"wide\" | \"full\";\n\n/** Cloudscape-style content container with one deterministic anatomy. */\n@Component({\n  selector: \"viking-container\",\n  standalone: true,\n  imports: [VikingIconComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `\n    @if (heading() || description() || icon()) {\n      <header class=\"viking-container__header\">\n        @if (icon()) {\n          <viking-icon\n            class=\"viking-container__icon\"\n            [name]=\"icon()!\"\n            [size]=\"20\"\n            [ariaHidden]=\"true\"\n          />\n        }\n        <div class=\"viking-container__heading-group\">\n          @if (heading()) {\n            <h2 class=\"viking-container__title\">{{ heading() }}</h2>\n          }\n          @if (description()) {\n            <p class=\"viking-container__description\">{{ description() }}</p>\n          }\n        </div>\n        <div class=\"viking-container__actions\">\n          <ng-content select=\"[vikingContainerActions]\" />\n        </div>\n      </header>\n    }\n    <div class=\"viking-container__body\"><ng-content /></div>\n    <ng-content select=\"[vikingContainerFooter]\" />\n  `,\n})\nexport class VikingContainer {\n  readonly heading = input<string>(\"\");\n  readonly description = input<string | null>(null);\n  readonly icon = input<string | null>(null);\n  readonly variant = input<VikingContainerVariant>(\"surface\");\n  readonly padding = input<VikingContainerPadding>(\"default\");\n  readonly width = input<VikingContainerWidth>(\"full\");\n  readonly centered = input<boolean>(true);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-container\",\n      `viking-container--${this.variant()}`,\n      `viking-container--padding-${this.padding()}`,\n      `viking-container--width-${this.width()}`,\n      this.centered() ? \"viking-container--centered\" : \"\",\n    ].join(\" \"),\n  );\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  input,\n  model,\n  signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingCalendar } from \"../calendar/calendar\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-date-picker — input + calendar popover.\n * Value is an ISO date string (YYYY-MM-DD). ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-date-picker\",\n  imports: [VikingCalendar, VikingIcon],\n  providers: [provideVikingCva(VikingDatePicker)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"(document:click)\": \"onDocumentClick($event)\",\n    \"(keydown.escape)\": \"open.set(false)\",\n  },\n  template: `\n    <button\n      type=\"button\"\n      class=\"viking-control viking-date-trigger\"\n      [disabled]=\"disabled() || formDisabled()\"\n      [attr.aria-expanded]=\"open()\"\n      [attr.aria-label]=\"label() || placeholder()\"\n      aria-haspopup=\"dialog\"\n      (click)=\"open.set(!open())\"\n    >\n      <viking-icon name=\"calendar\" [size]=\"20\" />\n      <span\n        class=\"viking-date-value\"\n        [class.viking-date-placeholder]=\"!value()\"\n      >\n        {{ value() || placeholder() }}\n      </span>\n      <viking-icon\n        [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n        [size]=\"18\"\n      />\n    </button>\n    @if (open()) {\n      <div class=\"viking-date-panel\" role=\"dialog\" aria-label=\"Choose date\">\n        <viking-calendar [value]=\"value()\" (valueChange)=\"pick($event)\" />\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: block;\n      }\n      .viking-date-trigger {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        width: 100%;\n        min-height: var(--viking-control-height);\n        padding: 0 var(--viking-space-2);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-sm);\n        color: var(--viking-text-muted);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        cursor: pointer;\n        transition: var(--viking-transition);\n        text-align: left;\n      }\n      .viking-date-trigger:hover:not(:disabled) {\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-date-trigger:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-date-trigger:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-date-value {\n        flex: 1;\n        color: var(--viking-text);\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-date-placeholder {\n        color: var(--viking-text-muted);\n      }\n      .viking-date-panel {\n        position: absolute;\n        top: calc(100% + var(--viking-space-1));\n        left: 0;\n        z-index: var(--viking-z-overlay);\n        box-shadow: var(--viking-shadow-md);\n        border-radius: var(--viking-radius);\n      }\n    `,\n  ],\n})\nexport class VikingDatePicker extends VikingControl<string | null> {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  readonly value = model<string | null>(null);\n  readonly placeholder = input<string>(\"Select date\");\n  readonly label = input<string>(\"\");\n  readonly disabled = input<boolean>(false);\n\n  protected readonly open = signal(false);\n\n  writeValue(value: string | null): void {\n    this.value.set(value);\n  }\n\n  protected pick = (iso: string | null): void => {\n    this.value.set(iso);\n    this.onChange(iso);\n    this.onTouched();\n    this.open.set(false);\n  };\n\n  protected onDocumentClick = (event: Event): void => {\n    if (\n      this.open() &&\n      !this.host.nativeElement.contains(event.target as Node)\n    ) {\n      this.open.set(false);\n    }\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  effect,\n  inject,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport {\n  captureReturnFocus,\n  focusFirst,\n  getFocusableElements,\n  nextRovingIndex,\n  restoreFocus,\n} from \"../../core/focus\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\nlet dropdownSeq = 0;\n\n/**\n * viking-dropdown — expandable menu.\n * Project the trigger with `vikingTrigger`; fill the menu with viking-menu-item.\n */\n@Component({\n  selector: \"viking-dropdown\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"(click)\": \"onHostClick($event)\",\n    \"(document:click)\": \"onDocumentClick($event)\",\n    \"(keydown)\": \"onHostKeydown($event)\",\n  },\n  template: `\n    <span class=\"viking-dropdown-trigger\">\n      <ng-content select=\"[vikingTrigger]\" />\n    </span>\n    @if (open()) {\n      <div\n        class=\"viking-dropdown-menu\"\n        [id]=\"menuId\"\n        [class.viking-dropdown-end]=\"align() === 'end'\"\n        role=\"menu\"\n        (keydown)=\"onMenuKeydown($event)\"\n      >\n        <ng-content />\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: inline-block;\n      }\n      .viking-dropdown-trigger {\n        display: inline-flex;\n      }\n      .viking-dropdown-menu {\n        position: absolute;\n        top: calc(100% + var(--viking-space-1));\n        left: 0;\n        min-width: 216px;\n        padding: var(--viking-space-1);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-md);\n        z-index: var(--viking-z-overlay);\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-0-5);\n      }\n      .viking-dropdown-end {\n        left: auto;\n        right: 0;\n      }\n    `,\n  ],\n})\nexport class VikingDropdown {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected readonly menuId = `viking-dropdown-menu-${++dropdownSeq}`;\n  private returnFocus: HTMLElement | null = null;\n\n  readonly open = model<boolean>(false);\n  readonly align = input<\"start\" | \"end\">(\"start\");\n\n  constructor() {\n    let wasOpen = false;\n    effect(() => {\n      const isOpen = this.open();\n      queueMicrotask(() => {\n        this.syncTriggerAria(isOpen);\n        if (isOpen && !wasOpen) {\n          this.returnFocus = captureReturnFocus(\n            resolveDisclosureControl(\n              this.host.nativeElement,\n              \".viking-dropdown-trigger\",\n            ),\n          );\n          const menu = this.host.nativeElement.querySelector<HTMLElement>(\n            `#${this.menuId}`,\n          );\n          if (menu) focusFirst(menu);\n        } else if (!isOpen && wasOpen) {\n          restoreFocus(this.returnFocus);\n          this.returnFocus = null;\n        }\n        wasOpen = isOpen;\n      });\n    });\n  }\n\n  /** Closes the menu; called by viking-menu-item on selection. */\n  readonly close = (): void => {\n    this.open.set(false);\n  };\n\n  /** Toggles when the (focusable, projected) trigger is activated. */\n  protected onHostClick = (event: Event): void => {\n    const trigger = this.host.nativeElement.querySelector(\n      \".viking-dropdown-trigger\",\n    );\n    if (trigger?.contains(event.target as Node)) {\n      this.open.update((value) => !value);\n    }\n  };\n\n  protected onDocumentClick = (event: Event): void => {\n    if (\n      this.open() &&\n      !this.host.nativeElement.contains(event.target as Node)\n    ) {\n      this.open.set(false);\n    }\n  };\n\n  protected onHostKeydown = (event: KeyboardEvent): void => {\n    if (event.key === \"Escape\" && this.open()) {\n      event.preventDefault();\n      this.open.set(false);\n      return;\n    }\n    const trigger = this.host.nativeElement.querySelector(\n      \".viking-dropdown-trigger\",\n    );\n    if (!trigger?.contains(event.target as Node)) return;\n    if (\n      !this.open() &&\n      (event.key === \"ArrowDown\" || event.key === \"Enter\" || event.key === \" \")\n    ) {\n      event.preventDefault();\n      this.open.set(true);\n    }\n  };\n\n  protected onMenuKeydown = (event: KeyboardEvent): void => {\n    const menu = event.currentTarget as HTMLElement;\n    const items = getFocusableElements(menu).filter(\n      (el) => el.getAttribute(\"role\") === \"menuitem\",\n    );\n    if (items.length === 0) return;\n    const active = document.activeElement;\n    const currentIndex = Math.max(\n      0,\n      items.findIndex((el) => el === active),\n    );\n    if (event.key === \"Escape\") {\n      event.preventDefault();\n      this.open.set(false);\n      return;\n    }\n    if (event.key === \"Tab\") {\n      this.open.set(false);\n      return;\n    }\n    const next = nextRovingIndex(event.key, currentIndex, items.length, {\n      vertical: true,\n    });\n    if (next === null) return;\n    event.preventDefault();\n    items[next]?.focus({ preventScroll: true });\n  };\n\n  private syncTriggerAria = (isOpen: boolean): void => {\n    const control = resolveDisclosureControl(\n      this.host.nativeElement,\n      \".viking-dropdown-trigger\",\n    );\n    if (!control) return;\n    control.setAttribute(\"aria-expanded\", String(isOpen));\n    control.setAttribute(\"aria-haspopup\", \"menu\");\n    control.setAttribute(\"aria-controls\", this.menuId);\n  };\n}\n\n/** Prefer the native/focusable control inside a projected trigger slot. */\nfunction resolveDisclosureControl(\n  host: HTMLElement,\n  triggerSelector: string,\n): HTMLElement | null {\n  const root = host.querySelector(triggerSelector);\n  if (!root) return null;\n  return (\n    root.querySelector<HTMLElement>(\n      \"button, a[href], [role='button'], summary, .viking-btn, .suite-btn, .fj-btn\",\n    ) ?? (root.firstElementChild as HTMLElement | null)\n  );\n}\n\n/**\n * viking-menu-item — action row inside viking-dropdown / viking-context menus.\n */\n@Component({\n  selector: \"viking-menu-item\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <button\n      type=\"button\"\n      role=\"menuitem\"\n      class=\"viking-menu-item\"\n      [class.viking-menu-item-danger]=\"danger()\"\n      [disabled]=\"disabled()\"\n      (click)=\"select($event)\"\n    >\n      @if (icon()) {\n        <viking-icon [name]=\"icon()!\" [size]=\"18\" />\n      }\n      <span class=\"viking-menu-item-label\"><ng-content /></span>\n      @if (kbd()) {\n        <kbd class=\"viking-menu-item-kbd\">{{ kbd() }}</kbd>\n      }\n    </button>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      .viking-menu-item {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        width: 100%;\n        border: none;\n        background: transparent;\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-ui);\n        font-weight: 600;\n        padding: var(--viking-space-1) var(--viking-space-1);\n        border-radius: calc(var(--viking-radius) / 1.5);\n        cursor: pointer;\n        text-align: left;\n        transition: var(--viking-transition);\n      }\n      .viking-menu-item:hover:not(:disabled) {\n        background: var(--viking-accent-soft);\n      }\n      .viking-menu-item:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: -2px;\n      }\n      .viking-menu-item:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-menu-item-danger {\n        color: var(--viking-danger);\n      }\n      .viking-menu-item-label {\n        flex: 1;\n        white-space: nowrap;\n      }\n      .viking-menu-item-kbd {\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-ui);\n        color: var(--viking-text-muted);\n      }\n    `,\n  ],\n})\nexport class VikingMenuItem {\n  private readonly dropdown = inject(VikingDropdown, { optional: true });\n\n  readonly icon = input<VikingIconName | null>(null);\n  readonly kbd = input<string | null>(null);\n  readonly danger = input<boolean>(false);\n  readonly disabled = input<boolean>(false);\n\n  readonly selected = output<MouseEvent>();\n\n  protected select = (event: MouseEvent): void => {\n    this.selected.emit(event);\n    this.dropdown?.close();\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-empty-state — zero-data placeholder with helpful hierarchy.\n * Chrome from suite-empty (Pass 1); actions via projected content.\n */\n@Component({\n  selector: \"viking-empty-state\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"status\",\n    class: \"suite-empty viking-empty\",\n    \"[attr.data-density]\": \"density()\",\n    \"[attr.data-variant]\": \"variant()\",\n  },\n  template: `\n    @if (icon()) {\n      <div class=\"suite-empty-icon viking-empty-icon\" aria-hidden=\"true\">\n        <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n      </div>\n    }\n    @if (eyebrow()) {\n      <p class=\"suite-empty-eyebrow viking-empty-eyebrow\">{{ eyebrow() }}</p>\n    }\n    @if (heading()) {\n      <p class=\"suite-empty-title viking-empty-title\">{{ heading() }}</p>\n    }\n    @if (description()) {\n      <p class=\"suite-empty-description viking-empty-description\">\n        {{ description() }}\n      </p>\n    }\n    @if (hint()) {\n      <p class=\"suite-empty-hint viking-empty-hint\">{{ hint() }}</p>\n    }\n    <div class=\"suite-empty-actions viking-empty-actions\">\n      <ng-content />\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        width: 100%;\n        box-sizing: border-box;\n      }\n    `,\n  ],\n})\nexport class VikingEmptyState {\n  readonly heading = input<string>(\"No data yet\");\n  readonly description = input<string>(\n    \"When results arrive, they will show up here.\",\n  );\n  readonly hint = input<string>(\"\");\n  readonly eyebrow = input<string>(\"\");\n  readonly icon = input<VikingIconName | null>(\"folder\");\n  readonly iconSize = input<number>(24);\n  readonly density = input<\"default\" | \"compact\">(\"default\");\n  readonly variant = input<\"default\" | \"inset\">(\"default\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-error-state — recovery-oriented failure surface (not field errors).\n * Chrome from suite-error-state; retry / support actions via projection.\n */\n@Component({\n  selector: \"viking-error-state\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"alert\",\n    class: \"suite-error-state viking-error-state\",\n  },\n  template: `\n    <div\n      class=\"suite-error-state-icon viking-error-state-icon\"\n      aria-hidden=\"true\"\n    >\n      <viking-icon [name]=\"icon()\" [size]=\"iconSize()\" />\n    </div>\n    @if (heading()) {\n      <p class=\"suite-error-state-title viking-error-state-title\">\n        {{ heading() }}\n      </p>\n    }\n    @if (description()) {\n      <p class=\"suite-error-state-description viking-error-state-description\">\n        {{ description() }}\n      </p>\n    }\n    @if (hint()) {\n      <p class=\"suite-error-state-hint viking-error-state-hint\">{{ hint() }}</p>\n    }\n    <div class=\"suite-error-state-actions viking-error-state-actions\">\n      <ng-content />\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        width: 100%;\n        box-sizing: border-box;\n      }\n    `,\n  ],\n})\nexport class VikingErrorState {\n  readonly heading = input<string>(\"Something went wrong\");\n  readonly description = input<string>(\n    \"We could not complete that request. Try again, or contact support if it continues.\",\n  );\n  readonly hint = input<string>(\"\");\n  readonly icon = input<VikingIconName>(\"alert-circle\");\n  readonly iconSize = input<number>(24);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  afterNextRender,\n  inject,\n  input,\n  model,\n  viewChild,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\ninterface EditorAction {\n  icon: VikingIconName;\n  command: string;\n  label: string;\n}\n\nconst ACTIONS: EditorAction[] = [\n  { icon: \"bold\", command: \"bold\", label: \"Bold\" },\n  { icon: \"italic\", command: \"italic\", label: \"Italic\" },\n  { icon: \"underline\", command: \"underline\", label: \"Underline\" },\n  { icon: \"list\", command: \"insertUnorderedList\", label: \"Bulleted list\" },\n  {\n    icon: \"list-ordered\",\n    command: \"insertOrderedList\",\n    label: \"Numbered list\",\n  },\n];\n\n/**\n * viking-editor — lightweight rich text editor.\n * Zero-dependency contenteditable with a formatting toolbar.\n * Value is HTML. ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-editor\",\n  imports: [VikingIcon],\n  providers: [provideVikingCva(VikingEditor)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"viking-editor\">\n      <div\n        class=\"viking-editor-toolbar\"\n        role=\"toolbar\"\n        aria-label=\"Text formatting\"\n      >\n        @for (action of actions; track action.command) {\n          <button\n            type=\"button\"\n            class=\"viking-editor-btn\"\n            [attr.aria-label]=\"action.label\"\n            (mousedown)=\"$event.preventDefault()\"\n            (click)=\"exec(action.command)\"\n          >\n            <viking-icon [name]=\"action.icon\" [size]=\"18\" />\n          </button>\n        }\n      </div>\n      <div\n        #surface\n        class=\"viking-editor-surface\"\n        contenteditable=\"true\"\n        role=\"textbox\"\n        aria-multiline=\"true\"\n        [attr.aria-label]=\"label() || 'Rich text editor'\"\n        [attr.data-placeholder]=\"placeholder()\"\n        (input)=\"onInput()\"\n        (blur)=\"onTouched()\"\n      ></div>\n    </div>\n  `,\n  styles: [\n    `\n      .viking-editor {\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        box-shadow: var(--viking-shadow-sm);\n        font-family: var(--viking-font-family);\n        transition: var(--viking-transition);\n      }\n      .viking-editor:focus-within {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-editor-toolbar {\n        display: flex;\n        gap: var(--viking-space-0-5);\n        padding: var(--viking-space-1);\n        border-bottom: 1px solid var(--viking-border);\n      }\n      .viking-editor-btn {\n        display: inline-flex;\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: calc(var(--viking-space-1) / 1.5);\n        border-radius: calc(var(--viking-radius) / 1.5);\n        transition: var(--viking-transition);\n      }\n      .viking-editor-btn:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-editor-btn:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: 1px;\n      }\n      .viking-editor-surface {\n        min-height: 126px;\n        padding: var(--viking-space-2);\n        color: var(--viking-text);\n        font-size: var(--viking-font-size);\n        line-height: 1.6;\n        outline: none;\n      }\n      .viking-editor-surface:empty::before {\n        content: attr(data-placeholder);\n        color: var(--viking-text-muted);\n        pointer-events: none;\n      }\n    `,\n  ],\n})\nexport class VikingEditor extends VikingControl<string> {\n  private readonly surface =\n    viewChild.required<ElementRef<HTMLElement>>(\"surface\");\n  private readonly document =\n    inject<ElementRef<HTMLElement>>(ElementRef).nativeElement.ownerDocument;\n\n  readonly value = model<string>(\"\");\n  readonly placeholder = input<string>(\"Start writing…\");\n  readonly label = input<string>(\"\");\n\n  protected readonly actions = ACTIONS;\n\n  constructor() {\n    super();\n    afterNextRender(() => {\n      if (this.value()) {\n        this.surface().nativeElement.innerHTML = this.value();\n      }\n    });\n  }\n\n  writeValue(value: string): void {\n    this.value.set(value ?? \"\");\n    const surface = this.surface?.();\n    if (surface) {\n      surface.nativeElement.innerHTML = value ?? \"\";\n    }\n  }\n\n  protected exec = (command: string): void => {\n    this.surface().nativeElement.focus();\n    // execCommand is deprecated but remains the only zero-dependency way to\n    // apply inline formatting to a contenteditable selection.\n    this.document.execCommand(command, false);\n    this.onInput();\n  };\n\n  protected onInput = (): void => {\n    const html = this.surface().nativeElement.innerHTML;\n    this.value.set(html);\n    this.onChange(html);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\nexport type StatusBadgeVariant =\n  | \"operational\"\n  | \"degraded\"\n  | \"outage\"\n  | \"maintenance\";\n\nconst STATUS_LABELS: Record<StatusBadgeVariant, string> = {\n  operational: \"Operational\",\n  degraded: \"Degraded\",\n  outage: \"Outage\",\n  maintenance: \"Maintenance\",\n};\n\nconst normalizeStatusVariant = (value: string): StatusBadgeVariant => {\n  const normalized = value.trim().toLowerCase().replace(/\\s+/g, \"_\");\n  if (normalized === \"operational\" || normalized === \"up\") {\n    return \"operational\";\n  }\n  if (normalized === \"degraded\" || normalized === \"partial_outage\") {\n    return \"degraded\";\n  }\n  if (\n    normalized === \"outage\" ||\n    normalized === \"major_outage\" ||\n    normalized === \"down\"\n  ) {\n    return \"outage\";\n  }\n  if (normalized === \"maintenance\") {\n    return \"maintenance\";\n  }\n  return \"operational\";\n};\n\n/**\n * StatusBadgeComponent — accessible status pill with a colored dot and label.\n *\n * @example\n * ```html\n * <viking-status-badge variant=\"operational\" />\n * <viking-status-badge variant=\"degraded\" label=\"Partial outage\" />\n * ```\n */\n@Component({\n  selector: \"viking-status-badge\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"status\",\n    \"[class]\": \"hostClass()\",\n    \"[attr.aria-label]\": \"ariaLabel()\",\n  },\n  template: `\n    <span class=\"viking-status-badge-dot\" aria-hidden=\"true\"></span>\n    <span class=\"viking-status-badge-label\">{{ resolvedLabel() }}</span>\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: var(--viking-space-1);\n        width: fit-content;\n        max-width: 100%;\n        padding: var(--viking-space-0-5) var(--viking-space-2);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-surface-alt);\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-xs);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-wide);\n        line-height: var(--viking-line-height-snug);\n        white-space: nowrap;\n        box-shadow: var(--viking-shadow-xs);\n      }\n\n      .viking-status-badge-dot {\n        width: var(--viking-space-1);\n        height: var(--viking-space-1);\n        border-radius: var(--viking-radius-full);\n        background: currentColor;\n        box-shadow: 0 0 0 var(--viking-space-0-5)\n          color-mix(in srgb, currentColor 12%, transparent);\n        flex: 0 0 auto;\n      }\n\n      .viking-status-badge-label {\n        min-width: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        color: var(--viking-text);\n      }\n\n      :host(.viking-status-badge-operational) {\n        color: var(--viking-success);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-success) 48%,\n          var(--viking-border)\n        );\n        background: color-mix(\n          in srgb,\n          var(--viking-success) 12%,\n          var(--viking-surface)\n        );\n      }\n\n      :host(.viking-status-badge-degraded),\n      :host(.viking-status-badge-maintenance) {\n        color: var(--viking-warning);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-warning) 52%,\n          var(--viking-border)\n        );\n        background: color-mix(\n          in srgb,\n          var(--viking-warning) 14%,\n          var(--viking-surface)\n        );\n      }\n\n      :host(.viking-status-badge-outage) {\n        color: var(--viking-danger-text);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-danger) 58%,\n          var(--viking-border)\n        );\n        background: color-mix(\n          in srgb,\n          var(--viking-danger) 16%,\n          var(--viking-surface)\n        );\n      }\n    `,\n  ],\n})\nexport class StatusBadgeComponent {\n  readonly variant = input<StatusBadgeVariant | string>(\"operational\");\n  readonly label = input<string>(\"\");\n  readonly aria = input<string>(\"\");\n\n  protected readonly normalizedVariant = computed(() =>\n    normalizeStatusVariant(this.variant()),\n  );\n\n  protected readonly resolvedLabel = computed(\n    () => this.label() || STATUS_LABELS[this.normalizedVariant()],\n  );\n\n  protected readonly ariaLabel = computed(\n    () => this.aria() || `System status: ${this.resolvedLabel()}`,\n  );\n\n  protected readonly hostClass = computed(\n    () => `viking-status-badge viking-status-badge-${this.normalizedVariant()}`,\n  );\n}\n\nexport { StatusBadgeComponent as VikingStatusBadge };\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  CUSTOM_ELEMENTS_SCHEMA,\n  input,\n} from \"@angular/core\";\nimport { registerVikingStatusCardWcElement } from \"../../web/status-card/viking-status-card-wc\";\nimport type { VikingTone } from \"../../core/types\";\n\nregisterVikingStatusCardWcElement();\n\n/**\n * viking-status-card — wrapper around the web component.\n */\n@Component({\n  selector: \"viking-status-card\",\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <viking-status-card-wc\n      [attr.title]=\"title()\"\n      [attr.subtitle]=\"subtitle()\"\n      [attr.status]=\"status()\"\n      [attr.status-tone]=\"statusTone()\"\n      [attr.status-dot]=\"statusDot() || null\"\n      [attr.href]=\"href()\"\n      [attr.target]=\"target()\"\n      [attr.compact]=\"compact() || null\"\n      [attr.loading]=\"loading() || null\"\n      [attr.interactive]=\"interactive() || null\"\n      [attr.aria-label]=\"ariaLabel()\"\n    >\n      <ng-content />\n    </viking-status-card-wc>\n  `,\n})\nexport class VikingStatusCard {\n  readonly title = input<string>(\"\");\n  readonly subtitle = input<string>(\"\");\n  readonly status = input<string>(\"\");\n  readonly statusTone = input<VikingTone>(\"muted\");\n  readonly statusDot = input<boolean>(false);\n  readonly href = input<string>(\"\");\n  readonly target = input<string>(\"\");\n  readonly compact = input<boolean>(false);\n  readonly loading = input<boolean>(false);\n  readonly interactive = input<boolean>(false);\n  readonly ariaLabel = input<string>(\"\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\nexport type VikingUptimeStatus =\n  | \"operational\"\n  | \"partial_outage\"\n  | \"major_outage\"\n  | \"no_data\";\n\n/** viking-uptime-bar — timeline bar for uptime history visualizations. */\n@Component({\n  selector: \"viking-uptime-bar\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-uptime-bar\",\n    \"[class.viking-uptime-partial]\": \"status() === 'partial_outage'\",\n    \"[class.viking-uptime-major]\": \"status() === 'major_outage'\",\n    \"[class.viking-uptime-nodata]\": \"status() === 'no_data'\",\n    \"[attr.title]\": \"title()\",\n    \"[attr.role]\": \"title() ? 'img' : null\",\n    \"[attr.aria-label]\": \"title() || null\",\n    \"[attr.aria-hidden]\": \"title() ? null : 'true'\",\n  },\n  template: \"\",\n  styles: [\n    `\n      :host {\n        display: block;\n        flex: 1 1 0;\n        min-width: 3px;\n        width: 100%;\n        height: 100%;\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-success);\n        align-self: stretch;\n      }\n      :host(.viking-uptime-partial) {\n        background: var(--viking-warning);\n      }\n      :host(.viking-uptime-major) {\n        background: var(--viking-danger);\n      }\n      :host(.viking-uptime-nodata) {\n        background: var(--viking-text-muted);\n        opacity: 0.35;\n      }\n    `,\n  ],\n})\nexport class VikingUptimeBar {\n  readonly status = input<VikingUptimeStatus>(\"operational\");\n  readonly title = input<string>(\"\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport {\n  VikingUptimeBar,\n  type VikingUptimeStatus,\n} from \"../uptime-bar/uptime-bar\";\n\nexport type VikingUptimeSegment = {\n  status: string | VikingUptimeStatus;\n  uptime?: number | null;\n  date?: string;\n};\n\nexport type UptimeHistoryDataPoint = {\n  date: string;\n  status: \"up\" | \"down\" | \"partial\" | \"no_data\";\n};\n\nconst normalizeUptimeStatus = (raw: string): VikingUptimeStatus => {\n  const key = (raw || \"\").toLowerCase().replace(/-/g, \"_\");\n  if (key === \"operational\" || key === \"up\") return \"operational\";\n  if (key === \"partial_outage\" || key === \"degraded\" || key === \"partial\")\n    return \"partial_outage\";\n  if (key === \"major_outage\" || key === \"down\" || key === \"outage\")\n    return \"major_outage\";\n  return \"no_data\";\n};\n\nconst formatStatus = (raw: string): string => {\n  const normalized = normalizeUptimeStatus(raw);\n  if (normalized === \"operational\") return \"Up\";\n  if (normalized === \"partial_outage\") return \"Partial\";\n  if (normalized === \"major_outage\") return \"Down\";\n  return \"No data\";\n};\n\nconst segmentTitle = (segment: VikingUptimeSegment): string => {\n  const status = formatStatus(segment.status);\n  if (normalizeUptimeStatus(segment.status) === \"no_data\") {\n    return segment.date ? `${segment.date}: ${status}` : status;\n  }\n  if (segment.date) {\n    if (segment.uptime !== undefined && segment.uptime !== null) {\n      return `${segment.date}: ${status} (${segment.uptime}%)`;\n    }\n    return `${segment.date}: ${status}`;\n  }\n  if (segment.uptime !== undefined && segment.uptime !== null) {\n    return `${segment.uptime}% uptime`;\n  }\n  return status;\n};\n\n/**\n * UptimeHistoryComponent — full-width segmented uptime timeline.\n *\n * Accepts date + status samples and exposes native, visible hover/focus\n * tooltips for each segment.\n *\n * @example\n * ```html\n * <viking-uptime-history\n *   [data]=\"[{ date: '2026-06-13', status: 'up' }]\"\n *   [height]=\"24\"\n *   [showLabels]=\"true\"\n * />\n * ```\n */\n@Component({\n  selector: \"viking-uptime-history\",\n  imports: [VikingUptimeBar],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-uptime-history\",\n    \"[class.viking-uptime-history-compact]\": \"compact()\",\n    \"[style.--viking-uptime-history-height]\": \"heightStyle()\",\n  },\n  template: `\n    @if (showHeader()) {\n      <div class=\"uptime-history-header\">\n        <span class=\"uptime-history-label\">{{ label() }}</span>\n        <span class=\"uptime-history-value\">{{ headerValue() }}</span>\n      </div>\n    }\n    <div class=\"uptime-history-bar\" role=\"list\" [attr.aria-label]=\"ariaLabel()\">\n      @for (segment of historySegments(); track $index) {\n        <span\n          class=\"uptime-history-segment\"\n          role=\"listitem\"\n          tabindex=\"0\"\n          [attr.data-tooltip]=\"segmentTitle(segment)\"\n        >\n          <span class=\"visually-hidden\">{{ segmentTitle(segment) }}</span>\n          <viking-uptime-bar [status]=\"resolveStatus(segment)\" />\n        </span>\n      }\n    </div>\n    @if (resolvedShowLabels()) {\n      <div class=\"uptime-history-legend\">\n        <span>{{ legendStart() }}</span>\n        <span>{{ legendEnd() }}</span>\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-2);\n        width: 100%;\n        min-width: 0;\n        box-sizing: border-box;\n        /* Unified with chart visual language */\n      }\n\n      .uptime-history-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-3);\n        min-width: 0;\n        padding-bottom: var(--viking-space-0-5);\n      }\n\n      .uptime-history-label {\n        font-size: var(--viking-font-size-xs);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        text-transform: uppercase;\n        color: var(--viking-text-muted);\n      }\n\n      .uptime-history-value {\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-text);\n        font-variant-numeric: tabular-nums;\n        text-align: right;\n      }\n\n      .uptime-history-bar {\n        display: flex;\n        align-items: stretch;\n        gap: var(--viking-space-px);\n        width: 100%;\n        min-width: 0;\n        height: var(--viking-uptime-history-height, var(--viking-space-4));\n        padding: var(--viking-space-1);\n        border-radius: var(--viking-radius-lg);\n        background: var(--viking-surface-inset);\n        box-sizing: border-box;\n        border: 1px solid var(--viking-border-subtle);\n      }\n\n      :host(.viking-uptime-history-compact) .uptime-history-bar {\n        height: var(--viking-space-3);\n        padding: var(--viking-space-0-5);\n        border-radius: var(--viking-radius);\n      }\n\n      .uptime-history-bar viking-uptime-bar {\n        flex: 1 1 0;\n        min-width: 2.5px;\n        border-radius: var(--viking-radius);\n      }\n\n      .uptime-history-segment {\n        position: relative;\n        display: flex;\n        flex: 1 1 0;\n        min-width: 2.5px;\n        height: 100%;\n        border-radius: var(--viking-radius);\n      }\n\n      @media (min-width: 600px) {\n        .uptime-history-bar viking-uptime-bar,\n        .uptime-history-segment {\n          min-width: 4px;\n        }\n      }\n\n      .uptime-history-segment:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n        z-index: 2;\n      }\n\n      .uptime-history-segment::after {\n        content: attr(data-tooltip);\n        position: absolute;\n        left: 50%;\n        bottom: calc(100% + var(--viking-space-2));\n        transform: translateX(-50%) translateY(var(--viking-space-1));\n        width: max-content;\n        max-width: min(18rem, 85vw);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface-raised);\n        color: var(--viking-text);\n        box-shadow: var(--viking-shadow-md);\n        font-size: var(--viking-font-size-xs);\n        line-height: var(--viking-line-height-snug);\n        opacity: 0;\n        pointer-events: none;\n        transition:\n          opacity var(--viking-duration-fast) var(--viking-ease-out),\n          transform var(--viking-duration-fast) var(--viking-ease-out);\n        z-index: 10;\n      }\n\n      .uptime-history-segment:hover::after,\n      .uptime-history-segment:focus-visible::after {\n        opacity: 1;\n        transform: translateX(-50%) translateY(0);\n      }\n\n      .uptime-history-legend {\n        display: flex;\n        justify-content: space-between;\n        gap: var(--viking-space-3);\n        font-size: var(--viking-font-size-2xs);\n        color: var(--viking-text-muted);\n        padding-top: var(--viking-space-0-5);\n      }\n    `,\n  ],\n})\nexport class UptimeHistoryComponent {\n  readonly data = input<UptimeHistoryDataPoint[]>([]);\n  readonly segments = input<VikingUptimeSegment[]>([]);\n  readonly height =\n    input<number>(32); /* Premium visible breathing on timeline */\n  readonly showLabels = input<boolean | undefined>(undefined);\n  readonly percentage = input<number | null>(null);\n  readonly statusSummary = input<string>(\"\");\n  readonly label = input<string>(\"Uptime\");\n  readonly showHeader = input<boolean>(true);\n  readonly showLegend = input<boolean>(true);\n  readonly legendStart = input<string>(\"30 days ago\");\n  readonly legendEnd = input<string>(\"Today\");\n  readonly compact = input<boolean>(false);\n\n  readonly heightStyle = computed(() => `${Math.max(this.height(), 1)}px`);\n\n  readonly historySegments = computed<VikingUptimeSegment[]>(() => {\n    const data = this.data();\n    if (data.length > 0) {\n      return data.map((item) => ({\n        date: item.date,\n        status: item.status,\n      }));\n    }\n    return this.segments();\n  });\n\n  readonly resolvedShowLabels = computed(\n    () => this.showLabels() ?? this.showLegend(),\n  );\n\n  readonly headerValue = computed(() => {\n    const pct = this.percentage();\n    const summary = this.statusSummary();\n    if (pct !== null && pct !== undefined && summary) {\n      return `${pct.toFixed(2)}% — ${summary}`;\n    }\n    if (pct !== null && pct !== undefined) {\n      return `${pct.toFixed(2)}%`;\n    }\n    return summary || \"No data\";\n  });\n\n  readonly ariaLabel = computed(() => {\n    const pct = this.percentage();\n    const count = this.historySegments().length;\n    if (pct !== null && pct !== undefined) {\n      return `Uptime history: ${pct.toFixed(2)}% over ${count} periods`;\n    }\n    return `Uptime history across ${count} periods`;\n  });\n\n  protected resolveStatus(segment: VikingUptimeSegment): VikingUptimeStatus {\n    return normalizeUptimeStatus(segment.status);\n  }\n\n  protected segmentTitle(segment: VikingUptimeSegment): string {\n    return segmentTitle(segment);\n  }\n}\n\nexport { UptimeHistoryComponent as VikingUptimeHistory };\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport { VikingBadge } from \"../badge/badge\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { StatusBadgeComponent } from \"../status-badge/status-badge\";\nimport { VikingStatusCard } from \"../status-card/status-card\";\nimport {\n  UptimeHistoryComponent,\n  type UptimeHistoryDataPoint,\n  type VikingUptimeSegment,\n} from \"../uptime-history/uptime-history\";\nimport type { VikingIconName } from \"../../core/icons\";\nimport type { VikingTone } from \"../../core/types\";\n\nexport type ExploreCardStatus =\n  | \"operational\"\n  | \"degraded\"\n  | \"outage\"\n  | \"maintenance\"\n  | string;\n\nexport type ExploreCardMetric = {\n  icon: VikingIconName | string;\n  label: string;\n  value: string | number;\n  sublabel?: string;\n  tone?: VikingTone | \"default\";\n};\n\nexport type ExploreCardUptimePoint = UptimeHistoryDataPoint;\n\nexport type ExploreCardData = {\n  title: string;\n  description: string;\n  href: string;\n  status?: ExploreCardStatus;\n  statusLabel?: string;\n  proVerified?: boolean;\n  metrics: ExploreCardMetric[];\n  uptimeHistory: ExploreCardUptimePoint[];\n  uptimePercentage?: number | null;\n  uptimeSummary?: string;\n};\n\nconst normalizeStatusLabel = (status: string): string => {\n  const value = status.trim().toLowerCase().replace(/\\s+/g, \"_\");\n  if (value === \"operational\" || value === \"up\") return \"Operational\";\n  if (value === \"degraded\" || value === \"partial_outage\") return \"Degraded\";\n  if (value === \"maintenance\") return \"Maintenance\";\n  if (value === \"outage\" || value === \"major_outage\" || value === \"down\")\n    return \"Outage\";\n  return status || \"Operational\";\n};\n\nconst segmentToDataPoint = (\n  segment: VikingUptimeSegment,\n  index: number,\n): ExploreCardUptimePoint => {\n  const status = `${segment.status}`.toLowerCase().replace(/\\s+/g, \"_\");\n  const date = new Date(\"2026-06-08T00:00:00Z\");\n  date.setUTCDate(date.getUTCDate() + index);\n  return {\n    date: segment.date ?? date.toISOString().slice(0, 10),\n    status:\n      status === \"no_data\"\n        ? \"no_data\"\n        : status === \"outage\" || status === \"major_outage\" || status === \"down\"\n          ? \"down\"\n          : status === \"degraded\" ||\n              status === \"partial\" ||\n              status === \"partial_outage\"\n            ? \"partial\"\n            : \"up\",\n  };\n};\n\n/**\n * ExploreCardMetricItemComponent — reusable compact metric for public status cards.\n *\n * @example\n * ```html\n * <viking-explore-card-metric\n *   icon=\"server\"\n *   label=\"Cumulative SLA\"\n *   value=\"100.00%\"\n *   sublabel=\"Based on real telemetry\"\n * />\n * ```\n */\n@Component({\n  selector: \"viking-explore-card-metric\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class]\": \"hostClass()\",\n    \"[attr.aria-label]\": \"ariaLabel()\",\n  },\n  template: `\n    <div class=\"viking-explore-card-metric-copy\">\n      <viking-icon\n        [name]=\"icon()\"\n        [size]=\"18\"\n        [color]=\"iconColor()\"\n        [backdrop]=\"true\"\n        [backdropTone]=\"backdropTone()\"\n      />\n      <span class=\"viking-explore-card-metric-label-group\">\n        <span class=\"viking-explore-card-metric-label\">{{ label() }}</span>\n        @if (sublabel()) {\n          <span class=\"viking-explore-card-metric-sublabel\">\n            {{ sublabel() }}\n          </span>\n        }\n      </span>\n    </div>\n    <strong class=\"viking-explore-card-metric-value\">{{ value() }}</strong>\n  `,\n  styles: [\n    `\n      :host {\n        container-type: inline-size;\n        display: grid;\n        grid-template-columns: minmax(0, 1fr);\n        align-items: start;\n        gap: var(--viking-space-2);\n        min-width: 0;\n        min-height: var(--viking-touch-target-comfort);\n        height: 100%;\n        padding: var(--viking-space-3);\n        border-radius: var(--viking-radius-md);\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border-subtle);\n        color: var(--viking-text);\n        box-sizing: border-box;\n        transition: var(--viking-transition-interactive);\n      }\n\n      :host(:hover) {\n        background: var(--viking-surface-raised);\n        border-color: var(--viking-border);\n        transform: translateY(var(--viking-state-hover-lift));\n      }\n\n      :host(:focus-visible) {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n\n      .viking-explore-card-metric-copy {\n        display: flex;\n        align-items: flex-start;\n        gap: var(--viking-space-2);\n        min-width: 0;\n      }\n\n      .viking-explore-card-metric-label-group {\n        display: grid;\n        gap: var(--viking-space-px);\n        min-width: 0;\n      }\n\n      .viking-explore-card-metric-label {\n        display: block;\n        color: var(--viking-text-muted);\n        font-size: var(--viking-font-size-2xs);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        line-height: var(--viking-line-height-snug);\n        text-transform: uppercase;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      .viking-explore-card-metric-sublabel {\n        display: block;\n        color: var(--viking-text-subtle);\n        font-size: var(--viking-font-size-3xs);\n        line-height: var(--viking-line-height-snug);\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      .viking-explore-card-metric-value {\n        color: var(--viking-accent-strong);\n        font-size: clamp(\n          var(--viking-font-size-sm),\n          7cqw,\n          var(--viking-font-size-xl)\n        );\n        font-weight: var(--viking-font-weight-bold);\n        font-variant-numeric: tabular-nums;\n        line-height: var(--viking-line-height-tight);\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        text-align: left;\n        max-width: 100%;\n      }\n\n      @media (min-width: 600px) {\n        :host {\n          grid-template-columns: minmax(0, 1fr) minmax(4rem, max-content);\n          align-items: center;\n          padding: var(--viking-space-4);\n        }\n\n        .viking-explore-card-metric-copy {\n          align-items: center;\n          gap: var(--viking-space-3);\n        }\n\n        .viking-explore-card-metric-value {\n          text-align: right;\n          font-size: clamp(\n            var(--viking-font-size-sm),\n            3.5cqw,\n            var(--viking-font-size-lg)\n          );\n        }\n      }\n\n      :host(.viking-explore-card-metric-success)\n        .viking-explore-card-metric-value {\n        color: var(--viking-success);\n      }\n\n      :host(.viking-explore-card-metric-warning)\n        .viking-explore-card-metric-value {\n        color: var(--viking-warning);\n      }\n\n      :host(.viking-explore-card-metric-danger)\n        .viking-explore-card-metric-value {\n        color: var(--viking-danger-text);\n      }\n\n      :host(.viking-explore-card-metric-info)\n        .viking-explore-card-metric-value {\n        color: var(--viking-info);\n      }\n    `,\n  ],\n})\nexport class ExploreCardMetricItemComponent {\n  readonly icon = input.required<VikingIconName | string>();\n  readonly label = input.required<string>();\n  readonly value = input.required<string | number>();\n  readonly sublabel = input<string>(\"\");\n  readonly tone = input<VikingTone | \"default\">(\"default\");\n\n  protected readonly resolvedTone = computed(() =>\n    this.tone() === \"default\" ? \"accent\" : this.tone(),\n  );\n\n  protected readonly iconColor = computed(() =>\n    this.tone() === \"default\" ? \"accent\" : this.tone(),\n  );\n\n  protected readonly backdropTone = computed(() => {\n    const tone = this.resolvedTone();\n    return tone === \"danger\" || tone === \"warning\" || tone === \"success\"\n      ? tone\n      : \"info\";\n  });\n\n  protected readonly hostClass = computed(() => ({\n    \"viking-explore-card-metric\": true,\n    [`viking-explore-card-metric-${this.tone()}`]: this.tone() !== \"default\",\n  }));\n\n  protected readonly ariaLabel = computed(() => {\n    const sublabel = this.sublabel();\n    return [this.label(), this.value(), sublabel].filter(Boolean).join(\": \");\n  });\n}\n\n/**\n * ExploreCardComponent — public status directory card.\n *\n * @example\n * ```html\n * <viking-explore-card\n *   title=\"Data Engineering for Machine Learning\"\n *   description=\"Real-time platform status for DEML services.\"\n *   href=\"/status/platform-status\"\n *   [proVerified]=\"true\"\n *   status=\"operational\"\n *   [metrics]=\"metrics\"\n *   [uptimeHistory]=\"uptime\"\n * />\n * ```\n */\n@Component({\n  selector: \"viking-explore-card\",\n  imports: [\n    ExploreCardMetricItemComponent,\n    StatusBadgeComponent,\n    UptimeHistoryComponent,\n    VikingBadge,\n    VikingButton,\n    VikingStatusCard,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-explore-card\",\n    \"[class.viking-explore-card-interactive]\": \"!!href()\",\n  },\n  template: `\n    <viking-status-card\n      [title]=\"title()\"\n      [subtitle]=\"description()\"\n      [compact]=\"true\"\n      [interactive]=\"!!href()\"\n      [ariaLabel]=\"ariaLabel()\"\n    >\n      <!-- Single status surface: badge row only (not also on status-card header). -->\n      <div class=\"viking-explore-card-badges\" aria-label=\"Status badges\">\n        @if (proVerified()) {\n          <viking-badge\n            tone=\"accent\"\n            title=\"Pro subscriber — verified status page\"\n            aria-label=\"Pro verified status page\"\n          >\n            Pro Verified\n          </viking-badge>\n        }\n        <viking-status-badge\n          [variant]=\"status()\"\n          [label]=\"resolvedStatusLabel()\"\n        />\n      </div>\n\n      <div class=\"viking-explore-card-metrics\">\n        @for (metric of metrics(); track metric.label) {\n          <viking-explore-card-metric\n            [icon]=\"metric.icon\"\n            [label]=\"metric.label\"\n            [value]=\"metric.value\"\n            [sublabel]=\"metric.sublabel ?? ''\"\n            [tone]=\"metric.tone ?? 'default'\"\n          />\n        }\n      </div>\n\n      <viking-uptime-history\n        [data]=\"resolvedUptimeHistory()\"\n        [height]=\"16\"\n        [showLabels]=\"false\"\n        [percentage]=\"uptimePercentage()\"\n        [statusSummary]=\"resolvedUptimeSummary()\"\n        [compact]=\"true\"\n        label=\"Uptime\"\n      />\n\n      @if (href()) {\n        <div class=\"viking-explore-card-footer\">\n          <viking-button\n            variant=\"primary\"\n            [fullWidth]=\"true\"\n            [href]=\"href()\"\n            icon=\"globe\"\n            iconTrailing=\"arrow-right\"\n            [label]=\"viewLabel()\"\n          >\n            {{ viewLabel() }}\n          </viking-button>\n        </div>\n      }\n    </viking-status-card>\n  `,\n  styles: [\n    `\n      :host {\n        container-name: viking-explore-card;\n        container-type: inline-size;\n        display: block;\n        width: 100%;\n        min-width: 0;\n        border-radius: var(\n          --viking-radius-xl\n        ); /* Increased for more premium, structured card feel */\n        transition: var(--viking-transition-interactive);\n      }\n\n      :host(.viking-explore-card-interactive:hover) {\n        transform: translateY(calc(var(--viking-state-hover-lift) * -1));\n      }\n\n      .viking-explore-card-badges,\n      .viking-explore-card-footer {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        gap: var(--viking-space-3);\n        min-width: 0;\n      }\n\n      .viking-explore-card-badges {\n        justify-content: space-between;\n        padding-top: var(--viking-space-4);\n        margin-top: var(--viking-space-3);\n        border-top: 1px solid var(--viking-border-subtle);\n      }\n\n      .viking-explore-card-metrics {\n        display: grid;\n        grid-template-columns: minmax(0, 1fr);\n        gap: var(--viking-space-3);\n        width: 100%;\n        min-width: 0;\n        align-items: stretch;\n        grid-auto-rows: 1fr;\n      }\n\n      .viking-explore-card-footer {\n        padding-top: var(--viking-space-5);\n        border-top: 1px solid var(--viking-border-subtle);\n      }\n\n      /* Uptime bar section breathing — more space above/below for visual separation */\n      .viking-explore-card-metrics + viking-uptime-history {\n        margin-top: var(--viking-space-3);\n        padding-top: var(--viking-space-3);\n        border-top: 1px solid var(--viking-border-subtle);\n      }\n\n      /* The card responds to its own width, not the browser viewport. */\n      @container viking-explore-card (min-width: 600px) {\n        .viking-explore-card-metrics {\n          grid-template-columns: repeat(2, minmax(0, 1fr));\n          gap: var(--viking-space-3);\n        }\n      }\n    `,\n  ],\n})\nexport class ExploreCardComponent {\n  readonly title = input.required<string>();\n  readonly description = input<string>(\"Monitoring core services\");\n  readonly href = input<string>(\"\");\n  readonly proVerified = input<boolean>(false);\n  readonly status = input<ExploreCardStatus>(\"operational\");\n  readonly statusLabel = input<string>(\"\");\n  readonly metrics = input<ExploreCardMetric[]>([]);\n  readonly uptimeHistory = input<ExploreCardUptimePoint[]>([]);\n  readonly segments = input<VikingUptimeSegment[]>([]);\n  readonly uptimePercentage = input<number | null>(null);\n  readonly uptimeSummary = input<string>(\"\");\n  readonly viewLabel = input<string>(\"View status\");\n\n  protected readonly resolvedStatusLabel = computed(\n    () => this.statusLabel() || normalizeStatusLabel(this.status()),\n  );\n\n  protected readonly resolvedUptimeSummary = computed(() => {\n    const summary = this.uptimeSummary().trim();\n    if (summary) return summary;\n    // Avoid repeating the status badge label (e.g. \"Operational\") in the uptime header.\n    return \"30-day history\";\n  });\n\n  protected readonly resolvedUptimeHistory = computed(() => {\n    const data = this.uptimeHistory();\n    if (data.length > 0) return data;\n    return this.segments().map(segmentToDataPoint);\n  });\n\n  protected readonly ariaLabel = computed(\n    () => `${this.title()} public status card: ${this.resolvedStatusLabel()}`,\n  );\n}\n\nexport { ExploreCardComponent as VikingExploreCard };\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-fab — floating action button (fixed bottom-right).\n */\n@Component({\n  selector: \"viking-fab\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <button\n      type=\"button\"\n      class=\"viking-fab\"\n      [attr.aria-label]=\"label()\"\n      [disabled]=\"disabled()\"\n      (click)=\"pressed.emit($event)\"\n    >\n      <viking-icon [name]=\"icon()\" [size]=\"24\" />\n    </button>\n  `,\n  styles: [\n    `\n      :host {\n        display: contents;\n      }\n      .viking-fab {\n        position: fixed;\n        bottom: var(--viking-space-3);\n        right: var(--viking-space-3);\n        width: var(--viking-space-7);\n        height: var(--viking-space-7);\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-accent);\n        color: var(--viking-accent-content);\n        border: 1px solid\n          color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));\n        box-shadow: var(--viking-shadow-md);\n        cursor: pointer;\n        z-index: var(--viking-z-overlay);\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-fab:hover:not(:disabled) {\n        transform: translateY(var(--viking-state-hover-lift));\n        box-shadow: var(--viking-shadow-hover);\n        background: var(--viking-accent-hover);\n      }\n      .viking-fab:active:not(:disabled) {\n        transform: translateY(0) scale(var(--viking-state-active-scale));\n      }\n      .viking-fab:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-fab:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n    `,\n  ],\n})\nexport class VikingFab {\n  readonly icon = input.required<VikingIconName>();\n  readonly label = input.required<string>();\n  readonly disabled = input<boolean>(false);\n  readonly pressed = output<MouseEvent>();\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n  signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport type VikingFlashbarType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface VikingFlashbarAction {\n  label: string;\n  id?: string;\n}\n\n/**\n * viking-flashbar — persistent inline notification bar.\n * Based on Cloudscape Flashbar pattern, adapted for Viking-UI.\n * Used for real-time status updates, pipeline alerts, and inline confirmations.\n */\n@Component({\n  selector: \"viking-flashbar\",\n  standalone: true,\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"viking-flashbar\"\n      role=\"status\"\n      [attr.aria-live]=\"type() === 'error' ? 'assertive' : 'polite'\"\n    >\n      <viking-icon\n        class=\"viking-flashbar__icon\"\n        [name]=\"iconName()\"\n        [size]=\"20\"\n      />\n      <div class=\"viking-flashbar__content\">\n        <p class=\"viking-flashbar__heading\">{{ heading() }}</p>\n        @if (description()) {\n          <p class=\"viking-flashbar__description\">{{ description() }}</p>\n        }\n      </div>\n      <div class=\"viking-flashbar__actions\">\n        @if (primaryAction()) {\n          <button\n            type=\"button\"\n            class=\"viking-flashbar__button viking-flashbar__button--primary\"\n            (click)=\"primaryClicked.emit()\"\n          >\n            {{ primaryAction()?.label }}\n          </button>\n        }\n        @if (secondaryAction()) {\n          <button\n            type=\"button\"\n            class=\"viking-flashbar__button viking-flashbar__button--secondary\"\n            (click)=\"secondaryClicked.emit()\"\n          >\n            {{ secondaryAction()?.label }}\n          </button>\n        }\n        @if (dismissible()) {\n          <button\n            type=\"button\"\n            class=\"viking-flashbar__dismiss\"\n            aria-label=\"Dismiss notification\"\n            (click)=\"dismissed.set(true)\"\n          >\n            <viking-icon name=\"x\" [size]=\"16\" />\n          </button>\n        }\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      :host(.viking-flashbar-wrapper) {\n        display: block;\n        width: 100%;\n      }\n      .viking-flashbar {\n        display: flex;\n        align-items: flex-start;\n        gap: var(--viking-space-2);\n        padding: var(--viking-space-2);\n        border-radius: var(--viking-radius);\n        font-family: var(--viking-font-family);\n        border: 1px solid;\n        background: var(--viking-flashbar-bg, var(--viking-surface));\n      }\n      .viking-flashbar__icon {\n        flex-shrink: 0;\n        margin-top: var(--viking-space-0-5);\n      }\n      .viking-flashbar__content {\n        flex: 1;\n        min-width: 0;\n      }\n      .viking-flashbar__heading {\n        margin: 0;\n        font-size: var(--viking-font-size);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-flashbar-heading, var(--viking-text));\n      }\n      .viking-flashbar__description {\n        margin: var(--viking-space-0-5) 0 0;\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-flashbar-description, var(--viking-text-muted));\n        line-height: var(--viking-line-height-relaxed);\n      }\n      .viking-flashbar__actions {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        flex-shrink: 0;\n      }\n      .viking-flashbar__button {\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-medium);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        border-radius: var(--viking-radius-sm);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n        border: 1px solid transparent;\n      }\n      .viking-flashbar__button--primary {\n        background: var(--viking-flashbar-button-bg, var(--viking-accent));\n        color: var(--viking-flashbar-button-text, var(--viking-on-accent));\n      }\n      .viking-flashbar__button--primary:hover {\n        background: var(\n          --viking-flashbar-button-hover-bg,\n          var(--viking-accent-hover)\n        );\n      }\n      .viking-flashbar__button--secondary {\n        background: transparent;\n        color: var(--viking-text-muted);\n        border-color: var(--viking-border);\n      }\n      .viking-flashbar__button--secondary:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-flashbar__dismiss {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-control-height-sm);\n        height: var(--viking-control-height-sm);\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: 0;\n        border-radius: var(--viking-radius);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-flashbar__dismiss:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-flashbar--success {\n        --viking-flashbar-bg: color-mix(\n          in srgb,\n          var(--viking-success) 8%,\n          transparent\n        );\n        --viking-flashbar-heading: var(--viking-success);\n        --viking-flashbar-button-bg: var(--viking-success);\n        --viking-flashbar-button-hover-bg: color-mix(\n          in srgb,\n          var(--viking-success) 80%,\n          black 20%\n        );\n      }\n      .viking-flashbar--error {\n        --viking-flashbar-bg: color-mix(\n          in srgb,\n          var(--viking-danger) 8%,\n          transparent\n        );\n        --viking-flashbar-heading: var(--viking-danger);\n        --viking-flashbar-button-bg: var(--viking-danger);\n        --viking-flashbar-button-hover-bg: color-mix(\n          in srgb,\n          var(--viking-danger) 80%,\n          black 20%\n        );\n      }\n      .viking-flashbar--warning {\n        --viking-flashbar-bg: color-mix(\n          in srgb,\n          var(--viking-warning) 8%,\n          transparent\n        );\n        --viking-flashbar-heading: var(--viking-warning);\n        --viking-flashbar-button-bg: var(--viking-warning);\n        --viking-flashbar-button-hover-bg: color-mix(\n          in srgb,\n          var(--viking-warning) 80%,\n          black 20%\n        );\n      }\n      .viking-flashbar--info {\n        --viking-flashbar-bg: color-mix(\n          in srgb,\n          var(--viking-accent) 8%,\n          transparent\n        );\n        --viking-flashbar-heading: var(--viking-accent);\n        --viking-flashbar-button-bg: var(--viking-accent);\n        --viking-flashbar-button-hover-bg: var(--viking-accent-hover);\n      }\n    `,\n  ],\n})\nexport class VikingFlashbar {\n  readonly heading = input<string>(\"\");\n  readonly description = input<string>(\"\");\n  readonly type = input<VikingFlashbarType>(\"info\");\n  readonly dismissible = input<boolean>(true);\n  readonly primaryAction = input<VikingFlashbarAction | null>(null);\n  readonly secondaryAction = input<VikingFlashbarAction | null>(null);\n\n  readonly primaryClicked = output<void>();\n  readonly secondaryClicked = output<void>();\n\n  protected readonly dismissed = signal(false);\n\n  protected readonly iconName = computed(() => {\n    const icons: Record<VikingFlashbarType, string> = {\n      success: \"check-circle\",\n      error: \"alert-circle\",\n      warning: \"alert-triangle\",\n      info: \"info\",\n    };\n    return icons[this.type()];\n  });\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\nexport type VikingFormSectionLayout = \"inline\" | \"stack\" | \"status\";\n\n/**\n * viking-form-panel — groups related form sections inside a card without nested outlines.\n */\n@Component({\n  selector: \"viking-form-panel\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: \"viking-form-panel\" },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        gap: 0;\n        width: 100%;\n        min-width: 0;\n      }\n      :host ::ng-deep viking-form-section + viking-form-section {\n        border-top: 1px solid var(--viking-border-subtle);\n        margin-top: var(--viking-space-5);\n        padding-top: var(--viking-space-5);\n      }\n    `,\n  ],\n})\nexport class VikingFormPanel {}\n\n/**\n * viking-form-section — standard dashboard form row: heading, fields, and actions.\n * Use inside viking-form-panel (or a card body) to avoid nested bordered sub-forms.\n */\n@Component({\n  selector: \"viking-form-section\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-form-section\",\n    \"[class.viking-form-section-inline]\": \"layout() === 'inline'\",\n    \"[class.viking-form-section-stack]\": \"layout() === 'stack'\",\n    \"[class.viking-form-section-status]\": \"layout() === 'status'\",\n  },\n  template: `\n    <header class=\"viking-form-section-header\">\n      @if (icon()) {\n        <viking-icon\n          [name]=\"icon()!\"\n          [size]=\"16\"\n          class=\"viking-form-section-icon\"\n        />\n      }\n      <h3 class=\"viking-form-section-title\">{{ heading() }}</h3>\n    </header>\n\n    <div class=\"viking-form-section-body\">\n      <div class=\"viking-form-section-fields\">\n        <ng-content />\n      </div>\n      <div class=\"viking-form-section-actions\">\n        <ng-content select=\"[vikingFormActions]\" />\n      </div>\n    </div>\n\n    <div class=\"viking-form-section-footer\">\n      <ng-content select=\"[vikingFormFooter]\" />\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n        min-width: 0;\n        font-family: var(--viking-font-family);\n      }\n\n      .viking-form-section-header {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-2);\n        min-width: 0;\n      }\n\n      .viking-form-section-icon {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        width: 24px;\n        height: 24px;\n        border-radius: var(--viking-radius-sm);\n        background: var(--viking-accent-soft);\n        color: var(--viking-accent-strong);\n        flex-shrink: 0;\n      }\n\n      .viking-form-section-title {\n        margin: 0;\n        font-size: var(--viking-font-size-ui);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        text-transform: uppercase;\n        color: var(--viking-text);\n        line-height: var(--viking-line-height-tight);\n      }\n\n      .viking-form-section-body {\n        display: flex;\n        flex-direction: column;\n        align-items: stretch;\n        gap: var(--viking-space-4);\n        width: 100%;\n        min-width: 0;\n      }\n\n      .viking-form-section-fields {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        min-width: 0;\n        flex: 1;\n      }\n\n      .viking-form-section-actions {\n        display: flex;\n        flex-direction: column;\n        align-items: stretch;\n        gap: var(--viking-space-2);\n        flex-shrink: 0;\n      }\n\n      .viking-form-section-actions:empty {\n        display: none;\n      }\n\n      .viking-form-section-footer:empty {\n        display: none;\n      }\n\n      .viking-form-section-footer:not(:empty) {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n      }\n\n      :host(.viking-form-section-inline) .viking-form-section-body {\n        @media (min-width: 600px) {\n          flex-direction: row;\n          align-items: flex-end;\n        }\n      }\n\n      :host(.viking-form-section-inline) .viking-form-section-actions {\n        @media (min-width: 600px) {\n          align-items: center;\n          justify-content: flex-end;\n          width: auto;\n        }\n      }\n\n      :host(.viking-form-section-status) .viking-form-section-body {\n        @media (min-width: 600px) {\n          flex-direction: row;\n          align-items: flex-start;\n          justify-content: space-between;\n        }\n      }\n\n      :host(.viking-form-section-status) .viking-form-section-fields {\n        flex-direction: row;\n        align-items: flex-start;\n        gap: var(--viking-space-1);\n      }\n\n      :host(.viking-form-section-status) .viking-form-section-actions {\n        @media (min-width: 600px) {\n          align-items: flex-start;\n          padding-top: var(--viking-space-px);\n          margin-left: auto;\n        }\n      }\n\n      :host ::ng-deep viking-field {\n        width: 100%;\n        min-width: 0;\n      }\n    `,\n  ],\n})\nexport class VikingFormSection {\n  readonly heading = input.required<string>();\n  readonly icon = input<VikingIconName | null>(null);\n  readonly layout = input<VikingFormSectionLayout>(\"inline\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ElementRef,\n  inject,\n  input,\n  output,\n  signal,\n  viewChildren,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/** Represents a form field state for validation */\nexport interface VikingFormFieldState {\n  id: string;\n  valid: boolean;\n  errors: string[];\n}\n\n/**\n * viking-form-template — page-level form orchestration with error focus.\n * Based on Cloudscape Form Template pattern, adapted for Viking-UI.\n * Used for configuration, integrations, policies, pipelines, and account settings.\n */\n@Component({\n  selector: \"viking-form-template\",\n  standalone: true,\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class]\": \"hostClass()\",\n  },\n  template: `\n    <form class=\"viking-form-template\" novalidate (ngSubmit)=\"onSubmit($event)\">\n      @if (errorSummary()) {\n        <div class=\"viking-form-template__error-summary\" role=\"alert\">\n          <viking-icon\n            class=\"viking-form-template__error-icon\"\n            name=\"alert-circle\"\n            [size]=\"20\"\n          />\n          <div class=\"viking-form-template__error-content\">\n            <p class=\"viking-form-template__error-heading\">\n              {{ errorSummary()?.heading }}\n            </p>\n            @if (errorSummary()?.description) {\n              <p class=\"viking-form-template__error-description\">\n                {{ errorSummary()?.description }}\n              </p>\n            }\n          </div>\n        </div>\n      }\n\n      @if (infoMessage()) {\n        <div class=\"viking-form-template__info\" role=\"status\">\n          <viking-icon\n            class=\"viking-form-template__info-icon\"\n            name=\"info\"\n            [size]=\"20\"\n          />\n          <p class=\"viking-form-template__info-text\">{{ infoMessage() }}</p>\n        </div>\n      }\n\n      <div class=\"viking-form-template__body\">\n        <ng-content />\n      </div>\n\n      <footer class=\"viking-form-template__actions\">\n        <ng-content select=\"[vikingFormActions]\" />\n      </footer>\n    </form>\n  `,\n  styles: [\n    `\n      :host(.viking-form-template-wrapper) {\n        display: block;\n      }\n      .viking-form-template {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n      }\n      .viking-form-template__error-summary {\n        display: flex;\n        align-items: flex-start;\n        gap: var(--viking-space-2);\n        padding: var(--viking-space-2);\n        background: color-mix(in srgb, var(--viking-danger) 8%, transparent);\n        border: 1px solid var(--viking-danger-border, var(--viking-danger));\n        border-radius: var(--viking-radius);\n      }\n      .viking-form-template__error-icon {\n        color: var(--viking-danger);\n        flex-shrink: 0;\n        margin-top: var(--viking-space-0-5);\n      }\n      .viking-form-template__error-content {\n        flex: 1;\n      }\n      .viking-form-template__error-heading {\n        margin: 0;\n        font-size: var(--viking-font-size);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-danger);\n      }\n      .viking-form-template__error-description {\n        margin: var(--viking-space-0-5) 0 0;\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text-muted);\n      }\n      .viking-form-template__info {\n        display: flex;\n        align-items: flex-start;\n        gap: var(--viking-space-2);\n        padding: var(--viking-space-2);\n        background: color-mix(in srgb, var(--viking-accent) 8%, transparent);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n      }\n      .viking-form-template__info-icon {\n        color: var(--viking-accent);\n        flex-shrink: 0;\n        margin-top: var(--viking-space-0-5);\n      }\n      .viking-form-template__info-text {\n        margin: 0;\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n      }\n      .viking-form-template__actions {\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: flex-end;\n        gap: var(--viking-space-2);\n        padding-top: var(--viking-space-2);\n        border-top: 1px solid var(--viking-border);\n      }\n    `,\n  ],\n})\nexport class VikingFormTemplate {\n  readonly errorSummary = input<{\n    heading: string;\n    description?: string;\n  } | null>(null);\n  readonly infoMessage = input<string>(\"\");\n  readonly loading = input<boolean>(false);\n\n  readonly submit = output<void>();\n  readonly validSubmit = output<void>();\n\n  private readonly hostRef = inject(ElementRef);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-form-template-wrapper\",\n      this.loading() ? \"viking-form-template--loading\" : \"\",\n    ].join(\" \"),\n  );\n\n  protected readonly formElements = viewChildren(\n    \"viking-field, viking-input, viking-select\",\n    {\n      read: ElementRef,\n    },\n  );\n\n  protected readonly onSubmit = (event: Event): void => {\n    event.preventDefault();\n    this.submit.emit();\n    // Focus first invalid field after submission\n    this.focusFirstInvalid();\n  };\n\n  private focusFirstInvalid(): void {\n    const host = this.hostRef.nativeElement as HTMLElement;\n    const firstInvalid =\n      host.querySelector<HTMLElement>(\n        'viking-field[data-invalid=\"true\"], [aria-invalid=\"true\"], [data-invalid=\"true\"]',\n      ) ??\n      this.formElements().find((el) => {\n        const element = el.nativeElement as HTMLElement & {\n          checkValidity?: () => boolean;\n        };\n        return (\n          element.hasAttribute(\"data-invalid\") ||\n          element.classList.contains(\"viking-field-invalid\") ||\n          (element.checkValidity && !element.checkValidity())\n        );\n      })?.nativeElement;\n\n    if (!(firstInvalid instanceof HTMLElement)) return;\n    setTimeout(() => {\n      const control = firstInvalid.querySelector(\n        'input, select, textarea, [role=\"combobox\"], viking-input-wc',\n      );\n      if (control instanceof HTMLElement) {\n        control.focus();\n        return;\n      }\n      firstInvalid.focus();\n    });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  output,\n  signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-file-upload — drag & drop file zone.\n */\n@Component({\n  selector: \"viking-file-upload\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <label\n      class=\"viking-upload-zone\"\n      [class.viking-dragover]=\"dragOver()\"\n      (dragover)=\"onDragOver($event)\"\n      (dragleave)=\"dragOver.set(false)\"\n      (drop)=\"onDrop($event)\"\n    >\n      <input\n        type=\"file\"\n        [accept]=\"accept()\"\n        [multiple]=\"multiple()\"\n        [disabled]=\"disabled()\"\n        [attr.aria-label]=\"heading()\"\n        (change)=\"onSelect($event)\"\n      />\n      <viking-icon name=\"upload\" [size]=\"27\" />\n      <span class=\"viking-upload-heading\">{{ heading() }}</span>\n      <span class=\"viking-upload-hint\">{{ hint() }}</span>\n    </label>\n    @if (fileList().length > 0) {\n      <ul class=\"viking-upload-list\">\n        @for (file of fileList(); track file.name) {\n          <li class=\"viking-upload-file\">\n            <viking-icon name=\"file\" [size]=\"18\" />\n            <span class=\"viking-upload-name\">{{ file.name }}</span>\n            <span class=\"viking-upload-size\">{{ formatSize(file.size) }}</span>\n            <button\n              type=\"button\"\n              class=\"viking-upload-remove\"\n              [attr.aria-label]=\"'Remove ' + file.name\"\n              (click)=\"removeFile(file)\"\n            >\n              <viking-icon name=\"x\" [size]=\"16\" />\n            </button>\n          </li>\n        }\n      </ul>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      .viking-upload-zone {\n        position: relative;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-4) var(--viking-space-2);\n        border: 2px dashed var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        transition: var(--viking-transition);\n        text-align: center;\n      }\n      .viking-upload-zone:hover,\n      .viking-dragover {\n        border-color: var(--viking-accent);\n        background: var(--viking-accent-soft);\n        color: var(--viking-accent);\n      }\n      .viking-upload-zone:focus-within {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      /* The native input fills the drop zone so clicks and focus land on it. */\n      input {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        margin: 0;\n        opacity: 0;\n        cursor: pointer;\n      }\n      .viking-upload-heading {\n        font-size: var(--viking-font-size);\n        font-weight: 600;\n        color: var(--viking-text);\n      }\n      .viking-upload-hint {\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n      }\n      .viking-upload-list {\n        list-style: none;\n        margin: var(--viking-space-1) 0 0;\n        padding: 0;\n        display: flex;\n        flex-direction: column;\n        gap: calc(var(--viking-space-1) / 2);\n      }\n      .viking-upload-file {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-1);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n      }\n      .viking-upload-name {\n        flex: 1;\n        min-width: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n      .viking-upload-size {\n        color: var(--viking-text-muted);\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-upload-remove {\n        display: inline-flex;\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: var(--viking-space-0-5);\n        border-radius: var(--viking-radius-pill);\n      }\n      .viking-upload-remove:hover {\n        color: var(--viking-danger);\n      }\n      .viking-upload-remove:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: 1px;\n      }\n    `,\n  ],\n})\nexport class VikingFileUpload {\n  readonly heading = input<string>(\"Drop files here or click to browse\");\n  readonly hint = input<string>(\"\");\n  readonly accept = input<string>(\"\");\n  readonly multiple = input<boolean>(true);\n  readonly disabled = input<boolean>(false);\n\n  readonly filesChanged = output<File[]>();\n\n  protected readonly dragOver = signal(false);\n  protected readonly fileList = signal<File[]>([]);\n\n  protected onDragOver = (event: DragEvent): void => {\n    event.preventDefault();\n    this.dragOver.set(true);\n  };\n\n  protected onDrop = (event: DragEvent): void => {\n    event.preventDefault();\n    this.dragOver.set(false);\n    this.addFiles(Array.from(event.dataTransfer?.files ?? []));\n  };\n\n  protected onSelect = (event: Event): void => {\n    this.addFiles(Array.from((event.target as HTMLInputElement).files ?? []));\n  };\n\n  protected removeFile = (file: File): void => {\n    this.fileList.update((list) => list.filter((item) => item !== file));\n    this.filesChanged.emit(this.fileList());\n  };\n\n  protected formatSize = (bytes: number): string => {\n    if (bytes < 1024) {\n      return `${bytes} B`;\n    }\n    if (bytes < 1024 * 1024) {\n      return `${(bytes / 1024).toFixed(1)} KB`;\n    }\n    return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n  };\n\n  private addFiles(files: File[]): void {\n    if (files.length === 0) {\n      return;\n    }\n    this.fileList.update((list) =>\n      this.multiple() ? [...list, ...files] : files.slice(0, 1),\n    );\n    this.filesChanged.emit(this.fileList());\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\n/** viking-gauge-arc — semicircle gauge fill driven by value / max. */\n@Component({\n  selector: \"viking-gauge-arc\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-gauge-arc\",\n    \"aria-hidden\": \"true\",\n    \"[class.viking-gauge-arc-amber]\": \"tone() === 'amber'\",\n    \"[class.viking-gauge-arc-danger]\": \"tone() === 'danger'\",\n    \"[class.viking-gauge-arc-info]\": \"tone() === 'info'\",\n    \"[class.viking-gauge-arc-primary]\": \"tone() === 'primary'\",\n    \"[class.viking-gauge-arc-success]\": \"tone() === 'success'\",\n  },\n  template: `\n    <svg class=\"viking-gauge-arc-svg\" viewBox=\"0 0 100 60\" fill=\"none\">\n      <path class=\"viking-gauge-arc-bg\" d=\"M10 50A40 40 0 0 1 90 50\" />\n      <path\n        class=\"viking-gauge-arc-fill\"\n        d=\"M10 50A40 40 0 0 1 90 50\"\n        [attr.stroke-dasharray]=\"strokeDasharray()\"\n      />\n    </svg>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n        color: var(--viking-accent);\n      }\n\n      .viking-gauge-arc-svg {\n        width: 100%;\n        height: auto;\n        overflow: visible;\n        shape-rendering: geometricPrecision;\n      }\n\n      .viking-gauge-arc-bg,\n      .viking-gauge-arc-fill {\n        fill: none;\n        stroke-width: 8;\n        stroke-linecap: round;\n      }\n\n      .viking-gauge-arc-bg {\n        stroke: color-mix(in srgb, var(--viking-text-muted) 25%, transparent);\n      }\n\n      .viking-gauge-arc-fill {\n        stroke: currentColor;\n        transition: stroke-dasharray 0.4s var(--viking-ease-default);\n      }\n\n      :host(.viking-gauge-arc-amber) {\n        color: var(--viking-warning);\n      }\n\n      :host(.viking-gauge-arc-danger) {\n        color: var(--viking-danger);\n      }\n\n      :host(.viking-gauge-arc-info) {\n        color: var(--viking-info);\n      }\n\n      :host(.viking-gauge-arc-primary) {\n        color: var(--viking-accent);\n      }\n\n      :host(.viking-gauge-arc-success) {\n        color: var(--viking-success);\n      }\n    `,\n  ],\n})\nexport class VikingGaugeArc {\n  readonly value = input.required<number>();\n  readonly max = input<number>(100);\n  readonly circumference = input<number>(125.66);\n  readonly tone = input<\n    \"accent\" | \"amber\" | \"danger\" | \"info\" | \"primary\" | \"success\"\n  >(\"accent\");\n\n  protected readonly strokeDasharray = computed(() => {\n    const pct = Math.max(0, Math.min(1, this.value() / this.max()));\n    const filled = pct * this.circumference();\n    return `${filled} ${this.circumference()}`;\n  });\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/** viking-hud-panel — bordered dashboard panel with icon header. */\n@Component({\n  selector: \"viking-hud-panel\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-hud-panel panel-section\",\n  },\n  template: `\n    <div class=\"viking-hud-panel-header panel-header\">\n      @if (icon()) {\n        <viking-icon [name]=\"icon()!\" [size]=\"20\" class=\"panel-icon\" />\n      }\n      <h2 class=\"viking-hud-panel-title\">{{ title() }}</h2>\n      <ng-content select=\"[vikingHudPanelBadge]\" />\n    </div>\n    <ng-content />\n  `,\n})\nexport class VikingHudPanel {\n  readonly title = input.required<string>();\n  readonly icon = input<VikingIconName | null>(null);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  model,\n  signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport type VikingHelpPanelVariant = \"default\" | \"compact\";\n\n/**\n * viking-help-panel — contextual documentation and onboarding panel.\n * Based on Cloudscape Help Panel pattern, adapted for Viking-UI.\n * Used for inline docs, feature explanations, and onboarding tooltips.\n */\n@Component({\n  selector: \"viking-help-panel\",\n  standalone: true,\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"viking-help-panel\">\n      <header class=\"viking-help-panel__header\">\n        @if (icon()) {\n          <viking-icon\n            class=\"viking-help-panel__icon\"\n            [name]=\"icon()!\"\n            [size]=\"20\"\n          />\n        }\n        <h2 class=\"viking-help-panel__title\">{{ heading() }}</h2>\n        @if (dismissible()) {\n          <button\n            type=\"button\"\n            class=\"viking-help-panel__dismiss\"\n            aria-label=\"Dismiss help\"\n            (click)=\"dismissed.set(true)\"\n          >\n            <viking-icon name=\"x\" [size]=\"16\" />\n          </button>\n        }\n      </header>\n      <div class=\"viking-help-panel__body\">\n        <ng-content />\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      :host(.viking-help-panel-wrapper) {\n        display: block;\n      }\n      .viking-help-panel {\n        display: flex;\n        flex-direction: column;\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        font-family: var(--viking-font-family);\n      }\n      .viking-help-panel__header {\n        display: flex;\n        align-items: flex-start;\n        gap: var(--viking-space-2);\n        padding: var(--viking-space-2);\n        border-bottom: 1px solid var(--viking-border);\n        flex-shrink: 0;\n      }\n      .viking-help-panel__icon {\n        color: var(--viking-accent);\n        flex-shrink: 0;\n        margin-top: var(--viking-space-0-5);\n      }\n      .viking-help-panel__title {\n        margin: 0;\n        flex: 1;\n        font-size: var(--viking-font-size-ui);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        color: var(--viking-text);\n      }\n      .viking-help-panel__dismiss {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-control-height-sm);\n        height: var(--viking-control-height-sm);\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: 0;\n        border-radius: var(--viking-radius);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-help-panel__dismiss:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-help-panel__dismiss:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset-tight);\n      }\n      .viking-help-panel__body {\n        flex: 1;\n        overflow: auto;\n        padding: var(--viking-space-2);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        line-height: var(--viking-line-height-relaxed);\n      }\n      .viking-help-panel__body h3 {\n        margin: var(--viking-space-3) 0 var(--viking-space-1);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-text);\n        letter-spacing: var(--viking-letter-spacing-wide);\n        text-transform: uppercase;\n      }\n      .viking-help-panel__body p {\n        margin: 0 0 var(--viking-space-1);\n      }\n      .viking-help-panel__body ul {\n        margin: 0 0 var(--viking-space-2);\n        padding-left: var(--viking-space-3);\n      }\n      .viking-help-panel__body li {\n        margin-bottom: var(--viking-space-0-5);\n      }\n      .viking-help-panel--compact .viking-help-panel__header {\n        padding: var(--viking-space-1);\n      }\n      .viking-help-panel--compact .viking-help-panel__body {\n        padding: var(--viking-space-1);\n      }\n    `,\n  ],\n})\nexport class VikingHelpPanel {\n  readonly heading = input<string>(\"\");\n  readonly icon = input<string | null>(null);\n  readonly dismissible = input<boolean>(true);\n  readonly variant = input<VikingHelpPanelVariant>(\"default\");\n\n  protected readonly dismissed = signal(false);\n\n  protected readonly hostClass = computed(() =>\n    [\"viking-help-panel-wrapper\", `viking-help-panel--${this.variant()}`].join(\n      \" \",\n    ),\n  );\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-icon-text — icon aligned beside a title and optional description.\n * Use for status rows (MFA enrolled, connected accounts, subscription state).\n */\n@Component({\n  selector: \"viking-icon-text\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-icon-text\",\n    \"[class.viking-icon-text--muted]\": \"tone() === 'muted'\",\n  },\n  template: `\n    <span\n      class=\"viking-icon-text-icon\"\n      [class]=\"'viking-icon-text-icon--' + tone()\"\n    >\n      @if (icon()) {\n        <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n      } @else {\n        <ng-content select=\"[vikingIconTextIcon]\" />\n      }\n    </span>\n    <span class=\"viking-icon-text-body\">\n      <strong class=\"viking-icon-text-title\">{{ title() }}</strong>\n      @if (description()) {\n        <span class=\"viking-icon-text-desc\">{{ description() }}</span>\n      } @else {\n        <ng-content select=\"[vikingIconTextDesc]\" />\n      }\n    </span>\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        align-items: flex-start;\n        gap: var(--viking-space-2);\n        min-width: 0;\n        flex: 1;\n        font-family: var(--viking-font-family);\n      }\n\n      .viking-icon-text-icon {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n        width: 24px;\n        height: 24px;\n        margin-top: var(--viking-space-px);\n        border-radius: var(--viking-radius-sm);\n        background: var(--viking-accent-soft);\n        color: var(--viking-text-muted);\n      }\n\n      .viking-icon-text-icon--success {\n        color: var(--viking-success);\n        background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n      }\n\n      .viking-icon-text-icon--info {\n        color: var(--viking-info);\n        background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n      }\n\n      .viking-icon-text-icon--warning {\n        color: var(--viking-warning);\n        background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n      }\n\n      .viking-icon-text-icon--danger {\n        color: var(--viking-danger);\n        background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n      }\n\n      .viking-icon-text-icon--accent {\n        color: var(--viking-accent-strong);\n        background: var(--viking-accent-soft);\n      }\n\n      .viking-icon-text-body {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-0-5);\n        min-width: 0;\n        padding-top: var(--viking-space-px);\n      }\n\n      .viking-icon-text-title {\n        display: block;\n        font-size: var(--viking-font-size, 16px);\n        font-weight: var(--viking-font-weight-semibold, 600);\n        color: var(--viking-text);\n        line-height: var(--viking-line-height-tight, 1.25);\n      }\n\n      .viking-icon-text-desc {\n        display: block;\n        margin: 0;\n        font-size: var(--viking-font-size-sm, 14px);\n        font-weight: var(--viking-font-weight-regular, 400);\n        color: var(--viking-text-muted);\n        line-height: var(--viking-line-height-relaxed, 1.625);\n      }\n    `,\n  ],\n})\nexport class VikingIconText {\n  readonly icon = input<VikingIconName | null>(null);\n  readonly title = input.required<string>();\n  readonly description = input<string>(\"\");\n  readonly tone = input<VikingTone>(\"muted\");\n  readonly iconSize = input<number>(16);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  model,\n  output,\n  signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingBadge } from \"../badge/badge\";\nimport {\n  VikingKanbanCard,\n  VikingKanbanColumn,\n  VikingKanbanMove,\n} from \"../../core/types\";\n\n/**\n * viking-kanban — drag & drop board.\n * Native HTML5 drag and drop; emits `moved` and updates the `columns` model.\n */\n@Component({\n  selector: \"viking-kanban\",\n  imports: [VikingIcon, VikingBadge],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"viking-kanban\"\n      role=\"group\"\n      aria-label=\"Kanban board\"\n      tabindex=\"0\"\n    >\n      @for (column of columns(); track column.id) {\n        <section\n          class=\"viking-kanban-column\"\n          [attr.aria-label]=\"column.title\"\n          [class.viking-drop-target]=\"dropColumnId() === column.id\"\n          (dragover)=\"onDragOver($event, column.id)\"\n          (dragleave)=\"dropColumnId.set(null)\"\n          (drop)=\"onDrop($event, column.id)\"\n        >\n          <header class=\"viking-kanban-header\">\n            <span class=\"viking-kanban-title\">{{ column.title }}</span>\n            <viking-badge size=\"sm\">{{ column.cards.length }}</viking-badge>\n          </header>\n          <div class=\"viking-kanban-cards\">\n            @for (card of column.cards; track card.id) {\n              <article\n                class=\"viking-kanban-card\"\n                draggable=\"true\"\n                [class.viking-dragging]=\"draggingId() === card.id\"\n                (dragstart)=\"onDragStart(card, column.id)\"\n                (dragend)=\"resetDrag()\"\n              >\n                <div class=\"viking-kanban-card-header\">\n                  <span class=\"viking-kanban-card-title\">{{ card.title }}</span>\n                  <viking-icon\n                    class=\"viking-kanban-grip\"\n                    name=\"grip-vertical\"\n                    [size]=\"16\"\n                  />\n                </div>\n                @if (card.description) {\n                  <p class=\"viking-kanban-card-text\">{{ card.description }}</p>\n                }\n              </article>\n            }\n          </div>\n        </section>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      .viking-kanban:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-kanban {\n        display: grid;\n        grid-auto-flow: column;\n        grid-auto-columns: minmax(234px, 1fr);\n        gap: var(--viking-space-2);\n        overflow-x: auto;\n        padding-bottom: var(--viking-space-1);\n        font-family: var(--viking-font-family);\n      }\n      .viking-kanban-column {\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        padding: var(--viking-space-1);\n        transition: var(--viking-transition);\n      }\n      .viking-drop-target {\n        border-color: var(--viking-accent);\n        background: var(--viking-accent-soft);\n      }\n      .viking-kanban-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-1);\n      }\n      .viking-kanban-title {\n        font-size: var(--viking-font-size);\n        font-weight: 600;\n        color: var(--viking-text);\n        text-transform: uppercase;\n        letter-spacing: 0.04em;\n      }\n      .viking-kanban-cards {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n        min-height: var(--viking-space-4);\n      }\n      .viking-kanban-card {\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border);\n        border-radius: calc(var(--viking-radius) / 1.2);\n        box-shadow: var(--viking-shadow-sm);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        cursor: grab;\n        transition: var(--viking-transition);\n      }\n      .viking-kanban-card:hover {\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-dragging {\n        opacity: 0.45;\n      }\n      .viking-kanban-card-header {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-1);\n      }\n      .viking-kanban-card-title {\n        font-size: var(--viking-font-size);\n        font-weight: 600;\n        color: var(--viking-text);\n      }\n      .viking-kanban-grip {\n        color: var(--viking-text-muted);\n      }\n      .viking-kanban-card-text {\n        margin: var(--viking-space-0-5) 0 0;\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        line-height: 1.45;\n      }\n    `,\n  ],\n})\nexport class VikingKanban {\n  readonly columns = model<VikingKanbanColumn[]>([]);\n\n  readonly moved = output<VikingKanbanMove>();\n\n  protected readonly draggingId = signal<string | null>(null);\n  protected readonly dropColumnId = signal<string | null>(null);\n\n  private dragSource: { card: VikingKanbanCard; columnId: string } | null =\n    null;\n\n  protected onDragStart = (card: VikingKanbanCard, columnId: string): void => {\n    this.dragSource = { card, columnId };\n    this.draggingId.set(card.id);\n  };\n\n  protected onDragOver = (event: DragEvent, columnId: string): void => {\n    event.preventDefault();\n    this.dropColumnId.set(columnId);\n  };\n\n  protected onDrop = (event: DragEvent, toColumnId: string): void => {\n    event.preventDefault();\n    const source = this.dragSource;\n    this.resetDrag();\n    if (!source || source.columnId === toColumnId) {\n      return;\n    }\n    this.columns.update((columns) =>\n      columns.map((column) => {\n        if (column.id === source.columnId) {\n          return {\n            ...column,\n            cards: column.cards.filter((card) => card.id !== source.card.id),\n          };\n        }\n        if (column.id === toColumnId) {\n          return { ...column, cards: [...column.cards, source.card] };\n        }\n        return column;\n      }),\n    );\n    const target = this.columns().find((column) => column.id === toColumnId);\n    this.moved.emit({\n      cardId: source.card.id,\n      fromColumnId: source.columnId,\n      toColumnId,\n      toIndex: (target?.cards.length ?? 1) - 1,\n    });\n  };\n\n  protected resetDrag = (): void => {\n    this.draggingId.set(null);\n    this.dropColumnId.set(null);\n    this.dragSource = null;\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-label — accessible form label.\n */\n@Component({\n  selector: \"viking-label\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <label class=\"viking-label\" [attr.for]=\"htmlFor() || null\">\n      <ng-content />\n      @if (required()) {\n        <span class=\"viking-label-required\" aria-hidden=\"true\">*</span>\n      }\n    </label>\n  `,\n  styles: [\n    `\n      .viking-label {\n        display: inline-flex;\n        align-items: center;\n        gap: calc(var(--viking-space-1) / 4);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-ui);\n        font-weight: 600;\n        color: var(--viking-text);\n        letter-spacing: 0.01em;\n        line-height: 1.3;\n      }\n      .viking-label-required {\n        color: var(--viking-accent);\n      }\n    `,\n  ],\n})\nexport class VikingLabel {\n  readonly htmlFor = input<string>(\"\");\n  readonly required = input<boolean>(false);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingSpinner } from \"../spinner/spinner\";\n\n/**\n * viking-loading-overlay — blocks interaction with a branded loading panel.\n * Use on cards, panels, or full-page surfaces during async operations.\n */\n@Component({\n  selector: \"viking-loading-overlay\",\n  imports: [VikingSpinner],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"status\",\n    \"aria-live\": \"polite\",\n    class: \"suite-loading-overlay viking-loading-overlay\",\n    \"[attr.aria-label]\": \"label()\",\n    \"[class.viking-loading-overlay-full]\": \"full()\",\n  },\n  template: `\n    <div class=\"suite-loading-backdrop\" aria-hidden=\"true\"></div>\n    <div class=\"suite-loading-panel viking-loading-panel\">\n      <viking-spinner [size]=\"spinnerSize()\" [label]=\"label()\" />\n      @if (message()) {\n        <p class=\"suite-loading-title viking-loading-title\">{{ message() }}</p>\n      }\n      @if (detail()) {\n        <p class=\"suite-loading-text viking-loading-text\">{{ detail() }}</p>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        border-radius: inherit;\n      }\n      :host(.viking-loading-overlay-full) {\n        position: fixed;\n        z-index: var(--viking-z-overlay, var(--suite-z-overlay));\n        border-radius: 0;\n      }\n    `,\n  ],\n})\nexport class VikingLoadingOverlay {\n  readonly label = input<string>(\"Loading\");\n  /** Primary line under the spinner (short, present-tense). */\n  readonly message = input<string>(\"Working…\");\n  /** Optional secondary context (what is loading). */\n  readonly detail = input<string>(\"\");\n  readonly spinnerSize = input<number>(28);\n  readonly full = input<boolean>(false);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\nexport type VikingLayoutDensity = \"tight\" | \"compact\" | \"default\" | \"loose\";\nexport type VikingGridColumns = 1 | 2 | 3 | 4 | 6 | 12 | \"auto\";\nexport type VikingGridSpan = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\nexport type VikingColumnLayoutColumns = 1 | 2 | 3 | 4 | \"auto\";\nexport type VikingFormGridColumns = 1 | 2 | 3 | \"auto\";\nexport type VikingClusterJustify = \"start\" | \"between\" | \"end\";\nexport type VikingIntrinsicItemSize = \"compact\" | \"default\" | \"wide\";\n\n/** Constrained, centered page canvas shared by every application surface. */\n@Component({\n  selector: \"viking-page-shell\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingPageShell {\n  readonly spacing = input<VikingLayoutDensity>(\"default\");\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"page-inner-wrapper\",\n      \"viking-page-inner\",\n      \"viking-page-stack\",\n      this.spacing() === \"default\" ? \"\" : `viking-stack--${this.spacing()}`,\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n\n/** Semantic page section with the canonical cross-surface vertical rhythm. */\n@Component({\n  selector: \"viking-section\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: \"viking-section\" },\n  template: `<ng-content />`,\n})\nexport class VikingSection {}\n\n/** Vertical composition primitive backed by Viking spacing tokens. */\n@Component({\n  selector: \"viking-stack\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingStack {\n  readonly spacing = input<VikingLayoutDensity>(\"default\");\n  readonly centered = input<boolean>(false);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-stack\",\n      this.spacing() === \"default\" ? \"\" : `viking-stack--${this.spacing()}`,\n      this.centered() ? \"viking-stack--center\" : \"\",\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n\n/** Mobile-first responsive grid with equal columns, intrinsic flow, or 12 tracks. */\n@Component({\n  selector: \"viking-grid\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingGrid {\n  readonly columns = input<VikingGridColumns>(1);\n  readonly itemSize = input<VikingIntrinsicItemSize>(\"default\");\n  readonly spacing =\n    input<Extract<VikingLayoutDensity, \"tight\" | \"default\" | \"loose\">>(\n      \"default\",\n    );\n  readonly equalRows = input<boolean>(false);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-grid\",\n      `viking-grid--${this.columns()}`,\n      this.columns() === \"auto\" ? `viking-grid--item-${this.itemSize()}` : \"\",\n      this.spacing() === \"default\" ? \"\" : `viking-grid--${this.spacing()}`,\n      this.equalRows() ? \"viking-grid--equal-rows\" : \"\",\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n\n/** Equal-height grid recipe for peer cards, charts, HUD panels, and status surfaces. */\n@Component({\n  selector: \"viking-panel-grid\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingPanelGrid {\n  readonly columns = input<VikingGridColumns>(2);\n  readonly itemSize = input<VikingIntrinsicItemSize>(\"default\");\n  readonly spacing =\n    input<Extract<VikingLayoutDensity, \"tight\" | \"default\" | \"loose\">>(\n      \"default\",\n    );\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-grid\",\n      \"viking-panel-grid\",\n      `viking-grid--${this.columns()}`,\n      this.columns() === \"auto\" ? `viking-grid--item-${this.itemSize()}` : \"\",\n      this.spacing() === \"default\" ? \"\" : `viking-grid--${this.spacing()}`,\n      \"viking-grid--equal-rows\",\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n\n/** Responsive item for the 12-column Viking grid. Mobile defaults to full width. */\n@Component({\n  selector: \"viking-grid-item\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingGridItem {\n  readonly span = input<VikingGridSpan>(12);\n  readonly tabletSpan = input<VikingGridSpan | null>(null);\n  readonly desktopSpan = input<VikingGridSpan | null>(null);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-grid-item\",\n      `viking-grid-item--span-${this.span()}`,\n      this.tabletSpan() ? `viking-grid-item--span-md-${this.tabletSpan()}` : \"\",\n      this.desktopSpan()\n        ? `viking-grid-item--span-lg-${this.desktopSpan()}`\n        : \"\",\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n\n/** Balanced Cloudscape-style columns for cards, forms, and dashboard regions. */\n@Component({\n  selector: \"viking-column-layout\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingColumnLayout {\n  readonly columns = input<VikingColumnLayoutColumns>(2);\n  readonly itemSize = input<VikingIntrinsicItemSize>(\"default\");\n  readonly spacing =\n    input<Extract<VikingLayoutDensity, \"tight\" | \"default\" | \"loose\">>(\n      \"default\",\n    );\n  readonly equalRows = input<boolean>(true);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-column-layout\",\n      `viking-column-layout--${this.columns()}`,\n      this.columns() === \"auto\"\n        ? `viking-column-layout--item-${this.itemSize()}`\n        : \"\",\n      this.spacing() === \"default\"\n        ? \"\"\n        : `viking-column-layout--${this.spacing()}`,\n      this.equalRows() ? \"viking-column-layout--equal-rows\" : \"\",\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n\n/** Top-aligned responsive field recipe for labels and helper copy of any length. */\n@Component({\n  selector: \"viking-form-grid\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingFormGrid {\n  readonly columns = input<VikingFormGridColumns>(\"auto\");\n  readonly itemSize = input<VikingIntrinsicItemSize>(\"default\");\n  readonly spacing =\n    input<Extract<VikingLayoutDensity, \"tight\" | \"default\" | \"loose\">>(\n      \"default\",\n    );\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-column-layout\",\n      \"viking-form-grid\",\n      `viking-column-layout--${this.columns()}`,\n      this.columns() === \"auto\"\n        ? `viking-column-layout--item-${this.itemSize()}`\n        : \"\",\n      this.spacing() === \"default\"\n        ? \"\"\n        : `viking-column-layout--${this.spacing()}`,\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n\n/**\n * Intrinsic row-to-column layout that wraps from available space, not a\n * device-name breakpoint. Useful for toolbars, card groups, and form regions.\n */\n@Component({\n  selector: \"viking-switcher\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingSwitcher {\n  readonly itemSize = input<VikingIntrinsicItemSize>(\"default\");\n  readonly spacing =\n    input<Extract<VikingLayoutDensity, \"tight\" | \"default\" | \"loose\">>(\n      \"default\",\n    );\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-switcher\",\n      `viking-switcher--${this.itemSize()}`,\n      this.spacing() === \"default\" ? \"\" : `viking-switcher--${this.spacing()}`,\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n\n/** Wrapping inline layout for actions, filters, badges, and metadata. */\n@Component({\n  selector: \"viking-cluster\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `<ng-content />`,\n})\nexport class VikingCluster {\n  readonly justify = input<VikingClusterJustify>(\"start\");\n  readonly tight = input<boolean>(false);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-cluster\",\n      this.justify() === \"start\" ? \"\" : `viking-cluster--${this.justify()}`,\n      this.tight() ? \"viking-cluster--tight\" : \"\",\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport type { VikingIconName } from \"../../core/icons\";\nimport type { VikingTone } from \"../../core/types\";\n\n/** viking-metric-row — responsive grid row for HUD metric cards. */\n@Component({\n  selector: \"viking-metric-row\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `<div class=\"viking-metric-row hud-metrics\"><ng-content /></div>`,\n})\nexport class VikingMetricRow {}\n\n/** viking-metric-card — single KPI tile in a metric row. */\n@Component({\n  selector: \"viking-metric-card\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class]\": \"hostClass()\",\n    \"[attr.aria-label]\": \"ariaLabel()\",\n    \"[class.viking-metric-card-warning]\": \"variant() === 'warning'\",\n    \"[class.warning]\": \"variant() === 'warning'\",\n    \"[class.viking-metric-card-critical]\": \"variant() === 'critical'\",\n    \"[class.critical]\": \"variant() === 'critical'\",\n  },\n  template: `\n    @if (icon()) {\n      <viking-icon\n        class=\"viking-metric-card-icon\"\n        [name]=\"icon()!\"\n        [size]=\"20\"\n        [color]=\"iconColor()\"\n        aria-hidden=\"true\"\n      />\n    }\n    <span class=\"viking-metric-card-copy\">\n      @if (label()) {\n        <span class=\"viking-metric-label metric-label\">{{ label() }}</span>\n      }\n      <span class=\"viking-metric-value metric-value\">\n        <ng-content />{{ value() }}\n      </span>\n      @if (sublabel()) {\n        <span class=\"viking-metric-sublabel\">{{ sublabel() }}</span>\n      }\n    </span>\n  `,\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: flex;\n        align-items: flex-start;\n        justify-content: flex-start;\n        gap: var(--viking-space-3);\n        width: 100%;\n        min-width: 0;\n        align-self: stretch;\n        height: 100%;\n        min-height: var(--viking-touch-target-comfort);\n        padding: var(--viking-card-padding-compact, var(--viking-space-3));\n        border: 1px solid var(--viking-border-subtle);\n        border-radius: var(--viking-radius-xl);\n        background: var(\n          --viking-surface-recipe,\n          color-mix(\n            in srgb,\n            var(--viking-surface-alt) 74%,\n            var(--viking-surface)\n          )\n        );\n        color: var(--viking-text);\n        box-sizing: border-box;\n        box-shadow: var(--viking-shadow-sm);\n        overflow: hidden;\n        transition: var(--viking-transition-interactive);\n      }\n\n      :host::before {\n        content: \"\";\n        position: absolute;\n        inset: 0 0 auto;\n        height: 1px;\n        background: linear-gradient(\n          90deg,\n          transparent,\n          color-mix(\n            in srgb,\n            var(--viking-metallic-200)\n              var(--viking-surface-hairline-strength, 28%),\n            transparent\n          ),\n          transparent\n        );\n        pointer-events: none;\n      }\n\n      :host:hover {\n        border-color: var(--viking-border-strong);\n        box-shadow: var(--viking-shadow-md);\n        transform: translateY(var(--viking-state-hover-lift));\n        background: var(\n          --viking-surface-recipe-elevated,\n          var(--viking-surface-raised)\n        );\n      }\n\n      :host:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n\n      @media (prefers-reduced-motion: reduce) {\n        :host {\n          transition: none;\n        }\n        :host:hover {\n          transform: none;\n        }\n      }\n\n      .viking-metric-card-icon {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-space-5);\n        height: var(--viking-space-5);\n        padding: var(--viking-space-1);\n        border: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-border-subtle);\n        border-radius: var(--viking-radius-lg);\n        background: var(--viking-accent-soft);\n        color: var(--viking-text-muted);\n        box-sizing: border-box;\n        flex: 0 0 var(--viking-space-5);\n      }\n\n      .viking-metric-card-copy {\n        display: grid;\n        gap: var(--viking-space-1);\n        min-width: 0;\n        flex: 1 1 auto;\n      }\n\n      .viking-metric-label {\n        display: block;\n        color: var(--viking-text-muted);\n        font-size: var(--viking-font-size-2xs);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        line-height: var(--viking-line-height-snug);\n        text-transform: uppercase;\n        margin: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      .viking-metric-value {\n        display: block;\n        color: var(--viking-text);\n        font-size: var(--viking-font-size-lg);\n        font-weight: var(--viking-font-weight-bold);\n        line-height: var(--viking-line-height-tight);\n        font-variant-numeric: tabular-nums;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      .viking-metric-sublabel {\n        display: block;\n        color: var(--viking-text-subtle);\n        font-size: var(--viking-font-size-xs);\n        line-height: var(--viking-line-height-snug);\n        margin: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      :host(.viking-metric-card-success) .viking-metric-card-icon,\n      :host(.viking-metric-card-success) .viking-metric-value {\n        color: var(--viking-success);\n      }\n\n      :host(.viking-metric-card-warning) .viking-metric-card-icon,\n      :host(.viking-metric-card-warning) .viking-metric-value {\n        color: var(--viking-warning);\n      }\n\n      :host(.viking-metric-card-critical) .viking-metric-card-icon,\n      :host(.viking-metric-card-critical) .viking-metric-value {\n        color: var(--viking-danger-text);\n      }\n\n      :host(.viking-metric-card-info) .viking-metric-card-icon,\n      :host(.viking-metric-card-info) .viking-metric-value {\n        color: var(--viking-info);\n      }\n    `,\n  ],\n})\nexport class MetricCardComponent {\n  readonly icon = input<VikingIconName | string | null>(null);\n  readonly label = input<string>(\"\");\n  readonly value = input<string | number>(\"\");\n  readonly sublabel = input<string>(\"\");\n  readonly tone = input<VikingTone | \"default\">(\"default\");\n  readonly variant = input<\n    \"default\" | \"success\" | \"warning\" | \"critical\" | \"info\"\n  >(\"default\");\n\n  protected readonly resolvedTone = computed(() => {\n    const variant = this.variant();\n    if (variant !== \"default\") {\n      return variant;\n    }\n    return this.tone() === \"danger\" ? \"critical\" : this.tone();\n  });\n\n  protected readonly iconColor = computed(() => {\n    const tone = this.resolvedTone();\n    if (tone === \"critical\") {\n      return \"danger\";\n    }\n    return tone === \"default\" ? \"muted\" : tone;\n  });\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-metric-card\",\n      \"metric-card\",\n      \"col-span-6\",\n      \"col-span-md-6\",\n      this.resolvedTone() === \"default\"\n        ? \"\"\n        : `viking-metric-card-${this.resolvedTone()}`,\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n\n  protected readonly ariaLabel = computed(() => {\n    const label = this.label();\n    const value = this.value();\n    if (label && value !== \"\") {\n      return `${label}: ${value}`;\n    }\n    return label || `${value}`;\n  });\n}\n\nexport { MetricCardComponent as VikingMetricCard };\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n} from \"@angular/core\";\nimport { nextRovingIndex } from \"../../core/focus\";\n\n/**\n * viking-menubar — horizontal application menu bar with arrow-key roving focus.\n */\n@Component({\n  selector: \"viking-menubar\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"menubar\",\n    class: \"viking-menubar\",\n    \"aria-label\": \"Menu bar\",\n    \"(keydown)\": \"onKeydown($event)\",\n  },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-1);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        font-family: var(--viking-font-family);\n      }\n      :host ::ng-deep .viking-menubar-item,\n      :host ::ng-deep button[role=\"menuitem\"] {\n        font-size: var(--viking-font-size-ui);\n        font-weight: 600;\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        min-height: var(--viking-control-height-sm);\n        padding: 0 var(--viking-space-2);\n        border: 1px solid transparent;\n        border-radius: var(--viking-radius);\n        background: transparent;\n        color: var(--viking-text);\n        cursor: pointer;\n        transition: var(--viking-transition);\n      }\n      :host ::ng-deep .viking-menubar-item:hover,\n      :host ::ng-deep button[role=\"menuitem\"]:hover {\n        background: var(--viking-accent-soft);\n        color: var(--viking-accent);\n      }\n      :host ::ng-deep .viking-menubar-item:focus-visible,\n      :host ::ng-deep button[role=\"menuitem\"]:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n    `,\n  ],\n})\nexport class VikingMenubar implements AfterViewInit {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  ngAfterViewInit(): void {\n    this.syncRovingTabindex(0);\n  }\n\n  protected onKeydown = (event: KeyboardEvent): void => {\n    const items = this.menuItems();\n    if (items.length === 0) return;\n    const currentIndex = Math.max(\n      0,\n      items.findIndex((el) => el === document.activeElement),\n    );\n    const next = nextRovingIndex(event.key, currentIndex, items.length);\n    if (next === null) return;\n    event.preventDefault();\n    this.syncRovingTabindex(next);\n    items[next]?.focus({ preventScroll: true });\n  };\n\n  private menuItems = (): HTMLElement[] =>\n    Array.from(\n      this.host.nativeElement.querySelectorAll<HTMLElement>(\n        '[role=\"menuitem\"]',\n      ),\n    );\n\n  private syncRovingTabindex = (activeIndex: number): void => {\n    this.menuItems().forEach((el, index) => {\n      el.tabIndex = index === activeIndex ? 0 : -1;\n    });\n  };\n}\n\n/**\n * viking-menubar-item — menu item trigger for viking-menubar.\n */\n@Component({\n  selector: \"viking-menubar-item\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <button type=\"button\" role=\"menuitem\" class=\"viking-menubar-item\">\n      <ng-content />\n    </button>\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n      }\n    `,\n  ],\n})\nexport class VikingMenubarItem {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingSelectOption } from \"../../core/types\";\nimport type { VikingSelectWidth } from \"../select/select\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-native-select — styled native &lt;select&gt;.\n */\n@Component({\n  selector: \"viking-native-select\",\n  providers: [provideVikingCva(VikingNativeSelect)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class.viking-native-select-full]\": \"width() === 'full'\",\n    \"[class.viking-native-select-half]\": \"width() === 'half'\",\n  },\n  template: `\n    <label\n      class=\"viking-native-select\"\n      [class.viking-disabled]=\"disabled() || formDisabled()\"\n    >\n      @if (label()) {\n        <span class=\"viking-native-select-label\">{{ label() }}</span>\n      }\n      <select\n        class=\"viking-native-select-control\"\n        [id]=\"selectId\"\n        [disabled]=\"disabled() || formDisabled()\"\n        [value]=\"value() ?? ''\"\n        (change)=\"onSelectChange($event)\"\n        (blur)=\"onTouched()\"\n      >\n        @if (placeholder()) {\n          <option value=\"\" disabled [selected]=\"!value()\">\n            {{ placeholder() }}\n          </option>\n        }\n        @for (option of options(); track option.label) {\n          <option [value]=\"option.value\" [disabled]=\"option.disabled\">\n            {{ option.label }}\n          </option>\n        }\n      </select>\n    </label>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        min-width: 0;\n        font-family: var(--viking-font-family);\n      }\n      :host(.viking-native-select-full) {\n        width: 100%;\n      }\n      :host(.viking-native-select-half) {\n        width: 100%;\n        max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n      }\n      .viking-native-select {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n      }\n      .viking-native-select-label {\n        font-size: var(--viking-font-size-ui);\n        font-weight: 700;\n        color: var(--viking-text);\n      }\n      .viking-native-select-control {\n        width: 100%;\n        min-height: var(--viking-control-height);\n        padding: 0 var(--viking-space-2);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        cursor: pointer;\n        transition: var(--viking-transition);\n      }\n      .viking-native-select-control:hover:not(:disabled) {\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-native-select-control:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-disabled .viking-native-select-control {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n    `,\n  ],\n})\nexport class VikingNativeSelect extends VikingControl<string | number | null> {\n  readonly label = input(\"\");\n  readonly placeholder = input(\"\");\n  readonly options = input<VikingSelectOption[]>([]);\n  readonly disabled = input(false);\n  readonly width = input<VikingSelectWidth>(\"half\");\n\n  readonly value = model<string | number | null>(null);\n\n  protected readonly selectId = vikingUid(\"viking-native-select\");\n\n  writeValue(value: string | number | null): void {\n    this.value.set(value);\n  }\n\n  protected onSelectChange = (event: Event): void => {\n    const raw = (event.target as HTMLSelectElement).value;\n    const match = this.options().find((o) => String(o.value) === raw);\n    const next = (match?.value ?? raw) as string | number;\n    this.value.set(next);\n    this.onChange(next);\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\nexport interface VikingNavItem {\n  label: string;\n  href?: string;\n  active?: boolean;\n  disabled?: boolean;\n}\n\n/**\n * viking-navigation-menu — primary nav links with active indicator.\n */\n@Component({\n  selector: \"viking-navigation-menu\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"navigation\",\n    class: \"viking-navigation-menu\",\n    \"[attr.aria-label]\": \"label()\",\n  },\n  template: `\n    <ul class=\"viking-nav-list\" role=\"list\">\n      @for (item of items(); track item.label) {\n        <li class=\"viking-nav-item\" role=\"listitem\">\n          @if (item.href && !item.disabled) {\n            <a\n              class=\"viking-nav-link\"\n              [class.viking-active]=\"item.active\"\n              [href]=\"item.href\"\n              [attr.aria-current]=\"item.active ? 'page' : null\"\n            >\n              {{ item.label }}\n            </a>\n          } @else {\n            <span\n              class=\"viking-nav-link\"\n              [class.viking-active]=\"item.active\"\n              [class.viking-disabled]=\"item.disabled\"\n              [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\n            >\n              {{ item.label }}\n            </span>\n          }\n        </li>\n      }\n    </ul>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      .viking-nav-list {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        gap: var(--viking-space-0-5);\n        margin: 0;\n        padding: var(--viking-space-0-5);\n        list-style: none;\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius-lg);\n        background: color-mix(\n          in srgb,\n          var(--viking-surface-alt) 80%,\n          var(--viking-surface)\n        );\n        box-shadow: var(--viking-shadow-sm);\n      }\n      .viking-nav-link {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-height: var(--viking-control-height-sm);\n        min-width: var(--viking-btn-min-width, 120px);\n        padding: 0 var(--viking-space-2);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-text-muted);\n        text-decoration: none;\n        border-radius: var(--viking-radius);\n        border: 1px solid transparent;\n        transition: var(--viking-transition-interactive);\n        position: relative;\n      }\n      a.viking-nav-link:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n        border-color: var(--viking-border-subtle);\n      }\n      a.viking-nav-link:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-nav-link.viking-active {\n        color: var(--viking-accent-content);\n        background: var(--viking-accent);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-accent) 80%,\n          var(--viking-black)\n        );\n        box-shadow: var(--viking-shadow-sm);\n      }\n      .viking-nav-link.viking-disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n    `,\n  ],\n})\nexport class VikingNavigationMenu {\n  readonly label = input(\"Main\");\n  readonly items = input<VikingNavItem[]>([]);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-navbar — horizontal navigation container.\n * Compose with viking-navbar-item and any other inline content.\n */\n@Component({\n  selector: \"viking-navbar\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[attr.aria-label]\": \"label()\" },\n  template: `<nav class=\"viking-navbar\" [attr.aria-label]=\"label()\">\n    <ng-content />\n  </nav>`,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      .viking-navbar {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-0-5);\n        flex-wrap: wrap;\n        padding: var(--viking-space-0-5);\n        background: color-mix(in srgb, var(--viking-surface) 96%, transparent);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius-lg);\n        box-shadow: var(--viking-shadow-sm);\n      }\n    `,\n  ],\n})\nexport class VikingNavbar {\n  readonly label = input<string>(\"Primary\");\n}\n\n/** Navigation link/button inside viking-navbar. */\n@Component({\n  selector: \"viking-navbar-item\",\n  imports: [VikingIcon, NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <ng-template #content>\n      @if (icon()) {\n        <viking-icon [name]=\"icon()!\" [size]=\"18\" />\n      }\n      <ng-content />\n    </ng-template>\n\n    @if (href()) {\n      <a\n        class=\"viking-navbar-item\"\n        [href]=\"href()\"\n        [class.viking-current]=\"current()\"\n        [attr.aria-current]=\"current() ? 'page' : null\"\n      >\n        <ng-container *ngTemplateOutlet=\"content\" />\n      </a>\n    } @else {\n      <button\n        type=\"button\"\n        class=\"viking-navbar-item\"\n        [class.viking-current]=\"current()\"\n      >\n        <ng-container *ngTemplateOutlet=\"content\" />\n      </button>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n      }\n      .viking-navbar-item {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        border: 1px solid transparent;\n        background: transparent;\n        color: var(--viking-text-muted);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-medium);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        border-radius: var(--viking-radius);\n        text-decoration: none;\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n        position: relative;\n      }\n      .viking-navbar-item:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-navbar-item:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-current {\n        color: var(--viking-text);\n        font-weight: var(--viking-font-weight-semibold);\n        background: var(--viking-accent-soft);\n      }\n      .viking-current::after {\n        content: \"\";\n        position: absolute;\n        bottom: 0;\n        left: var(--viking-space-1);\n        right: var(--viking-space-1);\n        height: 2px;\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-accent);\n      }\n    `,\n  ],\n})\nexport class VikingNavbarItem {\n  readonly href = input<string | null>(null);\n  readonly icon = input<VikingIconName | null>(null);\n  readonly current = input<boolean>(false);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-otp-input — one-time-passcode input.\n * Uses one native field so SMS codes and password managers can autofill the\n * entire value atomically. ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-otp-input\",\n  providers: [provideVikingCva(VikingOtpInput)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class.viking-otp-centered]\": \"centered()\",\n  },\n  template: `\n    <div class=\"viking-otp\">\n      <input\n        class=\"viking-otp-input\"\n        type=\"text\"\n        inputmode=\"numeric\"\n        pattern=\"[0-9]*\"\n        autocomplete=\"one-time-code\"\n        [attr.maxlength]=\"length()\"\n        [attr.name]=\"name() || 'one-time-code'\"\n        [attr.id]=\"inputId() || null\"\n        [value]=\"value()\"\n        [disabled]=\"disabled() || formDisabled()\"\n        [attr.aria-label]=\"label() || 'One-time passcode'\"\n        [attr.aria-describedby]=\"describedBy() || null\"\n        [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n        [attr.aria-required]=\"required() ? 'true' : null\"\n        (input)=\"onInput($event)\"\n        (blur)=\"onTouched()\"\n      />\n    </div>\n  `,\n  styles: [\n    `\n      .viking-otp {\n        display: flex;\n        width: 100%;\n      }\n      :host(.viking-otp-centered) .viking-otp {\n        justify-content: center;\n      }\n      .viking-otp-input {\n        width: 100%;\n        min-width: 0;\n        min-height: var(--viking-control-height);\n        padding: 0 var(--viking-control-padding-x);\n        box-sizing: border-box;\n        text-align: center;\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-lg);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        color: var(--viking-text);\n        background: var(\n          --viking-surface-recipe-muted,\n          var(--viking-surface-alt)\n        );\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius-md);\n        box-shadow: var(--viking-shadow-xs);\n        transition: var(--viking-transition-interactive);\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-otp-input:hover:not(:disabled) {\n        border-color: color-mix(\n          in srgb,\n          var(--viking-accent) 35%,\n          var(--viking-border-strong)\n        );\n        box-shadow: var(--viking-shadow-sm);\n      }\n      .viking-otp-input:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n        border-color: var(--viking-accent);\n      }\n      .viking-otp-input:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n      }\n    `,\n  ],\n})\nexport class VikingOtpInput extends VikingControl<string> {\n  readonly length = input<number>(6);\n  readonly value = model<string>(\"\");\n  readonly label = input<string>(\"\");\n  /** HTML name on the first cell for SMS / password-manager OTP autofill. */\n  readonly name = input<string>(\"one-time-code\");\n  /** Optional id on the first cell for label[for] association. */\n  readonly inputId = input<string>(\"\");\n  /** Space-separated ids (description / error) from the parent field. */\n  readonly describedBy = input<string>(\"\");\n  readonly invalid = input<boolean>(false);\n  readonly required = input<boolean>(false);\n  readonly disabled = input<boolean>(false);\n  readonly centered = input<boolean>(false);\n\n  readonly completed = output<string>();\n\n  writeValue(value: string): void {\n    this.value.set(value ?? \"\");\n  }\n\n  private commit(next: string): void {\n    this.value.set(next);\n    this.onChange(next);\n    if (next.length === this.length()) {\n      this.completed.emit(next);\n    }\n  }\n\n  protected onInput = (event: Event): void => {\n    const inputElement = event.target as HTMLInputElement;\n    const digits = inputElement.value\n      .replace(/\\D/g, \"\")\n      .slice(0, this.length());\n    if (inputElement.value !== digits) {\n      inputElement.value = digits;\n    }\n    this.commit(digits);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport { fieldDescribedBy } from \"../../core/field-a11y\";\nimport { vikingUid } from \"../../core/uid\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingOtpInput } from \"../otp-input/otp-input\";\n\n/**\n * viking-verification-code-field — labeled, centered OTP entry for MFA and phone verification flows.\n */\n@Component({\n  selector: \"viking-verification-code-field\",\n  imports: [VikingOtpInput],\n  providers: [provideVikingCva(VikingVerificationCodeField)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-verification-code-field\",\n    \"[class.viking-verification-code-field-invalid]\": \"!!error()\",\n  },\n  template: `\n    <fieldset class=\"viking-verification-code-fieldset\">\n      @if (label()) {\n        <legend class=\"viking-verification-code-label\" [id]=\"labelId\">\n          {{ label() }}\n          @if (required()) {\n            <span class=\"viking-verification-code-required\" aria-hidden=\"true\"\n              >*</span\n            >\n          }\n        </legend>\n      }\n      <div class=\"viking-verification-code-control\">\n        <viking-otp-input\n          [length]=\"length()\"\n          [value]=\"value()\"\n          (valueChange)=\"onValueChange($event)\"\n          [disabled]=\"disabled() || formDisabled()\"\n          [label]=\"label()\"\n          [name]=\"name()\"\n          [inputId]=\"inputId\"\n          [describedBy]=\"otpDescribedBy() || ''\"\n          [invalid]=\"!!error()\"\n          [required]=\"required()\"\n          [centered]=\"true\"\n          (completed)=\"completed.emit($event)\"\n        />\n      </div>\n    </fieldset>\n    @if (description()) {\n      <p class=\"viking-verification-code-description\" [id]=\"descriptionId\">\n        {{ description() }}\n      </p>\n    }\n    @if (error()) {\n      <p\n        class=\"viking-verification-code-error\"\n        [id]=\"errorId\"\n        role=\"alert\"\n        aria-live=\"assertive\"\n        aria-atomic=\"true\"\n      >\n        <span class=\"suite-sr-only viking-sr-only\">Error: </span>{{ error() }}\n      </p>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n        font-family: var(--viking-font-family);\n      }\n\n      :host(.viking-verification-code-field-invalid) {\n        animation: viking-shake var(--viking-duration-slow)\n          var(--viking-ease-default);\n      }\n\n      .viking-verification-code-fieldset {\n        margin: 0;\n        padding: 0;\n        border: 0;\n        min-width: 0;\n        width: 100%;\n      }\n\n      .viking-verification-code-label {\n        display: block;\n        width: 100%;\n        margin-bottom: var(--viking-space-1);\n        padding: 0;\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-text);\n        letter-spacing: var(--viking-letter-spacing-wide);\n        line-height: var(--viking-line-height-tight);\n        text-align: center;\n      }\n\n      .viking-verification-code-required {\n        color: var(--viking-danger);\n        margin-left: var(--viking-space-0-5);\n      }\n\n      .viking-verification-code-control {\n        display: flex;\n        justify-content: center;\n        width: 100%;\n      }\n\n      .viking-verification-code-description,\n      .viking-verification-code-error {\n        margin: var(--viking-space-1) 0 0;\n        font-size: var(--viking-font-size-sm);\n        line-height: var(--viking-line-height-normal);\n        text-align: center;\n      }\n\n      .viking-verification-code-description {\n        color: var(--viking-text-muted);\n      }\n\n      .viking-verification-code-error {\n        color: var(--viking-danger-text, var(--viking-danger));\n        font-weight: var(--viking-font-weight-semibold);\n      }\n\n      @media (prefers-reduced-motion: reduce) {\n        :host(.viking-verification-code-field-invalid) {\n          animation: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingVerificationCodeField extends VikingControl<string> {\n  readonly length = input<number>(6);\n  readonly label = input<string>(\"Verification Code\");\n  readonly description = input<string>(\"\");\n  readonly error = input<string>(\"\");\n  readonly required = input<boolean>(false);\n  readonly disabled = input<boolean>(false);\n  /** Native name for SMS OTP autofill (password managers / OS text message codes). */\n  readonly name = input<string>(\"one-time-code\");\n\n  readonly completed = output<string>();\n\n  readonly value = model<string>(\"\");\n  protected readonly labelId = vikingUid(\"viking-verification-code-label\");\n  protected readonly inputId = vikingUid(\"viking-verification-code-input\");\n  protected readonly descriptionId = vikingUid(\n    \"viking-verification-code-description\",\n  );\n  protected readonly errorId = vikingUid(\"viking-verification-code-error\");\n  protected readonly otpDescribedBy = computed(() =>\n    fieldDescribedBy({\n      descriptionId: this.descriptionId,\n      errorId: this.errorId,\n      hasDescription: !!this.description(),\n      hasError: !!this.error(),\n    }),\n  );\n\n  writeValue(value: string): void {\n    this.value.set(value ?? \"\");\n  }\n\n  protected onValueChange = (next: string): void => {\n    this.value.set(next);\n    this.onChange(next);\n    this.onTouched();\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { Params, RouterLink } from \"@angular/router\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-page-back-link — consistent dashboard back navigation with fixed spacing\n * below the control so page titles never sit flush against the link.\n */\n@Component({\n  selector: \"viking-page-back-link\",\n  imports: [RouterLink, VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-page-back-link-host\",\n  },\n  template: `\n    <nav\n      class=\"viking-page-back-nav page-back-nav\"\n      [attr.aria-label]=\"navLabel()\"\n    >\n      <a\n        class=\"viking-page-back-link back-link\"\n        [routerLink]=\"route()\"\n        [queryParams]=\"queryParams()\"\n        [attr.aria-label]=\"label()\"\n      >\n        <viking-icon name=\"arrow-left\" [size]=\"18\" color=\"accent\" />\n        <span>{{ label() }}</span>\n      </a>\n    </nav>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n      }\n\n      .viking-page-back-nav {\n        margin: 0;\n        padding: 0;\n      }\n\n      .viking-page-back-link {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-0-5) 0;\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-accent-strong);\n        text-decoration: none;\n        border-radius: var(--viking-radius-xs);\n        transition: var(--viking-transition-interactive);\n      }\n\n      .viking-page-back-link:hover {\n        color: var(--viking-accent);\n      }\n\n      .viking-page-back-link:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n    `,\n  ],\n})\nexport class VikingPageBackLink {\n  readonly route = input<string | readonly string[]>(\"/dashboard\");\n  readonly queryParams = input<Params | null>(null);\n  readonly label = input<string>(\"Back to Dashboard\");\n  readonly navLabel = input<string>(\"Return to dashboard\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { Params } from \"@angular/router\";\nimport { VikingPageBackLink } from \"../page-back-link/page-back-link\";\n\n/**\n * viking-page-header — unified HUD page title block (tag, title, subtitle) with\n * optional back navigation and action slots.\n */\n@Component({\n  selector: \"viking-page-header\",\n  imports: [VikingPageBackLink],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class.viking-page-header-sidebar]\": \"layout() === 'sidebar'\",\n  },\n  template: `\n    <header\n      class=\"viking-page-header\"\n      [class.dashboard-topbar]=\"layout() === 'sidebar'\"\n      [class.hud-header]=\"layout() === 'hud'\"\n    >\n      <div class=\"viking-page-header-main title-group topbar-left\">\n        @if (backTo()) {\n          <viking-page-back-link\n            [route]=\"backTo()!\"\n            [queryParams]=\"backQueryParams()\"\n            [label]=\"backLabel()\"\n            [navLabel]=\"backNavLabel()\"\n          />\n        } @else {\n          <ng-content select=\"[vikingPageHeaderBack]\" />\n        }\n\n        <div class=\"viking-page-header-title-block\">\n          @if (tag()) {\n            <div class=\"section-tag-row\">\n              <span class=\"section-tag viking-page-header-tag\">{{\n                tag()\n              }}</span>\n            </div>\n          }\n          <h1 class=\"viking-page-header-title hud-title page-title\">\n            {{ title() }}\n          </h1>\n          @if (subtitle()) {\n            <p\n              class=\"viking-page-header-subtitle hud-subtitle page-description\"\n            >\n              {{ subtitle() }}\n            </p>\n          }\n          <ng-content select=\"[vikingPageHeaderExtra]\" />\n        </div>\n      </div>\n      <div class=\"viking-page-header-actions topbar-right\">\n        <ng-content select=\"[vikingPageHeaderActions]\" />\n      </div>\n    </header>\n  `,\n})\nexport class VikingPageHeader {\n  readonly tag = input<string>(\"\");\n  readonly title = input.required<string>();\n  readonly subtitle = input<string>(\"\");\n  readonly layout = input<\"hud\" | \"sidebar\">(\"hud\");\n  readonly backTo = input<string | readonly string[] | null>(null);\n  readonly backQueryParams = input<Params | null>(null);\n  readonly backLabel = input<string>(\"Back to Dashboard\");\n  readonly backNavLabel = input<string>(\"Return to dashboard\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\nexport type VikingPageTemplateDensity = \"compact\" | \"default\" | \"loose\";\nexport type VikingPageTemplateWidth = \"narrow\" | \"default\" | \"wide\" | \"full\";\n\n/** Route template with explicit header, actions, content, and footer regions. */\n@Component({\n  selector: \"viking-page-template\",\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `\n    <div class=\"page-inner-wrapper viking-page-template__inner\">\n      @if (headerContent()) {\n        <header class=\"viking-page-template__header\">\n          <div class=\"viking-page-template__heading\">\n            <ng-content select=\"[vikingPageTemplateHeader]\" />\n          </div>\n          <div class=\"viking-page-template__actions\">\n            <ng-content select=\"[vikingPageTemplateActions]\" />\n          </div>\n        </header>\n      }\n      <div class=\"viking-page-template__content\">\n        <ng-content select=\"[vikingPageTemplateContent]\" />\n        <ng-content />\n      </div>\n      @if (footerContent()) {\n        <footer class=\"viking-page-template__footer\">\n          <ng-content select=\"[vikingPageTemplateFooter]\" />\n        </footer>\n      }\n    </div>\n  `,\n})\nexport class VikingPageTemplate {\n  readonly density = input<VikingPageTemplateDensity>(\"default\");\n  readonly width = input<VikingPageTemplateWidth>(\"default\");\n  readonly headerContent = input<boolean>(false);\n  readonly footerContent = input<boolean>(false);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-page-template\",\n      `viking-page-template--${this.width()}`,\n      `viking-page-template--${this.density()}`,\n    ].join(\" \"),\n  );\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport { VikingIconComponent } from \"../icon/icon\";\n\nexport type VikingSectionTemplateLayout = \"grid\" | \"stack\";\n\n/** Section anatomy with a consistent title, description, actions, and body rhythm. */\n@Component({\n  selector: \"viking-section-template\",\n  standalone: true,\n  imports: [VikingIconComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"[class]\": \"hostClass()\" },\n  template: `\n    @if (!hideHeader()) {\n      <header class=\"viking-section__header\">\n        @if (icon()) {\n          <viking-icon\n            class=\"viking-section__icon\"\n            [name]=\"icon()!\"\n            [size]=\"20\"\n            [ariaHidden]=\"true\"\n          />\n        }\n        <div class=\"viking-section__heading-group\">\n          <h2 class=\"viking-section__title\">{{ heading() }}</h2>\n          @if (description()) {\n            <p class=\"viking-section__description\">{{ description() }}</p>\n          }\n        </div>\n        <div class=\"viking-section__actions\">\n          <ng-content select=\"[vikingSectionActions]\" />\n        </div>\n      </header>\n    }\n    @if (showDivider()) {\n      <div\n        class=\"viking-section__divider\"\n        role=\"separator\"\n        aria-hidden=\"true\"\n      ></div>\n    }\n    <div class=\"viking-section__body\"><ng-content /></div>\n  `,\n})\nexport class VikingSectionTemplate {\n  readonly heading = input<string>(\"\");\n  readonly icon = input<string | null>(null);\n  readonly description = input<string | null>(null);\n  readonly variant = input<\"default\" | \"large\">(\"default\");\n  readonly layout = input<VikingSectionTemplateLayout>(\"stack\");\n  readonly showDivider = input<boolean>(false);\n  readonly hideHeader = input<boolean>(false);\n\n  protected readonly hostClass = computed(() =>\n    [\n      \"viking-section-template\",\n      `viking-section--${this.layout()}`,\n      this.variant() === \"default\" ? \"\" : `viking-section--${this.variant()}`,\n    ]\n      .filter(Boolean)\n      .join(\" \"),\n  );\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-pagination — page navigation.\n */\n@Component({\n  selector: \"viking-pagination\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <nav class=\"viking-pagination\" aria-label=\"Pagination\">\n      <button\n        type=\"button\"\n        class=\"viking-page-btn\"\n        aria-label=\"Previous page\"\n        [disabled]=\"page() <= 1\"\n        (click)=\"goTo(page() - 1)\"\n      >\n        <viking-icon name=\"chevron-left\" [size]=\"18\" />\n      </button>\n      @for (item of pageItems(); track $index) {\n        @if (item === null) {\n          <span class=\"viking-page-ellipsis\" aria-hidden=\"true\">…</span>\n        } @else {\n          <button\n            type=\"button\"\n            class=\"viking-page-btn\"\n            [class.viking-page-current]=\"item === page()\"\n            [attr.aria-current]=\"item === page() ? 'page' : null\"\n            [attr.aria-label]=\"'Page ' + item\"\n            (click)=\"goTo(item)\"\n          >\n            {{ item }}\n          </button>\n        }\n      }\n      <button\n        type=\"button\"\n        class=\"viking-page-btn\"\n        aria-label=\"Next page\"\n        [disabled]=\"page() >= totalPages()\"\n        (click)=\"goTo(page() + 1)\"\n      >\n        <viking-icon name=\"chevron-right\" [size]=\"18\" />\n      </button>\n    </nav>\n  `,\n  styles: [\n    `\n      .viking-pagination {\n        display: flex;\n        align-items: center;\n        gap: calc(var(--viking-space-1) / 2);\n        flex-wrap: wrap;\n      }\n      .viking-page-btn {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        min-width: var(--viking-touch-target-min, 44px);\n        min-height: var(--viking-touch-target-min, 44px);\n        height: auto;\n        padding: 0 var(--viking-space-1);\n        border: 1px solid var(--viking-border-subtle);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-medium);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n        font-variant-numeric: tabular-nums;\n        box-shadow: var(--viking-shadow-xs);\n      }\n      .viking-page-btn:hover:not(:disabled):not(.viking-page-current) {\n        background: var(--viking-accent-soft);\n        border-color: var(--viking-accent-strong);\n        transform: translateY(var(--viking-state-hover-lift));\n      }\n      .viking-page-btn:active:not(:disabled):not(.viking-page-current) {\n        transform: translateY(0) scale(var(--viking-state-active-scale));\n      }\n      .viking-page-btn:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-page-btn:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-page-current {\n        background: var(--viking-accent);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-accent) 80%,\n          var(--viking-black)\n        );\n        color: var(--viking-accent-content);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-bold);\n        box-shadow: var(--viking-shadow-sm);\n      }\n      .viking-page-ellipsis {\n        color: var(--viking-text-muted);\n        padding: 0 var(--viking-space-1);\n        font-size: var(--viking-font-size);\n      }\n    `,\n  ],\n})\nexport class VikingPagination {\n  readonly page = model<number>(1);\n  readonly totalPages = input.required<number>();\n\n  /** Windowed page list with null entries marking ellipses. */\n  protected readonly pageItems = computed<(number | null)[]>(() => {\n    const total = this.totalPages();\n    const current = this.page();\n    if (total <= 7) {\n      return Array.from({ length: total }, (_, index) => index + 1);\n    }\n    const pages = new Set<number>([\n      1,\n      2,\n      total - 1,\n      total,\n      current - 1,\n      current,\n      current + 1,\n    ]);\n    const sorted = [...pages]\n      .filter((value) => value >= 1 && value <= total)\n      .sort((a, b) => a - b);\n    const items: (number | null)[] = [];\n    let previous = 0;\n    for (const value of sorted) {\n      if (value - previous > 1) {\n        items.push(null);\n      }\n      items.push(value);\n      previous = value;\n    }\n    return items;\n  });\n\n  protected goTo = (target: number): void => {\n    const clamped = Math.min(this.totalPages(), Math.max(1, target));\n    this.page.set(clamped);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n  signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-pillbox — multi-value tag input.\n * Type and press Enter (or comma) to add pills. ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-pillbox\",\n  imports: [VikingIcon],\n  providers: [provideVikingCva(VikingPillbox)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"viking-control viking-pillbox\"\n      [class.viking-disabled]=\"disabled() || formDisabled()\"\n      role=\"group\"\n      [attr.aria-label]=\"label() || 'Tags'\"\n    >\n      @for (pill of values(); track pill) {\n        <span class=\"viking-pill\">\n          {{ pill }}\n          <button\n            type=\"button\"\n            class=\"viking-pill-remove\"\n            [attr.aria-label]=\"'Remove ' + pill\"\n            [disabled]=\"disabled() || formDisabled()\"\n            (click)=\"remove(pill)\"\n          >\n            <viking-icon name=\"x\" [size]=\"13\" />\n          </button>\n        </span>\n      }\n      <input\n        type=\"text\"\n        [placeholder]=\"values().length === 0 ? placeholder() : ''\"\n        [value]=\"draft()\"\n        [disabled]=\"disabled() || formDisabled()\"\n        [attr.aria-label]=\"label() || placeholder() || 'Add tag'\"\n        (input)=\"onDraftInput($event)\"\n        (keydown)=\"onKeydown($event)\"\n        (blur)=\"onTouched()\"\n      />\n    </div>\n  `,\n  styles: [\n    `\n      .viking-pillbox {\n        display: flex;\n        align-items: center;\n        flex-wrap: wrap;\n        gap: calc(var(--viking-space-1) / 1.5);\n        min-height: var(--viking-control-height);\n        padding: calc(var(--viking-space-1) / 1.5) var(--viking-space-1);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-sm);\n        transition: var(--viking-transition);\n        cursor: text;\n      }\n      .viking-pillbox:focus-within {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-disabled {\n        opacity: var(--viking-state-disabled-opacity);\n      }\n      .viking-pill {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-0-5);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        font-weight: 500;\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n        border: 1px solid var(--viking-accent-strong);\n        border-radius: var(--viking-radius-pill);\n        padding: var(--viking-space-0-5) var(--viking-space-1);\n        line-height: 1.35;\n      }\n      .viking-pill-remove {\n        display: inline-flex;\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: var(--viking-space-0-5);\n        border-radius: var(--viking-radius-pill);\n      }\n      .viking-pill-remove:hover {\n        color: var(--viking-danger);\n      }\n      .viking-pill-remove:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: 1px;\n      }\n      input {\n        flex: 1;\n        min-width: 108px;\n        border: none;\n        outline: none;\n        background: transparent;\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        padding: calc(var(--viking-space-1) / 2);\n      }\n      input::placeholder {\n        color: var(--viking-text-muted);\n      }\n    `,\n  ],\n})\nexport class VikingPillbox extends VikingControl<string[]> {\n  readonly values = model<string[]>([]);\n  readonly placeholder = input<string>(\"Add a tag…\");\n  readonly label = input<string>(\"\");\n  readonly disabled = input<boolean>(false);\n\n  protected readonly draft = signal(\"\");\n\n  writeValue(value: string[]): void {\n    this.values.set(value ?? []);\n  }\n\n  protected onDraftInput = (event: Event): void => {\n    if (event.target instanceof HTMLInputElement) {\n      this.draft.set(event.target.value);\n    }\n  };\n\n  protected onKeydown = (event: KeyboardEvent): void => {\n    if (event.key === \"Enter\" || event.key === \",\") {\n      event.preventDefault();\n      const next = this.draft().trim().replace(/,$/, \"\");\n      if (next && !this.values().includes(next)) {\n        this.values.update((list) => [...list, next]);\n        this.onChange(this.values());\n      }\n      this.draft.set(\"\");\n    } else if (\n      event.key === \"Backspace\" &&\n      !this.draft() &&\n      this.values().length > 0\n    ) {\n      this.remove(this.values()[this.values().length - 1]);\n    }\n  };\n\n  protected remove = (pill: string): void => {\n    this.values.update((list) => list.filter((item) => item !== pill));\n    this.onChange(this.values());\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  effect,\n  inject,\n  input,\n  model,\n} from \"@angular/core\";\nimport {\n  captureReturnFocus,\n  focusFirst,\n  restoreFocus,\n  trapTabKey,\n} from \"../../core/focus\";\n\nlet popoverSeq = 0;\n\n/**\n * viking-popover — anchored floating panel.\n * Project the trigger with the `vikingTrigger` attribute; everything else becomes\n * the panel content. Closes on Escape or outside interaction.\n */\n@Component({\n  selector: \"viking-popover\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"(click)\": \"onHostClick($event)\",\n    \"(document:click)\": \"onDocumentClick($event)\",\n    \"(keydown)\": \"onHostKeydown($event)\",\n  },\n  template: `\n    <span class=\"viking-popover-trigger\">\n      <ng-content select=\"[vikingTrigger]\" />\n    </span>\n    @if (open()) {\n      <div\n        class=\"viking-popover-panel\"\n        [id]=\"panelId\"\n        [class.viking-popover-end]=\"align() === 'end'\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        tabindex=\"-1\"\n        [attr.aria-label]=\"label()\"\n        (keydown)=\"onPanelKeydown($event)\"\n      >\n        <ng-content />\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: inline-block;\n      }\n      .viking-popover-trigger {\n        display: inline-flex;\n      }\n      .viking-popover-panel {\n        position: absolute;\n        top: calc(100% + var(--viking-space-1));\n        left: 0;\n        min-width: 234px;\n        max-width: 90vw;\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-md);\n        padding: var(--viking-space-2);\n        z-index: var(--viking-z-overlay);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-ui);\n        color: var(--viking-text);\n      }\n      .viking-popover-end {\n        left: auto;\n        right: 0;\n      }\n    `,\n  ],\n})\nexport class VikingPopover {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected readonly panelId = `viking-popover-panel-${++popoverSeq}`;\n  private returnFocus: HTMLElement | null = null;\n\n  readonly open = model<boolean>(false);\n  readonly align = input<\"start\" | \"end\">(\"start\");\n  readonly label = input<string>(\"Popover\");\n\n  constructor() {\n    let wasOpen = false;\n    effect(() => {\n      const isOpen = this.open();\n      queueMicrotask(() => {\n        this.syncTriggerAria(isOpen);\n        if (isOpen && !wasOpen) {\n          this.returnFocus = captureReturnFocus();\n          const panel = this.host.nativeElement.querySelector<HTMLElement>(\n            `#${this.panelId}`,\n          );\n          if (panel) focusFirst(panel);\n        } else if (!isOpen && wasOpen) {\n          restoreFocus(this.returnFocus);\n          this.returnFocus = null;\n        }\n        wasOpen = isOpen;\n      });\n    });\n  }\n\n  /** Toggles when the (focusable, projected) trigger is activated. */\n  protected onHostClick = (event: Event): void => {\n    const trigger = this.host.nativeElement.querySelector(\n      \".viking-popover-trigger\",\n    );\n    if (trigger?.contains(event.target as Node)) {\n      this.open.update((value) => !value);\n    }\n  };\n\n  /** Switch / keyboard: Enter, Space, ArrowDown open (mirror dropdown). */\n  protected onHostKeydown = (event: KeyboardEvent): void => {\n    if (event.key === \"Escape\" && this.open()) {\n      event.preventDefault();\n      this.open.set(false);\n      return;\n    }\n    const trigger = this.host.nativeElement.querySelector(\n      \".viking-popover-trigger\",\n    );\n    if (!trigger?.contains(event.target as Node)) return;\n    if (\n      !this.open() &&\n      (event.key === \"ArrowDown\" || event.key === \"Enter\" || event.key === \" \")\n    ) {\n      event.preventDefault();\n      this.open.set(true);\n    }\n  };\n\n  protected onDocumentClick = (event: Event): void => {\n    if (\n      this.open() &&\n      !this.host.nativeElement.contains(event.target as Node)\n    ) {\n      this.open.set(false);\n    }\n  };\n\n  protected onPanelKeydown = (event: KeyboardEvent): void => {\n    if (event.key === \"Escape\") {\n      event.preventDefault();\n      this.open.set(false);\n      return;\n    }\n    const panel = event.currentTarget as HTMLElement;\n    trapTabKey(event, panel);\n  };\n\n  private syncTriggerAria = (isOpen: boolean): void => {\n    const root = this.host.nativeElement.querySelector(\n      \".viking-popover-trigger\",\n    );\n    if (!root) return;\n    const control =\n      root.querySelector<HTMLElement>(\n        \"button, a[href], [role='button'], summary, .viking-btn, .suite-btn, .fj-btn\",\n      ) ?? (root.firstElementChild as HTMLElement | null);\n    if (!control) return;\n    control.setAttribute(\"aria-expanded\", String(isOpen));\n    control.setAttribute(\"aria-haspopup\", \"dialog\");\n    control.setAttribute(\"aria-controls\", this.panelId);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport interface VikingPropertyFilterItem {\n  key: string;\n  value: string | number | boolean;\n  operator?: string;\n}\n\nexport interface VikingPropertyFilterOption {\n  propertyKey: string;\n  value: string;\n  label?: string;\n  operators?: string[];\n}\n\n/**\n * viking-property-filter — faceted filtering with property-value-operator grammar.\n * Based on Cloudscape Property Filter pattern, adapted for Viking-UI.\n * Used for filtering pipelines, incidents, endpoints by status, priority, etc.\n */\n@Component({\n  selector: \"viking-property-filter\",\n  standalone: true,\n  imports: [FormsModule, VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"viking-property-filter\">\n      <div class=\"viking-property-filter__input-wrapper\">\n        <viking-icon\n          class=\"viking-property-filter__icon\"\n          name=\"search\"\n          [size]=\"18\"\n          [ariaHidden]=\"true\"\n        />\n        <input\n          #filterInput\n          type=\"text\"\n          class=\"viking-property-filter__input\"\n          [placeholder]=\"placeholder()\"\n          [(ngModel)]=\"query\"\n          (ngModelChange)=\"onQueryChange($event)\"\n          autocomplete=\"off\"\n        />\n      </div>\n      @if (tags().length > 0) {\n        <div class=\"viking-property-filter__tags\">\n          @for (tag of tags(); track $index) {\n            <span class=\"viking-property-filter__tag\">\n              <span class=\"viking-property-filter__tag-key\">{{ tag.key }}</span>\n              <span class=\"viking-property-filter__tag-separator\">:</span>\n              <span class=\"viking-property-filter__tag-value\">{{\n                tag.value\n              }}</span>\n              <button\n                type=\"button\"\n                class=\"viking-property-filter__tag-remove\"\n                aria-label=\"Remove filter\"\n                (click)=\"removeTag($index)\"\n              >\n                <viking-icon name=\"x\" [size]=\"14\" />\n              </button>\n            </span>\n          }\n        </div>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host(.viking-property-filter-wrapper) {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      .viking-property-filter {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n      }\n      .viking-property-filter__input-wrapper {\n        position: relative;\n        display: flex;\n        align-items: center;\n      }\n      .viking-property-filter__icon {\n        position: absolute;\n        left: var(--viking-space-2);\n        color: var(--viking-text-muted);\n        pointer-events: none;\n      }\n      .viking-property-filter__input {\n        width: 100%;\n        padding-left: calc(var(--viking-space-2) + var(--viking-icon-size-lg));\n        padding-right: var(--viking-space-2);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        background: var(--viking-surface-input);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        height: var(--viking-control-height);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-property-filter__input:focus {\n        outline: none;\n        border-color: var(--viking-ring);\n        box-shadow: 0 0 0 2px\n          color-mix(in srgb, var(--viking-ring) 40%, transparent);\n      }\n      .viking-property-filter__tags {\n        display: flex;\n        flex-wrap: wrap;\n        gap: var(--viking-space-1);\n        align-items: center;\n      }\n      .viking-property-filter__tag {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-0-5);\n        padding: var(--viking-space-0-5) var(--viking-space-1);\n        background: var(--viking-accent-soft);\n        border: 1px solid var(--viking-border-subtle);\n        border-radius: var(--viking-radius-sm);\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text);\n      }\n      .viking-property-filter__tag-key {\n        font-weight: var(--viking-font-weight-semibold);\n      }\n      .viking-property-filter__tag-separator {\n        color: var(--viking-text-muted);\n      }\n      .viking-property-filter__tag-remove {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: 18px;\n        height: 18px;\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: 0;\n        border-radius: var(--viking-radius-sm);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-property-filter__tag-remove:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent);\n      }\n    `,\n  ],\n})\nexport class VikingPropertyFilter {\n  readonly placeholder = input<string>(\"Search by property key:value\");\n  readonly options = input<VikingPropertyFilterOption[]>([]);\n  readonly allowFreeform = input<boolean>(true);\n  readonly enableCaret = input<boolean>(true);\n\n  readonly query = model<string>(\"\");\n  readonly items = model<VikingPropertyFilterItem[]>([]);\n\n  readonly filterChange = output<VikingPropertyFilterItem[]>();\n\n  protected readonly tags = computed(() => this.items());\n\n  protected onQueryChange(value: string): void {\n    // Parse query and extract property filters\n    if (value.match(/^[a-zA-Z0-9_-]+:/)) {\n      const match = value.match(/^([a-zA-Z0-9_-]+):\\s*(.+)$/);\n      if (match) {\n        const [, key, val] = match;\n        this.items.update((items) => [...items, { key, value: val }]);\n        this.query.set(\"\");\n        this.filterChange.emit(this.items());\n      }\n    }\n  }\n\n  protected removeTag(index: number): void {\n    this.items.update((items) => items.filter((_, i) => i !== index));\n    this.filterChange.emit(this.items());\n  }\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingAvatar } from \"../avatar/avatar\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-profile — user identity block.\n * Project actions (e.g. viking-button) as content.\n */\n@Component({\n  selector: \"viking-profile\",\n  imports: [VikingAvatar],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <viking-avatar\n      [src]=\"avatarSrc()\"\n      [name]=\"name()\"\n      [size]=\"45\"\n      [status]=\"status()\"\n    />\n    <div class=\"viking-profile-identity\">\n      <span class=\"viking-profile-name\">{{ name() }}</span>\n      @if (detail()) {\n        <span class=\"viking-profile-detail\">{{ detail() }}</span>\n      }\n    </div>\n    <div class=\"viking-profile-actions\"><ng-content /></div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-2);\n        font-family: var(--viking-font-family);\n      }\n      .viking-profile-identity {\n        display: flex;\n        flex-direction: column;\n        min-width: 0;\n        flex: 1;\n      }\n      .viking-profile-name {\n        font-size: var(--viking-font-size);\n        font-weight: 600;\n        color: var(--viking-text);\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n      .viking-profile-detail {\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n      .viking-profile-actions {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n      }\n      .viking-profile-actions:empty {\n        display: none;\n      }\n    `,\n  ],\n})\nexport class VikingProfile {\n  readonly name = input.required<string>();\n  readonly detail = input<string>(\"\");\n  readonly avatarSrc = input<string | null>(null);\n  readonly status = input<VikingTone | null>(null);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-progress — determinate/indeterminate progress bar\n *.\n */\n@Component({\n  selector: \"viking-progress\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (label()) {\n      <div class=\"viking-progress-header\">\n        <span class=\"viking-progress-label\">{{ label() }}</span>\n        @if (!indeterminate()) {\n          <span class=\"viking-progress-value\">{{ clamped() }}%</span>\n        }\n      </div>\n    }\n    <div\n      class=\"viking-progress-track\"\n      role=\"progressbar\"\n      [attr.aria-label]=\"label() || 'Progress'\"\n      [attr.aria-valuemin]=\"0\"\n      [attr.aria-valuemax]=\"100\"\n      [attr.aria-valuenow]=\"indeterminate() ? null : clamped()\"\n    >\n      <div\n        class=\"viking-progress-bar\"\n        [class.viking-indeterminate]=\"indeterminate()\"\n        [class]=\"'viking-bar-' + tone()\"\n        [style.width.%]=\"indeterminate() ? 40 : clamped()\"\n      ></div>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      .viking-progress-header {\n        display: flex;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        margin-bottom: calc(var(--viking-space-1) / 2);\n        font-size: var(--viking-font-size);\n      }\n      .viking-progress-label {\n        color: var(--viking-text);\n        font-weight: 500;\n      }\n      .viking-progress-value {\n        color: var(--viking-text-muted);\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-progress-track {\n        position: relative;\n        height: var(--viking-space-1);\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border);\n        overflow: hidden;\n      }\n      .viking-progress-bar {\n        height: 100%;\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-accent);\n        transition: width 0.3s ease;\n      }\n      .viking-bar-secondary {\n        background: var(--viking-accent-secondary);\n      }\n      .viking-bar-success {\n        background: var(--viking-success);\n      }\n      .viking-bar-info {\n        background: var(--viking-info);\n      }\n      .viking-bar-warning {\n        background: var(--viking-warning);\n      }\n      .viking-bar-danger {\n        background: var(--viking-danger);\n      }\n      .viking-bar-muted {\n        background: var(--viking-text-muted);\n      }\n      .viking-indeterminate {\n        position: absolute;\n        animation: viking-progress-slide 1.2s ease-in-out infinite;\n      }\n      @keyframes viking-progress-slide {\n        from {\n          left: -40%;\n        }\n        to {\n          left: 100%;\n        }\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .viking-indeterminate {\n          animation: none;\n          left: 0;\n          width: 40%;\n          opacity: 0.85;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingProgress {\n  readonly value = input<number>(0);\n  readonly label = input<string>(\"\");\n  readonly tone = input<VikingTone>(\"accent\");\n  readonly indeterminate = input<boolean>(false);\n\n  protected readonly clamped = computed(() =>\n    Math.min(100, Math.max(0, Math.round(this.value()))),\n  );\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport {\n  type VikingOptionValue,\n  type VikingSelectOption,\n} from \"../../core/types\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-radio-group — radio group.\n * ControlValueAccessor-compatible; options-driven for symmetry with viking-select.\n */\n@Component({\n  selector: \"viking-radio-group\",\n  providers: [provideVikingCva(VikingRadioGroup)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"radiogroup\",\n    \"[attr.aria-label]\": \"label() || null\",\n    \"[class.viking-radio-row]\": \"orientation() === 'horizontal'\",\n  },\n  template: `\n    @for (option of options(); track option.label) {\n      <label\n        class=\"viking-radio\"\n        [class.viking-disabled]=\"\n          option.disabled || disabled() || formDisabled()\n        \"\n      >\n        <span\n          class=\"viking-radio-dot\"\n          [class.viking-checked]=\"option.value === value()\"\n        >\n          <input\n            type=\"radio\"\n            [name]=\"groupName\"\n            [checked]=\"option.value === value()\"\n            [disabled]=\"option.disabled || disabled() || formDisabled()\"\n            (change)=\"select(option)\"\n            (blur)=\"onTouched()\"\n          />\n        </span>\n        <span class=\"viking-radio-label\">{{ option.label }}</span>\n      </label>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n        font-family: var(--viking-font-family);\n      }\n      :host(.viking-radio-row) {\n        flex-direction: row;\n        flex-wrap: wrap;\n        gap: var(--viking-space-2);\n      }\n      .viking-radio {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        cursor: pointer;\n      }\n      .viking-disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-radio-dot {\n        position: relative;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-space-2);\n        height: var(--viking-space-2);\n        border-radius: var(--viking-radius-pill);\n        border: 1px solid var(--viking-border-strong);\n        background: var(--viking-surface);\n        transition: var(--viking-transition);\n        flex-shrink: 0;\n        box-sizing: border-box;\n      }\n      /* The native input fills the visual dot so clicks and focus land on it. */\n      .viking-radio-dot input {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        margin: 0;\n        opacity: 0;\n        cursor: pointer;\n      }\n      .viking-radio:hover:not(.viking-disabled) .viking-radio-dot {\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-radio-dot.viking-checked {\n        border-color: var(--viking-accent);\n        border-width: 5px;\n        background: var(--viking-accent-content);\n      }\n      .viking-radio-dot:has(input:focus-visible) {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-radio-label {\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n      }\n    `,\n  ],\n})\nexport class VikingRadioGroup extends VikingControl<VikingOptionValue | null> {\n  readonly options = input.required<readonly VikingSelectOption[]>();\n  readonly value = model<VikingOptionValue | null>(null);\n  readonly label = input<string>(\"\");\n  readonly disabled = input<boolean>(false);\n  readonly orientation = input<\"vertical\" | \"horizontal\">(\"vertical\");\n\n  protected readonly groupName = vikingUid(\"viking-radio\");\n\n  writeValue(value: VikingOptionValue | null): void {\n    this.value.set(value);\n  }\n\n  protected select = (option: VikingSelectOption): void => {\n    this.value.set(option.value);\n    this.onChange(option.value);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\n\n/** viking-ring-gauge — circular progress ring for health/score displays. */\n@Component({\n  selector: \"viking-ring-gauge\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-ring-gauge\",\n    \"aria-hidden\": \"true\",\n    \"[attr.data-status]\": \"status()\",\n  },\n  template: `\n    <svg class=\"viking-ring-gauge-svg\" viewBox=\"0 0 120 120\" fill=\"none\">\n      <circle class=\"viking-ring-bg\" cx=\"60\" cy=\"60\" r=\"52\" />\n      <circle\n        class=\"viking-ring-fill\"\n        cx=\"60\"\n        cy=\"60\"\n        r=\"52\"\n        stroke-linecap=\"round\"\n        [attr.stroke-dasharray]=\"strokeDasharray()\"\n      />\n    </svg>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n        height: 100%;\n        color: var(--viking-accent);\n      }\n\n      .viking-ring-gauge-svg {\n        width: 100%;\n        height: 100%;\n        shape-rendering: geometricPrecision;\n      }\n\n      .viking-ring-bg,\n      .viking-ring-fill {\n        fill: none;\n        stroke-width: 10;\n        transform: rotate(-90deg);\n        transform-origin: 50% 50%;\n      }\n\n      .viking-ring-bg {\n        stroke: color-mix(in srgb, var(--viking-text-muted) 20%, transparent);\n      }\n\n      .viking-ring-fill {\n        stroke: currentColor;\n        transition: stroke-dasharray 0.4s var(--viking-ease-default);\n      }\n    `,\n  ],\n})\nexport class VikingRingGauge {\n  readonly value = input.required<number>();\n  readonly max = input<number>(100);\n  readonly circumference = input<number>(327);\n  readonly status = input<string>(\"\");\n\n  protected readonly strokeDasharray = computed(() => {\n    const pct = Math.max(0, Math.min(1, this.value() / this.max()));\n    const filled = pct * this.circumference();\n    return `${filled} ${this.circumference()}`;\n  });\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  effect,\n  input,\n  model,\n  output,\n  viewChild,\n} from \"@angular/core\";\nimport { captureReturnFocus, restoreFocus, trapTabKey } from \"../../core/focus\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingKbd } from \"../kbd/kbd\";\n\n/**\n * viking-search-palette — command-palette style search overlay (Product Hunt / Algolia inspired).\n * Project custom result lists into the body slot; ⌘K / Ctrl+K wired by host app static widget.\n */\n@Component({\n  selector: \"viking-search-palette\",\n  imports: [VikingIcon, VikingKbd],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \"(keydown.escape)\": \"close()\" },\n  template: `\n    @if (open()) {\n      <div\n        class=\"viking-search-palette-backdrop\"\n        role=\"presentation\"\n        tabindex=\"-1\"\n        (click)=\"close()\"\n        (keydown.escape)=\"close()\"\n      >\n        <div\n          #dialogRoot\n          class=\"viking-search-palette\"\n          role=\"dialog\"\n          aria-modal=\"true\"\n          aria-label=\"Search\"\n          tabindex=\"-1\"\n          (click)=\"$event.stopPropagation()\"\n          (keydown)=\"onDialogKeydown($event)\"\n        >\n          <div class=\"viking-search-palette-header\">\n            <viking-icon name=\"search\" [size]=\"24\" />\n            <input\n              #queryInput\n              type=\"text\"\n              class=\"viking-search-palette-input\"\n              [placeholder]=\"placeholder()\"\n              [value]=\"query()\"\n              [attr.aria-label]=\"placeholder()\"\n              (input)=\"onQueryInput($event)\"\n            />\n            <button\n              type=\"button\"\n              class=\"viking-search-palette-close\"\n              aria-label=\"Close search\"\n              (click)=\"close()\"\n            >\n              <viking-icon name=\"x\" [size]=\"20\" />\n            </button>\n          </div>\n          <div\n            class=\"viking-search-palette-body\"\n            tabindex=\"-1\"\n            (keydown)=\"paletteKeydown.emit($event)\"\n          >\n            <ng-content />\n          </div>\n          <footer class=\"viking-search-palette-footer\">\n            <ng-content select=\"[vikingSearchPaletteFooter]\" />\n            <span class=\"viking-search-palette-shortcut\">\n              <viking-kbd>{{ modKey }}</viking-kbd\n              ><viking-kbd>K</viking-kbd> / <viking-kbd>/</viking-kbd> open ·\n              <viking-kbd>↑</viking-kbd><viking-kbd>↓</viking-kbd> navigate ·\n              <viking-kbd>Enter</viking-kbd> open ·\n              <viking-kbd>Esc</viking-kbd> close ·\n              <viking-kbd>?</viking-kbd> all shortcuts\n            </span>\n          </footer>\n        </div>\n      </div>\n    }\n  `,\n  styleUrl: \"./search-palette.scss\",\n})\nexport class VikingSearchPalette {\n  readonly open = model<boolean>(false);\n  readonly query = model<string>(\"\");\n  readonly placeholder = input<string>(\"Search...\");\n  readonly paletteKeydown = output<KeyboardEvent>();\n\n  private readonly queryInput =\n    viewChild<ElementRef<HTMLInputElement>>(\"queryInput\");\n  private readonly dialogRoot =\n    viewChild<ElementRef<HTMLElement>>(\"dialogRoot\");\n  private returnFocus: HTMLElement | null = null;\n\n  constructor() {\n    let wasOpen = false;\n    effect(() => {\n      const isOpen = this.open();\n      if (isOpen && !wasOpen) {\n        this.returnFocus = captureReturnFocus();\n        queueMicrotask(() => this.queryInput()?.nativeElement.focus());\n      } else if (!isOpen && wasOpen) {\n        restoreFocus(this.returnFocus);\n        this.returnFocus = null;\n      }\n      wasOpen = isOpen;\n    });\n  }\n\n  protected onQueryInput(event: Event): void {\n    this.query.set((event.target as HTMLInputElement).value);\n  }\n\n  protected onDialogKeydown(event: KeyboardEvent): void {\n    event.stopPropagation();\n    const root = this.dialogRoot()?.nativeElement;\n    if (root) trapTabKey(event, root);\n    this.paletteKeydown.emit(event);\n  }\n\n  protected close(): void {\n    this.open.set(false);\n  }\n\n  /** Platform modifier label — stable for component lifetime. */\n  protected readonly modKey =\n    typeof navigator !== \"undefined\" &&\n    /Mac|iPhone|iPad/i.test(navigator.platform)\n      ? \"⌘\"\n      : \"Ctrl\";\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  computed,\n  inject,\n  input,\n  model,\n  signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n  type VikingOptionValue,\n  type VikingSelectOption,\n} from \"../../core/types\";\n\nexport type VikingSelectWidth = \"full\" | \"half\";\nexport type { VikingOptionValue, VikingSelectOption };\n\nlet selectSeq = 0;\n\n/**\n * viking-select — custom listbox select.\n * ControlValueAccessor-compatible with full keyboard support.\n */\n@Component({\n  selector: \"viking-select\",\n  imports: [VikingIcon],\n  providers: [provideVikingCva(VikingSelect)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"(document:click)\": \"onDocumentClick($event)\",\n    \"[class.viking-select-full]\": \"width() === 'full'\",\n    \"[class.viking-select-half]\": \"width() === 'half'\",\n  },\n  template: `\n    <button\n      type=\"button\"\n      class=\"viking-control viking-select-trigger\"\n      role=\"combobox\"\n      [disabled]=\"disabled() || formDisabled()\"\n      [attr.aria-expanded]=\"open()\"\n      [attr.aria-controls]=\"listboxId\"\n      [attr.aria-activedescendant]=\"open() ? optionId(activeIndex()) : null\"\n      [attr.aria-label]=\"label() || null\"\n      aria-haspopup=\"listbox\"\n      aria-autocomplete=\"none\"\n      (click)=\"toggle()\"\n      (keydown)=\"onKeydown($event)\"\n    >\n      <span\n        class=\"viking-select-value\"\n        [class.viking-select-placeholder]=\"!selectedLabel()\"\n      >\n        {{ selectedLabel() || placeholder() }}\n      </span>\n      <viking-icon\n        [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n        [size]=\"18\"\n        aria-hidden=\"true\"\n      />\n    </button>\n    @if (open()) {\n      <div\n        class=\"viking-select-panel\"\n        role=\"listbox\"\n        [id]=\"listboxId\"\n        [attr.aria-label]=\"label() || 'Options'\"\n      >\n        @for (option of options(); track option.label; let index = $index) {\n          <button\n            type=\"button\"\n            role=\"option\"\n            class=\"viking-select-option\"\n            [id]=\"optionId(index)\"\n            [class.viking-active]=\"index === activeIndex()\"\n            [class.viking-selected]=\"option.value === value()\"\n            [disabled]=\"option.disabled\"\n            [attr.aria-selected]=\"option.value === value()\"\n            (click)=\"pick(option)\"\n            (mouseenter)=\"activeIndex.set(index)\"\n          >\n            <span class=\"viking-select-option-label\">{{ option.label }}</span>\n            @if (option.value === value()) {\n              <viking-icon name=\"check\" [size]=\"16\" />\n            }\n          </button>\n        }\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: block;\n        min-width: 0;\n      }\n      :host(.viking-select-full) {\n        width: 100%;\n      }\n      :host(.viking-select-half) {\n        width: 100%;\n        max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n      }\n      .viking-select-value {\n        min-width: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n      .viking-select-trigger {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-1);\n        width: 100%;\n        min-height: var(--viking-control-height);\n        padding: 0 var(--viking-space-2);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-sm);\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n        text-align: left;\n      }\n      .viking-select-trigger:hover:not(:disabled) {\n        border-color: var(--viking-accent-strong);\n        box-shadow: var(--viking-shadow-md);\n      }\n      .viking-select-trigger:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-select-trigger:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-select-placeholder {\n        color: var(--viking-text-muted);\n      }\n      .viking-select-panel {\n        position: absolute;\n        top: calc(100% + var(--viking-space-0-5));\n        left: 0;\n        width: 100%;\n        min-width: 100%;\n        max-width: 100%;\n        box-sizing: border-box;\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-0-5);\n        margin: 0;\n        padding: var(--viking-space-1);\n        background-color: var(\n          --viking-select-panel-bg,\n          var(--viking-surface-raised)\n        );\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-lg);\n        z-index: var(--viking-z-overlay);\n        max-height: 315px;\n        overflow: auto;\n        isolation: isolate;\n        animation: viking-slide-up var(--viking-duration-fast)\n          var(--viking-ease-default);\n      }\n      .viking-select-option {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        border: none;\n        background: transparent;\n        text-align: left;\n        width: 100%;\n        min-width: 0;\n        border-radius: var(--viking-radius-sm);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-select-option-label {\n        min-width: 0;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n      .viking-select-option:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-select-option:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: -2px;\n      }\n      .viking-active {\n        background: var(--viking-accent-soft);\n        color: var(--viking-text);\n      }\n      .viking-selected {\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-accent-strong);\n        background: color-mix(\n          in srgb,\n          var(--viking-accent) 14%,\n          var(--viking-select-panel-bg, var(--viking-surface-raised))\n        );\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .viking-select-panel {\n          animation: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingSelect extends VikingControl<VikingOptionValue | null> {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly selectId = ++selectSeq;\n  protected readonly listboxId = `viking-select-listbox-${this.selectId}`;\n\n  readonly options = input.required<readonly VikingSelectOption[]>();\n  readonly value = model<VikingOptionValue | null>(null);\n  readonly placeholder = input<string>(\"Select…\");\n  readonly label = input<string>(\"\");\n  readonly disabled = input<boolean>(false);\n  readonly width = input<VikingSelectWidth>(\"half\");\n\n  constructor() {\n    super();\n  }\n\n  protected readonly open = signal(false);\n  protected readonly activeIndex = signal(0);\n\n  protected optionId = (index: number): string =>\n    `viking-select-option-${this.selectId}-${index}`;\n\n  protected readonly selectedLabel = computed(\n    () =>\n      this.options().find((option) => option.value === this.value())?.label ??\n      \"\",\n  );\n\n  writeValue(value: VikingOptionValue | null): void {\n    this.value.set(value);\n  }\n\n  protected toggle = (): void => {\n    this.open.update((value) => !value);\n    if (this.open()) {\n      const index = this.options().findIndex(\n        (option) => option.value === this.value(),\n      );\n      this.activeIndex.set(Math.max(0, index));\n    }\n  };\n\n  protected pick = (option: VikingSelectOption): void => {\n    if (option.disabled) {\n      return;\n    }\n    this.value.set(option.value);\n    this.onChange(option.value);\n    this.onTouched();\n    this.open.set(false);\n  };\n\n  protected onKeydown = (event: KeyboardEvent): void => {\n    const options = this.options();\n    if (!this.open()) {\n      if ([\"ArrowDown\", \"ArrowUp\", \"Enter\", \" \"].includes(event.key)) {\n        event.preventDefault();\n        this.toggle();\n      }\n      return;\n    }\n    switch (event.key) {\n      case \"ArrowDown\":\n        event.preventDefault();\n        this.activeIndex.update((index) =>\n          Math.min(options.length - 1, index + 1),\n        );\n        break;\n      case \"ArrowUp\":\n        event.preventDefault();\n        this.activeIndex.update((index) => Math.max(0, index - 1));\n        break;\n      case \"Enter\":\n      case \" \":\n        event.preventDefault();\n        this.pick(options[this.activeIndex()]);\n        break;\n      case \"Escape\":\n        this.open.set(false);\n        break;\n    }\n  };\n\n  protected onDocumentClick = (event: Event): void => {\n    if (\n      this.open() &&\n      !this.host.nativeElement.contains(event.target as Node)\n    ) {\n      this.open.set(false);\n    }\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-scroll-area — constrained scroll region with clinical scrollbar styling.\n */\n@Component({\n  selector: \"viking-scroll-area\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-scroll-area\",\n    \"[style.max-height]\": \"maxHeight()\",\n    \"[style.max-width]\": \"maxWidth()\",\n  },\n  template: `<div class=\"viking-scroll-area-viewport\" tabindex=\"0\">\n    <ng-content />\n  </div>`,\n  styles: [\n    `\n      :host {\n        display: block;\n        overflow: hidden;\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n      }\n      .viking-scroll-area-viewport {\n        max-height: inherit;\n        overflow: auto;\n        padding: var(--viking-space-2);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        scrollbar-width: thin;\n        scrollbar-color: var(--viking-accent-strong) var(--viking-surface-alt);\n      }\n      .viking-scroll-area-viewport:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: calc(-1 * var(--viking-ring-offset));\n      }\n      .viking-scroll-area-viewport::-webkit-scrollbar {\n        width: 8px;\n        height: 8px;\n      }\n      .viking-scroll-area-viewport::-webkit-scrollbar-thumb {\n        background: var(--viking-accent-strong);\n        border-radius: var(--viking-radius-pill);\n      }\n      .viking-scroll-area-viewport::-webkit-scrollbar-track {\n        background: var(--viking-surface-alt);\n      }\n    `,\n  ],\n})\nexport class VikingScrollArea {\n  readonly maxHeight = input<string>(\"240px\");\n  readonly maxWidth = input<string>(\"100%\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnDestroy,\n  effect,\n  input,\n  model,\n  viewChild,\n} from \"@angular/core\";\nimport { NativeDialogSession } from \"../../core/dialog-session\";\nimport { vikingUid } from \"../../core/uid\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport type VikingSheetSide = \"left\" | \"right\";\n\n/**\n * viking-sheet — slide-over panel.\n */\n@Component({\n  selector: \"viking-sheet\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <dialog\n      #dialog\n      class=\"viking-sheet\"\n      [class.viking-sheet-left]=\"side() === 'left'\"\n      tabindex=\"-1\"\n      aria-modal=\"true\"\n      [attr.aria-labelledby]=\"heading() ? titleId : null\"\n      [attr.aria-label]=\"heading() ? null : 'Panel'\"\n      (close)=\"onNativeClose()\"\n      (click)=\"onBackdropClick($event)\"\n      (keydown)=\"onDialogKeydown($event)\"\n      (keydown.escape)=\"dismissible() && open.set(false)\"\n    >\n      <div class=\"viking-sheet-surface\">\n        <header class=\"viking-sheet-header\">\n          @if (heading()) {\n            <h2 class=\"viking-sheet-heading\" [id]=\"titleId\">{{ heading() }}</h2>\n          }\n          @if (dismissible()) {\n            <button\n              type=\"button\"\n              class=\"viking-sheet-close\"\n              aria-label=\"Close panel\"\n              (click)=\"open.set(false)\"\n            >\n              <viking-icon name=\"x\" [size]=\"20\" />\n            </button>\n          }\n        </header>\n        <div class=\"viking-sheet-body\"><ng-content /></div>\n        <footer class=\"viking-sheet-footer\">\n          <ng-content select=\"[vikingSheetActions]\" />\n        </footer>\n      </div>\n    </dialog>\n  `,\n  styles: [\n    `\n      .viking-sheet {\n        margin: 0;\n        padding: 0;\n        border: none;\n        background: transparent;\n        max-width: none;\n        max-height: none;\n        width: 100%;\n        height: 100%;\n        position: fixed;\n        inset: 0;\n      }\n      .viking-sheet::backdrop {\n        background: var(--viking-overlay-backdrop);\n        backdrop-filter: blur(6px);\n        animation: viking-backdrop-in var(--viking-duration-fast)\n          var(--viking-ease-default);\n      }\n      .viking-sheet-surface {\n        position: fixed;\n        top: 0;\n        right: 0;\n        display: flex;\n        flex-direction: column;\n        width: min(420px, 100vw);\n        height: 100%;\n        background: var(--viking-surface);\n        border-left: 1px solid var(--viking-border);\n        font-family: var(--viking-font-family);\n        animation: viking-slide-in-right var(--viking-duration)\n          var(--viking-ease-default);\n      }\n      .viking-sheet-left .viking-sheet-surface {\n        right: auto;\n        left: 0;\n        border-left: none;\n        border-right: 1px solid var(--viking-border-strong);\n      }\n      .viking-sheet-header {\n        display: flex;\n        align-items: flex-start;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        padding: var(--viking-space-2);\n        border-bottom: 1px solid var(--viking-border);\n      }\n      .viking-sheet-heading {\n        margin: 0;\n        font-size: var(--viking-font-size-ui);\n        font-weight: 700;\n        letter-spacing: var(--header-letter-spacing, -0.02em);\n      }\n      .viking-sheet-close {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-control-height-sm);\n        height: var(--viking-control-height-sm);\n        min-width: var(--viking-touch-target-min, 44px);\n        min-height: var(--viking-touch-target-min, 44px);\n        border: 1px solid transparent;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: 0;\n        border-radius: var(--viking-radius);\n        transition: var(--viking-transition-interactive);\n        flex-shrink: 0;\n      }\n      .viking-sheet-close:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n        border-color: var(--viking-border-subtle);\n      }\n      .viking-sheet-close:active {\n        transform: scale(var(--viking-state-active-scale));\n      }\n      .viking-sheet-close:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-sheet-body {\n        flex: 1;\n        overflow: auto;\n        padding: var(--viking-space-2);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        line-height: 1.6;\n      }\n      .viking-sheet-footer {\n        display: flex;\n        flex-wrap: wrap;\n        gap: var(--viking-space-2);\n        justify-content: flex-end;\n        align-items: center;\n        padding: var(--viking-space-2);\n        border-top: 1px solid var(--viking-border);\n      }\n      :host ::ng-deep .viking-sheet-footer [vikingSheetActions] {\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: flex-end;\n        align-items: center;\n        gap: var(--viking-space-2);\n        width: 100%;\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .viking-sheet::backdrop,\n        .viking-sheet-surface {\n          animation: none;\n        }\n        .viking-sheet-close:active {\n          transform: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingSheet implements OnDestroy {\n  readonly open = model(false);\n  readonly heading = input(\"\");\n  readonly dismissible = input(true);\n  readonly side = input<VikingSheetSide>(\"right\");\n  protected readonly titleId = vikingUid(\"viking-sheet-title\");\n\n  private readonly dialogRef =\n    viewChild.required<ElementRef<HTMLDialogElement>>(\"dialog\");\n  private readonly session = new NativeDialogSession();\n\n  constructor() {\n    effect(() => {\n      this.session.syncOpen(this.dialogRef().nativeElement, this.open());\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.session.destroy(this.dialogRef()?.nativeElement);\n  }\n\n  protected onNativeClose = (): void => {\n    this.session.onNativeClose(() => {\n      if (this.open()) this.open.set(false);\n    });\n  };\n\n  protected onBackdropClick = (event: MouseEvent): void => {\n    this.session.onBackdropClick(\n      event,\n      this.dialogRef().nativeElement,\n      this.dismissible() && this.open(),\n      () => this.open.set(false),\n    );\n  };\n\n  protected onDialogKeydown = (event: KeyboardEvent): void => {\n    this.session.onKeydown(event, this.dialogRef().nativeElement);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  output,\n  ViewEncapsulation,\n} from \"@angular/core\";\nimport { RouterLink, RouterLinkActive } from \"@angular/router\";\n\nlet sidebarTreeSeq = 0;\n\n/**\n * viking-sidebar-nav — composable sidebar navigation container.\n */\n@Component({\n  selector: \"viking-sidebar-nav\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: \"viking-sidebar-nav\",\n    role: \"navigation\",\n    \"aria-label\": \"Primary\",\n  },\n  template: `<ng-content />`,\n  styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNav {}\n\n/**\n * viking-sidebar-nav-link — router-aware sidebar nav item.\n */\n@Component({\n  selector: \"viking-sidebar-nav-link\",\n  imports: [RouterLink, RouterLinkActive],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: \"viking-sidebar-nav-link\",\n  },\n  template: `\n    <a\n      [routerLink]=\"routerLink()\"\n      routerLinkActive=\"viking-sidebar-nav-link-active\"\n      [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n      [title]=\"title()\"\n      [attr.aria-label]=\"title() || null\"\n    >\n      <ng-content />\n    </a>\n  `,\n  styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavLink {\n  readonly routerLink = input.required<string | string[]>();\n  readonly routerLinkActiveOptions = input<{ exact: boolean }>({ exact: true });\n  readonly title = input<string>(\"\");\n}\n\n/**\n * viking-sidebar-nav-tree — expandable tree section within sidebar nav.\n */\n@Component({\n  selector: \"viking-sidebar-nav-tree\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: \"viking-sidebar-nav-tree\" },\n  template: `<ng-content />`,\n  styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTree {\n  readonly childrenId = `viking-sidebar-tree-children-${++sidebarTreeSeq}`;\n}\n\n/**\n * viking-sidebar-nav-tree-header — collapsible tree section header.\n */\n@Component({\n  selector: \"viking-sidebar-nav-tree-header\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: \"viking-sidebar-nav-tree-header\",\n    role: \"button\",\n    tabindex: \"0\",\n    \"[attr.aria-expanded]\": \"expanded()\",\n    \"[attr.aria-controls]\": \"tree?.childrenId ?? null\",\n    \"(click)\": \"onToggle()\",\n    \"(keydown.enter)\": \"onToggle()\",\n    \"(keydown.space)\": \"onSpace($event)\",\n  },\n  template: `\n    <span class=\"viking-sidebar-nav-tree-label\">{{ label() }}</span>\n    <ng-content select=\"[vikingSidebarTreeArrow]\" />\n  `,\n  styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeHeader {\n  protected readonly tree = inject(VikingSidebarNavTree, { optional: true });\n\n  readonly label = input.required<string>();\n  readonly expanded = input<boolean>(true);\n  readonly toggled = output<void>();\n\n  protected onToggle = (): void => {\n    this.toggled.emit();\n  };\n\n  protected onSpace = (event: Event): void => {\n    event.preventDefault();\n    this.onToggle();\n  };\n}\n\n/**\n * viking-sidebar-nav-tree-children — tree item list container.\n */\n@Component({\n  selector: \"viking-sidebar-nav-tree-children\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: \"viking-sidebar-nav-tree-children\",\n    role: \"group\",\n    \"[id]\": \"tree?.childrenId ?? null\",\n  },\n  template: `<ng-content />`,\n  styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeChildren {\n  protected readonly tree = inject(VikingSidebarNavTree, { optional: true });\n}\n\nexport type VikingSidebarNavTreeItemVariant = \"default\" | \"empty\" | \"accent\";\n\n/**\n * viking-sidebar-nav-tree-item — selectable tree leaf or action row.\n */\n@Component({\n  selector: \"viking-sidebar-nav-tree-item\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: \"viking-sidebar-nav-tree-item\",\n    \"[attr.role]\": \"variant() === 'empty' ? null : 'button'\",\n    \"[attr.tabindex]\": \"variant() === 'empty' ? null : 0\",\n    \"[attr.aria-current]\": \"active() ? 'true' : null\",\n    \"[class.viking-sidebar-nav-tree-item-active]\": \"active()\",\n    \"[class.viking-sidebar-nav-tree-item-empty]\": \"variant() === 'empty'\",\n    \"[class.viking-sidebar-nav-tree-item-accent]\": \"variant() === 'accent'\",\n    \"(click)\": \"onActivate($event)\",\n    \"(keydown.enter)\": \"onActivate($event)\",\n    \"(keydown.space)\": \"onSpace($event)\",\n  },\n  template: `<ng-content />`,\n  styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeItem {\n  readonly active = input<boolean>(false);\n  readonly variant = input<VikingSidebarNavTreeItemVariant>(\"default\");\n  readonly activated = output<void>();\n\n  protected onActivate = (event: Event): void => {\n    if (this.variant() === \"empty\") {\n      return;\n    }\n    this.activated.emit();\n  };\n\n  protected onSpace = (event: Event): void => {\n    if (this.variant() === \"empty\") {\n      return;\n    }\n    event.preventDefault();\n    this.onActivate(event);\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingCard } from \"../card/card\";\nimport { VikingSkeleton } from \"../skeleton/skeleton\";\n\nexport type VikingPageSkeletonLayout =\n  | \"dashboard\"\n  | \"cards\"\n  | \"list\"\n  | \"form\"\n  | \"nav\";\n\n/**\n * viking-page-skeleton — progressive loading shell so routes never feel blank.\n * Layouts mirror dense dashboard, card grids, list panels, forms, and nav rows.\n */\n@Component({\n  selector: \"viking-page-skeleton\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [VikingCard, VikingSkeleton],\n  host: {\n    class: \"suite-page-skeleton viking-page-skeleton\",\n    role: \"status\",\n    \"aria-busy\": \"true\",\n    \"[attr.aria-label]\": \"label()\",\n    \"[attr.data-layout]\": \"layout()\",\n  },\n  template: `\n    @switch (layout()) {\n      @case (\"dashboard\") {\n        <div class=\"suite-page-skeleton__metrics\">\n          <viking-card [loading]=\"true\" [compact]=\"true\" />\n          <viking-card [loading]=\"true\" [compact]=\"true\" />\n        </div>\n        <div class=\"suite-page-skeleton__charts\">\n          <div class=\"suite-skeleton-stack\" aria-hidden=\"true\">\n            <viking-skeleton shape=\"rect\" height=\"12rem\" />\n            <viking-skeleton width=\"55%\" />\n            <viking-skeleton width=\"40%\" />\n          </div>\n          <div class=\"suite-skeleton-stack\" aria-hidden=\"true\">\n            <viking-skeleton shape=\"rect\" height=\"12rem\" />\n            <viking-skeleton width=\"62%\" />\n            <viking-skeleton width=\"36%\" />\n          </div>\n        </div>\n      }\n      @case (\"cards\") {\n        <div class=\"suite-page-skeleton__cards\">\n          @for (_ of cardSlots; track $index) {\n            <div class=\"suite-skeleton-stack\" aria-hidden=\"true\">\n              <viking-skeleton\n                width=\"48%\"\n                height=\"var(--viking-font-size-lg)\"\n              />\n              <viking-skeleton width=\"90%\" />\n              <viking-skeleton width=\"70%\" />\n              <viking-skeleton shape=\"rect\" height=\"3rem\" />\n            </div>\n          }\n        </div>\n      }\n      @case (\"list\") {\n        <div\n          class=\"suite-skeleton-stack suite-page-skeleton__list\"\n          aria-hidden=\"true\"\n        >\n          @for (_ of listSlots; track $index) {\n            <viking-skeleton shape=\"rect\" height=\"4.5rem\" />\n          }\n        </div>\n      }\n      @case (\"form\") {\n        <div\n          class=\"suite-skeleton-stack suite-page-skeleton__form\"\n          aria-hidden=\"true\"\n        >\n          <viking-skeleton width=\"40%\" height=\"var(--viking-font-size-lg)\" />\n          <viking-skeleton shape=\"rect\" height=\"2.75rem\" />\n          <viking-skeleton shape=\"rect\" height=\"2.75rem\" />\n          <viking-skeleton shape=\"rect\" height=\"6rem\" />\n          <viking-skeleton width=\"8rem\" height=\"2.75rem\" />\n        </div>\n      }\n      @case (\"nav\") {\n        <div class=\"suite-page-skeleton__nav\" aria-hidden=\"true\">\n          @for (_ of navSlots; track $index) {\n            <viking-skeleton width=\"72%\" height=\"var(--viking-space-3)\" />\n          }\n        </div>\n      }\n    }\n  `,\n})\nexport class VikingPageSkeleton {\n  readonly layout = input<VikingPageSkeletonLayout>(\"dashboard\");\n  readonly label = input(\"Loading\");\n\n  protected readonly cardSlots = [0, 1, 2];\n  protected readonly listSlots = [0, 1, 2, 3, 4];\n  protected readonly navSlots = [0, 1, 2, 3, 4, 5];\n}\n","/**\n * Pure window math for fixed-height virtual lists.\n * Keeps only a slice of items in the DOM for long feeds/tables.\n * Flat index lists via `indicesForWindow` (FORJD ADR-0010).\n */\n\nexport type VikingVirtualWindowInput = {\n  scrollTop: number;\n  viewportHeight: number;\n  itemCount: number;\n  itemHeight: number;\n  /** Extra rows above/below the viewport to reduce blank flashes while scrolling. */\n  overscan?: number;\n};\n\nexport type VikingVirtualWindow = {\n  start: number;\n  end: number;\n  offsetY: number;\n  totalHeight: number;\n  visibleCount: number;\n};\n\n/** @deprecated Use VikingVirtualWindowInput */\nexport type VirtualWindowInput = VikingVirtualWindowInput;\n/** @deprecated Use VikingVirtualWindow */\nexport type VirtualWindow = VikingVirtualWindow;\n\nexport function computeVirtualWindow(\n  input: VikingVirtualWindowInput,\n): VikingVirtualWindow {\n  const itemHeight = Math.max(1, input.itemHeight);\n  const itemCount = Math.max(0, Math.floor(input.itemCount));\n  const viewportHeight = Math.max(0, input.viewportHeight);\n  const scrollTop = Math.max(0, input.scrollTop);\n  const overscan = Math.max(0, Math.floor(input.overscan ?? 4));\n  const totalHeight = itemCount * itemHeight;\n\n  if (itemCount === 0) {\n    return { start: 0, end: 0, offsetY: 0, totalHeight: 0, visibleCount: 0 };\n  }\n\n  const rawStart = Math.floor(scrollTop / itemHeight);\n  const visible = Math.ceil(viewportHeight / itemHeight) + 1;\n  let start = Math.max(0, rawStart - overscan);\n  let end = Math.min(itemCount, rawStart + visible + overscan);\n  // Past the end (overscroll / stale scrollTop): pin the window to the tail.\n  if (start >= itemCount) {\n    start = Math.max(0, itemCount - visible - overscan);\n    end = itemCount;\n  } else if (start > end) {\n    start = end;\n  }\n\n  return {\n    start,\n    end,\n    offsetY: start * itemHeight,\n    totalHeight,\n    visibleCount: Math.max(0, end - start),\n  };\n}\n\n/** Flat index list for a window — prefer over `{ item, index }[]` wrappers. */\nexport function indicesForWindow(start: number, end: number): number[] {\n  if (end <= start) {\n    return [];\n  }\n  const out = new Array<number>(end - start);\n  for (let i = 0; i < out.length; i++) {\n    out[i] = start + i;\n  }\n  return out;\n}\n","import { NgTemplateOutlet } from \"@angular/common\";\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnDestroy,\n  TemplateRef,\n  computed,\n  contentChild,\n  input,\n  signal,\n  viewChild,\n} from \"@angular/core\";\nimport { computeVirtualWindow, indicesForWindow } from \"./virtual-window\";\n\nexport type VikingVirtualListItemContext<T> = {\n  $implicit: T;\n  index: number;\n};\n\n/** Default item shape when callers do not specialize T. */\nexport type VikingVirtualListItem = {\n  readonly id?: string | number;\n};\n\n/**\n * viking-virtual-list — fixed-height windowed list (zero CDK).\n * Use for unbounded queues/feeds; prefer content-visibility for masonry grids.\n *\n * ```html\n * <viking-virtual-list [items]=\"rows()\" [itemHeight]=\"96\" height=\"24rem\">\n *   <ng-template let-row let-i=\"index\">...</ng-template>\n * </viking-virtual-list>\n * ```\n */\n@Component({\n  selector: \"viking-virtual-list\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgTemplateOutlet],\n  host: {\n    class: \"suite-virtual-list viking-virtual-list\",\n    \"[attr.data-empty]\": \"items().length === 0 ? '' : null\",\n  },\n  template: `\n    <div\n      #viewport\n      class=\"suite-virtual-list__viewport viking-virtual-list__viewport\"\n      [style.height]=\"height()\"\n      [attr.aria-label]=\"label()\"\n      role=\"list\"\n      tabindex=\"0\"\n      (scroll)=\"onScroll()\"\n    >\n      <div\n        class=\"suite-virtual-list__spacer viking-virtual-list__spacer\"\n        [style.height.px]=\"totalHeight()\"\n      >\n        <div\n          class=\"suite-virtual-list__window viking-virtual-list__window\"\n          [style.transform]=\"'translate3d(0, ' + offsetY() + 'px, 0)'\"\n        >\n          @for (index of visibleIndices(); track trackIndex(index)) {\n            <div\n              class=\"suite-virtual-list__item viking-virtual-list__item\"\n              [style.height.px]=\"itemHeight()\"\n              role=\"listitem\"\n              [attr.aria-setsize]=\"items().length\"\n              [attr.aria-posinset]=\"index + 1\"\n            >\n              @if (itemTemplate(); as tpl) {\n                <ng-container\n                  [ngTemplateOutlet]=\"tpl\"\n                  [ngTemplateOutletContext]=\"{\n                    $implicit: items()[index],\n                    index,\n                  }\"\n                />\n              }\n            </div>\n          }\n        </div>\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        min-width: 0;\n        width: 100%;\n      }\n      .viking-virtual-list__viewport {\n        overflow: auto;\n        overscroll-behavior: contain;\n        contain: strict;\n        width: 100%;\n        min-height: 0;\n        scrollbar-width: thin;\n        scrollbar-color: var(--viking-accent-strong) var(--viking-surface-alt);\n        outline: none;\n      }\n      .viking-virtual-list__viewport:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-virtual-list__spacer {\n        position: relative;\n        width: 100%;\n      }\n      .viking-virtual-list__window {\n        will-change: transform;\n        width: 100%;\n      }\n      .viking-virtual-list__item {\n        box-sizing: border-box;\n        width: 100%;\n        overflow: hidden;\n      }\n    `,\n  ],\n})\nexport class VikingVirtualList<T = VikingVirtualListItem>\n  implements AfterViewInit, OnDestroy\n{\n  readonly items = input<readonly T[]>([]);\n  /** Fixed row height in CSS pixels — must match rendered item chrome. */\n  readonly itemHeight = input(96);\n  readonly height = input(\"24rem\");\n  readonly overscan = input(4);\n  readonly label = input(\"Scrollable list\");\n  /** Optional stable id key on each item (falls back to index). */\n  readonly trackBy = input<\n    ((item: T, index: number) => string | number) | null\n  >(null);\n\n  protected readonly itemTemplate =\n    contentChild<TemplateRef<VikingVirtualListItemContext<T>>>(TemplateRef);\n\n  private readonly viewport =\n    viewChild.required<ElementRef<HTMLElement>>(\"viewport\");\n\n  private readonly scrollTop = signal(0);\n  private readonly viewportHeightPx = signal(0);\n  private resizeObserver: ResizeObserver | null = null;\n  private scrollRaf = 0;\n  private measureRaf = 0;\n\n  /** Private math snapshot — peel into flat computeds for the template. */\n  private readonly windowMetrics = computed(() =>\n    computeVirtualWindow({\n      scrollTop: this.scrollTop(),\n      viewportHeight: this.viewportHeightPx(),\n      itemCount: this.items().length,\n      itemHeight: this.itemHeight(),\n      overscan: this.overscan(),\n    }),\n  );\n\n  protected readonly totalHeight = computed(\n    () => this.windowMetrics().totalHeight,\n  );\n  protected readonly offsetY = computed(() => this.windowMetrics().offsetY);\n  protected readonly visibleIndices = computed(() => {\n    const { start, end } = this.windowMetrics();\n    return indicesForWindow(start, end);\n  });\n\n  ngAfterViewInit(): void {\n    const el = this.viewport().nativeElement;\n    this.scheduleMeasure(el);\n    if (typeof ResizeObserver !== \"undefined\") {\n      // contentRect avoids a forced clientHeight read inside the observer.\n      this.resizeObserver = new ResizeObserver((entries) => {\n        const height = entries[0]?.contentRect.height;\n        if (height != null && height !== this.viewportHeightPx()) {\n          this.viewportHeightPx.set(Math.round(height));\n        }\n      });\n      this.resizeObserver.observe(el);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.resizeObserver?.disconnect();\n    this.resizeObserver = null;\n    if (this.scrollRaf) {\n      cancelAnimationFrame(this.scrollRaf);\n      this.scrollRaf = 0;\n    }\n    if (this.measureRaf) {\n      cancelAnimationFrame(this.measureRaf);\n      this.measureRaf = 0;\n    }\n  }\n\n  protected onScroll(): void {\n    if (this.scrollRaf) {\n      return;\n    }\n    this.scrollRaf = requestAnimationFrame(() => {\n      this.scrollRaf = 0;\n      const next = this.viewport().nativeElement.scrollTop;\n      if (next !== this.scrollTop()) {\n        this.scrollTop.set(next);\n      }\n    });\n  }\n\n  protected trackIndex(index: number): string | number {\n    const track = this.trackBy();\n    const item = this.items()[index];\n    return track && item !== undefined ? track(item, index) : index;\n  }\n\n  private scheduleMeasure(el: HTMLElement): void {\n    if (this.measureRaf) {\n      return;\n    }\n    this.measureRaf = requestAnimationFrame(() => {\n      this.measureRaf = 0;\n      // Batch layout reads in one frame, then write signals.\n      const height = el.clientHeight;\n      const top = el.scrollTop;\n      if (height !== this.viewportHeightPx()) {\n        this.viewportHeightPx.set(height);\n      }\n      if (top !== this.scrollTop()) {\n        this.scrollTop.set(top);\n      }\n    });\n  }\n}\n","import { formatDate } from \"@angular/common\";\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport type { VikingIconName } from \"../../core/icons\";\nimport type { VikingTone } from \"../../core/types\";\n\nexport type AnnouncementCardTone = \"info\" | \"warning\";\n\n/**\n * AnnouncementCardComponent — system announcement block for status pages.\n *\n * @example\n * ```html\n * <viking-announcement-card\n *   tone=\"info\"\n *   title=\"Sanity.io Integration Active\"\n *   publishedAt=\"2026-06-13\"\n * >\n *   Announcements are now served globally from edge CDNs.\n * </viking-announcement-card>\n * ```\n */\n@Component({\n  selector: \"viking-announcement-card\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"article\",\n    \"[class]\": \"hostClass()\",\n    \"[attr.aria-label]\": \"ariaLabel()\",\n  },\n  template: `\n    <header class=\"viking-announcement-card-header\">\n      <div class=\"viking-announcement-card-meta\">\n        <span class=\"viking-announcement-card-tone\">{{\n          resolvedToneLabel()\n        }}</span>\n        @if (publishedText()) {\n          <span class=\"viking-announcement-card-date\">{{\n            publishedText()\n          }}</span>\n        }\n      </div>\n      @if (showIcon()) {\n        <viking-icon\n          class=\"viking-announcement-card-icon\"\n          [name]=\"resolvedIcon()\"\n          [size]=\"20\"\n          [color]=\"iconColor()\"\n          aria-hidden=\"true\"\n        />\n      }\n    </header>\n    @if (title()) {\n      <h3 class=\"viking-announcement-card-title\">{{ title() }}</h3>\n    }\n    <div class=\"viking-announcement-card-body\">\n      <ng-content />\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: grid;\n        gap: var(--viking-space-2);\n        width: 100%;\n        min-width: 0;\n        padding: var(--viking-space-2) 0;\n        color: var(--viking-text);\n        box-sizing: border-box;\n      }\n\n      .viking-announcement-card-header {\n        display: flex;\n        align-items: flex-start;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        min-width: 0;\n      }\n\n      .viking-announcement-card-meta {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        gap: var(--viking-space-1);\n        min-width: 0;\n      }\n\n      .viking-announcement-card-tone,\n      .viking-announcement-card-date {\n        color: var(--viking-text-muted);\n        font-size: var(--viking-font-size-xs);\n        line-height: var(--viking-line-height-snug);\n      }\n\n      .viking-announcement-card-tone {\n        color: var(--viking-text-link);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        text-transform: uppercase;\n      }\n\n      .viking-announcement-card-date::before {\n        content: \"/\";\n        margin-right: var(--viking-space-1);\n        color: var(--viking-border-strong);\n      }\n\n      .viking-announcement-card-title {\n        margin: 0;\n        color: var(--viking-text);\n        font-size: var(--viking-font-size-lg);\n        font-weight: var(--viking-font-weight-bold);\n        line-height: var(--viking-line-height-tight);\n      }\n\n      .viking-announcement-card-body {\n        color: var(--viking-text-muted);\n        font-size: var(--viking-font-size-sm);\n        line-height: var(--viking-line-height-relaxed);\n      }\n\n      .viking-announcement-card-body ::ng-deep p {\n        margin: 0;\n      }\n\n      :host(.viking-announcement-card-warning) .viking-announcement-card-tone,\n      :host(.viking-announcement-card-warning) .viking-announcement-card-icon {\n        color: var(--viking-warning);\n      }\n    `,\n  ],\n})\nexport class AnnouncementCardComponent {\n  readonly tone = input<AnnouncementCardTone | VikingTone>(\"info\");\n  readonly title = input<string>(\"\");\n  readonly publishedAt = input<string | Date | null>(null);\n  readonly publishedLabel = input<string>(\"\");\n  readonly icon = input<VikingIconName | string | null>(null);\n  readonly showIcon = input<boolean>(false);\n\n  protected readonly normalizedTone = computed<AnnouncementCardTone>(() =>\n    this.tone() === \"warning\" ? \"warning\" : \"info\",\n  );\n\n  protected readonly resolvedToneLabel = computed(() => this.normalizedTone());\n\n  protected readonly publishedText = computed(() => {\n    if (this.publishedLabel()) {\n      return this.publishedLabel();\n    }\n    const value = this.publishedAt();\n    if (!value) {\n      return \"\";\n    }\n    try {\n      return `Published ${formatDate(value, \"mediumDate\", \"en-US\")}`;\n    } catch {\n      return `Published ${value}`;\n    }\n  });\n\n  protected readonly resolvedIcon = computed<VikingIconName | string>(\n    () =>\n      this.icon() ||\n      (this.normalizedTone() === \"warning\" ? \"alert-triangle\" : \"info\"),\n  );\n\n  protected readonly iconColor = computed(() =>\n    this.normalizedTone() === \"warning\" ? \"warning\" : \"info\",\n  );\n\n  protected readonly hostClass = computed(\n    () =>\n      `viking-announcement-card viking-announcement-card-${this.normalizedTone()}`,\n  );\n\n  protected readonly ariaLabel = computed(() => {\n    const title = this.title();\n    const date = this.publishedText();\n    return [title, date].filter(Boolean).join(\", \") || \"System announcement\";\n  });\n}\n\nexport { AnnouncementCardComponent as VikingAnnouncementCard };\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport {\n  StatusBadgeComponent,\n  type StatusBadgeVariant,\n} from \"../status-badge/status-badge\";\n\n/**\n * StatusSectionComponent — full-width status page surface with section dividers.\n *\n * Use this as the outer status dashboard/card. Project content with the\n * package-owned utility classes below to avoid nested cards:\n *\n * ```html\n * <viking-status-section title=\"joealongi\" status=\"operational\" statusLabel=\"Operational\">\n *   <div class=\"viking-status-section-block\">...</div>\n *   <div class=\"viking-status-section-grid\">...</div>\n * </viking-status-section>\n * ```\n */\n@Component({\n  selector: \"viking-status-section\",\n  imports: [StatusBadgeComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-status-section\",\n    \"[attr.aria-label]\": \"ariaLabel()\",\n  },\n  template: `\n    <section class=\"viking-status-section-shell\">\n      <header class=\"viking-status-section-hero\">\n        <div class=\"viking-status-section-hero-copy\">\n          <viking-status-badge\n            [variant]=\"status()\"\n            [label]=\"statusLabel()\"\n            [aria]=\"statusAria()\"\n          />\n          @if (!hideTitle()) {\n            <div class=\"viking-status-section-title-row\">\n              <h2 class=\"viking-status-section-title\">{{ title() }}</h2>\n              <ng-content select=\"[statusSectionTitleMeta]\" />\n            </div>\n          }\n          @if (description()) {\n            <p class=\"viking-status-section-description\">{{ description() }}</p>\n          }\n        </div>\n        @if (liveLabel()) {\n          <div class=\"viking-status-section-live\" role=\"status\">\n            <span\n              class=\"viking-status-section-live-dot\"\n              aria-hidden=\"true\"\n            ></span>\n            {{ liveLabel() }}\n          </div>\n        }\n        <ng-content select=\"[statusSectionActions]\" />\n      </header>\n\n      <div class=\"viking-status-section-content\">\n        <ng-content />\n      </div>\n    </section>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n        min-width: 0;\n        color: var(--viking-text);\n      }\n\n      .viking-status-section-shell {\n        display: grid;\n        gap: 0;\n        width: 100%;\n        min-width: 0;\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius-lg);\n        background: var(--viking-surface-recipe, var(--viking-surface));\n        box-shadow: var(--viking-shadow-sm);\n        overflow: hidden;\n      }\n\n      .viking-status-section-hero {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: flex-start;\n        justify-content: space-between;\n        gap: var(--viking-space-4);\n        padding: var(--viking-space-4);\n        border-bottom: 1px solid var(--viking-border);\n        background: color-mix(\n          in srgb,\n          var(--viking-surface-alt) 54%,\n          transparent\n        );\n      }\n\n      .viking-status-section-hero-copy {\n        display: grid;\n        gap: var(--viking-space-2);\n        min-width: min(100%, var(--viking-content-readable-max-width));\n        flex: 1 1 min(100%, var(--viking-content-readable-max-width));\n      }\n\n      .viking-status-section-title-row {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        gap: var(--viking-space-2);\n        min-width: 0;\n      }\n\n      .viking-status-section-title {\n        margin: 0;\n        color: var(--viking-text);\n        font-size: var(--viking-font-size-xl);\n        font-weight: var(--viking-font-weight-bold);\n        line-height: var(--viking-line-height-tight);\n      }\n\n      .viking-status-section-description {\n        margin: 0;\n        color: var(--viking-text-muted);\n        font-size: var(--viking-font-size);\n        line-height: var(--viking-line-height-relaxed);\n        max-width: var(--viking-content-readable-max-width);\n      }\n\n      .viking-status-section-live {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        min-height: var(--viking-touch-target-comfort);\n        padding: var(--viking-space-1) var(--viking-space-2);\n        border-radius: var(--viking-radius-pill);\n        border: 1px solid var(--viking-border-subtle);\n        background: color-mix(\n          in srgb,\n          var(--viking-accent) 10%,\n          var(--viking-surface)\n        );\n        color: var(--viking-text-link);\n        font-size: var(--viking-font-size-xs);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        line-height: var(--viking-line-height-snug);\n        text-transform: uppercase;\n      }\n\n      .viking-status-section-live-dot {\n        width: var(--viking-space-1);\n        height: var(--viking-space-1);\n        border-radius: var(--viking-radius-full);\n        background: var(--viking-accent);\n        box-shadow: 0 0 0 var(--viking-space-0-5)\n          color-mix(in srgb, var(--viking-accent) 14%, transparent);\n      }\n\n      .viking-status-section-content {\n        display: grid;\n        min-width: 0;\n      }\n\n      .viking-status-section-content ::ng-deep > * {\n        min-width: 0;\n      }\n\n      .viking-status-section-content ::ng-deep .viking-status-section-block {\n        display: grid;\n        gap: var(--viking-space-4);\n        padding: var(--viking-space-4);\n        border-top: 1px solid var(--viking-border-subtle);\n      }\n\n      /* System chart breathing — consistent with viking-chart-panel + premium spacing */\n      .viking-status-section-content ::ng-deep viking-chart {\n        margin: var(--viking-space-2) 0 var(--viking-space-1);\n      }\n\n      .viking-status-section-content\n        ::ng-deep\n        .viking-status-section-block:first-child {\n        border-top: 0;\n      }\n\n      .viking-status-section-content ::ng-deep .viking-status-section-heading {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        margin: 0 0 var(--viking-space-2) 0;\n        color: var(--viking-text);\n        font-size: var(--viking-font-size-lg);\n        font-weight: var(--viking-font-weight-bold);\n        line-height: var(--viking-line-height-tight);\n      }\n\n      .viking-status-section-content ::ng-deep .viking-status-section-subtitle {\n        margin: 0 0 var(--viking-space-2) 0;\n        color: var(--viking-text-muted);\n        font-size: var(--viking-font-size-sm);\n        line-height: var(--viking-line-height-relaxed);\n      }\n\n      .viking-status-section-content ::ng-deep .viking-status-section-grid,\n      .viking-status-section-content ::ng-deep .viking-status-section-metrics {\n        display: grid;\n        grid-template-columns: minmax(0, 1fr);\n        gap: var(--viking-space-5);\n        width: 100%;\n      }\n\n      .viking-status-section-content ::ng-deep .viking-status-section-row {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        width: 100%;\n        min-width: 0;\n      }\n\n      .viking-status-section-content ::ng-deep .viking-status-service-list {\n        display: grid;\n        gap: var(--viking-space-5);\n        width: 100%;\n      }\n\n      .viking-status-section-content ::ng-deep .viking-status-service {\n        display: grid;\n        gap: var(--viking-space-4);\n        padding: var(--viking-space-4) 0;\n        border-top: 1px solid var(--viking-border-subtle);\n      }\n\n      /* Service names sit below section H3s — body weight, not heading chrome. */\n      .viking-status-section-content ::ng-deep .viking-status-service-name {\n        margin: 0;\n        font-size: var(--viking-font-size);\n        font-weight: var(--viking-font-weight-semibold, 600);\n        line-height: var(--viking-line-height-tight, 1.2);\n        color: var(--viking-text);\n      }\n\n      .viking-status-section-content\n        ::ng-deep\n        .viking-status-service:first-child {\n        border-top: 0;\n        padding-top: 0;\n      }\n\n      /* md breakpoint: 2-col for grids, start 2-col for dense metrics */\n      @media (min-width: 768px) {\n        .viking-status-section-hero {\n          gap: var(--viking-space-3);\n        }\n\n        .viking-status-section-title {\n          font-size: var(--viking-font-size-2xl);\n        }\n\n        .viking-status-section-content ::ng-deep .viking-status-section-block {\n          gap: var(--viking-space-6);\n          padding: var(--viking-space-5);\n        }\n\n        .viking-status-section-content ::ng-deep .viking-status-section-grid {\n          grid-template-columns: repeat(2, minmax(0, 1fr));\n          gap: var(--viking-space-5);\n        }\n\n        .viking-status-section-content\n          ::ng-deep\n          .viking-status-section-metrics {\n          grid-template-columns: repeat(2, minmax(0, 1fr));\n          gap: var(--viking-space-5);\n        }\n      }\n    `,\n  ],\n})\nexport class StatusSectionComponent {\n  readonly title = input.required<string>();\n  readonly description = input<string>(\"\");\n  readonly status = input<StatusBadgeVariant | string>(\"operational\");\n  readonly statusLabel = input<string>(\"\");\n  readonly statusAria = input<string>(\"\");\n  readonly liveLabel = input<string>(\"\");\n  /** Hide the H2 when a parent page-header already owns the page title. */\n  readonly hideTitle = input<boolean>(false);\n\n  protected readonly ariaLabel = computed(\n    () => `${this.title()} status overview`,\n  );\n}\n\nexport { StatusSectionComponent as VikingStatusSection };\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport {\n  AnnouncementCardComponent,\n  type AnnouncementCardTone,\n} from \"../announcement-card/announcement-card\";\nimport { MetricCardComponent } from \"../metric-card/metric-card\";\nimport {\n  StatusBadgeComponent,\n  type StatusBadgeVariant,\n} from \"../status-badge/status-badge\";\nimport { StatusSectionComponent } from \"../status-section/status-section\";\nimport {\n  UptimeHistoryComponent,\n  type UptimeHistoryDataPoint,\n} from \"../uptime-history/uptime-history\";\nimport { VikingCallout } from \"../callout/callout\";\nimport type { VikingIconName } from \"../../core/icons\";\nimport type { VikingTone } from \"../../core/types\";\n\nexport type StatusDashboardThemeMode = \"current\" | \"light\" | \"dark\";\n\nexport type StatusDashboardMetric = {\n  icon?: VikingIconName | string | null;\n  label: string;\n  value: string | number;\n  sublabel?: string;\n  tone?: VikingTone | \"default\";\n};\n\nexport type StatusDashboardService = {\n  name: string;\n  url?: string;\n  status?: StatusBadgeVariant | string;\n  statusLabel?: string;\n  latency?: string | number;\n  uptime?: string | number;\n  history: UptimeHistoryDataPoint[];\n};\n\nexport type StatusDashboardAnnouncement = {\n  title: string;\n  body: string;\n  tone?: AnnouncementCardTone;\n  publishedAt?: string | Date | null;\n};\n\nconst createDemoHistory = (\n  partialIndex: number,\n  downIndex: number,\n): UptimeHistoryDataPoint[] =>\n  Array.from({ length: 30 }, (_, index) => {\n    const date = new Date(\"2026-06-08T00:00:00Z\");\n    date.setUTCDate(date.getUTCDate() + index);\n    return {\n      date: date.toISOString().slice(0, 10),\n      status:\n        index === downIndex\n          ? \"down\"\n          : index === partialIndex\n            ? \"partial\"\n            : \"up\",\n    };\n  });\n\nconst DEMO_HISTORY_PRIMARY = createDemoHistory(12, 21);\nconst DEMO_HISTORY_API = createDemoHistory(7, 22);\nconst DEMO_HISTORY_CDN = createDemoHistory(18, -1);\n\nconst DEMO_METRICS: StatusDashboardMetric[] = [\n  {\n    icon: \"server\",\n    label: \"SLA\",\n    value: \"99.99%\",\n    sublabel: \"30-day service level\",\n    tone: \"success\",\n  },\n  {\n    icon: \"clock\",\n    label: \"Latency\",\n    value: \"158.71ms\",\n    sublabel: \"Latest observation\",\n    tone: \"info\",\n  },\n  {\n    icon: \"bar-chart\",\n    label: \"Requests\",\n    value: \"2.4M\",\n    sublabel: \"Last 24 hours\",\n    tone: \"default\",\n  },\n  {\n    icon: \"trending-up\",\n    label: \"Forecast\",\n    value: \"100.00%\",\n    sublabel: \"Predicted SLA\",\n    tone: \"default\",\n  },\n];\n\nconst DEMO_SERVICES: StatusDashboardService[] = [\n  {\n    name: \"Primary Site\",\n    url: \"https://joealongi.dev\",\n    status: \"operational\",\n    statusLabel: \"Operational\",\n    latency: \"158.71ms\",\n    uptime: \"100.00%\",\n    history: DEMO_HISTORY_PRIMARY,\n  },\n  {\n    name: \"API Gateway\",\n    url: \"https://api.joealongi.dev/health\",\n    status: \"degraded\",\n    statusLabel: \"Partial\",\n    latency: \"212.08ms\",\n    uptime: \"99.94%\",\n    history: DEMO_HISTORY_API,\n  },\n  {\n    name: \"Edge Announcements\",\n    url: \"Sanity.io CDN\",\n    status: \"operational\",\n    statusLabel: \"Operational\",\n    latency: \"42.13ms\",\n    uptime: \"100.00%\",\n    history: DEMO_HISTORY_CDN,\n  },\n];\n\nconst DEMO_ANNOUNCEMENTS: StatusDashboardAnnouncement[] = [\n  {\n    tone: \"info\",\n    title: \"Sanity.io Integration Active\",\n    publishedAt: \"2026-06-13\",\n    body: \"Announcements are served globally from edge CDNs for lightning-fast status page updates.\",\n  },\n  {\n    tone: \"warning\",\n    title: \"API Gateway Latency Watch\",\n    publishedAt: \"2026-06-20\",\n    body: \"The prediction worker detected elevated latency and is tracking the gateway under a degraded watch.\",\n  },\n];\n\n/**\n * StatusDashboardComponent — cohesive status monitoring dashboard section.\n *\n * Composes StatusBadgeComponent, MetricCardComponent, UptimeHistoryComponent,\n * and AnnouncementCardComponent into one full-width status page surface.\n *\n * @example\n * ```html\n * <viking-status-dashboard\n *   title=\"joealongi\"\n *   description=\"All systems are functioning normally.\"\n *   status=\"operational\"\n *   statusLabel=\"Operational\"\n *   liveLabel=\"Live Predictions Active\"\n *   [metrics]=\"metrics\"\n *   [services]=\"services\"\n *   [announcements]=\"announcements\"\n *   [showThemeVersions]=\"true\"\n * />\n * ```\n */\n@Component({\n  selector: \"viking-status-dashboard\",\n  imports: [\n    AnnouncementCardComponent,\n    MetricCardComponent,\n    StatusBadgeComponent,\n    StatusSectionComponent,\n    UptimeHistoryComponent,\n    VikingCallout,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-status-dashboard\",\n  },\n  template: `\n    <div class=\"viking-status-dashboard-versions\">\n      @for (mode of visibleThemeModes(); track mode) {\n        <section\n          class=\"viking-status-dashboard-theme\"\n          [class.viking-status-dashboard-theme-current]=\"mode === 'current'\"\n          [class.viking-status-dashboard-theme-light]=\"mode === 'light'\"\n          [class.viking-status-dashboard-theme-dark]=\"mode === 'dark'\"\n          [attr.aria-label]=\"themeAriaLabel(mode)\"\n        >\n          @if (mode !== \"current\") {\n            <p class=\"viking-status-dashboard-theme-label\">\n              {{ themeLabel(mode) }}\n            </p>\n          }\n\n          <viking-status-section\n            [title]=\"title()\"\n            [description]=\"description()\"\n            [status]=\"status()\"\n            [statusLabel]=\"statusLabel()\"\n            [liveLabel]=\"liveLabel()\"\n          >\n            <section\n              class=\"viking-status-section-block\"\n              [attr.aria-labelledby]=\"\n                'status-dashboard-metrics-heading-' + mode\n              \"\n            >\n              <h3\n                class=\"viking-status-section-heading\"\n                [attr.id]=\"'status-dashboard-metrics-heading-' + mode\"\n              >\n                {{ metricsHeading() }}\n              </h3>\n              <div class=\"viking-status-section-metrics\">\n                @for (metric of metrics(); track metric.label) {\n                  <viking-metric-card\n                    [icon]=\"metric.icon ?? null\"\n                    [label]=\"metric.label\"\n                    [value]=\"metric.value\"\n                    [sublabel]=\"metric.sublabel ?? ''\"\n                    [tone]=\"metric.tone ?? 'default'\"\n                  />\n                }\n              </div>\n            </section>\n\n            <section\n              class=\"viking-status-section-block\"\n              [attr.aria-labelledby]=\"\n                'status-dashboard-services-heading-' + mode\n              \"\n            >\n              <h3\n                class=\"viking-status-section-heading\"\n                [attr.id]=\"'status-dashboard-services-heading-' + mode\"\n              >\n                {{ servicesHeading() }}\n              </h3>\n\n              @if (services().length === 0) {\n                <viking-callout tone=\"muted\" heading=\"No Services\">\n                  No monitored services configured for this status page.\n                </viking-callout>\n              } @else {\n                <div class=\"viking-status-service-list\">\n                  @for (service of services(); track service.name) {\n                    <article class=\"viking-status-service\">\n                      <div class=\"viking-status-section-row\">\n                        <div>\n                          <h4 class=\"viking-status-section-heading\">\n                            {{ service.name }}\n                          </h4>\n                          @if (service.url) {\n                            <p class=\"viking-status-section-subtitle\">\n                              {{ service.url }}\n                            </p>\n                          }\n                        </div>\n                        <viking-status-badge\n                          [variant]=\"service.status ?? 'operational'\"\n                          [label]=\"\n                            service.statusLabel ?? serviceStatusLabel(service)\n                          \"\n                        />\n                      </div>\n\n                      <div class=\"viking-status-section-grid\">\n                        <viking-metric-card\n                          icon=\"clock\"\n                          label=\"Response Time\"\n                          [value]=\"service.latency ?? 'Pending'\"\n                          sublabel=\"Latest observation\"\n                          tone=\"info\"\n                        />\n                        <viking-metric-card\n                          icon=\"shield-check\"\n                          label=\"Uptime\"\n                          [value]=\"service.uptime ?? '100.00%'\"\n                          sublabel=\"30-day SLA\"\n                          tone=\"success\"\n                        />\n                      </div>\n\n                      <viking-uptime-history\n                        [data]=\"service.history\"\n                        [height]=\"24\"\n                        [showLabels]=\"true\"\n                        label=\"Uptime\"\n                        [statusSummary]=\"\n                          service.uptime\n                            ? service.uptime + ' SLA'\n                            : '30-day SLA'\n                        \"\n                      />\n                    </article>\n                  }\n                </div>\n              }\n            </section>\n\n            <section\n              class=\"viking-status-section-block\"\n              [attr.aria-labelledby]=\"\n                'status-dashboard-announcements-heading-' + mode\n              \"\n            >\n              <h3\n                class=\"viking-status-section-heading\"\n                [attr.id]=\"'status-dashboard-announcements-heading-' + mode\"\n              >\n                {{ announcementsHeading() }}\n              </h3>\n              @for (announcement of announcements(); track announcement.title) {\n                <viking-announcement-card\n                  [tone]=\"announcement.tone ?? 'info'\"\n                  [title]=\"announcement.title\"\n                  [publishedAt]=\"announcement.publishedAt ?? null\"\n                >\n                  {{ announcement.body }}\n                </viking-announcement-card>\n              } @empty {\n                <viking-announcement-card tone=\"info\" title=\"No announcements\">\n                  There are no published system announcements right now.\n                </viking-announcement-card>\n              }\n            </section>\n          </viking-status-section>\n        </section>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n        min-width: 0;\n      }\n\n      .viking-status-dashboard-versions {\n        display: grid;\n        gap: var(--viking-space-4);\n        width: 100%;\n        min-width: 0;\n      }\n\n      .viking-status-dashboard-theme {\n        display: grid;\n        gap: var(--viking-space-2);\n        width: 100%;\n        min-width: 0;\n        color: var(--viking-text);\n      }\n\n      .viking-status-dashboard-theme-light,\n      .viking-status-dashboard-theme-dark {\n        padding: var(--viking-space-3);\n        border-radius: var(--viking-radius-lg);\n        background: var(--viking-bg);\n      }\n\n      .viking-status-dashboard-theme-label {\n        margin: 0;\n        color: var(--viking-text-muted);\n        font-size: var(--viking-font-size-xs);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        line-height: var(--viking-line-height-snug);\n        text-transform: uppercase;\n      }\n\n      .viking-status-dashboard-theme-dark {\n        color-scheme: dark;\n        --viking-bg: var(--viking-charcoal-900);\n        --viking-surface: var(--viking-charcoal-800);\n        --viking-surface-alt: var(--viking-charcoal-700);\n        --viking-surface-inset: var(--viking-charcoal-950);\n        --viking-surface-raised: var(--viking-charcoal-600);\n        --viking-text: var(--viking-white);\n        --viking-text-muted: var(--viking-metallic-200);\n        --viking-text-subtle: var(--viking-metallic-300);\n        --viking-border: color-mix(\n          in srgb,\n          var(--viking-metallic-600) 48%,\n          transparent\n        );\n        --viking-border-strong: color-mix(\n          in srgb,\n          var(--viking-metallic-400) 68%,\n          transparent\n        );\n        --viking-border-subtle: color-mix(\n          in srgb,\n          var(--viking-metallic-600) 28%,\n          transparent\n        );\n        --viking-accent: var(--viking-electric-500);\n        --viking-accent-strong: var(--viking-electric-300);\n        --viking-success: var(--viking-green-500);\n        --viking-warning: var(--viking-gold-500);\n        --viking-danger: var(--viking-crimson-500);\n        --viking-info: var(--viking-blue-500);\n        --viking-danger-text: var(--viking-crimson-400);\n      }\n\n      .viking-status-dashboard-theme-light {\n        color-scheme: light;\n        --viking-bg: var(--viking-slate-050);\n        --viking-surface: var(--viking-white-pure);\n        --viking-surface-alt: var(--viking-slate-100);\n        --viking-surface-inset: var(--viking-metallic-050);\n        --viking-surface-raised: var(--viking-white-pure);\n        --viking-text: var(--viking-charcoal-900);\n        --viking-text-muted: var(--viking-metallic-500);\n        --viking-text-subtle: var(--viking-metallic-400);\n        --viking-border: color-mix(\n          in srgb,\n          var(--viking-metallic-600) 32%,\n          transparent\n        );\n        --viking-border-strong: color-mix(\n          in srgb,\n          var(--viking-metallic-600) 48%,\n          transparent\n        );\n        --viking-border-subtle: color-mix(\n          in srgb,\n          var(--viking-metallic-600) 22%,\n          transparent\n        );\n        --viking-accent: var(--viking-electric-600);\n        --viking-accent-strong: var(--viking-electric-400);\n        --viking-success: var(--viking-green-500);\n        --viking-warning: var(--viking-gold-500);\n        --viking-danger: var(--viking-crimson-600);\n        --viking-info: var(--viking-electric-600);\n        --viking-danger-text: var(--viking-crimson-700);\n      }\n    `,\n  ],\n})\nexport class StatusDashboardComponent {\n  readonly title = input<string>(\"joealongi\");\n  readonly description = input<string>(\"All systems are functioning normally.\");\n  readonly status = input<StatusBadgeVariant | string>(\"operational\");\n  readonly statusLabel = input<string>(\"Operational\");\n  readonly liveLabel = input<string>(\"Live Predictions Active\");\n  readonly metricsHeading = input<string>(\"System Metrics\");\n  readonly servicesHeading = input<string>(\"Active Monitored Services\");\n  readonly announcementsHeading = input<string>(\"Latest System Announcements\");\n  readonly metrics = input<StatusDashboardMetric[]>(DEMO_METRICS);\n  readonly services = input<StatusDashboardService[]>(DEMO_SERVICES);\n  readonly announcements =\n    input<StatusDashboardAnnouncement[]>(DEMO_ANNOUNCEMENTS);\n  readonly theme = input<StatusDashboardThemeMode>(\"current\");\n  readonly showThemeVersions = input<boolean>(false);\n\n  protected readonly visibleThemeModes = computed<StatusDashboardThemeMode[]>(\n    () => (this.showThemeVersions() ? [\"light\", \"dark\"] : [this.theme()]),\n  );\n\n  protected readonly serviceStatusLabel = (\n    service: StatusDashboardService,\n  ): string => {\n    const raw = `${service.status ?? \"operational\"}`.toLowerCase();\n    if (raw === \"degraded\" || raw === \"partial_outage\") return \"Partial\";\n    if (raw === \"outage\" || raw === \"major_outage\") return \"Down\";\n    if (raw === \"maintenance\") return \"Maintenance\";\n    return \"Operational\";\n  };\n\n  protected readonly themeLabel = (mode: StatusDashboardThemeMode): string => {\n    if (mode === \"light\") return \"Light mode\";\n    if (mode === \"dark\") return \"Dark mode\";\n    return \"Current theme\";\n  };\n\n  protected readonly themeAriaLabel = (\n    mode: StatusDashboardThemeMode,\n  ): string => `${this.themeLabel(mode)} status dashboard preview`;\n}\n\nexport { StatusDashboardComponent as VikingStatusDashboard };\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport type { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-status-metric-row — icon + title/subtitle + value row for status cards.\n */\n@Component({\n  selector: \"viking-status-metric-row\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: \"viking-status-metric-row ml-stat-panel\" },\n  template: `\n    <div class=\"stat-info\">\n      <viking-icon\n        [name]=\"icon()\"\n        [size]=\"22\"\n        color=\"accent\"\n        [backdrop]=\"true\"\n      />\n      <div>\n        <span class=\"stat-title\">{{ title() }}</span>\n        @if (subtitle()) {\n          <span class=\"stat-subtitle\">{{ subtitle() }}</span>\n        }\n      </div>\n    </div>\n    <div class=\"stat-value-container\">\n      <span class=\"stat-value\"><ng-content />{{ value() }}</span>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: var(--viking-space-3);\n        width: 100%;\n        min-width: 0;\n        min-height: var(--viking-space-6);\n        height: 100%;\n        padding: var(--viking-space-2); /* Consistent padding */\n        border-radius: var(--viking-radius); /* Improved rounding */\n        background: color-mix(\n          in srgb,\n          var(--viking-surface-alt) 82%,\n          var(--viking-surface)\n        );\n        box-sizing: border-box;\n        box-shadow: var(--viking-shadow-xs);\n        transition: background var(--viking-duration-fast)\n          var(--viking-ease-out);\n      }\n      :host(:hover) {\n        background: color-mix(\n          in srgb,\n          var(--viking-surface-alt) 92%,\n          var(--viking-surface)\n        );\n      }\n      .stat-info {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-2);\n        min-width: 0;\n      }\n      .stat-info > div {\n        min-width: 0;\n      }\n      .stat-title {\n        display: block;\n        font-size: var(--viking-font-size-2xs);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        text-transform: uppercase;\n        color: var(--viking-text-muted);\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n      .stat-subtitle {\n        display: block;\n        font-size: var(--viking-font-size-3xs);\n        color: var(--viking-text-subtle);\n        margin-top: var(--viking-space-px);\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n      .stat-value-container {\n        display: inline-flex;\n        justify-content: flex-end;\n        min-width: max-content;\n      }\n      .stat-value {\n        font-size: calc(var(--viking-font-size) * 1.15);\n        font-weight: var(--viking-font-weight-bold);\n        color: var(--viking-accent-strong);\n        font-variant-numeric: tabular-nums;\n        text-align: right;\n        white-space: nowrap;\n      }\n    `,\n  ],\n})\nexport class VikingStatusMetricRow {\n  readonly icon = input.required<VikingIconName>();\n  readonly title = input.required<string>();\n  readonly subtitle = input<string>(\"\");\n  readonly value = input<string | number>(\"\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  CUSTOM_ELEMENTS_SCHEMA,\n  input,\n  output,\n} from \"@angular/core\";\nimport { registerVikingStatusPillWcElement } from \"../../web/status-pill/viking-status-pill-wc\";\nimport type { VikingTone } from \"../../core/types\";\n\nregisterVikingStatusPillWcElement();\n\n/**\n * viking-status-pill — status badge for status cards and operational states.\n */\n@Component({\n  selector: \"viking-status-pill\",\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <viking-status-pill-wc\n      [attr.tone]=\"tone()\"\n      [attr.icon]=\"icon()\"\n      [attr.dot]=\"dot() || null\"\n      [attr.compact]=\"compact() || null\"\n      [attr.removable]=\"removable() || null\"\n      [attr.href]=\"href()\"\n      [attr.target]=\"target()\"\n      [attr.aria-label]=\"ariaLabel()\"\n      (viking-pill-removed)=\"removed.emit()\"\n    >\n      <ng-content />\n    </viking-status-pill-wc>\n  `,\n})\nexport class VikingStatusPill {\n  readonly tone = input<VikingTone>(\"muted\");\n  readonly icon = input<string>(\"\");\n  readonly dot = input<boolean>(false);\n  readonly compact = input<boolean>(false);\n  readonly removable = input<boolean>(false);\n  readonly href = input<string>(\"\");\n  readonly target = input<string>(\"\");\n  readonly ariaLabel = input<string>(\"\");\n\n  readonly removed = output<void>();\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-slider — range slider.\n * ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-slider\",\n  providers: [provideVikingCva(VikingSlider)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"viking-slider-header\">\n      @if (label()) {\n        <span class=\"viking-slider-label\">{{ label() }}</span>\n      }\n      @if (showValue()) {\n        <output class=\"viking-slider-value\">{{ value() }}</output>\n      }\n    </div>\n    <input\n      type=\"range\"\n      [min]=\"min()\"\n      [max]=\"max()\"\n      [step]=\"step()\"\n      [value]=\"value()\"\n      [disabled]=\"disabled() || formDisabled()\"\n      [attr.aria-label]=\"label() || 'Slider'\"\n      [style.--viking-slider-fill.%]=\"fillPercent()\"\n      (input)=\"onInput($event)\"\n      (blur)=\"onTouched()\"\n    />\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      .viking-slider-header {\n        display: flex;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        margin-bottom: calc(var(--viking-space-1) / 2);\n        font-size: var(--viking-font-size);\n      }\n      .viking-slider-label {\n        color: var(--viking-text);\n        font-weight: 500;\n      }\n      .viking-slider-value {\n        color: var(--viking-text-muted);\n        font-variant-numeric: tabular-nums;\n      }\n      input[type=\"range\"] {\n        appearance: none;\n        width: 100%;\n        height: var(--viking-space-1);\n        border-radius: var(--viking-radius-pill);\n        border: 1px solid var(--viking-border);\n        background: linear-gradient(\n          to right,\n          var(--viking-accent) var(--viking-slider-fill, 0%),\n          var(--viking-surface-alt) var(--viking-slider-fill, 0%)\n        );\n        cursor: pointer;\n        margin: var(--viking-space-1) 0;\n      }\n      input[type=\"range\"]:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      input[type=\"range\"]::-webkit-slider-thumb {\n        appearance: none;\n        width: var(--viking-space-2);\n        height: var(--viking-space-2);\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-surface);\n        border: 2px solid var(--viking-accent);\n        box-shadow: var(--viking-shadow-sm);\n        transition: transform 0.15s ease;\n      }\n      input[type=\"range\"]::-webkit-slider-thumb:hover {\n        transform: scale(1.15);\n      }\n      input[type=\"range\"]::-moz-range-thumb {\n        width: var(--viking-space-2);\n        height: var(--viking-space-2);\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-surface);\n        border: 2px solid var(--viking-accent);\n        box-shadow: var(--viking-shadow-sm);\n      }\n      input[type=\"range\"]:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n    `,\n  ],\n})\nexport class VikingSlider extends VikingControl<number> {\n  readonly value = model<number>(0);\n  readonly min = input<number>(0);\n  readonly max = input<number>(100);\n  readonly step = input<number>(1);\n  readonly label = input<string>(\"\");\n  readonly showValue = input<boolean>(true);\n  readonly disabled = input<boolean>(false);\n\n  protected readonly fillPercent = computed(() => {\n    const range = this.max() - this.min();\n    if (range <= 0) {\n      return 0;\n    }\n    return ((this.value() - this.min()) / range) * 100;\n  });\n\n  writeValue(value: number): void {\n    this.value.set(Number(value ?? 0));\n  }\n\n  protected onInput = (event: Event): void => {\n    const next = Number((event.target as HTMLInputElement).value);\n    this.value.set(next);\n    this.onChange(next);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  model,\n  OnDestroy,\n  output,\n  signal,\n  viewChild,\n  AfterViewInit,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport type VikingSplitPanelWidth = \"compact\" | \"medium\" | \"large\";\n\n/**\n * viking-split-panel — resizable slide-over panel for contextual details.\n * Based on Cloudscape Split Panel pattern, adapted for Viking-UI.\n * Used for pipeline status inspection, incident triage, and detail views.\n */\n@Component({\n  selector: \"viking-split-panel\",\n  standalone: true,\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"[class]\": \"hostClass()\",\n  },\n  template: `\n    @if (open()) {\n      <aside\n        #panel\n        class=\"viking-split-panel\"\n        [attr.aria-label]=\"heading() || 'Details panel'\"\n        [attr.aria-modal]=\"modal() ? 'true' : null\"\n        role=\"dialog\"\n        tabindex=\"-1\"\n      >\n        <header class=\"viking-split-panel__header\">\n          <h2 class=\"viking-split-panel__heading\">{{ heading() }}</h2>\n          <div class=\"viking-split-panel__actions\">\n            <ng-content select=\"[vikingSplitPanelActions]\" />\n            @if (dismissible()) {\n              <button\n                type=\"button\"\n                class=\"viking-split-panel__close\"\n                aria-label=\"Close panel\"\n                (click)=\"closePanel()\"\n              >\n                <viking-icon name=\"x\" [size]=\"20\" />\n              </button>\n            }\n          </div>\n        </header>\n        <div class=\"viking-split-panel__body\">\n          <ng-content />\n        </div>\n        <footer class=\"viking-split-panel__footer\">\n          <ng-content select=\"[vikingSplitPanelFooter]\" />\n        </footer>\n      </aside>\n      @if (modal()) {\n        <div\n          class=\"viking-split-panel__scrim\"\n          (click)=\"dismissible() && closePanel()\"\n        ></div>\n      }\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      .viking-split-panel {\n        position: fixed;\n        top: 0;\n        right: 0;\n        height: 100vh;\n        width: 100vw;\n        background: var(--viking-surface);\n        border-left: 1px solid var(--viking-border-strong);\n        display: flex;\n        flex-direction: column;\n        z-index: var(--viking-z-overlay);\n        box-shadow: var(--viking-shadow-xl);\n        animation: viking-split-panel-in var(--viking-duration)\n          var(--viking-ease-out);\n      }\n      @keyframes viking-split-panel-in {\n        from {\n          transform: translateX(100%);\n        }\n        to {\n          transform: translateX(0);\n        }\n      }\n      .viking-split-panel__header {\n        display: flex;\n        align-items: flex-start;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        padding: var(--viking-space-2);\n        border-bottom: 1px solid var(--viking-border);\n        flex-shrink: 0;\n      }\n      .viking-split-panel__heading {\n        margin: 0;\n        font-size: var(--viking-font-size-ui);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        color: var(--viking-text);\n      }\n      .viking-split-panel__actions {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n      }\n      .viking-split-panel__close {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-control-height-sm);\n        height: var(--viking-control-height-sm);\n        border: 1px solid transparent;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: 0;\n        border-radius: var(--viking-radius);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-split-panel__close:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n        border-color: var(--viking-border-subtle);\n      }\n      .viking-split-panel__close:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-split-panel__body {\n        flex: 1;\n        overflow: auto;\n        padding: var(--viking-space-2);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        line-height: var(--viking-line-height-relaxed);\n      }\n      .viking-split-panel__footer {\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: flex-end;\n        gap: var(--viking-space-2);\n        padding: var(--viking-space-2);\n        border-top: 1px solid var(--viking-border);\n      }\n      .viking-split-panel__footer:empty {\n        display: none;\n      }\n      .viking-split-panel__scrim {\n        position: fixed;\n        inset: 0;\n        background: var(--viking-overlay-backdrop);\n        backdrop-filter: blur(4px);\n        z-index: calc(var(--viking-z-overlay) - 1);\n        animation: viking-backdrop-in var(--viking-duration-fast)\n          var(--viking-ease-default);\n      }\n      /* Size variants */\n      :host(.viking-split-panel--compact) {\n        --viking-split-panel-width: 320px;\n      }\n      :host(.viking-split-panel--medium) {\n        --viking-split-panel-width: 480px;\n      }\n      :host(.viking-split-panel--large) {\n        --viking-split-panel-width: 640px;\n      }\n      @media (min-width: 600px) {\n        .viking-split-panel {\n          width: var(--viking-split-panel-width, 480px);\n        }\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .viking-split-panel {\n          animation: none;\n        }\n        .viking-split-panel__scrim {\n          animation: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingSplitPanel implements AfterViewInit, OnDestroy {\n  readonly open = model<boolean>(false);\n  readonly heading = input<string>(\"\");\n  readonly dismissible = input<boolean>(true);\n  readonly modal = input<boolean>(false);\n  readonly size = input<VikingSplitPanelWidth>(\"medium\");\n\n  readonly panelClosed = output<void>();\n  readonly panelOpened = output<void>();\n\n  protected readonly hostClass = computed(() =>\n    [\"viking-split-panel-wrapper\", `viking-split-panel--${this.size()}`].join(\n      \" \",\n    ),\n  );\n\n  ngAfterViewInit(): void {\n    if (this.open()) {\n      this.focusPanel();\n    }\n  }\n\n  ngOnDestroy(): void {\n    // Clean up any focus state\n  }\n\n  protected closePanel = (): void => {\n    if (this.dismissible()) {\n      this.open.set(false);\n      this.panelClosed.emit();\n    }\n  };\n\n  private focusPanel(): void {\n    setTimeout(() => {\n      const panel = document.querySelector(\".viking-split-panel\");\n      if (panel instanceof HTMLElement) {\n        panel.focus();\n      }\n    });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-switch — toggle switch.\n * ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-switch\",\n  providers: [provideVikingCva(VikingSwitch)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <label\n      class=\"viking-switch\"\n      [class.viking-disabled]=\"disabled() || formDisabled()\"\n    >\n      <span class=\"viking-switch-track\" [class.viking-checked]=\"checked()\">\n        <input\n          type=\"checkbox\"\n          role=\"switch\"\n          [checked]=\"checked()\"\n          [attr.aria-checked]=\"checked()\"\n          [disabled]=\"disabled() || formDisabled()\"\n          (change)=\"toggle($event)\"\n          (blur)=\"onTouched()\"\n        />\n        <span class=\"viking-switch-thumb\"></span>\n      </span>\n      <span class=\"viking-switch-content\">\n        <span class=\"viking-switch-label\"><ng-content /></span>\n        @if (description()) {\n          <span class=\"viking-switch-description\">{{ description() }}</span>\n        }\n      </span>\n    </label>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        font-family: var(--viking-font-family);\n      }\n      .viking-switch {\n        display: inline-flex;\n        align-items: flex-start;\n        gap: var(--viking-space-1);\n        cursor: pointer;\n      }\n      .viking-disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-switch-track {\n        position: relative;\n        display: inline-flex;\n        align-items: center;\n        width: var(--viking-space-4);\n        height: calc(var(--viking-space-2) + (var(--viking-space-0-5) / 2));\n        padding: calc(var(--viking-space-0-5) / 2);\n        margin-top: var(--viking-space-0-5);\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-surface-alt);\n        border: 1px solid var(--viking-border-strong);\n        transition: var(--viking-transition-interactive);\n        flex-shrink: 0;\n        box-sizing: border-box;\n      }\n      /* Expand hit target to suite touch floor without growing the visual track. */\n      .viking-switch-track::before {\n        content: \"\";\n        position: absolute;\n        inset: 50%;\n        width: var(--viking-touch-target-min, 44px);\n        height: var(--viking-touch-target-min, 44px);\n        transform: translate(-50%, -50%);\n      }\n      /* The native input fills the hit area so clicks and focus land on it. */\n      .viking-switch-track input {\n        position: absolute;\n        inset: 50%;\n        width: var(--viking-touch-target-min, 44px);\n        height: var(--viking-touch-target-min, 44px);\n        transform: translate(-50%, -50%);\n        margin: 0;\n        opacity: 0;\n        cursor: pointer;\n      }\n      .viking-switch-thumb {\n        width: 14px;\n        height: 14px;\n        border-radius: var(--viking-radius-pill);\n        background: var(--viking-text-muted);\n        transition: var(--viking-transition-transform);\n      }\n      .viking-switch-track.viking-checked {\n        background: var(--viking-accent);\n        border-color: var(--viking-accent);\n      }\n      .viking-switch-track.viking-checked .viking-switch-thumb {\n        background: var(--viking-accent-content);\n        transform: translateX(calc(var(--viking-space-4) - 22px));\n      }\n      .viking-switch-track:has(input:focus-visible) {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-switch-content {\n        display: flex;\n        flex-direction: column;\n      }\n      .viking-switch-label {\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        line-height: 1.45;\n      }\n      .viking-switch-description {\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n      }\n    `,\n  ],\n})\nexport class VikingSwitch extends VikingControl<boolean> {\n  readonly checked = model<boolean>(false);\n  readonly disabled = input<boolean>(false);\n  readonly description = input<string>(\"\");\n\n  writeValue(value: boolean): void {\n    this.checked.set(!!value);\n  }\n\n  protected toggle = (event: Event): void => {\n    const next = (event.target as HTMLInputElement).checked;\n    this.checked.set(next);\n    this.onChange(next);\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingEmptyState } from \"../empty-state/empty-state\";\nimport { VikingSkeleton } from \"../skeleton/skeleton\";\n\n/**\n * viking-table — clinical data table wrapper.\n */\n@Component({\n  selector: \"viking-table\",\n  imports: [VikingEmptyState, VikingSkeleton],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-table-wrap\",\n    \"[class.viking-table-compact]\": \"compact()\",\n    \"[class.viking-table-striped]\": \"striped()\",\n    \"[class.viking-table-loading]\": \"loading()\",\n    \"[attr.aria-busy]\": \"loading() ? 'true' : null\",\n  },\n  template: `\n    @if (loading()) {\n      <div\n        class=\"suite-skeleton-stack viking-skeleton-stack viking-table-loading-state\"\n        aria-hidden=\"true\"\n      >\n        @for (row of [1, 2, 3, 4]; track row) {\n          <viking-skeleton height=\"44px\" />\n        }\n      </div>\n    } @else if (emptyMessage()) {\n      <viking-empty-state\n        [heading]=\"emptyMessage()\"\n        [description]=\"emptyDescription()\"\n        icon=\"search-off\"\n        density=\"compact\"\n        variant=\"inset\"\n      />\n    } @else {\n      <table class=\"viking-table\">\n        <ng-content />\n      </table>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n        overflow-x: auto;\n        border: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-component-border);\n        border-radius: var(--viking-component-surface-radius);\n        background: var(--viking-component-bg);\n        box-shadow: var(--viking-component-shadow);\n        transition: var(--viking-transition-interactive);\n        position: relative;\n      }\n      .viking-table-loading-state {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-1);\n        padding: var(--viking-space-2);\n      }\n      .viking-table {\n        width: 100%;\n        min-width: 40rem;\n        border-collapse: collapse;\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text);\n      }\n      :host ::ng-deep thead th {\n        font-size: var(--viking-font-size-xs);\n        font-weight: var(--viking-font-weight-semibold);\n        text-align: left;\n        letter-spacing: var(--viking-letter-spacing-wide);\n        color: var(--viking-text-muted);\n        background: var(--viking-component-bg-subtle);\n        padding: var(--viking-table-cell-padding-y)\n          var(--viking-table-cell-padding-x);\n        border-bottom: var(--viking-border-width) var(--viking-border-style)\n          var(--viking-component-border);\n        white-space: nowrap;\n      }\n\n      :host ::ng-deep tbody tr:focus-visible td {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: -2px;\n      }\n\n      :host ::ng-deep tbody td {\n        padding: var(--viking-table-cell-padding-y)\n          var(--viking-table-cell-padding-x);\n        border-bottom: 1px solid var(--viking-border-subtle);\n        vertical-align: middle;\n        transition: background-color var(--viking-duration-fast)\n          var(--viking-ease-default);\n      }\n      :host ::ng-deep tbody tr:last-child td {\n        border-bottom: none;\n      }\n      :host ::ng-deep tbody tr:hover td {\n        background: color-mix(\n          in srgb,\n          var(--viking-accent) 6%,\n          var(--viking-component-bg)\n        );\n      }\n      :host(.viking-table-striped) ::ng-deep tbody tr:nth-child(even) td {\n        background: color-mix(\n          in srgb,\n          var(--viking-component-bg-subtle) 52%,\n          var(--viking-component-bg)\n        );\n      }\n      :host(.viking-table-striped) ::ng-deep tbody tr:nth-child(even):hover td {\n        background: color-mix(\n          in srgb,\n          var(--viking-accent) 6%,\n          var(--viking-component-bg)\n        );\n      }\n      :host(.viking-table-compact) ::ng-deep thead th,\n      :host(.viking-table-compact) ::ng-deep tbody td {\n        padding: var(--viking-space-1) var(--viking-space-2);\n      }\n    `,\n  ],\n})\nexport class VikingTable {\n  readonly compact = input(false);\n  readonly striped = input(false);\n  readonly loading = input(false);\n  readonly emptyMessage = input<string>(\"\");\n  readonly emptyDescription = input<string>(\"\");\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingEmptyState } from \"../empty-state/empty-state\";\nimport { VikingSkeleton } from \"../skeleton/skeleton\";\n\nexport interface VikingColumn {\n  id: string;\n  label: string;\n  sortable?: boolean;\n  width?: string;\n}\n\n/** Primitive cell values for table row records (not the row component). */\nexport type VikingTableCellValue =\n  | string\n  | number\n  | boolean\n  | bigint\n  | null\n  | undefined;\n\n/** Data row for table consumers — distinct from the `VikingTableRow` component. */\nexport type VikingTableRecord = {\n  readonly id: string;\n} & Record<string, VikingTableCellValue>;\n\nexport type VikingSortDirection = \"asc\" | \"desc\" | null;\n\n/**\n * viking-table-header — sortable column headers with selection support.\n */\n@Component({\n  selector: \"viking-table-header\",\n  standalone: true,\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <tr class=\"viking-table-header\">\n      @if (selectable()) {\n        <th class=\"viking-table-header__select\" scope=\"col\">\n          <input\n            type=\"checkbox\"\n            class=\"viking-table-header__checkbox\"\n            [checked]=\"allSelected()\"\n            [indeterminate]=\"someSelected()\"\n            (change)=\"toggleSelectAll($event)\"\n            aria-label=\"Select all rows\"\n          />\n        </th>\n      }\n      @for (column of columns(); track column.id) {\n        <th\n          class=\"viking-table-header__cell\"\n          scope=\"col\"\n          [style.width]=\"column.width\"\n          [class.viking-table-header__cell--sortable]=\"column.sortable\"\n          [attr.aria-sort]=\"ariaSort(column.id)\"\n        >\n          @if (column.sortable) {\n            <button\n              type=\"button\"\n              class=\"viking-table-header__sort-button\"\n              [attr.aria-label]=\"sortLabel(column)\"\n              (click)=\"sortColumn(column.id)\"\n            >\n              <span>{{ column.label }}</span>\n              <viking-icon\n                class=\"viking-table-header__sort-icon\"\n                [class.viking-table-header__sort-icon--active]=\"\n                  sortColumnId() === column.id && !!sortDirection()\n                \"\n                [name]=\"getSortIcon(column.id)\"\n                [size]=\"16\"\n              />\n            </button>\n          } @else {\n            {{ column.label }}\n          }\n        </th>\n      }\n    </tr>\n  `,\n  styles: [\n    `\n      :host {\n        display: contents;\n      }\n      .viking-table-header__select {\n        padding: var(--viking-space-1) var(--viking-space-2);\n        width: 44px;\n      }\n      .viking-table-header__checkbox {\n        width: 16px;\n        height: 16px;\n        accent-color: var(--viking-accent);\n      }\n      .viking-table-header__cell {\n        padding: var(--viking-space-1) var(--viking-space-2);\n        font-size: var(--viking-font-size-xs);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        text-transform: uppercase;\n        color: var(--viking-text-muted);\n        background: color-mix(\n          in srgb,\n          var(--viking-bg) 40%,\n          var(--viking-surface)\n        );\n        border-bottom: 1px solid var(--viking-border-strong);\n        white-space: nowrap;\n      }\n      .viking-table-header__cell--sortable {\n        cursor: pointer;\n      }\n      .viking-table-header__sort-button {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        background: transparent;\n        border: none;\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-xs);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-caps);\n        text-transform: uppercase;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        min-height: var(--viking-touch-target-min, 44px);\n        padding: 0 var(--viking-space-1);\n        transition: var(--viking-transition);\n      }\n      .viking-table-header__sort-button:hover {\n        color: var(--viking-text);\n      }\n      .viking-table-header__sort-button:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-table-header__sort-icon {\n        opacity: 0.4;\n        transition: opacity var(--viking-duration-fast);\n      }\n      .viking-table-header__sort-button:hover .viking-table-header__sort-icon {\n        opacity: 1;\n      }\n      .viking-table-header__sort-icon--active {\n        opacity: 1;\n        color: var(--viking-accent);\n      }\n    `,\n  ],\n})\nexport class VikingTableHeader {\n  readonly columns = input<VikingColumn[]>([]);\n  readonly selectable = input<boolean>(false);\n  readonly allSelected = input<boolean>(false);\n  readonly someSelected = input<boolean>(false);\n  readonly sortColumnId = input<string | null>(null);\n  readonly sortDirection = input<VikingSortDirection>(null);\n\n  readonly selectionChange = output<boolean>();\n  readonly sortChange = output<{\n    column: string;\n    direction: VikingSortDirection;\n  }>();\n\n  protected toggleSelectAll(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    this.selectionChange.emit(input.checked);\n  }\n\n  protected getSortIcon(columnId: string): string {\n    if (this.sortColumnId() !== columnId) return \"chevron-up\";\n    return this.sortDirection() === \"desc\" ? \"chevron-down\" : \"chevron-up\";\n  }\n\n  protected ariaSort(columnId: string): string | null {\n    if (this.sortColumnId() !== columnId || !this.sortDirection()) return null;\n    return this.sortDirection() === \"desc\" ? \"descending\" : \"ascending\";\n  }\n\n  protected sortLabel(column: VikingColumn): string {\n    if (this.sortColumnId() !== column.id || !this.sortDirection()) {\n      return `Sort by ${column.label}`;\n    }\n    const next = this.sortDirection() === \"asc\" ? \"descending\" : \"ascending\";\n    return `Sort by ${column.label}, currently ${this.sortDirection() === \"asc\" ? \"ascending\" : \"descending\"}; activate for ${next}`;\n  }\n\n  protected sortColumn(columnId: string): void {\n    let direction: VikingSortDirection = \"asc\";\n    if (this.sortColumnId() === columnId) {\n      direction =\n        this.sortDirection() === \"asc\"\n          ? \"desc\"\n          : this.sortDirection() === \"desc\"\n            ? null\n            : \"asc\";\n    }\n    this.sortChange.emit({ column: columnId, direction });\n  }\n}\n\n/** viking-table-row — row with optional selection and expand. */\n@Component({\n  selector: \"viking-table-row\",\n  standalone: true,\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <tr\n      class=\"viking-table-row\"\n      [class.viking-table-row--selected]=\"selected()\"\n    >\n      @if (selectable()) {\n        <td class=\"viking-table-row__select\">\n          <input\n            type=\"checkbox\"\n            class=\"viking-table-row__checkbox\"\n            [checked]=\"selected()\"\n            (change)=\"selected.update((s) => !s)\"\n            [attr.aria-label]=\"selected() ? 'Deselect row' : 'Select row'\"\n          />\n        </td>\n      }\n      <td\n        class=\"viking-table-row__cell viking-table-row__cell--expand\"\n        [class.viking-table-row__cell--expandable]=\"expandable()\"\n      >\n        @if (expandable()) {\n          <button\n            type=\"button\"\n            class=\"viking-table-row__expand-trigger\"\n            [attr.aria-expanded]=\"expanded()\"\n            [attr.aria-label]=\"expanded() ? 'Collapse row' : 'Expand row'\"\n            (click)=\"expanded.update((value) => !value)\"\n          >\n            <viking-icon\n              [name]=\"expanded() ? 'chevron-down' : 'chevron-right'\"\n              [size]=\"16\"\n            />\n          </button>\n        }\n      </td>\n      <ng-content />\n    </tr>\n    @if (expandable() && expanded()) {\n      <tr class=\"viking-table-row__expand\">\n        <td [attr.colspan]=\"expandColspan()\">\n          <div class=\"viking-table-row__expand-content\">\n            <ng-content select=\"[vikingRowExpand]\" />\n          </div>\n        </td>\n      </tr>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: contents;\n      }\n      .viking-table-row {\n        transition: background-color var(--viking-duration-fast);\n      }\n      .viking-table-row:hover {\n        background: var(--viking-surface-alt);\n      }\n      .viking-table-row--selected {\n        background: var(--viking-accent-soft);\n      }\n      .viking-table-row__select {\n        padding: var(--viking-space-1) var(--viking-space-2);\n        width: 44px;\n      }\n      .viking-table-row__checkbox {\n        width: 16px;\n        height: 16px;\n        accent-color: var(--viking-accent);\n      }\n      .viking-table-row__cell {\n        padding: var(--viking-space-1) var(--viking-space-2);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        border-bottom: 1px solid var(--viking-border-subtle);\n      }\n      .viking-table-row__cell--expand {\n        width: var(--viking-touch-target-min, 44px);\n        padding: var(--viking-space-1);\n      }\n      .viking-table-row__cell--expandable {\n        cursor: pointer;\n      }\n      .viking-table-row__expand-trigger {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        /* WCAG 2.5.8 + suite touch floor */\n        width: var(--viking-touch-target-min, 44px);\n        height: var(--viking-touch-target-min, 44px);\n        min-width: var(--viking-touch-target-min, 44px);\n        min-height: var(--viking-touch-target-min, 44px);\n        border: none;\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        padding: 0;\n        border-radius: var(--viking-radius-sm);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-table-row__expand-trigger:hover {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-table-row__expand-trigger:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-table-row__expand {\n        background: var(--viking-surface-alt);\n      }\n      .viking-table-row__expand-content {\n        padding: var(--viking-space-2);\n      }\n    `,\n  ],\n})\nexport class VikingTableRow {\n  readonly selectable = input<boolean>(false);\n  readonly selected = model<boolean>(false);\n  readonly expandable = input<boolean>(false);\n  readonly expanded = model<boolean>(false);\n\n  readonly expandColspan = input<number>(10);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  contentChildren,\n  InjectionToken,\n  input,\n  model,\n} from \"@angular/core\";\nimport { nextRovingIndexBothAxes } from \"../../core/focus\";\nimport { VikingTab } from \"./tab\";\n\nexport const VIKING_TABS = new InjectionToken<VikingTabs>(\"VIKING_TABS\");\n\n/**\n * viking-tabs — tablist container with roving keyboard navigation.\n */\n@Component({\n  selector: \"viking-tabs\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: VIKING_TABS, useExisting: VikingTabs }],\n  host: { class: \"viking-tabs\" },\n  template: `\n    <div\n      class=\"viking-tabs-list\"\n      role=\"tablist\"\n      [attr.aria-label]=\"label()\"\n      (keydown)=\"onTabKeydown($event)\"\n    >\n      <ng-content select=\"viking-tab\" />\n    </div>\n    <ng-content select=\"viking-tab-panel\" />\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        font-family: var(--viking-font-family);\n      }\n      .viking-tabs-list {\n        display: flex;\n        flex-wrap: nowrap;\n        gap: var(--viking-space-2);\n        padding: var(--viking-space-2) var(--viking-space-2);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius-xl);\n        background: var(\n          --viking-surface-recipe,\n          color-mix(\n            in srgb,\n            var(--viking-surface-alt) 80%,\n            var(--viking-surface)\n          )\n        );\n        box-shadow:\n          var(--viking-shadow-sm),\n          inset 0 1px 0\n            color-mix(in srgb, var(--viking-white-pure) 6%, transparent);\n        position: relative;\n        overflow-x: auto;\n        scroll-snap-type: x proximity;\n        -webkit-overflow-scrolling: touch;\n        scrollbar-width: none;\n        overscroll-behavior-x: contain;\n      }\n      .viking-tabs-list::before {\n        content: \"\";\n        position: absolute;\n        inset: 0 0 auto;\n        height: 1px;\n        border-radius: inherit;\n        background: linear-gradient(\n          90deg,\n          transparent,\n          color-mix(\n            in srgb,\n            var(--viking-metallic-200)\n              var(--viking-surface-hairline-strength, 28%),\n            transparent\n          ),\n          transparent\n        );\n        pointer-events: none;\n      }\n      .viking-tabs-list::-webkit-scrollbar {\n        display: none;\n      }\n      @media (min-width: 768px) {\n        .viking-tabs-list {\n          flex-wrap: wrap;\n          overflow-x: visible;\n          scroll-snap-type: none;\n          -webkit-overflow-scrolling: auto;\n          scrollbar-width: auto;\n          overscroll-behavior-x: auto;\n        }\n        .viking-tabs-list::-webkit-scrollbar {\n          display: block;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingTabs {\n  private readonly tabComponents = contentChildren(VikingTab);\n\n  readonly value = model<string>(\"\");\n  readonly label = input<string>(\"Tabs\");\n\n  protected onTabKeydown = (event: KeyboardEvent): void => {\n    const tabs = this.tabComponents().filter((tab) => !tab.disabled());\n    if (tabs.length === 0) {\n      return;\n    }\n\n    const currentIndex = Math.max(\n      0,\n      tabs.findIndex((tab) => tab.value() === this.value()),\n    );\n    const nextIndex = nextRovingIndexBothAxes(\n      event.key,\n      currentIndex,\n      tabs.length,\n    );\n    if (nextIndex === null) {\n      return;\n    }\n\n    event.preventDefault();\n    const next = tabs[nextIndex];\n    this.value.set(next.value());\n    const button = document.getElementById(`viking-tab-${next.value()}`);\n    button?.focus();\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  input,\n} from \"@angular/core\";\nimport { VIKING_TABS } from \"./tabs\";\n\n/**\n * viking-tab — tab trigger button inside viking-tabs.\n */\n@Component({\n  selector: \"viking-tab\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <button\n      type=\"button\"\n      role=\"tab\"\n      class=\"viking-tab\"\n      [class.viking-active]=\"active()\"\n      [id]=\"tabId()\"\n      [attr.aria-selected]=\"active()\"\n      [attr.aria-controls]=\"panelId()\"\n      [attr.tabindex]=\"active() ? 0 : -1\"\n      [disabled]=\"disabled()\"\n      (click)=\"select()\"\n    >\n      <ng-content />\n    </button>\n  `,\n  styles: [\n    `\n      .viking-tab {\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        letter-spacing: var(--viking-letter-spacing-wide);\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: var(--viking-space-2);\n        min-height: var(--viking-control-height);\n        min-width: max-content;\n        flex: 1 0 auto;\n        padding: var(--viking-space-0-5) var(--viking-space-2);\n        border: 1px solid transparent;\n        border-radius: var(--viking-radius);\n        background: transparent;\n        color: var(--viking-text-muted);\n        cursor: pointer;\n        transition: var(--viking-transition-interactive);\n        position: relative;\n        scroll-snap-align: start;\n        -webkit-tap-highlight-color: transparent;\n      }\n      .viking-tab viking-app-icon,\n      .viking-tab viking-icon,\n      .viking-tab [data-viking-icon] {\n        flex-shrink: 0;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        margin-inline-end: 0;\n      }\n      @media (min-width: 768px) {\n        .viking-tab {\n          min-height: var(--viking-control-height-sm);\n          min-width: var(--viking-btn-min-width, 120px);\n          flex: 0 1 auto;\n          scroll-snap-align: none;\n        }\n      }\n      .viking-tab:hover:not(:disabled):not(.viking-active) {\n        color: var(--viking-text);\n        background: var(--viking-accent-soft);\n      }\n      .viking-tab:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-tab:active:not(:disabled) {\n        transform: scale(var(--viking-state-active-scale));\n      }\n      .viking-tab.viking-active {\n        color: var(--viking-accent-content);\n        background: var(--viking-accent);\n        border-color: color-mix(\n          in srgb,\n          var(--viking-accent) 80%,\n          var(--viking-black)\n        );\n        box-shadow: var(--viking-shadow-sm);\n      }\n      .viking-tab:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n    `,\n  ],\n})\nexport class VikingTab {\n  private readonly tabs = inject(VIKING_TABS, { optional: true });\n\n  readonly value = input.required<string>();\n  readonly disabled = input(false);\n\n  protected readonly tabId = computed(() => `viking-tab-${this.value()}`);\n  protected readonly panelId = computed(\n    () => `viking-tab-panel-${this.value()}`,\n  );\n\n  protected readonly active = computed(\n    () => (this.tabs?.value() ?? \"\") === this.value(),\n  );\n\n  protected select = (): void => {\n    if (this.disabled() || !this.tabs) {\n      return;\n    }\n    this.tabs.value.set(this.value());\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  input,\n} from \"@angular/core\";\nimport { VIKING_TABS } from \"./tabs\";\n\n/**\n * viking-tab-panel — tabpanel region inside viking-tabs.\n */\n@Component({\n  selector: \"viking-tab-panel\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"tabpanel\",\n    tabindex: \"0\",\n    \"[attr.id]\": \"panelId()\",\n    \"[attr.aria-labelledby]\": \"tabId()\",\n    \"[attr.hidden]\": 'hidden() ? \"\" : null',\n    \"[class.viking-hidden]\": \"hidden()\",\n  },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: block;\n        padding: var(--viking-space-4) var(--viking-space-3)\n          var(--viking-space-5);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius-lg);\n        background: var(--viking-surface);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        line-height: var(--viking-line-height-relaxed);\n        box-sizing: border-box;\n        animation: viking-fade-in var(--viking-duration-fast)\n          var(--viking-ease-out);\n      }\n      @media (min-width: 768px) {\n        :host {\n          padding: var(--viking-space-5) var(--viking-space-4)\n            var(--viking-space-6);\n        }\n      }\n      :host(.viking-hidden) {\n        display: none;\n      }\n      @media (prefers-reduced-motion: reduce) {\n        :host {\n          animation: none;\n        }\n      }\n    `,\n  ],\n})\nexport class VikingTabPanel {\n  private readonly tabs = inject(VIKING_TABS, { optional: true });\n\n  readonly value = input.required<string>();\n\n  protected readonly panelId = computed(\n    () => `viking-tab-panel-${this.value()}`,\n  );\n  protected readonly tabId = computed(() => `viking-tab-${this.value()}`);\n\n  protected hidden = () => (this.tabs?.value() ?? \"\") !== this.value();\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-textarea — auto-growing textarea.\n * ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-textarea\",\n  providers: [provideVikingCva(VikingTextarea)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"viking-control viking-textarea-shell\"\n      [class.viking-disabled]=\"isDisabled()\"\n    >\n      <textarea\n        [rows]=\"rows()\"\n        [placeholder]=\"placeholder()\"\n        [value]=\"value()\"\n        [disabled]=\"isDisabled()\"\n        [attr.aria-label]=\"label() || placeholder() || 'Text area'\"\n        [style.resize]=\"autoGrow() ? 'none' : 'vertical'\"\n        (input)=\"onInput($event)\"\n        (blur)=\"onTouched()\"\n      ></textarea>\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n      }\n      .viking-textarea-shell {\n        display: flex;\n        width: 100%;\n        padding: var(--viking-space-2) var(--viking-space-2);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border);\n        border-radius: var(--viking-radius);\n        transition: var(--viking-transition-interactive);\n      }\n      .viking-textarea-shell:hover:not(.viking-disabled) {\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-textarea-shell:focus-within {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n        border-color: var(--viking-accent);\n      }\n      .viking-disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      textarea {\n        width: 100%;\n        box-sizing: border-box;\n        border: none;\n        outline: none !important;\n        background: transparent;\n        color: var(--viking-text);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        line-height: 1.55;\n        padding: 0;\n      }\n      textarea::placeholder {\n        color: var(--viking-text-muted);\n      }\n    `,\n  ],\n})\nexport class VikingTextarea extends VikingControl<string> {\n  readonly value = model<string>(\"\");\n  readonly placeholder = input<string>(\"\");\n  readonly label = input<string>(\"\");\n  readonly rows = input<number>(3);\n  readonly autoGrow = input<boolean>(true);\n  readonly disabled = input<boolean>(false);\n\n  protected isDisabled = (): boolean => this.disabled() || this.formDisabled();\n\n  writeValue(value: string): void {\n    this.value.set(value ?? \"\");\n  }\n\n  protected onInput = (event: Event): void => {\n    const el = event.target as HTMLTextAreaElement;\n    this.value.set(el.value);\n    this.onChange(el.value);\n    if (this.autoGrow()) {\n      el.style.height = \"auto\";\n      el.style.height = `${el.scrollHeight}px`;\n    }\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  InjectionToken,\n  model,\n} from \"@angular/core\";\n\nexport const VIKING_TOGGLE_GROUP = new InjectionToken<VikingToggleGroup>(\n  \"VIKING_TOGGLE_GROUP\",\n);\n\n/**\n * viking-toggle-group — exclusive or multi toggle cluster.\n */\n@Component({\n  selector: \"viking-toggle-group\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: VIKING_TOGGLE_GROUP, useExisting: VikingToggleGroup }],\n  host: {\n    role: \"group\",\n    class: \"viking-toggle-group\",\n    \"[class.viking-exclusive]\": \"exclusive()\",\n  },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        flex-wrap: wrap;\n        gap: 0;\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        overflow: hidden;\n        box-shadow: var(--viking-shadow-sm);\n      }\n      :host ::ng-deep viking-toggle:not(:first-child) .viking-toggle {\n        border-left: none;\n        margin-left: calc(var(--viking-space-px) * -1);\n        border-radius: 0;\n      }\n      :host ::ng-deep viking-toggle:first-child .viking-toggle {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n      }\n      :host ::ng-deep viking-toggle:last-child .viking-toggle {\n        border-top-left-radius: 0;\n        border-bottom-left-radius: 0;\n      }\n      :host ::ng-deep viking-toggle .viking-toggle {\n        min-width: var(--viking-btn-min-width, 120px);\n        border-radius: 0;\n        box-shadow: none;\n      }\n    `,\n  ],\n})\nexport class VikingToggleGroup {\n  readonly value = model<string>(\"\");\n  readonly exclusive = model(true);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  inject,\n  input,\n  model,\n  output,\n} from \"@angular/core\";\nimport { VIKING_TOGGLE_GROUP } from \"./toggle-group\";\n\n/**\n * viking-toggle — pressed-state button toggle.\n */\n@Component({\n  selector: \"viking-toggle\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <button\n      type=\"button\"\n      class=\"viking-toggle\"\n      [class.viking-pressed]=\"isPressed()\"\n      [attr.aria-pressed]=\"isPressed()\"\n      [disabled]=\"disabled()\"\n      [attr.aria-label]=\"label() || null\"\n      (click)=\"toggle()\"\n    >\n      <ng-content />\n    </button>\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n      }\n      .viking-toggle {\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size-ui);\n        font-weight: 700;\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: var(--viking-space-1);\n        min-height: var(--viking-control-height-sm);\n        min-width: var(--viking-btn-min-width, 120px);\n        padding: 0 var(--viking-space-2);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        background: var(--viking-surface);\n        color: var(--viking-text);\n        cursor: pointer;\n        transition: var(--viking-transition);\n      }\n      .viking-toggle:hover:not(:disabled) {\n        border-color: var(--viking-accent-strong);\n        background: var(--viking-accent-soft);\n      }\n      .viking-toggle:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-toggle.viking-pressed {\n        background: var(--viking-accent);\n        border-color: var(--viking-accent);\n        color: var(--viking-accent-content);\n      }\n      .viking-toggle:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n    `,\n  ],\n})\nexport class VikingToggle {\n  private readonly group = inject(VIKING_TOGGLE_GROUP, { optional: true });\n\n  readonly pressed = model(false);\n  readonly value = input<string>(\"\");\n  readonly disabled = input(false);\n  readonly label = input(\"\");\n\n  readonly toggled = output<boolean>();\n\n  protected isPressed = (): boolean => {\n    if (this.group && this.value()) {\n      return this.group.value() === this.value();\n    }\n    return this.pressed();\n  };\n\n  protected toggle = (): void => {\n    if (this.disabled()) return;\n    if (this.group && this.value()) {\n      this.group.value.set(this.value());\n      this.toggled.emit(true);\n      return;\n    }\n    const next = !this.pressed();\n    this.pressed.set(next);\n    this.toggled.emit(next);\n  };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  computed,\n  inject,\n  input,\n  model,\n  signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-time-picker — dropdown time selection.\n * Value is a 24h HH:MM string. ControlValueAccessor-compatible.\n */\n@Component({\n  selector: \"viking-time-picker\",\n  imports: [VikingIcon],\n  providers: [provideVikingCva(VikingTimePicker)],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    \"(document:click)\": \"onDocumentClick($event)\",\n    \"(keydown.escape)\": \"open.set(false)\",\n  },\n  template: `\n    <button\n      type=\"button\"\n      class=\"viking-control viking-time-trigger\"\n      [disabled]=\"disabled() || formDisabled()\"\n      [attr.aria-expanded]=\"open()\"\n      [attr.aria-label]=\"label() || placeholder()\"\n      aria-haspopup=\"listbox\"\n      (click)=\"open.set(!open())\"\n    >\n      <viking-icon name=\"clock\" [size]=\"20\" />\n      <span\n        class=\"viking-time-value\"\n        [class.viking-time-placeholder]=\"!value()\"\n      >\n        {{ value() || placeholder() }}\n      </span>\n      <viking-icon\n        [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n        [size]=\"18\"\n      />\n    </button>\n    @if (open()) {\n      <div class=\"viking-time-panel\" role=\"listbox\" aria-label=\"Choose time\">\n        @for (slot of slots(); track slot) {\n          <button\n            type=\"button\"\n            role=\"option\"\n            class=\"viking-time-option\"\n            [class.viking-selected]=\"slot === value()\"\n            [attr.aria-selected]=\"slot === value()\"\n            (click)=\"pick(slot)\"\n          >\n            {{ slot }}\n          </button>\n        }\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        position: relative;\n        display: block;\n      }\n      .viking-time-trigger {\n        display: flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        width: 100%;\n        min-height: var(--viking-control-height);\n        padding: 0 var(--viking-space-2);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-sm);\n        color: var(--viking-text-muted);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        cursor: pointer;\n        transition: var(--viking-transition);\n        text-align: left;\n      }\n      .viking-time-trigger:hover:not(:disabled) {\n        border-color: var(--viking-accent-strong);\n      }\n      .viking-time-trigger:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: var(--viking-ring-offset);\n      }\n      .viking-time-trigger:disabled {\n        opacity: var(--viking-state-disabled-opacity);\n        cursor: not-allowed;\n      }\n      .viking-time-value {\n        flex: 1;\n        color: var(--viking-text);\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-time-placeholder {\n        color: var(--viking-text-muted);\n      }\n      .viking-time-panel {\n        position: absolute;\n        top: calc(100% + var(--viking-space-1));\n        left: 0;\n        right: 0;\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-0-5);\n        margin: 0;\n        padding: var(--viking-space-1);\n        background: var(--viking-surface);\n        border: 1px solid var(--viking-border-strong);\n        border-radius: var(--viking-radius);\n        box-shadow: var(--viking-shadow-md);\n        z-index: var(--viking-z-overlay);\n        max-height: 279px;\n        overflow: auto;\n      }\n      .viking-time-option {\n        padding: var(--viking-space-1);\n        border: none;\n        background: transparent;\n        text-align: left;\n        width: 100%;\n        border-radius: calc(var(--viking-radius) / 1.5);\n        font-family: var(--viking-font-family);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text);\n        cursor: pointer;\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-time-option:focus-visible {\n        outline: var(--viking-ring-width) solid var(--viking-ring);\n        outline-offset: -2px;\n      }\n      .viking-time-option:hover {\n        background: var(--viking-accent-soft);\n      }\n      .viking-selected {\n        color: var(--viking-accent);\n        font-weight: 600;\n      }\n    `,\n  ],\n})\nexport class VikingTimePicker extends VikingControl<string | null> {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  readonly value = model<string | null>(null);\n  readonly placeholder = input<string>(\"Select time\");\n  readonly label = input<string>(\"\");\n  readonly disabled = input<boolean>(false);\n  /** Minute granularity for generated slots. */\n  readonly stepMinutes = input<number>(30);\n\n  constructor() {\n    super();\n  }\n\n  protected readonly open = signal(false);\n\n  protected readonly slots = computed<string[]>(() => {\n    const step = Math.max(5, this.stepMinutes());\n    const result: string[] = [];\n    for (let minutes = 0; minutes < 24 * 60; minutes += step) {\n      const hours = String(Math.floor(minutes / 60)).padStart(2, \"0\");\n      const mins = String(minutes % 60).padStart(2, \"0\");\n      result.push(`${hours}:${mins}`);\n    }\n    return result;\n  });\n\n  writeValue(value: string | null): void {\n    this.value.set(value);\n  }\n\n  protected pick = (slot: string): void => {\n    this.value.set(slot);\n    this.onChange(slot);\n    this.onTouched();\n    this.open.set(false);\n  };\n\n  protected onDocumentClick = (event: Event): void => {\n    if (\n      this.open() &&\n      !this.host.nativeElement.contains(event.target as Node)\n    ) {\n      this.open.set(false);\n    }\n  };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-timeline — vertical event feed.\n * Compose with viking-timeline-item.\n */\n@Component({\n  selector: \"viking-timeline\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { role: \"list\" },\n  template: `<ng-content />`,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n      }\n    `,\n  ],\n})\nexport class VikingTimeline {}\n\n/** A single event on viking-timeline. */\n@Component({\n  selector: \"viking-timeline-item\",\n  imports: [VikingIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { role: \"listitem\" },\n  template: `\n    <div class=\"viking-timeline-item\">\n      <div class=\"viking-timeline-rail\" aria-hidden=\"true\">\n        <span\n          class=\"viking-timeline-marker\"\n          [class]=\"'viking-marker-' + tone()\"\n        >\n          @if (icon()) {\n            <viking-icon [name]=\"icon()!\" [size]=\"14\" />\n          }\n        </span>\n        <span class=\"viking-timeline-line\"></span>\n      </div>\n      <div class=\"viking-timeline-content\">\n        <div class=\"viking-timeline-header\">\n          <span class=\"viking-timeline-heading\">{{ heading() }}</span>\n          @if (timestamp()) {\n            <time class=\"viking-timeline-time\">{{ timestamp() }}</time>\n          }\n        </div>\n        <div class=\"viking-timeline-body\"><ng-content /></div>\n      </div>\n    </div>\n  `,\n  styles: [\n    `\n      :host:last-child .viking-timeline-line {\n        display: none;\n      }\n      .viking-timeline-item {\n        display: flex;\n        gap: var(--viking-space-2);\n        font-family: var(--viking-font-family);\n      }\n      .viking-timeline-rail {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n      }\n      .viking-timeline-marker {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: var(--viking-space-3);\n        height: var(--viking-space-3);\n        border-radius: var(--viking-radius-pill);\n        border: 2px solid var(--viking-border-strong);\n        background: var(--viking-surface);\n        color: var(--viking-text-muted);\n        flex-shrink: 0;\n      }\n      .viking-marker-accent {\n        border-color: var(--viking-accent);\n        color: var(--viking-accent);\n      }\n      .viking-marker-secondary {\n        border-color: var(--viking-accent-secondary);\n        color: var(--viking-accent-secondary);\n      }\n      .viking-marker-info {\n        border-color: var(--viking-info);\n        color: var(--viking-info);\n      }\n      .viking-marker-success {\n        border-color: var(--viking-success);\n        color: var(--viking-success);\n      }\n      .viking-marker-warning {\n        border-color: var(--viking-warning);\n        color: var(--viking-text);\n      }\n      .viking-marker-danger {\n        border-color: var(--viking-danger);\n        color: var(--viking-danger);\n      }\n      .viking-timeline-line {\n        flex: 1;\n        width: 2px;\n        min-height: var(--viking-space-2);\n        background: var(--viking-border);\n      }\n      .viking-timeline-content {\n        flex: 1;\n        padding-bottom: var(--viking-space-3);\n        min-width: 0;\n      }\n      .viking-timeline-header {\n        display: flex;\n        align-items: baseline;\n        justify-content: space-between;\n        gap: var(--viking-space-2);\n        flex-wrap: wrap;\n      }\n      .viking-timeline-heading {\n        font-size: var(--viking-font-size);\n        font-weight: 600;\n        color: var(--viking-text);\n      }\n      .viking-timeline-time {\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        font-variant-numeric: tabular-nums;\n      }\n      .viking-timeline-body {\n        margin-top: var(--viking-space-0-5);\n        font-size: var(--viking-font-size);\n        color: var(--viking-text-muted);\n        line-height: 1.55;\n      }\n      .viking-timeline-body:empty {\n        display: none;\n      }\n    `,\n  ],\n})\nexport class VikingTimelineItem {\n  readonly heading = input.required<string>();\n  readonly timestamp = input<string>(\"\");\n  readonly icon = input<VikingIconName | null>(null);\n  readonly tone = input<VikingTone>(\"muted\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/** One ordered step in a read-only pipeline visualization. */\nexport interface VikingPipelineStep {\n  id: string;\n  title: string;\n  detail?: string;\n  kind?: \"process\" | \"detect\" | \"unknown\" | string;\n}\n\n/**\n * viking-pipeline-flow — read-only visual sequence for workflow YAML steps.\n * Chrome: suite-components.css (`.suite-pipeline-flow` / triple prefixes).\n * Complex workflows stay YAML-owned; this renders the human card view only.\n */\n@Component({\n  selector: \"viking-pipeline-flow\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"list\",\n    class: \"suite-pipeline-flow viking-pipeline-flow\",\n    \"[attr.data-orientation]\": \"orientation()\",\n    \"[attr.aria-label]\": \"label()\",\n  },\n  template: `\n    @if (steps().length === 0) {\n      <p\n        class=\"suite-pipeline-flow__empty viking-pipeline-flow__empty\"\n        role=\"status\"\n      >\n        {{ emptyMessage() }}\n      </p>\n    } @else {\n      @for (step of steps(); track step.id; let i = $index; let last = $last) {\n        <div\n          class=\"suite-pipeline-flow__step viking-pipeline-flow__step\"\n          role=\"listitem\"\n          [attr.data-kind]=\"step.kind || 'unknown'\"\n        >\n          <div\n            class=\"suite-pipeline-flow__rail viking-pipeline-flow__rail\"\n            aria-hidden=\"true\"\n          >\n            <span\n              class=\"suite-pipeline-flow__marker viking-pipeline-flow__marker\"\n              >{{ i + 1 }}</span\n            >\n            @if (!last) {\n              <span\n                class=\"suite-pipeline-flow__connector viking-pipeline-flow__connector\"\n              ></span>\n            }\n          </div>\n          <div class=\"suite-pipeline-flow__body viking-pipeline-flow__body\">\n            <p class=\"suite-pipeline-flow__title viking-pipeline-flow__title\">\n              {{ step.title }}\n            </p>\n            @if (step.detail) {\n              <p\n                class=\"suite-pipeline-flow__detail viking-pipeline-flow__detail\"\n              >\n                {{ step.detail }}\n              </p>\n            }\n          </div>\n        </div>\n      }\n    }\n  `,\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n        box-sizing: border-box;\n      }\n    `,\n  ],\n})\nexport class VikingPipelineFlow {\n  readonly steps = input<readonly VikingPipelineStep[]>([]);\n  readonly orientation = input<\"vertical\" | \"horizontal\">(\"horizontal\");\n  readonly label = input<string>(\"Pipeline steps\");\n  readonly emptyMessage = input<string>(\"No pipeline steps configured.\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport type { VikingTone } from \"../../core/types\";\n\nexport type VikingStreamStatusPhase =\n  | \"idle\"\n  | \"connecting\"\n  | \"updating\"\n  | \"paused\"\n  | \"delayed\"\n  | \"offline\";\n\n/**\n * viking-stream-status — calm near-real-time indicator (never claims \"Live\").\n * Chrome: suite-components.css (`.suite-stream-status` / triple prefixes).\n * Pulse only when ``pulse`` is true (connected + receiving ticks).\n */\n@Component({\n  selector: \"viking-stream-status\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: \"status\",\n    class: \"suite-stream-status viking-stream-status\",\n    \"[attr.data-phase]\": \"phase()\",\n    \"[attr.data-tone]\": \"tone()\",\n    \"[attr.aria-label]\": \"ariaLabel() || label()\",\n  },\n  template: `\n    <span\n      class=\"suite-stream-status__dot viking-stream-status__dot badge-dot\"\n      [class.pulse-dot]=\"pulse()\"\n      aria-hidden=\"true\"\n    ></span>\n    <span class=\"suite-stream-status__label viking-stream-status__label\">{{\n      label()\n    }}</span>\n  `,\n  styles: [\n    `\n      :host {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--viking-space-1);\n        box-sizing: border-box;\n      }\n    `,\n  ],\n})\nexport class VikingStreamStatus {\n  readonly phase = input<VikingStreamStatusPhase>(\"connecting\");\n  readonly label = input<string>(\"Connecting\");\n  readonly tone = input<VikingTone>(\"muted\");\n  readonly pulse = input<boolean>(false);\n  readonly ariaLabel = input<string>(\"\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingStatusPill } from \"../status-pill/status-pill\";\nimport {\n  VikingUptimeHistory,\n  type VikingUptimeSegment,\n} from \"../uptime-history/uptime-history\";\nimport type { VikingTone } from \"../../core/types\";\n\n/**\n * viking-status-panel — service/component status card with header, stats, and uptime bar.\n */\n@Component({\n  selector: \"viking-status-panel\",\n  imports: [VikingStatusPill, VikingUptimeHistory],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: \"viking-status-panel\",\n    \"[class.viking-status-panel-compact]\": \"compact()\",\n  },\n  template: `\n    <header class=\"status-panel-header\">\n      <div class=\"status-panel-title-wrap\">\n        <h3 class=\"status-panel-title\">{{ title() }}</h3>\n        @if (subtitle()) {\n          <p class=\"status-panel-subtitle\">{{ subtitle() }}</p>\n        }\n      </div>\n      <viking-status-pill [tone]=\"statusTone()\" [dot]=\"true\">\n        {{ status() }}\n      </viking-status-pill>\n    </header>\n\n    <div class=\"status-panel-body\">\n      <ng-content />\n      @if (showUptime()) {\n        <viking-uptime-history\n          [segments]=\"uptimeSegments()\"\n          [percentage]=\"uptimePercentage()\"\n          [statusSummary]=\"uptimeSummary()\"\n          [compact]=\"compact()\"\n          [showLegend]=\"showUptimeLegend()\"\n        />\n      }\n    </div>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n        min-width: 0;\n        padding: var(--viking-card-padding);\n        border-radius: var(--viking-radius-lg);\n        border: 1px solid var(--viking-border);\n        background: var(--viking-surface-recipe, var(--viking-surface));\n        box-sizing: border-box;\n      }\n\n      :host(.viking-status-panel-compact) {\n        padding: var(--viking-card-padding-compact);\n        gap: var(--viking-space-2);\n      }\n\n      .status-panel-header {\n        display: flex;\n        align-items: flex-start;\n        justify-content: space-between;\n        gap: var(--viking-space-3);\n        min-width: 0;\n        padding-bottom: var(--viking-space-2);\n        border-bottom: 1px solid var(--viking-border-subtle);\n      }\n\n      .status-panel-title-wrap {\n        display: grid;\n        gap: var(--viking-space-1);\n        min-width: 0;\n      }\n\n      .status-panel-title {\n        margin: 0;\n        font-size: var(--viking-font-size-lg);\n        font-weight: var(--viking-font-weight-bold);\n        letter-spacing: var(--viking-letter-spacing-tight);\n        line-height: var(--viking-line-height-tight);\n        color: var(--viking-text);\n      }\n\n      .status-panel-subtitle {\n        margin: 0;\n        font-size: var(--viking-font-size-sm);\n        color: var(--viking-text-muted);\n        line-height: var(--viking-line-height-relaxed);\n      }\n\n      .status-panel-body {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-3);\n        width: 100%;\n        min-width: 0;\n      }\n\n      :host(.viking-status-panel-compact) .status-panel-body {\n        gap: var(--viking-space-2);\n      }\n    `,\n  ],\n})\nexport class VikingStatusPanel {\n  readonly title = input.required<string>();\n  readonly subtitle = input<string>(\"\");\n  readonly status = input<string>(\"Operational\");\n  readonly statusTone = input<VikingTone>(\"success\");\n  readonly uptimeSegments = input<VikingUptimeSegment[]>([]);\n  readonly uptimePercentage = input<number | null>(null);\n  readonly uptimeSummary = input<string>(\"No current issues\");\n  readonly showUptime = input<boolean>(true);\n  readonly showUptimeLegend = input<boolean>(true);\n  readonly compact = input<boolean>(false);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingBar } from \"../bar/bar\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingChart } from \"../chart/chart\";\nimport { VikingChartSeries } from \"../../core/types\";\n\n/**\n * viking-whitepaper-cta — Polars-style animated research CTA with bar grid + sparkline.\n */\n@Component({\n  selector: \"viking-whitepaper-cta\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [VikingBar, VikingButton, VikingChart],\n  template: `\n    <section class=\"viking-whitepaper-cta\" [attr.aria-labelledby]=\"headingId\">\n      <div class=\"viking-whitepaper-cta-bg\" aria-hidden=\"true\">\n        <div class=\"viking-whitepaper-polars-grid\">\n          @for (bar of barHeights; track $index) {\n            <viking-bar class=\"viking-whitepaper-polars-bar\" [height]=\"bar\" />\n          }\n        </div>\n        <viking-chart\n          kind=\"sparkline\"\n          [series]=\"sparklineSeries\"\n          label=\"Research activity trend\"\n          class=\"viking-whitepaper-sparkline viking-chart-wide\"\n        />\n      </div>\n\n      <div class=\"viking-whitepaper-cta-content\">\n        <span class=\"viking-whitepaper-tag\">{{ tag() }}</span>\n        <h2 [id]=\"headingId\" class=\"viking-whitepaper-title\">{{ title() }}</h2>\n        <p class=\"viking-whitepaper-description\">{{ description() }}</p>\n        <viking-button\n          variant=\"primary\"\n          [href]=\"href()\"\n          [attr.target]=\"external() ? '_blank' : null\"\n          [attr.rel]=\"external() ? 'noopener noreferrer' : null\"\n          icon=\"file\"\n          class=\"viking-whitepaper-btn\"\n        >\n          {{ buttonLabel() }}\n        </viking-button>\n      </div>\n    </section>\n  `,\n  styleUrl: \"../../styles/components/whitepaper-cta.scss\",\n  styles: [\n    `\n      :host {\n        display: block;\n        width: 100%;\n      }\n    `,\n  ],\n})\nexport class VikingWhitepaperCta {\n  readonly tag = input(\"Research & Architecture\");\n  readonly title = input(\"The Whitepaper\");\n  readonly description = input(\n    \"Event projection patterns, threat mitigation algorithms, and the architecture powering symmetrical multi-tenant pipelines.\",\n  );\n  readonly buttonLabel = input(\"Read Whitepaper\");\n  readonly href = input(\"/whitepaper\");\n  readonly external = input(false);\n\n  protected readonly headingId = \"viking-whitepaper-cta-title\";\n  protected readonly barHeights = [\n    72, 45, 88, 56, 91, 38, 67, 82, 49, 76, 58, 94,\n  ];\n  protected readonly sparklineSeries: VikingChartSeries[] = [\n    {\n      name: \"Research\",\n      tone: \"accent\",\n      data: [12, 18, 15, 22, 28, 24, 32, 35, 30, 38, 42, 45],\n    },\n  ];\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from \"@angular/core\";\nimport { VikingProgress } from \"../progress/progress\";\n\nexport interface VikingWizardStep {\n  id: string;\n  label: string;\n}\n\n/**\n * viking-wizard — multi-step modal shell with progress and action slots.\n */\n@Component({\n  selector: \"viking-wizard\",\n  imports: [VikingProgress],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: \"viking-wizard\" },\n  template: `\n    <viking-progress [value]=\"progressPercent()\" />\n    <p class=\"viking-wizard-step-label\">{{ activeStep().label }}</p>\n    <div class=\"viking-wizard-body\">\n      <ng-content />\n    </div>\n    <footer class=\"viking-wizard-actions\">\n      <ng-content select=\"[vikingWizardActions]\" />\n    </footer>\n  `,\n  styles: [\n    `\n      :host {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-2);\n        font-family: var(--viking-font-family);\n      }\n      .viking-wizard-step-label {\n        margin: 0;\n        font-size: var(--viking-font-size-sm);\n        font-weight: var(--viking-font-weight-semibold);\n        color: var(--viking-text-muted);\n        letter-spacing: var(--viking-letter-spacing-wide);\n        text-transform: uppercase;\n      }\n      .viking-wizard-body {\n        display: flex;\n        flex-direction: column;\n        gap: var(--viking-space-2);\n      }\n      .viking-wizard-actions {\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: flex-end;\n        gap: var(--viking-space-1);\n        padding-top: var(--viking-space-2);\n        border-top: 1px solid var(--viking-border);\n      }\n    `,\n  ],\n})\nexport class VikingWizard {\n  readonly steps = input<VikingWizardStep[]>([]);\n  readonly step = input<string>(\"\");\n\n  protected readonly activeStep = computed(\n    () =>\n      this.steps().find((item) => item.id === this.step()) ??\n      this.steps()[0] ?? { id: \"\", label: \"\" },\n  );\n\n  protected readonly progressPercent = computed(() => {\n    const steps = this.steps();\n    if (steps.length <= 1) return 100;\n    const index = steps.findIndex((item) => item.id === this.step());\n    return Math.round(((index + 1) / steps.length) * 100);\n  });\n}\n","import {\n  DOCUMENT,\n  Directive,\n  ElementRef,\n  OnDestroy,\n  inject,\n  input,\n} from \"@angular/core\";\n\nlet tooltipIdCounter = 0;\n\n/**\n * vikingTooltip — attribute directive tooltip.\n * Shows on hover and keyboard focus; positions itself relative to the host.\n */\n@Directive({\n  selector: \"[vikingTooltip]\",\n  host: {\n    class: \"viking-tooltip-host viking-focus-ring\",\n    \"(mouseenter)\": \"show()\",\n    \"(mouseleave)\": \"hide()\",\n    \"(focusin)\": \"show()\",\n    \"(focusout)\": \"hide()\",\n    \"(keydown.escape)\": \"hide()\",\n    \"[attr.aria-describedby]\": \"visible() ? tooltipId : null\",\n  },\n})\nexport class VikingTooltip implements OnDestroy {\n  private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly document = inject(DOCUMENT);\n\n  readonly vikingTooltip = input.required<string>();\n  readonly tooltipPosition = input<\"top\" | \"bottom\" | \"left\" | \"right\">(\"top\");\n  readonly tooltipKbd = input<string>(\"\");\n\n  protected readonly tooltipId = `viking-tooltip-${++tooltipIdCounter}`;\n\n  private element: HTMLElement | null = null;\n\n  protected visible = (): boolean => this.element !== null;\n\n  protected show = (): void => {\n    if (this.element || !this.vikingTooltip()) {\n      return;\n    }\n    const tip = this.document.createElement(\"div\");\n    tip.id = this.tooltipId;\n    tip.setAttribute(\"role\", \"tooltip\");\n    tip.className = \"viking-tooltip\";\n\n    const text = this.document.createElement(\"span\");\n    text.className = \"viking-tooltip-text\";\n    text.textContent = this.vikingTooltip();\n    tip.appendChild(text);\n\n    if (this.tooltipKbd()) {\n      const kbd = this.document.createElement(\"kbd\");\n      kbd.className = \"viking-tooltip-kbd\";\n      kbd.textContent = this.tooltipKbd();\n      tip.appendChild(kbd);\n    }\n\n    this.document.body.appendChild(tip);\n    this.position(tip);\n    this.element = tip;\n  };\n\n  private position = (tip: HTMLElement): void => {\n    const anchor = this.host.nativeElement.getBoundingClientRect();\n    const rect = tip.getBoundingClientRect();\n    const gap =\n      parseInt(\n        getComputedStyle(this.document.documentElement).getPropertyValue(\n          \"--viking-space-1\",\n        ),\n        10,\n      ) || 8;\n    const edge =\n      parseInt(\n        getComputedStyle(this.document.documentElement).getPropertyValue(\n          \"--viking-space-1\",\n        ),\n        10,\n      ) || 8;\n\n    let left = anchor.left + anchor.width / 2 - rect.width / 2;\n    let top = anchor.top - rect.height - gap;\n\n    switch (this.tooltipPosition()) {\n      case \"bottom\":\n        top = anchor.bottom + gap;\n        break;\n      case \"left\":\n        left = anchor.left - rect.width - gap;\n        top = anchor.top + anchor.height / 2 - rect.height / 2;\n        break;\n      case \"right\":\n        left = anchor.right + gap;\n        top = anchor.top + anchor.height / 2 - rect.height / 2;\n        break;\n      default:\n        break;\n    }\n\n    tip.style.left = `${Math.max(edge, Math.min(left, window.innerWidth - rect.width - edge))}px`;\n    tip.style.top = `${Math.max(edge, top)}px`;\n  };\n\n  protected hide = (): void => {\n    this.element?.remove();\n    this.element = null;\n  };\n\n  ngOnDestroy(): void {\n    this.hide();\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  CUSTOM_ELEMENTS_SCHEMA,\n  ElementRef,\n  OnInit,\n  PLATFORM_ID,\n  inject,\n  input,\n  viewChild,\n} from \"@angular/core\";\nimport { isPlatformBrowser } from \"@angular/common\";\nimport { writeDemlWidgets } from \"../../core/deml-widgets\";\nimport {\n  DEFAULT_SITE_URLS,\n  type SiteDrakkarContext,\n  type SiteUrls,\n} from \"../site-drakkar/site-drakkar.config\";\nimport { registerVikingSuiteSearchPaletteWc } from \"../../web/suite-search-palette/viking-suite-search-palette-wc\";\n\nregisterVikingSuiteSearchPaletteWc();\n\n/**\n * viking-suite-search-palette — thin Angular wrapper around `viking-suite-command-palette`.\n * Unified ⌘K command palette for deml.app with curated suite navigation.\n */\n@Component({\n  selector: \"viking-suite-search-palette\",\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <viking-suite-command-palette\n      #palette\n      [attr.context]=\"context()\"\n      [attr.app-url]=\"urls().app\"\n      [attr.marketing-url]=\"urls().marketing\"\n      [attr.backend-url]=\"urls().backend\"\n      [attr.placeholder]=\"placeholder()\"\n      [attr.global-shortcut]=\"bindShortcut() ? '' : 'false'\"\n    />\n  `,\n})\nexport class VikingSuiteSearchPalette implements OnInit, AfterViewInit {\n  private readonly platformId = inject(PLATFORM_ID);\n\n  readonly context = input<SiteDrakkarContext>(\"app\");\n  readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n  readonly placeholder = input<string>(\n    \"Search documentation, dashboard, settings…\",\n  );\n  readonly bindShortcut = input<boolean>(true);\n\n  /** Optional callback when the palette opens (e.g. SearchService bridge). */\n  readonly onRegister =\n    input<(handlers: { open: () => void; close: () => void }) => void>();\n\n  private readonly paletteRef = viewChild<ElementRef<HTMLElement>>(\"palette\");\n\n  ngOnInit(): void {\n    this.onRegister()?.({\n      open: () => this.openPalette(),\n      close: () => this.closePalette(),\n    });\n  }\n\n  ngAfterViewInit(): void {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n    writeDemlWidgets({\n      openSearch: () => this.openPalette(),\n      closeSearch: () => this.closePalette(),\n    });\n  }\n\n  /** Opens the palette. */\n  openPalette(): void {\n    const el = this.paletteRef()?.nativeElement as HTMLElement & {\n      openPalette?: () => void;\n    };\n    el?.openPalette?.();\n  }\n\n  /** Closes the palette and clears the query. */\n  closePalette(): void {\n    const el = this.paletteRef()?.nativeElement as HTMLElement & {\n      closePalette?: () => void;\n    };\n    el?.closePalette?.();\n  }\n}\n","/*\n * @dataengineeringformachinelearning/viking-ui — public API surface.\n * Viking-UI: DEML premium design system for Angular (THEME.md palette only).\n */\n\nexport * from \"./core/types\";\nexport * from \"./core/focus\";\nexport * from \"./core/field-a11y\";\nexport * from \"./core/theme\";\nexport * from \"./core/uid\";\nexport * from \"./core/dialog-session\";\nexport * from \"./core/toast-store\";\nexport * from \"./core/optimistic\";\nexport * from \"./core/command-history\";\nexport * from \"./lib/command-history/command-history.service\";\nexport * from \"./core/selection-model\";\nexport * from \"./lib/bulk-toolbar/bulk-toolbar\";\nexport * from \"./core/disclosure\";\nexport * from \"./lib/disclosure/disclosure\";\nexport * from \"./core/keyboard-shortcuts\";\nexport * from \"./lib/shortcut-help/shortcut-help.service\";\nexport * from \"./lib/shortcut-help/shortcut-help\";\nexport * from \"./core/preferences\";\nexport * from \"./lib/preferences/preferences.service\";\nexport * from \"./lib/preferences/preferences-panel\";\nexport * from \"./lib/preferences/preferences-host\";\nexport * from \"./core/onboarding\";\nexport * from \"./lib/onboarding-checklist/onboarding-checklist\";\nexport * from \"./core/suite-data-pack\";\nexport * from \"./core/activity-log\";\nexport * from \"./lib/activity-list/activity-list\";\nexport * from \"./core/fetch-handle\";\nexport * from \"./core/swr-cache\";\nexport * from \"./core/safe-href\";\nexport * from \"./core/sanitize-text\";\nexport * from \"./core/deml-widgets\";\nexport * from \"./lib/theme/theme.service\";\nexport {\n  VIKING_ICON_NAMES,\n  VIKING_FILLED_ICON_NAMES,\n  VIKING_ICON_FILLED_PATHS,\n  VIKING_ICON_PATHS,\n  VIKING_ICON_SIZE_PRESETS,\n  VIKING_BRAND_ICON_NAMES,\n  VIKING_LUCIDE_ICON_NAMES,\n  MATERIAL_ICON_ALIASES,\n  resolveVikingIcon,\n  resolveVikingIconColor,\n  resolveVikingIconSize,\n  type VikingIconColorToken,\n  type VikingIconName,\n  type VikingIconSizePreset,\n  type VikingIconVariant,\n  vikingIconViewBox,\n} from \"./core/icons\";\nexport {\n  VIKING_BRAND_ICON_PATHS,\n  VIKING_BRAND_ICON_FILLED_PATHS,\n  VIKING_BRAND_ICON_NAMES_LIST,\n  VIKING_DRAKKAR_ICON_PATHS,\n  VIKING_DRAKKAR_ICON_FILLED_PATHS,\n  VIKING_DRAKKAR_ICON_NAMES_LIST,\n  type VikingBrandIconName,\n  type VikingDrakkarIconName,\n} from \"./core/brand-icons\";\nexport {\n  VIKING_INTEGRATION_BRAND_COLORS,\n  VIKING_INTEGRATION_BRAND_NAMES,\n  VIKING_INTEGRATION_BRAND_SVGS,\n  VIKING_INTEGRATION_ICON_NAMES_LIST,\n  VIKING_INTEGRATION_ICON_PATHS,\n  isIntegrationBrandIcon,\n  type VikingIntegrationBrandName,\n  type VikingIntegrationIconName,\n} from \"./core/integration-brand-icons\";\nexport {\n  type VikingChartCurve,\n  type VikingChartKind,\n  type VikingDonutSegment,\n  type VikingCommandItem,\n  type VikingSelectOption,\n} from \"./core/types\";\nexport {\n  VIKING_SERIES_DEFAULT,\n  VIKING_SERIES_PRESETS,\n  type VikingSeriesPreset,\n} from \"./tokens/series-presets\";\nexport { VikingControl, provideVikingCva } from \"./lib/core/cva\";\n\n// Framework-agnostic Web Components + registration\nexport {\n  VikingBadgeWc,\n  VikingButtonWc,\n  VikingCalloutWc,\n  VikingCardWc,\n  VikingFieldWc,\n  VikingInputWc,\n  VikingModalWc,\n  VikingSearchPaletteWc,\n  VikingSelectWc,\n  VikingSuiteHeaderWc,\n  VikingSuiteSearchPaletteWc,\n  VikingStatusCardWc,\n  VikingStatusPillWc,\n  VikingThemeToggleWc,\n  registerVikingBadgeWc,\n  registerVikingButtonWc,\n  registerVikingCalloutWc,\n  registerVikingCardWc,\n  registerVikingFieldWc,\n  registerVikingInputWc,\n  registerVikingModalWc,\n  registerVikingSearchPaletteWc,\n  registerVikingSelectWc,\n  registerVikingStatusCardWc,\n  registerVikingStatusPillWc,\n  registerVikingSuiteHeaderWc,\n  registerVikingSuiteSearchPaletteWc,\n  registerVikingThemeToggleWc,\n  registerVikingElements,\n  type VikingSearchPaletteItem,\n  type VikingWcTone,\n} from \"./web/index\";\n\n// Site-drakkar config + services (cross-surface).\nexport * from \"./lib/site-drakkar/site-drakkar.config\";\nexport * from \"./lib/site-drakkar/suite-search-items\";\n\n// Angular components\nexport * from \"./lib/site-drakkar/site-navbar\";\nexport * from \"./lib/site-drakkar/site-footer\";\nexport * from \"./lib/theme-toggle/theme-toggle\";\nexport * from \"./lib/app-header/app-header\";\nexport * from \"./lib/app-sidebar/app-sidebar\";\nexport * from \"./lib/app-layout/app-layout\";\nexport * from \"./lib/accordion/accordion\";\nexport * from \"./lib/auth-panel/auth-panel\";\nexport * from \"./lib/autocomplete/autocomplete\";\nexport * from \"./lib/avatar/avatar\";\nexport * from \"./lib/badge/badge\";\nexport * from \"./lib/bar/bar\";\nexport * from \"./lib/box/box\";\nexport * from \"./lib/brand/brand\";\nexport * from \"./lib/breadcrumbs/breadcrumbs\";\nexport * from \"./lib/button/button\";\nexport * from \"./lib/button/button-group\";\nexport * from \"./lib/calendar/calendar\";\nexport * from \"./lib/callout/callout\";\nexport * from \"./lib/card/card\";\nexport * from \"./lib/card/card-title\";\nexport * from \"./lib/carousel/carousel\";\nexport * from \"./lib/chart/chart\";\nexport * from \"./lib/chart/chart-zoom\";\nexport * from \"./lib/chart-container/chart-container\";\nexport * from \"./lib/confirm-dialog/confirm-dialog\";\nexport * from \"./lib/confirm-dialog/confirm-dialog.service\";\nexport * from \"./lib/chart-card-header/chart-card-header\";\nexport * from \"./lib/icon-heading/icon-heading\";\nexport * from \"./lib/chart-empty-state/chart-empty-state\";\nexport * from \"./lib/chart-panel/chart-panel\";\nexport * from \"./lib/page-mockup/page-mockup\";\nexport * from \"./lib/checkbox/checkbox\";\nexport * from \"./lib/color-picker/color-picker\";\nexport * from \"./lib/collection-preferences/collection-preferences\";\nexport * from \"./lib/command/command\";\nexport * from \"./lib/composer/composer\";\nexport * from \"./lib/context/context\";\nexport * from \"./lib/content-layout/content-layout\";\nexport * from \"./lib/container/container\";\nexport * from \"./lib/date-picker/date-picker\";\nexport * from \"./lib/dropdown/dropdown\";\nexport * from \"./lib/empty-state/empty-state\";\nexport * from \"./lib/error-state/error-state\";\nexport * from \"./lib/editor/editor\";\nexport * from \"./lib/explore-card/explore-card\";\nexport * from \"./lib/fab/fab\";\nexport * from \"./lib/field/field\";\nexport * from \"./lib/flashbar/flashbar\";\nexport * from \"./lib/footer/footer\";\nexport * from \"./lib/form-section/form-section\";\nexport * from \"./lib/form-template/form-template\";\nexport * from \"./lib/file-upload/file-upload\";\nexport * from \"./lib/gauge-arc/gauge-arc\";\nexport * from \"./lib/hud-panel/hud-panel\";\nexport * from \"./lib/help-panel/help-panel\";\nexport * from \"./lib/icon/icon\";\nexport * from \"./lib/icon-badge/icon-badge\";\nexport { VikingIconComponent } from \"./lib/icon/icon\";\nexport * from \"./lib/icon-text/icon-text\";\nexport * from \"./lib/input/input\";\nexport * from \"./lib/kanban/kanban\";\nexport * from \"./lib/kbd/kbd\";\nexport * from \"./lib/label/label\";\nexport * from \"./lib/loading-overlay/loading-overlay\";\nexport * from \"./lib/layout/layout\";\nexport * from \"./lib/metric-card/metric-card\";\nexport * from \"./lib/menubar/menubar\";\nexport * from \"./lib/modal/modal\";\nexport * from \"./lib/native-select/native-select\";\nexport * from \"./lib/navigation-menu/navigation-menu\";\nexport * from \"./lib/navbar/navbar\";\nexport * from \"./lib/otp-input/otp-input\";\nexport * from \"./lib/verification-code-field/verification-code-field\";\nexport * from \"./lib/page-back-link/page-back-link\";\nexport * from \"./lib/page-header/page-header\";\nexport * from \"./lib/page-template/page-template\";\nexport * from \"./lib/section-template/section-template\";\nexport * from \"./lib/pagination/pagination\";\nexport * from \"./lib/pillbox/pillbox\";\nexport * from \"./lib/popover/popover\";\nexport * from \"./lib/property-filter/property-filter\";\nexport * from \"./lib/profile/profile\";\nexport * from \"./lib/progress/progress\";\nexport * from \"./lib/radio/radio\";\nexport * from \"./lib/ring-gauge/ring-gauge\";\nexport * from \"./lib/search-palette/search-palette\";\nexport {\n  rankSearchItems,\n  scoreSearchItem,\n} from \"./web/search-palette/rank-search\";\nexport {\n  DEFAULT_RECENT_LIMIT,\n  DEFAULT_RECENT_STORAGE_KEY,\n  clearRecentSearches,\n  pushRecentSearch,\n  readRecentSearches,\n  recentSearchesAsItems,\n  type VikingRecentSearch,\n} from \"./web/search-palette/recent-searches\";\nexport * from \"./lib/select/select\";\nexport * from \"./lib/separator/separator\";\nexport * from \"./lib/scroll-area/scroll-area\";\nexport * from \"./lib/sheet/sheet\";\nexport * from \"./lib/sidebar-nav/sidebar-nav\";\nexport * from \"./lib/skeleton/skeleton\";\nexport * from \"./lib/page-skeleton/page-skeleton\";\nexport * from \"./lib/virtual-list/virtual-window\";\nexport * from \"./lib/virtual-list/virtual-list\";\nexport * from \"./lib/spinner/spinner\";\nexport * from \"./lib/status-card/status-card\";\nexport * from \"./lib/status-badge/status-badge\";\nexport * from \"./lib/announcement-card/announcement-card\";\nexport * from \"./lib/status-dashboard/status-dashboard\";\nexport * from \"./lib/status-metric-row/status-metric-row\";\nexport * from \"./lib/status-pill/status-pill\";\nexport * from \"./lib/status-section/status-section\";\nexport * from \"./lib/slider/slider\";\nexport * from \"./lib/split-panel/split-panel\";\nexport * from \"./lib/switch/switch\";\nexport * from \"./lib/table/table\";\nexport * from \"./lib/table/table-header\";\nexport * from \"./lib/tabs/tab\";\nexport * from \"./lib/tabs/tab-panel\";\nexport * from \"./lib/tabs/tabs\";\nexport * from \"./lib/textarea/textarea\";\nexport * from \"./lib/toggle/toggle\";\nexport * from \"./lib/toggle/toggle-group\";\nexport * from \"./lib/time-picker/time-picker\";\nexport * from \"./lib/timeline/timeline\";\nexport * from \"./lib/pipeline-flow/pipeline-flow\";\nexport * from \"./lib/stream-status/stream-status\";\nexport * from \"./lib/toast/toast\";\nexport * from \"./lib/uptime-bar/uptime-bar\";\nexport * from \"./lib/uptime-history/uptime-history\";\nexport * from \"./lib/status-panel/status-panel\";\nexport * from \"./lib/whitepaper-cta/whitepaper-cta\";\nexport * from \"./lib/wizard/wizard\";\nexport * from \"./lib/tooltip/tooltip\";\nexport * from \"./lib/typography/heading\";\nexport * from \"./lib/typography/text\";\nexport * from \"./lib/suite-search-palette/suite-search-palette\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isEditableTarget","LUCIDE_ICON_PATHS","VIKING_BRAND_ICON_PATHS","VIKING_DRAKKAR_ICON_PATHS","VIKING_BRAND_ICON_FILLED_PATHS","VIKING_DRAKKAR_ICON_FILLED_PATHS","VIKING_BRAND_ICON_NAMES_LIST","VIKING_DRAKKAR_ICON_NAMES_LIST","VIKING_INTEGRATION_BRAND_COLORS","VIKING_INTEGRATION_BRAND_NAMES","isIntegrationBrandIcon","VIKING_INTEGRATION_BRAND_PATHS","integrationBrandSvg","VIKING_INTEGRATION_BRAND_SVGS","VIKING_INTEGRATION_ICON_PATHS","VIKING_INTEGRATION_ICON_NAMES_LIST","VIKING_ICON_SIZE_PRESETS","VIKING_CUSTOM_ICON_PATHS","VIKING_ICON_PATHS","VIKING_ICON_FILLED_PATHS","MATERIAL_ICON_ALIASES","VIKING_FILLED_ICON_NAMES","VIKING_BRAND_ICON_NAMES","VIKING_ICON_COLOR_TOKENS","vikingIconViewBox","resolveVikingIconSize","resolveVikingIconColor","VIKING_ICON_PATH_KEYS","resolveVikingIcon","VIKING_ICON_NAMES","VIKING_LUCIDE_ICON_NAMES","TONE_ICONS","safeStorage","defaultStore","defaults","sanitize","readBlob","writeBlob","dispatchChange","readBoolAttr","TONES","VALID_CONTEXTS","detectContext","readContext","readUrls","VikingIconComponent","VikingUptimeHistory"],"mappings":"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"}