@meddleware/ui 0.1.28 → 0.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -76,7 +76,7 @@ All three accept a `variant` prop:
76
76
  | `UiFormField` | A labelled field as a `<p>`: `<label for>` + `label-suffix` slot (e.g. `UiFieldHint`, kept outside the label) + control slot (receives `attrs` with `id` / `aria-*`) + hint/error `<small>`. Slot content must be phrasing content. |
77
77
  | `UiNotice` | Notice / alert banner. |
78
78
  | `UiDialog` | Modal on the native `<dialog>`: `<article>` › `<header>` (h2 title + close) · body slot · `<footer>` (`actions` slot, scoped `close(value)`). `v-model:open`, `title`, `dismissible` (Escape/backdrop/close button via native `closedby`), `width`; emits `close(returnValue)`. |
79
- | `AppTabNav` / `UiTabPanel` | WAI-ARIA tabs: `AppTabNav` is the `tablist` (arrow keys, Home/End, roving tabindex); wrap each view's content in `UiTabPanel` with the same `idPrefix` and the shown `tab` id. `tabIds(prefix, id)` returns the linked ids. |
79
+ | `AppTabNav` / `UiTabPanel` | WAI-ARIA tabs: `AppTabNav` is the `tablist` (arrow keys, Home/End, roving tabindex); wrap each view's content in `UiTabPanel` with the same `idPrefix` and the shown `tab` id. Only the selected tab gets `aria-controls` (one panel rendered); pass `all-panels` when every tab's panel stays mounted. `tabIds(prefix, id)` returns the linked ids. |
80
80
  | `SidebarItem` | Navigation button for use inside `AppSidebar`. Accepts `label`, `icon`, `active`, and `disabled` props. |
81
81
  | `SidebarGroup` | Labelled group of sidebar items: a `<fieldset>` whose visible `<legend>` names the group. |
82
82
  | `CopyableAddress` | Shows a value (address/blob id/tx digest) with a dedicated **copy icon** (the value text is not the copy trigger). Put a link in the default slot to make it both linkable and copyable. Props: `address`, `truncate`, `chars`, `label`. |
package/dist/base.css CHANGED
@@ -1,2 +1,2 @@
1
- *,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--mw-font-sans);font-size:var(--font-size-base);line-height:var(--leading-normal);letter-spacing:var(--tracking-normal);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}:where(ul,ol):where([role=list],[role=listitem]),:where(menu){margin:0;padding:0;list-style:none}.mw-visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:where(img,svg,video,canvas){max-width:100%;display:block}:where(fieldset){border:0;min-inline-size:0;margin:0;padding:0}:where(legend){padding:0}a{color:var(--accent);transition:color var(--transition-base);text-decoration:none}a:hover{text-decoration:underline}:where(button,input,select,textarea){font-family:inherit}:where(a,button,input,select,textarea):focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.mw-mono{font-family:var(--mw-font-mono)}.mw-noise{isolation:isolate;position:relative}.mw-noise:before{content:"";z-index:-1;background-image:var(--noise-overlay);opacity:var(--noise-opacity);pointer-events:none;background-repeat:repeat;position:absolute;inset:0}.mw-hand-drawn{display:inline-flex;position:relative}.mw-spinner{width:var(--space-sm);height:var(--space-sm);border:2px solid var(--border);border-top-color:var(--accent);animation:mw-spin var(--transition-slow) linear infinite;border-radius:50%;display:inline-block}@keyframes mw-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}.mw-spinner{border-top-color:var(--accent);animation:none}}.mw-header[data-v-3bfe2697]{--_bg:var(--v7dfc9c9a);--_surface:var(--v3dfe910e);--_text:var(--v100a5d02);--_muted:var(--cbf62068);--_border:var(--v21deec7e);align-items:center;gap:var(--space-2xs);height:var(--mw-header-height,56px);padding:0 var(--space-sm);background:var(--_bg);color:var(--_text);border-bottom:1px solid var(--_border);font-family:var(--mw-font-sans);transition:background var(--transition-base), backdrop-filter var(--transition-base), border-color var(--transition-base), box-shadow var(--transition-base);display:flex}.mw-header--sticky[data-v-3bfe2697]{z-index:50;position:sticky;top:0}.mw-header--scrolled[data-v-3bfe2697]{background:color-mix(in srgb, var(--_bg-solid,var(--bg)) 82%, transparent);-webkit-backdrop-filter:blur(10px);border-bottom-color:var(--border);box-shadow:0 1px 0 color-mix(in srgb, var(--border) 60%, transparent)}.mw-header>[data-v-3bfe2697-s]:first-child{align-items:center;gap:var(--space-2xs);letter-spacing:var(--tracking-wide);white-space:nowrap;margin-inline-end:auto;font-weight:650;display:flex}.mw-sidebar[data-v-7d26a9e6]{--_bg:var(--v561aca24);--_surface:var(--v7e3149c4);--_text:var(--v5953500c);--_muted:var(--v79da5e02);--_border:var(--v09e8e24b);--_width:var(--v0716c1ba);height:100%;width:var(--_width);background:var(--_bg);color:var(--_text);border-right:1px solid var(--_border);font-family:var(--mw-font-sans);flex-direction:column;display:flex}.mw-sidebar__nav[data-v-7d26a9e6]{gap:var(--space-3xs);padding:var(--space-xs) 0;flex-direction:column;flex:auto;display:flex;overflow-y:auto}.mw-footer[data-v-6055f18c]{--_bg:var(--bf930b0c);--_surface:var(--v34a45f2e);--_text:var(--e9777a3c);--_muted:var(--f3f07428);--_border:var(--f92f10be);align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);background:var(--_bg);color:var(--_muted);border-top:1px solid var(--_border);font-family:var(--mw-font-sans);font-size:var(--font-size-sm);flex-wrap:wrap;display:flex}.mw-footer--transparent[data-v-6055f18c]{border-top:1px solid var(--border)}.mw-footer__docs[data-v-6055f18c]{align-items:center;gap:var(--space-sm);margin-inline-start:auto;display:flex}.mw-footer__docs a[data-v-6055f18c]{color:inherit;text-underline-offset:2px;opacity:.7;text-decoration:underline}.mw-footer__docs a[data-v-6055f18c]:hover{opacity:1}.mw-mode[data-v-e5cba7a7]{border:1px solid var(--_border,var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--_text,var(--text)) 6%, transparent);gap:2px;min-inline-size:0;margin:0;padding:2px;display:inline-flex}.mw-mode__btn[data-v-e5cba7a7]{align-items:center;gap:var(--space-3xs);padding:var(--space-3xs) var(--space-2xs);border-radius:calc(var(--radius) - 3px);color:var(--_text,var(--text));font:inherit;font-size:var(--font-size-sm);cursor:pointer;opacity:.7;transition:opacity var(--transition-base), background var(--transition-base);background:0 0;border:0;display:inline-flex}.mw-mode__btn[data-v-e5cba7a7]:hover{opacity:1}.mw-mode__btn.is-active[data-v-e5cba7a7]{opacity:1;background:color-mix(in srgb, var(--_text,var(--text)) 14%, transparent)}.mw-mode__btn[data-v-e5cba7a7]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}@media (width<=640px){.mw-mode__label[data-v-e5cba7a7]{display:none}}.mw-btn[data-v-bc33cc23]{justify-content:center;align-items:center;gap:var(--space-2xs);padding:var(--space-2xs) var(--space-xs);border-radius:var(--radius);font:inherit;cursor:pointer;transition:filter var(--transition-base), background var(--transition-base);border:1px solid #0000;font-weight:550;display:inline-flex}.mw-btn[data-v-bc33cc23]:disabled{opacity:.55;cursor:not-allowed}.mw-btn[data-v-bc33cc23]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.mw-btn--primary[data-v-bc33cc23]{background:var(--accent);color:var(--accent-contrast)}.mw-btn--primary[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-btn--secondary[data-v-bc33cc23]{background:var(--secondary);color:var(--secondary-contrast)}.mw-btn--secondary[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-btn--ghost[data-v-bc33cc23]{color:var(--text);border-color:var(--border);background:0 0}.mw-btn--ghost[data-v-bc33cc23]:not(:disabled):hover{background:var(--lift)}.mw-btn--danger[data-v-bc33cc23]{background:var(--danger);color:var(--accent-contrast)}.mw-btn--danger[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-card[data-v-384b36cf]{padding:var(--space-sm);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);overflow:hidden}.mw-card__header[data-v-384b36cf]{margin:calc(-1 * var(--space-sm)) calc(-1 * var(--space-sm)) var(--space-sm);padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border)}.mw-card__title[data-v-384b36cf]{font-size:var(--font-size-base);margin:0;font-weight:600}.mw-card__footer[data-v-384b36cf]{margin:var(--space-sm) calc(-1 * var(--space-sm)) calc(-1 * var(--space-sm));padding:var(--space-xs) var(--space-sm);border-top:1px solid var(--border);background:var(--lift)}.mw-select[data-v-38fbd9b5]{--_chevron-stroke:var(--muted);--_chevron-arm:6px;appearance:none;width:100%;padding:var(--space-2xs) calc(var(--space-md) + var(--space-2xs)) var(--space-2xs) var(--space-xs);background-color:var(--surface);background-image:linear-gradient(45deg, transparent calc(50% - .75px), var(--_chevron-stroke) calc(50% - .75px), var(--_chevron-stroke) calc(50% + .75px), transparent calc(50% + .75px)), linear-gradient(-45deg, transparent calc(50% - .75px), var(--_chevron-stroke) calc(50% - .75px), var(--_chevron-stroke) calc(50% + .75px), transparent calc(50% + .75px));background-position:right calc(var(--space-xs) + var(--_chevron-arm)) center, right var(--space-xs) center;background-size:var(--_chevron-arm) var(--_chevron-arm);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit;background-repeat:no-repeat}.mw-select[data-v-38fbd9b5]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-notice[data-v-ee7fffb1]{padding:var(--space-2xs) var(--space-xs);border:1px solid var(--border);border-radius:var(--radius);background:var(--lift);color:var(--text);font-size:var(--font-size-sm);border-left-width:3px;margin:0}.mw-notice--error[data-v-ee7fffb1]{border-left-color:var(--danger);color:var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent)}.mw-notice--ok[data-v-ee7fffb1]{border-left-color:var(--ok);color:var(--ok);background:color-mix(in srgb, var(--ok) 8%, transparent)}.sidebar-item[data-v-c8ae7e5f]{align-items:center;gap:var(--space-2xs);width:100%;padding:var(--space-2xs) var(--space-sm);color:inherit;font:inherit;text-align:left;cursor:pointer;opacity:.85;transition:background var(--transition-base), opacity var(--transition-base);background:0 0;border:0;border-radius:0;display:flex}.sidebar-item[data-v-c8ae7e5f]:hover:not(:disabled){background:color-mix(in srgb, currentColor 10%, transparent);opacity:1}.sidebar-item.is-active[data-v-c8ae7e5f]{background:color-mix(in srgb, var(--accent) 26%, transparent);opacity:1}.sidebar-item[data-v-c8ae7e5f]:disabled{cursor:default}.sidebar-item[data-v-c8ae7e5f]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.sidebar-item__icon[data-v-c8ae7e5f]{text-align:center;width:1.1rem}.sidebar-group[data-v-95acc444]{border:0;min-inline-size:0;margin:0;padding:0}.sidebar-group--l1+.sidebar-group--l1[data-v-95acc444]{margin-block-start:var(--space-2xs)}.sidebar-group__label[data-v-95acc444]{float:inline-start;width:100%;padding:var(--space-3xs) var(--space-xs);font-size:var(--font-size-xs);color:var(--muted);-webkit-user-select:none;user-select:none;font-weight:600}.sidebar-group__label[data-v-95acc444]+*{clear:both}.sidebar-group--l1>.sidebar-group__label[data-v-95acc444]{text-transform:uppercase;letter-spacing:var(--tracking-wide);opacity:.75}.sidebar-group--l2[data-v-95acc444]{padding-inline-start:var(--space-3xs)}.sidebar-group--l2>.sidebar-group__label[data-v-95acc444]{opacity:.6;padding-inline-start:var(--space-xs)}.mw-tab-nav[data-v-a5f710b1]{gap:var(--space-3xs);border-bottom:2px solid var(--border);margin:0;padding:0;list-style:none;display:flex}.mw-tab-nav__item[data-v-a5f710b1]{display:contents}.mw-tab-nav__tab[data-v-a5f710b1]{appearance:none;padding:var(--space-2xs) var(--space-sm);cursor:pointer;font-size:var(--font-size-base);color:var(--muted);transition:color var(--transition-base), border-color var(--transition-base);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;margin-bottom:-2px}.mw-tab-nav__tab[data-v-a5f710b1]:hover{color:var(--text)}.mw-tab-nav__tab--active[data-v-a5f710b1]{border-bottom-color:var(--accent);color:var(--text);font-weight:600}.mw-tab-nav--raised[data-v-a5f710b1]{border-bottom:1px solid var(--border);background:var(--surface);scrollbar-width:none;flex-shrink:0;align-items:flex-end;gap:2px;padding:4px 4px 0;overflow-x:auto}.mw-tab-nav--raised[data-v-a5f710b1]::-webkit-scrollbar{display:none}.mw-tab-nav--raised .mw-tab-nav__tab[data-v-a5f710b1]{border-bottom:1px solid var(--border);color:var(--muted);background:var(--lift);letter-spacing:.01em;white-space:nowrap;transition:color var(--transition-base), background var(--transition-base), border-color var(--transition-base);border-top:2px solid #0000;border-left:1px solid #0000;border-right:1px solid #0000;margin-bottom:-1px;padding:5px 14px 6px;font-size:.8rem;font-weight:500}.mw-tab-nav--raised .mw-tab-nav__tab[data-v-a5f710b1]:hover:not(.mw-tab-nav__tab--active){color:var(--text);background:var(--surface)}.mw-tab-nav--raised .mw-tab-nav__tab--active[data-v-a5f710b1]{color:var(--text);background:var(--bg);border-color:var(--accent) var(--border) var(--bg) var(--border);font-weight:600}.mw-tab-nav--raised.mw-tab-nav--lg[data-v-a5f710b1]{gap:3px;padding:6px 6px 0}.mw-tab-nav--raised.mw-tab-nav--lg .mw-tab-nav__tab[data-v-a5f710b1]{padding:9px 20px 10px;font-size:.95rem;font-weight:600}.mw-tab-panel[data-v-add194c8]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.mw-dialog[data-v-78973168]{--_width:var(--ce627f2e);width:var(--_width);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);max-height:90vh;color:var(--text);padding:0;box-shadow:0 1.25rem 3.75rem #00000073}.mw-dialog[data-v-78973168]::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#00000080}.mw-dialog__content[data-v-78973168]{gap:var(--space-sm);padding:var(--space-md);flex-direction:column;display:flex}.mw-dialog__header[data-v-78973168]{justify-content:space-between;align-items:center;gap:var(--space-sm);display:flex}.mw-dialog__title[data-v-78973168]{font-size:var(--font-size-base);margin:0;font-weight:600}.mw-dialog__close[data-v-78973168]{padding:0 var(--space-3xs);border-radius:var(--radius);color:var(--muted);font-size:var(--font-size-xl);cursor:pointer;background:0 0;border:0;line-height:1}.mw-dialog__close[data-v-78973168]:hover{color:var(--text)}.mw-dialog__actions[data-v-78973168]{justify-content:flex-end;gap:var(--space-xs);flex-wrap:wrap;display:flex}.ca-root[data-v-b43dabdd]{align-items:center;gap:.35em;display:inline-flex}.ca-value[data-v-b43dabdd]{font-family:var(--mw-font-mono,monospace);font-size:inherit}.ca-copy[data-v-b43dabdd]{color:var(--muted,#888);cursor:pointer;transition:color var(--transition-base);background:0 0;border:none;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}.ca-copy[data-v-b43dabdd]:hover{color:var(--text,#f0f0f0)}.ca-copy--copied[data-v-b43dabdd]{color:var(--accent,#6366f1)}.ca-icon[data-v-b43dabdd]{display:block}.el-root[data-v-073d1bbe]{font-family:monospace;font-size:inherit;color:var(--accent,#6366f1);text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;transition:color .15s}.el-root[data-v-073d1bbe]:hover{color:var(--text,#f0f0f0);text-decoration-style:solid}.copyright-line[data-v-44b327f4]{white-space:nowrap;text-align:center;display:inline-block}.symbol-link[data-v-44b327f4]{color:inherit;vertical-align:text-top;align-items:center;padding:0 .1rem;text-decoration:none;display:inline-flex}.symbol-link[data-v-44b327f4]:hover{text-decoration:underline}.kopimi-symbol[data-v-44b327f4]{align-items:center;line-height:1;display:inline-flex}.kopimi-mark[data-v-44b327f4]{vertical-align:-.15em;display:inline}.text-content[data-v-44b327f4]{display:inline}.ui-stepper[data-v-6f5db325]{margin:0 0 var(--space-md,1.5rem);padding:0;list-style:none;display:flex}.ui-stepper__step[data-v-6f5db325]{flex-direction:column;flex:1 1 0;align-items:center;gap:.4rem;min-width:0;display:flex;position:relative}.ui-stepper__step[data-v-6f5db325]:not(:first-child):before{content:"";background:var(--border);z-index:0;height:2px;position:absolute;top:1rem;left:-50%;right:50%}.ui-stepper__step.is-done[data-v-6f5db325]:before,.ui-stepper__step.is-active[data-v-6f5db325]:before{background:var(--accent)}.ui-stepper__badge[data-v-6f5db325]{z-index:1;border:2px solid var(--border);background:var(--surface);width:2rem;height:2rem;color:var(--muted);cursor:default;transition:background-color var(--transition-base,.2s), border-color var(--transition-base,.2s);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;font-size:.8rem;font-weight:600;line-height:1;display:flex;position:relative}button.ui-stepper__badge[data-v-6f5db325]{cursor:pointer}button.ui-stepper__badge[data-v-6f5db325]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.is-done .ui-stepper__badge[data-v-6f5db325]{background:var(--accent);border-color:var(--accent);color:#fff}.is-active .ui-stepper__badge[data-v-6f5db325]{background:color-mix(in srgb, var(--accent) 12%, var(--surface));border-color:var(--accent);color:var(--accent)}.ui-stepper__label[data-v-6f5db325]{text-align:center;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:.78rem;line-height:1.2;overflow:hidden}.is-done .ui-stepper__label[data-v-6f5db325],.is-active .ui-stepper__label[data-v-6f5db325]{color:var(--text)}.is-active .ui-stepper__label[data-v-6f5db325]{font-weight:600}.mw-seg[data-v-430ffdd6]{border:1px solid var(--border);border-radius:var(--radius);min-inline-size:0;margin:0;padding:0;display:inline-flex;overflow:hidden}.mw-seg__item[data-v-430ffdd6]{height:2rem;padding:0 var(--space-sm);border-right:1px solid var(--border);cursor:pointer;font-size:var(--font-size-sm);color:var(--muted);transition:background var(--transition-base), color var(--transition-base);-webkit-user-select:none;user-select:none;white-space:nowrap;background:0 0;justify-content:center;align-items:center;margin:0;display:flex}.mw-seg__item[data-v-430ffdd6]:last-child{border-right:none}.mw-seg__item--active[data-v-430ffdd6]{background:var(--accent);color:var(--accent-contrast)}.mw-seg__item[data-v-430ffdd6]:has(input:focus-visible){outline:2px solid var(--focus-ring);outline-offset:-2px}.mw-seg__item--disabled[data-v-430ffdd6]{opacity:.5;pointer-events:none;cursor:not-allowed}.mw-seg__item input[type=radio][data-v-430ffdd6]{opacity:0;pointer-events:none;width:0;height:0;position:absolute}.mw-field-hint[data-v-29d9a629]{margin-left:var(--space-3xs,.35rem);vertical-align:middle;display:inline-block;position:relative}.mw-field-hint__btn[data-v-29d9a629]{border:1px solid var(--muted);width:1.1em;height:1.1em;color:var(--muted);cursor:help;background:0 0;border-radius:50%;justify-content:center;align-items:center;padding:0;font-family:inherit;font-size:.75rem;font-weight:700;line-height:1;display:inline-flex}.mw-field-hint__btn[data-v-29d9a629]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-field-hint__tip[data-v-29d9a629]{z-index:10;min-width:200px;max-width:min(300px,90vw);padding:var(--space-2xs,.6rem) var(--space-xs,.75rem);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);font-size:var(--font-size-sm,.85rem);color:var(--text);visibility:hidden;opacity:0;transition:opacity var(--transition-base,.15s ease), visibility var(--transition-base,.15s ease);pointer-events:none;font-weight:400;line-height:1.5;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001f}.mw-field-hint:hover .mw-field-hint__tip[data-v-29d9a629],.mw-field-hint:focus-within .mw-field-hint__tip[data-v-29d9a629]{visibility:visible;opacity:1;pointer-events:auto}.mw-form-field[data-v-5aef34d9]{margin:0}.mw-form-field__label[data-v-5aef34d9]{margin:.9rem 0 .3rem;font-weight:600;display:inline-block}.mw-form-field :is(input[data-v-5aef34d9-s],select[data-v-5aef34d9-s],textarea[data-v-5aef34d9-s]){display:block}.mw-form-field__hint[data-v-5aef34d9],.mw-form-field__error[data-v-5aef34d9]{font-size:var(--font-size-sm,.9rem);margin:.25rem 0 0;display:block}.mw-form-field__hint[data-v-5aef34d9]{color:var(--muted);font-weight:400}.mw-form-field__error[data-v-5aef34d9]{color:var(--danger)}.mw-tool-intro[data-v-9a5436b9]{color:var(--muted);margin:.25rem 0 1.25rem}.mw-panel[data-v-62fac524]{border:1px solid var(--border);background:var(--surface);border-radius:2px;padding:10px;overflow:hidden}.mw-panel__title[data-v-62fac524]{letter-spacing:.06em;font-size:.72rem;font-weight:600;line-height:inherit;text-transform:uppercase;color:var(--muted);background:var(--lift);border-bottom:1px solid var(--border);margin:-10px -10px 10px;padding:5px 10px}.mw-badge[data-v-5aa44ef5]{letter-spacing:.04em;text-transform:uppercase;border-radius:2px;padding:1px 6px;font-size:.7rem;font-weight:600;display:inline-block}.mw-badge--active[data-v-5aa44ef5]{background:color-mix(in srgb, var(--ok) 20%, transparent);color:var(--ok)}.mw-badge--closed[data-v-5aa44ef5]{background:color-mix(in srgb, var(--muted) 20%, transparent);color:var(--muted)}.mw-badge--pending[data-v-5aa44ef5]{background:color-mix(in srgb, var(--warning) 20%, transparent);color:var(--warning)}.mw-badge--neutral[data-v-5aa44ef5]{background:var(--lift);color:var(--muted)}.mw-toolbar-btn[data-v-d5f19134]{background:var(--lift);border:1px solid var(--border);height:26px;color:var(--text);cursor:pointer;white-space:nowrap;border-radius:2px;align-items:center;gap:5px;padding:3px 10px;font-size:.8rem;transition:background .1s,border-color .1s;display:inline-flex}.mw-toolbar-btn[data-v-d5f19134]:hover:not(:disabled){background:var(--surface);border-color:var(--accent)}.mw-toolbar-btn[data-v-d5f19134]:disabled{opacity:.5;cursor:not-allowed}.mw-toolbar-btn[data-v-d5f19134]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-toolbar[data-v-170c8eb5]{border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0;align-items:center;gap:4px;margin:0;padding:4px 8px;list-style:none;display:flex}.mw-stat-grid[data-v-3608575d]{grid-template-columns:auto 1fr;gap:3px 12px;margin:0;font-size:.8rem;display:grid}.mw-stat-grid__label[data-v-829f7772]{color:var(--muted);white-space:nowrap}.mw-stat-grid__value[data-v-829f7772]{font-family:var(--mw-font-mono);color:var(--text);text-align:right;margin:0}.mw-stat-grid__value--left[data-v-829f7772]{text-align:left}.mw-data-table-wrap[data-v-de139c21]{overflow-x:auto}.mw-data-table[data-v-de139c21]{border-collapse:collapse;width:100%;font-size:.8rem}.mw-data-table[data-v-de139c21] th{text-align:left;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--border);white-space:nowrap;padding:5px 8px;font-size:.7rem;font-weight:600}.mw-data-table[data-v-de139c21] td{border-bottom:1px solid var(--border);vertical-align:middle;padding:5px 8px}.mw-data-table[data-v-de139c21] tbody tr:last-child td{border-bottom:none}.mw-data-table[data-v-de139c21] tbody tr:nth-child(2n) td{background:var(--lift)}.mw-data-table__empty[data-v-de139c21]{text-align:center;color:var(--muted);padding:24px 16px;font-size:.8rem}.mw-status-dot[data-v-62e9a7cc]{border-radius:50%;flex-shrink:0;width:7px;height:7px;margin-right:4px;display:inline-block}.mw-status-dot--ok[data-v-62e9a7cc]{background:var(--ok)}.mw-status-dot--warn[data-v-62e9a7cc]{background:var(--warning)}.mw-status-dot--error[data-v-62e9a7cc]{background:var(--danger)}.mw-statusbar[data-v-cb4a19b8]{color:var(--muted);background:var(--surface);border-top:1px solid var(--border);font-size:.72rem;font-family:var(--mw-font-mono);z-index:1;flex-shrink:0;align-items:center;gap:16px;margin:0;padding:3px 12px;list-style:none;display:flex;position:sticky;bottom:0}.mw-statusbar[data-v-cb4a19b8]>li{align-items:center;display:flex}.mw-statusbar[data-v-cb4a19b8]>li+li:before{content:"│" / "";color:var(--border);margin-inline-end:16px}.mw-statusbar__pending[data-v-cb4a19b8]{opacity:.7}.mw-feed[data-v-9e578c9d]{margin:0;padding:0;font-size:.78rem;list-style:none}.mw-feed__item[data-v-797b66a9]{border-bottom:1px solid var(--border);color:var(--text);white-space:nowrap;align-items:flex-start;gap:8px;padding:4px 0;font-weight:500;display:flex}.mw-feed__item[data-v-797b66a9]:before{content:"";background:var(--accent);border-radius:50%;flex-shrink:0;width:6px;height:6px;margin-top:4px}.mw-feed__item[data-v-797b66a9]:last-child{border-bottom:none}.mw-feed__meta[data-v-797b66a9]{color:var(--muted);font-family:var(--mw-font-mono);margin-left:auto;font-size:.72rem;font-weight:400}.status-widget[data-v-6562bc0e]{align-items:center;gap:var(--space-2xs);color:inherit;font-size:var(--font-size-sm);opacity:.85;transition:opacity var(--transition-base);text-decoration:none;display:inline-flex}.status-widget[data-v-6562bc0e]:hover{opacity:1}.status-widget[data-v-6562bc0e]:before{content:"";width:var(--space-2xs);height:var(--space-2xs);border-radius:50%;flex-shrink:0}.status-widget--ok[data-v-6562bc0e]:before{background:var(--ok)}.status-widget--degraded[data-v-6562bc0e]:before{background:var(--warning)}.status-widget--error[data-v-6562bc0e]:before{background:var(--danger)}
1
+ *,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--mw-font-sans);font-size:var(--font-size-base);line-height:var(--leading-normal);letter-spacing:var(--tracking-normal);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}:where(ul,ol):where([role=list],[role=listitem]),:where(menu){margin:0;padding:0;list-style:none}.mw-visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:where(img,svg,video,canvas){max-width:100%;display:block}:where(fieldset){border:0;min-inline-size:0;margin:0;padding:0}:where(legend){padding:0}a{color:var(--accent);transition:color var(--transition-base);text-decoration:none}a:hover{text-decoration:underline}:where(button,input,select,textarea){font-family:inherit}:where(a,button,input,select,textarea):focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.mw-mono{font-family:var(--mw-font-mono)}.mw-noise{isolation:isolate;position:relative}.mw-noise:before{content:"";z-index:-1;background-image:var(--noise-overlay);opacity:var(--noise-opacity);pointer-events:none;background-repeat:repeat;position:absolute;inset:0}.mw-hand-drawn{display:inline-flex;position:relative}.mw-spinner{width:var(--space-sm);height:var(--space-sm);border:2px solid var(--border);border-top-color:var(--accent);animation:mw-spin var(--transition-slow) linear infinite;border-radius:50%;display:inline-block}@keyframes mw-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}.mw-spinner{border-top-color:var(--accent);animation:none}}.mw-header[data-v-4c177b22]{--_bg:var(--v207c6e6c);--_surface:var(--f304fa44);--_text:var(--v25353d32);--_muted:var(--v2a36159c);--_border:var(--v65041df1);--_ok:var(--v20707ebe);--_danger:var(--v49861e28);--_info:var(--v12e68073);align-items:center;gap:var(--space-2xs);height:var(--mw-header-height,56px);padding:0 var(--space-sm);background:var(--_bg);color:var(--_text);border-bottom:1px solid var(--_border);font-family:var(--mw-font-sans);transition:background var(--transition-base), backdrop-filter var(--transition-base), border-color var(--transition-base), box-shadow var(--transition-base);display:flex}.mw-header--sticky[data-v-4c177b22]{z-index:50;position:sticky;top:0}.mw-header--scrolled[data-v-4c177b22]{background:color-mix(in srgb, var(--_bg-solid,var(--bg)) 82%, transparent);-webkit-backdrop-filter:blur(10px);border-bottom-color:var(--border);box-shadow:0 1px 0 color-mix(in srgb, var(--border) 60%, transparent)}.mw-header>[data-v-4c177b22-s]:first-child{align-items:center;gap:var(--space-2xs);letter-spacing:var(--tracking-wide);white-space:nowrap;margin-inline-end:auto;font-weight:650;display:flex}.mw-header[data-v-4c177b22]:not(.mw-header--transparent){--ok:var(--_ok);--danger:var(--_danger);--info:var(--_info)}.mw-sidebar[data-v-30f2000a]{--_bg:var(--v71ead984);--_surface:var(--fe385338);--_text:var(--v7d45f128);--_muted:var(--v130792a2);--_border:var(--d33b7caa);--_ok:var(--v71f0d15b);--_danger:var(--v7ae441e2);--_info:var(--a1e36aa6);--_width:var(--v4463291a);height:100%;width:var(--_width);background:var(--_bg);color:var(--_text);border-right:1px solid var(--_border);font-family:var(--mw-font-sans);flex-direction:column;display:flex}.mw-sidebar__nav[data-v-30f2000a]{gap:var(--space-3xs);padding:var(--space-xs) 0;flex-direction:column;flex:auto;display:flex;overflow-y:auto}.mw-sidebar[data-v-30f2000a]:not(.mw-sidebar--transparent){--ok:var(--_ok);--danger:var(--_danger);--info:var(--_info)}.mw-footer[data-v-6c5fa699]{--_bg:var(--v605673bd);--_surface:var(--v08ecb7cb);--_text:var(--v796a1136);--_muted:var(--v4ed7a1c9);--_border:var(--v56d7d138);--_ok:var(--v605c6b94);--_danger:var(--v8dd3d0ca);--_info:var(--v9e078ab4);align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);background:var(--_bg);color:var(--_muted);border-top:1px solid var(--_border);font-family:var(--mw-font-sans);font-size:var(--font-size-sm);flex-wrap:wrap;display:flex}.mw-footer--transparent[data-v-6c5fa699]{border-top:1px solid var(--border)}.mw-footer__docs[data-v-6c5fa699]{align-items:center;gap:var(--space-sm);margin-inline-start:auto;display:flex}.mw-footer__docs a[data-v-6c5fa699]{color:inherit;text-underline-offset:2px;opacity:.7;text-decoration:underline}.mw-footer__docs a[data-v-6c5fa699]:hover{opacity:1}.mw-footer[data-v-6c5fa699]:not(.mw-footer--transparent){--ok:var(--_ok);--danger:var(--_danger);--info:var(--_info)}.mw-mode[data-v-e5cba7a7]{border:1px solid var(--_border,var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--_text,var(--text)) 6%, transparent);gap:2px;min-inline-size:0;margin:0;padding:2px;display:inline-flex}.mw-mode__btn[data-v-e5cba7a7]{align-items:center;gap:var(--space-3xs);padding:var(--space-3xs) var(--space-2xs);border-radius:calc(var(--radius) - 3px);color:var(--_text,var(--text));font:inherit;font-size:var(--font-size-sm);cursor:pointer;opacity:.7;transition:opacity var(--transition-base), background var(--transition-base);background:0 0;border:0;display:inline-flex}.mw-mode__btn[data-v-e5cba7a7]:hover{opacity:1}.mw-mode__btn.is-active[data-v-e5cba7a7]{opacity:1;background:color-mix(in srgb, var(--_text,var(--text)) 14%, transparent)}.mw-mode__btn[data-v-e5cba7a7]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}@media (width<=640px){.mw-mode__label[data-v-e5cba7a7]{display:none}}.mw-btn[data-v-bc33cc23]{justify-content:center;align-items:center;gap:var(--space-2xs);padding:var(--space-2xs) var(--space-xs);border-radius:var(--radius);font:inherit;cursor:pointer;transition:filter var(--transition-base), background var(--transition-base);border:1px solid #0000;font-weight:550;display:inline-flex}.mw-btn[data-v-bc33cc23]:disabled{opacity:.55;cursor:not-allowed}.mw-btn[data-v-bc33cc23]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.mw-btn--primary[data-v-bc33cc23]{background:var(--accent);color:var(--accent-contrast)}.mw-btn--primary[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-btn--secondary[data-v-bc33cc23]{background:var(--secondary);color:var(--secondary-contrast)}.mw-btn--secondary[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-btn--ghost[data-v-bc33cc23]{color:var(--text);border-color:var(--border);background:0 0}.mw-btn--ghost[data-v-bc33cc23]:not(:disabled):hover{background:var(--lift)}.mw-btn--danger[data-v-bc33cc23]{background:var(--danger);color:var(--accent-contrast)}.mw-btn--danger[data-v-bc33cc23]:not(:disabled):hover{filter:brightness(1.08)}.mw-card[data-v-384b36cf]{padding:var(--space-sm);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);overflow:hidden}.mw-card__header[data-v-384b36cf]{margin:calc(-1 * var(--space-sm)) calc(-1 * var(--space-sm)) var(--space-sm);padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border)}.mw-card__title[data-v-384b36cf]{font-size:var(--font-size-base);margin:0;font-weight:600}.mw-card__footer[data-v-384b36cf]{margin:var(--space-sm) calc(-1 * var(--space-sm)) calc(-1 * var(--space-sm));padding:var(--space-xs) var(--space-sm);border-top:1px solid var(--border);background:var(--lift)}.mw-select[data-v-38fbd9b5]{--_chevron-stroke:var(--muted);--_chevron-arm:6px;appearance:none;width:100%;padding:var(--space-2xs) calc(var(--space-md) + var(--space-2xs)) var(--space-2xs) var(--space-xs);background-color:var(--surface);background-image:linear-gradient(45deg, transparent calc(50% - .75px), var(--_chevron-stroke) calc(50% - .75px), var(--_chevron-stroke) calc(50% + .75px), transparent calc(50% + .75px)), linear-gradient(-45deg, transparent calc(50% - .75px), var(--_chevron-stroke) calc(50% - .75px), var(--_chevron-stroke) calc(50% + .75px), transparent calc(50% + .75px));background-position:right calc(var(--space-xs) + var(--_chevron-arm)) center, right var(--space-xs) center;background-size:var(--_chevron-arm) var(--_chevron-arm);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font:inherit;background-repeat:no-repeat}.mw-select[data-v-38fbd9b5]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-notice[data-v-ee7fffb1]{padding:var(--space-2xs) var(--space-xs);border:1px solid var(--border);border-radius:var(--radius);background:var(--lift);color:var(--text);font-size:var(--font-size-sm);border-left-width:3px;margin:0}.mw-notice--error[data-v-ee7fffb1]{border-left-color:var(--danger);color:var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent)}.mw-notice--ok[data-v-ee7fffb1]{border-left-color:var(--ok);color:var(--ok);background:color-mix(in srgb, var(--ok) 8%, transparent)}.sidebar-item[data-v-c8ae7e5f]{align-items:center;gap:var(--space-2xs);width:100%;padding:var(--space-2xs) var(--space-sm);color:inherit;font:inherit;text-align:left;cursor:pointer;opacity:.85;transition:background var(--transition-base), opacity var(--transition-base);background:0 0;border:0;border-radius:0;display:flex}.sidebar-item[data-v-c8ae7e5f]:hover:not(:disabled){background:color-mix(in srgb, currentColor 10%, transparent);opacity:1}.sidebar-item.is-active[data-v-c8ae7e5f]{background:color-mix(in srgb, var(--accent) 26%, transparent);opacity:1}.sidebar-item[data-v-c8ae7e5f]:disabled{cursor:default}.sidebar-item[data-v-c8ae7e5f]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.sidebar-item__icon[data-v-c8ae7e5f]{text-align:center;width:1.1rem}.sidebar-group[data-v-95acc444]{border:0;min-inline-size:0;margin:0;padding:0}.sidebar-group--l1+.sidebar-group--l1[data-v-95acc444]{margin-block-start:var(--space-2xs)}.sidebar-group__label[data-v-95acc444]{float:inline-start;width:100%;padding:var(--space-3xs) var(--space-xs);font-size:var(--font-size-xs);color:var(--muted);-webkit-user-select:none;user-select:none;font-weight:600}.sidebar-group__label[data-v-95acc444]+*{clear:both}.sidebar-group--l1>.sidebar-group__label[data-v-95acc444]{text-transform:uppercase;letter-spacing:var(--tracking-wide);opacity:.75}.sidebar-group--l2[data-v-95acc444]{padding-inline-start:var(--space-3xs)}.sidebar-group--l2>.sidebar-group__label[data-v-95acc444]{opacity:.6;padding-inline-start:var(--space-xs)}.mw-tab-nav[data-v-fbb7de4c]{gap:var(--space-3xs);border-bottom:2px solid var(--border);margin:0;padding:0;list-style:none;display:flex}.mw-tab-nav__item[data-v-fbb7de4c]{display:contents}.mw-tab-nav__tab[data-v-fbb7de4c]{appearance:none;padding:var(--space-2xs) var(--space-sm);cursor:pointer;font-size:var(--font-size-base);color:var(--muted);transition:color var(--transition-base), border-color var(--transition-base);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;margin-bottom:-2px}.mw-tab-nav__tab[data-v-fbb7de4c]:hover{color:var(--text)}.mw-tab-nav__tab--active[data-v-fbb7de4c]{border-bottom-color:var(--accent);color:var(--text);font-weight:600}.mw-tab-nav--raised[data-v-fbb7de4c]{border-bottom:1px solid var(--border);background:var(--surface);scrollbar-width:none;flex-shrink:0;align-items:flex-end;gap:2px;padding:4px 4px 0;overflow-x:auto}.mw-tab-nav--raised[data-v-fbb7de4c]::-webkit-scrollbar{display:none}.mw-tab-nav--raised .mw-tab-nav__tab[data-v-fbb7de4c]{border-bottom:1px solid var(--border);color:var(--muted);background:var(--lift);letter-spacing:.01em;white-space:nowrap;transition:color var(--transition-base), background var(--transition-base), border-color var(--transition-base);border-top:2px solid #0000;border-left:1px solid #0000;border-right:1px solid #0000;margin-bottom:-1px;padding:5px 14px 6px;font-size:.8rem;font-weight:500}.mw-tab-nav--raised .mw-tab-nav__tab[data-v-fbb7de4c]:hover:not(.mw-tab-nav__tab--active){color:var(--text);background:var(--surface)}.mw-tab-nav--raised .mw-tab-nav__tab--active[data-v-fbb7de4c]{color:var(--text);background:var(--bg);border-color:var(--accent) var(--border) var(--bg) var(--border);font-weight:600}.mw-tab-nav--raised.mw-tab-nav--lg[data-v-fbb7de4c]{gap:3px;padding:6px 6px 0}.mw-tab-nav--raised.mw-tab-nav--lg .mw-tab-nav__tab[data-v-fbb7de4c]{padding:9px 20px 10px;font-size:.95rem;font-weight:600}.mw-tab-panel[data-v-add194c8]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.mw-dialog[data-v-78973168]{--_width:var(--ce627f2e);width:var(--_width);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);max-height:90vh;color:var(--text);padding:0;box-shadow:0 1.25rem 3.75rem #00000073}.mw-dialog[data-v-78973168]::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#00000080}.mw-dialog__content[data-v-78973168]{gap:var(--space-sm);padding:var(--space-md);flex-direction:column;display:flex}.mw-dialog__header[data-v-78973168]{justify-content:space-between;align-items:center;gap:var(--space-sm);display:flex}.mw-dialog__title[data-v-78973168]{font-size:var(--font-size-base);margin:0;font-weight:600}.mw-dialog__close[data-v-78973168]{padding:0 var(--space-3xs);border-radius:var(--radius);color:var(--muted);font-size:var(--font-size-xl);cursor:pointer;background:0 0;border:0;line-height:1}.mw-dialog__close[data-v-78973168]:hover{color:var(--text)}.mw-dialog__actions[data-v-78973168]{justify-content:flex-end;gap:var(--space-xs);flex-wrap:wrap;display:flex}.ca-root[data-v-56006bd1]{align-items:center;gap:.35em;display:inline-flex}.ca-value[data-v-56006bd1]{font-family:var(--mw-font-mono,monospace);font-size:inherit}.ca-copy[data-v-56006bd1]{color:var(--muted,#6e635c);cursor:pointer;transition:color var(--transition-base);background:0 0;border:none;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}.ca-copy[data-v-56006bd1]:hover{color:var(--text,#f0f0f0)}.ca-copy--copied[data-v-56006bd1]{color:var(--accent,#6366f1)}.ca-icon[data-v-56006bd1]{display:block}.el-root[data-v-073d1bbe]{font-family:monospace;font-size:inherit;color:var(--accent,#6366f1);text-underline-offset:2px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;transition:color .15s}.el-root[data-v-073d1bbe]:hover{color:var(--text,#f0f0f0);text-decoration-style:solid}.copyright-line[data-v-464082bf]{white-space:nowrap;text-align:center;display:inline-block}.symbol-link[data-v-464082bf]{color:inherit;vertical-align:text-top;align-items:center;padding:0 .1rem;text-decoration:none;display:inline-flex}.symbol-link[data-v-464082bf]:hover{text-decoration:underline}.kopimi-symbol[data-v-464082bf]{align-items:center;line-height:1;display:inline-flex}.kopimi-mark[data-v-464082bf]{vertical-align:-.15em;display:inline}.text-content[data-v-464082bf]{display:inline}.ui-stepper[data-v-6f5db325]{margin:0 0 var(--space-md,1.5rem);padding:0;list-style:none;display:flex}.ui-stepper__step[data-v-6f5db325]{flex-direction:column;flex:1 1 0;align-items:center;gap:.4rem;min-width:0;display:flex;position:relative}.ui-stepper__step[data-v-6f5db325]:not(:first-child):before{content:"";background:var(--border);z-index:0;height:2px;position:absolute;top:1rem;left:-50%;right:50%}.ui-stepper__step.is-done[data-v-6f5db325]:before,.ui-stepper__step.is-active[data-v-6f5db325]:before{background:var(--accent)}.ui-stepper__badge[data-v-6f5db325]{z-index:1;border:2px solid var(--border);background:var(--surface);width:2rem;height:2rem;color:var(--muted);cursor:default;transition:background-color var(--transition-base,.2s), border-color var(--transition-base,.2s);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;font-size:.8rem;font-weight:600;line-height:1;display:flex;position:relative}button.ui-stepper__badge[data-v-6f5db325]{cursor:pointer}button.ui-stepper__badge[data-v-6f5db325]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.is-done .ui-stepper__badge[data-v-6f5db325]{background:var(--accent);border-color:var(--accent);color:#fff}.is-active .ui-stepper__badge[data-v-6f5db325]{background:color-mix(in srgb, var(--accent) 12%, var(--surface));border-color:var(--accent);color:var(--accent)}.ui-stepper__label[data-v-6f5db325]{text-align:center;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:.78rem;line-height:1.2;overflow:hidden}.is-done .ui-stepper__label[data-v-6f5db325],.is-active .ui-stepper__label[data-v-6f5db325]{color:var(--text)}.is-active .ui-stepper__label[data-v-6f5db325]{font-weight:600}.mw-seg[data-v-430ffdd6]{border:1px solid var(--border);border-radius:var(--radius);min-inline-size:0;margin:0;padding:0;display:inline-flex;overflow:hidden}.mw-seg__item[data-v-430ffdd6]{height:2rem;padding:0 var(--space-sm);border-right:1px solid var(--border);cursor:pointer;font-size:var(--font-size-sm);color:var(--muted);transition:background var(--transition-base), color var(--transition-base);-webkit-user-select:none;user-select:none;white-space:nowrap;background:0 0;justify-content:center;align-items:center;margin:0;display:flex}.mw-seg__item[data-v-430ffdd6]:last-child{border-right:none}.mw-seg__item--active[data-v-430ffdd6]{background:var(--accent);color:var(--accent-contrast)}.mw-seg__item[data-v-430ffdd6]:has(input:focus-visible){outline:2px solid var(--focus-ring);outline-offset:-2px}.mw-seg__item--disabled[data-v-430ffdd6]{opacity:.5;pointer-events:none;cursor:not-allowed}.mw-seg__item input[type=radio][data-v-430ffdd6]{opacity:0;pointer-events:none;width:0;height:0;position:absolute}.mw-field-hint[data-v-29d9a629]{margin-left:var(--space-3xs,.35rem);vertical-align:middle;display:inline-block;position:relative}.mw-field-hint__btn[data-v-29d9a629]{border:1px solid var(--muted);width:1.1em;height:1.1em;color:var(--muted);cursor:help;background:0 0;border-radius:50%;justify-content:center;align-items:center;padding:0;font-family:inherit;font-size:.75rem;font-weight:700;line-height:1;display:inline-flex}.mw-field-hint__btn[data-v-29d9a629]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-field-hint__tip[data-v-29d9a629]{z-index:10;min-width:200px;max-width:min(300px,90vw);padding:var(--space-2xs,.6rem) var(--space-xs,.75rem);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);font-size:var(--font-size-sm,.85rem);color:var(--text);visibility:hidden;opacity:0;transition:opacity var(--transition-base,.15s ease), visibility var(--transition-base,.15s ease);pointer-events:none;font-weight:400;line-height:1.5;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 4px 12px #0000001f}.mw-field-hint:hover .mw-field-hint__tip[data-v-29d9a629],.mw-field-hint:focus-within .mw-field-hint__tip[data-v-29d9a629]{visibility:visible;opacity:1;pointer-events:auto}.mw-form-field[data-v-5aef34d9]{margin:0}.mw-form-field__label[data-v-5aef34d9]{margin:.9rem 0 .3rem;font-weight:600;display:inline-block}.mw-form-field :is(input[data-v-5aef34d9-s],select[data-v-5aef34d9-s],textarea[data-v-5aef34d9-s]){display:block}.mw-form-field__hint[data-v-5aef34d9],.mw-form-field__error[data-v-5aef34d9]{font-size:var(--font-size-sm,.9rem);margin:.25rem 0 0;display:block}.mw-form-field__hint[data-v-5aef34d9]{color:var(--muted);font-weight:400}.mw-form-field__error[data-v-5aef34d9]{color:var(--danger)}.mw-tool-intro[data-v-9a5436b9]{color:var(--muted);margin:.25rem 0 1.25rem}.mw-panel[data-v-62fac524]{border:1px solid var(--border);background:var(--surface);border-radius:2px;padding:10px;overflow:hidden}.mw-panel__title[data-v-62fac524]{letter-spacing:.06em;font-size:.72rem;font-weight:600;line-height:inherit;text-transform:uppercase;color:var(--muted);background:var(--lift);border-bottom:1px solid var(--border);margin:-10px -10px 10px;padding:5px 10px}.mw-badge[data-v-5aa44ef5]{letter-spacing:.04em;text-transform:uppercase;border-radius:2px;padding:1px 6px;font-size:.7rem;font-weight:600;display:inline-block}.mw-badge--active[data-v-5aa44ef5]{background:color-mix(in srgb, var(--ok) 20%, transparent);color:var(--ok)}.mw-badge--closed[data-v-5aa44ef5]{background:color-mix(in srgb, var(--muted) 20%, transparent);color:var(--muted)}.mw-badge--pending[data-v-5aa44ef5]{background:color-mix(in srgb, var(--warning) 20%, transparent);color:var(--warning)}.mw-badge--neutral[data-v-5aa44ef5]{background:var(--lift);color:var(--muted)}.mw-toolbar-btn[data-v-d5f19134]{background:var(--lift);border:1px solid var(--border);height:26px;color:var(--text);cursor:pointer;white-space:nowrap;border-radius:2px;align-items:center;gap:5px;padding:3px 10px;font-size:.8rem;transition:background .1s,border-color .1s;display:inline-flex}.mw-toolbar-btn[data-v-d5f19134]:hover:not(:disabled){background:var(--surface);border-color:var(--accent)}.mw-toolbar-btn[data-v-d5f19134]:disabled{opacity:.5;cursor:not-allowed}.mw-toolbar-btn[data-v-d5f19134]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.mw-toolbar[data-v-170c8eb5]{border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0;align-items:center;gap:4px;margin:0;padding:4px 8px;list-style:none;display:flex}.mw-stat-grid[data-v-3608575d]{grid-template-columns:auto 1fr;gap:3px 12px;margin:0;font-size:.8rem;display:grid}.mw-stat-grid__label[data-v-829f7772]{color:var(--muted);white-space:nowrap}.mw-stat-grid__value[data-v-829f7772]{font-family:var(--mw-font-mono);color:var(--text);text-align:right;margin:0}.mw-stat-grid__value--left[data-v-829f7772]{text-align:left}.mw-data-table-wrap[data-v-de139c21]{overflow-x:auto}.mw-data-table[data-v-de139c21]{border-collapse:collapse;width:100%;font-size:.8rem}.mw-data-table[data-v-de139c21] th{text-align:left;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--border);white-space:nowrap;padding:5px 8px;font-size:.7rem;font-weight:600}.mw-data-table[data-v-de139c21] td{border-bottom:1px solid var(--border);vertical-align:middle;padding:5px 8px}.mw-data-table[data-v-de139c21] tbody tr:last-child td{border-bottom:none}.mw-data-table[data-v-de139c21] tbody tr:nth-child(2n) td{background:var(--lift)}.mw-data-table__empty[data-v-de139c21]{text-align:center;color:var(--muted);padding:24px 16px;font-size:.8rem}.mw-status-dot[data-v-62e9a7cc]{border-radius:50%;flex-shrink:0;width:7px;height:7px;margin-right:4px;display:inline-block}.mw-status-dot--ok[data-v-62e9a7cc]{background:var(--ok)}.mw-status-dot--warn[data-v-62e9a7cc]{background:var(--warning)}.mw-status-dot--error[data-v-62e9a7cc]{background:var(--danger)}.mw-statusbar[data-v-cb4a19b8]{color:var(--muted);background:var(--surface);border-top:1px solid var(--border);font-size:.72rem;font-family:var(--mw-font-mono);z-index:1;flex-shrink:0;align-items:center;gap:16px;margin:0;padding:3px 12px;list-style:none;display:flex;position:sticky;bottom:0}.mw-statusbar[data-v-cb4a19b8]>li{align-items:center;display:flex}.mw-statusbar[data-v-cb4a19b8]>li+li:before{content:"│" / "";color:var(--border);margin-inline-end:16px}.mw-statusbar__pending[data-v-cb4a19b8]{opacity:.7}.mw-feed[data-v-9e578c9d]{margin:0;padding:0;font-size:.78rem;list-style:none}.mw-feed__item[data-v-797b66a9]{border-bottom:1px solid var(--border);color:var(--text);white-space:nowrap;align-items:flex-start;gap:8px;padding:4px 0;font-weight:500;display:flex}.mw-feed__item[data-v-797b66a9]:before{content:"";background:var(--accent);border-radius:50%;flex-shrink:0;width:6px;height:6px;margin-top:4px}.mw-feed__item[data-v-797b66a9]:last-child{border-bottom:none}.mw-feed__meta[data-v-797b66a9]{color:var(--muted);font-family:var(--mw-font-mono);margin-left:auto;font-size:.72rem;font-weight:400}.status-widget[data-v-57682f53]{align-items:center;gap:var(--space-2xs);color:inherit;font-size:var(--font-size-sm);opacity:.85;transition:opacity var(--transition-base);text-decoration:none;display:inline-flex}.status-widget[data-v-57682f53]:hover{opacity:1}.status-widget[data-v-57682f53]:before{content:"";width:var(--space-2xs);height:var(--space-2xs);border-radius:50%;flex-shrink:0}.status-widget--ok[data-v-57682f53]:before{background:var(--ok)}.status-widget--degraded[data-v-57682f53]:before{background:var(--warning)}.status-widget--error[data-v-57682f53]:before{background:var(--danger)}
2
2
  /*$vite$:1*/
@@ -11,6 +11,8 @@ type __VLS_Props = {
11
11
  variant?: 'underline' | 'raised';
12
12
  /** 'lg' enlarges the tabs (padding + font) so they stand out from body text. */
13
13
  size?: 'md' | 'lg';
14
+ /** Every tab's UiTabPanel is in the DOM (inactive ones hidden), not only the selected one. */
15
+ allPanels?: boolean;
14
16
  };
15
17
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
18
  "update:modelValue": (id: string) => any;
@@ -19,6 +21,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
19
21
  }>, {
20
22
  variant: "underline" | "raised";
21
23
  size: "md" | "lg";
24
+ allPanels: boolean;
22
25
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
26
  declare const _default: typeof __VLS_export;
24
27
  export default _default;
@@ -8,12 +8,18 @@ export interface PanelColors {
8
8
  text?: string;
9
9
  muted?: string;
10
10
  border?: string;
11
+ ok?: string;
12
+ danger?: string;
13
+ info?: string;
11
14
  }
12
15
  /**
13
16
  * Resolve a panel variant to a set of local CSS variables (`--_bg`, `--_text`,
14
17
  * …) that the header/sidebar/footer styles consume. Variants use the
15
18
  * theme-INDEPENDENT `--mw-panel-*` tokens so a dark panel renders correctly on
16
19
  * a light page (and vice-versa). Transparent inherits the page text colour.
20
+ * Light/dark variants also carry status colours (`--_ok`, `--_danger`, `--_info`)
21
+ * legible on that panel; the components re-scope `--ok`/`--danger`/`--info` to
22
+ * them for their content. Transparent panels keep the page's status roles.
17
23
  * Any supplied `colors` override the defaults — token values are the default.
18
24
  */
19
25
  export declare function panelVars(variant: PanelVariant, colors?: PanelColors): CSSProperties;
package/dist/ui.js CHANGED
@@ -7,20 +7,29 @@ function k(e, t) {
7
7
  "--_surface": "transparent",
8
8
  "--_text": "var(--text)",
9
9
  "--_muted": "var(--muted)",
10
- "--_border": "transparent"
10
+ "--_border": "transparent",
11
+ "--_ok": "var(--ok)",
12
+ "--_danger": "var(--danger)",
13
+ "--_info": "var(--info)"
11
14
  } : e === "light" ? {
12
15
  "--_bg": "var(--mw-panel-light-bg)",
13
16
  "--_surface": "var(--mw-panel-light-surface)",
14
17
  "--_text": "var(--mw-panel-light-text)",
15
18
  "--_muted": "var(--mw-panel-light-muted)",
16
- "--_border": "var(--mw-panel-light-border)"
19
+ "--_border": "var(--mw-panel-light-border)",
20
+ "--_ok": "var(--mw-panel-light-ok, #177542)",
21
+ "--_danger": "var(--mw-panel-light-danger, #b3261e)",
22
+ "--_info": "var(--mw-panel-light-info, #1558b5)"
17
23
  } : {
18
24
  "--_bg": "var(--mw-panel-dark-bg)",
19
25
  "--_surface": "var(--mw-panel-dark-surface)",
20
26
  "--_text": "var(--mw-panel-dark-text)",
21
27
  "--_muted": "var(--mw-panel-dark-muted)",
22
- "--_border": "var(--mw-panel-dark-border)"
23
- }, t && (t.bg && (n["--_bg"] = t.bg), t.surface && (n["--_surface"] = t.surface), t.text && (n["--_text"] = t.text), t.muted && (n["--_muted"] = t.muted), t.border && (n["--_border"] = t.border)), n;
28
+ "--_border": "var(--mw-panel-dark-border)",
29
+ "--_ok": "var(--mw-panel-dark-ok, #5bb392)",
30
+ "--_danger": "var(--mw-panel-dark-danger, #f08a7e)",
31
+ "--_info": "var(--mw-panel-dark-info, #6ea8fe)"
32
+ }, t && (t.bg && (n["--_bg"] = t.bg), t.surface && (n["--_surface"] = t.surface), t.text && (n["--_text"] = t.text), t.muted && (n["--_muted"] = t.muted), t.border && (n["--_border"] = t.border), t.ok && (n["--_ok"] = t.ok), t.danger && (n["--_danger"] = t.danger), t.info && (n["--_info"] = t.info)), n;
24
33
  }
25
34
  //#endregion
26
35
  //#region src/components/AppHeader.vue?vue&type=script&setup=true&lang.ts
@@ -40,11 +49,14 @@ var A = /*@__PURE__*/ c({
40
49
  },
41
50
  setup(e) {
42
51
  x((e) => ({
43
- v7dfc9c9a: r.value["--_bg"],
44
- v3dfe910e: r.value["--_surface"],
45
- v100a5d02: r.value["--_text"],
46
- cbf62068: r.value["--_muted"],
47
- v21deec7e: r.value["--_border"]
52
+ v207c6e6c: r.value["--_bg"],
53
+ f304fa44: r.value["--_surface"],
54
+ v25353d32: r.value["--_text"],
55
+ v2a36159c: r.value["--_muted"],
56
+ v65041df1: r.value["--_border"],
57
+ v20707ebe: r.value["--_ok"],
58
+ v49861e28: r.value["--_danger"],
59
+ v12e68073: r.value["--_info"]
48
60
  }));
49
61
  let n = e, r = t(() => k(n.variant, n.colors)), a = h(!1), o = null;
50
62
  return f(() => {
@@ -66,7 +78,7 @@ var A = /*@__PURE__*/ c({
66
78
  let n = e.__vccOpts || e;
67
79
  for (let [e, r] of t) n[e] = r;
68
80
  return n;
69
- }, ee = /*#__PURE__*/ j(A, [["__scopeId", "data-v-3bfe2697"]]), te = {
81
+ }, ee = /*#__PURE__*/ j(A, [["__scopeId", "data-v-4c177b22"]]), te = {
70
82
  class: "mw-sidebar__nav",
71
83
  "aria-label": "Primary"
72
84
  }, ne = /*#__PURE__*/ j(/* @__PURE__ */ c({
@@ -78,12 +90,15 @@ var A = /*@__PURE__*/ c({
78
90
  },
79
91
  setup(e) {
80
92
  x((e) => ({
81
- v561aca24: r.value["--_bg"],
82
- v7e3149c4: r.value["--_surface"],
83
- v5953500c: r.value["--_text"],
84
- v79da5e02: r.value["--_muted"],
85
- v09e8e24b: r.value["--_border"],
86
- v0716c1ba: o.value
93
+ v71ead984: r.value["--_bg"],
94
+ fe385338: r.value["--_surface"],
95
+ v7d45f128: r.value["--_text"],
96
+ v130792a2: r.value["--_muted"],
97
+ d33b7caa: r.value["--_border"],
98
+ v71f0d15b: r.value["--_ok"],
99
+ v7ae441e2: r.value["--_danger"],
100
+ a1e36aa6: r.value["--_info"],
101
+ v4463291a: o.value
87
102
  }));
88
103
  let n = e, r = t(() => k(n.variant, n.colors)), o = t(() => n.width ?? "var(--mw-sidebar-width, 240px)");
89
104
  return (t, n) => (m(), i("aside", { class: u(["mw-sidebar", `mw-sidebar--${e.variant}`]) }, [
@@ -93,7 +108,7 @@ var A = /*@__PURE__*/ c({
93
108
  _(t.$slots, "foot", {}, void 0, !0)
94
109
  ], 2));
95
110
  }
96
- }), [["__scopeId", "data-v-7d26a9e6"]]);
111
+ }), [["__scopeId", "data-v-30f2000a"]]);
97
112
  //#endregion
98
113
  //#region src/safe-href.ts
99
114
  function M(e) {
@@ -118,11 +133,14 @@ var re = {
118
133
  },
119
134
  setup(e) {
120
135
  x((e) => ({
121
- bf930b0c: a.value["--_bg"],
122
- v34a45f2e: a.value["--_surface"],
123
- e9777a3c: a.value["--_text"],
124
- f3f07428: a.value["--_muted"],
125
- f92f10be: a.value["--_border"]
136
+ v605673bd: a.value["--_bg"],
137
+ v08ecb7cb: a.value["--_surface"],
138
+ v796a1136: a.value["--_text"],
139
+ v4ed7a1c9: a.value["--_muted"],
140
+ v56d7d138: a.value["--_border"],
141
+ v605c6b94: a.value["--_ok"],
142
+ v8dd3d0ca: a.value["--_danger"],
143
+ v9e078ab4: a.value["--_info"]
126
144
  }));
127
145
  let n = e, a = t(() => k(n.variant, n.colors));
128
146
  return (t, n) => (m(), i("footer", { class: u(["mw-footer", `mw-footer--${e.variant}`]) }, [
@@ -143,7 +161,7 @@ var re = {
143
161
  }, "Developer docs", 8, ae)) : r("", !0)])) : r("", !0)
144
162
  ], 2));
145
163
  }
146
- }), [["__scopeId", "data-v-6055f18c"]]), se = { class: "mw-mode" }, ce = [
164
+ }), [["__scopeId", "data-v-6c5fa699"]]), se = { class: "mw-mode" }, ce = [
147
165
  "aria-pressed",
148
166
  "title",
149
167
  "onClick"
@@ -298,7 +316,11 @@ var be = ["aria-label"], xe = [
298
316
  idPrefix: {},
299
317
  ariaLabel: {},
300
318
  variant: { default: "underline" },
301
- size: { default: "md" }
319
+ size: { default: "md" },
320
+ allPanels: {
321
+ type: Boolean,
322
+ default: !1
323
+ }
302
324
  },
303
325
  emits: ["update:modelValue"],
304
326
  setup(t, { emit: n }) {
@@ -332,13 +354,13 @@ var be = ["aria-label"], xe = [
332
354
  role: "tab",
333
355
  class: u(["mw-tab-nav__tab", { "mw-tab-nav__tab--active": t.modelValue === e.id }]),
334
356
  "aria-selected": t.modelValue === e.id,
335
- "aria-controls": b(B)(t.idPrefix, e.id).panel,
357
+ "aria-controls": t.allPanels || t.modelValue === e.id ? b(B)(t.idPrefix, e.id).panel : void 0,
336
358
  tabindex: t.modelValue === e.id ? 0 : -1,
337
359
  onClick: (t) => o("update:modelValue", e.id),
338
360
  onKeydown: (e) => l(e, n)
339
361
  }, y(e.label), 43, xe)]))), 128))], 10, be));
340
362
  }
341
- }), [["__scopeId", "data-v-a5f710b1"]]), Ce = ["id", "aria-labelledby"], we = /*#__PURE__*/ j(/* @__PURE__ */ c({
363
+ }), [["__scopeId", "data-v-fbb7de4c"]]), Ce = ["id", "aria-labelledby"], we = /*#__PURE__*/ j(/* @__PURE__ */ c({
342
364
  __name: "UiTabPanel",
343
365
  props: {
344
366
  idPrefix: {},
@@ -465,7 +487,12 @@ var be = ["aria-label"], xe = [
465
487
  return `${n.address.slice(0, e)}…${n.address.slice(-t)}`;
466
488
  });
467
489
  async function c() {
468
- await navigator.clipboard.writeText(n.address), r.value = !0, setTimeout(() => {
490
+ try {
491
+ await navigator.clipboard.writeText(n.address);
492
+ } catch {
493
+ return;
494
+ }
495
+ r.value = !0, setTimeout(() => {
469
496
  r.value = !1;
470
497
  }, 1500);
471
498
  }
@@ -487,7 +514,7 @@ var be = ["aria-label"], xe = [
487
514
  ry: "2"
488
515
  }, null, -1), a("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" }, null, -1)]]))], 10, Pe)]));
489
516
  }
490
- }), [["__scopeId", "data-v-b43dabdd"]]), Re = ["href", "title"], ze = /*#__PURE__*/ j(/* @__PURE__ */ c({
517
+ }), [["__scopeId", "data-v-56006bd1"]]), Re = ["href", "title"], ze = /*#__PURE__*/ j(/* @__PURE__ */ c({
491
518
  __name: "ExplorerLink",
492
519
  props: {
493
520
  href: {},
@@ -527,13 +554,17 @@ var be = ["aria-label"], xe = [
527
554
  symbolLabel: {}
528
555
  },
529
556
  setup(e) {
530
- let n = e, s = t(() => n.symbolVariant), c = t(() => n.symbolHref || (s.value === "kopimi" ? "/legal/powr.broccoli-kopimi.pdf" : s.value === "copyleft" ? "/legal/copyleft.html" : "/legal/copyright.html")), l = t(() => n.symbolLabel || (s.value === "kopimi" ? "Kopimi legal notice" : s.value === "copyleft" ? "Copyleft legal notice" : "Copyright legal notice")), u = t(() => n.rightsStatement === "" ? "" : n.rightsStatement === "none" ? "No rights reserved." : n.rightsStatement === "all" || !n.rightsStatement ? "All rights reserved." : n.rightsStatement === "jam" ? "All jams preserved." : n.rightsStatement);
557
+ let n = e, s = t(() => n.symbolVariant);
558
+ function c(e) {
559
+ return /^\/(?![/\\])/.test(e) ? e : M(e);
560
+ }
561
+ let l = t(() => (n.symbolHref ? c(n.symbolHref) : void 0) || (s.value === "kopimi" ? "/legal/powr.broccoli-kopimi.pdf" : s.value === "copyleft" ? "/legal/copyleft.html" : "/legal/copyright.html")), u = t(() => n.symbolLabel || (s.value === "kopimi" ? "Kopimi legal notice" : s.value === "copyleft" ? "Copyleft legal notice" : "Copyright legal notice")), d = t(() => n.rightsStatement === "" ? "" : n.rightsStatement === "none" ? "No rights reserved." : n.rightsStatement === "all" || !n.rightsStatement ? "All rights reserved." : n.rightsStatement === "jam" ? "All jams preserved." : n.rightsStatement);
531
562
  return (t, n) => (m(), i("small", Be, [a("a", {
532
- href: c.value,
563
+ href: l.value,
533
564
  class: "symbol-link",
534
565
  target: "_blank",
535
566
  rel: "noopener noreferrer",
536
- "aria-label": l.value
567
+ "aria-label": u.value
537
568
  }, [s.value === "copyright" ? (m(), i("span", He, "©")) : s.value === "copyleft" ? (m(), i("span", Ue, "🄯")) : s.value === "kopimi" ? (m(), i("span", We, [...n[0] ||= [a("svg", {
538
569
  viewBox: "0 0 24 24",
539
570
  width: "1em",
@@ -554,10 +585,10 @@ var be = ["aria-label"], xe = [
554
585
  "font-family": "system-ui, sans-serif",
555
586
  "font-size": "11",
556
587
  fill: "currentColor"
557
- }, " C ")], -1)]])) : r("", !0)], 8, Ve), a("span", Ge, [o(y(e.year) + " " + y(e.organisationName) + ".", 1), u.value ? (m(), i("span", Ke, y(`
558
- ${u.value}`), 1)) : r("", !0)])]));
588
+ }, " C ")], -1)]])) : r("", !0)], 8, Ve), a("span", Ge, [o(y(e.year) + " " + y(e.organisationName) + ".", 1), d.value ? (m(), i("span", Ke, y(`
589
+ ${d.value}`), 1)) : r("", !0)])]));
559
590
  }
560
- }), [["__scopeId", "data-v-44b327f4"]]), Je = {
591
+ }), [["__scopeId", "data-v-464082bf"]]), Je = {
561
592
  class: "ui-stepper",
562
593
  role: "list"
563
594
  }, Ye = ["aria-current"], Xe = ["aria-label", "onClick"], Ze = {
@@ -891,7 +922,7 @@ var q = ["href", "title"], qt = /*#__PURE__*/ j(/* @__PURE__ */ c({
891
922
  }, a = h("ok"), o = h("All systems operational"), s = null;
892
923
  async function c() {
893
924
  try {
894
- let e = await fetch(t.apiUrl);
925
+ let e = await fetch(t.apiUrl, { signal: AbortSignal.timeout(1e4) });
895
926
  if (!e.ok) throw Error(`HTTP ${e.status}`);
896
927
  let i = K(await e.json());
897
928
  if (!i) throw Error("unexpected response shape");
@@ -912,13 +943,13 @@ var q = ["href", "title"], qt = /*#__PURE__*/ j(/* @__PURE__ */ c({
912
943
  title: `Platform status: ${o.value}`
913
944
  }, y(o.value), 11, q));
914
945
  }
915
- }), [["__scopeId", "data-v-6562bc0e"]]), J = {
946
+ }), [["__scopeId", "data-v-57682f53"]]), J = {
916
947
  mainnet: "https://suivision.xyz",
917
948
  testnet: "https://testnet.suivision.xyz",
918
949
  devnet: "https://devnet.suivision.xyz"
919
950
  };
920
951
  function Jt(e, t, n = "testnet") {
921
- return `${J[n] ?? J.testnet}/${e}/${t}`;
952
+ return `${J[n] ?? J.testnet}/${e}/${encodeURIComponent(t)}`;
922
953
  }
923
954
  //#endregion
924
955
  //#region src/composables/useColorMode.ts
@@ -937,7 +968,8 @@ function Xt(e = "system") {
937
968
  Z = !0;
938
969
  let t = null;
939
970
  try {
940
- t = typeof localStorage < "u" ? localStorage.getItem(Y) : null;
971
+ let e = typeof localStorage < "u" ? localStorage.getItem(Y) : null;
972
+ (e === "light" || e === "dark" || e === "system") && (t = e);
941
973
  } catch {}
942
974
  X.value = t ?? e, $(X.value), typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
943
975
  X.value === "system" && $("system");
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@meddleware/ui",
3
- "version": "0.1.28",
3
+ "version": "0.1.30",
4
4
  "description": "Shared Vue 3 component library for @meddleware UIs — layout shell (header/sidebar/footer), colour-mode control, and primitives. Built on @meddleware/design-tokens.",
5
5
  "homepage": "https://docs.meddleware.co.uk/",
6
6
  "license": "0BSD",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/meddleware-org/ui.git"
10
+ },
7
11
  "type": "module",
8
12
  "sideEffects": [
9
13
  "*.css",
@@ -35,7 +39,7 @@
35
39
  "vue": "^3.5.0"
36
40
  },
37
41
  "dependencies": {
38
- "@meddleware/design-tokens": "^0.1.7"
42
+ "@meddleware/design-tokens": "^0.1.8"
39
43
  },
40
44
  "devDependencies": {
41
45
  "@vitejs/plugin-vue": "^6.0.9",
@@ -55,7 +59,7 @@
55
59
  "stylelint-config-standard": "^40.0.0",
56
60
  "typescript": "^6.0.0",
57
61
  "vite": "^8.3.0",
58
- "vitest": "~5.0.1",
62
+ "vitest": "~5.0.2",
59
63
  "vitest-axe": "^0.1.0",
60
64
  "vue": "^3.5.43",
61
65
  "vue-eslint-parser": "^10.4.1",