@hearthscale/app-ui 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  PackageGlyph,
11
11
  SearchGlyph,
12
12
  TrashGlyph
13
- } from "./chunks/chunk-SFZCPZQD.js";
13
+ } from "./chunks/chunk-UDXTR7UW.js";
14
14
 
15
15
  // ../ui/dist/Button.js
16
16
  import { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
@@ -206,7 +206,8 @@ function anchorFrom(key, e) {
206
206
  element: e.currentTarget
207
207
  };
208
208
  }
209
- function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = 180, maxWidth, maxHeight, fit = false, keyboard = false, onDismiss, children }) {
209
+ var spaces = (n) => `calc(var(--space) * ${n})`;
210
+ function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = spaces(45), maxWidth, maxHeight, fit = false, keyboard = false, onDismiss, children }) {
210
211
  const menu = useRef2(null);
211
212
  const [root] = useState(() => popupRoot(anchor.element));
212
213
  const grace = useSafeTriangle(anchor.element, menu, root, onDismiss, !keyboard);
@@ -276,10 +277,14 @@ function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = 180, max
276
277
  padding: 8,
277
278
  apply({ availableWidth, availableHeight, elements, rects }) {
278
279
  const surface = elements.floating.firstElementChild;
279
- const wanted = fit ? rects.reference.width : Math.max(minWidth, rects.reference.width);
280
- surface.style.minWidth = `${Math.max(0, Math.min(wanted, availableWidth))}px`;
281
- surface.style.maxWidth = `${Math.max(0, Math.min(fit ? wanted : Math.max(wanted, maxWidth ?? Infinity), availableWidth))}px`;
282
- surface.style.maxHeight = `${Math.max(0, Math.min(maxHeight ?? Infinity, availableHeight))}px`;
280
+ const room = `${Math.max(0, availableWidth)}px`;
281
+ const tall = `${Math.max(0, availableHeight)}px`;
282
+ const own = `${rects.reference.width}px`;
283
+ const wanted = fit ? own : `max(${minWidth}, ${own})`;
284
+ const most = fit ? wanted : maxWidth === void 0 ? null : `max(${wanted}, ${maxWidth})`;
285
+ surface.style.minWidth = `min(${wanted}, ${room})`;
286
+ surface.style.maxWidth = most ? `min(${most}, ${room})` : room;
287
+ surface.style.maxHeight = maxHeight === void 0 ? tall : `min(${maxHeight}, ${tall})`;
283
288
  if (fit)
284
289
  surface.style.borderRadius = getComputedStyle(anchor.element).borderRadius;
285
290
  }
@@ -299,9 +304,13 @@ function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = 180, max
299
304
  useEffect2(() => {
300
305
  const floating = menu.current;
301
306
  const wheel = (e) => {
302
- const surface = floating.firstElementChild;
303
- if (surface.scrollHeight <= surface.clientHeight)
304
- e.preventDefault();
307
+ for (let at = e.target; at; at = at.parentElement) {
308
+ if (at.scrollHeight > at.clientHeight && getComputedStyle(at).overflowY !== "hidden")
309
+ return;
310
+ if (at === floating)
311
+ break;
312
+ }
313
+ e.preventDefault();
305
314
  };
306
315
  floating.addEventListener("wheel", wheel, { passive: false });
307
316
  return () => floating.removeEventListener("wheel", wheel);
@@ -330,7 +339,10 @@ function MenuSurface({ anchor, align = "auto", dir = "down", minWidth = 180, max
330
339
  event.preventDefault();
331
340
  choices[next]?.focus();
332
341
  }
333
- }, style: pos, children: _jsx5("div", { className: "hs-menu hs-menu-surface", role: keyboard ? "menu" : void 0, style: { minWidth: `min(${minWidth}px, calc(100vw - var(--space) * 4))`, maxWidth }, children: _jsx5(PopupNest.Provider, { value: grace.nest, children: _jsx5(OpenSubmenu.Provider, { value: submenu, children }) }) }) }), root);
342
+ }, style: pos, children: _jsx5("div", { className: "hs-menu hs-menu-surface", role: keyboard ? "menu" : void 0, style: {
343
+ minWidth: `min(${minWidth}, calc(100vw - var(--space) * 4))`,
344
+ ...maxWidth !== void 0 && { maxWidth }
345
+ }, children: _jsx5(PopupNest.Provider, { value: grace.nest, children: _jsx5(OpenSubmenu.Provider, { value: submenu, children }) }) }) }), root);
334
346
  }
335
347
  var OpenSubmenu = createContext2(null);
336
348
  function MItem({ icon, label, sub, chip, checked, selected, danger, disabled, onClick, trailing }) {
@@ -341,7 +353,7 @@ function MItem({ icon, label, sub, chip, checked, selected, danger, disabled, on
341
353
  }
342
354
  }, children: [icon, _jsxs3("span", { className: "hs-menu-label", children: [_jsx5("span", { className: "hs-menu-title", children: label }), sub && _jsx5("span", { className: "hs-menu-sub", children: sub })] }), chip && _jsx5("span", { className: "hs-menu-chip", children: chip }), checked && _jsx5(CheckGlyph, { size: 13 }), trailing] });
343
355
  }
344
- function MSub({ icon, label, minWidth = 220, children }) {
356
+ function MSub({ icon, label, minWidth = spaces(55), children }) {
345
357
  const id = useId();
346
358
  const open = useContext(OpenSubmenu);
347
359
  const [anchor, setAnchor] = useState(null);
@@ -366,34 +378,10 @@ function MDivider() {
366
378
  function MSection({ children }) {
367
379
  return _jsx5("div", { className: "hs-menu-section", children });
368
380
  }
369
- function Tip({ style, title, sub, chip }) {
370
- const tip = useRef2(null);
371
- useEffect2(() => {
372
- const wrap = tip.current?.parentElement;
373
- if (!wrap)
374
- return;
375
- const close = () => {
376
- wrap.dataset.tipClosed = "true";
377
- };
378
- const open = () => {
379
- delete wrap.dataset.tipClosed;
380
- };
381
- const blur = () => {
382
- if (wrap.matches(":hover"))
383
- close();
384
- };
385
- wrap.addEventListener("pointerdown", close);
386
- wrap.addEventListener("mouseleave", open);
387
- window.addEventListener("blur", blur);
388
- return () => {
389
- wrap.removeEventListener("pointerdown", close);
390
- wrap.removeEventListener("mouseleave", open);
391
- window.removeEventListener("blur", blur);
392
- };
393
- }, []);
394
- return _jsxs3("span", { ref: tip, className: "hs-tip hs-tooltip", "data-sub": Boolean(sub), style, children: [_jsx5("span", { className: "hs-tooltip-title", children: title }), sub && _jsx5("span", { className: "hs-tooltip-sub", children: sub }), chip && _jsx5("span", { className: "hs-tooltip-chip", children: chip })] });
381
+ function Tip({ title, sub, chip }) {
382
+ return _jsxs3("span", { className: "hs-tip hs-tooltip", "data-sub": Boolean(sub), children: [_jsx5("span", { className: "hs-tooltip-title", children: title }), sub && _jsx5("span", { className: "hs-tooltip-sub", children: sub }), chip && _jsx5("span", { className: "hs-tooltip-chip", children: chip })] });
395
383
  }
396
- function FloatingTip({ anchor, text, chip, placement = "bottom-start", onPress }) {
384
+ function FloatingTip({ anchor, text, more, placement = "bottom-start", onPress }) {
397
385
  const floating = useRef2(null);
398
386
  const [pos, setPos] = useState({ visibility: "hidden" });
399
387
  useEffect2(() => {
@@ -417,20 +405,25 @@ function FloatingTip({ anchor, text, chip, placement = "bottom-start", onPress }
417
405
  cleanup();
418
406
  };
419
407
  }, [anchor, placement]);
420
- return createPortal(_jsx5("div", { ref: floating, className: "hs-menu-position hs-floating-tip", style: pos, children: _jsx5(Tip, { title: text, ...chip && { chip } }) }), popupRoot(anchor));
408
+ return createPortal(_jsx5("div", { ref: floating, className: "hs-menu-position hs-floating-tip", style: pos, children: _jsx5(Tip, { title: text, ...more }) }), popupRoot(anchor));
421
409
  }
422
410
  function useFloatingTips(placement) {
423
411
  const [shown, setShown] = useState(null);
424
412
  const [hide] = useState(() => () => setShown(null));
425
- return (key, text, chip) => ({
426
- // A press closes the tip until the pointer leaves, as the CSS tip does,
427
- // so no tip stays under a menu its element opens.
413
+ return (key, text, more) => ({
414
+ show: (anchor) => setShown({ key, anchor }),
415
+ hide,
428
416
  hover: {
429
417
  onMouseEnter: (e) => setShown({ key, anchor: e.currentTarget }),
418
+ onFocus: (e) => {
419
+ if (e.target.matches(":focus-visible"))
420
+ setShown({ key, anchor: e.currentTarget });
421
+ },
422
+ onBlur: () => setShown(null),
430
423
  onMouseLeave: () => setShown(null),
431
424
  onMouseDown: () => setShown(null)
432
425
  },
433
- tip: text && shown?.key === key && shown.anchor.isConnected ? _jsx5(FloatingTip, { anchor: shown.anchor, text, chip, ...placement && { placement }, onPress: hide }) : null
426
+ tip: text && shown?.key === key && shown.anchor.isConnected ? _jsx5(FloatingTip, { anchor: shown.anchor, text, more, ...placement && { placement }, onPress: hide }) : null
434
427
  });
435
428
  }
436
429
 
@@ -438,7 +431,7 @@ function useFloatingTips(placement) {
438
431
  function Chip({ children, tone = "neutral", icon, title, selected, onClick }) {
439
432
  const tips = useFloatingTips();
440
433
  const { hover, tip } = tips("chip", title);
441
- const content = _jsxs4(_Fragment2, { children: [icon && _jsx6("span", { className: "hs-chip-mark", children: icon }), _jsx6("span", { className: "hs-chip-text", ...selected !== void 0 && typeof children === "string" && { "data-text": children }, children }), tip] });
434
+ const content = _jsxs4(_Fragment2, { children: [icon && _jsx6("span", { className: "hs-chip-mark", children: icon }), _jsx6("span", { className: "hs-chip-text hs-cut", ...selected !== void 0 && typeof children === "string" && { "data-text": children }, children }), tip] });
442
435
  if (selected !== void 0) {
443
436
  return _jsx6("button", { type: "button", className: "hs-chip", "data-sel": selected ? "true" : "false", "aria-pressed": selected, onClick, ...hover, children: content });
444
437
  }
@@ -532,7 +525,7 @@ function SegmentedControl({ value, options, onChange, label, disabled = false })
532
525
 
533
526
  // ../ui/dist/settings.js
534
527
  import { jsx as _jsx13, jsxs as _jsxs7, Fragment as _Fragment4 } from "react/jsx-runtime";
535
- import { createContext as createContext3, useContext as useContext2, useLayoutEffect as useLayoutEffect2, useState as useState2 } from "react";
528
+ import { createContext as createContext3, useContext as useContext2, useLayoutEffect as useLayoutEffect2, useEffect as useEffect4, useState as useState2 } from "react";
536
529
  function SettingsCard({ children }) {
537
530
  return _jsx13("div", { className: "hs-settings-card", children });
538
531
  }
@@ -544,27 +537,30 @@ function HelpTip({ text, onOpen }) {
544
537
  const inner = _jsxs7(_Fragment4, { children: [_jsx13(HelpGlyph, { size: 13 }), tip] });
545
538
  return onOpen ? _jsx13("button", { type: "button", className: "hs-help-button", onClick: onOpen, ...hover, children: inner }) : _jsx13("span", { className: "hs-help-mark", ...hover, children: inner });
546
539
  }
547
- function SettingsSearch({ value, placeholder, onChange }) {
548
- return _jsxs7("label", { className: "hs-url hs-settings-search", children: [_jsx13(SearchGlyph, { size: 12 }), _jsx13("input", { className: "hs-in hs-urlin", "aria-label": placeholder, placeholder, spellCheck: false, value, onChange: (e) => onChange(e.target.value) }), _jsx13("span", { "aria-hidden": "true", className: "hs-urlph hs-ph-icon", children: placeholder })] });
540
+ function SettingsSearch({ value, placeholder, onChange, autoFocus }) {
541
+ return _jsxs7("label", { className: "hs-url hs-settings-search", children: [_jsx13(SearchGlyph, { size: 12 }), _jsx13("input", { className: "hs-in hs-urlin", "aria-label": placeholder, placeholder, spellCheck: false, value, ...autoFocus && { autoFocus: true }, onChange: (e) => onChange(e.target.value) }), _jsx13("span", { "aria-hidden": "true", className: "hs-urlph hs-ph-icon", children: placeholder })] });
549
542
  }
550
- function SettingsSelect({ value, options, onPick, minWidth = 180, menuHeight, menuWidth, placeholder, disabled, label }) {
543
+ function SettingsSelect({ value, options, onPick, minWidth = spaces(45), menuHeight, menuWidth, placeholder, disabled, label, note }) {
551
544
  const [anchor, setAnchor] = useState2(null);
552
545
  const current = options.find((o) => o.value === value);
553
546
  return _jsxs7("span", { className: "hs-select-wrap", children: [_jsxs7("button", { type: "button", className: "hs-glassbtn hs-hovink hs-inktext hs-select", "aria-label": label, "aria-haspopup": "menu", "aria-expanded": anchor !== null, disabled, "data-open": anchor ? "true" : "false", onClick: (e) => {
554
547
  const next = anchorFrom("select", e);
555
548
  setAnchor((current2) => current2 ? null : next);
556
- }, children: [current?.label ?? (value || placeholder), _jsx13(ChevronDownGlyph, { size: 11 })] }), anchor && _jsx13(MenuSurface, { keyboard: true, anchor, onDismiss: () => setAnchor(null), minWidth, ...menuHeight !== void 0 && { maxHeight: menuHeight }, ...menuWidth !== void 0 && { maxWidth: menuWidth }, children: options.map((option) => _jsx13(MItem, { label: option.label, ...option.sub && { sub: option.sub }, ...option.trailing && { trailing: option.trailing }, ...option.disabled && { disabled: true }, checked: option.value === value, onClick: () => {
549
+ }, children: [_jsx13("span", { className: "hs-select-label", children: current?.label ?? (value || placeholder) }), note && _jsx13("span", { className: "hs-select-note", children: note }), _jsx13(ChevronDownGlyph, { size: 11 })] }), anchor && _jsx13(MenuSurface, { keyboard: true, anchor, onDismiss: () => setAnchor(null), minWidth, ...menuHeight !== void 0 && { maxHeight: menuHeight }, ...menuWidth !== void 0 && { maxWidth: menuWidth }, children: options.map((option) => _jsx13(MItem, { label: option.label, ...option.sub && { sub: option.sub }, ...option.trailing && { trailing: option.trailing }, ...option.disabled && { disabled: true }, checked: option.value === value, onClick: () => {
557
550
  anchor.element.focus();
558
551
  setAnchor(null);
559
552
  onPick(option.value);
560
553
  } }, option.value)) })] });
561
554
  }
562
- function ToggleRow({ id, title, sub, help, on, onFlip }) {
555
+ function ToggleRow({ id, mark, title, sub, help, actions, on, onFlip }) {
563
556
  const docs = useContext2(SettingsDocs);
564
557
  const open = id ? docs(id) : void 0;
565
- return _jsxs7("div", { className: "hs-setrow hs-toggle-row", "data-row": id, children: [_jsxs7("span", { className: "hs-setting-label", children: [_jsxs7("span", { className: "hs-setting-label-line", children: [_jsx13("span", { className: "hs-setting-title", children: title }), help && _jsx13(HelpTip, { text: help, ...open && { onOpen: open } })] }), sub && _jsx13("span", { className: "hs-setting-sub", children: sub })] }), _jsx13(Toggle, { checked: on, "aria-label": title, disabled: !onFlip, ...onFlip && { onChange: onFlip } })] });
558
+ return _jsxs7("div", { className: "hs-setrow hs-toggle-row", "data-row": id, children: [mark && _jsx13("span", { className: "hs-row-mark", children: mark }), _jsxs7("span", { className: "hs-setting-label", children: [_jsxs7("span", { className: "hs-setting-label-line", children: [_jsx13("span", { className: "hs-setting-title", children: title }), help && _jsx13(HelpTip, { text: help, ...open && { onOpen: open } })] }), sub && _jsx13("span", { className: "hs-setting-sub", children: sub })] }), actions && _jsx13(SettingControls, { children: actions }), _jsx13(Toggle, { checked: on, "aria-label": title, disabled: !onFlip, ...onFlip && { onChange: onFlip } })] });
566
559
  }
567
560
  var SettingsDocs = createContext3(() => void 0);
561
+ function SettingControls({ children }) {
562
+ return _jsx13("span", { className: "hs-setting-controls", children });
563
+ }
568
564
  function InfoRow({ id, title, sub, help, helpOpen, value }) {
569
565
  const docs = useContext2(SettingsDocs);
570
566
  const open = helpOpen ?? (id ? docs(id) : void 0);
@@ -594,53 +590,63 @@ function SettingsTabs({ label, value, tabs, onPick, panelRef }) {
594
590
  }, children: tab.label }, tab.value)) });
595
591
  }
596
592
 
597
- // ../ui/dist/ShellConfirm.js
593
+ // ../ui/dist/Modal.js
598
594
  import { jsx as _jsx14, jsxs as _jsxs8 } from "react/jsx-runtime";
599
- import { useEffect as useEffect5 } from "react";
595
+ import { useEffect as useEffect6, useRef as useRef6 } from "react";
600
596
 
601
- // ../ui/dist/asking.js
602
- import { useEffect as useEffect4, useSyncExternalStore } from "react";
603
- var asking = 0;
604
- var hearers = /* @__PURE__ */ new Set();
605
- function tell() {
606
- for (const hear of hearers)
607
- hear();
608
- }
609
- function useAsksPerson(on) {
610
- useEffect4(() => {
611
- if (!on)
612
- return;
613
- asking += 1;
614
- tell();
615
- return () => {
616
- asking -= 1;
617
- tell();
618
- };
619
- }, [on]);
620
- }
621
-
622
- // ../ui/dist/ShellConfirm.js
623
- function ShellConfirm({ title, body, action, tone = "danger", icon = tone === "danger" ? _jsx14(TrashGlyph, { size: 13 }) : void 0, onConfirm, onCancel }) {
624
- useAsksPerson(true);
597
+ // ../ui/dist/escape.js
598
+ import { useEffect as useEffect5, useRef as useRef5 } from "react";
599
+ function useEscape(onEscape) {
600
+ const live = useRef5(onEscape);
601
+ live.current = onEscape;
625
602
  useEffect5(() => {
626
603
  const onKey = (e) => {
627
- if (e.key !== "Escape")
628
- return;
629
- e.preventDefault();
630
- onCancel();
604
+ if (e.key === "Escape" && !e.defaultPrevented)
605
+ live.current();
631
606
  };
632
- window.addEventListener("keydown", onKey, true);
633
- return () => window.removeEventListener("keydown", onKey, true);
634
- }, [onCancel]);
635
- return _jsx14("div", { className: "hs-confirm", onClick: (e) => {
636
- e.stopPropagation();
637
- onCancel();
638
- }, children: _jsxs8("div", { className: "hs-confirm-box", role: "dialog", onClick: (e) => e.stopPropagation(), children: [_jsx14("span", { className: "hs-confirm-title", children: title }), _jsx14("span", { className: "hs-confirm-body", children: body }), _jsxs8("div", { className: "hs-confirm-footer", children: [_jsx14(Button, { className: "hs-confirm-cancel", onClick: onCancel, children: "Cancel" }), _jsx14(Button, { className: "hs-confirm-action", variant: tone, icon, onClick: onConfirm, children: action })] })] }) });
607
+ window.addEventListener("keydown", onKey);
608
+ return () => window.removeEventListener("keydown", onKey);
609
+ }, []);
639
610
  }
640
611
 
612
+ // ../ui/dist/Modal.js
613
+ function Modal({ title, children, onClose, width = 460, scrim = true }) {
614
+ const panel = useRef6(null);
615
+ useEffect6(() => {
616
+ const previous = document.activeElement;
617
+ panel.current?.focus();
618
+ return () => previous?.focus();
619
+ }, []);
620
+ useEscape(onClose);
621
+ return _jsx14("div", { onClick: onClose, className: scrim ? "hs-modal-backdrop hs-scrim" : "hs-modal-backdrop", children: _jsxs8("div", { ref: panel, tabIndex: -1, role: "dialog", "aria-modal": "true", "aria-label": title, onKeyDown: (event) => {
622
+ if (event.key === "Escape") {
623
+ event.stopPropagation();
624
+ onClose();
625
+ }
626
+ if (event.key !== "Tab")
627
+ return;
628
+ const controls = [
629
+ ...event.currentTarget.querySelectorAll('button:not(:disabled), input:not(:disabled), textarea:not(:disabled), a[href], [tabindex="0"]')
630
+ ];
631
+ const first = controls[0];
632
+ const last = controls.at(-1);
633
+ if (event.shiftKey && (document.activeElement === first || document.activeElement === panel.current)) {
634
+ event.preventDefault();
635
+ last?.focus();
636
+ } else if (!event.shiftKey && document.activeElement === last) {
637
+ event.preventDefault();
638
+ first?.focus();
639
+ }
640
+ }, onClick: (event) => event.stopPropagation(), className: "hs-modal", style: { width }, children: [_jsxs8("div", { className: "hs-modal-head", children: [_jsx14("p", { className: "hs-modal-title", children: title }), _jsx14(IconButton, { "aria-label": `Close ${title.toLowerCase()}`, onClick: onClose, className: "hs-push-end", children: _jsx14(CloseGlyph, { size: 14 }) })] }), children] }) });
641
+ }
642
+
643
+ // ../ui/dist/MultiSelect.js
644
+ import { jsx as _jsx16, jsxs as _jsxs10 } from "react/jsx-runtime";
645
+ import { useState as useState3 } from "react";
646
+
641
647
  // ../ui/dist/OverlayScroll.js
642
648
  import { jsx as _jsx15, jsxs as _jsxs9 } from "react/jsx-runtime";
643
- import { useLayoutEffect as useLayoutEffect3, useRef as useRef5 } from "react";
649
+ import { useLayoutEffect as useLayoutEffect3, useRef as useRef7 } from "react";
644
650
  function overlayThumb(scroller, thumb) {
645
651
  let inset = 0;
646
652
  let least = 0;
@@ -712,57 +718,125 @@ function overlayThumb(scroller, thumb) {
712
718
  };
713
719
  }
714
720
  function OverlayScroll({ className, children }) {
715
- const scroller = useRef5(null);
716
- const thumb = useRef5(null);
721
+ const scroller = useRef7(null);
722
+ const thumb = useRef7(null);
717
723
  useLayoutEffect3(() => overlayThumb(scroller.current, thumb.current), []);
718
724
  return _jsxs9("div", { className: "hs-overlay-scroll", children: [_jsx15("div", { ref: scroller, className, children }), _jsx15("div", { ref: thumb, className: "hs-overlay-thumb", "aria-hidden": "true" })] });
719
725
  }
720
726
 
727
+ // ../ui/dist/MultiSelect.js
728
+ var NAMED_MOST = 2;
729
+ var MENU_WIDTH = spaces(62.5);
730
+ function MultiSelect({ label, options, labelOf, picked, onPick, searchWords, countWord, onOpen, align, all }) {
731
+ const [anchor, setAnchor] = useState3(null);
732
+ const [search, setSearch] = useState3("");
733
+ const needle = search.trim().toLowerCase();
734
+ const shown = [...picked, ...options.filter((value) => !picked.includes(value))].filter((value) => !needle || value.includes(needle) || labelOf(value).toLowerCase().includes(needle));
735
+ const toggle = (value) => {
736
+ if (!picked.includes(value))
737
+ onPick([...picked, value]);
738
+ else if (all !== void 0 || picked.length > 1)
739
+ onPick(picked.filter((one) => one !== value));
740
+ };
741
+ const words = picked.length === 0 ? all : picked.length > NAMED_MOST ? `${picked.length} ${countWord}` : picked.map(labelOf).join(", ");
742
+ return _jsxs10("span", { className: "hs-select-wrap", children: [_jsxs10("button", { type: "button", className: "hs-glassbtn hs-hovink hs-inktext hs-select", "aria-label": label, "aria-haspopup": "menu", "aria-expanded": anchor !== null, "data-open": anchor ? "true" : "false", onClick: (e) => {
743
+ const next = anchorFrom(label, e);
744
+ if (!anchor)
745
+ onOpen?.();
746
+ setAnchor(anchor ? null : next);
747
+ setSearch("");
748
+ }, children: [_jsx16("span", { className: "hs-select-label", children: words }), _jsx16(ChevronDownGlyph, { size: 11 })] }), anchor && _jsx16(MenuSurface, { keyboard: true, anchor, ...align && { align }, minWidth: MENU_WIDTH, maxWidth: MENU_WIDTH, onDismiss: () => setAnchor(null), children: _jsxs10("div", { className: "hs-multi-select-menu", children: [_jsx16("div", { className: "hs-menu-search", children: _jsx16(SettingsSearch, { value: search, placeholder: searchWords, onChange: setSearch }) }), _jsxs10(OverlayScroll, { className: "hs-scroll hs-multi-select-list", children: [all !== void 0 && !needle && _jsx16(MItem, { label: all, checked: picked.length === 0, onClick: () => onPick([]) }), shown.map((value) => _jsx16(MItem, { label: labelOf(value), checked: picked.includes(value), onClick: () => toggle(value) }, value))] })] }) })] });
749
+ }
750
+
751
+ // ../ui/dist/ShellConfirm.js
752
+ import { jsx as _jsx17, jsxs as _jsxs11 } from "react/jsx-runtime";
753
+ import { useEffect as useEffect8 } from "react";
754
+
755
+ // ../ui/dist/asking.js
756
+ import { useEffect as useEffect7, useSyncExternalStore } from "react";
757
+ var asking = 0;
758
+ var hearers = /* @__PURE__ */ new Set();
759
+ function tell() {
760
+ for (const hear of hearers)
761
+ hear();
762
+ }
763
+ function useAsksPerson(on) {
764
+ useEffect7(() => {
765
+ if (!on)
766
+ return;
767
+ asking += 1;
768
+ tell();
769
+ return () => {
770
+ asking -= 1;
771
+ tell();
772
+ };
773
+ }, [on]);
774
+ }
775
+
776
+ // ../ui/dist/ShellConfirm.js
777
+ function ShellConfirm({ title, body, action, tone = "danger", icon = tone === "danger" ? _jsx17(TrashGlyph, { size: 13 }) : void 0, onConfirm, onCancel }) {
778
+ useAsksPerson(true);
779
+ useEffect8(() => {
780
+ const onKey = (e) => {
781
+ if (e.key !== "Escape")
782
+ return;
783
+ e.preventDefault();
784
+ onCancel();
785
+ };
786
+ window.addEventListener("keydown", onKey, true);
787
+ return () => window.removeEventListener("keydown", onKey, true);
788
+ }, [onCancel]);
789
+ return _jsx17("div", { className: "hs-confirm", onClick: (e) => {
790
+ e.stopPropagation();
791
+ onCancel();
792
+ }, children: _jsxs11("div", { className: "hs-confirm-box", role: "dialog", onClick: (e) => e.stopPropagation(), children: [_jsx17("span", { className: "hs-confirm-title", children: title }), _jsx17("span", { className: "hs-confirm-body", children: body }), _jsxs11("div", { className: "hs-confirm-footer", children: [_jsx17(Button, { className: "hs-confirm-cancel", onClick: onCancel, children: "Cancel" }), _jsx17(Button, { className: "hs-confirm-action", variant: tone, icon, onClick: onConfirm, children: action })] })] }) });
793
+ }
794
+
721
795
  // ../ui/dist/Kbd.js
722
- import { jsx as _jsx16 } from "react/jsx-runtime";
796
+ import { jsx as _jsx18 } from "react/jsx-runtime";
723
797
  function Kbd({ children }) {
724
- return _jsx16("kbd", { className: "hs-kbd", children });
798
+ return _jsx18("kbd", { className: "hs-kbd", children });
725
799
  }
726
800
 
727
801
  // ../ui/dist/Meter.js
728
- import { jsx as _jsx17, jsxs as _jsxs10 } from "react/jsx-runtime";
802
+ import { jsx as _jsx19, jsxs as _jsxs12 } from "react/jsx-runtime";
729
803
  var RADIUS = 7.5;
730
804
  var CIRCUMFERENCE = 2 * Math.PI * RADIUS;
731
805
  function Meter({ value, label, variant = "bar", tone }) {
732
806
  const share = Math.max(0, Math.min(1, value));
733
- return _jsx17("span", { className: "hs-meter", "data-variant": variant, "data-tone": tone, role: "progressbar", "aria-label": label, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(share * 100), children: variant === "ring" ? _jsx17("svg", { width: 20, height: 20, viewBox: "0 0 20 20", "aria-hidden": "true", children: _jsxs10("g", { transform: "rotate(-90 10 10)", children: [_jsx17("circle", { className: "hs-meter-track", cx: 10, cy: 10, r: RADIUS }), _jsx17("circle", { className: "hs-meter-fill", cx: 10, cy: 10, r: RADIUS, strokeDasharray: CIRCUMFERENCE, strokeDashoffset: CIRCUMFERENCE * (1 - share) })] }) }) : _jsx17("span", { className: "hs-meter-fill", style: { width: `${share * 100}%` } }) });
807
+ return _jsx19("span", { className: "hs-meter", "data-variant": variant, "data-tone": tone, role: "progressbar", "aria-label": label, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(share * 100), children: variant === "ring" ? _jsx19("svg", { width: 20, height: 20, viewBox: "0 0 20 20", "aria-hidden": "true", children: _jsxs12("g", { transform: "rotate(-90 10 10)", children: [_jsx19("circle", { className: "hs-meter-track", cx: 10, cy: 10, r: RADIUS }), _jsx19("circle", { className: "hs-meter-fill", cx: 10, cy: 10, r: RADIUS, strokeDasharray: CIRCUMFERENCE, strokeDashoffset: CIRCUMFERENCE * (1 - share) })] }) }) : _jsx19("span", { className: "hs-meter-fill", style: { width: `${share * 100}%` } }) });
734
808
  }
735
809
 
736
810
  // ../ui/dist/Lightbox.js
737
- import { jsx as _jsx18, jsxs as _jsxs11, Fragment as _Fragment5 } from "react/jsx-runtime";
738
- import { useEffect as useEffect6, useLayoutEffect as useLayoutEffect4, useRef as useRef6, useState as useState3 } from "react";
811
+ import { jsx as _jsx20, jsxs as _jsxs13, Fragment as _Fragment5 } from "react/jsx-runtime";
812
+ import { useEffect as useEffect9, useLayoutEffect as useLayoutEffect4, useRef as useRef8, useState as useState4 } from "react";
739
813
  import { createPortal as createPortal2 } from "react-dom";
740
814
  var MAX_ZOOM = 8;
741
815
  var CLICK_ZOOM = 2;
742
816
  var DRAG_SLOP = 4;
743
817
  var FIT = { scale: 1, x: 0, y: 0 };
744
818
  function Lightbox({ items, start, onClose }) {
745
- const [index, setIndex] = useState3(start);
746
- const [view, setView] = useState3(FIT);
747
- const [broken, setBroken] = useState3(false);
748
- const [host, setHost] = useState3(null);
749
- const anchor = useRef6(null);
750
- const stage = useRef6(null);
751
- const closer = useRef6(null);
752
- const drag = useRef6(null);
819
+ const [index, setIndex] = useState4(start);
820
+ const [view, setView] = useState4(FIT);
821
+ const [broken, setBroken] = useState4(false);
822
+ const [host, setHost] = useState4(null);
823
+ const anchor = useRef8(null);
824
+ const stage = useRef8(null);
825
+ const closer = useRef8(null);
826
+ const drag = useRef8(null);
753
827
  const item = items[index];
754
828
  const many = items.length > 1;
755
829
  useLayoutEffect4(() => {
756
830
  setHost(anchor.current?.closest(".hs-shell") ?? document.body);
757
831
  }, []);
758
- useEffect6(() => {
832
+ useEffect9(() => {
759
833
  if (!host)
760
834
  return;
761
835
  const opener = document.activeElement;
762
836
  closer.current?.focus();
763
837
  return () => opener?.focus();
764
838
  }, [host]);
765
- useEffect6(() => {
839
+ useEffect9(() => {
766
840
  setView(FIT);
767
841
  setBroken(false);
768
842
  }, [index]);
@@ -778,7 +852,7 @@ function Lightbox({ items, start, onClose }) {
778
852
  return { px: clientX - box.left - box.width / 2, py: clientY - box.top - box.height / 2 };
779
853
  };
780
854
  const step = (delta) => setIndex((i) => (i + delta + items.length) % items.length);
781
- useEffect6(() => {
855
+ useEffect9(() => {
782
856
  const onKey = (event) => {
783
857
  if (event.key === "Escape")
784
858
  onClose();
@@ -800,7 +874,7 @@ function Lightbox({ items, start, onClose }) {
800
874
  window.addEventListener("keydown", onKey, true);
801
875
  return () => window.removeEventListener("keydown", onKey, true);
802
876
  });
803
- useEffect6(() => {
877
+ useEffect9(() => {
804
878
  const box = stage.current;
805
879
  if (!box)
806
880
  return;
@@ -843,34 +917,34 @@ function Lightbox({ items, start, onClose }) {
843
917
  };
844
918
  if (!item)
845
919
  return null;
846
- const dialog = _jsxs11("div", { className: "hs-lightbox", role: "dialog", "aria-modal": "true", "aria-label": item.name, onClick: onClose, children: [_jsxs11("div", { className: "hs-lightbox-bar", onClick: (e) => e.stopPropagation(), children: [item.onSave && _jsx18("button", { type: "button", className: "hs-lightbox-button", "aria-label": "Save", onClick: item.onSave, children: _jsx18(DownloadGlyph, { size: 16 }) }), item.onOpen && _jsx18("button", { type: "button", className: "hs-lightbox-button", "aria-label": "Open", onClick: (e) => item.onOpen?.(e.currentTarget), children: _jsx18(ExternalGlyph, { size: 16 }) }), _jsx18("button", { ref: closer, type: "button", className: "hs-lightbox-button", "aria-label": "Close", onClick: onClose, children: _jsx18(CloseGlyph, { size: 16 }) })] }), many && _jsx18("button", { type: "button", className: "hs-lightbox-step", "data-side": "previous", "aria-label": "Previous picture", onClick: (e) => {
920
+ const dialog = _jsxs13("div", { className: "hs-lightbox", role: "dialog", "aria-modal": "true", "aria-label": item.name, onClick: onClose, children: [_jsxs13("div", { className: "hs-lightbox-bar", onClick: (e) => e.stopPropagation(), children: [item.onSave && _jsx20("button", { type: "button", className: "hs-lightbox-button", "aria-label": "Save", onClick: item.onSave, children: _jsx20(DownloadGlyph, { size: 16 }) }), item.onOpen && _jsx20("button", { type: "button", className: "hs-lightbox-button", "aria-label": "Open", onClick: (e) => item.onOpen?.(e.currentTarget), children: _jsx20(ExternalGlyph, { size: 16 }) }), _jsx20("button", { ref: closer, type: "button", className: "hs-lightbox-button", "aria-label": "Close", onClick: onClose, children: _jsx20(CloseGlyph, { size: 16 }) })] }), many && _jsx20("button", { type: "button", className: "hs-lightbox-step", "data-side": "previous", "aria-label": "Previous picture", onClick: (e) => {
847
921
  e.stopPropagation();
848
922
  step(-1);
849
- }, children: _jsx18(ChevronLeftGlyph, { size: 20 }) }), _jsxs11("div", { className: "hs-lightbox-body", onClick: (e) => e.stopPropagation(), children: [_jsx18("div", { ref: stage, className: "hs-lightbox-stage", "data-zoomed": view.scale > 1 ? "true" : "false", onPointerDown, onPointerMove, onPointerUp, children: broken ? _jsx18("span", { className: "hs-lightbox-broken", children: "This picture could not be loaded." }) : _jsx18("img", { src: item.src, alt: item.name, draggable: false, onError: () => setBroken(true), style: { transform: `translate(${view.x}px, ${view.y}px) scale(${view.scale})` } }) }), _jsxs11("span", { className: "hs-lightbox-caption", "aria-live": "polite", children: [item.name, many && ` (${index + 1} of ${items.length})`] }), item.note && _jsx18("div", { className: "hs-lightbox-note", children: item.note })] }), many && _jsx18("button", { type: "button", className: "hs-lightbox-step", "data-side": "next", "aria-label": "Next picture", onClick: (e) => {
923
+ }, children: _jsx20(ChevronLeftGlyph, { size: 20 }) }), _jsxs13("div", { className: "hs-lightbox-body", onClick: (e) => e.stopPropagation(), children: [_jsx20("div", { ref: stage, className: "hs-lightbox-stage", "data-zoomed": view.scale > 1 ? "true" : "false", onPointerDown, onPointerMove, onPointerUp, children: broken ? _jsx20("span", { className: "hs-lightbox-broken", children: "This picture could not be loaded." }) : _jsx20("img", { src: item.src, alt: item.name, draggable: false, onError: () => setBroken(true), style: { transform: `translate(${view.x}px, ${view.y}px) scale(${view.scale})` } }) }), _jsxs13("span", { className: "hs-lightbox-caption", "aria-live": "polite", children: [item.name, many && ` (${index + 1} of ${items.length})`] }), item.note && _jsx20("div", { className: "hs-lightbox-note", children: item.note })] }), many && _jsx20("button", { type: "button", className: "hs-lightbox-step", "data-side": "next", "aria-label": "Next picture", onClick: (e) => {
850
924
  e.stopPropagation();
851
925
  step(1);
852
- }, children: _jsx18(ChevronRightGlyph, { size: 20 }) })] });
853
- return _jsxs11(_Fragment5, { children: [_jsx18("span", { ref: anchor, hidden: true }), host && createPortal2(dialog, host)] });
926
+ }, children: _jsx20(ChevronRightGlyph, { size: 20 }) })] });
927
+ return _jsxs13(_Fragment5, { children: [_jsx20("span", { ref: anchor, hidden: true }), host && createPortal2(dialog, host)] });
854
928
  }
855
929
 
856
930
  // ../ui/dist/Slider.js
857
- import { jsx as _jsx19, jsxs as _jsxs12 } from "react/jsx-runtime";
931
+ import { jsx as _jsx21, jsxs as _jsxs14 } from "react/jsx-runtime";
858
932
  function Slider({ value, onChange, min = 0, max = 1, step = 0.01, label, shown, disabled }) {
859
- return _jsxs12("span", { className: "hs-slider", children: [_jsx19("input", { type: "range", className: "hs-range", "aria-label": label, "aria-valuetext": shown, min, max, step, value, disabled, onChange: (event) => onChange(Number(event.target.value)) }), shown !== void 0 && _jsx19("span", { className: "hs-slider-value", children: shown })] });
933
+ return _jsxs14("span", { className: "hs-slider", children: [_jsx21("input", { type: "range", className: "hs-range", "aria-label": label, "aria-valuetext": shown, min, max, step, value, disabled, onChange: (event) => onChange(Number(event.target.value)) }), shown !== void 0 && _jsx21("span", { className: "hs-slider-value", children: shown })] });
860
934
  }
861
935
 
862
936
  // ../ui/dist/Popover.js
863
- import { jsx as _jsx20 } from "react/jsx-runtime";
864
- import { useEffect as useEffect7, useLayoutEffect as useLayoutEffect5, useRef as useRef7, useState as useState4 } from "react";
937
+ import { jsx as _jsx22 } from "react/jsx-runtime";
938
+ import { useEffect as useEffect10, useLayoutEffect as useLayoutEffect5, useRef as useRef9, useState as useState5 } from "react";
865
939
  import { createPortal as createPortal3 } from "react-dom";
866
940
  import { autoUpdate as autoUpdate2, computePosition as computePosition2, flip as flip2, offset as offset2, shift as shift2, size as size2 } from "@floating-ui/dom";
867
941
  var tabbable = (panel) => [...panel.querySelectorAll(FOCUSABLE)].filter((control) => control.tabIndex >= 0);
868
942
  var FOCUSABLE = 'button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"]), [contenteditable="true"]';
869
943
  function Popover({ anchor, placement = "bottom-start", label, onDismiss, children }) {
870
- const panel = useRef7(null);
871
- const [root] = useState4(() => popupRoot(anchor));
872
- const [pos, setPos] = useState4({ visibility: "hidden" });
873
- const dismiss = useRef7(onDismiss);
944
+ const panel = useRef9(null);
945
+ const [root] = useState5(() => popupRoot(anchor));
946
+ const [pos, setPos] = useState5({ visibility: "hidden" });
947
+ const dismiss = useRef9(onDismiss);
874
948
  dismiss.current = onDismiss;
875
949
  useLayoutEffect5(() => {
876
950
  const floating = panel.current;
@@ -912,8 +986,8 @@ function Popover({ anchor, placement = "bottom-start", label, onDismiss, childre
912
986
  anchor.focus();
913
987
  };
914
988
  }, [shown, anchor]);
915
- const pressed = useRef7(null);
916
- useEffect7(() => {
989
+ const pressed = useRef9(null);
990
+ useEffect10(() => {
917
991
  const outside = (event) => {
918
992
  if (pressed.current !== event && !anchor.contains(event.target))
919
993
  dismiss.current();
@@ -926,7 +1000,7 @@ function Popover({ anchor, placement = "bottom-start", label, onDismiss, childre
926
1000
  window.removeEventListener("blur", blur);
927
1001
  };
928
1002
  }, [anchor]);
929
- return createPortal3(_jsx20("div", { ref: panel, className: "hs-popover", role: "dialog", "aria-label": label, tabIndex: -1, style: pos, onPointerDown: (event) => {
1003
+ return createPortal3(_jsx22("div", { ref: panel, className: "hs-popover", role: "dialog", "aria-label": label, tabIndex: -1, style: pos, onPointerDown: (event) => {
930
1004
  pressed.current = event.nativeEvent;
931
1005
  }, onKeyDown: (event) => {
932
1006
  if (event.key === "Escape") {
@@ -956,15 +1030,15 @@ function Popover({ anchor, placement = "bottom-start", label, onDismiss, childre
956
1030
  }
957
1031
 
958
1032
  // ../ui/dist/Toast.js
959
- import { jsx as _jsx21, jsxs as _jsxs13 } from "react/jsx-runtime";
960
- import { useEffect as useEffect8, useLayoutEffect as useLayoutEffect6, useRef as useRef8, useState as useState5 } from "react";
1033
+ import { jsx as _jsx23, jsxs as _jsxs15 } from "react/jsx-runtime";
1034
+ import { useEffect as useEffect11, useLayoutEffect as useLayoutEffect6, useRef as useRef10, useState as useState6 } from "react";
961
1035
  import { createPortal as createPortal4 } from "react-dom";
962
1036
  function Toast({ children, action, duration = 6e3, above, onClose }) {
963
- const [root, setRoot] = useState5(null);
964
- const place = useRef8(null);
965
- const [held, setHeld] = useState5({ pointer: false, focus: false });
966
- const [anchor, setAnchor] = useState5(null);
967
- const close = useRef8(onClose);
1037
+ const [root, setRoot] = useState6(null);
1038
+ const place = useRef10(null);
1039
+ const [held, setHeld] = useState6({ pointer: false, focus: false });
1040
+ const [anchor, setAnchor] = useState6(null);
1041
+ const close = useRef10(onClose);
968
1042
  close.current = onClose;
969
1043
  useLayoutEffect6(() => {
970
1044
  setRoot(place.current?.closest(".hs-shell") ?? document.body);
@@ -986,31 +1060,31 @@ function Toast({ children, action, duration = 6e3, above, onClose }) {
986
1060
  return () => cancelAnimationFrame(frame);
987
1061
  }, [above]);
988
1062
  const waiting = !held.pointer && !held.focus;
989
- useEffect8(() => {
1063
+ useEffect11(() => {
990
1064
  if (!waiting)
991
1065
  return;
992
1066
  const timer = setTimeout(() => close.current(), duration);
993
1067
  return () => clearTimeout(timer);
994
1068
  }, [waiting, duration]);
995
- return _jsx21("span", { ref: place, hidden: true, children: root && createPortal4(_jsx21("div", { className: "hs-toast-place", ...anchor && {
1069
+ return _jsx23("span", { ref: place, hidden: true, children: root && createPortal4(_jsx23("div", { className: "hs-toast-place", ...anchor && {
996
1070
  "data-above": "true",
997
1071
  style: {
998
1072
  bottom: `calc(${anchor.bottom}px + var(--space) * 4)`,
999
1073
  left: `${anchor.left}px`,
1000
1074
  width: `${anchor.width}px`
1001
1075
  }
1002
- }, children: _jsxs13("div", { className: "hs-toast", role: "status", "aria-live": "polite", onPointerEnter: () => setHeld((h) => ({ ...h, pointer: true })), onPointerLeave: () => setHeld((h) => ({ ...h, pointer: false })), onFocus: () => setHeld((h) => ({ ...h, focus: true })), onBlur: (event) => {
1076
+ }, children: _jsxs15("div", { className: "hs-toast", role: "status", "aria-live": "polite", onPointerEnter: () => setHeld((h) => ({ ...h, pointer: true })), onPointerLeave: () => setHeld((h) => ({ ...h, pointer: false })), onFocus: () => setHeld((h) => ({ ...h, focus: true })), onBlur: (event) => {
1003
1077
  if (!event.currentTarget.contains(event.relatedTarget))
1004
1078
  setHeld((h) => ({ ...h, focus: false }));
1005
- }, children: [_jsx21("span", { className: "hs-toast-text", children }), action && _jsx21(Button, { variant: "ghost", size: "sm", onClick: () => {
1079
+ }, children: [_jsx23("span", { className: "hs-toast-text", children }), action && _jsx23(Button, { variant: "ghost", size: "sm", onClick: () => {
1006
1080
  action.onPress();
1007
1081
  close.current();
1008
- }, children: action.label }), _jsx21(IconButton, { size: "sm", "aria-label": "Close", onClick: () => close.current(), children: _jsx21(CloseGlyph, {}) })] }) }), root) });
1082
+ }, children: action.label }), _jsx23(IconButton, { size: "sm", "aria-label": "Close", onClick: () => close.current(), children: _jsx23(CloseGlyph, {}) })] }) }), root) });
1009
1083
  }
1010
1084
 
1011
1085
  // ../ui/dist/DatePicker.js
1012
- import { jsx as _jsx22, jsxs as _jsxs14, Fragment as _Fragment6 } from "react/jsx-runtime";
1013
- import { useEffect as useEffect9, useMemo, useRef as useRef9, useState as useState6 } from "react";
1086
+ import { jsx as _jsx24, jsxs as _jsxs16, Fragment as _Fragment6 } from "react/jsx-runtime";
1087
+ import { useEffect as useEffect12, useMemo, useRef as useRef11, useState as useState7 } from "react";
1014
1088
  var pad = (n, width = 2) => String(n).padStart(width, "0");
1015
1089
  function instant(date) {
1016
1090
  const [year, month, day] = date.split("-").map(Number);
@@ -1044,15 +1118,15 @@ function firstDayOfWeek(locale) {
1044
1118
  var STEPS = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 };
1045
1119
  function DateGrid({ value, onChange, locale, min, max }) {
1046
1120
  const now = today();
1047
- const [focus, setFocus] = useState6(value ?? now);
1121
+ const [focus, setFocus] = useState7(value ?? now);
1048
1122
  const month = monthOf(focus);
1049
- const keyed = useRef9(false);
1050
- const days = useRef9(/* @__PURE__ */ new Map());
1051
- useEffect9(() => {
1123
+ const keyed = useRef11(false);
1124
+ const days = useRef11(/* @__PURE__ */ new Map());
1125
+ useEffect12(() => {
1052
1126
  if (value)
1053
1127
  setFocus(value);
1054
1128
  }, [value]);
1055
- useEffect9(() => {
1129
+ useEffect12(() => {
1056
1130
  if (!keyed.current)
1057
1131
  return;
1058
1132
  keyed.current = false;
@@ -1078,7 +1152,7 @@ function DateGrid({ value, onChange, locale, min, max }) {
1078
1152
  keyed.current = true;
1079
1153
  setFocus(min && next < min ? min : max && next > max ? max : next);
1080
1154
  };
1081
- return _jsxs14("div", { className: "hs-date-grid", children: [_jsxs14("div", { className: "hs-date-grid-head", children: [_jsx22("span", { className: "hs-date-grid-month", "aria-live": "polite", children: words.month.format(instant(month)) }), _jsx22(IconButton, { size: "sm", "aria-label": "Previous month", onClick: () => setFocus(addMonths(focus, -1)), children: _jsx22(ChevronLeftGlyph, {}) }), _jsx22(IconButton, { size: "sm", "aria-label": "Next month", onClick: () => setFocus(addMonths(focus, 1)), children: _jsx22(ChevronRightGlyph, {}) })] }), _jsxs14("div", { className: "hs-date-grid-days", role: "grid", "aria-label": words.month.format(instant(month)), children: [_jsx22("div", { role: "row", className: "hs-date-grid-row", children: weeks[0].map((day) => _jsx22("span", { className: "hs-date-grid-weekday", role: "columnheader", "aria-label": words.long.format(instant(day)), children: words.narrow.format(instant(day)) }, day)) }), weeks.map((week) => _jsx22("div", { role: "row", className: "hs-date-grid-row", children: week.map((day) => _jsx22("button", { ref: (button) => {
1155
+ return _jsxs16("div", { className: "hs-date-grid", children: [_jsxs16("div", { className: "hs-date-grid-head", children: [_jsx24("span", { className: "hs-date-grid-month", "aria-live": "polite", children: words.month.format(instant(month)) }), _jsx24(IconButton, { size: "sm", "aria-label": "Previous month", onClick: () => setFocus(addMonths(focus, -1)), children: _jsx24(ChevronLeftGlyph, {}) }), _jsx24(IconButton, { size: "sm", "aria-label": "Next month", onClick: () => setFocus(addMonths(focus, 1)), children: _jsx24(ChevronRightGlyph, {}) })] }), _jsxs16("div", { className: "hs-date-grid-days", role: "grid", "aria-label": words.month.format(instant(month)), children: [_jsx24("div", { role: "row", className: "hs-date-grid-row", children: weeks[0].map((day) => _jsx24("span", { className: "hs-date-grid-weekday", role: "columnheader", "aria-label": words.long.format(instant(day)), children: words.narrow.format(instant(day)) }, day)) }), weeks.map((week) => _jsx24("div", { role: "row", className: "hs-date-grid-row", children: week.map((day) => _jsx24("button", { ref: (button) => {
1082
1156
  if (button)
1083
1157
  days.current.set(day, button);
1084
1158
  else
@@ -1089,20 +1163,20 @@ function DateGrid({ value, onChange, locale, min, max }) {
1089
1163
  }, onKeyDown: (event) => key(event, day), children: words.day.format(instant(day)) }, day)) }, week[0]))] })] });
1090
1164
  }
1091
1165
  function DatePicker({ value, onChange, locale, min, max, label, placeholder, disabled }) {
1092
- const [anchor, setAnchor] = useState6(null);
1166
+ const [anchor, setAnchor] = useState7(null);
1093
1167
  const shown = useMemo(() => new Intl.DateTimeFormat(locale, { dateStyle: "medium", timeZone: "UTC" }), [locale]);
1094
- return _jsxs14(_Fragment6, { children: [_jsx22("button", { type: "button", className: "hs-input hs-picker-field", "aria-label": label, "aria-haspopup": "dialog", "aria-expanded": anchor !== null, "data-empty": value === null, disabled, onClick: (event) => setAnchor(anchor ? null : event.currentTarget), children: value ? shown.format(instant(value)) : placeholder }), anchor && _jsx22(Popover, { anchor, label, onDismiss: () => setAnchor(null), children: _jsx22(DateGrid, { value, locale, ...min && { min }, ...max && { max }, onChange: (date) => {
1168
+ return _jsxs16(_Fragment6, { children: [_jsx24("button", { type: "button", className: "hs-input hs-picker-field", "aria-label": label, "aria-haspopup": "dialog", "aria-expanded": anchor !== null, "data-empty": value === null, disabled, onClick: (event) => setAnchor(anchor ? null : event.currentTarget), children: value ? shown.format(instant(value)) : placeholder }), anchor && _jsx24(Popover, { anchor, label, onDismiss: () => setAnchor(null), children: _jsx24(DateGrid, { value, locale, ...min && { min }, ...max && { max }, onChange: (date) => {
1095
1169
  onChange(date);
1096
1170
  setAnchor(null);
1097
1171
  } }) })] });
1098
1172
  }
1099
1173
 
1100
1174
  // ../ui/dist/TimePicker.js
1101
- import { jsx as _jsx23, Fragment as _Fragment7, jsxs as _jsxs15 } from "react/jsx-runtime";
1102
- import { useMemo as useMemo2, useState as useState7 } from "react";
1175
+ import { jsx as _jsx25, Fragment as _Fragment7, jsxs as _jsxs17 } from "react/jsx-runtime";
1176
+ import { useMemo as useMemo2, useState as useState8 } from "react";
1103
1177
  var pad2 = (n) => String(n).padStart(2, "0");
1104
1178
  function TimePicker({ value, onChange, locale, label, step = 15, placeholder, disabled }) {
1105
- const [anchor, setAnchor] = useState7(null);
1179
+ const [anchor, setAnchor] = useState8(null);
1106
1180
  const shown = useMemo2(() => new Intl.DateTimeFormat(locale, { hour: "numeric", minute: "2-digit", timeZone: "UTC" }), [locale]);
1107
1181
  const words = (time) => {
1108
1182
  const [hours, minutes] = time.split(":").map(Number);
@@ -1115,7 +1189,7 @@ function TimePicker({ value, onChange, locale, label, step = 15, placeholder, di
1115
1189
  });
1116
1190
  return value && !steps.includes(value) ? [...steps, value].sort() : steps;
1117
1191
  }, [step, value]);
1118
- return _jsxs15(_Fragment7, { children: [_jsx23("button", { type: "button", className: "hs-input hs-picker-field", "aria-label": label, "aria-haspopup": "menu", "aria-expanded": anchor !== null, "data-empty": value === null, disabled, onClick: (event) => setAnchor(anchor ? null : { key: "time", element: event.currentTarget }), children: value ? words(value) : placeholder }), anchor && _jsx23(MenuSurface, { anchor, fit: true, keyboard: true, maxHeight: 280, onDismiss: () => setAnchor(null), children: times.map((time) => _jsx23(MItem, { label: words(time), checked: time === value, onClick: () => {
1192
+ return _jsxs17(_Fragment7, { children: [_jsx25("button", { type: "button", className: "hs-input hs-picker-field", "aria-label": label, "aria-haspopup": "menu", "aria-expanded": anchor !== null, "data-empty": value === null, disabled, onClick: (event) => setAnchor(anchor ? null : { key: "time", element: event.currentTarget }), children: value ? words(value) : placeholder }), anchor && _jsx25(MenuSurface, { anchor, fit: true, keyboard: true, maxHeight: spaces(70), onDismiss: () => setAnchor(null), children: times.map((time) => _jsx25(MItem, { label: words(time), checked: time === value, onClick: () => {
1119
1193
  onChange(time);
1120
1194
  setAnchor(null);
1121
1195
  anchor.element.focus();
@@ -1123,8 +1197,8 @@ function TimePicker({ value, onChange, locale, label, step = 15, placeholder, di
1123
1197
  }
1124
1198
 
1125
1199
  // ../ui/dist/SwatchPicker.js
1126
- import { jsx as _jsx24 } from "react/jsx-runtime";
1127
- import { useRef as useRef10 } from "react";
1200
+ import { jsx as _jsx26 } from "react/jsx-runtime";
1201
+ import { useRef as useRef12 } from "react";
1128
1202
  var SWATCHES = [
1129
1203
  "rose",
1130
1204
  "ember",
@@ -1157,7 +1231,7 @@ var NAMES = {
1157
1231
  };
1158
1232
  var STEPS2 = { ArrowRight: 1, ArrowDown: 1, ArrowLeft: -1, ArrowUp: -1 };
1159
1233
  function SwatchPicker({ value, onChange, label }) {
1160
- const dots = useRef10([]);
1234
+ const dots = useRef12([]);
1161
1235
  const tips = useFloatingTips();
1162
1236
  const step = (event, index) => {
1163
1237
  const by = STEPS2[event.key];
@@ -1168,17 +1242,17 @@ function SwatchPicker({ value, onChange, label }) {
1168
1242
  onChange(SWATCHES[next]);
1169
1243
  dots.current[next]?.focus();
1170
1244
  };
1171
- return _jsx24("div", { className: "hs-swatch-picker", role: "radiogroup", "aria-label": label, children: SWATCHES.map((swatch, index) => {
1245
+ return _jsx26("div", { className: "hs-swatch-picker", role: "radiogroup", "aria-label": label, children: SWATCHES.map((swatch, index) => {
1172
1246
  const tip = tips(swatch, NAMES[swatch]);
1173
- return _jsx24("button", { ref: (dot) => {
1247
+ return _jsx26("button", { ref: (dot) => {
1174
1248
  dots.current[index] = dot;
1175
1249
  }, type: "button", role: "radio", "aria-checked": swatch === value, "aria-label": NAMES[swatch], tabIndex: swatch === value ? 0 : -1, className: "hs-swatch-choice", "data-swatch": swatch, onClick: () => onChange(swatch), onKeyDown: (event) => step(event, index), ...tip.hover, children: tip.tip }, swatch);
1176
1250
  }) });
1177
1251
  }
1178
1252
 
1179
1253
  // ../ui/dist/PersonMark.js
1180
- import { jsx as _jsx25 } from "react/jsx-runtime";
1181
- import { useEffect as useEffect10, useState as useState8 } from "react";
1254
+ import { jsx as _jsx27 } from "react/jsx-runtime";
1255
+ import { useEffect as useEffect13, useState as useState9 } from "react";
1182
1256
  function initials(name) {
1183
1257
  const trimmed = name.trim();
1184
1258
  const words = (/\s/.test(trimmed) ? trimmed : trimmed.split("@")[0]).split(/[\s._-]+/).filter(Boolean);
@@ -1194,19 +1268,20 @@ function hueOf(name) {
1194
1268
  return SWATCHES[(hash >>> 0) % 12];
1195
1269
  }
1196
1270
  function PersonMark({ name, picture, size: size3 = "md", swatch }) {
1197
- const [broken, setBroken] = useState8(false);
1198
- useEffect10(() => setBroken(false), [picture]);
1199
- return _jsx25("span", { className: "hs-person-mark", "data-size": size3, "data-swatch": swatch ?? hueOf(name), role: "img", "aria-label": name, children: picture && !broken ? _jsx25("img", { src: picture, alt: "", onError: () => setBroken(true) }) : initials(name) });
1271
+ const [broken, setBroken] = useState9(false);
1272
+ useEffect13(() => setBroken(false), [picture]);
1273
+ return _jsx27("span", { className: "hs-person-mark", "data-size": size3, "data-swatch": swatch ?? hueOf(name), role: "img", "aria-label": name, children: picture && !broken ? _jsx27("img", { src: picture, alt: "", onError: () => setBroken(true) }) : initials(name) });
1200
1274
  }
1201
1275
 
1202
1276
  // ../ui/dist/ModelAvatar.js
1203
- import { jsx as _jsx27, jsxs as _jsxs16 } from "react/jsx-runtime";
1204
- import { createContext as createContext4, useContext as useContext3, useState as useState9 } from "react";
1277
+ import { jsx as _jsx29, jsxs as _jsxs18 } from "react/jsx-runtime";
1278
+ import { createContext as createContext4, useContext as useContext3, useState as useState10 } from "react";
1205
1279
 
1206
1280
  // ../ui/dist/brand-marks.js
1207
- import { jsx as _jsx26 } from "react/jsx-runtime";
1281
+ import { jsx as _jsx28 } from "react/jsx-runtime";
1208
1282
 
1209
1283
  // ../ui/dist/brand-svg.js
1284
+ var BRAND_FILES = ["linux"];
1210
1285
  var BRAND_SVG = {
1211
1286
  qwen: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z" fill="url(#lobe-icons-qwen-_R_0_)" fill-rule="nonzero"></path><defs><linearGradient id="lobe-icons-qwen-_R_0_" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#6336E7" stop-opacity=".84"></stop><stop offset="100%" stop-color="#6F69F7" stop-opacity=".84"></stop></linearGradient></defs></svg>',
1212
1287
  meta: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path d="M6.897 4h-.024l-.031 2.615h.022c1.715 0 3.046 1.357 5.94 6.246l.175.297.012.02 1.62-2.438-.012-.019a48.763 48.763 0 00-1.098-1.716 28.01 28.01 0 00-1.175-1.629C10.413 4.932 8.812 4 6.896 4z" fill="url(#lobe-icons-meta-0-_R_0_)"></path><path d="M6.873 4C4.95 4.01 3.247 5.258 2.02 7.17a4.352 4.352 0 00-.01.017l2.254 1.231.011-.017c.718-1.083 1.61-1.774 2.568-1.785h.021L6.896 4h-.023z" fill="url(#lobe-icons-meta-1-_R_0_)"></path><path d="M2.019 7.17l-.011.017C1.2 8.447.598 9.995.274 11.664l-.005.022 2.534.6.004-.022c.27-1.467.786-2.828 1.456-3.845l.011-.017L2.02 7.17z" fill="url(#lobe-icons-meta-2-_R_0_)"></path><path d="M2.807 12.264l-2.533-.6-.005.022c-.177.918-.267 1.851-.269 2.786v.023l2.598.233v-.023a12.591 12.591 0 01.21-2.44z" fill="url(#lobe-icons-meta-3-_R_0_)"></path><path d="M2.677 15.537a5.462 5.462 0 01-.079-.813v-.022L0 14.468v.024a8.89 8.89 0 00.146 1.652l2.535-.585a4.106 4.106 0 01-.004-.022z" fill="url(#lobe-icons-meta-4-_R_0_)"></path><path d="M3.27 16.89c-.284-.31-.484-.756-.589-1.328l-.004-.021-2.535.585.004.021c.192 1.01.568 1.85 1.106 2.487l.014.017 2.018-1.745a2.106 2.106 0 01-.015-.016z" fill="url(#lobe-icons-meta-5-_R_0_)"></path><path d="M10.78 9.654c-1.528 2.35-2.454 3.825-2.454 3.825-2.035 3.2-2.739 3.917-3.871 3.917a1.545 1.545 0 01-1.186-.508l-2.017 1.744.014.017C2.01 19.518 3.058 20 4.356 20c1.963 0 3.374-.928 5.884-5.33l1.766-3.13a41.283 41.283 0 00-1.227-1.886z" fill="#0082FB"></path><path d="M13.502 5.946l-.016.016c-.4.43-.786.908-1.16 1.416.378.483.768 1.024 1.175 1.63.48-.743.928-1.345 1.367-1.807l.016-.016-1.382-1.24z" fill="url(#lobe-icons-meta-6-_R_0_)"></path><path d="M20.918 5.713C19.853 4.633 18.583 4 17.225 4c-1.432 0-2.637.787-3.723 1.944l-.016.016 1.382 1.24.016-.017c.715-.747 1.408-1.12 2.176-1.12.826 0 1.6.39 2.27 1.075l.015.016 1.589-1.425-.016-.016z" fill="#0082FB"></path><path d="M23.998 14.125c-.06-3.467-1.27-6.566-3.064-8.396l-.016-.016-1.588 1.424.015.016c1.35 1.392 2.277 3.98 2.361 6.971v.023h2.292v-.022z" fill="url(#lobe-icons-meta-7-_R_0_)"></path><path d="M23.998 14.15v-.023h-2.292v.022c.004.14.006.282.006.424 0 .815-.121 1.474-.368 1.95l-.011.022 1.708 1.782.013-.02c.62-.96.946-2.293.946-3.91 0-.083 0-.165-.002-.247z" fill="url(#lobe-icons-meta-8-_R_0_)"></path><path d="M21.344 16.52l-.011.02c-.214.402-.519.67-.917.787l.778 2.462a3.493 3.493 0 00.438-.182 3.558 3.558 0 001.366-1.218l.044-.065.012-.02-1.71-1.784z" fill="url(#lobe-icons-meta-9-_R_0_)"></path><path d="M19.92 17.393c-.262 0-.492-.039-.718-.14l-.798 2.522c.449.153.927.222 1.46.222.492 0 .943-.073 1.352-.215l-.78-2.462c-.167.05-.341.075-.517.073z" fill="url(#lobe-icons-meta-10-_R_0_)"></path><path d="M18.323 16.534l-.014-.017-1.836 1.914.016.017c.637.682 1.246 1.105 1.937 1.337l.797-2.52c-.291-.125-.573-.353-.9-.731z" fill="url(#lobe-icons-meta-11-_R_0_)"></path><path d="M18.309 16.515c-.55-.642-1.232-1.712-2.303-3.44l-1.396-2.336-.011-.02-1.62 2.438.012.02.989 1.668c.959 1.61 1.74 2.774 2.493 3.585l.016.016 1.834-1.914a2.353 2.353 0 01-.014-.017z" fill="url(#lobe-icons-meta-12-_R_0_)"></path><defs><linearGradient id="lobe-icons-meta-0-_R_0_" x1="75.897%" x2="26.312%" y1="89.199%" y2="12.194%"><stop offset=".06%" stop-color="#0867DF"></stop><stop offset="45.39%" stop-color="#0668E1"></stop><stop offset="85.91%" stop-color="#0064E0"></stop></linearGradient><linearGradient id="lobe-icons-meta-1-_R_0_" x1="21.67%" x2="97.068%" y1="75.874%" y2="23.985%"><stop offset="13.23%" stop-color="#0064DF"></stop><stop offset="99.88%" stop-color="#0064E0"></stop></linearGradient><linearGradient id="lobe-icons-meta-2-_R_0_" x1="38.263%" x2="60.895%" y1="89.127%" y2="16.131%"><stop offset="1.47%" stop-color="#0072EC"></stop><stop offset="68.81%" stop-color="#0064DF"></stop></linearGradient><linearGradient id="lobe-icons-meta-3-_R_0_" x1="47.032%" x2="52.15%" y1="90.19%" y2="15.745%"><stop offset="7.31%" stop-color="#007CF6"></stop><stop offset="99.43%" stop-color="#0072EC"></stop></linearGradient><linearGradient id="lobe-icons-meta-4-_R_0_" x1="52.155%" x2="47.591%" y1="58.301%" y2="37.004%"><stop offset="7.31%" stop-color="#007FF9"></stop><stop offset="100%" stop-color="#007CF6"></stop></linearGradient><linearGradient id="lobe-icons-meta-5-_R_0_" x1="37.689%" x2="61.961%" y1="12.502%" y2="63.624%"><stop offset="7.31%" stop-color="#007FF9"></stop><stop offset="100%" stop-color="#0082FB"></stop></linearGradient><linearGradient id="lobe-icons-meta-6-_R_0_" x1="34.808%" x2="62.313%" y1="68.859%" y2="23.174%"><stop offset="27.99%" stop-color="#007FF8"></stop><stop offset="91.41%" stop-color="#0082FB"></stop></linearGradient><linearGradient id="lobe-icons-meta-7-_R_0_" x1="43.762%" x2="57.602%" y1="6.235%" y2="98.514%"><stop offset="0%" stop-color="#0082FB"></stop><stop offset="99.95%" stop-color="#0081FA"></stop></linearGradient><linearGradient id="lobe-icons-meta-8-_R_0_" x1="60.055%" x2="39.88%" y1="4.661%" y2="69.077%"><stop offset="6.19%" stop-color="#0081FA"></stop><stop offset="100%" stop-color="#0080F9"></stop></linearGradient><linearGradient id="lobe-icons-meta-9-_R_0_" x1="30.282%" x2="61.081%" y1="59.32%" y2="33.244%"><stop offset="0%" stop-color="#027AF3"></stop><stop offset="100%" stop-color="#0080F9"></stop></linearGradient><linearGradient id="lobe-icons-meta-10-_R_0_" x1="20.433%" x2="82.112%" y1="50.001%" y2="50.001%"><stop offset="0%" stop-color="#0377EF"></stop><stop offset="99.94%" stop-color="#0279F1"></stop></linearGradient><linearGradient id="lobe-icons-meta-11-_R_0_" x1="40.303%" x2="72.394%" y1="35.298%" y2="57.811%"><stop offset=".19%" stop-color="#0471E9"></stop><stop offset="100%" stop-color="#0377EF"></stop></linearGradient><linearGradient id="lobe-icons-meta-12-_R_0_" x1="32.254%" x2="68.003%" y1="19.719%" y2="84.908%"><stop offset="27.65%" stop-color="#0867DF"></stop><stop offset="100%" stop-color="#0471E9"></stop></linearGradient></defs></svg>',
@@ -1230,6 +1305,7 @@ var BRAND_SVG = {
1230
1305
  xai: '<svg viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" style="display:block;width:100%;height:100%"><path d="M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z"></path></svg>',
1231
1306
  cohere: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path clip-rule="evenodd" d="M8.128 14.099c.592 0 1.77-.033 3.398-.703 1.897-.781 5.672-2.2 8.395-3.656 1.905-1.018 2.74-2.366 2.74-4.18A4.56 4.56 0 0018.1 1H7.549A6.55 6.55 0 001 7.55c0 3.617 2.745 6.549 7.128 6.549z" fill="#39594D" fill-rule="evenodd"></path><path clip-rule="evenodd" d="M9.912 18.61a4.387 4.387 0 012.705-4.052l3.323-1.38c3.361-1.394 7.06 1.076 7.06 4.715a5.104 5.104 0 01-5.105 5.104l-3.597-.001a4.386 4.386 0 01-4.386-4.387z" fill="#D18EE2" fill-rule="evenodd"></path><path d="M4.776 14.962A3.775 3.775 0 001 18.738v.489a3.776 3.776 0 007.551 0v-.49a3.775 3.775 0 00-3.775-3.775z" fill="#FF7759"></path></svg>',
1232
1307
  stability: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path d="M7.223 21c4.252 0 7.018-2.22 7.018-5.56 0-2.59-1.682-4.236-4.69-4.918l-1.93-.571c-1.694-.375-2.683-.825-2.45-1.975.194-.957.773-1.497 2.122-1.497 4.285 0 5.873 1.497 5.873 1.497v-3.6S11.62 3 7.293 3C3.213 3 1 5.07 1 8.273c0 2.59 1.534 4.097 4.645 4.812l.334.083c.473.144 1.112.335 1.916.572 1.59.375 1.999.773 1.999 1.966 0 1.09-1.15 1.71-2.67 1.71C2.841 17.416 1 15.231 1 15.231v3.989S2.152 21 7.223 21z" fill="url(#lobe-icons-stability-_R_0_)"></path><path d="M20.374 20.73c1.505 0 2.626-1.073 2.626-2.526 0-1.484-1.089-2.526-2.626-2.526-1.505 0-2.594 1.042-2.594 2.526 0 1.484 1.089 2.526 2.594 2.526z" fill="#E80000"></path><defs><linearGradient id="lobe-icons-stability-_R_0_" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#9D39FF"></stop><stop offset="100%" stop-color="#A380FF"></stop></linearGradient></defs></svg>',
1308
+ bfl: '<svg viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" style="display:block;width:100%;height:100%"><path d="M17.113 10.248H14.56l-2.553-3.616-7.963 11.27h2.558l5.405-7.654h2.552l-5.404 7.653h2.565l5.392-7.653L24 20 19.97 20v-2.091l-2.857-4.044-2.842 4.037V20H0L12.008 3l5.105 7.249z"></path></svg>',
1233
1309
  liquid: '<svg viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" style="display:block;width:100%;height:100%"><path d="M12.028 8.546l-.008.005 3.03 5.25a3.94 3.94 0 01.643 2.162c0 .754-.212 1.46-.58 2.062l6.173-1.991L11.63 0 9.304 3.872l2.724 4.674zM6.837 24l4.85-4.053h-.013c-2.219 0-4.017-1.784-4.017-3.984 0-.794.235-1.534.64-2.156l2.865-4.976-2.381-4.087L2 16.034 6.83 24h.007zM13.737 19.382h-.001L8.222 24h8.182l4.148-6.769-6.815 2.151z"></path></svg>',
1234
1310
  yi: '<svg viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd" style="display:block;width:100%;height:100%"><path d="M18.62 13.927c.611 0 1.107.505 1.107 1.128v5.817c0 .623-.496 1.128-1.108 1.128a1.118 1.118 0 01-1.108-1.128v-5.817c0-.623.496-1.128 1.108-1.128zM16.59 3.052a1.094 1.094 0 011.562-.129c.466.404.522 1.116.126 1.59l-5.938 7.111v9.147c0 .624-.496 1.129-1.108 1.129a1.118 1.118 0 01-1.108-1.129v-9.477l.003-.088.01-.087c.015-.232.102-.462.261-.654l6.192-7.413zM2.906 2.256a1.094 1.094 0 011.559.157l4.387 5.45a1.142 1.142 0 01-.155 1.587 1.094 1.094 0 01-1.559-.157l-4.387-5.45a1.144 1.144 0 01.06-1.498l.095-.09z"></path><ellipse cx="20.146" cy="10.692" fill="#00FF25" rx="1.354" ry="1.379"></ellipse></svg>',
1235
1311
  internlm: '<svg viewBox="0 0 24 24" style="display:block;width:100%;height:100%"><path d="M5.54 19.662s2.24-.25 2.365-.29c.125-.042 2.45.082 2.45.082l1.493.374 1.37.498.373.125 2.033-.748 2.45-.373 1.659.041 1.286.166.54.166-.042 2.242-1.12-.291-2.159-.166-1.494.124-1.286.291-1.161.374-.83.332-1.744-.664-2.116-.416H7.158l-1.618.291v-2.158z" fill="#858599" fill-opacity=".5"></path><path d="M13.46 23c-3.773-2.078-7.78-.832-7.82-.819l-.453.144v-2.86l.24-.078c.174-.056 4.324-1.354 8.366.871l-.333.607c-3.244-1.786-6.66-1.115-7.58-.885V21.4c1.203-.286 4.595-.834 7.913.993L13.46 23V23z" fill="#858599"></path><path d="M13.413 23l-.334-.607c3.319-1.827 6.71-1.279 7.914-.993v-1.419c-.92-.231-4.337-.9-7.58.885l-.334-.607c4.042-2.225 8.192-.927 8.366-.87l.24.077v2.862l-.452-.147c-.04-.013-4.046-1.258-7.82.819z" fill="#858599"></path><path d="M17.756 16.476a.904.904 0 00-.264-.651.822.822 0 00-.632-.255.997.997 0 00-.644.293c-.175.212-.26.433-.259.685a.874.874 0 00.256.632c.175.187.39.272.644.255.246 0 .459-.1.633-.293a.97.97 0 00.268-.667l-.002.001zM10.769 17.143a.928.928 0 00.264-.658.993.993 0 00-.262-.679.908.908 0 00-.633-.227 1.089 1.089 0 00-.644.274 1.005 1.005 0 00-.265.685c0 .25.089.465.264.643.17.187.383.271.636.255.26-.008.471-.1.639-.293z" fill="#858599" fill-opacity=".5"></path><path d="M13.4 19.65c-.693 0-1.374-.058-1.895-.192-1.403-.36-2.52-1.01-3.413-1.986-.929-1.017-.988-1.996-1.05-3.033-.008-.133-.016-.267-.026-.405-.083-1.147-.626-2.941-.631-2.958l-.043-.141.086-.119A6.966 6.966 0 019.44 8.441c1.128-.47 2.47-.716 4.105-.752 2.721-.159 5.688.973 7.056 2.692l.086.109-.62 2.89c-.006.155-.052.968-.276 2.63-.263 1.947-2.668 3.061-3.903 3.377-.628.162-1.57.262-2.488.262zm-6.41-8.603c.134.46.538 1.912.613 2.944.01.139.018.277.026.412.06 1.01.109 1.809.896 2.672.815.89 1.837 1.484 3.125 1.814 1.092.28 3.061.194 4.091-.071.887-.228 3.24-1.19 3.468-2.889.24-1.786.272-2.593.273-2.6v-.026l.572-2.664c-.9-1.728-1.433-2.082-2.578-2.514-1.206-.455-2.677.075-3.903.148h-.01c-3.126.068-5.418-.935-6.574 2.773h.001z" fill="#858599"></path><path d="M19.545 10.862c.223.573.317.86.526 1.386 0 0 .552-.887.727-1.522.175-.641.068-1.458-.07-2.221-.344-1.282-.612-1.381-1.647-2.14a8.668 8.668 0 00-1.565-.84 12.303 12.303 0 00-3.83-.8 12.175 12.175 0 00-3.842.57 8.258 8.258 0 00-1.602.745c-1.075.695-1.823 1.674-2.24 2.932-.112.473-.29.927-.245 1.365.2 2.01 1.512 2.893 1.422 2.409-.117-.625-.042-.994.119-1.592.304-1.13 1.025-1.965 2.163-2.497h.004c.221-.062 1.344-.7 2.834.062.396.17 1.088.629 1.434.618.347-.01.846-.345 1.21-.572.683-.428 1.33-.574 2.184-.303 1.243.39 2.005 1.274 2.418 2.401z" fill="#858599"></path><path d="M1.217 9.86l.934.274 1.071-.055.77-.522.825-.742.604-.825.77-.797.741-.467 1.016-.22-.687 1.209-.577.576-1.209 1.676-.549.825-.632.44-.907.604s-.797.165-.879.192c-.081.028-.741.138-.741.138l-.577-.028-.44-.137.412-.825.056-.604v-.714l-.001.002z" fill="#858599" fill-opacity=".5"></path><path d="M3.607 5.108l-.083.63-.22.441-.274.412-.688.412.825.412.907.357.934.193.412.028.99-.688 1.043-.934-.357-.11-1.29-.137-.963-.358-.687-.356-.55-.302z" fill="#858599" fill-opacity=".5"></path><path d="M1.521 12.399c-.29 0-.596-.018-.917-.051L0 12.278l.298-.19.159-.173c.022-.033.085-.144.19-.377v-.002c.17-.365.228-.975.177-1.813l-.036-.564.435.36c.454.376 1.024.466 1.74.272.64-.182 1.337-.78 2.068-1.774.673-.968 1.64-1.624 2.88-1.952l.116-.031.783.61-.704-.05a2.182 2.182 0 00-.191.206l-.014.017-.018.016c-.404.718-.982 1.426-1.56 2.201l-.008.014c-.089.156-.18.317-.279.477v.009l-.032.051c-.592.962-1.243 1.683-1.935 2.145-.635.445-1.49.67-2.548.67v-.001zm-.5-.505c1.194.077 2.124-.112 2.77-.567l.005-.003c.626-.417 1.223-1.078 1.773-1.964a.244.244 0 01.041-.074c.098-.159.19-.321.28-.48v-.001c.392-.75.842-1.417 1.343-1.988-.748.33-1.341.82-1.8 1.481l-.004.006c-.808 1.101-1.572 1.742-2.333 1.958-.673.182-1.263.15-1.764-.095.01.69-.068 1.207-.237 1.573-.026.058-.05.108-.072.153h-.002z" fill="#858599"></path><path d="M1.577 12.399c-.29 0-.596-.018-.917-.051l.05-.486c1.371.145 2.425-.035 3.136-.535l.006-.003c.626-.417 1.222-1.078 1.772-1.963a.277.277 0 01.079-.116l.32.37a.22.22 0 00.072-.141l-.005.058-.03.052c-.592.962-1.243 1.683-1.935 2.145-.636.445-1.49.67-2.548.67zM5.751 7.717a9.381 9.381 0 01-.311.016c-.823.029-1.7-.2-2.615-.682.792-.512 1.013-1.096.982-1.621.189.15.386.281.591.393 1.345.758 2.766.878 5.195.198l-.165-.46c-2.308.637-3.558.532-4.793-.165a3.803 3.803 0 01-.967-.759l-.033-.036-.5-.542.094.697c.014.058.3 1.417-1.01 2.08l-.398.201.383.228c1.073.638 2.114.96 3.094.96l.453-.507v-.001zM11.93 15.21a.405.405 0 01-.366-.253c-.326-.745-.582-1.055-.969-1.525-.39-.474-1.223-1.277-1.36-1.393-.184-.156-.236-.368-.126-.515.055-.072.219-.219.556.005.683.452 2.198 1.812 2.608 2.904.15.397 0 .667-.201.749a.367.367 0 01-.143.028h.001zM14.877 15.23a.37.37 0 01-.146-.03c-.201-.085-.346-.357-.192-.752.424-1.086 1.957-2.427 2.645-2.87.34-.22.502-.072.556.002.109.147.054.358-.131.512-.139.115-.982.905-1.379 1.376-.392.465-.651.772-.988 1.513a.404.404 0 01-.364.25v-.002z" fill="#858599"></path><path d="M16.382 3.316c.01-.566-.265-1.054-.827-1.462-.57-.4-1.252-.602-2.045-.608-.792-.006-1.471.189-2.031.587-.563.401-.85.884-.857 1.445.002.176.017.336.04.486 2.1-.676 3.981-.62 5.64.167.045-.21.072-.414.08-.616v.001z" fill="#858599" fill-opacity=".5"></path><path d="M7.6 14.716l-.01-.024a1.824 1.824 0 01-.072-.192l-.059-.189-.388.013-.03.326c.002.013.009.044.016.1v.011c.003.02.004.036.008.052a.555.555 0 01-.164.431c-.112.12-.258.172-.45.164-.24-.01-.32-.105-.358-.176-.105-.19-.112-.291-.107-.336.015-.123.04-.254.077-.385.055-.206.013-.444-.126-.708l-.143-.272a1.787 1.787 0 01-.14-.384.974.974 0 01.022-.458.641.641 0 01.264-.374.695.695 0 01.496-.1l.015.002h.015c.192 0 .349.02.469.051a2.208 2.208 0 01-.027-.58 1.5 1.5 0 00-.38-.107H6.52l-.095-.008a1.369 1.369 0 00-.826.189c-.272.16-.456.394-.544.7a1.691 1.691 0 00-.03.815c.008.041.017.09.033.136.043.135.113.285.21.446.148.243.193.323.205.35l.005.009c.018.033.022.084.01.15l-.005.023a7.4 7.4 0 01-.034.172c-.115.298-.127.574-.036.815a.964.964 0 00.486.558c.134.066.288.108.46.125.094.01.192.01.294.005a.957.957 0 00.784-.454 1.13 1.13 0 00.17-.87l-.004-.026H7.6zM21.925 12.059a1.165 1.165 0 00-.556-.697h-.001a1.325 1.325 0 00-.797-.175l-.031.003-.093.011h-.008a1.553 1.553 0 00-.528.197 1.959 1.959 0 01-.016.563l.1-.04c.128-.053.302-.095.532-.13l.013-.002a.567.567 0 01.474.103c.155.113.26.254.32.428.05.164.057.305.022.43a2.77 2.77 0 01-.144.41 9.169 9.169 0 01-.191.383.908.908 0 00-.102.57c.024.176.05.322.078.446a.608.608 0 01-.036.329l-.003.006c-.037.117-.235.18-.35.208-.263.063-.381-.033-.451-.12a.78.78 0 01-.173-.51l.004-.053a.806.806 0 01.014-.093l-.008-.337-.431.01-.046.185a1.285 1.285 0 01-.064.188l-.011.027-.005.029c-.05.307.013.598.187.868l.004.006c.19.274.463.426.787.437.087.005.17.002.25-.004.192-.018.363-.069.509-.15a.992.992 0 00.459-.567c.085-.252.068-.527-.05-.816l-.03-.171-.002-.013a.306.306 0 01.015-.18c.045-.108.106-.233.181-.375.098-.173.162-.32.196-.444a.665.665 0 00.033-.152 1.75 1.75 0 00-.053-.806l.002-.002zM16.59 3.853c.033-.185.053-.359.06-.533.012-.648-.301-1.209-.93-1.667-.609-.427-1.344-.646-2.184-.653-.843-.008-1.575.207-2.176.633-.628.45-.951 1.002-.96 1.643v.006c.002.128.01.256.026.39a.38.38 0 00-.095.23v.01c0 .216.032.433.097.643l.001.006c.09.265.245.518.46.75l.063.068.567.063c.485.282 1.132.433 1.928.447h.103c.587 0 1.1-.072 1.527-.213l.011-.004c.16-.063.316-.138.465-.224.452.043.791-.18.965-.633l.043-.046-.002-.065c.067-.205.184-.608.03-.851h.001zM11.643 2.03c.514-.365 1.149-.547 1.888-.542.74.006 1.38.196 1.903.562.497.361.735.774.727 1.255-.004.089-.01.18-.023.274a6.882 6.882 0 00-2.685-.527c-.816 0-1.67.13-2.558.39a4.038 4.038 0 01-.006-.165c.006-.482.253-.89.754-1.247zm4.513 2.293l-.165.357s-.215.311-.45.272l-.092-.015-.078.049a2.724 2.724 0 01-.454.226c-.397.13-.89.192-1.462.184-.708-.014-1.276-.14-1.688-.38l-.037-.021-.048-.03-.491-.054c-.094-.11-.226-.34-.226-.34l-.135-.392-.008-.204c1.988-.626 3.79-.574 5.355.155.002.029-.02.193-.02.193zm.147.364v-.004l.003.004h-.003z" fill="#858599"></path></svg>',
@@ -1266,8 +1342,8 @@ var BRAND_SVG = {
1266
1342
  vercel: '<svg viewBox="0 0 24 24" fill="currentColor" style="display:block;width:100%;height:100%"><path d="m12 1.608 12 20.784H0Z"/></svg>',
1267
1343
  sentry: '<svg viewBox="0 0 24 24" fill="currentColor" style="display:block;width:100%;height:100%"><path d="M13.91 2.505c-.873-1.448-2.972-1.448-3.844 0L6.904 7.92a15.478 15.478 0 0 1 8.53 12.811h-2.221A13.301 13.301 0 0 0 5.784 9.814l-2.926 5.06a7.65 7.65 0 0 1 4.435 5.848H2.194a.365.365 0 0 1-.298-.534l1.413-2.402a5.16 5.16 0 0 0-1.614-.913L.296 19.275a2.182 2.182 0 0 0 .812 2.999 2.24 2.24 0 0 0 1.086.288h6.983a9.322 9.322 0 0 0-3.845-8.318l1.11-1.922a11.47 11.47 0 0 1 4.95 10.24h5.915a17.242 17.242 0 0 0-7.885-15.28l2.244-3.845a.37.37 0 0 1 .504-.13c.255.14 9.75 16.708 9.928 16.9a.365.365 0 0 1-.327.543h-2.287c.029.612.029 1.223 0 1.831h2.297a2.206 2.206 0 0 0 1.922-3.31z"/></svg>',
1268
1344
  apple: '<svg viewBox="0 0 24 24" fill="currentColor" style="display:block;width:100%;height:100%"><path d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"/></svg>',
1269
- linux: '<svg viewBox="0 0 216 256" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:block;width:100%;height:100%"><defs id="tux_fx"><linearGradient id="gradient_belly_shadow"><stop offset="0" stop-color="#000000"/><stop offset="1" stop-color="#000000" stop-opacity="0.25"/></linearGradient><linearGradient id="gradient_wing_tip_right_shadow"><stop offset="0" stop-color="#110800"/><stop offset="0.59" stop-color="#a65a00" stop-opacity="0.8"/><stop offset="1" stop-color="#ff921e" stop-opacity="0"/></linearGradient><linearGradient id="gradient_wing_tip_right_glare_1"><stop offset="0" stop-color="#7c7c7c"/><stop offset="1" stop-color="#7c7c7c" stop-opacity="0.33"/></linearGradient><linearGradient id="gradient_wing_tip_right_glare_2"><stop offset="0" stop-color="#7c7c7c"/><stop offset="1" stop-color="#7c7c7c" stop-opacity="0.33"/></linearGradient><linearGradient id="gradient_foot_left_layer_1"><stop offset="0" stop-color="#b98309"/><stop offset="1" stop-color="#382605"/></linearGradient><linearGradient id="gradient_foot_left_glare"><stop offset="0" stop-color="#ebc40c"/><stop offset="1" stop-color="#ebc40c" stop-opacity="0"/></linearGradient><linearGradient id="gradient_foot_right_shadow"><stop offset="0" stop-color="#000000"/><stop offset="1" stop-color="#000000" stop-opacity="0"/></linearGradient><linearGradient id="gradient_foot_right_layer_1"><stop offset="0" stop-color="#3e2a06"/><stop offset="1" stop-color="#ad780a"/></linearGradient><linearGradient id="gradient_foot_right_glare"><stop offset="0" stop-color="#f3cd0c"/><stop offset="1" stop-color="#f3cd0c" stop-opacity="0"/></linearGradient><linearGradient id="gradient_eyeball"><stop offset="0" stop-color="#fefefc"/><stop offset="0.75" stop-color="#fefefc"/><stop offset="1" stop-color="#d4d4d4"/></linearGradient><linearGradient id="gradient_pupil_left_glare"><stop offset="0" stop-color="#757574" stop-opacity="0"/><stop offset="0.25" stop-color="#757574"/><stop offset="0.5" stop-color="#757574"/><stop offset="1" stop-color="#757574" stop-opacity="0"/></linearGradient><linearGradient id="gradient_pupil_right_glare_2"><stop offset="0" stop-color="#949494" stop-opacity="0.39"/><stop offset="0.5" stop-color="#949494"/><stop offset="1" stop-color="#949494" stop-opacity="0.39"/></linearGradient><linearGradient id="gradient_eyelid_left"><stop offset="0" stop-color="#c8c8c8"/><stop offset="1" stop-color="#797978"/></linearGradient><linearGradient id="gradient_eyelid_right"><stop offset="0" stop-color="#747474"/><stop offset="0.13" stop-color="#8c8c8c"/><stop offset="0.25" stop-color="#a4a4a4"/><stop offset="0.5" stop-color="#d4d4d4"/><stop offset="0.62" stop-color="#d4d4d4"/><stop offset="1" stop-color="#7c7c7c"/></linearGradient><linearGradient id="gradient_eyebrow"><stop offset="0" stop-color="#646464" stop-opacity="0"/><stop offset="0.31" stop-color="#646464" stop-opacity="0.58"/><stop offset="0.47" stop-color="#646464"/><stop offset="0.73" stop-color="#646464" stop-opacity="0.26"/><stop offset="1" stop-color="#646464" stop-opacity="0"/></linearGradient><linearGradient id="gradient_beak_base"><stop offset="0" stop-color="#020204"/><stop offset="0.73" stop-color="#020204"/><stop offset="1" stop-color="#5c5c5c"/></linearGradient><linearGradient id="gradient_mandible_lower"><stop offset="0" stop-color="#d2940a"/><stop offset="0.75" stop-color="#d89c08"/><stop offset="0.87" stop-color="#b67e07"/><stop offset="1" stop-color="#946106"/></linearGradient><linearGradient id="gradient_mandible_upper"><stop offset="0" stop-color="#ad780a"/><stop offset="0.12" stop-color="#d89e08"/><stop offset="0.25" stop-color="#edb80b"/><stop offset="0.39" stop-color="#ebc80d"/><stop offset="0.53" stop-color="#f5d838"/><stop offset="0.77" stop-color="#f6d811"/><stop offset="1" stop-color="#f5cd31"/></linearGradient><linearGradient id="gradient_nares"><stop offset="0" stop-color="#3a2903"/><stop offset="0.55" stop-color="#735208"/><stop offset="1" stop-color="#ac8c04"/></linearGradient><linearGradient id="gradient_beak_corner"><stop offset="0" stop-color="#f5ce2d"/><stop offset="1" stop-color="#d79b08"/></linearGradient><radialGradient id="fill_belly_shadow_left" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(61.18,121.19) scale(19,18)"/><radialGradient id="fill_belly_shadow_right" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(125.74,131.6) scale(23.6,18)"/><radialGradient id="fill_belly_shadow_middle" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(94.21,127.47) scale(9.35,10)"/><linearGradient id="fill_foot_left_base" href="#gradient_foot_left_layer_1" xlink:href="#gradient_foot_left_layer_1" gradientUnits="userSpaceOnUse" x1="23.18" y1="193.01" x2="64.31" y2="262.02"/><linearGradient id="fill_foot_left_glare" href="#gradient_foot_left_glare" xlink:href="#gradient_foot_left_glare" gradientUnits="userSpaceOnUse" x1="64.47" y1="210.83" x2="77.41" y2="235.21"/><linearGradient id="fill_foot_right_shadow" href="#gradient_foot_right_shadow" xlink:href="#gradient_foot_right_shadow" gradientUnits="userSpaceOnUse" x1="146.93" y1="211.96" x2="150.2" y2="235.73"/><linearGradient id="fill_foot_right_base" href="#gradient_foot_right_layer_1" xlink:href="#gradient_foot_right_layer_1" gradientUnits="userSpaceOnUse" x1="151.5" y1="253.02" x2="192.94" y2="185.84"/><linearGradient id="fill_foot_right_glare" href="#gradient_foot_right_glare" xlink:href="#gradient_foot_right_glare" gradientUnits="userSpaceOnUse" x1="162.81" y1="180.67" x2="161.59" y2="191.64"/><radialGradient id="fill_wing_tip_right_shadow_lower" href="#gradient_wing_tip_right_shadow" xlink:href="#gradient_wing_tip_right_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(169.71,194.53) rotate(15) scale(19.66,20.64)"/><radialGradient id="fill_wing_tip_right_shadow_upper" href="#gradient_wing_tip_right_shadow" xlink:href="#gradient_wing_tip_right_shadow" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(169.71,189.89) rotate(-2.42) scale(19.74,14.86)"/><radialGradient id="fill_wing_tip_right_glare_1" href="#gradient_wing_tip_right_glare_1" xlink:href="#gradient_wing_tip_right_glare_1" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(184.65,176.62) rotate(23.5) scale(6.95,3.21)"/><linearGradient id="fill_wing_tip_right_glare_2" href="#gradient_wing_tip_right_glare_2" xlink:href="#gradient_wing_tip_right_glare_2" gradientUnits="userSpaceOnUse" x1="165.69" y1="173.58" x2="168.27" y2="173.47"/><radialGradient id="fill_eyeball_left" href="#gradient_eyeball" xlink:href="#gradient_eyeball" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(86.49,51.41) rotate(-0.6) scale(10.24,15.68)"/><linearGradient id="fill_pupil_left_glare" href="#gradient_pupil_left_glare" xlink:href="#gradient_pupil_left_glare" gradientUnits="userSpaceOnUse" x1="84.29" y1="46.64" x2="89.32" y2="55.63"/><radialGradient id="fill_eyelid_left" href="#gradient_eyelid_left" xlink:href="#gradient_eyelid_left" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(84.89,43.74) rotate(-9.35) scale(6.25,5.77)"/><linearGradient id="fill_eyebrow_left" href="#gradient_eyebrow" xlink:href="#gradient_eyebrow" gradientUnits="userSpaceOnUse" x1="83.59" y1="32.51" x2="94.48" y2="43.63"/><radialGradient id="fill_eyeball_right" href="#gradient_eyeball" xlink:href="#gradient_eyeball" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(118.06,51.41) rotate(-1.8) scale(13.64,15.68)"/><linearGradient id="fill_pupil_right_glare" href="#gradient_pupil_right_glare_2" xlink:href="#gradient_pupil_right_glare_2" gradientUnits="userSpaceOnUse" x1="117.87" y1="47.25" x2="123.66" y2="54.11"/><linearGradient id="fill_eyelid_right" href="#gradient_eyelid_right" xlink:href="#gradient_eyelid_right" gradientUnits="userSpaceOnUse" x1="112.9" y1="36.23" x2="131.32" y2="47.01"/><linearGradient id="fill_eyebrow_right" href="#gradient_eyebrow" xlink:href="#gradient_eyebrow" gradientUnits="userSpaceOnUse" x1="119.16" y1="31.56" x2="131.42" y2="43.14"/><radialGradient id="fill_beak_base" href="#gradient_beak_base" xlink:href="#gradient_beak_base" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(97.64,60.12) rotate(-36) scale(11.44,10.38)"/><radialGradient id="fill_mandible_lower_base" href="#gradient_mandible_lower" xlink:href="#gradient_mandible_lower" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(109.77,70.61) rotate(-22.4) scale(27.15,19.07)"/><linearGradient id="fill_mandible_upper_base" href="#gradient_mandible_upper" xlink:href="#gradient_mandible_upper" gradientUnits="userSpaceOnUse" x1="78.09" y1="69.26" x2="126.77" y2="68.88"/><radialGradient id="fill_naris_left" href="#gradient_nares" xlink:href="#gradient_nares" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(92.11,59.88) scale(1.32,1.42)"/><radialGradient id="fill_naris_right" href="#gradient_nares" xlink:href="#gradient_nares" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(104.65,59.7) scale(2.78,1.62)"/><linearGradient id="fill_beak_corner" href="#gradient_beak_corner" xlink:href="#gradient_beak_corner" gradientUnits="userSpaceOnUse" x1="126.74" y1="67.49" x2="126.74" y2="71.09"/><filter id="blur_belly_shadow_left"><feGaussianBlur stdDeviation="0.64 0.55"/></filter><filter id="blur_belly_shadow_right"><feGaussianBlur stdDeviation="0.98"/></filter><filter id="blur_belly_shadow_middle"><feGaussianBlur stdDeviation="0.68"/></filter><filter id="blur_belly_shadow_lower" x="-0.8" width="2.6" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="1.25"/></filter><filter id="blur_belly_glare" x="-0.8" width="2.6" y="-0.5" height="2"><feGaussianBlur stdDeviation="1.78 2.19"/></filter><filter id="blur_head_glare" x="-0.3" width="1.6" y="-0.3" height="1.6"><feGaussianBlur stdDeviation="1.73"/></filter><filter id="blur_neck_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.78"/></filter><filter id="blur_wing_left_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.98"/></filter><filter id="blur_wing_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="1.19 1.17"/></filter><filter id="blur_foot_left_layer_1" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="3.38"/></filter><filter id="blur_foot_left_layer_2"><feGaussianBlur stdDeviation="2.1 2.06"/></filter><filter id="blur_foot_left_glare"><feGaussianBlur stdDeviation="0.32"/></filter><filter id="blur_foot_right_shadow"><feGaussianBlur stdDeviation="1.95 1.9"/></filter><filter id="blur_foot_right_layer_1" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="4.12"/></filter><filter id="blur_foot_right_layer_2" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="3.12 3.37"/></filter><filter id="blur_foot_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.41"/></filter><filter id="blur_wing_tip_right_shadow_lower" x="-0.3" width="1.6" y="-0.3" height="1.6"><feGaussianBlur stdDeviation="2.45"/></filter><filter id="blur_wing_tip_right_shadow_upper" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="1.12 0.81"/></filter><filter id="blur_wing_tip_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.88"/></filter><filter id="blur_pupil_left_glare" x="-0.3" width="1.6" y="-0.3" height="1.6"><feGaussianBlur stdDeviation="0.44"/></filter><filter id="blur_eyebrow_left"><feGaussianBlur stdDeviation="0.12"/></filter><filter id="blur_pupil_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.45"/></filter><filter id="blur_eyebrow_right"><feGaussianBlur stdDeviation="0.13"/></filter><filter id="blur_beak_shadow_lower" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="1.75"/></filter><filter id="blur_beak_shadow_upper"><feGaussianBlur stdDeviation="0.8 0.74"/></filter><filter id="blur_mandible_lower_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.77"/></filter><filter id="blur_mandible_upper_shadow"><feGaussianBlur stdDeviation="0.65"/></filter><filter id="blur_mandible_upper_glare" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.73"/></filter><filter id="blur_naris_left" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.1"/></filter><filter id="blur_naris_right"><feGaussianBlur stdDeviation="0.1"/></filter><filter id="blur_beak_corner" x="-0.2" width="1.4" y="-0.2" height="1.4"><feGaussianBlur stdDeviation="0.23"/></filter><clipPath id="clip_body"><use href="#body_base" xlink:href="#body_base"/></clipPath><clipPath id="clip_wing_left"><use href="#wing_left_base" xlink:href="#wing_left_base"/></clipPath><clipPath id="clip_wing_right"><use href="#wing_right_base" xlink:href="#wing_right_base"/></clipPath><clipPath id="clip_foot_left"><use href="#foot_left_base" xlink:href="#foot_left_base"/></clipPath><clipPath id="clip_foot_right"><use href="#foot_right_base" xlink:href="#foot_right_base"/></clipPath><clipPath id="clip_wing_tip_right"><use href="#wing_tip_right_base" xlink:href="#wing_tip_right_base"/></clipPath><clipPath id="clip_eye_left"><use href="#eyeball_left" xlink:href="#eyeball_left"/></clipPath><clipPath id="clip_pupil_left"><use href="#pupil_left_base" xlink:href="#pupil_left_base"/></clipPath><clipPath id="clip_eye_right"><use href="#eyeball_right" xlink:href="#eyeball_right"/></clipPath><clipPath id="clip_pupil_right"><use href="#pupil_right_base" xlink:href="#pupil_right_base"/></clipPath><clipPath id="clip_mandible_lower"><use href="#mandible_lower_base" xlink:href="#mandible_lower_base"/></clipPath><clipPath id="clip_mandible_upper"><use href="#mandible_upper_base" xlink:href="#mandible_upper_base"/></clipPath><clipPath id="clip_beak"><use href="#mandible_lower_base" xlink:href="#mandible_lower_base"/><use href="#mandible_upper_base" xlink:href="#mandible_upper_base"/></clipPath></defs><g id="tux"><g id="body"><path id="body_base" fill="#020204" d="m 106.95,0 c -6,0 -12.02,1.18 -17.46,4.12 -5.78,3.11 -10.52,8.09 -13.43,13.97 -2.92,5.88 -4.06,12.16 -4.24,19.08 -0.33,13.14 0.3,26.92 1.29,39.41 0.26,3.8 0.74,6.02 0.25,9.93 -1.62,8.3 -8.88,13.88 -12.76,21.17 -4.27,8.04 -6.07,17.13 -9.29,25.65 -2.95,7.79 -7.09,15.1 -9.88,22.95 -3.91,10.97 -5.08,23.03 -2.5,34.39 1.97,8.66 6.08,16.78 11.62,23.73 -0.8,1.44 -1.58,2.91 -2.4,4.34 -2.57,4.43 -5.71,8.64 -7.17,13.55 -0.73,2.45 -1.02,5.07 -0.55,7.59 0.47,2.52 1.75,4.93 3.75,6.53 1.31,1.04 2.9,1.72 4.53,2.1 1.63,0.37 3.32,0.46 5,0.43 6.37,-0.14 12.55,-2.07 18.71,-3.69 3.66,-0.96 7.34,-1.81 11.03,-2.58 13.14,-2.69 27.8,-1.61 39.99,0.15 4.13,0.63 8.23,1.44 12.29,2.43 6.36,1.54 12.69,3.5 19.23,3.69 1.72,0.05 3.46,-0.03 5.14,-0.4 1.68,-0.38 3.31,-1.06 4.65,-2.13 2.01,-1.6 3.29,-4.02 3.76,-6.54 0.47,-2.52 0.18,-5.15 -0.56,-7.61 -1.48,-4.92 -4.65,-9.11 -7.27,-13.52 -1.04,-1.75 -2,-3.53 -3.03,-5.28 7.9,-8.87 14.26,-19.13 17.94,-30.4 4.01,-12.3 4.75,-25.55 3.06,-38.38 -1.69,-12.83 -5.76,-25.27 -11.11,-37.05 -6.72,-14.76 -12.37,-20.1 -16.47,-33.07 -4.42,-14.02 -0.77,-30.61 -4.06,-43.32 -1.17,-4.32 -3.04,-8.45 -5.45,-12.23 -2.82,-4.43 -6.4,-8.39 -10.65,-11.47 -6.78,-4.92 -15.3,-7.54 -23.96,-7.54 z"/><path id="belly" fill="#fdfdfb" d="m 83.13,74 c -0.9,1.13 -1.48,2.49 -1.84,3.89 -0.35,1.4 -0.48,2.85 -0.54,4.3 -0.11,2.89 0.07,5.83 -0.7,8.62 -0.82,2.98 -2.65,5.57 -4.44,8.08 -3.11,4.36 -6.25,8.84 -7.78,13.97 -0.93,3.1 -1.24,6.39 -0.91,9.62 -3.47,5.1 -6.48,10.53 -8.98,16.18 -3.78,8.57 -6.37,17.69 -7.28,27.01 -1.12,11.41 0.34,23.15 4.85,33.69 3.25,7.63 8.11,14.6 14.38,20.04 3.18,2.76 6.72,5.11 10.5,6.97 13.11,6.45 29.31,6.46 42.2,-0.41 6.74,-3.59 12.43,-8.84 17.91,-14.15 3.3,-3.2 6.59,-6.48 9.11,-10.32 4.85,-7.41 6.54,-16.41 7.59,-25.2 1.83,-15.36 1.89,-31.6 -4.85,-45.53 -2.32,-4.8 -5.41,-9.22 -9.12,-13.05 -0.98,-6.7 -2.93,-13.27 -5.76,-19.42 -2.05,-4.45 -4.54,-8.68 -6.44,-13.18 -0.78,-1.85 -1.46,-3.75 -2.32,-5.56 -0.87,-1.81 -1.93,-3.55 -3.39,-4.94 -1.48,-1.42 -3.33,-2.43 -5.28,-3.07 -1.95,-0.65 -4.01,-0.94 -6.06,-1.04 -4.11,-0.21 -8.22,0.33 -12.33,0.16 -3.27,-0.13 -6.53,-0.7 -9.8,-0.51 -1.63,0.1 -3.26,0.39 -4.78,1.01 -1.52,0.61 -2.92,1.56 -3.94,2.84 z"/><g id="body_self_shadows"><path id="belly_shadow_left" opacity="0.25" fill="url(#fill_belly_shadow_left)" filter="url(#blur_belly_shadow_left)" clip-path="url(#clip_body)" d="m 68.67,115.18 c 0.87,1.31 -0.55,5.84 19.86,2.94 0,0 -3.59,0.39 -7.12,1.21 -5.49,1.84 -10.27,3.89 -13.97,6.61 -3.65,2.7 -6.33,6.21 -9.68,9.22 0,0 5.43,-9.92 6.78,-12.91 1.36,-2.99 -0.22,-2.85 0.85,-7.25 1.07,-4.4 3.69,-8.63 3.69,-8.63 0,0 -2.14,6.22 -0.41,8.81 z"/><path id="belly_shadow_right" opacity="0.42" fill="url(#fill_belly_shadow_right)" filter="url(#blur_belly_shadow_right)" clip-path="url(#clip_body)" d="m 134.28,113.99 c -4.16,2.9 -6.6,2.56 -11.64,3.12 -5.05,0.57 -18.7,0.36 -18.7,0.36 0,0 1.97,-0.03 6.36,0.78 4.38,0.82 13.31,1.6 18.34,3.51 5.04,1.92 6.87,2.47 9.93,4.4 4.35,2.75 7.55,7.06 11.71,10.08 0,0 0.2,-4 -1.48,-6.99 -1.68,-2.99 -6.2,-7.7 -7.53,-12.1 -1.32,-4.4 -1.96,-13.04 -1.96,-13.04 0,0 -0.88,6.99 -5.03,9.88 z"/><path id="belly_shadow_middle" opacity="0.2" fill="url(#fill_belly_shadow_middle)" filter="url(#blur_belly_shadow_middle)" clip-path="url(#clip_body)" d="m 95.17,107.81 c -0.16,1.25 -0.36,2.5 -0.6,3.74 -0.12,0.61 -0.26,1.22 -0.48,1.8 -0.23,0.58 -0.56,1.14 -1.02,1.55 -0.41,0.37 -0.9,0.62 -1.4,0.85 -1.94,0.88 -4.01,1.47 -6.12,1.74 0.84,0.06 1.68,0.14 2.53,0.23 0.53,0.06 1.06,0.12 1.57,0.25 0.52,0.14 1.03,0.34 1.46,0.65 0.47,0.35 0.84,0.82 1.12,1.34 0.55,1.02 0.73,2.2 0.83,3.37 0.13,1.48 0.14,2.98 0.03,4.46 0.1,-0.99 0.31,-1.98 0.62,-2.92 0.57,-1.72 1.47,-3.32 2.69,-4.65 0.49,-0.52 1.02,-1.01 1.6,-1.42 1.79,-1.26 4.07,-1.81 6.24,-1.51 -2.21,0.09 -4.44,-0.6 -6.2,-1.93 -0.9,-0.68 -1.68,-1.52 -2.22,-2.5 -0.84,-1.52 -1.08,-3.37 -0.65,-5.05 z"/><path id="belly_shadow_lower" opacity="0.11" fill="#000000" filter="url(#blur_belly_shadow_lower)" clip-path="url(#clip_body)" d="m 89.85,137.14 c -1.06,4.03 -1.79,8.15 -2.17,12.31 -0.55,5.87 -0.42,11.78 -0.74,17.67 -0.26,4.99 -0.85,10.04 0.02,14.97 0.41,2.35 1.15,4.64 2.2,6.78 0.16,-0.82 0.29,-1.64 0.36,-2.47 0.37,-4 -0.3,-8.01 -0.53,-12.01 -0.4,-7.02 0.57,-14.04 0.97,-21.06 0.3,-5.39 0.27,-10.8 -0.11,-16.19 z"/></g><g id="body_glare"><path id="belly_glare" opacity="0.75" fill="#7c7c7c" filter="url(#blur_belly_glare)" clip-path="url(#clip_body)" d="m 160.08,131.23 c 1.03,-0.16 7.34,5.21 6.48,7.21 -0.86,1.99 -2.49,0.79 -3.65,0.8 -1.16,0.02 -4.33,1.46 -4.86,0.55 -0.54,-0.91 1.4,-3.03 2.41,-4.81 0.82,-1.43 -1.4,-3.59 -0.38,-3.75 z"/><path id="head_glare" fill="#7c7c7c" filter="url(#blur_head_glare)" clip-path="url(#clip_body)" d="m 121.52,11.12 c -2.21,1.56 -1.25,3.51 -0.3,5.46 0.95,1.96 -2.09,7.59 -2.12,7.83 -0.03,0.24 5.98,-2.85 7.62,-4.87 1.94,-2.37 6.83,3.22 6.56,2.37 0.01,-1.52 -9.55,-12.34 -11.76,-10.79 z"/><path id="neck_glare" fill="#838384" filter="url(#blur_neck_glare)" clip-path="url(#clip_body)" d="m 138.27,76.63 c -1.86,1.7 0.88,4.25 2.17,7.24 0.81,1.86 3.04,4.49 5.2,4.07 1.63,-0.32 2.63,-2.66 2.48,-4.3 -0.3,-3.18 -2.98,-3.93 -4.93,-5.02 -1.54,-0.86 -3.61,-3.18 -4.92,-1.99 z"/></g></g><g id="wings"><g id="wing_left"><path id="wing_left_base" fill="#020204" d="m 63.98,100.91 c -6.1,6.92 -12.37,13.63 -15.81,21.12 -1.71,3.8 -2.51,7.93 -3.68,11.93 -1.32,4.54 -3.12,8.94 -5.14,13.22 -1.87,3.95 -3.93,7.81 -5.98,11.66 -1.5,2.81 -3.02,5.67 -3.54,8.81 -0.41,2.48 -0.18,5.04 0.46,7.47 0.63,2.43 1.64,4.75 2.79,6.98 4.88,9.55 12.21,17.77 20.89,24.07 3.94,2.85 8.15,5.32 12.58,7.35 2.4,1.09 4.92,2.07 7.56,2.11 1.32,0.03 2.65,-0.19 3.86,-0.72 1.2,-0.53 2.28,-1.38 3,-2.49 0.88,-1.36 1.18,-3.05 1,-4.66 -0.18,-1.61 -0.81,-3.15 -1.65,-4.53 -2.06,-3.38 -5.31,-5.83 -8.44,-8.25 -6.76,-5.23 -13.29,-10.76 -19.55,-16.58 -1.76,-1.65 -3.53,-3.34 -4.76,-5.42 -1.2,-2.02 -1.85,-4.32 -2.29,-6.63 -1.21,-6.33 -0.9,-12.99 1.25,-19.07 0.85,-2.38 1.96,-4.65 3.04,-6.93 1.86,-3.95 3.62,-7.98 6.07,-11.6 3.05,-4.51 7.13,-8.33 9.61,-13.17 2.1,-4.09 2.95,-8.68 3.76,-13.2 0.64,-3.54 1.85,-7 2.47,-10.54 -1.21,2.3 -5.11,6.07 -7.5,9.07 z"/><path id="wing_left_glare" opacity="0.95" fill="#7c7c7c" filter="url(#blur_wing_left_glare)" clip-path="url(#clip_wing_left)" d="m 56.96,126.1 c -2,1.84 -3.73,3.97 -5.13,6.31 -2.3,3.84 -3.65,8.16 -5.33,12.31 -1.24,3.09 -2.69,6.2 -2.86,9.53 -0.09,1.71 0.16,3.42 0.22,5.13 0.06,1.71 -0.1,3.49 -0.94,4.98 -0.7,1.25 -1.87,2.23 -3.22,2.71 1.83,0.61 3.45,1.79 4.6,3.33 0.96,1.3 1.58,2.81 2.41,4.18 0.68,1.12 1.51,2.16 2.54,2.97 1.02,0.82 2.25,1.4 3.54,1.56 1.79,0.23 3.65,-0.36 4.97,-1.58 -1.66,-15.55 -0.14,-31.42 4.44,-46.37 0.29,-0.94 0.59,-1.89 0.67,-2.87 0.07,-0.99 -0.12,-2.03 -0.72,-2.81 -0.31,-0.42 -0.74,-0.75 -1.23,-0.96 -0.48,-0.2 -1.02,-0.28 -1.54,-0.21 -0.52,0.06 -1.03,0.26 -1.45,0.57 -0.42,0.32 -0.76,0.74 -0.97,1.22 z"/></g><g id="wing_right"><path id="wing_right_base" fill="#020204" d="m 162.76,127.12 c 5.24,4.22 8.57,10.59 9.6,17.24 0.8,5.18 0.28,10.51 -0.89,15.62 -1.17,5.12 -2.97,10.06 -4.77,15 -0.71,1.96 -1.43,3.95 -1.71,6.02 -0.29,2.08 -0.11,4.27 0.89,6.11 1.15,2.11 3.29,3.56 5.59,4.24 2.27,0.68 4.72,0.66 7.02,0.09 2.3,-0.57 6.17,-1.31 8.04,-2.77 4.75,-3.69 5.88,-10.1 7.01,-15.72 1.17,-5.87 0.6,-12.02 -0.43,-17.95 -1.41,-8.09 -3.78,-15.99 -6.79,-23.62 -2.22,-5.62 -5.06,-10.98 -8.44,-15.96 -3.32,-4.89 -8.02,-8.7 -11.5,-13.48 -1.21,-1.66 -2.66,-3.38 -3.84,-5.06 -2.56,-3.62 -1.98,-2.94 -3.57,-5.29 -1.15,-1.7 -2.97,-2.28 -4.88,-3.02 -1.92,-0.74 -4.06,-0.96 -6.04,-0.41 -2.6,0.73 -4.73,2.79 -5.86,5.24 -1.13,2.46 -1.33,5.28 -0.89,7.95 0.57,3.44 2.14,6.64 3.92,9.64 2,3.39 4.32,6.66 7.35,9.18 3.16,2.63 6.98,4.37 10.19,6.95 z"/><path id="wing_right_glare" fill="#838384" filter="url(#blur_wing_right_glare)" clip-path="url(#clip_wing_right)" d="m 150.42,118.99 c 0.42,0.4 0.86,0.81 1.31,1.19 3.22,2.63 4.93,5.58 8.2,8.16 5.34,4.22 10.75,11.5 11.8,18.15 0.82,5.19 -0.26,8.01 -1.58,14.12 -1.32,6.12 -5.06,14.78 -7.09,20.68 -0.8,2.35 1.64,1.38 1.32,3.86 -0.16,1.22 -0.18,2.45 -0.03,3.67 0.02,-0.23 0.03,-0.48 0.06,-0.71 0.39,-3.38 1.42,-6.63 2.55,-9.82 2.17,-6.13 4.66,-12.15 6.38,-18.45 1.72,-6.29 1.53,-10.82 0.63,-16.23 -1.13,-6.81 -5.09,-13.09 -10.69,-17.24 -3.97,-2.93 -8.64,-4.81 -12.86,-7.38 z"/></g></g><g id="feet"><g id="foot_left"><path id="foot_left_base" fill="url(#fill_foot_left_base)" d="m 34.98,175.33 c 1.38,-0.57 2.93,-0.68 4.39,-0.41 1.47,0.27 2.86,0.91 4.09,1.74 2.47,1.68 4.3,4.12 6.05,6.54 4.03,5.54 7.9,11.2 11.42,17.08 2.85,4.78 5.46,9.71 8.76,14.18 2.15,2.93 4.57,5.64 6.73,8.55 2.16,2.92 4.07,6.08 5.03,9.58 1.25,4.55 0.76,9.56 -1.4,13.75 -1.52,2.95 -3.86,5.48 -6.7,7.19 -2.84,1.71 -5.83,2.47 -9.15,2.47 -5.27,0 -10.42,-2.83 -15.32,-4.78 -9.98,-3.98 -20.82,-5.22 -31.11,-8.32 -3.16,-0.95 -6.27,-2.08 -9.45,-2.95 -1.42,-0.39 -2.85,-0.73 -4.19,-1.34 -1.34,-0.6 -2.59,-1.51 -3.33,-2.77 -0.57,-0.98 -0.8,-2.13 -0.8,-3.26 0,-1.14 0.28,-2.26 0.67,-3.32 0.77,-2.13 2.02,-4.06 2.86,-6.17 1.37,-3.44 1.62,-7.23 1.43,-10.93 -0.18,-3.69 -0.78,-7.36 -1.03,-11.05 -0.12,-1.65 -0.16,-3.32 0.16,-4.95 0.31,-1.62 1.01,-3.21 2.2,-4.35 1.1,-1.06 2.55,-1.69 4.05,-2 1.49,-0.31 3.03,-0.32 4.55,-0.29 1.52,0.03 3.05,0.12 4.57,-0.01 1.52,-0.12 3.05,-0.46 4.37,-1.22 1.26,-0.72 2.29,-1.79 3.14,-2.96 0.85,-1.17 1.54,-2.45 2.25,-3.72 0.7,-1.26 1.43,-2.52 2.36,-3.64 0.92,-1.12 2.06,-2.09 3.4,-2.64 z"/><path id="foot_left_layer_1" fill="#d99a03" filter="url(#blur_foot_left_layer_1)" clip-path="url(#clip_foot_left)" d="m 37.16,177.7 c 1.25,-0.5 2.67,-0.56 3.98,-0.26 1.32,0.3 2.55,0.94 3.61,1.77 2.14,1.65 3.62,3.97 5.05,6.26 3.42,5.54 6.76,11.15 9.92,16.86 2.4,4.31 4.68,8.7 7.62,12.65 1.95,2.62 4.18,5.03 6.17,7.62 1.99,2.59 3.76,5.41 4.64,8.56 1.14,4.05 0.68,8.54 -1.28,12.26 -1.42,2.68 -3.58,4.96 -6.2,6.48 -2.61,1.52 -5.67,2.28 -8.69,2.14 -4.82,-0.22 -9.23,-2.63 -13.77,-4.26 -8.71,-3.16 -18.14,-3.59 -27.08,-6.05 -3.2,-0.87 -6.32,-2.03 -9.53,-2.84 -1.43,-0.36 -2.88,-0.66 -4.23,-1.23 -1.35,-0.57 -2.62,-1.45 -3.36,-2.72 -0.54,-0.95 -0.76,-2.06 -0.73,-3.15 0.04,-1.09 0.31,-2.17 0.7,-3.19 0.78,-2.04 2,-3.88 2.78,-5.92 1.19,-3.08 1.34,-6.47 1.12,-9.76 -0.22,-3.29 -0.8,-6.56 -1,-9.85 -0.08,-1.48 -0.1,-2.97 0.2,-4.41 0.3,-1.45 0.93,-2.85 1.98,-3.89 1.14,-1.13 2.7,-1.74 4.29,-1.99 1.58,-0.24 3.19,-0.13 4.78,0.01 1.6,0.14 3.2,0.32 4.8,0.23 1.6,-0.1 3.22,-0.49 4.54,-1.39 1.2,-0.81 2.1,-2 2.79,-3.27 0.69,-1.27 1.18,-2.64 1.71,-3.98 0.52,-1.35 1.09,-2.69 1.91,-3.89 0.82,-1.19 1.93,-2.24 3.28,-2.79 z"/><path id="foot_left_layer_2" fill="#f5bd0c" filter="url(#blur_foot_left_layer_2)" clip-path="url(#clip_foot_left)" d="m 35.99,174.57 c 1.22,-0.6 2.65,-0.72 3.98,-0.45 1.33,0.27 2.57,0.92 3.62,1.77 2.09,1.7 3.43,4.13 4.67,6.51 2.84,5.46 5.5,11.04 8.9,16.19 2.48,3.73 5.33,7.2 7.83,10.92 3.39,5.03 6.15,10.57 7.29,16.5 0.76,4 0.74,8.31 -1.18,11.9 -1.27,2.37 -3.32,4.31 -5.75,5.52 -2.42,1.22 -5.21,1.71 -7.92,1.47 -4.27,-0.37 -8.14,-2.47 -12.16,-3.94 -7.13,-2.59 -14.84,-3.22 -22.18,-5.18 -3.09,-0.82 -6.13,-1.89 -9.26,-2.54 -1.39,-0.29 -2.8,-0.5 -4.12,-1 -1.32,-0.5 -2.57,-1.33 -3.25,-2.55 -0.47,-0.86 -0.63,-1.86 -0.56,-2.84 0.07,-0.97 0.36,-1.92 0.74,-2.83 0.77,-1.8 1.9,-3.46 2.49,-5.32 0.88,-2.75 0.52,-5.72 -0.14,-8.53 -0.65,-2.8 -1.6,-5.55 -1.89,-8.41 -0.13,-1.27 -0.13,-2.57 0.17,-3.82 0.29,-1.25 0.88,-2.45 1.81,-3.34 1.2,-1.15 2.88,-1.73 4.56,-1.89 1.67,-0.16 3.35,0.06 5.01,0.3 1.66,0.24 3.34,0.5 5.01,0.42 1.68,-0.07 3.39,-0.51 4.7,-1.54 1.3,-1.02 2.12,-2.53 2.59,-4.09 0.47,-1.57 0.62,-3.2 0.81,-4.82 0.19,-1.62 0.43,-3.26 1.06,-4.77 0.63,-1.51 1.69,-2.9 3.17,-3.64 z"/><path id="foot_left_glare" fill="url(#fill_foot_left_glare)" filter="url(#blur_foot_left_glare)" clip-path="url(#clip_foot_left)" d="m 51.2,188.21 c 2.25,4.06 3.62,8.72 5.85,12.82 2.05,3.77 4.38,7.65 6.46,11.12 0.93,1.55 3.09,3.93 5.27,7.62 1.98,3.34 3.98,8.01 5.1,9.58 -0.64,-1.84 -1.96,-6.77 -3.54,-10.28 -1.47,-3.28 -3.19,-5.15 -4.24,-6.92 -2.08,-3.47 -4.33,-6.6 -6.47,-9.91 -2.95,-4.57 -5.2,-9.68 -8.43,-14.03 z"/></g><g id="foot_right"><path id="foot_right_shadow" opacity="0.2" fill="url(#fill_foot_right_shadow)" filter="url(#blur_foot_right_shadow)" clip-path="url(#clip_body)" d="m 198.7,215.61 c -0.4,1.33 -1.02,2.62 -1.81,3.8 -1.75,2.59 -4.3,4.55 -6.84,6.35 -4.33,3.07 -8.85,5.89 -12.89,9.38 -2.7,2.34 -5.17,4.97 -7.45,7.73 -1.95,2.36 -3.79,4.84 -6.02,6.94 -2.25,2.12 -4.89,3.84 -7.74,4.77 -3.47,1.13 -7.13,1.08 -10.47,0.22 -2.34,-0.6 -4.63,-1.64 -6.08,-3.53 -1.45,-1.89 -1.92,-4.44 -2.09,-6.94 -0.3,-4.42 0.23,-8.93 0.71,-13.42 0.4,-3.73 0.77,-7.46 0.92,-11.18 0.27,-6.77 -0.18,-13.47 -1.09,-20.05 -0.16,-1.11 -0.32,-2.22 -0.23,-3.35 0.09,-1.14 0.47,-2.32 1.27,-3.2 0.74,-0.81 1.77,-1.29 2.79,-1.52 1.02,-0.24 2.06,-0.25 3.09,-0.28 2.43,-0.06 4.86,-0.21 7.25,0.01 1.51,0.13 2.99,0.41 4.49,0.55 2.51,0.24 5.12,0.12 7.64,-0.62 2.71,-0.8 5.29,-2.29 8.05,-2.7 1.13,-0.17 2.26,-0.15 3.36,0.01 1.12,0.15 2.24,0.46 3.1,1.15 0.66,0.52 1.14,1.23 1.51,1.99 0.56,1.14 0.9,2.39 1.1,3.68 0.17,1.14 0.24,2.31 0.53,3.41 0.48,1.81 1.58,3.35 2.89,4.6 1.32,1.25 2.85,2.24 4.39,3.22 1.53,0.97 3.07,1.93 4.7,2.73 0.77,0.38 1.56,0.72 2.29,1.15 0.74,0.44 1.42,0.97 1.91,1.67 0.66,0.95 0.92,2.2 0.72,3.43 z"/><path id="foot_right_base" fill="url(#fill_foot_right_base)" d="m 213.47,222.92 c -2.26,2.68 -5.4,4.45 -8.53,6.05 -5.33,2.71 -10.86,5.1 -15.87,8.37 -3.36,2.19 -6.46,4.76 -9.36,7.53 -2.48,2.37 -4.83,4.9 -7.61,6.91 -2.81,2.03 -6.05,3.5 -9.48,4.01 -0.95,0.14 -1.9,0.21 -2.86,0.21 -3.24,0 -6.48,-0.78 -9.46,-2.08 -2.7,-1.17 -5.3,-2.86 -6.86,-5.36 -1.56,-2.52 -1.92,-5.59 -1.92,-8.56 -0.01,-5.23 0.96,-10.41 1.87,-15.57 0.76,-4.29 1.48,-8.58 1.95,-12.91 0.85,-7.86 0.84,-15.81 0.28,-23.71 -0.1,-1.32 -0.21,-2.65 -0.01,-3.96 0.2,-1.31 0.74,-2.62 1.74,-3.48 0.93,-0.8 2.17,-1.16 3.4,-1.22 1.22,-0.07 2.44,0.12 3.65,0.3 2.85,0.42 5.73,0.74 8.52,1.48 1.76,0.46 3.48,1.08 5.23,1.56 2.94,0.79 6.01,1.17 9.02,0.82 3.25,-0.38 6.41,-1.6 9.68,-1.52 1.34,0.03 2.67,0.28 3.95,0.69 1.3,0.41 2.59,1 3.55,1.98 0.73,0.74 1.24,1.67 1.62,2.64 0.57,1.44 0.88,2.98 1.01,4.52 0.11,1.37 0.09,2.76 0.35,4.11 0.43,2.21 1.6,4.24 3.04,5.97 1.45,1.74 3.18,3.21 4.91,4.66 1.73,1.45 3.46,2.89 5.32,4.16 0.87,0.6 1.77,1.16 2.6,1.81 0.83,0.66 1.59,1.42 2.11,2.34 0.45,0.81 0.69,1.72 0.69,2.65 0,0.52 -0.07,1.04 -0.23,1.56 -0.45,1.43 -1.28,2.82 -2.3,4.04 z"/><path id="foot_right_layer_1" fill="#cd8907" filter="url(#blur_foot_right_layer_1)" clip-path="url(#clip_foot_right)" d="m 213.21,216.12 c -0.53,1.33 -1.28,2.58 -2.22,3.67 -2.07,2.42 -4.93,4.01 -7.78,5.44 -4.88,2.44 -9.92,4.58 -14.5,7.52 -3.06,1.97 -5.9,4.28 -8.55,6.78 -2.26,2.13 -4.41,4.41 -6.95,6.21 -2.57,1.83 -5.53,3.14 -8.65,3.6 -3.8,0.56 -7.72,-0.16 -11.25,-1.67 -2.46,-1.06 -4.84,-2.56 -6.27,-4.83 -1.42,-2.26 -1.75,-5.02 -1.75,-7.69 -0.02,-4.71 0.87,-9.37 1.71,-14 0.7,-3.85 1.36,-7.71 1.78,-11.6 0.76,-7.08 0.73,-14.22 0.25,-21.32 -0.08,-1.19 -0.17,-2.39 0.01,-3.57 0.18,-1.18 0.67,-2.35 1.57,-3.13 0.85,-0.73 1.99,-1.05 3.11,-1.1 1.11,-0.06 2.22,0.12 3.33,0.28 2.61,0.38 5.23,0.67 7.78,1.33 1.61,0.42 3.18,0.98 4.78,1.4 2.68,0.72 5.49,1.06 8.24,0.74 2.97,-0.34 5.85,-1.44 8.83,-1.37 1.23,0.03 2.44,0.26 3.61,0.62 1.19,0.37 2.37,0.9 3.25,1.78 0.66,0.67 1.11,1.51 1.48,2.38 0.53,1.29 0.89,2.67 0.91,4.07 0.03,1.46 -0.28,2.92 -0.09,4.37 0.16,1.17 0.66,2.28 1.3,3.28 0.63,1 1.4,1.91 2.17,2.81 1.48,1.75 2.96,3.53 4.82,4.87 2.11,1.53 4.62,2.43 6.8,3.85 0.65,0.43 1.28,0.91 1.74,1.54 0.78,1.06 0.98,2.5 0.54,3.74 z"/><path id="foot_right_layer_2" fill="#f5c021" filter="url(#blur_foot_right_layer_2)" clip-path="url(#clip_foot_right)" d="m 212.91,214.61 c -0.6,1.35 -1.37,2.6 -2.28,3.71 -2.12,2.58 -4.99,4.35 -8,5.49 -4.97,1.88 -10.39,2.13 -15.26,4.27 -2.97,1.3 -5.65,3.26 -8.36,5.12 -2.18,1.49 -4.42,2.94 -6.82,3.98 -2.72,1.19 -5.6,1.85 -8.5,2.32 -1.84,0.29 -3.71,0.51 -5.57,0.41 -1.86,-0.1 -3.72,-0.54 -5.37,-1.49 -1.24,-0.72 -2.36,-1.75 -3.03,-3.1 -0.73,-1.49 -0.86,-3.24 -0.85,-4.94 0.05,-4.5 1.02,-8.96 0.99,-13.47 -0.03,-3.93 -0.81,-7.8 -1.03,-11.72 -0.43,-7.54 1.19,-15.2 -0.24,-22.59 -0.22,-1.19 -0.53,-2.37 -0.52,-3.58 0.01,-0.6 0.1,-1.21 0.31,-1.77 0.22,-0.55 0.56,-1.06 1.01,-1.42 0.39,-0.29 0.84,-0.47 1.31,-0.56 0.46,-0.08 0.94,-0.06 1.41,0.01 0.93,0.15 1.82,0.51 2.73,0.78 2.6,0.78 5.35,0.76 8,1.35 1.66,0.36 3.26,0.97 4.91,1.41 2.75,0.76 5.63,1.08 8.46,0.75 3.04,-0.36 6.01,-1.46 9.07,-1.38 1.26,0.03 2.5,0.26 3.71,0.62 1.21,0.36 2.42,0.87 3.34,1.8 0.65,0.67 1.13,1.52 1.51,2.4 0.57,1.29 0.96,2.69 0.95,4.11 -0.01,0.74 -0.12,1.47 -0.19,2.21 -0.06,0.74 -0.08,1.49 0.09,2.2 0.18,0.72 0.55,1.37 0.97,1.96 0.42,0.59 0.9,1.12 1.34,1.7 1.22,1.61 2.1,3.49 3.05,5.3 0.95,1.81 2.02,3.6 3.53,4.91 2.05,1.77 4.7,2.48 6.99,3.89 0.67,0.41 1.31,0.89 1.78,1.55 0.38,0.52 0.63,1.15 0.73,1.81 0.09,0.65 0.03,1.34 -0.17,1.96 z"/><path id="foot_right_glare" fill="url(#fill_foot_right_glare)" filter="url(#blur_foot_right_glare)" clip-path="url(#clip_foot_right)" d="m 148.08,181.58 c 2.82,-0.76 5.22,1.38 7.27,2.99 1.32,1.13 3.24,0.85 4.86,0.9 2.69,-0.09 5.36,0.45 8.05,0.12 5.3,-0.45 10.49,-1.75 15.81,-1.97 2.54,-0.16 5.4,-0.31 7.59,1.17 0.89,0.62 2.2,3.23 3.07,2.25 -0.36,-2.74 -2.39,-5.39 -5.11,-6.12 -2.14,-0.34 -4.3,0.25 -6.46,0.06 -6.39,-0.15 -12.75,-1.34 -19.16,-1 -4.46,0.04 -8.91,-0.17 -13.37,-0.34 -1.75,-0.36 -2.37,1.19 -3.32,1.79 0.25,0.19 0.34,0.25 0.77,0.15 z"/></g></g><g id="wing_tip_right"><g id="wing_tip_right_shadow"><path id="wing_tip_right_shadow_lower" opacity="0.35" fill="url(#fill_wing_tip_right_shadow_lower)" filter="url(#blur_wing_tip_right_shadow_lower)" clip-path="url(#clip_foot_right)" d="m 185.49,187.61 c -0.48,-0.95 -1.36,-1.66 -2.35,-2.07 -0.98,-0.41 -2.06,-0.55 -3.13,-0.54 -2.13,0.02 -4.25,0.57 -6.38,0.39 -1.79,-0.16 -3.49,-0.83 -5.24,-1.26 -1.81,-0.44 -3.73,-0.61 -5.52,-0.12 -1.92,0.52 -3.61,1.81 -4.67,3.49 -0.94,1.48 -1.38,3.23 -1.52,4.98 -0.14,1.75 0.01,3.5 0.19,5.25 0.12,1.26 0.27,2.52 0.57,3.75 0.31,1.23 0.78,2.43 1.52,3.46 1.07,1.48 2.66,2.54 4.37,3.17 2.8,1.03 5.98,0.98 8.73,-0.15 4.88,-2.12 9.01,-5.92 11.52,-10.6 0.91,-1.68 1.61,-3.47 2.06,-5.31 0.18,-0.74 0.32,-1.49 0.32,-2.25 0.01,-0.75 -0.12,-1.52 -0.47,-2.19 z"/><path id="wing_tip_right_shadow_upper" opacity="0.35" fill="url(#fill_wing_tip_right_shadow_upper)" filter="url(#blur_wing_tip_right_shadow_upper)" clip-path="url(#clip_foot_right)" d="m 185.49,184.89 c -0.48,-0.69 -1.36,-1.2 -2.35,-1.5 -0.98,-0.3 -2.06,-0.39 -3.13,-0.39 -2.13,0.02 -4.25,0.42 -6.38,0.28 -1.79,-0.11 -3.49,-0.6 -5.24,-0.9 -1.81,-0.32 -3.73,-0.45 -5.52,-0.09 -1.92,0.37 -3.61,1.3 -4.67,2.52 -0.94,1.07 -1.38,2.34 -1.52,3.6 -0.14,1.26 0.01,2.53 0.19,3.79 0.12,0.91 0.27,1.83 0.57,2.72 0.31,0.89 0.78,1.76 1.52,2.5 1.07,1.07 2.66,1.83 4.37,2.29 2.8,0.75 5.98,0.71 8.73,-0.11 4.88,-1.53 9.01,-4.28 11.52,-7.66 0.91,-1.22 1.61,-2.51 2.06,-3.84 0.18,-0.54 0.32,-1.08 0.32,-1.62 0.01,-0.55 -0.12,-1.11 -0.47,-1.59 z"/></g><path id="wing_tip_right_base" fill="#020204" d="m 189.55,178.72 c -0.35,-0.95 -0.97,-1.79 -1.72,-2.47 -0.75,-0.68 -1.64,-1.2 -2.57,-1.6 -1.86,-0.79 -3.89,-1.09 -5.89,-1.46 -1.87,-0.35 -3.74,-0.78 -5.62,-1.1 -1.96,-0.33 -3.98,-0.55 -5.92,-0.11 -1.69,0.38 -3.26,1.26 -4.54,2.43 -1.28,1.17 -2.28,2.63 -3,4.21 -1.27,2.79 -1.67,5.92 -1.43,8.97 0.18,2.27 0.76,4.61 2.25,6.32 1.21,1.39 2.92,2.26 4.68,2.78 3.04,0.9 6.35,0.85 9.36,-0.13 4.97,-1.67 9.37,-4.98 12.35,-9.29 0.98,-1.43 1.82,-2.98 2.2,-4.66 0.29,-1.28 0.3,-2.66 -0.15,-3.89 z"/><g id="wing_tip_right_glare"><defs><path id="path_wing_tip_right_glare" d="m 168.89,171.07 c -0.47,0.03 -0.93,0.08 -1.4,0.17 -2.99,0.53 -5.73,2.42 -7.27,5.03 -1.09,1.85 -1.58,4.03 -1.43,6.17 0.07,-1.5 0.46,-2.97 1.19,-4.28 1.23,-2.23 3.47,-3.91 5.98,-4.37 1.54,-0.28 3.13,-0.11 4.68,0.08 1.5,0.19 3,0.39 4.47,0.7 2.28,0.5 4.53,1.26 6.44,2.59 0.44,0.31 0.86,0.66 1.21,1.08 0.35,0.41 0.62,0.89 0.73,1.42 0.15,0.78 -0.07,1.6 -0.46,2.29 -0.39,0.7 -0.92,1.3 -1.48,1.86 -0.46,0.46 -0.94,0.89 -1.43,1.32 2.21,-0.43 4.44,-1.03 6.28,-2.31 0.77,-0.55 1.48,-1.2 1.94,-2.02 0.46,-0.83 0.65,-1.83 0.43,-2.75 -0.16,-0.62 -0.5,-1.19 -0.92,-1.67 -0.42,-0.48 -0.93,-0.87 -1.45,-1.24 -2.31,-1.62 -5.01,-2.65 -7.81,-2.99 -1.8,-0.33 -3.61,-0.61 -5.42,-0.83 -1.41,-0.18 -2.86,-0.33 -4.28,-0.25 z"/></defs><use id="wing_tip_right_glare_1" href="#path_wing_tip_right_glare" xlink:href="#path_wing_tip_right_glare" fill="url(#fill_wing_tip_right_glare_1)" filter="url(#blur_wing_tip_right_glare)" clip-path="url(#clip_wing_tip_right)"/><use id="wing_tip_right_glare_2" href="#path_wing_tip_right_glare" xlink:href="#path_wing_tip_right_glare" fill="url(#fill_wing_tip_right_glare_2)" filter="url(#blur_wing_tip_right_glare)" clip-path="url(#clip_wing_tip_right)"/></g></g><g id="face"><g id="eyes"><g id="eye_left"><path id="eyeball_left" fill="url(#fill_eyeball_left)" d="m 84.45,38.28 c -1.53,0.08 -3,0.79 -4.12,1.84 -1.13,1.05 -1.92,2.43 -2.41,3.88 -0.97,2.92 -0.75,6.08 -0.53,9.15 0.2,2.77 0.41,5.6 1.45,8.18 0.52,1.3 1.25,2.51 2.22,3.51 0.97,0.99 2.2,1.76 3.55,2.09 1.26,0.32 2.62,0.26 3.86,-0.13 1.25,-0.4 2.38,-1.11 3.32,-2.02 1.36,-1.33 2.27,-3.07 2.8,-4.9 0.53,-1.83 0.68,-3.75 0.65,-5.66 -0.04,-2.38 -0.35,-4.77 -1.09,-7.03 -0.75,-2.26 -1.94,-4.4 -3.6,-6.11 -0.8,-0.83 -1.72,-1.55 -2.75,-2.06 -1.04,-0.51 -2.2,-0.8 -3.35,-0.74 z"/><g id="pupil_left"><path id="pupil_left_base" fill="#020204" d="m 80.75,50.99 c -0.32,1.94 -0.33,3.97 0.33,5.81 0.44,1.22 1.17,2.33 2.05,3.28 0.57,0.62 1.23,1.18 1.99,1.55 0.77,0.37 1.65,0.52 2.48,0.32 0.76,-0.19 1.42,-0.68 1.91,-1.29 0.49,-0.61 0.82,-1.34 1.05,-2.09 0.69,-2.21 0.58,-4.62 -0.11,-6.83 -0.49,-1.61 -1.32,-3.16 -2.6,-4.24 -0.62,-0.52 -1.34,-0.93 -2.12,-1.11 -0.78,-0.19 -1.63,-0.14 -2.36,0.19 -0.81,0.37 -1.44,1.07 -1.85,1.86 -0.41,0.79 -0.62,1.67 -0.77,2.55 z"/><path id="pupil_left_glare" fill="url(#fill_pupil_left_glare)" filter="url(#blur_pupil_left_glare)" clip-path="url(#clip_pupil_left)" d="m 84.84,49.59 c 0.21,0.55 0.91,0.75 1.3,1.19 0.37,0.42 0.76,0.87 0.97,1.4 0.39,1.01 -0.39,2.51 0.43,3.23 0.25,0.22 0.77,0.23 1.02,0 0.99,-0.9 0.77,-2.71 0.38,-3.99 -0.36,-1.15 -1.23,-2.25 -2.31,-2.8 -0.5,-0.26 -1.25,-0.47 -1.68,-0.11 -0.27,0.24 -0.24,0.74 -0.11,1.08 z"/></g><path id="eyelid_left" fill="url(#fill_eyelid_left)" clip-path="url(#clip_eye_left)" d="m 81.14,44.46 c 2.32,-1.38 5.13,-1.7 7.82,-1.45 2.68,0.26 5.27,1.04 7.87,1.75 1.91,0.52 3.84,1 5.63,1.84 1.78,0.84 3.44,2.08 4.43,3.8 0.16,0.27 0.29,0.56 0.46,0.83 0.17,0.27 0.37,0.52 0.62,0.71 0.25,0.19 0.57,0.32 0.88,0.3 0.16,-0.01 0.32,-0.05 0.45,-0.13 0.14,-0.08 0.26,-0.2 0.33,-0.34 0.08,-0.16 0.11,-0.35 0.1,-0.53 -0.01,-0.18 -0.05,-0.36 -0.1,-0.54 -0.65,-2.37 -2.19,-4.38 -3.35,-6.55 -0.7,-1.3 -1.28,-2.66 -1.98,-3.96 -2.43,-4.45 -6.42,-7.94 -10.95,-10.21 -4.53,-2.27 -9.59,-3.36 -14.65,-3.65 -5.86,-0.35 -11.73,0.35 -17.51,1.37 -2.51,0.44 -5.06,0.96 -7.27,2.21 -1.11,0.62 -2.13,1.42 -2.92,2.42 -0.8,0.99 -1.36,2.18 -1.55,3.44 -0.17,1.22 0.01,2.47 0.44,3.62 0.42,1.15 1.08,2.2 1.86,3.15 1.54,1.91 3.53,3.39 5.36,5.03 1.83,1.63 3.52,3.44 5.57,4.79 1.02,0.68 2.13,1.24 3.31,1.57 1.18,0.33 2.44,0.42 3.64,0.17 1.24,-0.25 2.4,-0.86 3.41,-1.64 1.01,-0.77 1.88,-1.7 2.71,-2.66 1.66,-1.93 3.21,-4.04 5.39,-5.34 z"/><path id="eyebrow_left" fill="url(#fill_eyebrow_left)" filter="url(#blur_eyebrow_left)" d="m 90.77,36.57 c 2.16,2.02 3.76,4.52 4.85,7.16 -0.48,-2.91 -1.23,-5.26 -3.13,-7.16 -1.16,-1.09 -2.49,-2.05 -3.98,-2.72 -1.32,-0.59 -2.77,-0.96 -3.61,-0.97 -0.83,-0.02 -1.03,0 -1.2,0.01 -0.18,0.01 -0.31,0.01 0.23,0.08 0.54,0.06 1.75,0.39 3.05,0.97 1.3,0.58 2.62,1.54 3.79,2.63 z"/></g><g id="eye_right"><path id="eyeball_right" fill="url(#fill_eyeball_right)" d="m 111.61,38.28 c -2.39,1.65 -4.4,3.94 -5.38,6.68 -1.24,3.45 -0.77,7.31 0.43,10.77 1.22,3.55 3.27,6.93 6.36,9.06 1.54,1.07 3.33,1.8 5.19,2.02 1.87,0.22 3.8,-0.09 5.47,-0.95 2.02,-1.06 3.57,-2.91 4.53,-4.98 0.96,-2.08 1.37,-4.37 1.5,-6.66 0.16,-2.9 -0.12,-5.86 -1.08,-8.61 -1.04,-2.99 -2.92,-5.75 -5.58,-7.47 -1.32,-0.86 -2.83,-1.45 -4.4,-1.67 -1.57,-0.22 -3.19,-0.05 -4.67,0.52 -0.84,0.33 -1.62,0.78 -2.37,1.29 z"/><g id="pupil_right"><path id="pupil_right_base" fill="#020204" d="m 117.14,45.52 c -0.9,0.06 -1.78,0.37 -2.55,0.85 -0.76,0.48 -1.41,1.13 -1.92,1.88 -1.03,1.49 -1.48,3.31 -1.55,5.12 -0.05,1.35 0.1,2.72 0.55,4 0.45,1.28 1.2,2.47 2.25,3.33 1.07,0.89 2.42,1.42 3.81,1.49 1.39,0.06 2.79,-0.34 3.93,-1.13 0.91,-0.63 1.64,-1.5 2.16,-2.48 0.52,-0.97 0.84,-2.05 0.98,-3.15 0.25,-1.93 -0.03,-3.95 -0.93,-5.69 -0.89,-1.74 -2.41,-3.17 -4.24,-3.84 -0.8,-0.29 -1.65,-0.44 -2.49,-0.38 z"/><path id="pupil_right_glare" fill="url(#fill_pupil_right_glare)" filter="url(#blur_pupil_right_glare)" clip-path="url(#clip_pupil_right)" d="m 122.71,53.36 c 1,-1 -0.71,-3.65 -2.05,-4.74 -0.97,-0.78 -3.78,-1.61 -3.66,-0.75 0.12,0.85 1.39,1.95 2.23,2.79 1.05,1.03 3,3.18 3.48,2.7 z"/></g><path id="eyelid_right" fill="url(#fill_eyelid_right)" clip-path="url(#clip_eye_right)" d="m 102.56,47.01 c 2.06,-1.71 4.45,-3.01 7,-3.8 5.25,-1.62 11.2,-0.98 15.84,1.97 1.6,1.01 3.03,2.27 4.52,3.45 1.48,1.17 3.06,2.27 4.85,2.9 0.97,0.34 2,0.54 3.02,0.43 0.92,-0.09 1.81,-0.44 2.57,-0.96 0.76,-0.53 1.4,-1.23 1.88,-2.02 0.96,-1.58 1.27,-3.5 1.1,-5.34 -0.33,-3.69 -2.41,-6.94 -4.15,-10.21 -0.55,-1.02 -1.07,-2.06 -1.73,-3.01 -2.01,-2.93 -5.23,-4.86 -8.6,-5.99 -3.37,-1.13 -6.93,-1.54 -10.46,-1.98 -1.58,-0.2 -3.17,-0.41 -4.74,-0.22 -1.81,0.22 -3.51,0.95 -5.28,1.4 -0.84,0.22 -1.69,0.37 -2.52,0.61 -0.83,0.24 -1.65,0.57 -2.33,1.11 -0.98,0.79 -1.6,1.98 -1.87,3.21 -0.27,1.24 -0.21,2.52 -0.01,3.77 0.39,2.5 1.33,4.93 1.24,7.46 -0.06,1.73 -0.61,3.44 -0.54,5.17 0.02,0.51 0.12,1.55 0.21,2.05 z"/><path id="eyebrow_right" fill="url(#fill_eyebrow_right)" filter="url(#blur_eyebrow_right)" d="m 119.93,31.18 c -0.41,0.52 -0.78,1.08 -1.07,1.7 1.85,0.4 3.61,1.16 5.19,2.21 3.06,2.03 5.38,4.99 7.01,8.29 0.38,-0.42 0.72,-0.87 1.02,-1.37 -1.64,-3.44 -4,-6.55 -7.16,-8.65 -1.52,-1 -3.21,-1.77 -4.99,-2.18 z"/></g></g><g id="beak"><g id="beak_shadow"><path id="beak_shadow_lower" fill="#000000" fill-opacity="0.258824" filter="url(#blur_beak_shadow_lower)" clip-path="url(#clip_body)" d="m 81.12,89.33 c 1.47,4.26 4.42,7.89 7.92,10.72 1.16,0.95 2.39,1.82 3.76,2.43 1.36,0.62 2.87,0.97 4.36,0.84 1.46,-0.12 2.85,-0.7 4.13,-1.42 1.28,-0.72 2.46,-1.59 3.7,-2.37 2.12,-1.35 4.39,-2.44 6.6,-3.64 2.65,-1.45 5.23,-3.1 7.46,-5.14 1.03,-0.93 1.98,-1.95 3.11,-2.75 1.13,-0.81 2.49,-1.39 3.87,-1.29 1.04,0.07 2.01,0.51 3.03,0.73 0.51,0.11 1.03,0.16 1.55,0.08 0.51,-0.08 1.01,-0.29 1.37,-0.67 0.44,-0.46 0.64,-1.12 0.61,-1.76 -0.02,-0.63 -0.24,-1.25 -0.54,-1.81 -0.59,-1.13 -1.49,-2.1 -1.89,-3.31 -0.36,-1.08 -0.29,-2.24 -0.26,-3.37 0.03,-1.14 0.01,-2.32 -0.51,-3.33 -0.4,-0.76 -1.07,-1.37 -1.83,-1.77 -0.76,-0.41 -1.62,-0.62 -2.48,-0.7 -1.72,-0.16 -3.44,0.18 -5.17,0.27 -2.28,0.13 -4.58,-0.15 -6.87,-0.02 -2.85,0.18 -5.65,1 -8.51,1.01 -3.26,0.01 -6.52,-1.06 -9.74,-0.55 -1.39,0.22 -2.71,0.72 -4.03,1.16 -1.33,0.45 -2.7,0.84 -4.1,0.82 -1.59,-0.03 -3.13,-0.58 -4.72,-0.69 -0.79,-0.06 -1.6,0 -2.35,0.28 -0.74,0.28 -1.41,0.79 -1.78,1.5 -0.21,0.4 -0.31,0.86 -0.33,1.31 -0.02,0.46 0.04,0.91 0.15,1.36 0.22,0.88 0.63,1.71 0.96,2.55 1.2,3.07 1.46,6.42 2.53,9.53 z"/><path id="beak_shadow_upper" opacity="0.3" fill="#000000" filter="url(#blur_beak_shadow_upper)" clip-path="url(#clip_body)" d="m 77.03,77.2 c 2.85,1.76 5.41,3.93 7.56,6.39 1.99,2.29 3.68,4.89 6.29,6.58 1.83,1.2 4.04,1.87 6.28,2.08 2.63,0.24 5.29,-0.15 7.83,-0.84 2.35,-0.63 4.62,-1.53 6.7,-2.71 3.97,-2.25 7.28,-5.55 11.65,-7.03 0.95,-0.33 1.94,-0.56 2.86,-0.96 0.92,-0.39 1.79,-0.99 2.23,-1.83 0.42,-0.82 0.4,-1.75 0.54,-2.64 0.15,-0.96 0.48,-1.88 0.66,-2.83 0.18,-0.95 0.2,-1.96 -0.24,-2.83 -0.37,-0.72 -1.04,-1.29 -1.81,-1.66 -0.77,-0.36 -1.64,-0.52 -2.51,-0.56 -1.72,-0.08 -3.43,0.33 -5.16,0.47 -2.28,0.19 -4.58,-0.08 -6.87,-0.01 -2.85,0.08 -5.66,0.67 -8.51,0.8 -3.25,0.14 -6.49,-0.34 -9.74,-0.44 -1.41,-0.05 -2.83,-0.03 -4.21,0.2 -1.39,0.22 -2.75,0.65 -3.92,1.37 -1.14,0.69 -2.07,1.64 -3.11,2.45 -0.52,0.41 -1.08,0.78 -1.68,1.07 -0.61,0.28 -1.28,0.48 -1.96,0.51 -0.35,0.01 -0.71,-0.01 -1.05,0.04 -0.59,0.08 -1.13,0.39 -1.47,0.83 -0.34,0.45 -0.47,1.02 -0.36,1.55 z"/></g><path id="beak_base" fill="url(#fill_beak_base)" d="m 91.66,58.53 c 1.53,-1.71 2.57,-3.8 4.03,-5.56 0.73,-0.88 1.58,-1.69 2.57,-2.26 0.99,-0.57 2.15,-0.89 3.29,-0.79 1.27,0.11 2.46,0.74 3.39,1.61 0.93,0.87 1.62,1.97 2.17,3.12 0.53,1.11 0.95,2.28 1.71,3.24 0.81,1.02 1.94,1.71 2.97,2.52 0.51,0.4 1.01,0.83 1.41,1.34 0.41,0.51 0.72,1.1 0.86,1.74 0.13,0.65 0.06,1.33 -0.16,1.95 -0.23,0.62 -0.61,1.18 -1.09,1.64 -0.95,0.92 -2.25,1.42 -3.56,1.6 -2.62,0.37 -5.27,-0.41 -7.92,-0.34 -2.67,0.08 -5.29,1.02 -7.97,0.93 -1.33,-0.05 -2.69,-0.38 -3.79,-1.14 -0.55,-0.39 -1.03,-0.88 -1.38,-1.45 -0.34,-0.57 -0.55,-1.23 -0.58,-1.9 -0.02,-0.64 0.13,-1.28 0.39,-1.86 0.25,-0.59 0.61,-1.12 1.01,-1.62 0.81,-0.99 1.8,-1.81 2.65,-2.77 z"/><g id="mandible_lower"><path id="mandible_lower_base" fill="url(#fill_mandible_lower_base)" d="m 77.14,75.05 c 0.06,0.26 0.15,0.5 0.28,0.73 0.23,0.38 0.57,0.69 0.93,0.95 0.36,0.27 0.75,0.49 1.13,0.72 2.01,1.27 3.65,3.04 5.11,4.92 1.95,2.52 3.68,5.31 6.29,7.14 1.84,1.3 4.04,2.03 6.28,2.26 2.63,0.26 5.29,-0.16 7.83,-0.91 2.35,-0.69 4.62,-1.66 6.7,-2.95 3.97,-2.44 7.28,-6.02 11.65,-7.63 0.95,-0.35 1.94,-0.6 2.86,-1.03 0.92,-0.44 1.79,-1.08 2.23,-2 0.42,-0.88 0.4,-1.9 0.54,-2.87 0.15,-1.03 0.48,-2.03 0.66,-3.06 0.18,-1.03 0.2,-2.13 -0.24,-3.08 -0.37,-0.78 -1.04,-1.4 -1.81,-1.79 -0.77,-0.4 -1.64,-0.58 -2.51,-0.62 -1.72,-0.08 -3.43,0.36 -5.16,0.52 -2.28,0.21 -4.58,-0.09 -6.87,-0.02 -2.85,0.09 -5.66,0.73 -8.51,0.87 -3.25,0.15 -6.49,-0.35 -9.74,-0.48 -1.41,-0.06 -2.83,-0.04 -4.22,0.2 -1.39,0.23 -2.75,0.71 -3.91,1.51 -1.13,0.78 -2.03,1.84 -3.07,2.74 -0.52,0.45 -1.08,0.86 -1.7,1.16 -0.61,0.3 -1.29,0.49 -1.98,0.47 -0.35,-0.01 -0.72,-0.06 -1.05,0.04 -0.21,0.07 -0.4,0.2 -0.56,0.35 -0.16,0.16 -0.29,0.34 -0.41,0.52 -0.29,0.42 -0.54,0.87 -0.75,1.34 z"/><path id="mandible_lower_glare" fill="#d9b30d" filter="url(#blur_mandible_lower_glare)" clip-path="url(#clip_mandible_lower)" d="m 89.9,78.56 c -0.33,1.37 -0.13,2.87 0.56,4.11 0.68,1.24 1.84,2.2 3.19,2.65 1.7,0.57 3.62,0.29 5.21,-0.54 0.93,-0.48 1.77,-1.16 2.3,-2.06 0.27,-0.44 0.46,-0.94 0.53,-1.46 0.06,-0.51 0.02,-1.05 -0.16,-1.54 -0.2,-0.53 -0.56,-1 -0.99,-1.37 -0.44,-0.37 -0.95,-0.64 -1.5,-0.82 -1.08,-0.36 -2.77,-0.66 -3.91,-0.68 -2.02,-0.04 -4.9,0.34 -5.23,1.71 z"/></g><g id="mandible_upper"><path id="mandible_upper_shadow" fill="#604405" filter="url(#blur_mandible_upper_shadow)" clip-path="url(#clip_mandible_lower)" d="m 84.31,67.86 c -1.16,0.68 -2.27,1.43 -3.36,2.2 -0.57,0.41 -1.15,0.84 -1.45,1.47 -0.21,0.44 -0.26,0.94 -0.27,1.43 0,0.5 0.03,0.99 -0.04,1.48 -0.04,0.33 -0.13,0.66 -0.14,0.99 -0.01,0.17 0,0.34 0.04,0.5 0.05,0.16 0.13,0.32 0.24,0.44 0.15,0.16 0.35,0.26 0.56,0.32 0.21,0.06 0.42,0.09 0.64,0.14 1.01,0.24 1.89,0.86 2.66,1.56 0.77,0.69 1.47,1.48 2.28,2.13 2.18,1.78 5.07,2.52 7.89,2.56 2.82,0.05 5.61,-0.54 8.36,-1.16 2.16,-0.49 4.32,-0.99 6.39,-1.76 3.2,-1.18 6.16,-2.96 8.72,-5.19 1.17,-1.01 2.26,-2.12 3.57,-2.94 1.15,-0.73 2.44,-1.21 3.62,-1.9 0.11,-0.06 0.21,-0.13 0.3,-0.2 0.1,-0.08 0.18,-0.18 0.24,-0.28 0.09,-0.19 0.09,-0.42 0.03,-0.62 -0.06,-0.2 -0.18,-0.38 -0.31,-0.55 -0.15,-0.18 -0.31,-0.34 -0.49,-0.5 -1.23,-1.05 -2.89,-1.43 -4.51,-1.56 -1.61,-0.12 -3.24,-0.03 -4.83,-0.3 -1.5,-0.25 -2.92,-0.81 -4.37,-1.27 -1.52,-0.49 -3.07,-0.87 -4.64,-1.13 -3.71,-0.61 -7.52,-0.49 -11.19,0.27 -3.49,0.73 -6.87,2.05 -9.94,3.87 z"/><path id="mandible_upper_base" fill="url(#fill_mandible_upper_base)" d="m 83.94,63.95 c -1.66,1.12 -3.16,2.49 -4.43,4.04 -0.72,0.89 -1.38,1.86 -1.74,2.94 -0.29,0.86 -0.39,1.76 -0.57,2.65 -0.07,0.33 -0.15,0.66 -0.14,1 0,0.16 0.02,0.33 0.07,0.5 0.05,0.16 0.14,0.31 0.25,0.43 0.2,0.2 0.47,0.31 0.74,0.37 0.28,0.05 0.56,0.06 0.84,0.09 1.25,0.15 2.4,0.75 3.44,1.47 1.04,0.71 2,1.55 3.07,2.22 2.35,1.49 5.16,2.15 7.95,2.26 2.78,0.11 5.56,-0.31 8.3,-0.86 2.17,-0.43 4.33,-0.95 6.39,-1.76 3.16,-1.25 6.01,-3.16 8.72,-5.19 1.24,-0.92 2.46,-1.87 3.57,-2.94 0.37,-0.37 0.74,-0.74 1.14,-1.08 0.4,-0.33 0.85,-0.62 1.35,-0.78 0.76,-0.24 1.58,-0.17 2.37,-0.04 0.59,0.1 1.18,0.23 1.78,0.21 0.3,-0.02 0.6,-0.07 0.88,-0.18 0.28,-0.11 0.54,-0.28 0.73,-0.52 0.25,-0.3 0.38,-0.7 0.38,-1.09 0,-0.4 -0.12,-0.79 -0.32,-1.13 -0.4,-0.68 -1.09,-1.14 -1.81,-1.46 -0.99,-0.44 -2.06,-0.65 -3.11,-0.91 -3.23,-0.78 -6.37,-1.93 -9.34,-3.41 -1.48,-0.73 -2.92,-1.54 -4.37,-2.32 -1.5,-0.8 -3.02,-1.57 -4.64,-2.07 -3.64,-1.1 -7.6,-0.74 -11.19,0.51 -3.98,1.38 -7.58,3.84 -10.31,7.05 z"/><path id="mandible_upper_glare" fill="#f6da4a" filter="url(#blur_mandible_upper_glare)" clip-path="url(#clip_mandible_upper)" d="m 109.45,64.75 c -0.2,-0.24 -0.48,-0.42 -0.78,-0.51 -0.3,-0.09 -0.62,-0.09 -0.93,-0.04 -0.62,0.11 -1.18,0.44 -1.7,0.8 -1.47,1.01 -2.77,2.26 -3.91,3.64 -1.5,1.83 -2.74,3.94 -3.16,6.27 -0.07,0.39 -0.11,0.8 -0.07,1.19 0.05,0.4 0.2,0.79 0.49,1.07 0.24,0.25 0.58,0.4 0.92,0.45 0.35,0.05 0.71,0 1.04,-0.11 0.66,-0.22 1.21,-0.69 1.74,-1.15 2.87,-2.58 5.47,-5.66 6.51,-9.38 0.1,-0.37 0.19,-0.75 0.19,-1.14 0,-0.39 -0.1,-0.78 -0.34,-1.09 z"/><path id="naris_left" opacity="0.8" fill="url(#fill_naris_left)" filter="url(#blur_naris_left)" d="m 92.72,59.06 c -0.77,-0.25 -2.03,1.1 -1.62,1.79 0.11,0.19 0.46,0.43 0.7,0.3 0.35,-0.19 0.64,-0.89 1.02,-1.16 0.25,-0.18 0.2,-0.84 -0.1,-0.93 z"/><path id="naris_right" opacity="0.8" fill="url(#fill_naris_right)" filter="url(#blur_naris_right)" d="m 102.56,59.42 c 0.2,0.64 1.23,0.53 1.83,0.84 0.52,0.27 0.94,0.86 1.53,0.88 0.56,0.01 1.44,-0.2 1.51,-0.76 0.09,-0.73 -0.98,-1.2 -1.67,-1.47 -0.89,-0.34 -2.03,-0.52 -2.86,-0.06 -0.19,0.11 -0.4,0.36 -0.34,0.57 z"/></g><path id="beak_corner" fill="url(#fill_beak_corner)" filter="url(#blur_beak_corner)" clip-path="url(#clip_beak)" d="m 129.27,69.15 a 2.42,3.1 16.94 0 1 -2.81,3.04 2.42,3.1 16.94 0 1 -2.12,-3.04 2.42,3.1 16.94 0 1 2.81,-3.05 2.42,3.1 16.94 0 1 2.12,3.05 z"/></g></g></g></svg>',
1270
- windows: `<svg viewBox="0 0 22 22" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:block;width:100%;height:100%"><!-- The Microsoft squares on a white square. The white edge around them is one unit, the same as the gap between them, so the tile reads as the mark with its own margin. Drawn once, so every place shows the same tile. The colours are Microsoft's, as @lobehub/icons-static-svg carries them. --><rect width="22" height="22" fill="#fff"/><rect x="1" y="1" width="9.5" height="9.5" fill="#F25022"/><rect x="11.5" y="1" width="9.5" height="9.5" fill="#7FBA00"/><rect x="1" y="11.5" width="9.5" height="9.5" fill="#00A4EF"/><rect x="11.5" y="11.5" width="9.5" height="9.5" fill="#FFB900"/></svg>`
1345
+ windows: `<svg viewBox="0 0 22 22" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:block;width:100%;height:100%"><!-- The Microsoft squares on a white square. The white edge around them is one unit, the same as the gap between them, so the tile reads as the mark with its own margin. Drawn once, so every place shows the same tile. The colours are Microsoft's, as @lobehub/icons-static-svg carries them. --><rect width="22" height="22" fill="#fff"/><rect x="1" y="1" width="9.5" height="9.5" fill="#F25022"/><rect x="11.5" y="1" width="9.5" height="9.5" fill="#7FBA00"/><rect x="1" y="11.5" width="9.5" height="9.5" fill="#00A4EF"/><rect x="11.5" y="11.5" width="9.5" height="9.5" fill="#FFB900"/></svg>`,
1346
+ docker: '<svg viewBox="0 0 24 24" fill="#2496ED" style="display:block;width:100%;height:100%"><path d="M13.983 11.078h2.119a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.119a.185.185 0 00-.185.185v1.888c0 .102.083.185.185.185m-2.954-5.43h2.118a.186.186 0 00.186-.186V3.574a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m0 2.716h2.118a.187.187 0 00.186-.186V6.29a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.887c0 .102.082.185.185.186m-2.93 0h2.12a.186.186 0 00.184-.186V6.29a.185.185 0 00-.185-.185H8.1a.185.185 0 00-.185.185v1.887c0 .102.083.185.185.186m-2.964 0h2.119a.186.186 0 00.185-.186V6.29a.185.185 0 00-.185-.185H5.136a.186.186 0 00-.186.185v1.887c0 .102.084.185.186.186m5.893 2.715h2.118a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m-2.93 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.083.185.185.185m-2.964 0h2.119a.185.185 0 00.185-.185V9.006a.185.185 0 00-.184-.186h-2.12a.186.186 0 00-.186.186v1.887c0 .102.084.185.186.185m-2.92 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.082.185.185.185M23.763 9.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612 1.43-.23.97-.09 1.882.403 2.661-.595.332-1.55.413-1.744.42H.751a.751.751 0 00-.75.748 11.376 11.376 0 00.692 4.062c.545 1.428 1.355 2.48 2.41 3.124 1.18.723 3.1 1.137 5.275 1.137.983.003 1.963-.086 2.93-.266a12.248 12.248 0 003.823-1.389c.98-.567 1.86-1.288 2.61-2.136 1.252-1.418 1.998-2.997 2.553-4.4h.221c1.372 0 2.215-.549 2.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z"/></svg>'
1271
1347
  };
1272
1348
 
1273
1349
  // ../ui/dist/brand-marks.js
@@ -1294,6 +1370,7 @@ var BRAND_NAMES = {
1294
1370
  xai: "xAI",
1295
1371
  cohere: "Cohere",
1296
1372
  stability: "Stability AI",
1373
+ bfl: "Black Forest Labs",
1297
1374
  liquid: "Liquid AI",
1298
1375
  yi: "01.AI",
1299
1376
  internlm: "InternLM",
@@ -1331,10 +1408,20 @@ var BRAND_NAMES = {
1331
1408
  sentry: "Sentry",
1332
1409
  apple: "Apple",
1333
1410
  linux: "Linux",
1334
- windows: "Windows"
1411
+ windows: "Windows",
1412
+ docker: "Docker"
1335
1413
  };
1336
1414
  function BrandMark({ brand, size: size3 = 16, style }) {
1337
- return _jsx26("span", { className: "hs-brand-mark", role: "img", "aria-label": BRAND_NAMES[brand], style: { width: size3, height: size3, ...style }, dangerouslySetInnerHTML: { __html: BRAND_SVG[brand] } });
1415
+ const props = {
1416
+ className: "hs-brand-mark",
1417
+ role: "img",
1418
+ "aria-label": BRAND_NAMES[brand],
1419
+ style: { width: size3, height: size3, ...style }
1420
+ };
1421
+ return isFileBrand(brand) ? _jsx28("span", { ...props, "data-brand": brand }) : _jsx28("span", { ...props, dangerouslySetInnerHTML: { __html: BRAND_SVG[brand] } });
1422
+ }
1423
+ function isFileBrand(brand) {
1424
+ return BRAND_FILES.includes(brand);
1338
1425
  }
1339
1426
  var PUBLISHERS = {
1340
1427
  qwen: "qwen",
@@ -1357,6 +1444,7 @@ var PUBLISHERS = {
1357
1444
  cohereforai: "cohere",
1358
1445
  stabilityai: "stability",
1359
1446
  "stable-diffusion-v1-5": "stability",
1447
+ "black-forest-labs": "bfl",
1360
1448
  liquidai: "liquid",
1361
1449
  "01-ai": "yi",
1362
1450
  internlm: "internlm",
@@ -1377,25 +1465,25 @@ function brandOfPublisher(owner) {
1377
1465
  // ../ui/dist/ModelAvatar.js
1378
1466
  var PublisherPicturesContext = createContext4(() => void 0);
1379
1467
  function ModelAvatar({ identity, server, size: size3 = 24 }) {
1380
- return _jsx27(PublisherAvatar, { identity, server, size: size3 }, `${server}:${identity.repository}:${identity.publisher}`);
1468
+ return _jsx29(PublisherAvatar, { identity, server, size: size3 }, `${server}:${identity.repository}:${identity.publisher}`);
1381
1469
  }
1382
1470
  function PublisherAvatar({ identity, server, size: size3 }) {
1383
1471
  const pictures = useContext3(PublisherPicturesContext);
1384
1472
  const owner = identity.repository?.split("/")[0];
1385
1473
  const picture = owner ? pictures(server, owner) : void 0;
1386
- const [failed, setFailed] = useState9(false);
1474
+ const [failed, setFailed] = useState10(false);
1387
1475
  const brand = brandOfPublisher(identity.publisher);
1388
1476
  const tips = useFloatingTips();
1389
1477
  const { hover, tip } = tips("avatar", identity.publisher);
1390
- return _jsxs16("span", { className: "hs-model-avatar", style: { width: size3, height: size3 }, role: "img", "aria-label": identity.publisher, ...hover, children: [tip, picture && !failed ? _jsx27("img", { src: picture, alt: "", width: size3, height: size3, loading: "lazy", decoding: "async", onError: () => setFailed(true) }) : brand ? _jsx27(BrandMark, { brand, size: size3 }) : identity.publisher ? _jsx27("span", { className: "hs-model-avatar-initial", children: identity.publisher.slice(0, 1) }) : _jsx27(PackageGlyph, { size: size3 })] });
1478
+ return _jsxs18("span", { className: "hs-model-avatar", style: { width: size3, height: size3 }, role: "img", "aria-label": identity.publisher, ...hover, children: [tip, picture && !failed ? _jsx29("img", { src: picture, alt: "", width: size3, height: size3, loading: "lazy", decoding: "async", onError: () => setFailed(true) }) : brand ? _jsx29(BrandMark, { brand, size: size3 }) : identity.publisher ? _jsx29("span", { className: "hs-model-avatar-initial", children: identity.publisher.slice(0, 1) }) : _jsx29(PackageGlyph, { size: size3 })] });
1391
1479
  }
1392
1480
 
1393
1481
  // ../ui/dist/VirtualList.js
1394
- import { jsx as _jsx28 } from "react/jsx-runtime";
1395
- import { useImperativeHandle, useRef as useRef11 } from "react";
1482
+ import { jsx as _jsx30 } from "react/jsx-runtime";
1483
+ import { useImperativeHandle, useRef as useRef13 } from "react";
1396
1484
  import { useVirtualizer } from "@tanstack/react-virtual";
1397
1485
  function VirtualList({ count, estimate, row, rowKey, className, ref }) {
1398
- const scroller = useRef11(null);
1486
+ const scroller = useRef13(null);
1399
1487
  const list = useVirtualizer({
1400
1488
  count,
1401
1489
  getScrollElement: () => scroller.current,
@@ -1404,21 +1492,21 @@ function VirtualList({ count, estimate, row, rowKey, className, ref }) {
1404
1492
  ...rowKey && { getItemKey: rowKey }
1405
1493
  });
1406
1494
  useImperativeHandle(ref, () => ({ scrollToIndex: (index, align = "auto") => list.scrollToIndex(index, { align }) }), [list]);
1407
- return _jsx28("div", { ref: scroller, className: className ? `hs-virtual-list ${className}` : "hs-virtual-list", children: _jsx28("div", { className: "hs-virtual-list-rows", style: { height: list.getTotalSize() }, children: list.getVirtualItems().map((item) => _jsx28("div", { ref: list.measureElement, "data-index": item.index, className: "hs-virtual-list-row", style: { transform: `translateY(${item.start}px)` }, children: row(item.index) }, item.key)) }) });
1495
+ return _jsx30("div", { ref: scroller, className: className ? `hs-virtual-list ${className}` : "hs-virtual-list", children: _jsx30("div", { className: "hs-virtual-list-rows", style: { height: list.getTotalSize() }, children: list.getVirtualItems().map((item) => _jsx30("div", { ref: list.measureElement, "data-index": item.index, className: "hs-virtual-list-row", style: { transform: `translateY(${item.start}px)` }, children: row(item.index) }, item.key)) }) });
1408
1496
  }
1409
1497
 
1410
1498
  // ../ui/dist/PictureCompare.js
1411
- import { jsx as _jsx29, jsxs as _jsxs17 } from "react/jsx-runtime";
1412
- import { useRef as useRef12, useState as useState10 } from "react";
1499
+ import { jsx as _jsx31, jsxs as _jsxs19 } from "react/jsx-runtime";
1500
+ import { useRef as useRef14, useState as useState11 } from "react";
1413
1501
  var KEY_STEP = 5;
1414
1502
  function PictureCompare({ before, after }) {
1415
- const [split, setSplit] = useState10(50);
1416
- const box = useRef12(null);
1503
+ const [split, setSplit] = useState11(50);
1504
+ const box = useRef14(null);
1417
1505
  const follow = (event) => {
1418
1506
  const rect = box.current.getBoundingClientRect();
1419
1507
  setSplit(Math.max(0, Math.min(100, (event.clientX - rect.left) / rect.width * 100)));
1420
1508
  };
1421
- return _jsxs17("div", { ref: box, className: "hs-picture-compare", onPointerDown: (event) => {
1509
+ return _jsxs19("div", { ref: box, className: "hs-picture-compare", onPointerDown: (event) => {
1422
1510
  if (event.button !== 0)
1423
1511
  return;
1424
1512
  event.currentTarget.setPointerCapture(event.pointerId);
@@ -1426,13 +1514,13 @@ function PictureCompare({ before, after }) {
1426
1514
  }, onPointerMove: (event) => {
1427
1515
  if (event.currentTarget.hasPointerCapture(event.pointerId))
1428
1516
  follow(event);
1429
- }, children: [_jsx29("img", { src: before.src, alt: before.name, draggable: false }), _jsx29("div", { className: "hs-picture-compare-after", style: { clipPath: `inset(0 0 0 ${split}%)` }, children: _jsx29("img", { src: after.src, alt: after.name, draggable: false }) }), _jsx29("span", { className: "hs-picture-compare-name", "data-side": "before", children: before.name }), _jsx29("span", { className: "hs-picture-compare-name", "data-side": "after", children: after.name }), _jsx29("div", { className: "hs-picture-compare-handle", role: "slider", tabIndex: 0, "aria-label": `${before.name} and ${after.name}`, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(split), style: { left: `${split}%` }, onKeyDown: (event) => {
1517
+ }, children: [_jsx31("img", { src: before.src, alt: before.name, draggable: false }), _jsx31("div", { className: "hs-picture-compare-after", style: { clipPath: `inset(0 0 0 ${split}%)` }, children: _jsx31("img", { src: after.src, alt: after.name, draggable: false }) }), _jsx31("span", { className: "hs-picture-compare-name", "data-side": "before", children: before.name }), _jsx31("span", { className: "hs-picture-compare-name", "data-side": "after", children: after.name }), _jsx31("div", { className: "hs-picture-compare-handle", role: "slider", tabIndex: 0, "aria-label": `${before.name} and ${after.name}`, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(split), style: { left: `${split}%` }, onKeyDown: (event) => {
1430
1518
  const next = event.key === "ArrowLeft" || event.key === "ArrowDown" ? split - KEY_STEP : event.key === "ArrowRight" || event.key === "ArrowUp" ? split + KEY_STEP : event.key === "Home" ? 0 : event.key === "End" ? 100 : null;
1431
1519
  if (next === null)
1432
1520
  return;
1433
1521
  event.preventDefault();
1434
1522
  setSplit(Math.max(0, Math.min(100, next)));
1435
- }, children: _jsx29("span", { className: "hs-picture-compare-knob" }) })] });
1523
+ }, children: _jsx31("span", { className: "hs-picture-compare-knob" }) })] });
1436
1524
  }
1437
1525
 
1438
1526
  // src/Icon.tsx
@@ -1471,8 +1559,10 @@ export {
1471
1559
  MSub,
1472
1560
  MenuSurface,
1473
1561
  Meter,
1562
+ Modal,
1474
1563
  ModelAvatar,
1475
1564
  Mono,
1565
+ MultiSelect,
1476
1566
  Notice,
1477
1567
  OverlayScroll,
1478
1568
  PageTitle,
@@ -1499,5 +1589,6 @@ export {
1499
1589
  ToggleRow,
1500
1590
  VirtualList,
1501
1591
  anchorFrom,
1592
+ spaces,
1502
1593
  useFloatingTips
1503
1594
  };