openvibers/openvibe.shared Commits
Shared 4.214.0: release train for #481, #479, #482 and #484 (#485)
Changes
@@@ -1,5 +1,39 @@# Changelog++## 4.214.0 — 2026-11-11++++A train of four pull requests: the Arrange editor (#481), one inline comment thread for every site (#479), the bar's first paint following the sign-in hint (#482) and four redrawn glyphs (#484).++++- **The Arrange editor: a person's own controls, on the real parts.** `ov-arrange.js` is loaded only when someone++ presses Arrange, and loads `ov-arrange-core.js` (openvibe-sdk/ui-layout for the browser, generated by++ `scripts/build-arrange-core.js`) from beside itself by content hash. A surface's `[data-ov-part]` elements are++ placed from a ui.layout@1: drag to move on the grid, the corner to resize, arrows to move and Shift with the++ arrows to resize (a docked overlay chooses an edge the same way). The part's sheet has visible, size, tint, shape,++ opacity, label and bindings; long press opens it on a phone. The SDK rules refuse a bad move with the reason in++ plain words (Stop has to stay visible; it is too small), every move and resize is announced, and Undo, Reset to++ default, Save and Share are in the bar. Ask OpenVibe's ui.layout.suggestion is previewed on the real parts and++ applied only with Keep; Motion Off shows no animation and Calm plays the short one. (#481)++++- **One inline comment thread for every site: `thread.renderThread` and `thread-inline.css` (new), beside the++ composer.** MediaHub's Video and Pics item pages and Community's paste and `/c` pages rendered two copies of the++ same thread; the renderer now lives in `openvibe-shared/thread`, with both sites' options:++ `attachmentsAllowed` (Pics and a paste page offer files; elsewhere the composer does not) and `draft` (the message++ kept after a failed post). It draws the quiet head, Top and Newest only when there is something to order, the++ composer or one sign-in line (the whole empty state when nobody has commented), the comments with their replies,++ targets, deletions and attachments, More, and the discussion link. The markup is byte-for-byte what the two sites++ render; each keeps its own post, delete and sign-in routes. The stylesheet is served like the package's other CSS++ (`/shared/thread-inline.css?v=<content hash>`, `files.js` STYLES), so a site pins one look. Both sites' renderer++ tests are here; MediaHub and Community delete their copies and pin this release. (#479)++++- **The bar's first paint follows the sign-in hint (asks 327, 345).** When `ov_sso_hint` says `account`, navbar.js++ draws the signed-in shape at once: a neutral placeholder avatar, and the account's own name/initial only when the++ hint carries it (`account:<username>`); the session check then replaces it or corrects the bar to guest. A failed++ check no longer leaves the optimistic bar behind, and an explicit `guest` hint keeps the guest bar and starts no++ silent round trip. The hint is never authorization: it holds no token and is not remembered as an account.++ sso-client.js stores the name after a FedCM sign-in when the response has one. (#482)++++- **Glyphs: care, fish, handshake and eye-off redrawn for 16 px** (the last four the 11-11 glyph review named weak): care keeps its heart clear of an open hand; fish has an open V tail and a dot eye; handshake drops the tiny finger strokes and gets its first solid twin; eye-off breaks the outline where the slash crosses (#484).++## 4.213.0 — 2026-11-11- **The menu button's flight, polished** (the owner, 11-11: "the icon becomes whiter than it was when idle … needs@@@ -5,7 +5,7 @@**Docs:** https://openvibe.services · **For AI:** https://openvibe.network/llms.txt**Install and test:** `npm ci && npm test`--**Status:** alpha, v4.213.0 (every release is a tag; see [CHANGELOG.md](CHANGELOG.md)). Every deployed++**Status:** alpha, v4.214.0 (every release is a tag; see [CHANGELOG.md](CHANGELOG.md)). Every deployedconsumer installs a tagged release and none keeps a vendored copy([docs/migration-plan.md](docs/migration-plan.md) is done); each repository's `package.json` namesthe tag it pins.@@@ -1239,5 +1239,5 @@ The Locker browser core currently uses the immutable SDK review commit `80f21232<!-- versions:start -->- openvibe-contracts: v0.408.0--- openvibe-sdk: v0.150.0++- openvibe-sdk: v0.152.0<!-- versions:end -->@@@ -4,12 +4,12 @@"code": true,"wave": "W2","package": "openvibe-shared",-- "version": "4.213.0",++ "version": "4.214.0","plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)","deployed": false,"deployment": "none of its own: a package released as git tags; OpenVibe.Network serves /shared/* from its pinned tag, and a site can serve its own pinned copy (openvibe-shared/serve)","contracts": "openvibe-contracts v0.408.0 (devDependency: the release manifest contract)",-- "sdk": "openvibe-sdk v0.150.0",++ "sdk": "openvibe-sdk v0.152.0","features": ["the Quest guide on any page and the current Live step in the Dock's agent view (4.209.0)","one move engine for a floating thing: OVFloat.attach gives the PiP's drag, flick, tuck and kept place to any box, and a panel window adopts it (4.208.0)",@@@ -62,5 +62,5 @@"openvibe-shared/config accepts x-unit seconds for an integer owner setting, so an owner form can label the input in seconds","a navbar link can be the site's one featured piece (featured: true): a quiet accent pill with its glyph, first in the phone's menu (4.117.0)"],-- "updated": "2026-11-11"++ "updated": "2026-11-12"}@@@ -48,6 +48,8 @@ const BROWSER = Object.freeze(['ov-labels.js', // content labels (L1): each viewer's show / blur / hide; navbar.js loads it when a page has [data-ov-labels]'ov-forms.js', // OpenVibe's own select (a menu on a computer, a sheet on a phone); navbar.js loads it when a page has a form control'ov-qr.js', // a QR code from a link, on the device: the Share sheet's QR code (ov-share.js loads it on first use)++ 'ov-arrange.js', // the Arrange editor (make your own controls, 2026-11-11): a person moves and resizes a surface's parts; a product loads it when Arrange is pressed++ 'ov-arrange-core.js', // openvibe-sdk/ui-layout for the browser, generated (scripts/build-arrange-core.js): the one validator'ov-locker-core.js', // openvibe-sdk/locker for the browser, generated (scripts/build-locker-core.js): WebCrypto only, the SDK's own vectors'ov-locker.js', // Locker in the browser (plan Q2): a locked item's card, making and unlocking your locker; crypto in ov-locker-core.js'ov-wallet.js',@@@ -114,6 +116,7 @@ const STYLES = Object.freeze(['messages.css', // the room and bubble views' look'room.css', // kit.card, kit.rail and a room's accent (4.29.1; load after kit.css where cards, rails or sc.room() are)'thread.css', // the conversation UI's look (openvibe-shared/thread, ov-thread.js; plan L55 C4)++ 'thread-inline.css', // the inline Community thread's look (openvibe-shared/thread renderThread; 4.215.0)'kit-layout.css', // the fluid scale, the layout primitives (.ov-stack, .ov-switcher…) and the opt-in .ov-base (4.78.0; after kit.css)'kit-data.css', // Kit 2's look: steps, tables, charts, rankings, meters, drop zones, receipts (4.37.0; after kit.css)'agent-session.css', // agent-session.js's look (4.32.0; the script links it from beside itself unless the page does)@@@ -1,22 +1,22 @@{"family": "OV Glyphs","glyphs": 278,-- "source_sha256": "d9fec0f9aa6f987778848492219f6139bff1dc2da9739fce9866d3b3764d1214",++ "source_sha256": "a4d2fb79a53342b1d3733d11d5d2420165c6d495a640dde5889a9f7d425c81f9","files": {-- "ov-glyphs.woff2": 25728,-- "glyph-fonts/ov-glyphs.ttf": 55028,-- "glyph-fonts/ov-glyphs.otf": 68960,-- "ov-glyphs-thin.woff2": 25984,-- "glyph-fonts/ov-glyphs-thin.ttf": 59512,-- "glyph-fonts/ov-glyphs-thin.otf": 69776,-- "ov-glyphs-light.woff2": 26204,-- "glyph-fonts/ov-glyphs-light.ttf": 59920,-- "glyph-fonts/ov-glyphs-light.otf": 69668,-- "ov-glyphs-bold.woff2": 26156,-- "glyph-fonts/ov-glyphs-bold.ttf": 55012,-- "glyph-fonts/ov-glyphs-bold.otf": 68152,-- "ov-glyphs-solid.woff2": 15220,-- "glyph-fonts/ov-glyphs-solid.ttf": 30996,-- "glyph-fonts/ov-glyphs-solid.otf": 27916++ "ov-glyphs.woff2": 25636,++ "glyph-fonts/ov-glyphs.ttf": 54876,++ "glyph-fonts/ov-glyphs.otf": 68816,++ "ov-glyphs-thin.woff2": 25964,++ "glyph-fonts/ov-glyphs-thin.ttf": 59348,++ "glyph-fonts/ov-glyphs-thin.otf": 69652,++ "ov-glyphs-light.woff2": 26112,++ "glyph-fonts/ov-glyphs-light.ttf": 59772,++ "glyph-fonts/ov-glyphs-light.otf": 69544,++ "ov-glyphs-bold.woff2": 26052,++ "glyph-fonts/ov-glyphs-bold.ttf": 54920,++ "glyph-fonts/ov-glyphs-bold.otf": 68052,++ "ov-glyphs-solid.woff2": 15308,++ "glyph-fonts/ov-glyphs-solid.ttf": 31240,++ "glyph-fonts/ov-glyphs-solid.otf": 28184}}BBinary files a/glyph-fonts/ov-glyphs-bold.otf and b/glyph-fonts/ov-glyphs-bold.otf differBBinary files a/glyph-fonts/ov-glyphs-bold.ttf and b/glyph-fonts/ov-glyphs-bold.ttf differBBinary files a/glyph-fonts/ov-glyphs-light.otf and b/glyph-fonts/ov-glyphs-light.otf differBBinary files a/glyph-fonts/ov-glyphs-light.ttf and b/glyph-fonts/ov-glyphs-light.ttf differBBinary files a/glyph-fonts/ov-glyphs-solid.otf and b/glyph-fonts/ov-glyphs-solid.otf differBBinary files a/glyph-fonts/ov-glyphs-solid.ttf and b/glyph-fonts/ov-glyphs-solid.ttf differBBinary files a/glyph-fonts/ov-glyphs-thin.otf and b/glyph-fonts/ov-glyphs-thin.otf differBBinary files a/glyph-fonts/ov-glyphs-thin.ttf and b/glyph-fonts/ov-glyphs-thin.ttf differBBinary files a/glyph-fonts/ov-glyphs.otf and b/glyph-fonts/ov-glyphs.otf differBBinary files a/glyph-fonts/ov-glyphs.ttf and b/glyph-fonts/ov-glyphs.ttf differ@@@ -49,11 +49,11 @@puzzle: '<path d="M3.8 7h4.2a2.6 2.6 0 1 1 4.8 0h4.2v4.2a2.6 2.6 0 1 1 0 4.8v4.2h-4.2a2.6 2.6 0 1 0-4.8 0H3.8v-4.2a2.6 2.6 0 1 0 0-4.8Z"/>',compress: '<path d="M8.8 3.5v5.3H3.5M15.2 3.5v5.3h5.3M8.8 20.5v-5.3H3.5M15.2 20.5v-5.3h5.3"/>',expand: '<path d="M3.5 8.8V3.5h5.3M20.5 8.8V3.5h-5.3M3.5 15.2v5.3h5.3M20.5 15.2v5.3h-5.3"/>',-- care: '<path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/>',++ care: '<path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/>',city: '<path d="M3.5 19.7h17M5.4 19.7V8.3h4.7v11.3M10.1 19.7V3.6h5.7v16.1M15.8 19.7v-7.6h3.3v7.6M7.8 11.2h0M7.8 14.5h0M12.9 6.9h0M12.9 10.2h0M12.9 13.5h0"/>',wrench: '<path d="M14.6 3.6a5.2 5.2 0 0 0-4.6 7.3L3.7 17.3V20.3h3.1l6.4-6.4a5.2 5.2 0 0 0 7.3-4.6l-3.2 1.2l-2.5-2.5l1.2-3.2Z"/>',music: '<path d="M8.6 17.7V5.6l11.1-2.1v12.2"/><circle cx="6" cy="17.7" r="2.6"/><circle cx="17.2" cy="15.7" r="2.6"/>',-- 'eye-off': '<path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/>',++ 'eye-off': '<path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/>',plane: '<path d="M20 4L3.5 10.8l6.6 3.1l3.1 6.6Z"/><path d="M10.1 13.9l9.9-9.9"/>',fire: '<path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/>',nodes: '<circle cx="12" cy="5.4" r="2.1"/><circle cx="5.8" cy="17.9" r="2.1"/><circle cx="18.2" cy="17.9" r="2.1"/><path d="M11 7.4L6.8 15.9M13 7.4l4.3 8.6M7.9 17.9h8.3"/>',@@@ -174,7 +174,7 @@ear: '<path d="M6.2 9.5a5.7 5.7 0 1 1 10.8 2.4c-0.9 1.9-3.1 3-3.1 5.2a3.4 3.4 0 0 1-6.5 1.6"/><path d="M9.7 9.9a2.4 2.4 0 1 1 3.8 1.5"/>',eraser: '<path d="M14.3 4.4l5.5 5.5l-9 9H6.6l-2.6-2.6a1.5 1.5 0 0 1 0-2.1Z"/><path d="M9.3 9.4l5.5 5.5M10.8 18.9H20.3"/>',laugh: '<circle cx="12" cy="12" r="8.5"/><path d="M8 13.5h8a4 4 0 0 1-8 0ZM7.5 8.6l2.2 1.2-2.2 1.2M16.5 8.6l-2.2 1.2 2.2 1.2"/>',-- fish: '<path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/>',++ fish: '<path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/>',finish: '<path d="M5.2 20.7V4"/><rect x="5.2" y="4.6" width="13.9" height="8.6" rx="1"/><path d="M5.2 8.8h13.9M9.6 4.6v8.6M14.3 4.6v8.6"/>',flask: '<path d="M9.5 3.2h4.9M10 3.2V9.2L4.9 17.7a1.5 1.5 0 0 0 1.3 2.3h11.6a1.5 1.5 0 0 0 1.3-2.3L14 9.2V3.2"/><path d="M7.3 14.6h9.5"/>','folder-tree': '<path d="M4.1 3.3v13.2a1 1 0 0 0 1 1H9.7M4.1 8.3H9.7"/><path d="M10.2 5.3h3.1l1 1.5h5.6V10.9h-9.7ZM10.2 14.5h3.1l1 1.5h5.6V20.1h-9.7Z"/>',@@@ -183,7 +183,7 @@ghost: '<path d="M4.7 20V10.6a7.3 7.3 0 0 1 14.7 0v9.4l-2.4-1.9l-2.5 1.9l-2.4-1.9L9.6 20l-2.5-1.9Z"/><path d="M9.4 10.1h0M14.6 10.1h0"/>',grip: '<path d="M8.3 4.5h0M15.8 4.5h0M8.3 12h0M15.8 12h0M8.3 19.5h0M15.8 19.5h0" stroke-width="3.8"/>',hammer: '<path d="M13.1 3.7L19.3 9.9l-2.7 2.7l-6.2-6.2Z"/><path d="M13.6 9.4L5 18.1a1.3 1.3 0 0 0 1.9 1.9l8.6-8.6"/>',-- handshake: '<path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/>',++ handshake: '<path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/>',wizard: '<path d="M3.6 20h16.7M6.3 20L9.9 9.1L15.7 3.3L14.1 10.1L17.8 20"/><path d="M8.4 15.4h7.3"/>','heart-broken': '<path d="M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z"/><path d="M11.9 5.8L10 9.8l3.5 2.3l-1.6 3.9"/>',hourglass: '<path d="M6 3.5h12M6 20.5h12M7.5 3.5c0 4.5 4.5 5.5 4.5 8.5s-4.5 4-4.5 8.5M16.5 3.5c0 4.5-4.5 5.5-4.5 8.5s4.5 4 4.5 8.5"/>',@@@ -232,6 +232,7 @@// shows the solid one when the icon is 18 px or smaller (pure CSS, see scripts/build-glyphs.js); a glyph without// one draws its lines heavier there instead.const SOLID = Object.freeze({++ handshake: '<path d="M2.3 9.2h2.7v6.8H2.3ZM19 9.2h2.7v6.8H19Z"/><path class="ln" d="M5.6 10.8h0.3l3.4-2.6l2.9 1.3L14.6 8.1l3.4 2.6h0.4M5.9 10.8l5.4 5.4a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.4 12.8l-3.9-3.9l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/>',focus: '<circle cx="12" cy="12" r="3.6"/><path class="ln" d="M3.8 9V6.1A2.3 2.3 0 0 1 6.1 3.8H9M15 3.8h2.9A2.3 2.3 0 0 1 20.2 6.1V9M20.2 15v2.9a2.3 2.3 0 0 1-2.3 2.3H15M9 20.2H6.1A2.3 2.3 0 0 1 3.8 17.9V15"/>',// 4.182.0, the last five shapes: a car, a door, a podium, a rocket and a camera that flips. After these, every// glyph without a solid drawing is one made of lines, which thickens when small instead.@@@ -244,7 +245,7 @@// piggy bank), a couch, a coin over a box, two folders on a tree, a chequered flag, and two people.airplane: '<path d="M11.8 2.6c1.3 0 2 1.2 2 3V9.5l7.2 4.2v2.5L13.8 13.7v3.5l2 1.5v2.5L11.8 19.7l-3.7 1.2v-2.5l2-1.5v-3.5l-7.2 2.5v-2.5L9.8 9.5V5.3c0-1.8 0.7-3 2-3Z"/>',burst: '<path d="M12.1 2.6l2 4.6l4.7-1.9l-1.9 4.7l4.6 2l-4.6 2l1.9 4.7l-4.7-1.9l-2 4.6l-2-4.6l-4.7 1.9l1.9-4.7L2.7 12l4.6-2l-1.9-4.7l4.7 1.9Z"/>',-- fish: '<path fill-rule="evenodd" d="M7.6 12c2.1-3.6 4.8-5.4 7.9-5.4 2.9 0 5 2.2 6.1 5.4-1.1 3.2-3.2 5.4-6.1 5.4-3.1 0-5.8-1.8-7.9-5.4ZM15.7 10.6a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z"/><path d="M8.4 12 2.9 7.4v9.2Z"/>',++ fish: '<path fill-rule="evenodd" d="M8.7 12c1.9-3.5 4.6-5.3 7.6-5.3c2.8 0 4.6 2.2 5.4 5.3c-0.8 3.1-2.6 5.3-5.4 5.3c-3 0-5.7-1.8-7.6-5.3ZM16.2 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0Z"/><path class="ln" d="M8.7 12L4.4 8.9M8.7 12l-4.3 3.1"/>',shoe: '<path d="M3.7 14.5V9.1l3.6-0.5l2.6-3.5l3.5 1.6l-0.8 2.3l3.1 1.7l3.6 0.8a1.9 1.9 0 0 1 1.3 1.8v1.4Z"/><path class="ln" d="M4.2 17h16"/>',sword: '<path d="M21.2 2.8v4.7l-10.8 10.8l-4.7-4.7L16.5 2.8Z"/><path class="ln" d="M5.2 11.9L12.1 18.8M8.4 15.6L3.7 20.3"/>',donate: '<path fill-rule="evenodd" d="M12 2.2a5.9 5.9 0 1 0 0 11.8a5.9 5.9 0 0 0 0-11.8Zm-0.8 3.4h1.7v5.1h-1.7ZM2.9 15h18.2v6H2.9ZM7.8 17.1v1.6h8.5V17.1Z"/>',@@@ -400,7 +401,7 @@layers: '<path d="M12 4.3l8.6 5l-8.6 5l-8.6-5Z"/><path class="ln" d="M3.9 13.9l8.1 4.5l8.1-4.5"/>',phone: '<path d="M5.1 2.4h4.9l2.4 6l-2.7 1.6a10.7 10.7 0 0 0 4.2 4.2l1.6-2.7l6 2.4v4.9a2.3 2.3 0 0 1-2.3 2.3A17.3 17.3 0 0 1 2.8 4.6a2.3 2.3 0 0 1 2.3-2.3Z"/>',money: '<path fill-rule="evenodd" d="M4.8 5.7h14.4a2.1 2.1 0 0 1 2.1 2.1v8.4a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1V7.8a2.1 2.1 0 0 1 2.1-2.1ZM12 8.9a3.1 3.1 0 1 0 0 6.3a3.1 3.1 0 0 0 0-6.3ZM6.3 8.7a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Zm11.4 4.6a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Z"/><circle cx="12" cy="12" r="1.4"/>',-- care: '<path d="M17 11s-4.1-2.4-4.1-5.4a2.3 2.3 0 0 1 4.1-1.6a2.3 2.3 0 0 1 4.1 1.6c0 2.9-4.1 5.4-4.1 5.4Z"/><path class="ln" d="M3.5 16.2h3.2l4.3 3.2h5.9a2.1 2.1 0 0 0 0-4.3H13.3M7.9 16.2l2.3-2.1h3.6"/>',++ care: '<path d="M12 11s-4.3-2.6-4.3-5.6a2.3 2.3 0 0 1 4.3-1.5a2.3 2.3 0 0 1 4.3 1.5c0 3-4.3 5.6-4.3 5.6Z"/><path class="ln" d="M3.8 13.8v6M3.8 15.2h3.1l3.3 2.7h7.5a1.7 1.7 0 0 0 0-3.4h-3.9"/>',news: '<path fill-rule="evenodd" d="M2.8 2.6h14.2v15.2a2.2 2.2 0 0 0 2.2 2.2H5.1A2.2 2.2 0 0 1 2.8 18.9ZM6.6 6.6h6.8v1.7H6.6Zm0 3.7h6.8v1.7H6.6Zm0 3.7h4v1.7H6.6Z"/><path class="ln" d="M17.1 7.7H19.8V17.9a2.1 2.1 0 0 1-2.1 2.1"/>',hand: '<path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/>',tack: '<path d="M8.5 3h7.2a0.8 0.8 0 0 1 0.8 1l-0.8 4l2.8 2.8a0.7 0.7 0 0 1-0.6 1.4H6.1a0.7 0.7 0 0 1-0.6-1.4l2.8-2.8l-0.8-4a0.8 0.8 0 0 1 0.8-1Z"/><path class="ln" d="M12 12.2V20.5"/>',@@@ -602,7 +602,7 @@* serves its own pinned copy at /shared/ gets its own), else the network's copy.*/// The files loaded from beside this one, by content (scripts/sibling-revs.js): a release changes their URLs.-- const SIBLING_REV = { 'ov-mark.js': 'f34f731c3a94', 'ov-glyphs.js': 'aee8e54637c2', 'ov-brand.woff2': '3b4e6a8a5878', 'ov-look.js': 'dd84a30bb646', 'ov-fx.js': '947820d69097', 'ov-labels.js': 'd40f7ca14bc4', 'ov-forms.js': '2eb9e2604c3e', 'ov-forms.css': '06208fe89eac', 'ov-share.js': 'd419508a797e', 'ov-share.css': 'd609a71f611a', 'search.js': 'f9f34e3030b0', 'dock.js': 'aa5ad5d80283', 'presence.js': '5f195d41f8c5', 'panels.js': 'd90bfe987d81', 'surfaces.js': 'a94e76bd1200', 'notification-ui.js': '3b6d2e2933de', 'history.js': 'f9fb9e096c65', 'bottom.js': '4bcb219a2624', 'appbar.js': 'c21485176ae9', 'release-watch.js': '25f02a3f0684', 'ov-icons.js': 'aaa688bf6fc7', 'sso-client.js': '52439265b980', 'overlay.js': '2bc56b3cf726', 'ov-home.js': '0724f4913525', 'nav-slots.js': '7b11e6916732', 'ov-wallet.js': '22286b70f8f6', 'ov-wallet.css': 'be8daa24c3a8', 'purse.js': '9d3fea0dae02', 'ov-drop.js': '445689a5eb80', 'ov-tip.js': '1d918e7de69d', 'soft.js': '98ab9b8080b1' };++ const SIBLING_REV = { 'ov-mark.js': 'f34f731c3a94', 'ov-glyphs.js': '642a391c85d5', 'ov-brand.woff2': '3b4e6a8a5878', 'ov-look.js': 'dd84a30bb646', 'ov-fx.js': '947820d69097', 'ov-labels.js': 'd40f7ca14bc4', 'ov-forms.js': '2eb9e2604c3e', 'ov-forms.css': '06208fe89eac', 'ov-share.js': 'd419508a797e', 'ov-share.css': 'd609a71f611a', 'search.js': 'f9f34e3030b0', 'dock.js': 'aa5ad5d80283', 'presence.js': '5f195d41f8c5', 'panels.js': 'd90bfe987d81', 'surfaces.js': 'a94e76bd1200', 'notification-ui.js': '3b6d2e2933de', 'history.js': 'f9fb9e096c65', 'bottom.js': '4bcb219a2624', 'appbar.js': 'c21485176ae9', 'release-watch.js': '25f02a3f0684', 'ov-icons.js': 'aaa688bf6fc7', 'sso-client.js': 'f574ac3331a5', 'overlay.js': '2bc56b3cf726', 'ov-home.js': '0724f4913525', 'nav-slots.js': '7b11e6916732', 'ov-wallet.js': '22286b70f8f6', 'ov-wallet.css': 'be8daa24c3a8', 'purse.js': '9d3fea0dae02', 'ov-drop.js': '445689a5eb80', 'ov-tip.js': '1d918e7de69d', 'ov-arrange.js': '898af091b3e1', 'soft.js': '98ab9b8080b1' };const siblingV = (name) => `${sibling(name)}${SIBLING_REV[name] ? `?v=${SIBLING_REV[name]}` : ''}`;// ov-tip.js loads at the first hover over a tooltip's owner.@@@ -1822,6 +1822,7 @@}let _authInFlight = null;++ let _hintPainted = false, _hintSettled = false;function ssoHint() {const m = (typeof document !== 'undefined' ? document.cookie : '').match(/(?:^|;\s*)ov_sso_hint=([^;]*)/);@@@ -1829,6 +1830,19 @@try { return localStorage.getItem('ov_sso_hint'); } catch { return null; }}++ /**++ * The first paint, before the session check: a hint that this browser signed in here. It is not++ * authorization and carries no token; only the account's own name may ride along (account:<name>).++ */++ function hintUser() {++ let raw = ssoHint() || '';++ try { raw = decodeURIComponent(raw); } catch { /* as written */ }++ const m = /^account(?::(.{1,64}))?$/.exec(raw);++ if (!m) return null;++ let name = (m[1] || '').replace(/^@/, '');++ return { is_anon: false, username: /^[A-Za-z0-9_.-]{1,64}$/.test(name) ? name : '', __ssoHint: true };++ }++/** One silent sign-in per tab, only after an earlier sign-in here (never after 'guest', never for bots): silent=1. */let _ssoClientLoading = null;function loadSsoClient() {@@@ -1965,7 +1979,9 @@enableHandoff();startQuestGuide();} else {-- maybeSilentLogin();++ const navigating = maybeSilentLogin();++ // The hint was only a first paint: no session behind it, so draw the guest bar.++ if (_hintPainted && !navigating) { _hintPainted = false; _hintSettled = true; render(); }}try {document.dispatchEvent(new CustomEvent('openvibe-navbar-auth', {@@@ -2124,7 +2140,11 @@if (typeof nav.setAttribute === 'function') { nav.setAttribute('data-compact', _config.compact || 'auto'); nav.setAttribute('data-service', svc); }const links = currentLinks();-- const u = _config.user;++ // With the hint saying account, the bar starts in the signed-in shape (a neutral avatar, the++ // account's name only when the hint carries it). refreshAuthState replaces or clears it.++ const hinted = !_config.user && !_hintSettled && _config.auth !== 'external' ? hintUser() : null;++ if (hinted) _hintPainted = true;++ const u = _config.user || hinted;rememberAccount(u);const accounts = getAccounts();const isAnon = u && u.is_anon;nnew file mode 100644@@@ -0,0 +1,315 @@++/* Generated by scripts/build-arrange-core.js from openvibe-sdk 0.152.0 (src/ui-layout.js). Do not edit:++ * change the SDK, release it, bump the pin, and run the script. The SDK's file, unchanged but for the name of++ * module.exports:++ * ui-layout.js 4a079a94b487fd25++ */++(function (root) {++ 'use strict';++ if (!root || root.OVArrangeCore) return;++ const __ovArrangeCoreModule = { exports: {} };++'use strict';++/**++ * ui.layout validation and editing (make your own controls design, 2026-11-11, pieces 2-3).++ *++ * One function is the authority for a person's arrangement of a surface: the server uses it before++ * a layout is stored, the editor uses it before Save, and OpenVibe.AI uses it on every answer. It is++ * plain code with no browser or Node dependency, so the same check runs everywhere.++ *++ * validate(catalog, layout) -> { ok, reasons[] } the catalog is ui.surface@1, the layout ui.layout@1++ * applyDefaults(catalog) -> a valid layout for the default (or named) device++ * merge(layout, patch) -> a new layout, patched by part id++ *++ * The rules, in the words a person sees (the design note's "Can't do that: <reason>"):++ * - required parts present, visible and at their minimum size;++ * - anything pressed is at least 44 px, and a part above that gets its own minimum (Stop 64 px);++ * - nothing covers a required part, and a catalog's never_covers rules hold;++ * - every tint is a theme token the catalog lists, and every style and binding is one the part allows;++ * - only parts the catalog has;++ * - no URL, markup or code anywhere: a layout is data.++ *++ * The validator never changes a layout and never fills a missing value in: a caller that wants the++ * default asks applyDefaults. Reasons are unique and in a stable order, so two runs and two callers++ * agree on the refusal.++ */++++const DEVICE_PX = { phone: 44, tablet: 44, computer: 44 };++const DEVICE_COLUMNS = { phone: 4, tablet: 8, computer: 12 };++const PRESSED_PX = 44;++const MIN_OPACITY = 0.4;++const MAX_OPACITY = 1;++const URL_RE = /(?:https?:\/\/|www\.)/i;++const SCHEME_RE = /(?:^|[\s"'(])(?:javascript|data|vbscript|file):/i;++const CODE_RE = /(?:<\s*\/?\s*(?:script|iframe|img|svg|style|a|object|embed)\b|\bon[a-z]{3,}\s*=|\bfunction\s*\(|=>|\beval\s*\(|\brequire\s*\(|\bimport\s*\()/i;++++const isObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);++const clone = (v) => (v === undefined ? undefined : JSON.parse(JSON.stringify(v)));++const nameOf = (part) => String((part && part.name) || (part && part.id) || 'that part');++const unique = (list) => [...new Set(list)];++++/** Every string (and object key) in a value, for the no-URL/no-code rule. */++function stringsIn(value, out = []) {++ if (typeof value === 'string') { out.push(value); return out; }++ if (Array.isArray(value)) { for (const v of value) stringsIn(v, out); return out; }++ if (!isObject(value)) return out;++ for (const [k, v] of Object.entries(value)) { out.push(k); stringsIn(v, out); }++ return out;++}++++/** A part's size in cells: grid place (w/h) or dock place (w/h); null when the place is unusable. */++function sizeOf(place) {++ if (!isObject(place)) return null;++ if (place.dock !== undefined) {++ return Number.isInteger(place.w) && Number.isInteger(place.h) && place.w >= 1 && place.h >= 1 ? { w: place.w, h: place.h } : null;++ }++ return Number.isInteger(place.w) && Number.isInteger(place.h) && place.w >= 1 && place.h >= 1 ? { w: place.w, h: place.h } : null;++}++++/** The rectangular cells a visible part occupies, or null for a dock (which covers along its edge). */++function boxOf(part) {++ const p = part && part.place;++ if (!isObject(p) || p.dock !== undefined) return null;++ if (![p.x, p.y, p.w, p.h].every(Number.isInteger)) return null;++ if (p.x < 0 || p.y < 0 || p.w < 1 || p.h < 1) return null;++ return { x: p.x, y: p.y, w: p.w, h: p.h };++}++++function overlaps(a, b) {++ return a.x < b.x + b.w && b.x < a.x + a.w && a.y < b.y + b.h && b.y < a.y + a.h;++}++++/** Two docked parts cover each other only when they claim the same edge and order. */++function dockOverlaps(a, b) {++ const pa = a && a.place;++ const pb = b && b.place;++ return isObject(pa) && isObject(pb) && pa.dock !== undefined && pb.dock !== undefined++ && pa.dock === pb.dock && pa.order === pb.order;++}++++/**++ * Check one layout against its surface catalog.++ * @returns {{ ok: boolean, reasons: string[] }}++ */++function validate(catalog, layout) {++ const reasons = [];++ const fail = (reason) => { if (!reasons.includes(reason)) reasons.push(reason); };++ if (!isObject(catalog) || !Array.isArray(catalog.parts)) {++ return { ok: false, reasons: ['The surface catalog is missing.'] };++ }++ if (!isObject(layout)) return { ok: false, reasons: ['A layout has to be an object.'] };++++ // A layout is data: never a URL, markup or code, anywhere in a name, a value or a key.++ if (stringsIn(layout).some((s) => URL_RE.test(s) || SCHEME_RE.test(s) || CODE_RE.test(s))) {++ fail("A layout is data only: it can't carry a URL or code.");++ }++++ if (layout.surface !== catalog.id) fail(`This layout is not for ${catalog.id || 'this surface'}.`);++ if (layout.surface_version !== catalog.version) {++ fail(`${catalog.name || 'This surface'} has changed since this layout was made; reset it to the default.`);++ }++ const device = layout.device;++ const devices = Array.isArray(catalog.devices) ? catalog.devices : ['phone', 'tablet', 'computer'];++ if (!devices.includes(device)) fail(`This surface doesn't come in ${device || 'that device'}.`);++++ const columns = (catalog.grid && catalog.grid.columns && catalog.grid.columns[device]) || DEVICE_COLUMNS[device] || 4;++ const cellPx = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[device]) || DEVICE_PX[device] || 44;++ const tokens = Array.isArray(catalog.theme_tokens) ? catalog.theme_tokens : [];++ const byId = new Map(catalog.parts.filter((p) => p && p.id).map((p) => [p.id, p]));++ const parts = Array.isArray(layout.parts) ? layout.parts : [];++ const placed = new Map();++++ if (!Array.isArray(layout.parts) || layout.parts.length === 0) fail('A layout needs at least one part.');++++ for (const placedPart of parts) {++ if (!isObject(placedPart) || typeof placedPart.id !== 'string') { fail('Every part in a layout needs an id.'); continue; }++ const source = byId.get(placedPart.id);++ if (!source) { fail(`${placedPart.id} is not a part of ${catalog.name || 'this surface'}.`); continue; }++ if (placed.has(placedPart.id)) { fail(`${nameOf(source)} appears more than once.`); continue; }++ placed.set(placedPart.id, placedPart);++++ const name = nameOf(source);++ if (source.required && placedPart.visible !== true) fail(`${name} has to stay visible.`);++++ const place = placedPart.place;++ if (!isObject(place)) { fail(`${name} needs a place on the surface.`); continue; }++ const size = sizeOf(place);++ if (!size) { fail(`${name} needs a size, in cells.`); continue; }++ if (place.dock !== undefined) {++ if (!['left', 'right', 'top', 'bottom'].includes(place.dock)) fail(`${name} can only dock to an edge.`);++ if (!Number.isInteger(place.order) || place.order < 0) fail(`${name} needs a place in the dock order.`);++ } else {++ if (!Number.isInteger(place.x) || place.x < 0 || !Number.isInteger(place.y) || place.y < 0) fail(`${name} needs a place on the grid.`);++ else if (place.x + place.w > columns) fail(`${name} runs past the edge of the ${device} grid.`);++ }++ const min = source.min || {};++ if (size.w < (min.w || 1) || size.h < (min.h || 1)) {++ fail(`${name} has to be at least ${Math.max(min.w || 1, 1)} × ${Math.max(min.h || 1, 1)} cells.`);++ }++ const needPx = Math.max(source.pressed ? PRESSED_PX : 0, Number(min.px) || 0);++ if (needPx && (size.w * cellPx < needPx || size.h * cellPx < needPx)) fail(`${name} has to be at least ${needPx} px.`);++++ const style = isObject(placedPart.style) ? placedPart.style : {};++ const allowedStyles = isObject(source.styles) ? source.styles : {};++ if (typeof style.tint !== 'string' || !tokens.includes(style.tint)) {++ fail(`${name}'s tint has to be one of the theme's tokens${tokens.length ? ` (${tokens.join(', ')})` : ''}.`);++ } else if (Array.isArray(allowedStyles.tints) && !allowedStyles.tints.includes(style.tint)) {++ fail(`${name} can only be tinted ${allowedStyles.tints.join(', ')}.`);++ }++ if (!['round', 'pill', 'square'].includes(style.shape)) fail(`${name} needs a shape: round, pill or square.`);++ else if (Array.isArray(allowedStyles.shapes) && !allowedStyles.shapes.includes(style.shape)) {++ fail(`${name} can only be ${allowedStyles.shapes.join(', ')}.`);++ }++ const low = Math.max(MIN_OPACITY, Number(allowedStyles.opacity && allowedStyles.opacity.min) || MIN_OPACITY);++ const high = Math.min(MAX_OPACITY, Number(allowedStyles.opacity && allowedStyles.opacity.max) || MAX_OPACITY);++ if (typeof style.opacity !== 'number' || style.opacity < low || style.opacity > high) {++ fail(`${name}'s opacity has to be between ${low} and ${high}.`);++ }++ if (style.label !== true && style.label !== false) fail(`${name} says whether its label is on.`);++ else if (style.label && allowedStyles.label === false) fail(`${name} can't show a label.`);++++ const bindings = isObject(placedPart.bindings) ? placedPart.bindings : {};++ const allowed = isObject(source.bindings) ? source.bindings : {};++ for (const kind of ['keys', 'gamepad']) {++ const list = Array.isArray(bindings[kind]) ? bindings[kind] : [];++ const ok = Array.isArray(allowed[kind]) ? allowed[kind] : [];++ const bad = list.filter((b) => !ok.includes(b));++ if (bad.length) fail(`${name} can't be bound to ${bad.join(', ')}.`);++ if (new Set(list).size !== list.length) fail(`${name} binds ${kind} more than once.`);++ }++ }++++ for (const source of catalog.parts) {++ if (source && source.required && !placed.has(source.id)) fail(`${nameOf(source)} has to stay on the surface.`);++ }++++ // Nothing covers a required part. Only a visible part can cover anything, and a required part++ // that is itself hidden is already refused above; its neighbours still do not cover it.++ const visible = parts.filter((p) => p && p.visible === true && placed.has(p.id));++ for (const required of visible) {++ const source = byId.get(required.id);++ if (!source || !source.required) continue;++ for (const other of visible) {++ if (other === required || other.id === required.id) continue;++ const covers = overlaps(boxOf(required) || { x: 0, y: 0, w: 0, h: 0 }, boxOf(other) || { x: 0, y: 0, w: 0, h: 0 })++ || dockOverlaps(required, other);++ if (covers) fail(`${nameOf(byId.get(other.id))} covers ${nameOf(source)}.`);++ }++ }++ // A catalog's own never_covers rules, in either direction of the relation it states.++ for (const [id, source] of byId) {++ const own = placed.get(id);++ if (!own || own.visible !== true) continue;++ for (const targetId of Array.isArray(source.never_covers) ? source.never_covers : []) {++ const target = placed.get(targetId);++ if (!target || target.visible !== true) continue;++ const targetSource = byId.get(targetId);++ if (overlaps(boxOf(own) || { x: 0, y: 0, w: 0, h: 0 }, boxOf(target) || { x: 0, y: 0, w: 0, h: 0 }) || dockOverlaps(own, target)) {++ fail(`${nameOf(source)} covers ${nameOf(targetSource || { id: targetId })}.`);++ }++ }++ }++++ return { ok: reasons.length === 0, reasons };++}++++/** The cells a part needs at the default size: its own minimum, and at least 44 px when pressed. */++function cellsFor(part, cellPx) {++ const min = part.min || {};++ const px = Math.max(part.pressed ? PRESSED_PX : 0, Number(min.px) || 0);++ return {++ w: Math.max(1, Number(min.w) || 1, px ? Math.ceil(px / cellPx) : 0),++ h: Math.max(1, Number(min.h) || 1, px ? Math.ceil(px / cellPx) : 0),++ };++}++++/**++ * The default arrangement of a surface: every catalog part, visible, at its minimum (or a size that++ * meets the 44 px rule), required parts first, laid out left to right and then down the grid.++ * @param {object} catalog ui.surface@1++ * @param {'phone'|'tablet'|'computer'} [device] defaults to the catalog's first device++ */++function applyDefaults(catalog, device) {++ if (!isObject(catalog) || !Array.isArray(catalog.parts)) throw new TypeError('applyDefaults: a ui.surface@1 catalog is required');++ const chosen = (Array.isArray(catalog.devices) && catalog.devices.includes(device)) ? device : (catalog.devices || ['phone'])[0];++ const columns = (catalog.grid && catalog.grid.columns && catalog.grid.columns[chosen]) || DEVICE_COLUMNS[chosen] || 4;++ const cellPx = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[chosen]) || DEVICE_PX[chosen] || 44;++ const ordered = [...catalog.parts].sort((a, b) => (b.required ? 1 : 0) - (a.required ? 1 : 0));++ let x = 0; let y = 0; let rowHeight = 0;++ const parts = ordered.map((part) => {++ const size = cellsFor(part, cellPx);++ const w = Math.min(columns, size.w);++ const h = size.h;++ if (x + w > columns) { x = 0; y += rowHeight; rowHeight = 0; }++ const place = { x, y, w, h };++ x += w;++ rowHeight = Math.max(rowHeight, h);++ const styles = isObject(part.styles) ? part.styles : {};++ const bindings = isObject(part.bindings) ? part.bindings : {};++ const tokens = Array.isArray(catalog.theme_tokens) ? catalog.theme_tokens : [];++ const tints = Array.isArray(styles.tints) ? styles.tints : [];++ return {++ id: part.id,++ visible: true,++ place,++ style: {++ tint: tints.find((t) => tokens.includes(t)) || tints[0] || tokens[0] || 'surface',++ shape: (Array.isArray(styles.shapes) && styles.shapes[0]) || 'square',++ opacity: 1,++ label: styles.label !== false,++ },++ bindings: {++ keys: Array.isArray(bindings.keys) ? [...bindings.keys] : [],++ gamepad: Array.isArray(bindings.gamepad) ? [...bindings.gamepad] : [],++ },++ };++ });++ return {++ surface: catalog.id,++ surface_version: catalog.version,++ device: chosen,++ name: 'Default',++ author: { name: 'OpenVibe' },++ sharing: 'private',++ parts,++ };++}++++function mergeInto(base, patch) {++ if (!isObject(base)) return clone(patch);++ if (!isObject(patch)) return clone(patch);++ const out = clone(base);++ for (const [key, value] of Object.entries(patch)) {++ if (isObject(value) && isObject(out[key])) out[key] = mergeInto(out[key], value);++ else out[key] = clone(value);++ }++ return out;++}++++/**++ * A new layout with `patch` applied. `parts` are merged by id: a patch part changes only the fields it++ * names, and a part the layout does not have is appended. Nothing is mutated, and the result is not++ * validated (the caller validates before storing or showing it).++ */++function merge(layout, patch) {++ if (!isObject(layout)) throw new TypeError('merge: a layout is required');++ if (!isObject(patch)) return clone(layout);++ const out = clone(layout);++ for (const [key, value] of Object.entries(patch)) {++ if (key === 'parts' && Array.isArray(value)) {++ const parts = Array.isArray(out.parts) ? out.parts.map(clone) : [];++ const index = new Map(parts.map((p, i) => [p && p.id, i]));++ for (const incoming of value) {++ if (!isObject(incoming) || typeof incoming.id !== 'string') { parts.push(clone(incoming)); continue; }++ if (index.has(incoming.id)) parts[index.get(incoming.id)] = mergeInto(parts[index.get(incoming.id)], incoming);++ else { index.set(incoming.id, parts.length); parts.push(clone(incoming)); }++ }++ out.parts = parts;++ } else if (isObject(value) && isObject(out[key])) out[key] = mergeInto(out[key], value);++ else out[key] = clone(value);++ }++ return out;++}++++__ovArrangeCoreModule.exports = { validate, applyDefaults, merge, PRESSED_PX };++++ root.OVArrangeCore = __ovArrangeCoreModule.exports;++})(typeof globalThis !== 'undefined' ? globalThis : this);nnew file mode 100644@@@ -0,0 +1,844 @@++/**++ * openvibe-shared/ov-arrange.js — the Arrange editor (make your own controls, stage 2, 2026-11-11).++ *++ * A product publishes a ui.surface@1 catalog and renders one element per part with data-ov-part="<id>".++ * A person's ui.layout@1 is applied to those real parts: a place on the surface's grid, or a dock edge for++ * an overlay; visible; a style (a theme token, a shape, an opacity and the label); and bindings. This file++ * is loaded only when someone presses Arrange (a product loads it then, by the shared serve URL, and this++ * file loads its own sibling ov-arrange-core.js — openvibe-sdk/ui-layout for the browser — by content hash).++ *++ * OVArrange.open({++ * surface, catalog, layout, device: 'phone'|'tablet'|'computer',++ * validate(catalog, layout) -> { ok, reasons[] }, // optional: defaults to the sdk core++ * defaults(catalog) -> layout, // optional: defaults to the sdk core++ * onSave(layout) -> Promise<{ ok?, reasons? }>, // PUT the person's layout (Network)++ * onShare(layout) -> Promise<{ url?, reasons? }>, // save, then a share link++ * onReset() -> Promise<{ ok?, reasons? }>, // clear the stored layout (Network's reset)++ * onAsk(words, request) -> Promise<ui.layout-suggestion@1>,++ * onClose(), confirm() -> boolean, core++ * }) -> { close, apply, layout, destroy }++ *++ * Edit mode: drag a part to move it, drag its corner to resize, arrow keys to move and Shift with the++ * arrows to resize (for a docked part: the arrows choose the edge, up/down its order). A part's sheet++ * (long press on a phone, the Style button, or Enter on a part) has visible, size, style and bindings.++ * Every move and resize is announced, and a refused move says why in plain words (Stop has to stay++ * visible; it is too small). Undo, Reset to default, Save and Share are in the bar, with Ask OpenVibe:++ * a suggestion is previewed on the real parts and kept only with Keep. Motion Off changes nothing;++ * Calm plays the short transition. Plain kit markup (ovk-*): the look is the page's.++ */++(function (root) {++ 'use strict';++ if (!root || root.OVArrange || typeof document === 'undefined') return;++++ const VERSION = '1.0.0';++ const MOTION = () => {++ const m = document.documentElement.getAttribute('data-ov-motion');++ if (m === 'off') return 'off';++ return m === 'reduced' || (!m && root.matchMedia && root.matchMedia('(prefers-reduced-motion: reduce)').matches) ? 'calm' : 'full';++ };++++ const CSS = `++.ov-arrange-surface { position: relative; display: grid; grid-template-columns: repeat(var(--ov-cols, 12), minmax(0, 1fr)); grid-auto-rows: minmax(var(--ov-cell, 64px), auto); gap: var(--ov-gap, .75rem); }++.ov-arrange-surface > [data-ov-part] { min-width: 0; min-height: 0; opacity: var(--ov-part-opacity, 1); }++.ov-arrange-surface > [data-ov-part][data-ov-label="false"] .ov-arrange-label { display: none; }++.ov-arrange-editing [data-ov-part] { cursor: grab; outline: 1px dashed color-mix(in srgb, var(--accent, #3b82f6) 55%, transparent); outline-offset: 2px; touch-action: none; transition: box-shadow var(--ov-arrange-dur, .2s) ease, outline-color var(--ov-arrange-dur, .2s) ease; }++.ov-arrange-editing [data-ov-part]:focus-visible { outline: 2px solid var(--accent, #3b82f6); outline-offset: 3px; }++.ov-arrange-editing [data-ov-part][data-ov-selected] { outline: 2px solid var(--accent, #3b82f6); outline-offset: 3px; }++.ov-arrange-editing [data-ov-part] :is(button, input, select, textarea, a, [role="button"]) { pointer-events: none; }++.ov-arrange-editing [data-ov-part][data-ov-dragging] { cursor: grabbing; opacity: .8; }++.ov-arrange-editing [data-ov-part][data-ov-refused] { outline-color: var(--danger, #e5484d); }++.ov-arrange-sel { position: fixed; z-index: 2147482990; pointer-events: none; border: 2px solid var(--accent, #3b82f6); border-radius: 10px; box-shadow: 0 0 0 9999px color-mix(in srgb, #000 14%, transparent); }++.ov-arrange-handle, .ov-arrange-style { position: fixed; z-index: 2147482991; pointer-events: auto; width: 34px; height: 34px; min-width: 34px; min-height: 34px; padding: 0; display: grid; place-items: center; border-radius: 9px; border: 1px solid var(--line, rgba(255,255,255,.2)); background: var(--raised, #1b2230); color: var(--text, #eef); cursor: nwse-resize; }++.ov-arrange-handle { touch-action: none; }++.ov-arrange-style { cursor: pointer; font-size: 15px; }++.ov-arrange-handle::before { content: ""; width: 12px; height: 12px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translate(-2px, -2px); }++.ov-arrange-bar { position: fixed; z-index: 2147483000; left: 50%; bottom: max(12px, env(safe-area-inset-bottom)); transform: translateX(-50%); width: min(56rem, calc(100vw - 24px)); display: grid; gap: 8px; padding: 10px 12px; border: 1px solid var(--line, rgba(255,255,255,.16)); border-radius: 16px; background: var(--surface, #151b26); color: var(--text, #eef); box-shadow: 0 18px 50px -16px rgba(0,0,0,.7); font: 14px/1.4 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }++.ov-arrange-bar form { display: flex; gap: 8px; min-width: 0; }++.ov-arrange-bar input { flex: 1; min-width: 0; min-height: 40px; padding: 0 12px; border-radius: 10px; border: 1px solid var(--line, rgba(255,255,255,.18)); background: var(--bg, #0d1117); color: var(--text, #eef); font: inherit; }++.ov-arrange-actions { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }++.ov-arrange-actions .ovk-btn, .ov-arrange-bar form .ovk-btn { min-height: 38px; }++.ov-arrange-status { margin: 0; min-height: 1.2em; color: var(--muted, #9aa6b6); font-size: 12.5px; }++.ov-arrange-status[data-tone="bad"] { color: var(--danger, #e5484d); }++.ov-arrange-status[data-tone="ok"] { color: var(--ok, #3fb950); }++.ov-arrange-preview { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 10px; background: color-mix(in srgb, var(--accent, #3b82f6) 14%, transparent); }++.ov-arrange-preview p { margin: 0; flex: 1 1 14rem; }++.ov-arrange-sheet { position: fixed; z-index: 2147483001; inset: auto 0 0 0; max-height: min(82vh, 42rem); overflow: auto; padding: 14px; background: var(--surface, #151b26); color: var(--text, #eef); border-top: 1px solid var(--line, rgba(255,255,255,.18)); border-radius: 16px 16px 0 0; box-shadow: 0 -20px 50px -20px rgba(0,0,0,.7); font: 14px/1.4 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; display: grid; gap: 12px; }++@media (min-width: 44rem) { .ov-arrange-sheet { left: 50%; right: auto; bottom: 50%; transform: translate(-50%, 50%); width: min(30rem, calc(100vw - 32px)); border-radius: 16px; border: 1px solid var(--line, rgba(255,255,255,.18)); } }++.ov-arrange-sheet h2 { margin: 0; font-size: 15px; }++.ov-arrange-sheet .ov-arrange-row { display: grid; gap: 5px; }++.ov-arrange-sheet .ov-arrange-row > span { font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted, #9aa6b6); }++.ov-arrange-sheet .ov-arrange-opts { display: flex; flex-wrap: wrap; gap: 6px; }++.ov-arrange-sheet .ov-arrange-opts label { display: inline-flex; align-items: center; gap: 5px; min-height: 36px; padding: 0 10px; border: 1px solid var(--line, rgba(255,255,255,.18)); border-radius: 9px; cursor: pointer; }++.ov-arrange-sheet .ov-arrange-opts input { margin: 0; }++.ov-arrange-sheet .ov-arrange-close { justify-self: end; }++.ov-arrange-sheet input[type="text"] { min-height: 38px; padding: 0 10px; border-radius: 9px; border: 1px solid var(--line, rgba(255,255,255,.18)); background: var(--bg, #0d1117); color: var(--text, #eef); font: inherit; }++.ov-arrange-share { display: grid; gap: 8px; padding: 10px; border-radius: 10px; background: var(--bg, #0d1117); }++.ov-arrange-share input { width: 100%; min-height: 38px; padding: 0 10px; border-radius: 9px; border: 1px solid var(--line, rgba(255,255,255,.18)); background: var(--surface, #151b26); color: var(--text, #eef); font: inherit; }++html[data-ov-motion="off"] .ov-arrange-surface [data-ov-part], html[data-ov-motion="off"] .ov-arrange-sel, html[data-ov-motion="off"] .ov-arrange-bar { transition: none !important; }++html[data-ov-motion="reduced"] { --ov-arrange-dur: .12s; }++`;++++ const clone = (v) => (v == null ? v : JSON.parse(JSON.stringify(v)));++ const isObj = (v) => !!v && typeof v === 'object' && !Array.isArray(v);++ const esc = (s) => String(s == null ? '' : s);++ const partName = (catalog, id) => {++ const p = (catalog.parts || []).find((x) => x.id === id);++ return p ? p.name : id;++ };++ const catalogPart = (catalog, id) => (catalog.parts || []).find((x) => x.id === id) || null;++ const entryOf = (layout, id) => ((layout && layout.parts) || []).find((p) => p.id === id) || null;++ const docked = (place) => !!(place && place.dock);++++ function styleOnce(doc) {++ if (doc.getElementById('ov-arrange-styles')) return;++ const st = doc.createElement('style');++ st.id = 'ov-arrange-styles';++ st.textContent = CSS;++ (doc.head || doc.documentElement).appendChild(st);++ }++++ // ── The SDK's rules, as a browser sibling (scripts/build-arrange-core.js) ─────────────────────────++ const ARRANGE_CORE_REV = { 'ov-arrange-core.js': 'bc9a2caac869' };++ let coreLoading = null;++ function loadCore(opts) {++ if (opts && opts.core) return Promise.resolve(opts.core);++ if (root.OVArrangeCore) return Promise.resolve(root.OVArrangeCore);++ if (coreLoading) return coreLoading;++ if (!root.document || !document.currentScript) return Promise.resolve(null);++ const src = document.currentScript.src || '';++ if (!src) return Promise.resolve(null);++ const url = src.replace(/[^/]*$/, `ov-arrange-core.js${ARRANGE_CORE_REV['ov-arrange-core.js'] ? `?v=${ARRANGE_CORE_REV['ov-arrange-core.js']}` : ''}`);++ coreLoading = new Promise((resolve) => {++ const sc = document.createElement('script');++ sc.src = url; sc.async = true;++ sc.onload = () => resolve(root.OVArrangeCore || null);++ sc.onerror = () => resolve(null);++ document.head.appendChild(sc);++ });++ return coreLoading;++ }++++ // The rules when the SDK core is not there (a product without the sibling): the same checks the contract++ // lists, in the same plain words. The SDK remains the one authority when it is loaded.++ function fallbackValidate(catalog, layout) {++ const reasons = [];++ const parts = catalog && catalog.parts || [];++ const byId = new Map(parts.map((p) => [p.id, p]));++ if (!isObj(layout)) return { ok: false, reasons: ['That is not a layout.'] };++ if (layout.surface !== catalog.id) reasons.push(`This layout is for ${esc(layout.surface)}, not ${esc(catalog.id)}.`);++ if (layout.surface_version !== catalog.version) reasons.push('This layout was made for another version of these controls.');++ if (!(catalog.devices || []).includes(layout.device)) reasons.push(`These controls do not work on a ${esc(layout.device)}.`);++ if (!Array.isArray(layout.parts) || !layout.parts.length) reasons.push('A layout needs at least one part.');++ const seen = new Set();++ const entries = Array.isArray(layout.parts) ? layout.parts : [];++ for (const e of entries) {++ if (!isObj(e) || typeof e.id !== 'string') { reasons.push('A layout has a part without an id.'); continue; }++ if (seen.has(e.id)) reasons.push(`${partName(catalog, e.id)} is in the layout twice.`);++ seen.add(e.id);++ if (!byId.has(e.id)) { reasons.push(`These controls have no part called ${esc(e.id)}.`); continue; }++ // No links or code anywhere in the data.++ for (const [k, v] of Object.entries(e)) {++ if (typeof v === 'string' && /(https?:\/\/|\/\/|javascript:|data:|<[a-z])/i.test(v)) reasons.push('A layout only carries data: no links or code.');++ if (k === 'style' && isObj(v)) for (const sv of Object.values(v)) if (typeof sv === 'string' && /(https?:\/\/|\/\/|javascript:|data:|<[a-z])/i.test(sv)) reasons.push('A layout only carries data: no links or code.');++ }++ }++ for (const p of parts) {++ const e = entries.find((x) => isObj(x) && x.id === p.id);++ if (p.required && !e) { reasons.push(`${p.name} has to be there.`); continue; }++ if (!e) continue;++ if (p.required && e.visible === false) { reasons.push(`${p.name} has to stay visible.`); continue; }++ if (!isObj(e.place)) { reasons.push(`${p.name} has no place.`); continue; }++ if (!docked(e.place)) {++ const { x, y, w, h } = e.place;++ const cols = (catalog.grid && catalog.grid.columns && catalog.grid.columns[layout.device]) || 12;++ if (![x, y, w, h].every((n) => Number.isInteger(n))) { reasons.push(`${p.name} needs a place on the grid.`); continue; }++ if (x < 0 || y < 0 || w < 1 || h < 1 || x + w > cols) reasons.push(`${p.name} does not fit on this grid.`);++ if (w < p.min.w || h < p.min.h) reasons.push(`${p.name} is too small: it needs ${p.min.w} by ${p.min.h} cells.`);++ const cell = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[layout.device]) || 44;++ if (p.min.px && (w * cell < p.min.px || h * cell < p.min.px)) reasons.push(`${p.name} has to be at least ${p.min.px} px.`);++ if (p.pressed && (w * cell < 44 || h * cell < 44)) reasons.push(`${p.name} is pressed, so it has to be at least 44 px.`);++ } else {++ if (!['left', 'right', 'top', 'bottom'].includes(e.place.dock)) reasons.push(`${p.name} needs an edge to dock to.`);++ if (!Number.isInteger(e.place.order) || e.place.order < 0) reasons.push(`${p.name} needs an order on its edge.`);++ if (!Number.isInteger(e.place.w) || !Number.isInteger(e.place.h)) reasons.push(`${p.name} needs a size, in cells.`);++ else {++ if (e.place.w < p.min.w || e.place.h < p.min.h) reasons.push(`${p.name} is too small: it needs ${p.min.w} by ${p.min.h} cells.`);++ const cell = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[layout.device]) || 44;++ if (p.min.px && (e.place.w * cell < p.min.px || e.place.h * cell < p.min.px)) reasons.push(`${p.name} has to be at least ${p.min.px} px.`);++ if (p.pressed && (e.place.w * cell < 44 || e.place.h * cell < 44)) reasons.push(`${p.name} is pressed, so it has to be at least 44 px.`);++ }++ }++ const st = e.style || {};++ if (!(catalog.theme_tokens || []).includes(st.tint)) reasons.push(`${p.name} uses a colour this theme does not have.`);++ if (!((p.styles && p.styles.tints) || []).includes(st.tint)) reasons.push(`${partName(catalog, p.id)} cannot use that colour.`);++ if (!((p.styles && p.styles.shapes) || []).includes(st.shape)) reasons.push(`${p.name} cannot be that shape.`);++ if (typeof st.opacity === 'number' && (st.opacity < 0.4 || st.opacity > 1)) reasons.push(`${p.name} has to stay at least 40% visible.`);++ const b = e.bindings || {};++ for (const k of (b.keys || [])) if (!((p.bindings && p.bindings.keys) || []).includes(k)) reasons.push(`${p.name} cannot use the key ${esc(k)}.`);++ for (const g of (b.gamepad || [])) if (!((p.bindings && p.bindings.gamepad) || []).includes(g)) reasons.push(`${p.name} cannot use the gamepad control ${esc(g)}.`);++ }++ // Nothing covers a required part, and never_covers.++ const placed = entries.filter((e) => isObj(e.place) && !docked(e.place));++ const dockedEntries = entries.filter((e) => isObj(e.place) && docked(e.place));++ for (const a of dockedEntries) {++ if (!catalogPart(catalog, a.id)) continue;++ for (const b of dockedEntries) {++ if (a === b || !catalogPart(catalog, b.id)) continue;++ if (a.place.dock === b.place.dock && a.place.order === b.place.order) {++ const ap = catalogPart(catalog, a.id), bp = catalogPart(catalog, b.id);++ if (bp.required) reasons.push(`${partName(catalog, a.id)} covers ${bp.name}.`);++ if (((ap.never_covers) || []).includes(b.id)) reasons.push(`${partName(catalog, a.id)} must never cover ${bp.name}.`);++ }++ }++ }++ for (const a of placed) {++ if (!catalogPart(catalog, a.id)) continue;++ for (const b of placed) {++ if (a === b || !catalogPart(catalog, b.id)) continue;++ const covers = a.place.x < b.place.x + b.place.w && a.place.x + a.place.w > b.place.x && a.place.y < b.place.y + b.place.h && a.place.y + a.place.h > b.place.y;++ if (!covers) continue;++ const bp = catalogPart(catalog, b.id);++ if (bp.required) reasons.push(`${partName(catalog, a.id)} covers ${bp.name}.`);++ if (((catalogPart(catalog, a.id).never_covers) || []).includes(b.id)) reasons.push(`${partName(catalog, a.id)} must never cover ${bp.name}.`);++ }++ }++ return { ok: reasons.length === 0, reasons: [...new Set(reasons)] };++ }++++ // ── Defaults: one visible part after another on the grid; docked parts by their catalog order ─────++ function spanFor(p, device) {++ const cols = (p && p._cols) || 4;++ if (device === 'computer') return { w: Math.min(4, cols), h: 2 };++ if (device === 'tablet') return { w: Math.min(4, cols), h: 2 };++ return { w: cols, h: 2 };++ }++ function fallbackDefaults(catalog, device) {++ const cols = (catalog.grid && catalog.grid.columns && catalog.grid.columns[device]) || 12;++ const overlay = (catalog.id || '').split('.').pop() === 'overlay';++ const parts = (catalog.parts || []).map((p) => {++ const st = { tint: (p.styles && p.styles.tints && p.styles.tints[0]) || (catalog.theme_tokens || ['surface'])[0], shape: (p.styles && p.styles.shapes && p.styles.shapes[0]) || 'square', opacity: 1, label: true };++ const b = { keys: (p.bindings && p.bindings.keys || []).slice(0, 0), gamepad: [] };++ if (overlay) {++ const dock = p.id === 'pill' || p.id === 'stick' ? 'left' : p.id === 'slider' || p.id === 'estop' ? 'bottom' : 'right';++ return { id: p.id, visible: true, place: { dock, order: 0, w: Math.max(p.min.w, p.id === 'stick' ? 2 : p.id === 'estop' ? 2 : 1), h: Math.max(p.min.h, p.id === 'stick' ? 2 : p.id === 'estop' ? 2 : 1) }, style: st, bindings: b };++ }++ return { id: p.id, visible: true, place: { x: 0, y: 0, w: Math.min(spanFor({ ...p, _cols: cols }, device).w, cols), h: Math.max(p.min.h, 2) }, style: st, bindings: b };++ });++ if (!overlay) {++ // Flow them: full-width rows on a phone, two or three columns on larger surfaces.++ let y = 0;++ for (const p of parts) {++ const c = catalogPart(catalog, p.id);++ const w = Math.min(cols, Math.max(c.min.w, device === 'phone' ? cols : Math.min(cols, device === 'tablet' ? 4 : 4)));++ const h = Math.max(c.min.h, c.kind === 'video' ? 3 : c.kind === 'readout' ? 1 : 2);++ if (p.place.x + w > cols) { p.place.x = 0; y += 1; }++ p.place = { x: p.place.x, y, w, h };++ p.place.x += w;++ if (p.place.x >= cols) { p.place.x = 0; y += h; }++ }++ }++ return { surface: catalog.id, surface_version: catalog.version, device, name: 'My layout', author: { name: 'Me' }, sharing: 'private', parts };++ }++++ function fitPlace(place, catalog, device, part) {++ if (!place) return null;++ const cols = (catalog.grid && catalog.grid.columns && catalog.grid.columns[device]) || 12;++ if (docked(place)) return { dock: place.dock, order: Math.max(0, Math.min(63, Number(place.order) || 0)), w: Math.max(1, Math.min(24, Math.round(place.w) || part.min.w)), h: Math.max(1, Math.min(24, Math.round(place.h) || part.min.h)) };++ const w = Math.max(1, Math.min(24, Math.round(place.w) || part.min.w));++ const h = Math.max(1, Math.min(24, Math.round(place.h) || part.min.h));++ return { x: Math.max(0, Math.min(Math.max(0, cols - w), Math.round(place.x) || 0)), y: Math.max(0, Math.min(100, Math.round(place.y) || 0)), w, h };++ }++++ // ── The editor ──────────────────────────────────────────────────────────────────────────────────++ function open(opts) {++ const surface = opts && opts.surface;++ if (!surface || !isObj(opts.catalog)) throw new Error('OVArrange.open: a surface element and its ui.surface@1 catalog are needed');++ const catalog = opts.catalog;++ const doc = surface.ownerDocument || document;++ const device = ['phone', 'tablet', 'computer'].includes(opts.device) ? opts.device : 'computer';++ styleOnce(doc);++ const cols = (catalog.grid && catalog.grid.columns && catalog.grid.columns[device]) || 12;++ const cell = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[device]) || 64;++ const confirmFn = typeof opts.confirm === 'function' ? opts.confirm : (msg) => !root.confirm || root.confirm(msg);++ const announce = (text) => { if (live) live.textContent = text; if (opts.announce) try { opts.announce(text); } catch (_) { /* */ } };++++ let core = opts.core || root.OVArrangeCore || null;++ loadCore(opts).then((c) => { if (c) core = c; }).catch(() => { /* the fallback rules stay */ });++ const validate = (lay) => {++ const fn = (opts.validate || (core && core.validate) || fallbackValidate);++ try {++ const v = fn(catalog, lay, device);++ return v && typeof v.ok === 'boolean' ? { ok: v.ok, reasons: Array.isArray(v.reasons) ? v.reasons : [] } : { ok: false, reasons: ['That layout could not be checked.'] };++ } catch (e) { return { ok: false, reasons: [String(e && e.message || e)] }; }++ };++ const defaults = () => {++ const fn = opts.defaults || (core && core.applyDefaults);++ try { const d = fn ? fn(catalog, device) : null; if (isObj(d)) return d; } catch (_) { /* fall through */ }++ return fallbackDefaults(catalog, device);++ };++ const normal = (lay) => {++ const d = defaults();++ const out = clone(d);++ const base = isObj(lay) ? lay : opts.layout;++ out.surface = catalog.id; out.surface_version = catalog.version; out.device = device;++ if (isObj(base)) {++ out.name = base.name || out.name; out.sharing = base.sharing || out.sharing; out.author = base.author || out.author;++ out.parts = (out.parts || []).map((p) => {++ const got = entryOf(base, p.id);++ return got ? { ...p, ...clone(got) } : p;++ });++ }++ out.parts = (out.parts || []).map((p) => {++ const cp = catalogPart(catalog, p.id) || { min: { w: 1, h: 1 }, styles: {} };++ return { ...p, visible: cp.required ? true : p.visible !== false, place: fitPlace(p.place, catalog, device, cp) || { x: 0, y: 0, w: cp.min.w, h: cp.min.h }, style: { tint: (p.style && p.style.tint) || (cp.styles.tints || catalog.theme_tokens || ['surface'])[0], shape: (p.style && p.style.shape) || (cp.styles.shapes || ['square'])[0], opacity: p.style && typeof p.style.opacity === 'number' ? p.style.opacity : 1, label: p.style && typeof p.style.label === 'boolean' ? p.style.label : (cp.styles && cp.styles.label) !== false }, bindings: { keys: (p.bindings && p.bindings.keys) || [], gamepad: (p.bindings && p.bindings.gamepad) || [] } };++ });++ return out;++ };++++ const initial = normal(opts.layout);++ let working = clone(initial);++ let undoStack = [];++ let preview = null; // { layout, summary, reasons, words }++ let selected = null;++ let dirty = false;++ let saving = false;++ let closed = false;++ let drag = null;++++ const host = doc.createElement('div');++ host.className = 'ov-arrange-bar';++ host.setAttribute('role', 'toolbar');++ host.setAttribute('aria-label', 'Arrange the controls');++ host.innerHTML = `<form data-ask><label class="sr-only" for="ov-arrange-words">Ask OpenVibe</label><input id="ov-arrange-words" type="text" maxlength="500" autocomplete="off" placeholder="Describe how you want it…" aria-label="Ask OpenVibe"><button type="submit" class="ovk-btn ovk-btn--primary">Ask OpenVibe</button></form>++<div class="ov-arrange-actions"><button type="button" class="ovk-btn ovk-btn--quiet" data-undo>Undo</button><button type="button" class="ovk-btn ovk-btn--quiet" data-reset>Reset to default</button><button type="button" class="ovk-btn ovk-btn--quiet" data-share>Share</button><button type="button" class="ovk-btn ovk-btn--primary" data-save>Save</button><button type="button" class="ovk-btn ovk-btn--ghost" data-done>Done</button></div>++<p class="ov-arrange-status" data-status role="status" aria-live="polite"></p>`;++ doc.body.appendChild(host);++ const statusEl = host.querySelector('[data-status]');++ const setStatus = (text, tone) => { statusEl.textContent = text || ''; if (tone) statusEl.dataset.tone = tone; else delete statusEl.dataset.tone; if (text) announce(text); };++ const live = doc.createElement('div');++ live.setAttribute('aria-live', 'polite'); live.setAttribute('aria-atomic', 'true');++ live.className = 'sr-only';++ doc.body.appendChild(live);++++ const sel = doc.createElement('div'); sel.className = 'ov-arrange-sel'; sel.hidden = true; doc.body.appendChild(sel);++ const handle = doc.createElement('button'); handle.type = 'button'; handle.className = 'ov-arrange-handle'; handle.setAttribute('aria-label', 'Resize'); handle.title = 'Resize'; handle.hidden = true; doc.body.appendChild(handle);++ const styleBtn = doc.createElement('button'); styleBtn.type = 'button'; styleBtn.className = 'ov-arrange-style'; styleBtn.textContent = 'Aa'; styleBtn.setAttribute('aria-label', 'Style this part'); styleBtn.title = 'Style this part'; styleBtn.hidden = true; doc.body.appendChild(styleBtn);++++ const partEls = () => [...surface.querySelectorAll('[data-ov-part]')].filter((el) => catalogPart(catalog, el.dataset.ovPart));++ const originals = new Map();++ const innerTab = [];++ for (const el of partEls()) originals.set(el, { style: el.getAttribute('style'), hidden: el.hidden, tabindex: el.getAttribute('tabindex'), role: el.getAttribute('role'), label: el.getAttribute('aria-label'), cls: el.className });++ const surfaceStyle = surface.getAttribute('style');++ const surfaceClass = surface.className;++ const surfaceCustom = surface.getAttribute('data-ov-custom');++ const elOf = (id) => partEls().find((el) => el.dataset.ovPart === id) || null;++ const entry = (id) => entryOf(working, id);++++ function snapshot() { return clone(working); }++ function pushUndo() { undoStack.push(snapshot()); if (undoStack.length > 40) undoStack.shift(); }++ function markDirty() { dirty = true; paintActions(); }++++ function flatten(el) {++ for (let a = el.parentElement; a && a !== surface; a = a.parentElement) a.setAttribute('data-ov-flatten', 'true');++ }++++ function paintPlace(el, e) {++ const p = e.place || {};++ el.style.gridColumn = ''; el.style.gridRow = ''; el.style.order = '';++ delete el.dataset.ovDock; delete el.dataset.ovOrder;++ if (docked(p)) {++ el.dataset.ovDock = p.dock;++ el.dataset.ovOrder = String(p.order || 0);++ el.style.order = String(p.order || 0);++ } else {++ el.style.gridColumn = `${p.x + 1} / span ${p.w}`;++ el.style.gridRow = `${p.y + 1} / span ${p.h}`;++ }++ if (el.dataset.ovRoleHidden !== 'true') el.hidden = e.visible === false;++ el.style.setProperty('--ov-part-opacity', String(e.style && typeof e.style.opacity === 'number' ? e.style.opacity : 1));++ el.dataset.ovTint = (e.style && e.style.tint) || '';++ el.dataset.ovShape = (e.style && e.style.shape) || '';++ el.dataset.ovLabel = e.style && e.style.label === false ? 'false' : 'true';++ el.dataset.ovKeys = ((e.bindings && e.bindings.keys) || []).join(' ');++ el.dataset.ovGamepad = ((e.bindings && e.bindings.gamepad) || []).join(' ');++ el.classList.toggle('ov-arrange-part', true);++ }++++ function apply(lay, { focus = true } = {}) {++ surface.classList.add('ov-arrange-surface');++ surface.setAttribute('data-ov-custom', 'true');++ surface.style.setProperty('--ov-cols', String(cols));++ surface.style.setProperty('--ov-cell', `${cell}px`);++ surface.style.gridTemplateColumns = `repeat(${cols}, minmax(0, 1fr))`;++ surface.style.gridAutoRows = `minmax(${cell}px, auto)`;++ const dockMode = (catalog.id || '').split('.').pop() === 'overlay';++ if (dockMode) { surface.style.display = surface.style.display || 'block'; surface.style.position = 'relative'; }++ for (const el of partEls()) {++ flatten(el);++ for (const inner of el.querySelectorAll('button, input, select, textarea, a[href], [tabindex]')) {++ if (!innerTab.some((x) => x.el === inner)) innerTab.push({ el: inner, tabindex: inner.getAttribute('tabindex') });++ if (inner !== el) inner.setAttribute('tabindex', '-1');++ }++ }++ for (const p of (catalog.parts || [])) {++ const el = elOf(p.id), e = entryOf(lay, p.id);++ if (!el || !e) continue;++ paintPlace(el, e);++ if (focus && !dockMode) {++ el.tabIndex = 0;++ el.setAttribute('role', 'group');++ el.setAttribute('aria-label', `${p.name}${p.required ? ', required' : ''}. Arrow keys move it, Shift with the arrows resizes it, Enter opens its style.`);++ }++ }++ positionSelection();++ }++++ function selectedEl() { return selected ? elOf(selected) : null; }++ function positionSelection() {++ const el = selectedEl();++ if (!el || el.hidden || closed) { sel.hidden = true; handle.hidden = true; styleBtn.hidden = true; return; }++ const r = el.getBoundingClientRect();++ sel.hidden = false; sel.style.left = `${r.left - 3}px`; sel.style.top = `${r.top - 3}px`; sel.style.width = `${r.width + 6}px`; sel.style.height = `${r.height + 6}px`;++ handle.hidden = false; handle.style.left = `${r.right - 20}px`; handle.style.top = `${r.bottom - 20}px`;++ styleBtn.hidden = false; styleBtn.style.left = `${r.left + 6}px`; styleBtn.style.top = `${r.top + 6}px`;++ }++ function select(id) {++ if (selected && elOf(selected)) elOf(selected).removeAttribute('data-ov-selected');++ selected = id;++ if (id && elOf(id)) elOf(id).setAttribute('data-ov-selected', 'true');++ positionSelection();++ }++++ function labelOf(id) { return partName(catalog, id); }++ function where(d, place) {++ if (docked(place)) return `on the ${place.dock} edge, number ${Number(place.order) + 1}`;++ return `column ${place.x + 1}, row ${place.y + 1}, ${place.w} by ${place.h} cells`;++ }++++ function paintActions() {++ const u = host.querySelector('[data-undo]'); if (u) u.disabled = !undoStack.length;++ const s = host.querySelector('[data-save]'); if (s) s.disabled = saving || !dirty;++ const sh = host.querySelector('[data-share]'); if (sh) sh.disabled = saving;++ }++++ function refuse(reasons) {++ setStatus((reasons && reasons[0]) ? `Can't do that: ${reasons[0]}` : "Can't do that.", 'bad');++ const el = selectedEl(); if (el) el.setAttribute('data-ov-refused', 'true');++ }++++ function commit(candidate, { announceText, push = true } = {}) {++ const v = validate(candidate);++ if (!v.ok) { refuse(v.reasons); return false; }++ if (push) pushUndo();++ working = candidate;++ const el = selectedEl(); if (el) el.removeAttribute('data-ov-refused');++ apply(working);++ markDirty();++ if (announceText) { const id = selected; setStatus(announceText, 'ok'); if (id) announce(`${labelOf(id)} is now ${where(device, entry(id).place)}.`); }++ return true;++ }++++ function moveBy(id, dx, dy) {++ const e = clone(entry(id)); if (!e) return;++ const p = catalogPart(catalog, id) || { min: { w: 1, h: 1 } };++ if (docked(e.place)) {++ if (dx) e.place.dock = dx < 0 ? 'left' : 'right';++ else if (dy) e.place.dock = dy < 0 ? 'top' : 'bottom';++ } else {++ e.place.x = Math.max(0, Math.min(cols - e.place.w, e.place.x + dx));++ e.place.y = Math.max(0, e.place.y + dy);++ if (e.place.x === entry(id).place.x && e.place.y === entry(id).place.y) return;++ }++ const cand = snapshot();++ const at = cand.parts.findIndex((x) => x.id === id);++ cand.parts[at] = e;++ commit(cand, { announceText: `${labelOf(id)} moved to ${where(device, e.place)}.` });++ }++++ function resizeBy(id, dw, dh) {++ const e = clone(entry(id)); if (!e) return;++ const p = catalogPart(catalog, id) || { min: { w: 1, h: 1 } };++ if (docked(e.place)) {++ e.place.w = Math.max(1, Math.min(24, e.place.w + dw));++ e.place.h = Math.max(1, Math.min(24, e.place.h + dh));++ } else {++ e.place.w = Math.max(1, Math.min(cols - e.place.x, e.place.w + dw));++ e.place.h = Math.max(1, e.place.h + dh);++ }++ if (e.place.w === entry(id).place.w && e.place.h === entry(id).place.h) return;++ const cand = snapshot();++ const at = cand.parts.findIndex((x) => x.id === id);++ cand.parts[at] = e;++ commit(cand, { announceText: `${labelOf(id)} is now ${where(device, e.place)}.` });++ }++++ // Pointer drag: move, then the corner handle for resize. A refused cell keeps the last one that passed.++ function cellAt(clientX, clientY) {++ const r = surface.getBoundingClientRect();++ const col = Math.max(0, Math.min(cols - 1, Math.floor((clientX - r.left) / (r.width / cols))));++ const rows = (getComputedStyle(surface).gridTemplateRows || '').split(/\s+/).map(parseFloat).filter((n) => n > 0);++ let y = 0, top = r.top;++ for (let i = 0; i < rows.length; i++) { if (clientY < top + rows[i]) { y = i; break; } top += rows[i]; y = i + 1; }++ return { x: col, y };++ }++ function startDrag(e, id, mode) {++ if (e.button != null && e.button !== 0) return;++ const el = elOf(id); if (!el) return;++ if (preview) { setStatus('Keep or discard the suggestion first.'); return; }++ e.preventDefault();++ select(id);++ const p = clone(entry(id).place);++ drag = { id, mode, startX: e.clientX, startY: e.clientY, place: p, before: snapshot(), pushed: false, moved: false };++ el.setAttribute('data-ov-dragging', 'true');++ try { (mode === 'resize' ? handle : el).setPointerCapture(e.pointerId); } catch (_) { /* */ }++ onPointerMove = (ev) => {++ if (!drag) return;++ if (Math.abs(ev.clientX - drag.startX) + Math.abs(ev.clientY - drag.startY) < 3 && !drag.moved) return;++ drag.moved = true;++ const cand = snapshot();++ const at = cand.parts.findIndex((x) => x.id === drag.id);++ if (docked(drag.place)) {++ if (drag.mode === 'resize') {++ const colW = surface.getBoundingClientRect().width / cols;++ const w = Math.max(1, Math.round((ev.clientX - drag.startX) / colW) + drag.place.w);++ const h = Math.max(1, Math.round((ev.clientY - drag.startY) / cell) + drag.place.h);++ if (w === cand.parts[at].place.w && h === cand.parts[at].place.h) return;++ cand.parts[at].place.w = w; cand.parts[at].place.h = h;++ } else {++ const r = surface.getBoundingClientRect();++ const dx = (ev.clientX - r.left) / Math.max(1, r.width);++ const dy = (ev.clientY - r.top) / Math.max(1, r.height);++ const dock = Math.abs(dx - 0.5) > Math.abs(dy - 0.5) ? (dx < 0.5 ? 'left' : 'right') : (dy < 0.5 ? 'top' : 'bottom');++ const along = dock === 'left' || dock === 'right' ? dy : dx;++ const order = Math.max(0, Math.min(63, Math.floor(along * 8)));++ if (dock === cand.parts[at].place.dock && order === cand.parts[at].place.order) return;++ cand.parts[at].place.dock = dock; cand.parts[at].place.order = order;++ }++ const v = validate(cand);++ if (!v.ok) { refuse(v.reasons); return; }++ if (!drag.pushed) { undoStack.push(drag.before); drag.pushed = true; }++ working = cand; apply(working); markDirty();++ return;++ }++ const c = cellAt(ev.clientX, ev.clientY);++ if (drag.mode === 'resize') {++ const w = Math.max(1, c.x - drag.place.x + 1);++ const h = Math.max(1, c.y - drag.place.y + 1);++ if (w === cand.parts[at].place.w && h === cand.parts[at].place.h) return;++ cand.parts[at].place.w = w; cand.parts[at].place.h = h;++ } else {++ const colW = surface.getBoundingClientRect().width / cols;++ const dx = Math.round((ev.clientX - drag.startX) / colW);++ const x = Math.max(0, Math.min(cols - drag.place.w, drag.place.x + dx));++ const y = Math.max(0, drag.place.y + (c.y - cellAt(drag.startX, drag.startY).y));++ if (x === cand.parts[at].place.x && y === cand.parts[at].place.y) return;++ cand.parts[at].place.x = x; cand.parts[at].place.y = y;++ }++ const v = validate(cand);++ if (!v.ok) { refuse(v.reasons); return; }++ if (!drag.pushed) { undoStack.push(drag.before); drag.pushed = true; }++ working = cand; apply(working); markDirty();++ };++ onPointerUp = () => {++ if (!drag) return;++ const done = drag; drag = null;++ const el2 = elOf(done.id);++ if (el2) { el2.removeAttribute('data-ov-dragging'); el2.removeAttribute('data-ov-refused'); }++ if (done.moved) {++ const place = entry(done.id).place;++ setStatus(`${labelOf(done.id)} is now ${where(device, place)}.`, 'ok');++ announce(`${labelOf(done.id)} is now ${where(device, place)}.`);++ }++ positionSelection();++ };++ onPointerCancel = onPointerUp;++ }++ let onPointerMove = null, onPointerUp = null, onPointerCancel = null;++ const pointerMove = (e) => { if (onPointerMove) onPointerMove(e); };++ const pointerUp = (e) => { if (onPointerUp) { const f = onPointerUp; onPointerMove = null; onPointerUp = null; onPointerCancel = null; f(e); } };++ doc.addEventListener('pointermove', pointerMove, { passive: true });++ doc.addEventListener('pointerup', pointerUp);++ doc.addEventListener('pointercancel', pointerUp);++++ // Long press (a phone) opens the sheet; a short press selects and focuses.++ let pressTimer = null;++ function onPartDown(e) {++ const el = e.target.closest && e.target.closest('[data-ov-part]');++ if (!el || !surface.contains(el)) return;++ if (e.target.closest('.ov-arrange-handle, .ov-arrange-style')) return;++ const id = el.dataset.ovPart;++ select(id);++ clearTimeout(pressTimer);++ pressTimer = setTimeout(() => {++ if (drag && drag.moved) return;++ if (drag) {++ // A long press is the part's sheet, not a drag: let go of the gesture before opening it.++ const held = elOf(drag.id); drag = null;++ onPointerMove = null; onPointerUp = null; onPointerCancel = null;++ if (held) held.removeAttribute('data-ov-dragging');++ }++ openSheet(id);++ }, 520);++ startDrag(e, id, 'move');++ if (e.pointerType === 'touch') try { el.setPointerCapture(e.pointerId); } catch (_) { /* */ }++ }++ surface.addEventListener('pointerdown', onPartDown);++ const cancelPress = () => clearTimeout(pressTimer);++ surface.addEventListener('pointerup', cancelPress);++ surface.addEventListener('pointercancel', cancelPress);++++ // Keyboard: arrows move, Shift+arrows resize, Enter opens the sheet.++ function onKey(e) {++ const el = e.target.closest && e.target.closest('[data-ov-part]');++ if (!el) return;++ const id = el.dataset.ovPart;++ if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); openSheet(id); return; }++ if (!/^Arrow(Up|Down|Left|Right)$/.test(e.key)) return;++ e.preventDefault();++ const dx = e.key === 'ArrowLeft' ? -1 : e.key === 'ArrowRight' ? 1 : 0;++ const dy = e.key === 'ArrowUp' ? -1 : e.key === 'ArrowDown' ? 1 : 0;++ if (e.shiftKey) resizeBy(id, dx, dy); else moveBy(id, dx, dy);++ }++ surface.addEventListener('keydown', onKey);++++ handle.addEventListener('pointerdown', (e) => { if (selected) startDrag(e, selected, 'resize'); });++ styleBtn.addEventListener('click', () => { if (selected) openSheet(selected); });++++ // ── The part's sheet ─────────────────────────────────────────────────────────────────────++ let sheet = null;++ function closeSheet() { if (sheet) { sheet.remove(); sheet = null; select(selected); } }++ function openSheet(id) {++ closeSheet();++ const p = catalogPart(catalog, id), e = entry(id);++ if (!p || !e) return;++ select(id);++ sheet = doc.createElement('section');++ sheet.className = 'ov-arrange-sheet';++ sheet.setAttribute('role', 'dialog');++ sheet.setAttribute('aria-modal', 'false');++ sheet.setAttribute('aria-label', `${p.name}`);++ const tints = (p.styles && p.styles.tints) || catalog.theme_tokens || ['surface'];++ const shapes = (p.styles && p.styles.shapes) || ['square'];++ const wp = clone(e.place);++ sheet.innerHTML = `<button type="button" class="ovk-btn ovk-btn--quiet ov-arrange-close" data-close>Close</button>++<h2>${esc(p.name)}</h2>++${p.required ? '<p>The Stop has to stay visible and at its size.</p>' : ''}++<label class="ov-arrange-row"><input type="checkbox" data-visible${e.visible === false ? '' : ' checked'}${p.required ? ' disabled' : ''}> <span>Visible</span></label>++<div class="ov-arrange-row"><span>Size</span><div class="ov-arrange-opts">++${(p.sizes || []).filter((s) => s.w >= p.min.w && s.h >= p.min.h).map((s) => `<label><input type="radio" name="ov-arrange-size" value="${s.w}x${s.h}"${docked(e.place) ? ' disabled' : (e.place.w === s.w && e.place.h === s.h ? ' checked' : '')}>${s.w} × ${s.h}</label>`).join('')}++<label>Width <input type="number" min="${p.min.w}" max="24" value="${e.place.w}" data-w style="width:4.5rem"></label>++<label>Height <input type="number" min="${p.min.h}" max="24" value="${e.place.h}" data-h style="width:4.5rem"></label>++</div></div>++<div class="ov-arrange-row"><span>Colour</span><div class="ov-arrange-opts">${(catalog.theme_tokens || tints).filter((t) => tints.includes(t)).map((t) => `<label><input type="radio" name="ov-arrange-tint" value="${esc(t)}"${e.style.tint === t ? ' checked' : ''}>${esc(t)}</label>`).join('')}</div></div>++<div class="ov-arrange-row"><span>Shape</span><div class="ov-arrange-opts">${shapes.map((s) => `<label><input type="radio" name="ov-arrange-shape" value="${esc(s)}"${e.style.shape === s ? ' checked' : ''}>${esc(s)}</label>`).join('')}</div></div>++<div class="ov-arrange-row"><span>Opacity</span><input type="range" min="0.4" max="1" step="0.05" value="${e.style.opacity}" data-opacity></div>++<label class="ov-arrange-row"><input type="checkbox" data-label${e.style.label === false ? '' : ' checked'}> <span>Show its label</span></label>++<div class="ov-arrange-row"><span>Keys</span><input type="text" data-keys value="${esc(((e.bindings && e.bindings.keys) || []).join(' '))}" placeholder="${esc(((p.bindings && p.bindings.keys) || []).join(' '))}" aria-label="Keys"></div>++<div class="ov-arrange-row"><span>Gamepad</span><input type="text" data-gamepad value="${esc(((e.bindings && e.bindings.gamepad) || []).join(' '))}" placeholder="${esc(((p.bindings && p.bindings.gamepad) || []).join(' '))}" aria-label="Gamepad controls"></div>++<p class="ov-arrange-status" data-sheet-status role="status" aria-live="polite"></p>`;++ doc.body.appendChild(sheet);++ const sheetStatus = sheet.querySelector('[data-sheet-status]');++ const setSheetStatus = (t, tone) => { sheetStatus.textContent = t; sheetStatus.dataset.tone = tone || ''; announce(t); };++ function change(fn) {++ const cand = snapshot();++ const at = cand.parts.findIndex((x) => x.id === id);++ fn(cand.parts[at], p);++ const v = validate(cand);++ if (!v.ok) { setSheetStatus(`Can't do that: ${v.reasons[0]}`, 'bad'); return false; }++ pushUndo(); working = cand; apply(working); markDirty(); setSheetStatus('', ''); return true;++ }++ sheet.querySelector('[data-close]').addEventListener('click', closeSheet);++ sheet.querySelector('[data-visible]').addEventListener('change', (ev) => {++ const on = ev.target.checked;++ const ok = change((x) => { x.visible = on; });++ if (!ok) ev.target.checked = !on;++ else announce(`${p.name} is ${on ? 'shown' : 'hidden'}.`);++ });++ sheet.querySelectorAll('input[name="ov-arrange-size"]').forEach((r) => r.addEventListener('change', () => {++ const [w, h] = r.value.split('x').map(Number);++ if (change((x) => { x.place.w = w; x.place.h = h; })) announce(`${p.name} is now ${w} by ${h} cells.`);++ }));++ const wIn = sheet.querySelector('[data-w]'), hIn = sheet.querySelector('[data-h]');++ for (const [inp, key] of [[wIn, 'w'], [hIn, 'h']]) inp.addEventListener('change', () => {++ const n = Number(inp.value);++ if (!Number.isInteger(n) || n < 1) { setSheetStatus(`Can't do that: ${p.name} needs at least ${key === 'w' ? p.min.w : p.min.h} cells.`, 'bad'); return; }++ change((x) => { x.place[key] = n; });++ });++ sheet.querySelectorAll('input[name="ov-arrange-tint"]').forEach((r) => r.addEventListener('change', () => { if (change((x) => { x.style.tint = r.value; })) announce(`${p.name} is ${r.value}.`); }));++ sheet.querySelectorAll('input[name="ov-arrange-shape"]').forEach((r) => r.addEventListener('change', () => { if (change((x) => { x.style.shape = r.value; })) announce(`${p.name} is ${r.value}.`); }));++ const op = sheet.querySelector('[data-opacity]');++ op.addEventListener('change', () => { if (change((x) => { x.style.opacity = Number(op.value); })) announce(`${p.name} is ${Math.round(op.value * 100)}% visible.`); });++ sheet.querySelector('[data-label]').addEventListener('change', (ev) => { const on = ev.target.checked; if (change((x) => { x.style.label = on; })) announce(`${p.name}'s label is ${on ? 'shown' : 'hidden'}.`); });++ const keys = sheet.querySelector('[data-keys]'), pad = sheet.querySelector('[data-gamepad]');++ const parse = (v) => String(v || '').trim().split(/\s+/).filter(Boolean);++ keys.addEventListener('change', () => { const v = parse(keys.value); if (change((x) => { x.bindings.keys = v; })) announce(`${p.name}'s keys: ${v.join(' ') || 'none'}.`); });++ pad.addEventListener('change', () => { const v = parse(pad.value); if (change((x) => { x.bindings.gamepad = v; })) announce(`${p.name}'s gamepad: ${v.join(' ') || 'none'}.`); });++ const first = sheet.querySelector('[data-close]'); if (first) first.focus();++ }++ function onDocKey(e) {++ if (e.key === 'Escape') { if (sheet) closeSheet(); else if (preview) discardPreview(); }++ }++ doc.addEventListener('keydown', onDocKey);++++ // ── Ask OpenVibe, previewed ───────────────────────────────────────────────────────────────++ const ask = host.querySelector('form[data-ask]');++ const words = host.querySelector('#ov-arrange-words');++ let previewBar = null;++ function showPreview(sug, wordText) {++ preview = { layout: normal(sug.layout), summary: sug.summary || '', reasons: sug.reasons || [], words: wordText, model: sug.receipt && sug.receipt.model ? String(sug.receipt.model) : '' };++ apply(preview.layout);++ if (previewBar) previewBar.remove();++ previewBar = doc.createElement('div');++ previewBar.className = 'ov-arrange-preview';++ previewBar.setAttribute('role', 'group');++ previewBar.setAttribute('aria-label', 'OpenVibe\'s suggestion');++ previewBar.innerHTML = `<p><b>OpenVibe suggests:</b> ${esc(preview.summary)}${preview.model ? ` <span class="ov-arrange-by">(${esc(preview.model)})</span>` : ''}</p><button type="button" class="ovk-btn ovk-btn--primary" data-keep>Keep</button><button type="button" class="ovk-btn ovk-btn--quiet" data-discard>Discard</button>`;++ host.querySelector('.ov-arrange-actions').before(previewBar);++ previewBar.querySelector('[data-keep]').addEventListener('click', keepPreview);++ previewBar.querySelector('[data-discard]').addEventListener('click', discardPreview);++ setStatus(preview.summary || 'Previewing OpenVibe\'s suggestion.', 'ok');++ announce(`OpenVibe suggests: ${preview.summary}. Keep or discard.`);++ }++ function keepPreview() {++ if (!preview) return;++ pushUndo(); working = preview.layout; preview = null;++ if (previewBar) { previewBar.remove(); previewBar = null; }++ apply(working); markDirty(); setStatus('Kept. Save it to keep it for next time.', 'ok');++ announce('Kept the suggestion. Save it to keep it.');++ }++ function discardPreview() {++ if (!preview) return;++ preview = null;++ if (previewBar) { previewBar.remove(); previewBar = null; }++ apply(working); setStatus('Discarded the suggestion.');++ announce('Discarded the suggestion.');++ }++ ask.addEventListener('submit', async (e) => {++ e.preventDefault();++ const text = words.value.trim();++ if (!text) return;++ if (typeof opts.onAsk !== 'function') { setStatus('Ask OpenVibe needs a signed-in person.', 'bad'); return; }++ if (preview) discardPreview();++ setStatus('Asking OpenVibe…');++ ask.querySelector('button').disabled = true;++ try {++ const request = { catalog, layout: clone(working), words: text, device };++ const sug = await opts.onAsk(text, request);++ if (!sug) { setStatus("OpenVibe couldn't answer. Try again.", 'bad'); return; }++ if (sug.ok === false || !isObj(sug.layout)) {++ const why = (sug.reasons && sug.reasons[0]) || sug.summary || "OpenVibe couldn't do that.";++ setStatus(`Can't do that: ${why}`, 'bad'); return;++ }++ const v = validate(sug.layout);++ if (!v.ok) { setStatus(`Can't do that: ${v.reasons[0]}`, 'bad'); return; }++ showPreview(sug, text);++ } catch (err) {++ setStatus(`OpenVibe could not answer: ${String(err && err.message || err)}`, 'bad');++ } finally { ask.querySelector('button').disabled = false; }++ });++++ // ── Save, Share, Reset, Undo, Done ───────────────────────────────────────────────────────++ host.querySelector('[data-undo]').addEventListener('click', () => {++ if (!undoStack.length) return;++ working = undoStack.pop(); preview = null;++ if (previewBar) { previewBar.remove(); previewBar = null; }++ apply(working); markDirty(); setStatus('Undone.'); announce('Undone.');++ });++ host.querySelector('[data-reset]').addEventListener('click', async () => {++ preview = null;++ if (previewBar) { previewBar.remove(); previewBar = null; }++ pushUndo(); working = defaults(); apply(working); markDirty();++ if (typeof opts.onReset !== 'function') { setStatus('Reset to the default. Save it to keep it.', 'ok'); announce('Reset to the default.'); return; }++ setStatus('Resetting to the default…');++ try {++ const r = await opts.onReset({ surface: catalog.id, device });++ if (r && r.ok === false) { setStatus(`Couldn't reset: ${(r.reasons && r.reasons[0]) || 'try again.'}`, 'bad'); return; }++ dirty = false; paintActions();++ setStatus('Reset to the default.', 'ok'); announce('Reset to the default. It comes back next time.');++ } catch (err) { setStatus(`Couldn't reset: ${String(err && err.message || err)}`, 'bad'); }++ });++ host.querySelector('[data-save]').addEventListener('click', async () => {++ if (saving) return;++ const v = validate(working);++ if (!v.ok) { refuse(v.reasons); return; }++ if (typeof opts.onSave !== 'function') { setStatus('Sign in to save your layout.', 'bad'); return; }++ saving = true; paintActions(); setStatus('Saving…');++ try {++ const r = await opts.onSave(clone(working), { surface: catalog.id, device });++ if (r && r.ok === false) { setStatus(`Couldn't save: ${(r.reasons && r.reasons[0]) || r.message || 'try again.'}`, 'bad'); return; }++ dirty = false; setStatus('Saved. It follows you to your other devices.', 'ok');++ announce('Saved.');++ } catch (err) { setStatus(`Couldn't save: ${String(err && err.message || err)}`, 'bad'); }++ finally { saving = false; paintActions(); }++ });++ host.querySelector('[data-share]').addEventListener('click', async () => {++ if (typeof opts.onShare !== 'function') { setStatus('Sign in to share a layout.', 'bad'); return; }++ const v = validate(working);++ if (!v.ok) { refuse(v.reasons); return; }++ setStatus('Making a share link…');++ try {++ const r = await opts.onShare(clone(working), { surface: catalog.id, device });++ if (!r || !r.url) { setStatus(`Couldn't share: ${(r && r.reasons && r.reasons[0]) || 'try again.'}`, 'bad'); return; }++ shareBox(r.url);++ setStatus('Shared. Anyone with the link can use this arrangement.', 'ok');++ } catch (err) { setStatus(`Couldn't share: ${String(err && err.message || err)}`, 'bad'); }++ });++ function shareBox(url) {++ const box = doc.createElement('div');++ box.className = 'ov-arrange-share';++ box.innerHTML = `<label>Share this arrangement<input type="text" readonly value="${esc(url)}" aria-label="Share link"></label><button type="button" class="ovk-btn ovk-btn--quiet" data-copy>Copy link</button>`;++ host.querySelector('.ov-arrange-status').before(box);++ const input = box.querySelector('input');++ box.querySelector('[data-copy]').addEventListener('click', async () => {++ input.select();++ try { await navigator.clipboard.writeText(url); setStatus('Link copied.', 'ok'); }++ catch (_) { setStatus('Select the link and copy it.', 'ok'); }++ });++ }++ function close({ force = false } = {}) {++ if (closed) return;++ if (dirty && !force && !confirmFn('Leave without saving your arrangement?')) return;++ closed = true;++ if (previewBar) previewBar.remove();++ if (sheet) sheet.remove();++ host.remove(); live.remove(); sel.remove(); handle.remove(); styleBtn.remove();++ doc.removeEventListener('pointermove', pointerMove);++ doc.removeEventListener('pointerup', pointerUp);++ doc.removeEventListener('pointercancel', pointerUp);++ doc.removeEventListener('keydown', onDocKey);++ root.removeEventListener('resize', positionSelection);++ doc.removeEventListener('scroll', positionSelection, true);++ surface.removeEventListener('pointerdown', onPartDown);++ surface.removeEventListener('keydown', onKey);++ if (surfaceStyle == null) surface.removeAttribute('style'); else surface.setAttribute('style', surfaceStyle);++ surface.className = surfaceClass;++ if (surfaceCustom == null) surface.removeAttribute('data-ov-custom'); else surface.setAttribute('data-ov-custom', surfaceCustom);++ for (const [el, o] of originals) {++ for (const a of ['data-ov-selected', 'data-ov-dragging', 'data-ov-refused', 'data-ov-flatten', 'data-ov-tint', 'data-ov-shape', 'data-ov-label', 'data-ov-keys', 'data-ov-gamepad', 'data-ov-dock', 'data-ov-order']) el.removeAttribute(a);++ if (o.style == null) el.removeAttribute('style'); else el.setAttribute('style', o.style);++ el.hidden = o.hidden;++ if (o.tabindex == null) el.removeAttribute('tabindex'); else el.setAttribute('tabindex', o.tabindex);++ if (o.role == null) el.removeAttribute('role'); else el.setAttribute('role', o.role);++ if (o.label == null) el.removeAttribute('aria-label'); else el.setAttribute('aria-label', o.label);++ el.className = o.cls;++ }++ for (const x of innerTab) { if (x.tabindex == null) x.el.removeAttribute('tabindex'); else x.el.setAttribute('tabindex', x.tabindex); }++ for (const a of surface.querySelectorAll('[data-ov-flatten]')) a.removeAttribute('data-ov-flatten');++ if (typeof opts.onApply === 'function') try { opts.onApply(clone(working)); } catch (_) { /* */ }++ if (typeof opts.onClose === 'function') try { opts.onClose(clone(working), { dirty }); } catch (_) { /* */ }++ }++ host.querySelector('[data-done]').addEventListener('click', () => close());++++ surface.classList.add('ov-arrange-editing');++ apply(working);++ paintActions();++ positionSelection();++ root.addEventListener('resize', positionSelection, { passive: true });++ doc.addEventListener('scroll', positionSelection, { passive: true, capture: true });++ setStatus('Arrange: drag a part, or use the arrow keys. Shift with the arrows resizes.');++ return { close, apply: (lay) => { working = normal(lay); apply(working); }, layout: () => clone(working), destroy: () => close({ force: true }), get core() { return core; } };++ }++++ root.OVArrange = { open, validate: fallbackValidate, defaults: fallbackDefaults, _fallback: { validate: fallbackValidate, defaults: fallbackDefaults }, VERSION };++ loadCore().then((c) => { if (c) { fallbackValidate.sdk = c; root.OVArrange.core = c; } }).catch(() => { /* the fallback rules stay */ });++})(typeof window !== 'undefined' ? window : globalThis);BBinary files a/ov-glyphs-bold.woff2 and b/ov-glyphs-bold.woff2 differ@@@ -600,6 +600,8 @@.fa-duotone.fa-hand::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}.fa-duotone.fa-hand-pointer::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}.fa-duotone.fa-hand-point-right::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}++.fa-duotone.fa-handshake::after{content:"\e0e5";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}++.fa-duotone.fa-handshake-angle::after{content:"\e0e5";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}.fa-duotone.fa-headphones::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}.fa-duotone.fa-headphones-simple::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}.fa-duotone.fa-headset::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}@@@ -371,6 +371,7 @@.ovi-duotone.ovi-group::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-group::after{content:"\e0a6";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}.ovi-duotone.ovi-hammer::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-hammer::after{content:"\e0e4";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}.ovi-duotone.ovi-hand::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-hand::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}++.ovi-duotone.ovi-handshake::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-handshake::after{content:"\e0e5";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}.ovi-duotone.ovi-headphones::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-headphones::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}.ovi-duotone.ovi-heart::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-heart::after{content:"\e041";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}.ovi-duotone.ovi-heart-broken::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-heart-broken::after{content:"\e0e6";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}BBinary files a/ov-glyphs-light.woff2 and b/ov-glyphs-light.woff2 differBBinary files a/ov-glyphs-solid.woff2 and b/ov-glyphs-solid.woff2 differBBinary files a/ov-glyphs-thin.woff2 and b/ov-glyphs-thin.woff2 differ@@@ -23,8 +23,8 @@(function () {'use strict';if (typeof window === 'undefined' || window.OVGlyphs) return;-- const G = {"airplane":"<path d=\"M12 3.2c0.9 0 1.4 0.9 1.4 2.4V9.8l7 4.2V15.4l-7-2.4V17.2l1.9 1.4V20L12 19.1l-3.3 0.9v-1.4l1.9-1.4v-4.2L3.6 15.4v-1.4L10.6 9.8V5.6C10.6 4.2 11.1 3.2 12 3.2Z\"/>","alert":"<path d=\"M12 4.5L3.6 18.8h16.9Z\"/><path d=\"M12 10v3.7M12 16.5h0\"/>","alert-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5v5.5M12 16.5h.01\"/>","align-left":"<path d=\"M4 5.9h16.6M4 10h10.4M4 14.3h16.6M4 18.5h10.4\"/>","archive":"<rect x=\"3.5\" y=\"4.8\" width=\"17\" height=\"4.7\" rx=\"0.9\"/><path d=\"M5.4 9.5v9.4a0.9 0.9 0 0 0 0.9 0.9h11.3a0.9 0.9 0 0 0 0.9-0.9V9.5M10.1 13.3h3.8\"/>","arrow-down":"<path d=\"M12 3.2v16.7M5.7 13.7l6.3 6.3l6.3-6.3\"/>","arrow-left":"<path d=\"M20.8 12H4M10.3 5.7l-6.3 6.3l6.3 6.3\"/>","arrow-right":"<path d=\"M3.2 12h16.7M13.7 5.7l6.3 6.3l-6.3 6.3\"/>","arrow-up":"<path d=\"M12 20.8V4M5.7 10.3l6.3-6.3l6.3 6.3\"/>","arrows-h":"<path d=\"M3.8 12h16.5M7.6 8.1l-3.9 3.9l3.9 3.9M16.4 8.1l3.9 3.9l-3.9 3.9\"/>","at":"<circle cx=\"12\" cy=\"12\" r=\"3.4\"/><path d=\"M15.4 12v1.3a2.5 2.5 0 0 0 4.9 0V12a8.3 8.3 0 1 0-3.2 6.5\"/>","back":"<path d=\"M16.1 3.6l-8.4 8.4l8.4 8.4\"/>","ban":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m6 6 12 12\"/>","bell":"<path d=\"M6 14.6V9.5a6.1 6.1 0 0 1 12.2 0v5.1l1.5 2.1h-15.3ZM10 18.7a2.1 2.1 0 0 0 4 0\"/>","book":"<path d=\"M5 5.7a1.9 1.9 0 0 1 1.9-1.9h12.1v14.9H6.8a1.9 1.9 0 0 0-1.9 1.9Z\"/><path d=\"M5 18.7V5.7\"/>","book-open":"<path d=\"M12 6.3C10 4.8 7 4.3 3.5 4.9v13.2c3.5-0.6 6.5-0.1 8.5 1.4c2-1.5 5-2 8.5-1.4V4.9C17 4.3 14 4.8 12 6.3Z\"/><path d=\"M12 6.3v13.2\"/>","box":"<path d=\"M3.6 7.9L11.9 3.9l8.4 3.9v8.4L11.9 20.1l-8.4-3.9Z\"/><path d=\"M3.6 7.9L11.9 11.8l8.4-3.9M11.9 11.8v8.4M7.8 5.9l8.4 3.9\"/>","brain":"<path d=\"M9.2 4.2a2.8 2.8 0 0 0-2.8 2.8a2.8 2.8 0 0 0-1.9 4.8a2.8 2.8 0 0 0 1.9 4.8a2.8 2.8 0 0 0 5.8 1.1V5.8A1.9 1.9 0 0 0 9.2 4.2ZM14.9 4.2a2.8 2.8 0 0 1 2.8 2.8a2.8 2.8 0 0 1 1.9 4.8a2.8 2.8 0 0 1-1.9 4.8a2.8 2.8 0 0 1-5.8 1.1\"/>","branch":"<circle cx=\"6.7\" cy=\"5.6\" r=\"1.9\"/><circle cx=\"6.7\" cy=\"18.6\" r=\"1.9\"/><circle cx=\"17.9\" cy=\"7.5\" r=\"1.9\"/><path d=\"M6.7 7.5v9.3M17.9 9.3c0 5.1-6 3.7-10.2 7.9\"/>","bridge":"<path d=\"M3.5 16h17M7 19.5V5M17 19.5V5\"/><path d=\"M3.5 10c1.8 0 2.8-2.3 3.5-5c2.4 5.2 7.6 5.2 10 0c.7 2.7 1.7 5 3.5 5\"/><path d=\"M12 10.9V16\"/>","briefcase":"<rect x=\"3.5\" y=\"7.2\" width=\"17\" height=\"12.3\" rx=\"1.9\"/><path d=\"M9.2 7.2V5.7A1.4 1.4 0 0 1 10.6 4.3h2.8A1.4 1.4 0 0 1 14.8 5.7V7.2M3.5 12.3h7.1M13.4 12.3H20.5M10.6 11.4h2.8v2.4h-2.8Z\"/>","bug":"<rect x=\"7.2\" y=\"6.2\" width=\"9.6\" height=\"13.3\" rx=\"4.8\"/><path d=\"M9.3 6.5a2.7 2.7 0 0 1 5.3 0M12 10.9v8.5M7.2 12H3.5M20.5 12h-3.7M7.6 8.3L4.6 5.6M16.4 8.3L19.4 5.6M7.6 16.3L4.6 18.9M16.4 16.3L19.4 18.9\"/>","burst":"<path d=\"M11.9 3.7L13.6 7.8L17.8 6.2L16.2 10.4L20.3 12.1L16.2 13.8L17.8 18L13.6 16.4L11.9 20.4L10.2 16.4L6 18L7.6 13.8L3.6 12.1L7.6 10.4L6 6.2L10.2 7.8Z\"/>","busy":"<path d=\"M4.7 12h0M12.1 12h0M19.4 12h0\" stroke-width=\"4.2\"/>","calendar":"<rect x=\"4\" y=\"5.5\" width=\"16\" height=\"15\" rx=\"2\"/><path d=\"M4 10.5h16M9 3.5v4M15 3.5v4\"/>","camera":"<path d=\"M3.5 8h3.4l1.8-2.8h6.6L17.1 8h3.4v11.5h-17Z\"/><circle cx=\"12\" cy=\"13.3\" r=\"3.4\"/>","camera-flip":"<path d=\"M3.5 8h3.4l1.8-2.8h6.6L17.1 8h3.4v11.5h-17Z\"/><path d=\"M15 12.6a3.1 3.1 0 0 0-5.6-1.2M9 14.4a3.1 3.1 0 0 0 5.6 1.2M9.3 9.5v2h2M14.7 17.5v-2h-2\"/>","camera-off":"<path d=\"M3.7 7.9h3.3l1.7-2.7h6.4L16.9 7.9h3.3v11.2h-16.5Z\"/><circle cx=\"11.9\" cy=\"13\" r=\"3.3\"/><path d=\"M3.7 3.5l16.5 16.5\"/>","car":"<path d=\"M3.5 15.8v-4.5L6.2 5.8h11.6l2.7 5.5V15.8Z\"/><path d=\"M3.5 11.3h17M6.5 15.8v2.5M17.5 15.8v2.5M7.2 13.8h0M16.8 13.8h0\"/>","card":"<rect x=\"3.7\" y=\"5.8\" width=\"16.7\" height=\"12.3\" rx=\"1.8\"/><path d=\"M3.7 10.3h16.7M6.7 14.6h3.5\"/>","care":"<path d=\"M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5\"/><path d=\"M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z\"/>","cart":"<path d=\"M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5\"/><circle cx=\"9.1\" cy=\"18.6\" r=\"1.2\"/><circle cx=\"16.5\" cy=\"18.6\" r=\"1.2\"/>","cc":"<rect x=\"3.5\" y=\"5.4\" width=\"17\" height=\"13.2\" rx=\"2.4\"/><path d=\"M10.7 10.2a2.3 2.3 0 1 0 0 3.6M16.8 10.2a2.3 2.3 0 1 0 0 3.6\"/>","chart":"<path d=\"M3.9 3.4v16.7h16.7\"/><path d=\"M7.7 14.5l3.6-4.1l3.2 2.7l5.2-6.3\"/>","chat":"<path d=\"M3.8 4.3h16.8v11.7H8l-4.2 4.2Z\"/>","chat-off":"<path d=\"M4.2 5.1h15.7v10.9H8l-4 4Z\"/><path d=\"M3.7 3.7l16.7 16.7\"/>","check":"<path d=\"M3.7 12.1l5.4 5.4L20.4 6.1\"/>","check-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m8 12.4 2.8 2.8L16 9.6\"/>","check-double":"<path d=\"M3.6 11.7l3.6 3.6L14.6 7.7M11.1 15.2l0.9 0.9L20.4 7.7\"/>","chevron":"<path d=\"M7.9 3.6l8.4 8.4l-8.4 8.4\"/>","chevrons-left":"<path d=\"M10.9 19.3l-7.3-7.3l7.3-7.3M20.4 19.3l-7.3-7.3l7.3-7.3\"/>","chevrons-right":"<path d=\"M3.6 19.3l7.3-7.3l-7.3-7.3M13.1 19.3l7.3-7.3l-7.3-7.3\"/>","child":"<circle cx=\"12\" cy=\"5.8\" r=\"2.1\"/><path d=\"M7.9 10.5L12 9.2l4.1 1.4M12 9.2v5.6M9.2 20.4l2.8-5.6l2.8 5.6\"/>","chip":"<rect x=\"7.3\" y=\"7.3\" width=\"9.4\" height=\"9.4\" rx=\"1.4\"/><path d=\"M10.1 3.5v3.8M13.9 3.5v3.8M10.1 16.7v3.8M13.9 16.7v3.8M3.5 10.1h3.8M3.5 13.9h3.8M16.7 10.1h3.8M16.7 13.9h3.8\"/>","circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/>","city":"<path d=\"M3.5 19.7h17M5.4 19.7V8.3h4.7v11.3M10.1 19.7V3.6h5.7v16.1M15.8 19.7v-7.6h3.3v7.6M7.8 11.2h0M7.8 14.5h0M12.9 6.9h0M12.9 10.2h0M12.9 13.5h0\"/>","clapper":"<path d=\"M4 10.4h16.3v8.6a1 1 0 0 1-1 1h-14.4a1 1 0 0 1-1-1Z\"/><path d=\"M4 10.4L3.4 7.2l15.7-2.9l0.7 3.3ZM8.5 6.3l2.2 3.2M13.3 5.4l2.2 3.2\"/>","clipboard":"<rect x=\"5.7\" y=\"5\" width=\"12.6\" height=\"15.5\" rx=\"1.9\"/><path d=\"M9.1 5V3.5h5.8V5M9.1 10.8h5.8M9.1 14.7h3.9\"/>","clipboard-check":"<rect x=\"5.7\" y=\"4.9\" width=\"12.6\" height=\"15.5\" rx=\"1.9\"/><path d=\"M9.1 4.9V3.5h5.8V4.9M9.1 13.2l1.9 1.9l3.9-3.9\"/>","clock":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5V12l3 2\"/>","close":"<path d=\"M3.7 3.7l16.7 16.7M20.4 3.7L3.7 20.4\"/>","cloud":"<path d=\"M7.8 17.6h8.9a3.4 3.4 0 0 0 0.5-7A5.2 5.2 0 0 0 6.9 10.1A3.7 3.7 0 0 0 7.8 17.6Z\"/>","cloud-off":"<path d=\"M7.5 17.6h9.5a3.8 3.8 0 0 0 0.5-7.5A5.7 5.7 0 0 0 6.4 9.6A4.1 4.1 0 0 0 7.5 17.6Z\"/><path d=\"M4 3.9l16.1 16.1\"/>","code":"<path d=\"M7.8 7.8l-4.2 4.2l4.2 4.2M16.2 7.8l4.2 4.2l-4.2 4.2M14.2 4.6l-4.2 14.8\"/>","coin":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M14.5 9.2c-.5-.8-1.4-1.2-2.5-1.2-1.5 0-2.5.8-2.5 2s1 1.6 2.5 2 2.5.8 2.5 2-1 2-2.5 2c-1.1 0-2-.4-2.5-1.2M12 6.5v11\"/>","columns":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\"/><path d=\"M12 4.5v15M3.5 9h17\"/>","commit":"<circle cx=\"12\" cy=\"12\" r=\"3.4\"/><path d=\"M3.5 12h5.1M15.4 12H20.5\"/>","compass":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m15.6 8.4-2.1 5.1-5.1 2.1 2.1-5.1Z\"/>","compress":"<path d=\"M8.8 3.5v5.3H3.5M15.2 3.5v5.3h5.3M8.8 20.5v-5.3H3.5M15.2 20.5v-5.3h5.3\"/>","computer":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"11.3\" rx=\"1.9\"/><path d=\"M8.2 19.7h7.6M12 15.9v3.8\"/>","contrast":"<circle cx=\"11.7\" cy=\"12\" r=\"8.4\"/><path d=\"M11.7 3.6v16.7M11.7 7.9h6.5M11.7 12h8.4M11.7 16.2h6.5\"/>","cookie":"<path d=\"M20.6 12.3a8.4 8.4 0 1 1-8.9-8.9a3 3 0 0 0 3.9 3.5a3 3 0 0 0 4.9 5.3Z\"/><path d=\"M8.8 9.4h0M12.2 13.8h0M8.3 15.3h0M15.7 15.3h0\"/>","copy":"<rect x=\"8\" y=\"8\" width=\"12.5\" height=\"12.5\" rx=\"2.1\"/><path d=\"M16.3 8V5.8a2.1 2.1 0 0 0-2.1-2.1H5.8a2.1 2.1 0 0 0-2.1 2.1v8.4a2.1 2.1 0 0 0 2.1 2.1h2.1\"/>","couch":"<path d=\"M5.4 10.1V7.2a1.9 1.9 0 0 1 1.9-1.9h9.4a1.9 1.9 0 0 1 1.9 1.9v2.8\"/><path d=\"M3.5 11.9a1.9 1.9 0 0 1 3.8 0v1.4h9.4V11.9a1.9 1.9 0 0 1 3.8 0v4.7H3.5ZM5.4 16.7v1.9M18.6 16.7v1.9\"/>","crown":"<path d=\"M3.5 8.3L7.8 12L11.9 5.5l4.2 6.5l4.2-3.7L18.4 18.1H5.4Z\"/>","cubes":"<path d=\"M12 3.2L8.1 5.2v4.4l3.9 2l3.9-2V5.2ZM7.6 11.6L3.6 13.6v4.4l3.9 2l3.9-2V13.6ZM16.4 11.6l-3.9 2v4.4l3.9 2l3.9-2V13.6Z\"/>","database":"<ellipse cx=\"12\" cy=\"6.4\" rx=\"6.6\" ry=\"2.8\"/><path d=\"M5.4 6.4v11.3c0 1.6 2.9 2.8 6.6 2.8s6.6-1.2 6.6-2.8V6.4M5.4 12c0 1.6 2.9 2.8 6.6 2.8s6.6-1.2 6.6-2.8\"/>","dice":"<rect x=\"3.7\" y=\"3.6\" width=\"16.7\" height=\"16.7\" rx=\"3\"/><path d=\"M8.6 8.6h0M15.5 8.6h0M12.1 12h0M8.6 15.4h0M15.5 15.4h0\" stroke-width=\"2.6\"/>","dish":"<path d=\"M3.8 9.2A10.9 10.9 0 0 0 14.8 20.2Z\"/><path d=\"M9 15l5.2-5.2M14.8 3.4a5.8 5.8 0 0 1 5.8 5.8M14.8 7.5a1.8 1.8 0 0 1 1.8 1.8\"/>","dollar":"<path d=\"M15.7 8C15 6.6 13.7 5.6 12 5.6C9.6 5.6 8.3 6.9 8.3 8.5s1.6 2.5 3.7 2.8s3.7 1.3 3.7 3.1s-1.5 3-3.7 3c-1.8 0-3.2-0.9-3.7-2.4M12 3.7v16.7\"/>","donate":"<circle cx=\"11.9\" cy=\"8.4\" r=\"5.2\"/><path d=\"M11.9 6v4.3M3.7 15.6h16.5V20H3.7ZM8.3 17.7h7.2\"/>","door":"<path d=\"M13.7 4.7L6.3 3.2v16.7l7.5-1.4ZM13.7 5.1h3.3a0.9 0.9 0 0 1 0.9 0.9v14M3.5 20h16.7M11 11.6h0\"/>","down":"<path d=\"M3.6 7.9l8.4 8.4l8.4-8.4\"/>","download":"<path d=\"M12 3.2v11.5M6.8 9.5l5.2 5.2l5.2-5.2M4.7 20h14.7\"/>","drive":"<rect x=\"3.5\" y=\"12.3\" width=\"17\" height=\"6.6\" rx=\"1.9\"/><path d=\"M3.9 12.3L6.8 4.7h10.4l2.8 7.6M16.7 15.6h0M13.8 15.6h0\"/>","drop":"<path d=\"M12 3.5s5.9 6.4 5.9 10.8a5.9 5.9 0 0 1-11.8 0c0-4.4 5.9-10.8 5.9-10.8Z\"/>","ear":"<path d=\"M6.2 9.5a5.7 5.7 0 1 1 10.8 2.4c-0.9 1.9-3.1 3-3.1 5.2a3.4 3.4 0 0 1-6.5 1.6\"/><path d=\"M9.7 9.9a2.4 2.4 0 1 1 3.8 1.5\"/>","enter":"<path d=\"M13.8 3.6h4.1a2.1 2.1 0 0 1 2.1 2.1v12.5a2.1 2.1 0 0 1-2.1 2.1h-4.1M9.5 7.9l4.1 4.1l-4.1 4.1M13.8 12H3.2\"/>","eraser":"<path d=\"M14.3 4.4l5.5 5.5l-9 9H6.6l-2.6-2.6a1.5 1.5 0 0 1 0-2.1Z\"/><path d=\"M9.3 9.4l5.5 5.5M10.8 18.9H20.3\"/>","expand":"<path d=\"M3.5 8.8V3.5h5.3M20.5 8.8V3.5h-5.3M3.5 15.2v5.3h5.3M20.5 15.2v5.3h-5.3\"/>","eye":"<path d=\"M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z\"/><circle cx=\"12\" cy=\"12\" r=\"2.7\"/>","eye-off":"<path d=\"M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1\"/><path d=\"M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9\"/>","fast-forward":"<path d=\"M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z\"/>","file":"<path d=\"M6.4 3.5h7.6l3.8 3.8v13.2H6.4Z\"/><path d=\"M13.9 3.5v3.8h3.8\"/>","file-code":"<path d=\"M13.9 3.5H7.4a1.9 1.9 0 0 0-1.9 1.9v13a1.9 1.9 0 0 0 1.9 1.9h9.3a1.9 1.9 0 0 0 1.9-1.9V8.2Z\"/><path d=\"M13.9 3.5v4.6h4.6M10.1 12.4L8.3 14.3l1.9 1.9M13.9 12.4l1.9 1.9l-1.9 1.9\"/>","film":"<rect x=\"3.5\" y=\"4.4\" width=\"17\" height=\"15.1\" rx=\"1.9\"/><path d=\"M7.7 4.4v15.1M16.3 4.4v15.1M3.5 9.2h4.3M3.5 14.8h4.3M16.3 9.2H20.5M16.3 14.8H20.5\"/>","filter":"<path d=\"M3.5 6h17M6.7 12.4h10.6M9.9 18.7h4.2\"/>","finish":"<path d=\"M5.2 20.7V4\"/><rect x=\"5.2\" y=\"4.6\" width=\"13.9\" height=\"8.6\" rx=\"1\"/><path d=\"M5.2 8.8h13.9M9.6 4.6v8.6M14.3 4.6v8.6\"/>","fire":"<path d=\"M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z\"/>","fish":"<path d=\"M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z\"/><path d=\"M8.1 12L3.7 8.8v6.7Z\"/><path d=\"M16.5 10.7h0\"/>","fist":"<path d=\"M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8\"/>","flag":"<path d=\"M6.7 20.7V4M6.7 4h10.8l-2 3.9l2 3.9H6.7\"/>","flask":"<path d=\"M9.5 3.2h4.9M10 3.2V9.2L4.9 17.7a1.5 1.5 0 0 0 1.3 2.3h11.6a1.5 1.5 0 0 0 1.3-2.3L14 9.2V3.2\"/><path d=\"M7.3 14.6h9.5\"/>","focus":"<circle cx=\"12\" cy=\"12\" r=\"2.8\"/><path d=\"M3.5 9V5.9A2.4 2.4 0 0 1 5.9 3.5H9M15 3.5h3.1A2.4 2.4 0 0 1 20.5 5.9V9M20.5 15v3.1a2.4 2.4 0 0 1-2.4 2.4H15M9 20.5H5.9A2.4 2.4 0 0 1 3.5 18.1V15\"/>","folder":"<path d=\"M3.8 7.3a1.9 1.9 0 0 1 1.9-1.9h3.6l1.9 1.9h7.4a1.9 1.9 0 0 1 1.9 1.9v7.4a1.9 1.9 0 0 1-1.9 1.9H5.8a1.9 1.9 0 0 1-1.9-1.9Z\"/>","folder-tree":"<path d=\"M4.1 3.3v13.2a1 1 0 0 0 1 1H9.7M4.1 8.3H9.7\"/><path d=\"M10.2 5.3h3.1l1 1.5h5.6V10.9h-9.7ZM10.2 14.5h3.1l1 1.5h5.6V20.1h-9.7Z\"/>","food":"<path d=\"M8.2 4v6.5M6.3 4v4.2a1.9 1.9 0 0 0 3.7 0V4M8.2 10.5v10.2M17.5 20.8V4c-1.9 1.1-3 3.3-3 6.5v2.8H17.5\"/>","game":"<rect x=\"3.7\" y=\"7.2\" width=\"16.7\" height=\"9.7\" rx=\"4.4\"/><path d=\"M7.6 10.7v2.7M6.4 12h2.7M15.1 11.6h0M17.4 12.9h0\"/>","gauge":"<path d=\"M3.6 16.9a8.4 8.4 0 1 1 16.7 0\"/><path d=\"M11.9 13.2l4.1-5.7\"/><circle cx=\"11.9\" cy=\"13.2\" r=\"1.4\"/>","gavel":"<path d=\"M13.7 4.1l5.1 5.1M10.5 7.4l5.1 5.1M12.1 5.8l-5.6 5.6l5 5l5.6-5.6M3.5 19.5l5.9-5.9M13.7 19.5h6.5\"/>","gear":"<circle cx=\"12\" cy=\"12.1\" r=\"2.3\"/><path d=\"M17.6 14.3a1.3 1.3 0 0 0 0.2 1.5l0.1 0.1a1.5 1.5 0 1 1-2.4 2.4l-0.1-0.1a1.3 1.3 0 0 0-1.5-0.2a1.3 1.3 0 0 0-0.8 1.3V18.8a1.5 1.5 0 1 1-3.4 0v-0.1a1.3 1.3 0 0 0-0.9-1.3a1.3 1.3 0 0 0-1.5 0.2l-0.1 0.1a1.5 1.5 0 1 1-2.4-2.4l0.1-0.1a1.3 1.3 0 0 0 0.2-1.5a1.3 1.3 0 0 0-1.3-0.8H5.4a1.5 1.5 0 1 1 0-3.4h0.1a1.3 1.3 0 0 0 1.3-0.9a1.3 1.3 0 0 0-0.2-1.5l-0.1-0.1a1.5 1.5 0 1 1 2.4-2.4l0.1 0.1a1.3 1.3 0 0 0 1.5 0.2H9.8a1.3 1.3 0 0 0 0.8-1.3V5.4a1.5 1.5 0 1 1 3.4 0v0.1a1.3 1.3 0 0 0 0.8 1.3a1.3 1.3 0 0 0 1.5-0.2l0.1-0.1a1.5 1.5 0 1 1 2.4 2.4l-0.1 0.1a1.3 1.3 0 0 0-0.2 1.5V9.8a1.3 1.3 0 0 0 1.3 0.8H18.7a1.5 1.5 0 1 1 0 3.4h-0.1a1.3 1.3 0 0 0-1.3 0.8Z\"/>","gem":"<path d=\"M6.8 4.9h10.3L20.2 9.5l-8.3 10.3L3.6 9.5Z\"/><path d=\"M3.6 9.5h16.7M9.6 4.9L8.1 9.5l3.8 10.3M14.2 4.9L15.7 9.5l-3.8 10.3\"/>","ghost":"<path d=\"M4.7 20V10.6a7.3 7.3 0 0 1 14.7 0v9.4l-2.4-1.9l-2.5 1.9l-2.4-1.9L9.6 20l-2.5-1.9Z\"/><path d=\"M9.4 10.1h0M14.6 10.1h0\"/>","gift":"<rect x=\"4.4\" y=\"8.8\" width=\"15.1\" height=\"10.4\" rx=\"0.9\"/><path d=\"M3.5 8.8h17M12 8.8v10.4M12 8.8c-1.4-2.8-4.7-3.8-4.7-1.4S12 8.8 12 8.8s4.7-0.9 4.7-3.3S13.4 6 12 8.8\"/>","globe":"<circle cx=\"11.9\" cy=\"11.9\" r=\"8.3\"/><path d=\"M3.6 11.9h16.7M11.9 3.6c2.7 2.7 2.7 13.9 0 16.7M11.9 3.6c-2.7 2.7-2.7 13.9 0 16.7\"/>","grid":"<rect x=\"3.5\" y=\"3.5\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"13.1\" y=\"3.5\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"3.5\" y=\"13.1\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"13.1\" y=\"13.1\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/>","grip":"<path d=\"M8.3 4.5h0M15.8 4.5h0M8.3 12h0M15.8 12h0M8.3 19.5h0M15.8 19.5h0\" stroke-width=\"3.8\"/>","group":"<path d=\"M3.5 7.3V3.5h3.8M16.7 3.5h3.8v3.8M20.5 16.7v3.8h-3.8M7.3 20.5H3.5v-3.8\"/><rect x=\"7.3\" y=\"7.3\" width=\"5.7\" height=\"4.7\" rx=\"0.9\"/><rect x=\"11.1\" y=\"12\" width=\"5.7\" height=\"4.7\" rx=\"0.9\"/>","hammer":"<path d=\"M13.1 3.7L19.3 9.9l-2.7 2.7l-6.2-6.2Z\"/><path d=\"M13.6 9.4L5 18.1a1.3 1.3 0 0 0 1.9 1.9l8.6-8.6\"/>","hand":"<path d=\"M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6\"/>","handshake":"<path d=\"M3.6 9.9v5.3M20.3 9.9v5.3\"/><path d=\"M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2\"/><path d=\"M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2\"/>","hash":"<path d=\"M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17\"/>","heading":"<path d=\"M5.6 3.5v17M18.4 3.5v17M5.6 12h12.7M3.5 3.5h4.2M16.2 3.5h4.2M3.5 20.5h4.2M16.2 20.5h4.2\"/>","headphones":"<path d=\"M4.4 13.9v-2.8a7.5 7.5 0 0 1 14.9 0v2.8\"/><rect x=\"3.5\" y=\"13\" width=\"4.2\" height=\"6\" rx=\"1.4\"/><rect x=\"16.1\" y=\"13\" width=\"4.2\" height=\"6\" rx=\"1.4\"/>","heart":"<path d=\"M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z\"/>","heart-broken":"<path d=\"M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z\"/><path d=\"M11.9 5.8L10 9.8l3.5 2.3l-1.6 3.9\"/>","heart-pulse":"<path d=\"M19 12.3c-1.7 3.6-7 6.7-7 6.7s-5.3-3.1-7-6.7M4.3 9.7A4.3 4.3 0 0 1 12 7.4a4.3 4.3 0 0 1 7.7 2.2\"/><path d=\"M3.5 11.9h4l1.3-2.2l2.2 4.5l1.8-3.1h7.6\"/>","help":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M9.6 9.3a2.5 2.5 0 0 1 4.8.9c0 1.7-2.4 2.2-2.4 3.8M12 17h.01\"/>","history":"<path d=\"M3.8 12.1a8.3 8.3 0 1 0 2.5-5.9L3.8 8.5M3.8 4.2v4.2h4.2\"/><path d=\"M12 7.9v4.3l3.1 1.9\"/>","home":"<path d=\"M3.6 10.6L12 3.3l8.4 7.3v8.4a1 1 0 0 1-1 1h-4.2v-6.3h-6.3v6.3H4.7a1 1 0 0 1-1-1Z\"/>","hot-tub":"<circle cx=\"8.6\" cy=\"5.8\" r=\"1.7\"/><path d=\"M3.8 11.9h16.6v3.3a4.2 4.2 0 0 1-4.2 4.2h-8.4A4.2 4.2 0 0 1 3.8 15.2ZM6.8 11.9v-1.4A2.4 2.4 0 0 1 8.9 8.2H9.4M13.7 9.5c0.8-0.9-0.8-1.9 0-2.8M17.3 9.5c0.8-0.9-0.8-1.9 0-2.8\"/>","hourglass":"<path d=\"M6 3.5h12M6 20.5h12M7.5 3.5c0 4.5 4.5 5.5 4.5 8.5s-4.5 4-4.5 8.5M16.5 3.5c0 4.5-4.5 5.5-4.5 8.5s4.5 4 4.5 8.5\"/>","id":"<rect x=\"3.7\" y=\"5.5\" width=\"16.7\" height=\"13\" rx=\"1.9\"/><circle cx=\"9.2\" cy=\"11\" r=\"1.9\"/><path d=\"M6.4 15.6c0.5-1.4 1.6-2.2 2.8-2.2s2.4 0.8 2.8 2.2M14.8 10.1h2.8M14.8 13.4h2.8\"/>","idea":"<path d=\"M9.1 17.6h5.8M10.1 20.5h3.9M8.7 14.3A5.8 5.8 0 1 1 15.2 14.3c-0.7 0.6-1.4 1.5-1.4 2.3h-3.9c0-0.9-0.7-1.7-1.4-2.3Z\"/>","image":"<rect x=\"3.5\" y=\"5.4\" width=\"16.7\" height=\"13\" rx=\"2.8\"/><circle cx=\"9.1\" cy=\"10\" r=\"1.5\"/><path d=\"M20.3 15.6l-4.7-4.7l-7.4 7.4\"/>","inbox":"<path d=\"M3.5 12.7L5.9 4.8h12.1l2.4 7.9V17.8a0.9 0.9 0 0 1-0.9 0.9H4.4a0.9 0.9 0 0 1-0.9-0.9ZM3.5 12.7h4.6l1.4 2.4h4.6l1.4-2.4h4.6\"/>","infinity":"<path d=\"M12 12c-1.8-2.4-3.3-3.6-4.9-3.6a3.6 3.6 0 0 0 0 7.2c1.6 0 3.1-1.2 4.9-3.6Zm0 0c1.8 2.4 3.3 3.6 4.9 3.6a3.6 3.6 0 0 0 0-7.2c-1.6 0-3.1 1.2-4.9 3.6Z\"/>","info":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 11v5M12 8h.01\"/>","invite":"<circle cx=\"9.2\" cy=\"8.2\" r=\"2.9\"/><path d=\"M3.8 18.8c0-3 2.4-4.8 5.3-4.8s5.3 2 5.3 4.8M17.9 8.2v5.3M15.3 10.9h5.3\"/>","key":"<circle cx=\"8.1\" cy=\"15.9\" r=\"4.3\"/><path d=\"M11.1 12.9l9.4-9.4M16.8 7.3l3.2 3.2M14.6 9.4l2.2 2.2\"/>","keyboard":"<rect x=\"3.5\" y=\"6.6\" width=\"17\" height=\"10.7\" rx=\"1.8\"/><path d=\"M6.6 10.2h0M9.3 10.2h0M12 10.2h0M14.7 10.2h0M17.4 10.2h0M8.4 13.8h7.2\"/>","language":"<path d=\"M4.6 5.4h8.4M8.8 3.6v1.9M6.4 5.4c0.5 2.8 2.3 5.6 5.6 7M11.1 5.4c-0.6 3.2-2.6 6.3-6 7.9M12 20.3l3.7-8.4l3.7 8.4M13.3 17.5h4.8\"/>","laugh":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 13.5h8a4 4 0 0 1-8 0ZM7.5 8.6l2.2 1.2-2.2 1.2M16.5 8.6l-2.2 1.2 2.2 1.2\"/>","layers":"<path d=\"M12 5.4l8.3 4.6l-8.3 4.6l-8.3-4.6Z\"/><path d=\"M3.8 14l8.3 4.6l8.3-4.6\"/>","leaf":"<path d=\"M3.8 20.1c0-9.5 5.6-15.2 16.7-16.7c-1 11.1-6.7 16.7-16.7 16.7ZM3.8 20.1l8.9-8.9\"/>","leave":"<path d=\"M12.7 3.5h4.2a2.1 2.1 0 0 1 2.1 2.1v12.7a2.1 2.1 0 0 1-2.1 2.1h-4.2M8.5 16.2l-4.2-4.2l4.2-4.2M4.2 12h10.6\"/>","lifebuoy":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"3.8\"/><path d=\"M6 6l3.4 3.4M14.6 14.7l3.4 3.4M18 6l-3.4 3.4M9.4 14.7l-3.4 3.4\"/>","link":"<path d=\"M9.9 14.1a4.3 4.3 0 0 0 6.1 0l3.2-3.2a4.3 4.3 0 0 0-6.1-6.1l-1.1 1.1M14.1 9.9a4.3 4.3 0 0 0-6.1 0l-3.2 3.2a4.3 4.3 0 0 0 6.1 6.1l1.1-1.1\"/>","link-off":"<path d=\"M10 13.8a4 4 0 0 0 5.6 0l2.9-2.9a4 4 0 0 0-5.6-5.6l-1 1M13.8 10a4 4 0 0 0-5.6 0l-2.9 2.9a4 4 0 0 0 5.6 5.6l1-1\"/><path d=\"M3.6 3.6l16.7 16.7\"/>","list":"<path d=\"M8.2 5.5h11.9M8.2 12h11.9M8.2 18.5h11.9M3.3 5.5h0M3.3 12h0M3.3 18.5h0\"/>","list-ordered":"<path d=\"M9.7 6.8h10.8M9.7 12.8h10.8M9.7 18.8h10.8M3.8 5.4L4.7 5v4.4M3.8 9.3h2M3.8 13.7a1 1 0 0 1 2 0.3c0 1.1-2 1.7-2 2.7h2.2\"/>","live":"<circle cx=\"12\" cy=\"11.8\" r=\"2\"/><path d=\"M8.6 8.4a4.9 4.9 0 0 0 0 7.1M15.4 8.4a4.9 4.9 0 0 1 0 7.1M6.3 6.1a8.1 8.1 0 0 0 0 11.9M17.7 6.1a8.1 8.1 0 0 1 0 11.9\"/>","lock":"<rect x=\"4.7\" y=\"10.7\" width=\"14.5\" height=\"9.4\" rx=\"2.1\"/><path d=\"M7.8 10.7V7.5a4 4 0 0 1 8.3 0v3.2\"/>","lungs":"<path d=\"M12 3.5v8M12 9.4l-3 2.1M12 9.4l3 2.1M8.4 6.5C5.6 6.5 3.5 10.4 3.5 15.2c0 2.8 1.1 4.8 3.2 4.8s2.7-2.1 2.7-4.8V8.3M15.6 6.5C18.4 6.5 20.5 10.4 20.5 15.2c0 2.8-1.1 4.8-3.2 4.8s-2.7-2.1-2.7-4.8V8.3\"/>","mail":"<rect x=\"3.5\" y=\"5.5\" width=\"17\" height=\"13.2\" rx=\"1.9\"/><path d=\"M4.4 7.4l7.6 5.7l7.6-5.7\"/>","map":"<path d=\"M9.1 4.6L3.5 6.5v13l5.6-1.9l5.6 1.9l5.6-1.9V4.6l-5.6 1.9Z\"/><path d=\"M9.1 4.6v13M14.7 6.5v13\"/>","mask":"<path d=\"M3.5 7c3 1.3 5.8 1.8 8.5 1.8S17.5 8.3 20.5 7c0 6-2.5 10-5 10-1.4 0-2-1.5-3.5-1.5S9.9 17 8.5 17c-2.5 0-5-4-5-10Z\"/><path d=\"M7.5 11.5h2M14.5 11.5h2\"/>","medical":"<rect x=\"3.5\" y=\"7.1\" width=\"17\" height=\"12.3\" rx=\"1.9\"/><path d=\"M9.2 7.1V5.2a0.9 0.9 0 0 1 0.9-0.9h3.8a0.9 0.9 0 0 1 0.9 0.9v1.9M12 10.4v5.7M9.2 13.3h5.7\"/>","megaphone":"<path d=\"M3.6 9.5v4a1 1 0 0 0 1 1H7.1l9 4.5v-15L7.1 8.5H4.5a1 1 0 0 0-1 1Z\"/><path d=\"M7.1 14.5l1.3 5h2.4L10.1 15.1M19.1 9a3.2 3.2 0 0 1 0 5\"/>","members":"<circle cx=\"9.2\" cy=\"7.9\" r=\"3\"/><path d=\"M3.6 19.1c0-3.1 2.6-5.1 5.6-5.1s5.6 2.1 5.6 5.1M15.7 5a3 3 0 0 1 0 5.9M17.6 14.3c1.8 0.6 2.8 2.3 2.8 4.8\"/>","menu":"<path d=\"M3.5 6.7h17M3.5 12h17M3.5 17.3h17\"/>","mic":"<rect x=\"9.2\" y=\"3.5\" width=\"5.7\" height=\"10.4\" rx=\"2.8\"/><path d=\"M5.4 11.1a6.6 6.6 0 0 0 13.2 0M12 17.7v2.8\"/>","mic-off":"<rect x=\"9.2\" y=\"3.6\" width=\"5.7\" height=\"10.4\" rx=\"2.8\"/><path d=\"M5.5 11.1a6.6 6.6 0 0 0 11 5M18.7 11.1c0 0.8-0.1 1.5-0.4 2.2M12.1 17.7v2.8M4.5 4.5l15.1 15.1\"/>","minus":"<path d=\"M3.5 12h17\"/>","minus-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 12h8\"/>","money":"<rect x=\"3.5\" y=\"6.6\" width=\"17\" height=\"10.7\" rx=\"1.8\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><path d=\"M6.6 9.8v0M17.4 14.2v0\"/>","moon":"<path d=\"M20.5 14.6A8.6 8.6 0 1 1 9.4 3.5a6.9 6.9 0 0 0 11.2 11.2Z\"/>","more":"<circle cx=\"5.2\" cy=\"12\" r=\"1.6\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/><circle cx=\"18.8\" cy=\"12\" r=\"1.6\"/>","mountain":"<path d=\"M3.6 17.5L9.3 6l3.7 6.3L15.5 9.1L20.3 17.5Z\"/>","move":"<path d=\"M11.9 3.6v16.7M3.6 11.9h16.7M9 6.5l2.9-2.9l2.9 2.9M9 17.3l2.9 2.9l2.9-2.9M6.5 9l-2.9 2.9l2.9 2.9M17.3 9l2.9 2.9l-2.9 2.9\"/>","mug":"<path d=\"M4.8 9.1h11v7a4 4 0 0 1-4 4h-3a4 4 0 0 1-4-4Z\"/><path d=\"M15.8 10.5H17.3a2.5 2.5 0 0 1 0 5h-1.5M8.3 3.5c-0.8 1 0.8 2 0 3M11.8 3.5c-0.8 1 0.8 2 0 3\"/>","music":"<path d=\"M8.6 17.7V5.6l11.1-2.1v12.2\"/><circle cx=\"6\" cy=\"17.7\" r=\"2.6\"/><circle cx=\"17.2\" cy=\"15.7\" r=\"2.6\"/>","mute":"<path d=\"M3.9 9.4h3.6L12.2 5.8v12.4l-4.6-3.6H3.9Z\"/><path d=\"M16.3 9.9l4.1 4.1M20.5 9.9l-4.1 4.1\"/>","news":"<path d=\"M3.5 3.5h13.8v14.9a2.1 2.1 0 0 0 2.1 2.1H5.6a2.1 2.1 0 0 1-2.1-2.1Z\"/><path d=\"M17.3 7.7h3.2v10.6a2.1 2.1 0 0 1-2.1 2.1M7.2 7.7h6.4M7.2 11.5h6.4M7.2 15.2h3.7\"/>","nodes":"<circle cx=\"12\" cy=\"5.4\" r=\"2.1\"/><circle cx=\"5.8\" cy=\"17.9\" r=\"2.1\"/><circle cx=\"18.2\" cy=\"17.9\" r=\"2.1\"/><path d=\"M11 7.4L6.8 15.9M13 7.4l4.3 8.6M7.9 17.9h8.3\"/>","open":"<path d=\"M14 3.8h6.3v6.3M20.2 3.8l-9.4 9.4M18.2 14.2v4.2a2.1 2.1 0 0 1-2.1 2.1H5.6a2.1 2.1 0 0 1-2.1-2.1V7.9a2.1 2.1 0 0 1 2.1-2.1h4.2\"/>","palette":"<path d=\"M12.2 3.8a8.4 8.4 0 1 0 0 16.8c1.1 0 1.7-0.9 1.7-1.6c0-1.1-0.9-1.5-0.9-2.6s0.9-1.6 1.9-1.6H16.9a3.7 3.7 0 0 0 3.7-3.7C20.6 7.2 16.9 3.8 12.2 3.8Z\"/><circle cx=\"8\" cy=\"11.4\" r=\"1.1\"/><circle cx=\"10.3\" cy=\"7.9\" r=\"1.1\"/><circle cx=\"14.5\" cy=\"7.9\" r=\"1.1\"/>","parking":"<rect x=\"3.7\" y=\"3.7\" width=\"16.7\" height=\"16.7\" rx=\"3\"/><path d=\"M9.6 17V7.2h3.4a3 3 0 0 1 0 5.9H9.6\"/>","pause":"<path d=\"M7.1 3.5v17M16.9 3.5v17\"/>","paw":"<path d=\"M7.8 18.5c0-3 1.9-5.3 4.2-5.3s4.2 2.3 4.2 5.3c0 1.4-1.1 2.1-2.1 2.1c-0.8 0-1.4-0.5-2.1-0.5s-1.3 0.5-2.1 0.5c-1.1 0-2.1-0.7-2.1-2.1Z\"/><circle cx=\"5.4\" cy=\"10.6\" r=\"1.9\"/><circle cx=\"9.2\" cy=\"5.7\" r=\"1.9\"/><circle cx=\"14.8\" cy=\"5.7\" r=\"1.9\"/><circle cx=\"18.6\" cy=\"10.6\" r=\"1.9\"/>","pencil":"<path d=\"M11.9 19.6h8.4M16.1 4.2a2 2 0 0 1 2.8 2.8L7.2 18.7l-3.7 0.9l0.9-3.7Z\"/>","phone":"<path d=\"M5.7 3.4h3.9l2 4.9l-2.5 1.5a10.8 10.8 0 0 0 4.9 4.9L15.6 12.3l4.9 2v3.9a2 2 0 0 1-2 2A15.8 15.8 0 0 1 3.8 5.4a2 2 0 0 1 2-2\"/>","phone-off":"<path d=\"M5.6 4.1h3.7l1.9 4.7l-2.4 1.4a10.3 10.3 0 0 0 4.7 4.7L15.1 12.5l4.7 1.9v3.7a1.9 1.9 0 0 1-1.9 1.9A15.1 15.1 0 0 1 3.8 5.9a1.9 1.9 0 0 1 1.9-1.9\"/><path d=\"M4.3 3.6l16.1 16.1\"/>","piggy":"<path d=\"M3.5 11.4c0-3.2 3.3-5.7 7.7-5.7c1.3 0 2.4 0.2 3.4 0.6L17.4 4.7v3.3c0.8 0.7 1.4 1.6 1.6 2.5h1.4v3.4H18.8c-0.5 1-1.3 1.7-2.3 2.3V19.1h-2.9v-1.9c-0.8 0.2-1.7 0.3-2.5 0.3c-0.8 0-1.6-0.1-2.3-0.3v1.9h-2.9v-2.9C4.4 15.1 3.5 13.4 3.5 11.4Z\"/><path d=\"M14.9 10.1h0M8.7 8.1h2.9\"/>","pin":"<path d=\"M12 20.7s-6.2-5.4-6.2-10.5a6.2 6.2 0 0 1 12.4 0C18.2 15.2 12 20.7 12 20.7Z\"/><circle cx=\"12\" cy=\"10\" r=\"2.3\"/>","plane":"<path d=\"M20 4L3.5 10.8l6.6 3.1l3.1 6.6Z\"/><path d=\"M10.1 13.9l9.9-9.9\"/>","play":"<path d=\"M5.6 3.6v16.9l13.4-8.5Z\"/>","plug":"<path d=\"M9.2 4v4.6M14.8 4v4.6M6.9 8.7h10.2v2.8a5.1 5.1 0 0 1-10.2 0ZM12 16.6V20.7\"/>","plus":"<path d=\"M12 3.5v17M3.5 12h17\"/>","plus-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 8v8M8 12h8\"/>","print":"<path d=\"M7.1 8.9V3.5h9.9V8.9\"/><rect x=\"3.6\" y=\"8.9\" width=\"16.7\" height=\"7.9\" rx=\"2\"/><path d=\"M7.1 13.8h9.9v6.4H7.1ZM16.4 11.9h0\"/>","puzzle":"<path d=\"M3.8 7h4.2a2.6 2.6 0 1 1 4.8 0h4.2v4.2a2.6 2.6 0 1 1 0 4.8v4.2h-4.2a2.6 2.6 0 1 0-4.8 0H3.8v-4.2a2.6 2.6 0 1 0 0-4.8Z\"/>","quote":"<path d=\"M9.8 6.2C5.8 7.2 3.6 10 3.6 13.9v3.3h5.6v-5.6h-5.6M20.3 6.2c-3.9 1.1-6.1 3.9-6.1 7.8v3.3h5.6v-5.6h-5.6\"/>","radio":"<rect x=\"3.5\" y=\"8.3\" width=\"16.8\" height=\"11.3\" rx=\"1.9\"/><path d=\"M7.3 8.3L16.7 3.9\"/><circle cx=\"15.3\" cy=\"14\" r=\"2.4\"/><path d=\"M6.8 12.4h3.8M6.8 15.4h3.8\"/>","ranking":"<path d=\"M3.5 19.9h17M4.5 19.9V13.8h4.7M9.2 19.9V10h5.7v9.9M14.9 19.9V15.7h4.7v4.3\"/><path d=\"M12 3.4l0.9 1.7l1.9 0.3l-1.4 1.3l0.3 1.9L12 7.7l-1.7 0.9l0.3-1.9L9.3 5.4l1.9-0.3Z\"/>","record":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>","recycle":"<path d=\"M7.8 18.2H5.7a1.2 1.2 0 0 1-1-1.8l2.3-3.9M10 5.5l0.9-1.5a1.2 1.2 0 0 1 2.1 0l2.3 3.9M17.7 12.4l1.6 2.7a1.2 1.2 0 0 1-1 1.8h-4.5\"/><path d=\"M11.1 16.5l1.8 1.8l-1.8 1.8M4.5 10.4l2.4-0.7l0.7 2.5M17.2 6.1l-0.7 2.5l-2.5-0.7\"/>","reply":"<path d=\"M9.2 5.8L4 11l5.1 5.1M4 11h10.3a6.2 6.2 0 0 1 6.2 6.2v1\"/>","restroom":"<circle cx=\"7.1\" cy=\"5.3\" r=\"1.7\"/><circle cx=\"16.4\" cy=\"5.3\" r=\"1.7\"/><path d=\"M11.7 3.6v16.7M5.6 20.3v-5.1H4.7V10.6A1.4 1.4 0 0 1 6.1 9.2h1.9a1.4 1.4 0 0 1 1.4 1.4v4.6H8.5V20.3M15.5 20.3v-3.7h-2.4l1.9-6.1a0.9 0.9 0 0 1 0.9-0.9h0.9a0.9 0.9 0 0 1 0.9 0.9l1.9 6.1H17.3v3.7\"/>","retry":"<path d=\"M3.7 12a8.2 8.2 0 0 1 14.1-5.9L20.2 8.4M20.2 3.8v4.6h-4.6M20.2 12a8.2 8.2 0 0 1-14.1 5.9L3.7 15.6M3.7 20.3v-4.6h4.6\"/>","rewind":"<path d=\"M20 6.4v11.2L12.4 12ZM10.9 6.4v11.2L3.3 12Z\"/>","road":"<path d=\"M8.2 3.5L4.4 20.5M15.8 3.5l3.8 17M12 4.4v2.4M12 10.6v2.8M12 17.2V19.6\"/>","robot":"<rect x=\"5.4\" y=\"8.3\" width=\"13.2\" height=\"10.4\" rx=\"2.8\"/><path d=\"M12 4.6v3.8M9.2 13.1h0M14.8 13.1h0M9.6 16.4h4.7M3.5 13.1v1.9M20.5 13.1v1.9\"/>","rocket":"<path d=\"M11.8 15.7L8.4 12.3C9.9 6.9 13.8 3.9 20.2 3.9C20.2 10.3 17.3 14.2 11.8 15.7ZM8.4 12.3L4.9 11.8L7.4 8.3h3.9M11.8 15.7l0.5 3.4l3.4-2.5v-3.9M6.4 17.7c-1.5 0-3 1.5-3 3c1.5 0 3-1.5 3-3Z\"/><circle cx=\"15.3\" cy=\"8.8\" r=\"1.5\"/>","route":"<circle cx=\"6\" cy=\"18\" r=\"2.4\"/><circle cx=\"18\" cy=\"6\" r=\"2.4\"/><path d=\"M8.4 18H16a3 3 0 0 0 0-6H8a3 3 0 0 1 0-6h7.6\"/>","rss":"<path d=\"M4 3.5a16.5 16.5 0 0 1 16.5 16.5M4 10.4A9.6 9.6 0 0 1 13.6 20.1\"/><path d=\"M4.6 19.4h0\" stroke-width=\"3.9\"/>","save":"<path d=\"M4.7 3.5h11.5l3.2 3.2v13.6H4.7Z\"/><path d=\"M7.8 3.5v5.2h7.3V3.5M7.8 20.2v-6.3h8.4v6.3\"/>","scale":"<path d=\"M12 4.3V19.5M8.5 19.5h6.9M5.5 7.4h13M12 4.3h0M3.7 13.4L5.9 7.8L8.1 13.4M15.9 13.4L18.1 7.8l2.2 5.6M3.7 13.4a2.2 2.2 0 0 0 4.3 0M15.9 13.4a2.2 2.2 0 0 0 4.3 0\"/>","scissors":"<circle cx=\"6\" cy=\"7\" r=\"2.6\"/><circle cx=\"6\" cy=\"17\" r=\"2.6\"/><path d=\"M8.2 8.6 20 18M8.2 15.4 20 6\"/>","scroll":"<path d=\"M8.3 3.8h10.1a1.9 1.9 0 0 1 1.9 1.9v1.5H17M8.3 3.8a1.9 1.9 0 0 0-1.9 1.9v11.7a2.9 2.9 0 0 1-2.9 2.9h10.7a2.9 2.9 0 0 0 2.9-2.9v-11.7a1.9 1.9 0 0 0-1.9-1.9M10.2 9.2h3.9M10.2 13h3.9\"/>","search":"<circle cx=\"10.6\" cy=\"10.6\" r=\"7\"/><path d=\"M20.4 20.4l-4.5-4.5\"/>","seedling":"<path d=\"M12 20.8v-9.8M12 11C12 6.7 9.3 4 4.4 4c0 4.3 2.7 7 7.6 7ZM12 13.7c0-4.3 2.7-7 7.6-7c0 4.3-2.7 7-7.6 7Z\"/>","server":"<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"7.4\" rx=\"2.1\"/><rect x=\"3.5\" y=\"13.1\" width=\"17\" height=\"7.4\" rx=\"2.1\"/><path d=\"M7.8 7.2h0M7.8 16.8h0\"/>","shapes":"<circle cx=\"7.5\" cy=\"7.7\" r=\"3.4\"/><path d=\"M16.4 3.7l3.9 6.9h-7.9ZM13.9 14.1h5.9v5.9h-5.9ZM3.6 20l3.4-5.9l3.4 5.9Z\"/>","share":"<path d=\"M12 15.2V3.3M7.4 8.1L12 3.3L16.6 8.1M4.9 12.9v6.1a1 1 0 0 0 1 1h12.2a1 1 0 0 0 1-1v-6.1\"/>","shelter":"<path d=\"M3.7 10.5L12 4l8.3 6.5M5.9 9.2v10.4M18.1 9.2v10.4\"/><circle cx=\"12\" cy=\"11\" r=\"1.6\"/><path d=\"M9.8 19.6v-3.9a2.2 2.2 0 0 1 4.3 0V19.6\"/>","shield":"<path d=\"M12 3.7L5.5 6.6v5.6c0 4.1 2.8 7.1 6.5 8.4c3.7-1.3 6.5-4.2 6.5-8.4V6.6Z\"/>","shirt":"<path d=\"M8.2 3.8L3.7 6.6l1.8 3.8l1.8-0.9v11.2h9.3V9.4l1.8 0.9l1.8-3.8l-4.7-2.7c-0.5 1.4-1.8 2.3-3.8 2.3S8.8 5.1 8.2 3.8Z\"/>","signature":"<path d=\"M3.9 14c2.4 0 3.3-8.4 5.6-8.4c1.4 0 0.9 5.6 2.4 5.6c0.9 0 1.4-2.4 2.4-2.4s0.8 1.9 1.9 1.9c0.8 0 1.4-0.6 1.9-1.1M3.9 17.8h16.7\"/>","skip":"<path d=\"M4.8 3.5l10.8 8.4l-10.8 8.4Z\"/><path d=\"M19.7 3.5v16.7\"/>","skull":"<path d=\"M12 3.7a6.5 6.5 0 0 0-6.5 6.5c0 2.2 1 3.6 2.4 4.6v2.8h8.4v-2.8c1.3-1 2.4-2.6 2.4-4.6a6.5 6.5 0 0 0-6.5-6.5Z\"/><circle cx=\"9.6\" cy=\"10.7\" r=\"1.3\"/><circle cx=\"14.4\" cy=\"10.7\" r=\"1.3\"/><path d=\"M10.6 17.7v2.8M13.4 17.7v2.8\"/>","slash":"<path d=\"M3.6 3.6l16.7 16.7\"/>","sliders":"<path d=\"M3.5 6.8h10M18.7 6.8H20.3M3.5 17.2h3.6M12.4 17.2H20.3\"/><circle cx=\"16.2\" cy=\"6.8\" r=\"2.4\"/><circle cx=\"9.8\" cy=\"17.2\" r=\"2.4\"/>","smile":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8.5 14a4 4 0 0 0 7 0M9 9.5h.01M15 9.5h.01\"/>","snow":"<path d=\"M12 3.5v17M4.6 7.8l14.7 8.5M4.6 16.3l14.7-8.5M9.6 4.9L12 7.3l2.4-2.4M9.6 19.1L12 16.7l2.4 2.4\"/>","sort":"<path d=\"M3.5 5.8h9.2M3.5 12h6.2M3.5 18.2h3M17.5 4.8v14.4M14.3 16.2l3 3l3-3\"/>","sort-asc":"<path d=\"M3.4 5.4h3M3.4 11.6h6.3M3.4 17.9h9.3M17.5 4.3v14.6M14.3 16l3 3l3-3\"/>","spark":"<path d=\"M10.4 3.6l1.7 4.8L17 10.1l-4.8 1.7L10.4 16.7l-1.7-4.8L3.9 10.1l4.8-1.7ZM17 14.8l0.8 2.1L19.8 17.6l-2.1 0.8L17 20.3l-0.8-2.1L14.3 17.6l2.1-0.8Z\"/>","square":"<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"2.7\"/>","star":"<path d=\"M12 4l2.6 5.3l5.7 0.6l-4.3 3.9l1.2 5.7L12 16.8l-5.2 2.9l1.2-5.7l-4.3-3.9l5.7-0.6Z\"/>","steps":"<path d=\"M9.7 5.7h11M9.7 11.8h11M9.7 17.8h11\"/><path d=\"M3.7 5.7l1.5 1.5L7.7 4.8M3.7 11.8l1.5 1.5L7.7 10.8M3.7 17.8l1.5 1.5L7.7 16.8\"/>","stop":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m8.5 8.5 7 7\"/>","store":"<path d=\"M3.7 8.8L5.3 3.7h13.4L20.3 8.8M3.7 8.8h16.5v1.6a2.8 2.8 0 0 1-5.4 0a2.8 2.8 0 0 1-5.6 0A2.8 2.8 0 0 1 3.7 10.4ZM4.8 12.9v7.2h14.5v-7.2M9.9 20.1v-4.1h4.1v4.1\"/>","storm":"<path d=\"M7.8 16a3.8 3.8 0 1 1 0.8-7.4A4.5 4.5 0 0 1 17.4 10.5a3.1 3.1 0 0 1-0.4 6.2\"/><path d=\"M12.9 12.2l-2.1 3.3h2.5L11.3 18.9\"/>","sun":"<circle cx=\"11.9\" cy=\"11.9\" r=\"3.4\"/><path d=\"M11.9 3.5v1.8M11.9 18.6v1.8M6 6l1.2 1.2M16.7 16.7l1.2 1.2M3.5 11.9h1.8M18.6 11.9h1.8M6 17.9l1.2-1.2M16.7 7.2l1.2-1.2\"/>","swap":"<path d=\"M3.5 7.8h14.9l-3.7-3.7M20.5 16.3H5.6l3.7 3.7\"/>","sword":"<path d=\"M20.3 3.7v3.7L10.4 17.3L6.7 13.6L16.7 3.7Z\"/><path d=\"M5.2 12L12 18.8M8.3 15.7L3.6 20.4\"/>","table":"<rect x=\"3.5\" y=\"4.3\" width=\"17\" height=\"15.1\" rx=\"1.9\"/><path d=\"M3.5 9.5h17M3.5 14.7h17M9.2 9.5V19.4M14.8 9.5V19.4\"/>","tack":"<path d=\"M9.3 4h5.6l-0.9 4.6l2.8 2.8H7.4l2.8-2.8ZM12 11.4v9.3\"/>","tag":"<path d=\"M3.8 11.2V3.8h7.4l9.3 9.3l-7.4 7.4Z\"/><circle cx=\"8\" cy=\"8\" r=\"1.2\"/>","target":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\"/>","tent":"<path d=\"M3.5 18.4h17M12 4.9L4.8 18.4M12 4.9l7.2 13.4M12 12.5L9.3 18.4M12 12.5l2.7 5.8\"/>","terminal":"<rect x=\"3.7\" y=\"4.6\" width=\"16.7\" height=\"14.9\" rx=\"1.9\"/><path d=\"M7.4 9.2l2.8 2.8l-2.8 2.8M12.9 14.8h3.7\"/>","text":"<path d=\"M5.2 20.3L10.9 3.6h2.1l5.7 16.7M7.4 14h9.2\"/>","thumbs-up":"<path d=\"M7.3 10.4v9.6H4.8a1 1 0 0 1-1-1v-7.6a1 1 0 0 1 1-1Z\"/><path d=\"M7.3 10.4L10.9 3.3a2.2 2.2 0 0 1 2.5 2.6L12.7 9.4H18.5a2 2 0 0 1 2 2.4l-1.3 6.6a2 2 0 0 1-2 1.6H7.3\"/>","ticket":"<path d=\"M3.6 7.4h16.7v2.8a1.9 1.9 0 0 0 0 3.7v2.8H3.6v-2.8a1.9 1.9 0 0 0 0-3.7Z\"/><path d=\"M13.8 7.4v9.3\"/>","timeline":"<path d=\"M3.5 12h0.9M8.2 12h1.9M13.9 12h1.9M19.6 12h0.9\"/><circle cx=\"6.3\" cy=\"12\" r=\"1.9\"/><circle cx=\"12\" cy=\"12\" r=\"1.9\"/><circle cx=\"17.7\" cy=\"12\" r=\"1.9\"/><path d=\"M6.3 10.1V5.9M12 13.9v4.3M17.7 10.1V5.9\"/>","toolbox":"<rect x=\"3.5\" y=\"8.1\" width=\"17\" height=\"11.3\" rx=\"1.9\"/><path d=\"M9.2 8.1V5.8A1.4 1.4 0 0 1 10.6 4.3h2.8A1.4 1.4 0 0 1 14.8 5.8V8.1M3.5 12.8h17M8.2 11.4v2.8M15.8 11.4v2.8\"/>","train":"<rect x=\"6.4\" y=\"3.8\" width=\"11.2\" height=\"12.1\" rx=\"2.8\"/><path d=\"M6.4 10.3h11.2M9.2 13.1h0M14.8 13.1h0M8.7 20.5l1.9-3.3M15.3 20.5l-1.9-3.3\"/>","trash":"<path d=\"M4.1 6.7h15.8M10 10.6v5.9M14 10.6v5.9M6.1 6.7l1 11.8a2 2 0 0 0 2 2h5.9a2 2 0 0 0 2-2l1-11.8M9 6.7V3.7h5.9v3\"/>","tree":"<path d=\"M12.1 3.6L7 10.6h2.8L5.6 16.6h13l-4.2-6h2.8ZM12.1 16.6v3.7\"/>","trend-down":"<path d=\"M3.2 7.2l5.6 5.6l3.8-3.8l7.4 7.4\"/><path d=\"M14.4 16.6h5.6v-5.6\"/>","trend-up":"<path d=\"M3.2 16.8L8.8 11.3l3.8 3.8l7.4-7.4\"/><path d=\"M14.4 7.4h5.6v5.6\"/>","trophy":"<path d=\"M7.9 4h8.4v5.2a4.1 4.1 0 0 1-8.4 0ZM7.9 6.1H4.7a3.2 3.2 0 0 0 3.2 4.1M16.2 6.1h3.2a3.2 3.2 0 0 1-3.2 4.1M12 13.4v4.1M7.9 20.8h8.4\"/>","tv":"<rect x=\"3.5\" y=\"7.8\" width=\"17\" height=\"11.6\" rx=\"1.8\"/><path d=\"M8.4 4.3l3.6 3.6l3.6-3.6\"/>","umbrella":"<path d=\"M3.8 12.5a8.4 8.4 0 0 1 16.6 0ZM12.1 12.5v6a1.9 1.9 0 0 1-3.7 0M12.1 4.1v0\"/>","undo":"<path d=\"M9.2 14.2L4 8.9l5.2-5.2\"/><path d=\"M4 8.9h11a5.8 5.8 0 0 1 0 11.5H11.3\"/>","up":"<path d=\"M3.7 16.1l8.3-8.3l8.3 8.3\"/>","upload":"<path d=\"M12 20.8V9.2M6.8 14.5l5.2-5.2l5.2 5.2M4.7 4h14.7\"/>","user":"<circle cx=\"12\" cy=\"7.4\" r=\"3.8\"/><path d=\"M4.3 20.5c0-3.9 3.4-6.6 7.7-6.6s7.7 2.6 7.7 6.6\"/>","user-check":"<circle cx=\"9.2\" cy=\"8.1\" r=\"2.8\"/><path d=\"M4 19c0-2.9 2.4-4.9 5.4-4.9s5.4 1.9 5.4 4.9M15.4 10.8l1.8 1.8l3.6-3.6\"/>","user-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M6.6 18.3a6.5 6.5 0 0 1 10.8 0\"/>","user-lock":"<circle cx=\"9.8\" cy=\"7.3\" r=\"3.3\"/><path d=\"M3.5 18.8c0-3.4 2.8-5.7 6.2-5.7c1.2 0 2.2 0.3 3.1 0.7\"/><rect x=\"14.6\" y=\"14.5\" width=\"5.7\" height=\"4.8\" rx=\"1\"/><path d=\"M16 14.5v-1.2a1.5 1.5 0 0 1 2.9 0v1.2\"/>","user-minus":"<circle cx=\"10.1\" cy=\"8\" r=\"3.3\"/><path d=\"M4 19.3c0-3.3 2.7-5.7 6.1-5.7c1.1 0 2.2 0.3 3 0.7\"/><path d=\"M15.1 17h5.7\"/>","user-off":"<circle cx=\"12\" cy=\"8.2\" r=\"3.5\"/><path d=\"M5.1 20c0-3.6 3-5.9 6.9-5.9s6.9 2.3 6.9 5.9\"/><path d=\"M3.7 3.7l16.7 16.7\"/>","user-pen":"<circle cx=\"9.8\" cy=\"8\" r=\"3.3\"/><path d=\"M3.8 19.1c0-3.3 2.7-5.6 6-5.6c1.1 0 2.1 0.3 3 0.7\"/><path d=\"M19.1 12.1l1.4 1.4l-4.7 4.7l-1.9 0.5l0.5-1.9Z\"/>","user-tag":"<circle cx=\"10\" cy=\"7.6\" r=\"3.3\"/><path d=\"M3.8 18.9c0-3.3 2.8-5.6 6.1-5.6c1.1 0 2.2 0.3 3.1 0.7\"/><path d=\"M14.2 14.2h3.7l2.4 2.4l-2.4 2.4h-3.7Z\"/><path d=\"M16.1 16.5h0\"/>","video":"<rect x=\"3.4\" y=\"6.4\" width=\"12.3\" height=\"11.3\" rx=\"1.9\"/><path d=\"M15.6 10.2l4.7-2.8v9.4l-4.7-2.8\"/>","volume":"<path d=\"M3.5 9.5h3.7L11.8 5.8v12.6l-4.7-3.7H3.5Z\"/><path d=\"M15.5 9.5a3.7 3.7 0 0 1 0 5.2M18.1 6.9a7.3 7.3 0 0 1 0 10.5\"/>","walk":"<circle cx=\"12.3\" cy=\"5.1\" r=\"1.7\"/><path d=\"M8.8 20.3l2.4-5.5l1.9 2.2V20.3M11 14.8l0.9-5.2l-2.7 1.4l-1.4 2.7M11.9 9.6l1.8 2.7l2.7 0.9\"/>","wallet":"<path d=\"M3.5 6.8A2.7 2.7 0 0 1 6.2 4.2H18.4v4.2M3.5 6.8V18a2.1 2.1 0 0 0 2.1 2.1h14.9V8.4H6.2A2.7 2.7 0 0 1 3.5 6.8Z\"/><path d=\"M16.2 14.2h0\"/>","water":"<path d=\"M3.5 10.2c2.1 0 2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8s2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8M3.5 15.6c2.1 0 2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8s2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8\"/>","wave":"<path d=\"M3.7 16.2c2.1 0 2.1-1.7 4.2-1.7s2.1 1.7 4.2 1.7s2.1-1.7 4.2-1.7s2.1 1.7 4.2 1.7\"/><path d=\"M6.5 12.7A5.6 5.6 0 0 1 16.4 9.4c-1.9-0.4-3.5 0.3-4 2\"/>","weight":"<circle cx=\"12\" cy=\"5.2\" r=\"2\"/><path d=\"M7.1 8.7h9.9l3 11.3H4.1Z\"/>","wifi":"<path d=\"M3.7 9.4a12.4 12.4 0 0 1 16.7 0M6.4 12.5a8.4 8.4 0 0 1 11.5 0M9.1 15.6a4.4 4.4 0 0 1 6.2 0M12.1 18.6h0\"/>","wind":"<path d=\"M3.5 9.9h10.4a2.8 2.8 0 1 0-2.8-2.8M3.5 13.7h14.2a2.8 2.8 0 1 1-2.8 2.8M3.5 17.5h6.6\"/>","window":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\"/><path d=\"M3.5 9h17\"/>","window-restore":"<rect x=\"3.5\" y=\"8.5\" width=\"12\" height=\"11\" rx=\"2\"/><path d=\"M8.5 8.5v-2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2h-3\"/>","wizard":"<path d=\"M3.6 20h16.7M6.3 20L9.9 9.1L15.7 3.3L14.1 10.1L17.8 20\"/><path d=\"M8.4 15.4h7.3\"/>","wrench":"<path d=\"M14.6 3.6a5.2 5.2 0 0 0-4.6 7.3L3.7 17.3V20.3h3.1l6.4-6.4a5.2 5.2 0 0 0 7.3-4.6l-3.2 1.2l-2.5-2.5l1.2-3.2Z\"/>","x-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m9 9 6 6M15 9l-6 6\"/>","zap":"<path d=\"M13.4 3.5L5.9 12.9h5.7l-0.9 7.6l7.6-9.4h-5.7Z\"/>"};-- const S = {"airplane":"<path d=\"M11.8 2.6c1.3 0 2 1.2 2 3V9.5l7.2 4.2v2.5L13.8 13.7v3.5l2 1.5v2.5L11.8 19.7l-3.7 1.2v-2.5l2-1.5v-3.5l-7.2 2.5v-2.5L9.8 9.5V5.3c0-1.8 0.7-3 2-3Z\"/>","alert":"<path fill-rule=\"evenodd\" d=\"M10.5 4.1a1.7 1.7 0 0 1 3 0l7.7 13.3a1.7 1.7 0 0 1-1.5 2.6H4.3a1.7 1.7 0 0 1-1.5-2.6ZM11 8.8h2v5.2h-2ZM12 15.2a1.2 1.2 0 1 1 0 2.4a1.2 1.2 0 0 1 0-2.4Z\"/>","alert-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.7 6.9h2.5v7.1h-2.5ZM12.9 15.3a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","archive":"<rect x=\"2.6\" y=\"3.4\" width=\"18.8\" height=\"5.4\" rx=\"1.2\"/><path fill-rule=\"evenodd\" d=\"M4.4 10h15.2v9.2a1.6 1.6 0 0 1-1.6 1.6H6a1.6 1.6 0 0 1-1.6-1.6ZM9.6 12.4v1.8h4.8v-1.8Z\"/>","bell":"<path d=\"M5.2 15.4V9.6a6.8 6.8 0 0 1 13.7 0v5.7l1.9 2.6H3.3ZM9.7 19.3h4.6a2.3 2.3 0 0 1-4.6 0Z\"/>","book":"<path d=\"M4.3 5.2A2.4 2.4 0 0 1 6.8 2.7h12.2v14.6H6.8a2.4 2.4 0 0 0-2.4 2.4Z\"/><path class=\"ln\" d=\"M7.2 20.2h11.2\"/>","book-open":"<path d=\"M10.9 5.8C8.8 4.4 6 3.8 2.5 4.5v14c3.5-0.6 6.3 0 8.4 1.5ZM13.1 5.8c2.1-1.5 5-2 8.4-1.4v14c-3.5-0.6-6.3 0-8.4 1.5Z\"/>","box":"<path d=\"M12 2.7l9.4 4.5l-9.4 4.5l-9.4-4.5ZM2.6 8.9l8.6 4.1v8.2l-8.6-4.3ZM21.4 8.9l-8.6 4.1v8.2l8.6-4.3Z\"/>","brain":"<path d=\"M8.9 3.8a3.2 3.2 0 0 0-3.2 3.1a3.1 3.1 0 0 0-2.2 5.3a3.1 3.1 0 0 0 2.2 5.2a3.2 3.2 0 0 0 5.7 1.3V5.6A2.3 2.3 0 0 0 8.9 3.8Z\"/><path d=\"M15.1 3.8a3.2 3.2 0 0 1 3.2 3.1a3.1 3.1 0 0 1 2.2 5.3a3.1 3.1 0 0 1-2.2 5.2a3.2 3.2 0 0 1-5.7 1.3V5.6A2.3 2.3 0 0 1 15.1 3.8Z\"/>","bridge":"<path d=\"M5.7 4.6h2.6v15.4H5.7ZM15.7 4.6h2.6v15.4h-2.6ZM3.4 14.6h17.2v2.8H3.4Z\"/><path class=\"ln\" d=\"M4 10c1.6 0 2.5-2.3 3-5c2.4 5.2 7.6 5.2 10 0c.5 2.7 1.4 5 3 5M12 10.9V15\"/>","briefcase":"<path d=\"M2.7 9.1a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.8H2.7ZM2.7 13.1h7.2v1.5h4.3v-1.5h7.2V17.9a2.5 2.5 0 0 1-2.5 2.5H5.2a2.5 2.5 0 0 1-2.5-2.5Z\"/><path class=\"ln\" d=\"M9.1 6.6V5.7A1.5 1.5 0 0 1 10.5 4.2h2.9A1.5 1.5 0 0 1 14.9 5.7v0.9\"/>","bug":"<path fill-rule=\"evenodd\" d=\"M12 7a4.8 4.8 0 0 1 4.8 4.8v3.4a4.8 4.8 0 0 1-9.6 0v-3.4A4.8 4.8 0 0 1 12 8Zm-0.7 4.4v7.4h1.4v-7.4Z\"/><path d=\"M9.4 5.8a2.6 2.6 0 0 1 5.2 0Z\"/><path class=\"ln\" d=\"M7.2 12.5H3.8M20.2 12.5h-3.4M7.6 9.4L5 7M16.4 9.4L19 7M7.6 16.6L5 19M16.4 16.6L19 19\"/>","burst":"<path d=\"M12.1 2.6l2 4.6l4.7-1.9l-1.9 4.7l4.6 2l-4.6 2l1.9 4.7l-4.7-1.9l-2 4.6l-2-4.6l-4.7 1.9l1.9-4.7L2.7 12l4.6-2l-1.9-4.7l4.7 1.9Z\"/>","calendar":"<path fill-rule=\"evenodd\" d=\"M4.1 8.1a2 2 0 0 1 2-2h11.8a2 2 0 0 1 2 2V19.5a2 2 0 0 1-2 2H6.1a2 2 0 0 1-2-2Zm2.2 3.9V19.3h11.4v-7.3Z\"/><path class=\"ln\" d=\"M9 3.9v3.5M15 3.9v3.5\"/>","camera":"<path fill-rule=\"evenodd\" d=\"M2.5 7.8a1.9 1.9 0 0 1 1.9-1.9h2.6L8.8 3.3h6.3l1.8 2.6h2.6A1.9 1.9 0 0 1 21.5 7.8v10.7a1.9 1.9 0 0 1-1.9 1.9H4.4A1.9 1.9 0 0 1 2.5 18.5Zm9.5 2a3.6 3.6 0 1 0 0 7.2a3.6 3.6 0 0 0 0-7.2Z\"/>","camera-flip":"<path fill-rule=\"evenodd\" d=\"M2.5 7.8a1.9 1.9 0 0 1 1.9-1.9h2.6L8.8 3.3h6.3l1.8 2.6h2.6A1.9 1.9 0 0 1 21.5 7.8v10.7a1.9 1.9 0 0 1-1.9 1.9H4.4A1.9 1.9 0 0 1 2.5 18.5ZM7.7 11.7A4.5 4.5 0 0 1 16.3 11.7L13.9 12.6A2 2 0 0 0 10.1 12.6ZM16.3 14.8A4.5 4.5 0 0 1 7.7 14.8L10.1 14A2 2 0 0 0 13.9 14Z\"/>","camera-off":"<path d=\"M8.5 4.6L9 3.8h6.1l1.7 2.5h2.5A1.8 1.8 0 0 1 21.2 8.1v9.1ZM3.8 7.3L16.7 20.2H4.8A1.8 1.8 0 0 1 3 18.4V8.1Z\"/><path class=\"ln\" d=\"M4 3.8l16.2 16.2\"/>","car":"<path fill-rule=\"evenodd\" d=\"M5.6 5.2h12.7l2.7 5.5H3ZM2.6 12.2h18.7v4.5H2.6ZM5.9 14.4a1.1 1.1 0 1 0 2.3 0a1.1 1.1 0 1 0-2.3 0ZM15.8 14.4a1.1 1.1 0 1 0 2.3 0a1.1 1.1 0 1 0-2.3 0ZM5 17.5h2.7v1.8H5ZM16.3 17.5h2.7v1.8h-2.7Z\"/>","card":"<path fill-rule=\"evenodd\" d=\"M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z\"/>","care":"<path d=\"M17 11s-4.1-2.4-4.1-5.4a2.3 2.3 0 0 1 4.1-1.6a2.3 2.3 0 0 1 4.1 1.6c0 2.9-4.1 5.4-4.1 5.4Z\"/><path class=\"ln\" d=\"M3.5 16.2h3.2l4.3 3.2h5.9a2.1 2.1 0 0 0 0-4.3H13.3M7.9 16.2l2.3-2.1h3.6\"/>","cart":"<path d=\"M6.3 7h15l-2.5 8.3H8.1Z\"/><circle cx=\"9.5\" cy=\"19.4\" r=\"1.6\"/><circle cx=\"17\" cy=\"19.4\" r=\"1.6\"/><path class=\"ln\" d=\"M3.8 4.8H5.8l2.3 10.5\"/>","cc":"<path fill-rule=\"evenodd\" d=\"M5.6 4.6h12.7a3 3 0 0 1 3 3v8.8a3 3 0 0 1-3 3h-12.7a3 3 0 0 1-3-3v-8.8a3 3 0 0 1 3-3ZM10.8 9.5A3.2 3.2 0 1 0 10.8 14.5L9.6 13A1.3 1.3 0 1 1 9.6 11ZM17.4 9.5A3.2 3.2 0 1 0 17.4 14.5L16.2 13A1.3 1.3 0 1 1 16.2 11Z\"/>","chart":"<path class=\"ln\" d=\"M4 3.5v16.2h16.2\"/><path d=\"M7 14.9L11 10.3l3 2.5l5.2-6.2V17.7H7Z\"/>","chat":"<path d=\"M2.7 4.7A1.8 1.8 0 0 1 4.5 3h15.2a1.8 1.8 0 0 1 1.8 1.8v10.9a1.8 1.8 0 0 1-1.8 1.8H8.3L2.7 21.8Z\"/>","chat-off":"<path d=\"M8.1 4.6H19a1.6 1.6 0 0 1 1.6 1.6v9.5a1.6 1.6 0 0 1-0.4 1ZM3.4 7.3L12.9 16.8H8.3l-4.9 4.6Z\"/><path class=\"ln\" d=\"M4 4.2l16 16\"/>","check-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM17.3 8.9l1.6 1.6l-7 7l-4.1-4.1l1.6-1.6l2.6 2.6Z\"/>","child":"<circle cx=\"12\" cy=\"5.2\" r=\"2.6\"/><path class=\"ln\" d=\"M7.7 10L12 8.6l4.3 1.4M12 8.6v5.8M9.1 20.1l2.9-5.8l2.9 5.8\"/>","chip":"<path fill-rule=\"evenodd\" d=\"M8.6 7.2h6.8a1.4 1.4 0 0 1 1.4 1.4v6.8a1.4 1.4 0 0 1-1.4 1.4H8.6a1.4 1.4 0 0 1-1.4-1.4V8.6a1.4 1.4 0 0 1 1.4-1.4Zm1.7 3.1v3.4h3.4v-3.4Z\"/><path class=\"ln\" d=\"M10.2 4v3.2M13.8 4v3.2M10.2 16.8V20M13.8 16.8V20M4 10.2h3.2M4 13.8h3.2M16.8 10.2H20M16.8 13.8H20\"/>","circle":"<circle cx=\"12\" cy=\"12\" r=\"9.5\"/>","city":"<path fill-rule=\"evenodd\" d=\"M5.4 7.7h4.6v10.9H5.4Zm1.9 2.2v1.4h1.2v-1.4Zm0 2.9v1.4h1.2v-1.4Z\"/><path fill-rule=\"evenodd\" d=\"M10.7 3.4h5.1v15.2h-5.1Zm1.7 2.4v1.4h1.4V5.8Zm0 2.9v1.4h1.4V8.7Zm0 2.9v1.4h1.4v-1.4Z\"/><path d=\"M16.5 11.3h2.2v7.4h-2.2Z\"/><path class=\"ln\" d=\"M3.9 18.6h16.1\"/>","clapper":"<path fill-rule=\"evenodd\" d=\"M2.6 5.9L19.9 2.7l0.9 4.3L3.2 8.7ZM7 5.1L9.2 8.1l2.6-0.2L9.6 4.6ZM12.6 4l2.2 3.6l2.6-0.3L15.2 3.6Z\"/><path d=\"M3.1 9.9h18.2v9a1.6 1.6 0 0 1-1.6 1.6h-15a1.6 1.6 0 0 1-1.6-1.6Z\"/>","clipboard":"<path fill-rule=\"evenodd\" d=\"M7.5 4.2h9a2 2 0 0 1 2 2v13.1a2 2 0 0 1-2 2H7.5a2 2 0 0 1-2-2V6.3a2 2 0 0 1 2-2ZM9.1 9.9v1.6h5.8v-1.6Zm0 3.9v1.6h3.9v-1.6Z\"/><rect x=\"8.7\" y=\"2.5\" width=\"6.6\" height=\"3.7\" rx=\"1.2\"/>","clipboard-check":"<path fill-rule=\"evenodd\" d=\"M7.5 4.2h9a2 2 0 0 1 2 2v13.1a2 2 0 0 1-2 2H7.5a2 2 0 0 1-2-2V6.3a2 2 0 0 1 2-2ZM8 13.1L11 16.1l5-5l-1.6-1.6l-3.4 3.4l-1.5-1.5Z\"/><rect x=\"8.7\" y=\"2.5\" width=\"6.6\" height=\"3.7\" rx=\"1.2\"/>","clock":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.9 6.6h2.3v5l3.3 2l-1.1 2l-4.3-2.7Z\"/>","cloud":"<path d=\"M7.9 18.2h9.6a4.2 4.2 0 0 0 0.6-8.3A6.1 6.1 0 0 0 6.5 9.2A4.5 4.5 0 0 0 7.9 18.2Z\"/>","cloud-off":"<path d=\"M10.1 5.7A6 6 0 0 1 17.9 9.8a4.1 4.1 0 0 1 2.8 6.5ZM6.6 9.1L15.5 18H7.9A4.4 4.4 0 0 1 6.4 9.2Z\"/><path class=\"ln\" d=\"M5.1 4.2l15 15\"/>","coin":"<path fill-rule=\"evenodd\" d=\"M13 2.6a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM12 5.8h2.1v1.2c1.1 0.2 2.1 0.8 2.6 1.7l-1.7 1c-0.3-0.6-1-1-1.8-1c-0.9 0-1.5 0.4-1.5 1s0.5 0.8 1.8 1.1c1.8 0.4 3.5 1 3.5 3.1c0 1.4-1 2.5-2.8 2.8V18h-2.1v-1.3c-1.2-0.2-2.3-0.9-2.8-2l1.7-1c0.4 0.7 1.1 1.1 2.1 1.1c1 0 1.6-0.4 1.6-1s-0.6-0.8-2-1.1c-1.7-0.4-3.4-1-3.4-3c0-1.3 1-2.4 2.7-2.7Z\"/>","columns":"<path d=\"M2.6 6.3a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v1.5H2.6ZM2.6 9.9h8.3v10.4H5.3a2.7 2.7 0 0 1-2.7-2.7ZM13 9.9h8.3v7.7a2.7 2.7 0 0 1-2.7 2.7H13Z\"/>","compass":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM17.4 7.7L14.9 14.1L8.5 16.5L11 10.1Z\"/>","compress":"<path d=\"M9.7 9.7H2.7L9.7 2.7ZM14.3 9.7h7l-7-7ZM9.7 14.3H2.7l7 7ZM14.3 14.3h7l-7 7Z\"/>","computer":"<rect x=\"2.6\" y=\"3.4\" width=\"18.8\" height=\"12.8\" rx=\"2.2\"/><path class=\"ln\" d=\"M8 20h8M12 16.2v3.8\"/>","contrast":"<path fill-rule=\"evenodd\" d=\"M12.4 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 2.1a7.2 7.2 0 0 1 0 14.4Z\"/>","cookie":"<path fill-rule=\"evenodd\" d=\"M21.6 12.4a9.4 9.4 0 1 1-10-10a3.4 3.4 0 0 0 4.4 3.9a3.4 3.4 0 0 0 5.5 5.9ZM7 9.1a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM10.9 14a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM6.5 15.7a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM14.8 15.7a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0Z\"/>","copy":"<rect x=\"7.5\" y=\"7.5\" width=\"13.8\" height=\"13.8\" rx=\"2.5\"/><path class=\"ln\" d=\"M16.4 7.5V5.9a2.1 2.1 0 0 0-2.1-2.1H5.9a2.1 2.1 0 0 0-2.1 2.1v8.5a2.1 2.1 0 0 0 2.1 2.1h1.7\"/>","couch":"<path d=\"M7.1 4.2h9.7A2.5 2.5 0 0 1 19.4 6.7v1.9a3.1 3.1 0 0 0-3.1 3.1v0.1H7.7v-0.1A3.1 3.1 0 0 0 4.6 8.7V6.7A2.5 2.5 0 0 1 7.1 4.2ZM2.7 11.6a2.5 2.5 0 0 1 5.1 0v1.9h8.6V11.6a2.5 2.5 0 0 1 5.1 0v5.5H2.7Z\"/><path class=\"ln\" d=\"M5.2 17.1v1.9M18.8 17.1v1.9\"/>","crown":"<path d=\"M2.6 7.3L7.4 11.5L12 4.1L16.6 11.5l4.8-4.2l-2 11.7H4.6Z\"/>","cubes":"<path d=\"M12 2.3L7.8 4.4v4.8l4.2 2.1l4.2-2.1V4.4ZM6.8 12.1L2.7 14.2v4.8l4.2 2.1l4.2-2.1v-4.8ZM17.2 12.1l-4.2 2.1v4.8l4.2 2.1l4.2-2.1v-4.8Z\"/>","database":"<ellipse cx=\"12\" cy=\"5.7\" rx=\"7.9\" ry=\"3.2\"/><path d=\"M4.1 7.5a7.9 3.2 0 0 0 15.9 0v4.3a7.9 3.2 0 0 1-15.9 0ZM4.1 13.4a7.9 3.2 0 0 0 15.9 0v4.7a7.9 3.2 0 0 1-15.9 0Z\"/>","dice":"<path fill-rule=\"evenodd\" d=\"M6.2 2.7h11.5a3.6 3.6 0 0 1 3.6 3.6v11.5a3.6 3.6 0 0 1-3.6 3.6H6.2a3.6 3.6 0 0 1-3.6-3.6V6.2a3.6 3.6 0 0 1 3.6-3.6ZM6.2 8.2a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM13.8 8.2a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM10 12a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM6.2 15.8a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM13.8 15.8a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0Z\"/>","dish":"<path d=\"M2.7 9.7A11.7 11.7 0 0 0 14.4 21.4Z\"/><path class=\"ln\" d=\"M8.8 15.3l4.9-4.9M14.2 4a5.8 5.8 0 0 1 5.8 5.8M14.2 8.1a1.8 1.8 0 0 1 1.8 1.8\"/>","donate":"<path fill-rule=\"evenodd\" d=\"M12 2.2a5.9 5.9 0 1 0 0 11.8a5.9 5.9 0 0 0 0-11.8Zm-0.8 3.4h1.7v5.1h-1.7ZM2.9 15h18.2v6H2.9ZM7.8 17.1v1.6h8.5V17.1Z\"/>","door":"<path fill-rule=\"evenodd\" d=\"M14.3 4.5L6.2 3v17.1l8.2-1.5ZM10.2 11.5a1 1 0 1 0 2 0a1 1 0 1 0-2 0Z\"/><path class=\"ln\" d=\"M15.5 5.3h1.4a0.9 0.9 0 0 1 0.9 0.9v13.3M15.5 19.5H20M4 19.5h2.1\"/>","download":"<path d=\"M10.6 2.3h2.5v7h4.7L11.9 15.4l-5.9-5.9h4.7Z\"/><path class=\"ln\" d=\"M4.5 19.7h14.9\"/>","drive":"<path fill-rule=\"evenodd\" d=\"M5.3 11.4h13.5a2.7 2.7 0 0 1 2.7 2.7v3a2.7 2.7 0 0 1-2.7 2.7H5.3a2.7 2.7 0 0 1-2.7-2.7v-3a2.7 2.7 0 0 1 2.7-2.7ZM16.8 14.4a1.1 1.1 0 1 1 0 2.3a1.1 1.1 0 0 1 0-2.3ZM13.7 14.4a1.1 1.1 0 1 1 0 2.3a1.1 1.1 0 0 1 0-2.3Z\"/><path class=\"ln\" d=\"M4.1 11.9L6.8 4.7h10.4l2.8 7.2\"/>","drop":"<path d=\"M12 2.2s7 7.4 7 12.6a7 7 0 0 1-13.9 0C5 9.6 12 2.2 12 2.2Z\"/>","eraser":"<path d=\"M14 3.9l6.1 6.1-5.2 5.2-6.1-6.1ZM7.4 10l6.2 6.2-3.2 3.2H6.1l-2.9-2.9a1.6 1.6 0 0 1 0-2.3Z\"/><path class=\"ln\" d=\"M13 19.4h7\"/>","expand":"<path d=\"M2.7 2.7h7L2.7 9.7ZM21.3 2.7h-7l7 7ZM2.7 21.3h7l-7-7ZM21.3 21.3h-7l7-7Z\"/>","eye":"<path fill-rule=\"evenodd\" d=\"M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/>","eye-off":"<path d=\"M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z\"/><path class=\"ln\" d=\"M4.6 4.6l14.8 14.8\"/>","fast-forward":"<path d=\"M3 5.5v13.1L12 12ZM12.7 5.5v13.1L21.8 12Z\"/>","file":"<path d=\"M5.8 2.4h7.6v5.2h5V21.2H5.8ZM15 2.7l3.1 3.3h-3.1Z\"/>","file-code":"<path fill-rule=\"evenodd\" d=\"M5.8 2.4h7.6v5.2h5V21.2H5.8ZM9.8 11l1.5 1.4l-1.6 1.7l1.6 1.7l-1.5 1.4l-2.9-3.1ZM14.4 11l-1.5 1.4l1.6 1.7l-1.6 1.7l1.5 1.4l2.9-3.1Z\"/><path d=\"M15 2.7l3.1 3.3h-3.1Z\"/>","film":"<path fill-rule=\"evenodd\" d=\"M4.8 3.6h14.4a2.3 2.3 0 0 1 2.3 2.3v12.3a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 18.2V5.8A2.3 2.3 0 0 1 4.8 3.6Zm3.8 2v12.9h6.8V5.5ZM4.4 6v2h2.1V6Zm0 5v1.8h2.1v-1.8Zm0 4.9v2h2.1v-2Zm13.1-10v2h2.1V6Zm0 5v1.8h2.1v-1.8Zm0 4.9v2h2.1v-2Z\"/>","finish":"<path d=\"M6.5 4.2h3.9v4.6H6.5ZM14.8 4.2h4a0.9 0.9 0 0 1 0.9 0.9v3.7h-4.9ZM10.5 8.6h4.5v4.6H10.5Z\"/><path class=\"ln\" d=\"M6 20.3V4.1\"/>","fire":"<path fill-rule=\"evenodd\" d=\"M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z\"/>","fish":"<path fill-rule=\"evenodd\" d=\"M7.6 12c2.1-3.6 4.8-5.4 7.9-5.4 2.9 0 5 2.2 6.1 5.4-1.1 3.2-3.2 5.4-6.1 5.4-3.1 0-5.8-1.8-7.9-5.4ZM15.7 10.6a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z\"/><path d=\"M8.4 12 2.9 7.4v9.2Z\"/>","flag":"<path class=\"ln\" d=\"M7.2 20.5V4.3\"/><path d=\"M7.8 4.1h10.9l-2 4.1l2 4.1H7.8Z\"/>","focus":"<circle cx=\"12\" cy=\"12\" r=\"3.6\"/><path class=\"ln\" d=\"M3.8 9V6.1A2.3 2.3 0 0 1 6.1 3.8H9M15 3.8h2.9A2.3 2.3 0 0 1 20.2 6.1V9M20.2 15v2.9a2.3 2.3 0 0 1-2.3 2.3H15M9 20.2H6.1A2.3 2.3 0 0 1 3.8 17.9V15\"/>","folder":"<path d=\"M2.7 6.4a2.1 2.1 0 0 1 2.1-2.1h4.4l2.1 2.1h8.1a2.1 2.1 0 0 1 2.1 2.1v8.7a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1Z\"/>","folder-tree":"<path d=\"M9.6 5h4l1 1.5h6.4v5.3H9.6ZM9.6 14.3h4l1 1.5h6.4v5.3H9.6Z\"/><path class=\"ln\" d=\"M4.1 3.6v13.2a1 1 0 0 0 1 1H9.6M4.1 8.8H9.6\"/>","food":"<path d=\"M4.7 3.3h1.5v4.7h0.6V3.3h1.4v4.7h0.6V3.3h1.5v4.9A2.9 2.9 0 0 1 8.6 10.8V21.7H6.5V10.8a2.9 2.9 0 0 1-1.8-2.7ZM18.9 21.7h-2.3v-7.4h-3V10.6c0-3.9 1.7-6.6 5.2-7.7Z\"/>","game":"<path fill-rule=\"evenodd\" d=\"M7.6 6.3h8.8a5.8 5.8 0 0 1 0 11.5H7.6a5.8 5.8 0 0 1 0-11.5Zm-1.4 3.7v1.6H4.7v1.8h1.6v1.6H7.9v-1.6h1.6v-1.8H7.9v-1.6Zm9.2 1a1.2 1.2 0 1 0 0 2.3a1.2 1.2 0 0 0 0-2.3Zm2.5 1.6a1.2 1.2 0 1 0 0 2.3a1.2 1.2 0 0 0 0-2.3Z\"/>","gauge":"<path fill-rule=\"evenodd\" d=\"M3.7 18A9.4 9.4 0 1 1 19.4 19.6ZM15 8.6l-2.2 5.6l-2.1 0.3l-0.4-2.1Z\"/>","gavel":"<path d=\"M11.3 5.5L5.5 11.3l6.1 6.1l5.8-5.8Z\"/><path class=\"ln\" d=\"M13.7 4.2l5 5M3.8 19.1l5.7-5.7M13.7 19.1h6.3\"/>","gear":"<path fill-rule=\"evenodd\" d=\"M18.2 14.6a1.4 1.4 0 0 0 0.3 1.7l0.1 0.1a1.7 1.7 0 1 1-2.7 2.7l-0.1-0.1a1.4 1.4 0 0 0-1.7-0.3a1.4 1.4 0 0 0-0.9 1.4V19.6a1.7 1.7 0 1 1-3.8 0v-0.1a1.4 1.4 0 0 0-1-1.4a1.4 1.4 0 0 0-1.7 0.3l-0.1 0.1a1.7 1.7 0 1 1-2.7-2.7l0.1-0.1a1.4 1.4 0 0 0 0.3-1.7a1.4 1.4 0 0 0-1.4-0.9H4.6a1.7 1.7 0 1 1 0-3.8h0.1a1.4 1.4 0 0 0 1.4-1a1.4 1.4 0 0 0-0.3-1.7l-0.1-0.1a1.7 1.7 0 1 1 2.7-2.7l0.1 0.1a1.4 1.4 0 0 0 1.7 0.3H9.6a1.4 1.4 0 0 0 0.9-1.4V4.6a1.7 1.7 0 1 1 3.8 0v0.1a1.4 1.4 0 0 0 0.9 1.4a1.4 1.4 0 0 0 1.7-0.3l0.1-0.1a1.7 1.7 0 1 1 2.7 2.7l-0.1 0.1a1.4 1.4 0 0 0-0.3 1.7V9.6a1.4 1.4 0 0 0 1.4 0.9H19.6a1.7 1.7 0 1 1 0 3.8h-0.1a1.4 1.4 0 0 0-1.4 0.9ZM12.1 9.3a2.8 2.8 0 1 0 0 6.5a2.8 2.8 0 0 0 0-6.5Z\"/>","gem":"<path d=\"M6.4 3.9h11.2l3.8 5.3l-9.4 11.6L2.6 9.2Z\"/>","ghost":"<path fill-rule=\"evenodd\" d=\"M3.4 21.3V9.9a8.7 8.7 0 0 1 17.2 0v11.5l-2.9-2.1l-2.9 2.1l-2.9-2.1l-2.9 2.1l-2.9-2.1ZM8.8 7.8a1.6 1.6 0 1 0 0 3.1a1.6 1.6 0 0 0 0-3.1Zm6.2 0a1.6 1.6 0 1 0 0 3.1a1.6 1.6 0 0 0 0-3.1Z\"/>","gift":"<path d=\"M3.1 8.6h17.7v3.3H3.1ZM4.4 12.9h6.6v8.2H5.4a1 1 0 0 1-1-1ZM13 12.9h6.6v7.2a1 1 0 0 1-1 1H13Z\"/><path class=\"ln\" d=\"M12 8.6c-1.5-3.1-5.1-4.1-5.1-1.5S12 8.6 12 8.6s5.1-1 5.1-3.6s-3.6-1.5-5.1 3.6\"/>","globe":"<path d=\"M2.6 11.1A9.5 9.5 0 0 1 12 2.6a4.5 9.5 0 0 0-4.5 8.5ZM21.4 11.1A9.5 9.5 0 0 0 12 2.6a4.5 9.5 0 0 1 4.5 8.5ZM2.6 12.9A9.5 9.5 0 0 0 12 21.5a4.5 9.5 0 0 1-4.5-8.5ZM21.4 12.9A9.5 9.5 0 0 1 12 21.5a4.5 9.5 0 0 0 4.5-8.5ZM12 2.6a2.7 9.5 0 0 0-2.7 8.5h5.3A2.7 9.5 0 0 0 12 2.6ZM12 21.5a2.7 9.5 0 0 1-2.7-8.5h5.3A2.7 9.5 0 0 1 12 21.5Z\"/>","grid":"<rect x=\"2.7\" y=\"2.7\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"13.3\" y=\"2.7\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"2.7\" y=\"13.3\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"13.3\" y=\"13.3\" width=\"8\" height=\"8\" rx=\"2.2\"/>","group":"<rect x=\"6.9\" y=\"6.8\" width=\"6.4\" height=\"4.8\" rx=\"1.1\"/><rect x=\"10.8\" y=\"12.5\" width=\"6.4\" height=\"4.6\" rx=\"1.1\"/><path class=\"ln\" d=\"M4 7.6V4h3.6M16.5 4h3.6v3.6M20 16.4v3.6h-3.6M7.6 20H4v-3.6\"/>","hammer":"<path d=\"M13.1 2.5l7.5 7.5l-3.7 3.7l-7.5-7.5ZM12.9 8.9L3.7 18.1a2.1 2.1 0 0 0 2.9 2.9l9.2-9.2Z\"/>","hand":"<path d=\"M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z\"/>","headphones":"<path class=\"ln\" d=\"M4 14.5V12a8 8 0 0 1 16 0v2.5\"/><rect x=\"2.6\" y=\"13.4\" width=\"5.4\" height=\"7.6\" rx=\"1.8\"/><rect x=\"16\" y=\"13.4\" width=\"5.4\" height=\"7.6\" rx=\"1.8\"/>","heart":"<path d=\"M12 21.6s-9.3-5.7-9.3-13a5.3 5.3 0 0 1 9.3-3.6a5.3 5.3 0 0 1 9.3 3.6c0 7.4-9.3 13-9.3 13Z\"/>","heart-broken":"<path fill-rule=\"evenodd\" d=\"M12 21.6s-9.3-5.7-9.3-13a5.3 5.3 0 0 1 9.3-3.6a5.3 5.3 0 0 1 9.3 3.6c0 7.4-9.3 13-9.3 13ZM10.9 5.9l2.7 0.6l-1.4 2.7l3.6 2.5l-2.6 5.9l-2.5-1.1l1.5-3.7l-3.7-2.5Z\"/>","help":"<path fill-rule=\"evenodd\" d=\"M13 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM9.3 9.4A3.7 3.7 0 1 1 13.9 12.8v1.6h-2.1V10.9h1a1.6 1.6 0 1 0-1.6-1.6ZM13 15.8a1.3 1.3 0 1 1 0 2.6a1.3 1.3 0 0 1 0-2.6Z\"/>","history":"<path d=\"M5.8 5.8A9.1 9.1 0 1 1 3.2 12.2h3a6.1 6.1 0 1 0 1.8-4.3ZM2.5 2.7v7.2h7.2ZM11.2 8.1h2.2v3.7l2.7 1.6l-1.1 1.8l-3.8-2.3Z\"/>","home":"<path d=\"M2.7 10.4L12 2.3l9.3 8.1v9.5a1.1 1.1 0 0 1-1.1 1.1h-5.6v-6.9h-5.4v6.9H3.8a1.1 1.1 0 0 1-1.1-1.1Z\"/>","hot-tub":"<circle cx=\"8.2\" cy=\"5.4\" r=\"2.4\"/><path d=\"M2.6 10.9h18.8v4.2a5.1 5.1 0 0 1-5.1 5.1h-8.5a5.1 5.1 0 0 1-5.1-5.1Z\"/><path class=\"ln\" d=\"M6.3 10.9v-0.6A2.4 2.4 0 0 1 8.7 8H9.2M13.5 9.4c0.8-0.9-0.8-1.9 0-2.8M17.3 9.4c0.8-0.9-0.8-1.9 0-2.8\"/>","id":"<path fill-rule=\"evenodd\" d=\"M4.8 4.6h14.4a2.3 2.3 0 0 1 2.3 2.3v10.3a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 17.2V6.9A2.3 2.3 0 0 1 4.8 4.6Zm4.1 4.2a2.2 2.2 0 1 0 0 4.3a2.2 2.2 0 0 0 0-4.3Zm-3.2 7.7h6.4c-0.6-1.7-1.8-2.7-3.2-2.7s-2.6 0.9-3.2 2.7Zm8.8-7.2v1.5h4V9.4Zm0 3.6v1.5h4v-1.5Z\"/>","idea":"<path d=\"M8.3 14.9A6.5 6.5 0 1 1 15.7 14.9c-0.7 0.6-1.3 1.3-1.4 2.2H9.7c-0.1-0.9-0.7-1.6-1.4-2.2Z\"/><path class=\"ln\" d=\"M9.6 20.5h4.8\"/>","image":"<path fill-rule=\"evenodd\" d=\"M2.8 6.1a2.7 2.7 0 0 1 2.7-2.7h13.3A2.7 2.7 0 0 1 21.5 6.1v12.3a2.7 2.7 0 0 1-2.7 2.7H5.4A2.7 2.7 0 0 1 2.8 18.4Zm6.2 2.2a2 2 0 1 0 0 3.9a2 2 0 0 0 0-3.9Zm7.5 3.5l-8.3 7.8h10.7a1.5 1.5 0 0 0 1.5-1.5v-3.1Z\"/>","inbox":"<path fill-rule=\"evenodd\" d=\"M2.7 12.4L5.2 3.7h13.6l2.5 8.8V17.9a1.6 1.6 0 0 1-1.6 1.6H4.2A1.6 1.6 0 0 1 2.7 17.9ZM6.4 5.6L4.6 11.5h3.8l1.5 2.4h4.3l1.5-2.4h3.8L17.6 5.6Z\"/>","info":"<path fill-rule=\"evenodd\" d=\"M12.9 2.6a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.7 10.5h2.5V16.9h-2.5ZM12.9 6.4a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","invite":"<circle cx=\"8.8\" cy=\"7.7\" r=\"3.2\"/><path d=\"M2.9 19.2c0-3.4 2.7-5.8 5.8-5.8s5.8 2.4 5.8 5.8Z\"/><path class=\"ln\" d=\"M17.6 7.8v5.3M15 10.5h5.3\"/>","key":"<path fill-rule=\"evenodd\" d=\"M8.3 10.1a5.4 5.4 0 1 1 0 10.9a5.4 5.4 0 0 1 0-10.9Zm0 3.6a1.9 1.9 0 1 0 0 3.8a1.9 1.9 0 0 0 0-3.8Z\"/><path class=\"ln\" d=\"M11.7 12.2l8.7-8.7M16.7 7.2l3.1 3.1M14.4 9.5l2.1 2.1\"/>","keyboard":"<path fill-rule=\"evenodd\" d=\"M4.8 5.7h14.4A2.3 2.3 0 0 1 21.5 8v8a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 16V8a2.3 2.3 0 0 1 2.3-2.3ZM5.3 9.1h1.9v1.9H5.3ZM8.2 9.1h1.9v1.9H8.2ZM11 9.1h1.9v1.9h-1.9ZM13.9 9.1h1.9v1.9h-1.9ZM16.8 9.1h1.9v1.9h-1.9ZM7.8 13.3h8.4v1.7H7.8Z\"/>","laugh":"<path fill-rule=\"evenodd\" d=\"M13 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM7.9 8.1l3.5 1.7l-3.5 1.7l-0.7-1.4l0.7-0.4l-0.7-0.4ZM18 8.1l-3.5 1.7l3.5 1.7l0.7-1.4l-0.7-0.4l0.7-0.4ZM8.5 13.5h8.9a4.4 4.4 0 0 1-8.9 0Z\"/>","layers":"<path d=\"M12 4.3l8.6 5l-8.6 5l-8.6-5Z\"/><path class=\"ln\" d=\"M3.9 13.9l8.1 4.5l8.1-4.5\"/>","leaf":"<path fill-rule=\"evenodd\" d=\"M5.4 18.6c0-8.9 5.2-14.2 15.7-15.7c-1 10.4-6.3 15.7-15.7 15.7Zm3.1-2L16.8 7.1l-9.5 8.5Z\"/><path class=\"ln\" d=\"M3.7 20.3L6 18\"/>","lifebuoy":"<path fill-rule=\"evenodd\" d=\"M13.1 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 5.3a4.1 4.1 0 1 1 0 8.2a4.1 4.1 0 0 1 0-8.2ZM15.5 16.2L18.4 19.1L20.2 17.3L17.2 14.3ZM10.8 16.2L7.9 19.1L6 17.3L9 14.3ZM15.5 7.8L18.4 4.9L20.2 6.7L17.2 9.7ZM10.8 7.8L7.9 4.9L6 6.7L9 9.7Z\"/>","live":"<circle cx=\"12\" cy=\"12\" r=\"2.5\"/><path class=\"ln\" d=\"M8.5 8.5a4.9 4.9 0 0 0 0 6.9M15.5 8.5a4.9 4.9 0 0 1 0 6.9M6.2 6.2a8.2 8.2 0 0 0 0 11.5M17.8 6.2a8.2 8.2 0 0 1 0 11.5\"/>","lock":"<path d=\"M4.6 11.1a1.6 1.6 0 0 1 1.6-1.6h11.5a1.6 1.6 0 0 1 1.6 1.6v8.4a1.6 1.6 0 0 1-1.6 1.6H6.2A1.6 1.6 0 0 1 4.6 19.6Z\"/><path class=\"ln\" d=\"M7.9 9.4V6.8a4.1 4.1 0 0 1 8 0V9.4\"/>","mail":"<path d=\"M2.5 7.3v-0.4A2.3 2.3 0 0 1 4.8 4.6h14.4A2.3 2.3 0 0 1 21.5 6.9v0.4l-8.7 5.6a1.6 1.6 0 0 1-1.7 0ZM2.5 9.4v7.6A2.3 2.3 0 0 0 4.8 19.4h14.4a2.3 2.3 0 0 0 2.3-2.3V9.4l-8 5.2a2.7 2.7 0 0 1-3 0Z\"/>","map":"<path d=\"M2.6 6.1 8.3 4.2v14l-5.7 1.9ZM9.7 4.2l4.6 1.6v14l-4.6-1.6ZM15.7 5.8l5.7-1.9v14l-5.7 1.9Z\"/>","mask":"<path fill-rule=\"evenodd\" d=\"M2.7 6.1c3.3 1.4 6.4 2.1 9.4 2.1s6.1-0.6 9.4-2.1c0 7.1-2.9 11.7-5.8 11.7c-1.5 0-2.2-1.5-3.6-1.5s-2.1 1.5-3.6 1.5c-2.9 0-5.8-4.6-5.8-11.7ZM6.8 11.6a1.6 1.1 0 1 0 3.3 0a1.6 1.1 0 1 0-3.3 0ZM14 11.6a1.6 1.1 0 1 0 3.3 0a1.6 1.1 0 1 0-3.3 0Z\"/>","medical":"<path fill-rule=\"evenodd\" d=\"M5.3 6.3h13.5a2.7 2.7 0 0 1 2.7 2.7v8.7a2.7 2.7 0 0 1-2.7 2.7H5.3a2.7 2.7 0 0 1-2.7-2.7V9a2.7 2.7 0 0 1 2.7-2.7ZM10.9 10h2.3v2.2h2.2v2.3h-2.2V16.7h-2.3v-2.2H8.7v-2.3h2.2Z\"/><path class=\"ln\" d=\"M9.2 6.3V5.3a0.9 0.9 0 0 1 0.9-0.9h3.8a0.9 0.9 0 0 1 0.9 0.9v1\"/>","megaphone":"<path d=\"M2.7 9.1a1.1 1.1 0 0 1 1.1-1.1h2.7l9.7-4.8v16.1l-9.7-4.8H3.8A1.1 1.1 0 0 1 2.7 13.2Z\"/><path class=\"ln\" d=\"M6.6 14.5l1.2 5M18.8 8.5a3.4 3.4 0 0 1 0 5.4\"/>","members":"<circle cx=\"9.1\" cy=\"7.1\" r=\"3.5\"/><path d=\"M2.6 19.6c0-3.7 2.9-6.3 6.4-6.3s6.4 2.6 6.4 6.3Z\"/><circle cx=\"16.5\" cy=\"6.6\" r=\"2.8\"/><path d=\"M16.7 12.4c2.8 0.4 4.7 2.7 4.7 6.2V19.6h-4.3c0-2.8-1-5.1-2.7-6.5Z\"/>","mic":"<path d=\"M8.9 5.8a3.1 3.1 0 0 1 6.2 0V10.8a3.1 3.1 0 0 1-6.2 0Z\"/><path class=\"ln\" d=\"M5.9 10.8a6.1 6.1 0 0 0 12.3 0M12 16.9V20.2\"/>","mic-off":"<path d=\"M9 5.4A3.1 3.1 0 0 1 15.2 5.8V10.7a3.1 3.1 0 0 1-0.1 0.8Z\"/><path class=\"ln\" d=\"M5.4 10.7a6.6 6.6 0 0 0 11 5M18.7 10.7c0 0.8-0.1 1.5-0.4 2.2M12.1 17.3v2.8M4.5 4.1l15.1 15.1\"/>","minus-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM7.9 10.9v2.5h10.2v-2.5Z\"/>","money":"<path fill-rule=\"evenodd\" d=\"M4.8 5.7h14.4a2.1 2.1 0 0 1 2.1 2.1v8.4a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1V7.8a2.1 2.1 0 0 1 2.1-2.1ZM12 8.9a3.1 3.1 0 1 0 0 6.3a3.1 3.1 0 0 0 0-6.3ZM6.3 8.7a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Zm11.4 4.6a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Z\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\"/>","moon":"<path d=\"M21.7 14.6A9.7 9.7 0 1 1 9.4 2.3a8 8 0 0 0 12.3 12.3Z\"/>","more":"<circle cx=\"4.8\" cy=\"12\" r=\"2.2\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><circle cx=\"19.2\" cy=\"12\" r=\"2.2\"/>","mountain":"<path d=\"M2.8 18.1L9.2 5.3l4.1 7.1L16.1 8.9L21.5 18.1Z\"/>","mug":"<path d=\"M3.8 8.9h12.2v7.6a4.6 4.6 0 0 1-4.6 4.6h-3a4.6 4.6 0 0 1-4.6-4.6Z\"/><path class=\"ln\" d=\"M16 11H16.9a2.5 2.5 0 0 1 0 5h-0.9M7.9 3.7c-0.8 1 0.8 2 0 3M11.4 3.7c-0.8 1 0.8 2 0 3\"/>","music":"<path d=\"M7.6 5.4l13.3-2.5v3.5l-13.3 2.5Z\"/><path class=\"ln\" d=\"M8.8 17.9V6.5M19.7 15.6V4.2\"/><circle cx=\"5.5\" cy=\"17.9\" r=\"3.2\"/><circle cx=\"16.7\" cy=\"15.6\" r=\"3.2\"/>","mute":"<path d=\"M2.9 8.8h4l5.5-4.2v14.8l-5.5-4.2H2.9Z\"/><path class=\"ln\" d=\"M15.5 9.6l4.7 4.7M20.3 9.6l-4.7 4.7\"/>","news":"<path fill-rule=\"evenodd\" d=\"M2.8 2.6h14.2v15.2a2.2 2.2 0 0 0 2.2 2.2H5.1A2.2 2.2 0 0 1 2.8 18.9ZM6.6 6.6h6.8v1.7H6.6Zm0 3.7h6.8v1.7H6.6Zm0 3.7h4v1.7H6.6Z\"/><path class=\"ln\" d=\"M17.1 7.7H19.8V17.9a2.1 2.1 0 0 1-2.1 2.1\"/>","nodes":"<circle cx=\"12\" cy=\"5.2\" r=\"3\"/><circle cx=\"5.6\" cy=\"18\" r=\"3\"/><circle cx=\"18.4\" cy=\"18\" r=\"3\"/><path class=\"ln\" d=\"M10.9 7.6L6.8 15.5M13.1 7.6l4.1 7.9M8.4 18h7.1\"/>","palette":"<path fill-rule=\"evenodd\" d=\"M12.1 2.7a9.4 9.4 0 1 0 0 18.8c1.3 0 2-0.9 2-1.9c0-1.2-1-1.5-1-2.5s0.8-1.6 2-1.6H17.3a4.4 4.4 0 0 0 4.4-4.4C21.7 6.7 17.4 2.7 12.1 2.7ZM7.8 9.7a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Zm2.5-3.7a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Zm4.6 0a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","parking":"<path fill-rule=\"evenodd\" d=\"M6.2 2.6h11.6a3.6 3.6 0 0 1 3.6 3.6v11.6a3.6 3.6 0 0 1-3.6 3.6H6.2a3.6 3.6 0 0 1-3.6-3.6V6.2a3.6 3.6 0 0 1 3.6-3.6ZM8.4 18V6H13a4 4 0 0 1 0 8h-2.4v4ZM10.6 8.2v3.6H13a1.8 1.8 0 0 0 0-3.6Z\"/>","pause":"<rect x=\"4.8\" y=\"2.6\" width=\"5.1\" height=\"18.8\" rx=\"1.5\"/><rect x=\"14.2\" y=\"2.6\" width=\"5.1\" height=\"18.8\" rx=\"1.5\"/>","paw":"<path d=\"M6.9 18.5c0-3.5 2.2-6.3 5.1-6.3s5.1 2.8 5.1 6.3c0 1.8-1.3 2.9-2.9 2.9c-0.9 0-1.5-0.6-2.2-0.6s-1.3 0.6-2.2 0.6c-1.6 0-2.9-1.1-2.9-2.9Z\"/><circle cx=\"5.1\" cy=\"10.2\" r=\"2.6\"/><circle cx=\"9.1\" cy=\"5.1\" r=\"2.6\"/><circle cx=\"14.9\" cy=\"5.1\" r=\"2.6\"/><circle cx=\"18.9\" cy=\"10.2\" r=\"2.6\"/>","pencil":"<path d=\"M15.6 3.1a2.2 2.2 0 0 1 3.2 3.2L6.9 18.1l-4.5 1.2l1.2-4.5Z\"/><path class=\"ln\" d=\"M11.8 19.7H20.1\"/>","phone":"<path d=\"M5.1 2.4h4.9l2.4 6l-2.7 1.6a10.7 10.7 0 0 0 4.2 4.2l1.6-2.7l6 2.4v4.9a2.3 2.3 0 0 1-2.3 2.3A17.3 17.3 0 0 1 2.8 4.6a2.3 2.3 0 0 1 2.3-2.3Z\"/>","piggy":"<path fill-rule=\"evenodd\" d=\"M2.6 11.4c0-3.6 3.7-6.5 8.7-6.5c1.4 0 2.7 0.2 3.9 0.7L18.3 3.8v3.7c0.9 0.8 1.5 1.7 1.7 2.8h1.5v3.8H20c-0.5 1.1-1.4 2-2.6 2.6V20.1h-3.3v-2.2c-0.9 0.2-1.8 0.3-2.8 0.3c-0.9 0-1.7-0.1-2.6-0.3v2.2h-3.3v-3.3C3.7 15.5 2.6 13.6 2.6 11.4ZM14.5 9.8a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0ZM8.3 6.8v1.5h3.7V6.8Z\"/>","pin":"<path fill-rule=\"evenodd\" d=\"M12 2.8a7.1 7.1 0 0 0-7.1 7.1c0 5.5 7.1 11.8 7.1 11.8s7.1-6.3 7.1-11.8A7.1 7.1 0 0 0 12 2.8Zm0 4.5a2.5 2.5 0 1 1 0 5.1a2.5 2.5 0 0 1 0-5.1Z\"/>","plane":"<path d=\"M21.2 2.9L2.4 10.7l6.9 3.2ZM21.2 2.9l-11 12l3.2 6.9Z\"/>","play":"<path d=\"M5.1 3.5v17a0.9 0.9 0 0 0 1.3 0.8l12.8-8.5a0.9 0.9 0 0 0 0-1.6L6.5 2.7a0.9 0.9 0 0 0-1.3 0.8Z\"/>","plug":"<path d=\"M6.5 8h10.9v3.3a5.4 5.4 0 0 1-10.9 0Z\"/><path class=\"ln\" d=\"M9.2 4.2v3.8M14.6 4.2v3.8M11.9 16.8v3.5\"/>","plus-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm-1.2 4.2h2.5v3.8H18v2.5h-3.8V17.1h-2.5v-3.8H7.9v-2.5h3.8Z\"/>","print":"<path d=\"M6.2 2.6h11.5v4.4H6.2ZM2.6 11a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v4.1a2.7 2.7 0 0 1-2.7 2.7h-0.3v-4.5H5.6v4.5h-0.3A2.7 2.7 0 0 1 2.6 15.1ZM7.1 14.7h9.9v6.7H7.1Z\"/>","puzzle":"<path d=\"M2.8 5.4h5a2.9 2.9 0 1 1 5.8 0h5v5a2.9 2.9 0 1 1 0 5.8v5h-5a2.9 2.9 0 1 0-5.8 0H2.8v-5a2.9 2.9 0 1 0 0-5.8Z\"/>","radio":"<path fill-rule=\"evenodd\" d=\"M5.2 7.8h13.6a2.5 2.5 0 0 1 2.5 2.5v7.8a2.5 2.5 0 0 1-2.5 2.5H5.2A2.5 2.5 0 0 1 2.6 18.1v-7.8A2.5 2.5 0 0 1 5.2 7.8ZM12.9 14.2a2.5 2.5 0 1 0 5.1 0a2.5 2.5 0 1 0-5.1 0ZM6.1 11.6v2h4.7v-2ZM6.1 15v2h4.7v-2Z\"/><path class=\"ln\" d=\"M7.1 7.8L16.9 4\"/>","ranking":"<path d=\"M3.5 13.7h4.9V9.9h7.1v5.7h4.9v5.4H3.5ZM12 2.2l1 2l2.2 0.3l-1.6 1.6l0.4 2.2L12 7.5l-2 1l0.4-2.2l-1.6-1.6l2.2-0.3Z\"/>","record":"<path fill-rule=\"evenodd\" d=\"M13.2 2.7a9.3 9.3 0 1 0 0 18.5a9.3 9.3 0 0 0 0-18.5Zm0 3.3a6 6 0 1 1 0 11.9a6 6 0 0 1 0-11.9Z\"/><circle cx=\"13.2\" cy=\"12\" r=\"3.7\"/>","restroom":"<circle cx=\"7.2\" cy=\"5.1\" r=\"1.8\"/><circle cx=\"16.2\" cy=\"5.1\" r=\"1.8\"/><path d=\"M6 9h1.8a1.5 1.5 0 0 1 1.5 1.5v4.7H8.6v5H5.5v-5H4.7v-4.7A1.5 1.5 0 0 1 6 9Z\"/><path d=\"M15.7 9.4h1.1a0.9 0.9 0 0 1 0.9 0.7l1.9 6.3H17.4v3.6h-2.3v-3.6h-2.1l1.9-6.3a0.9 0.9 0 0 1 0.9-0.7Z\"/><path class=\"ln\" d=\"M11.6 3.7v16.3\"/>","retry":"<path class=\"ln\" d=\"M4 12a8 8 0 0 1 13.4-5.9M20 12a8 8 0 0 1-13.4 5.9\"/><path d=\"M21.3 2.8v7h-7ZM2.7 21.2v-7h7Z\"/>","rewind":"<path d=\"M21 5.5v13.1L12 12ZM11.3 5.5v13.1L2.2 12Z\"/>","robot":"<path fill-rule=\"evenodd\" d=\"M8.5 8.7h6.9a3.1 3.1 0 0 1 3.1 3.1v4.3A3.1 3.1 0 0 1 15.5 19.3H8.5A3.1 3.1 0 0 1 5.4 16.2v-4.3A3.1 3.1 0 0 1 8.5 8.7Zm0.9 3.8a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4Zm5.2 0a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4ZM9.7 16v1.3h4.5v-1.3Z\"/><path class=\"ln\" d=\"M12 5.3v3.5M3.9 13.1v2.8M20.2 13.1v2.8\"/>","rocket":"<path fill-rule=\"evenodd\" d=\"M11.9 16.6L7.4 12.2C9.1 6.1 13.6 2.9 21.1 2.9c0 7.5-3.2 12-9.2 13.7ZM13.6 8.7a1.7 1.7 0 1 0 3.5 0a1.7 1.7 0 1 0-3.5 0Z\"/><path d=\"M3.7 12.2L6.8 7.5h3.5L6.6 12.6ZM11.4 17.4L11.9 20.3l4.6-3.3v-3.5ZM6.3 17.7c-2 0-3.9 2-3.9 3.9c2 0 3.9-2 3.9-3.9Z\"/>","save":"<path fill-rule=\"evenodd\" d=\"M4.4 2.7h12.4l3.5 3.5V20.8a0.7 0.7 0 0 1-0.7 0.7H4.4a0.7 0.7 0 0 1-0.7-0.7V3.4a0.7 0.7 0 0 1 0.7-0.7Zm3.4 1.4v4.9h7.4V4.1ZM7.2 13.6v6.4h9.6v-6.4Z\"/>","scissors":"<path fill-rule=\"evenodd\" d=\"M6.2 3.8a3.2 3.2 0 1 1 0 6.5a3.2 3.2 0 0 1 0-6.5Zm0 2a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4ZM6.2 13.7a3.2 3.2 0 1 1 0 6.5a3.2 3.2 0 0 1 0-6.5Zm0 2a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4Z\"/><path class=\"ln\" d=\"M8.7 8.8L20.4 18.1M8.7 15.2L20.4 5.9\"/>","search":"<path fill-rule=\"evenodd\" d=\"M10.6 3a7.7 7.7 0 1 1 0 15.4a7.7 7.7 0 0 1 0-15.4Zm0 3.2a4.5 4.5 0 1 0 0 9.2a4.5 4.5 0 0 0 0-9.2Z\"/><path class=\"ln\" d=\"M16.3 16.4l3.8 3.8\"/>","seedling":"<path d=\"M12.4 10.8C12.4 6.1 9.5 2.9 4 2.9c0 4.9 3 7.8 8.4 7.8ZM11.6 13.4c0-4.7 3-7.8 8.4-7.8c0 4.9-3 7.8-8.4 7.8Z\"/><path class=\"ln\" d=\"M12 20.4V12.5\"/>","server":"<path fill-rule=\"evenodd\" d=\"M5.2 2.6h13.4a2.7 2.7 0 0 1 2.7 2.7v3.4a2.7 2.7 0 0 1-2.7 2.7H5.2A2.7 2.7 0 0 1 2.5 8.6V5.3A2.7 2.7 0 0 1 5.2 2.6Zm2.2 2.9a1.5 1.5 0 1 0 0 2.9a1.5 1.5 0 0 0 0-2.9ZM5.2 12.7h13.4a2.7 2.7 0 0 1 2.7 2.7v3.4a2.7 2.7 0 0 1-2.7 2.7H5.2A2.7 2.7 0 0 1 2.5 18.7v-3.4A2.7 2.7 0 0 1 5.2 12.7Zm2.2 2.9a1.5 1.5 0 1 0 0 2.9a1.5 1.5 0 0 0 0-2.9Z\"/>","shapes":"<circle cx=\"7.3\" cy=\"7.6\" r=\"4.3\"/><path d=\"M16.5 2.7l5 8.6h-9.8ZM13.4 13.7h7.4v7.4h-7.4ZM2.5 21.1L6.8 13.7l4.3 7.4Z\"/>","shelter":"<path fill-rule=\"evenodd\" d=\"M12 2.7L2.5 10.2l1.1 1.5l1-0.8v10h14.8V10.9l1 0.8l1.1-1.5ZM9.5 20.9v-4.8a2.5 2.5 0 0 1 4.9 0v4.8ZM12 9.1a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4Z\"/>","shield":"<path d=\"M12 2.6 4.6 5.8V12c0 4.6 3.1 8 7.4 9.5 4.3-1.5 7.4-4.9 7.4-9.5V5.8Z\"/>","shirt":"<path d=\"M8 2.7L2.5 5.9l2.5 4.9l1.5-0.8v11.2h11V10.1l1.5 0.8L21.5 5.9l-5.5-3.2c-0.6 1.5-1.9 2.5-4 2.5S8.6 4.2 8 2.7Z\"/>","skip":"<path d=\"M3.3 2.6v18.9L15.8 12Z\"/><rect x=\"17.8\" y=\"2.7\" width=\"3.2\" height=\"18.7\" rx=\"1.5\"/>","skull":"<path fill-rule=\"evenodd\" d=\"M12 2.6a7.9 7.9 0 0 0-7.9 7.9c0 2.4 1.1 4.2 2.5 5.4V19.5a2 2 0 0 0 2 2h6.8a2 2 0 0 0 2-2v-3.6c1.4-1.2 2.5-3 2.5-5.4A7.9 7.9 0 0 0 12 2.6ZM9.2 9.4a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4ZM14.8 9.4a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4ZM12 13.3l1 1.8h-2ZM10.1 18.1h0.9v2.4h-0.9ZM13 18.1h0.9v2.4H13Z\"/>","sliders":"<path class=\"ln\" d=\"M4 7h8.8M19.2 7H20M4 17h2.8M13.2 17H20\"/><circle cx=\"16\" cy=\"7\" r=\"3.2\"/><circle cx=\"10\" cy=\"17\" r=\"3.2\"/>","smile":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM9.9 8.6a1.4 1.4 0 1 1 0 2.8a1.4 1.4 0 0 1 0-2.8ZM16 8.6a1.4 1.4 0 1 1 0 2.8a1.4 1.4 0 0 1 0-2.8ZM8.8 13.5h8.3a4.1 4.1 0 0 1-8.3 0Z\"/>","spark":"<path d=\"M10.7 2.6l2 5.6l5.6 2l-5.6 2L10.7 17.8l-2-5.6l-5.6-2l5.6-2ZM17.6 14.7l0.9 2.5l2.5 0.9l-2.5 0.9l-0.9 2.5l-0.9-2.5l-2.5-0.9l2.5-0.9Z\"/>","square":"<rect x=\"2.7\" y=\"2.7\" width=\"18.7\" height=\"18.7\" rx=\"3.3\"/>","star":"<path d=\"M12 2.8l2.9 6l6.6 0.8l-4.9 4.5l1.3 6.6L12 17.4l-5.9 3.2l1.3-6.6l-4.9-4.5l6.6-0.8Z\"/>","steps":"<path fill-rule=\"evenodd\" d=\"M2.8 4h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3ZM2.8 9.4h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3ZM2.8 15h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3Z\"/><path class=\"ln\" d=\"M10.6 6.4H20.3M10.6 11.9H20.3M10.6 17.4H20.3\"/>","store":"<path d=\"M4.4 3h15l2 6.2v1.4a3.2 3.2 0 0 1-6.3 0a3.2 3.2 0 0 1-6.3 0a3.2 3.2 0 0 1-6.3 0V9.2ZM4 14.9h15.9v5.6a1.1 1.1 0 0 1-1.1 1.1H14.1v-5.1h-4.4v5.1H5.1a1.1 1.1 0 0 1-1.1-1.1Z\"/>","sun":"<circle cx=\"12\" cy=\"12\" r=\"3.8\"/><path class=\"ln\" d=\"M12 3.9v1.3M12 18.7v1.3M6.3 6.2l0.9 0.9M16.8 16.8L17.8 17.8M4 12h1.3M18.7 12h1.3M6.3 17.8l0.9-0.9M16.8 7.2L17.8 6.2\"/>","sword":"<path d=\"M21.2 2.8v4.7l-10.8 10.8l-4.7-4.7L16.5 2.8Z\"/><path class=\"ln\" d=\"M5.2 11.9L12.1 18.8M8.4 15.6L3.7 20.3\"/>","table":"<path d=\"M2.7 6.2a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.3H2.7ZM2.7 10.5h5.3v9.9H5.2a2.5 2.5 0 0 1-2.5-2.5ZM9.8 10.5h4.5v9.9H9.8ZM16.1 10.5h5.3V17.9a2.5 2.5 0 0 1-2.5 2.5h-2.7Z\"/>","tack":"<path d=\"M8.5 3h7.2a0.8 0.8 0 0 1 0.8 1l-0.8 4l2.8 2.8a0.7 0.7 0 0 1-0.6 1.4H6.1a0.7 0.7 0 0 1-0.6-1.4l2.8-2.8l-0.8-4a0.8 0.8 0 0 1 0.8-1Z\"/><path class=\"ln\" d=\"M12 12.2V20.5\"/>","tag":"<path fill-rule=\"evenodd\" d=\"M2.9 3.4A1.5 1.5 0 0 1 4.4 2.9h7.2l10 10l-8.7 8.7L2.9 10.6Zm5 2.5a1.9 1.9 0 1 0 0 3.7a1.9 1.9 0 0 0 0-3.7Z\"/>","target":"<path fill-rule=\"evenodd\" d=\"M12 2.6a9.4 9.4 0 1 1 0 18.8a9.4 9.4 0 0 1 0-18.8Zm0 3a6.4 6.4 0 1 0 0 12.9a6.4 6.4 0 0 0 0-12.9Zm0 2.7a3.7 3.7 0 1 1 0 7.4a3.7 3.7 0 0 1 0-7.4Z\"/>","tent":"<path fill-rule=\"evenodd\" d=\"M12 4.2L19.3 17.4H4.7ZM12 11.6L9.5 17.4h5.1Z\"/><path class=\"ln\" d=\"M3.9 17.7h16.2\"/>","terminal":"<path fill-rule=\"evenodd\" d=\"M5 3.6h14a2.4 2.4 0 0 1 2.4 2.4v12a2.4 2.4 0 0 1-2.4 2.4H5A2.4 2.4 0 0 1 2.6 18V6A2.4 2.4 0 0 1 5 3.6Zm1.4 6 1.3-1.3 3.6 3.7-3.6 3.7-1.3-1.3 2.4-2.4Zm6.4 4.6h4.4v1.7h-4.4Z\"/>","text":"<path fill-rule=\"evenodd\" d=\"M10.2 2.4h3.7l6.8 18.7h-3.4l-1.6-4.7H8.3l-1.6 4.7H3.3ZM9.3 13.6h5.4L12 5.7Z\"/>","thumbs-up":"<path d=\"M6.5 10.1v10.3H3.6a1.1 1.1 0 0 1-1.1-1.1v-8a1.1 1.1 0 0 1 1.1-1.1ZM7.9 10.1l3.6-7.3a2.4 2.4 0 0 1 2.7 2.8l-0.6 3.5h5.6a2.2 2.2 0 0 1 2.2 2.6l-1.4 7a2.2 2.2 0 0 1-2.2 1.7H7.9Z\"/>","ticket":"<path fill-rule=\"evenodd\" d=\"M2.6 6.4h18.8v3.4a2.2 2.2 0 0 0 0 4.4v3.4H2.6v-3.4a2.2 2.2 0 0 0 0-4.4ZM13.3 8.4v1.8h1.4V8.4Zm0 2.7v1.8h1.4v-1.8Zm0 2.7v1.8h1.4v-1.8Z\"/>","toolbox":"<path d=\"M2.7 10.1a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.2H2.7ZM2.7 13.7h4.7v1.5h1.6v-1.5h6.2v1.5h1.6v-1.5h4.7V17.8a2.5 2.5 0 0 1-2.5 2.5H5.2A2.5 2.5 0 0 1 2.7 17.8Z\"/><path class=\"ln\" d=\"M9.1 7.5V5.7A1.5 1.5 0 0 1 10.5 4.2h2.9A1.5 1.5 0 0 1 14.9 5.7v1.9\"/>","train":"<path fill-rule=\"evenodd\" d=\"M9.1 2.7h5.8a2.9 2.9 0 0 1 2.9 2.9v6.8a2.9 2.9 0 0 1-2.9 2.9H9.1a2.9 2.9 0 0 1-2.9-2.9V5.6a2.9 2.9 0 0 1 2.9-2.9Zm-1.2 2.5v4.1h8.2V5.2ZM9.1 11.4a1.1 1.1 0 1 0 0 2.1A1.1 1.1 0 0 0 9.1 11.4Zm5.8 0a1.1 1.1 0 1 0 0 2.1a1.1 1.1 0 0 0 0-2.1Z\"/><path class=\"ln\" d=\"M8.6 20.2l1.9-3.4M15.4 20.2l-1.9-3.4\"/>","trash":"<path d=\"M5.8 7.6h12.4l-1 12a2 2 0 0 1-2 1.8H8.8a2 2 0 0 1-2-1.8Z\"/><path class=\"ln\" d=\"M3.8 6.6h16.4M9 6.6V4h6v2.6\"/>","tree":"<path d=\"M12 2.5L5.9 10.7h3L4.4 16.9h15.1l-4.5-6.2h3Z\"/><path class=\"ln\" d=\"M12 16.2v4\"/>","trophy":"<path d=\"M7.3 3h9.6V8.6a4.7 4.7 0 0 1-9.6 0Z\"/><path class=\"ln\" d=\"M7.3 5.6H5a3.1 3.1 0 0 0 3.1 4.1M16.7 5.6h2.3a3.1 3.1 0 0 1-3.1 4.1M12 13.7V16.9M8 20.4h8.1\"/>","tv":"<rect x=\"2.7\" y=\"7.4\" width=\"18.6\" height=\"13.3\" rx=\"2.3\"/><path class=\"ln\" d=\"M8.2 3.8l3.8 3.4l3.8-3.4\"/>","umbrella":"<path d=\"M2.6 12.7a9.4 9.4 0 0 1 18.8 0Z\"/><path class=\"ln\" d=\"M12 12.7v5.6a1.9 1.9 0 0 1-3.8 0\"/>","upload":"<path d=\"M10.6 21.7h2.5v-7h4.7L11.9 8.6l-5.9 5.9h4.7Z\"/><path class=\"ln\" d=\"M4.5 4.3h14.9\"/>","user":"<circle cx=\"12\" cy=\"6.7\" r=\"4.5\"/><path d=\"M3.5 21c0-4.7 3.8-7.8 8.5-7.8s8.5 3.2 8.5 7.8Z\"/>","user-check":"<circle cx=\"8.9\" cy=\"7.5\" r=\"3.2\"/><path d=\"M2.9 19.3c0-3.4 2.7-5.9 5.9-5.9s5.9 2.4 5.9 5.9Z\"/><path class=\"ln\" d=\"M14.8 10.6l1.9 1.9l3.8-3.8\"/>","user-circle":"<path fill-rule=\"evenodd\" d=\"M13 2.9a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 3.8a3.3 3.3 0 1 1 0 6.5a3.3 3.3 0 0 1 0-6.5ZM7.2 17.9a6.7 6.7 0 0 1 11.5 0a8.1 8.1 0 0 1-11.5 0Z\"/>","user-lock":"<circle cx=\"9.9\" cy=\"7.2\" r=\"4.2\"/><path d=\"M2.7 20c0-4.2 3.2-7 7.2-7c1.2 0 2.3 0.3 3.2 0.8v6.2Z\"/><rect x=\"14.5\" y=\"14.5\" width=\"6.9\" height=\"5.7\" rx=\"1.3\"/><path class=\"ln\" d=\"M16.4 14.5v-1a1.5 1.5 0 0 1 3 0v1\"/>","user-minus":"<circle cx=\"9.6\" cy=\"7.6\" r=\"3.9\"/><path d=\"M2.8 19.7c0-3.9 3.1-6.6 6.8-6.6c1.2 0 2.2 0.3 3.1 0.8v5.9Z\"/><path class=\"ln\" d=\"M15.1 16.7h5.2\"/>","user-off":"<path d=\"M9.1 4.7A4.2 4.2 0 1 1 15 10.6ZM4.2 20.8c0-4.3 2.8-6.9 6.3-7.2L17.5 20.8Z\"/><path class=\"ln\" d=\"M4 3.5l16.2 16.2\"/>","user-pen":"<circle cx=\"9.8\" cy=\"7.6\" r=\"4\"/><path d=\"M2.9 19.9c0-4 3.1-6.7 6.9-6.7c1.2 0 2.2 0.3 3.1 0.8v5.9Z\"/><path d=\"M19.5 11.4l2.1 2.1l-5.2 5.2l-2.8 0.7l0.7-2.8Z\"/>","user-tag":"<circle cx=\"10\" cy=\"7.4\" r=\"4\"/><path d=\"M2.9 19.9c0-4 3.2-6.8 7-6.8c1.2 0 2.3 0.3 3.2 0.8v6Z\"/><path fill-rule=\"evenodd\" d=\"M14 13.7h4.5l3.1 3.1l-3.1 3.1h-4.5ZM15.2 16.8a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z\"/>","video":"<path d=\"M3 7.7a2 2 0 0 1 2-2H14.4a2 2 0 0 1 2 2v8.7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2ZM17.5 10.1l4.2-2.6v8.9l-4.2-2.6Z\"/>","volume":"<path d=\"M2.5 8.9h4l5.4-4.2v14.6l-5.4-4.2H2.5Z\"/><path class=\"ln\" d=\"M15.2 9.3a3.8 3.8 0 0 1 0 5.5M17.7 6.5a7.5 7.5 0 0 1 0 11\"/>","walk":"<circle cx=\"12.4\" cy=\"4.6\" r=\"2.2\"/><path class=\"ln\" d=\"M8.7 19.8l2.4-5.5l1.9 2.2V19.8M11.1 14.3l0.9-5.2l-2.8 1.5l-1.4 2.8M12 9.1l1.8 2.8l2.8 0.9\"/>","wallet":"<path fill-rule=\"evenodd\" d=\"M5.7 2.8H19v4.6h1.6a0.9 0.9 0 0 1 0.9 0.9v12.4H5.1a2.5 2.5 0 0 1-2.5-2.5V5.9a3.1 3.1 0 0 1 3.1-3.1Zm0 2.1a1 1 0 0 0 0 2.1h11.2V4.9ZM16.7 12.9a1.4 1.4 0 1 0 0 2.8a1.4 1.4 0 0 0 0-2.8Z\"/>","water":"<path d=\"M2.7 7.9c2.4 0 2.4-2 4.7-2s2.4 2 4.6 2s2.4-2 4.7-2s2.4 2 4.6 2v3.2c-2.3 0-2.3-2-4.6-2s-2.4 2-4.7 2s-2.3-2-4.6-2s-2.4 2-4.7 2ZM2.7 14.8c2.4 0 2.4-2 4.7-2s2.4 2 4.6 2s2.4-2 4.7-2s2.4 2 4.6 2v3.2c-2.3 0-2.3-2-4.6-2s-2.4 2-4.7 2s-2.3-2-4.6-2s-2.4 2-4.7 2Z\"/>","weight":"<circle cx=\"12\" cy=\"4.8\" r=\"2.6\"/><path d=\"M6.5 8.7h10.9l3.3 12.3H3.2Z\"/>","window":"<path d=\"M2.6 6.2a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v1.5H2.6ZM2.6 9.8h18.7v7.7a2.7 2.7 0 0 1-2.7 2.7h-13.4a2.7 2.7 0 0 1-2.7-2.7Z\"/>","window-restore":"<path d=\"M2.7 10.4a2.7 2.7 0 0 1 2.7-2.7h8.2a2.7 2.7 0 0 1 2.7 2.7v7.2a2.7 2.7 0 0 1-2.7 2.7h-8.2a2.7 2.7 0 0 1-2.7-2.7ZM7.9 6.4V6.3a2.7 2.7 0 0 1 2.7-2.7h8.2a2.7 2.7 0 0 1 2.7 2.7v7.2a2.7 2.7 0 0 1-2.7 2.7h-1.1v-5.8a4 4 0 0 0-4-4Z\"/>","wrench":"<path d=\"M14.9 2.5a6 6 0 0 0-5.5 8.3L2.7 17.5V21.3H6.5l6.7-6.7a6 6 0 0 0 8.3-5.5l-3.5 1.3l-2.9-2.9l1.3-3.5Z\"/>","x-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM10.1 7.9L12.9 10.7l2.9-2.9l1.4 1.4l-2.9 2.9l2.9 2.9l-1.4 1.4l-2.9-2.9l-2.9 2.9l-1.4-1.4l2.9-2.9l-2.9-2.9Z\"/>","zap":"<path d=\"M13.9 2.5L5.2 13.3h6.1l-1.2 8.1l8.7-10.8h-6.1Z\"/>"};++ const G = {"airplane":"<path d=\"M12 3.2c0.9 0 1.4 0.9 1.4 2.4V9.8l7 4.2V15.4l-7-2.4V17.2l1.9 1.4V20L12 19.1l-3.3 0.9v-1.4l1.9-1.4v-4.2L3.6 15.4v-1.4L10.6 9.8V5.6C10.6 4.2 11.1 3.2 12 3.2Z\"/>","alert":"<path d=\"M12 4.5L3.6 18.8h16.9Z\"/><path d=\"M12 10v3.7M12 16.5h0\"/>","alert-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5v5.5M12 16.5h.01\"/>","align-left":"<path d=\"M4 5.9h16.6M4 10h10.4M4 14.3h16.6M4 18.5h10.4\"/>","archive":"<rect x=\"3.5\" y=\"4.8\" width=\"17\" height=\"4.7\" rx=\"0.9\"/><path d=\"M5.4 9.5v9.4a0.9 0.9 0 0 0 0.9 0.9h11.3a0.9 0.9 0 0 0 0.9-0.9V9.5M10.1 13.3h3.8\"/>","arrow-down":"<path d=\"M12 3.2v16.7M5.7 13.7l6.3 6.3l6.3-6.3\"/>","arrow-left":"<path d=\"M20.8 12H4M10.3 5.7l-6.3 6.3l6.3 6.3\"/>","arrow-right":"<path d=\"M3.2 12h16.7M13.7 5.7l6.3 6.3l-6.3 6.3\"/>","arrow-up":"<path d=\"M12 20.8V4M5.7 10.3l6.3-6.3l6.3 6.3\"/>","arrows-h":"<path d=\"M3.8 12h16.5M7.6 8.1l-3.9 3.9l3.9 3.9M16.4 8.1l3.9 3.9l-3.9 3.9\"/>","at":"<circle cx=\"12\" cy=\"12\" r=\"3.4\"/><path d=\"M15.4 12v1.3a2.5 2.5 0 0 0 4.9 0V12a8.3 8.3 0 1 0-3.2 6.5\"/>","back":"<path d=\"M16.1 3.6l-8.4 8.4l8.4 8.4\"/>","ban":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m6 6 12 12\"/>","bell":"<path d=\"M6 14.6V9.5a6.1 6.1 0 0 1 12.2 0v5.1l1.5 2.1h-15.3ZM10 18.7a2.1 2.1 0 0 0 4 0\"/>","book":"<path d=\"M5 5.7a1.9 1.9 0 0 1 1.9-1.9h12.1v14.9H6.8a1.9 1.9 0 0 0-1.9 1.9Z\"/><path d=\"M5 18.7V5.7\"/>","book-open":"<path d=\"M12 6.3C10 4.8 7 4.3 3.5 4.9v13.2c3.5-0.6 6.5-0.1 8.5 1.4c2-1.5 5-2 8.5-1.4V4.9C17 4.3 14 4.8 12 6.3Z\"/><path d=\"M12 6.3v13.2\"/>","box":"<path d=\"M3.6 7.9L11.9 3.9l8.4 3.9v8.4L11.9 20.1l-8.4-3.9Z\"/><path d=\"M3.6 7.9L11.9 11.8l8.4-3.9M11.9 11.8v8.4M7.8 5.9l8.4 3.9\"/>","brain":"<path d=\"M9.2 4.2a2.8 2.8 0 0 0-2.8 2.8a2.8 2.8 0 0 0-1.9 4.8a2.8 2.8 0 0 0 1.9 4.8a2.8 2.8 0 0 0 5.8 1.1V5.8A1.9 1.9 0 0 0 9.2 4.2ZM14.9 4.2a2.8 2.8 0 0 1 2.8 2.8a2.8 2.8 0 0 1 1.9 4.8a2.8 2.8 0 0 1-1.9 4.8a2.8 2.8 0 0 1-5.8 1.1\"/>","branch":"<circle cx=\"6.7\" cy=\"5.6\" r=\"1.9\"/><circle cx=\"6.7\" cy=\"18.6\" r=\"1.9\"/><circle cx=\"17.9\" cy=\"7.5\" r=\"1.9\"/><path d=\"M6.7 7.5v9.3M17.9 9.3c0 5.1-6 3.7-10.2 7.9\"/>","bridge":"<path d=\"M3.5 16h17M7 19.5V5M17 19.5V5\"/><path d=\"M3.5 10c1.8 0 2.8-2.3 3.5-5c2.4 5.2 7.6 5.2 10 0c.7 2.7 1.7 5 3.5 5\"/><path d=\"M12 10.9V16\"/>","briefcase":"<rect x=\"3.5\" y=\"7.2\" width=\"17\" height=\"12.3\" rx=\"1.9\"/><path d=\"M9.2 7.2V5.7A1.4 1.4 0 0 1 10.6 4.3h2.8A1.4 1.4 0 0 1 14.8 5.7V7.2M3.5 12.3h7.1M13.4 12.3H20.5M10.6 11.4h2.8v2.4h-2.8Z\"/>","bug":"<rect x=\"7.2\" y=\"6.2\" width=\"9.6\" height=\"13.3\" rx=\"4.8\"/><path d=\"M9.3 6.5a2.7 2.7 0 0 1 5.3 0M12 10.9v8.5M7.2 12H3.5M20.5 12h-3.7M7.6 8.3L4.6 5.6M16.4 8.3L19.4 5.6M7.6 16.3L4.6 18.9M16.4 16.3L19.4 18.9\"/>","burst":"<path d=\"M11.9 3.7L13.6 7.8L17.8 6.2L16.2 10.4L20.3 12.1L16.2 13.8L17.8 18L13.6 16.4L11.9 20.4L10.2 16.4L6 18L7.6 13.8L3.6 12.1L7.6 10.4L6 6.2L10.2 7.8Z\"/>","busy":"<path d=\"M4.7 12h0M12.1 12h0M19.4 12h0\" stroke-width=\"4.2\"/>","calendar":"<rect x=\"4\" y=\"5.5\" width=\"16\" height=\"15\" rx=\"2\"/><path d=\"M4 10.5h16M9 3.5v4M15 3.5v4\"/>","camera":"<path d=\"M3.5 8h3.4l1.8-2.8h6.6L17.1 8h3.4v11.5h-17Z\"/><circle cx=\"12\" cy=\"13.3\" r=\"3.4\"/>","camera-flip":"<path d=\"M3.5 8h3.4l1.8-2.8h6.6L17.1 8h3.4v11.5h-17Z\"/><path d=\"M15 12.6a3.1 3.1 0 0 0-5.6-1.2M9 14.4a3.1 3.1 0 0 0 5.6 1.2M9.3 9.5v2h2M14.7 17.5v-2h-2\"/>","camera-off":"<path d=\"M3.7 7.9h3.3l1.7-2.7h6.4L16.9 7.9h3.3v11.2h-16.5Z\"/><circle cx=\"11.9\" cy=\"13\" r=\"3.3\"/><path d=\"M3.7 3.5l16.5 16.5\"/>","car":"<path d=\"M3.5 15.8v-4.5L6.2 5.8h11.6l2.7 5.5V15.8Z\"/><path d=\"M3.5 11.3h17M6.5 15.8v2.5M17.5 15.8v2.5M7.2 13.8h0M16.8 13.8h0\"/>","card":"<rect x=\"3.7\" y=\"5.8\" width=\"16.7\" height=\"12.3\" rx=\"1.8\"/><path d=\"M3.7 10.3h16.7M6.7 14.6h3.5\"/>","care":"<path d=\"M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z\"/><path d=\"M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1\"/>","cart":"<path d=\"M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5\"/><circle cx=\"9.1\" cy=\"18.6\" r=\"1.2\"/><circle cx=\"16.5\" cy=\"18.6\" r=\"1.2\"/>","cc":"<rect x=\"3.5\" y=\"5.4\" width=\"17\" height=\"13.2\" rx=\"2.4\"/><path d=\"M10.7 10.2a2.3 2.3 0 1 0 0 3.6M16.8 10.2a2.3 2.3 0 1 0 0 3.6\"/>","chart":"<path d=\"M3.9 3.4v16.7h16.7\"/><path d=\"M7.7 14.5l3.6-4.1l3.2 2.7l5.2-6.3\"/>","chat":"<path d=\"M3.8 4.3h16.8v11.7H8l-4.2 4.2Z\"/>","chat-off":"<path d=\"M4.2 5.1h15.7v10.9H8l-4 4Z\"/><path d=\"M3.7 3.7l16.7 16.7\"/>","check":"<path d=\"M3.7 12.1l5.4 5.4L20.4 6.1\"/>","check-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m8 12.4 2.8 2.8L16 9.6\"/>","check-double":"<path d=\"M3.6 11.7l3.6 3.6L14.6 7.7M11.1 15.2l0.9 0.9L20.4 7.7\"/>","chevron":"<path d=\"M7.9 3.6l8.4 8.4l-8.4 8.4\"/>","chevrons-left":"<path d=\"M10.9 19.3l-7.3-7.3l7.3-7.3M20.4 19.3l-7.3-7.3l7.3-7.3\"/>","chevrons-right":"<path d=\"M3.6 19.3l7.3-7.3l-7.3-7.3M13.1 19.3l7.3-7.3l-7.3-7.3\"/>","child":"<circle cx=\"12\" cy=\"5.8\" r=\"2.1\"/><path d=\"M7.9 10.5L12 9.2l4.1 1.4M12 9.2v5.6M9.2 20.4l2.8-5.6l2.8 5.6\"/>","chip":"<rect x=\"7.3\" y=\"7.3\" width=\"9.4\" height=\"9.4\" rx=\"1.4\"/><path d=\"M10.1 3.5v3.8M13.9 3.5v3.8M10.1 16.7v3.8M13.9 16.7v3.8M3.5 10.1h3.8M3.5 13.9h3.8M16.7 10.1h3.8M16.7 13.9h3.8\"/>","circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/>","city":"<path d=\"M3.5 19.7h17M5.4 19.7V8.3h4.7v11.3M10.1 19.7V3.6h5.7v16.1M15.8 19.7v-7.6h3.3v7.6M7.8 11.2h0M7.8 14.5h0M12.9 6.9h0M12.9 10.2h0M12.9 13.5h0\"/>","clapper":"<path d=\"M4 10.4h16.3v8.6a1 1 0 0 1-1 1h-14.4a1 1 0 0 1-1-1Z\"/><path d=\"M4 10.4L3.4 7.2l15.7-2.9l0.7 3.3ZM8.5 6.3l2.2 3.2M13.3 5.4l2.2 3.2\"/>","clipboard":"<rect x=\"5.7\" y=\"5\" width=\"12.6\" height=\"15.5\" rx=\"1.9\"/><path d=\"M9.1 5V3.5h5.8V5M9.1 10.8h5.8M9.1 14.7h3.9\"/>","clipboard-check":"<rect x=\"5.7\" y=\"4.9\" width=\"12.6\" height=\"15.5\" rx=\"1.9\"/><path d=\"M9.1 4.9V3.5h5.8V4.9M9.1 13.2l1.9 1.9l3.9-3.9\"/>","clock":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5V12l3 2\"/>","close":"<path d=\"M3.7 3.7l16.7 16.7M20.4 3.7L3.7 20.4\"/>","cloud":"<path d=\"M7.8 17.6h8.9a3.4 3.4 0 0 0 0.5-7A5.2 5.2 0 0 0 6.9 10.1A3.7 3.7 0 0 0 7.8 17.6Z\"/>","cloud-off":"<path d=\"M7.5 17.6h9.5a3.8 3.8 0 0 0 0.5-7.5A5.7 5.7 0 0 0 6.4 9.6A4.1 4.1 0 0 0 7.5 17.6Z\"/><path d=\"M4 3.9l16.1 16.1\"/>","code":"<path d=\"M7.8 7.8l-4.2 4.2l4.2 4.2M16.2 7.8l4.2 4.2l-4.2 4.2M14.2 4.6l-4.2 14.8\"/>","coin":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M14.5 9.2c-.5-.8-1.4-1.2-2.5-1.2-1.5 0-2.5.8-2.5 2s1 1.6 2.5 2 2.5.8 2.5 2-1 2-2.5 2c-1.1 0-2-.4-2.5-1.2M12 6.5v11\"/>","columns":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\"/><path d=\"M12 4.5v15M3.5 9h17\"/>","commit":"<circle cx=\"12\" cy=\"12\" r=\"3.4\"/><path d=\"M3.5 12h5.1M15.4 12H20.5\"/>","compass":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m15.6 8.4-2.1 5.1-5.1 2.1 2.1-5.1Z\"/>","compress":"<path d=\"M8.8 3.5v5.3H3.5M15.2 3.5v5.3h5.3M8.8 20.5v-5.3H3.5M15.2 20.5v-5.3h5.3\"/>","computer":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"11.3\" rx=\"1.9\"/><path d=\"M8.2 19.7h7.6M12 15.9v3.8\"/>","contrast":"<circle cx=\"11.7\" cy=\"12\" r=\"8.4\"/><path d=\"M11.7 3.6v16.7M11.7 7.9h6.5M11.7 12h8.4M11.7 16.2h6.5\"/>","cookie":"<path d=\"M20.6 12.3a8.4 8.4 0 1 1-8.9-8.9a3 3 0 0 0 3.9 3.5a3 3 0 0 0 4.9 5.3Z\"/><path d=\"M8.8 9.4h0M12.2 13.8h0M8.3 15.3h0M15.7 15.3h0\"/>","copy":"<rect x=\"8\" y=\"8\" width=\"12.5\" height=\"12.5\" rx=\"2.1\"/><path d=\"M16.3 8V5.8a2.1 2.1 0 0 0-2.1-2.1H5.8a2.1 2.1 0 0 0-2.1 2.1v8.4a2.1 2.1 0 0 0 2.1 2.1h2.1\"/>","couch":"<path d=\"M5.4 10.1V7.2a1.9 1.9 0 0 1 1.9-1.9h9.4a1.9 1.9 0 0 1 1.9 1.9v2.8\"/><path d=\"M3.5 11.9a1.9 1.9 0 0 1 3.8 0v1.4h9.4V11.9a1.9 1.9 0 0 1 3.8 0v4.7H3.5ZM5.4 16.7v1.9M18.6 16.7v1.9\"/>","crown":"<path d=\"M3.5 8.3L7.8 12L11.9 5.5l4.2 6.5l4.2-3.7L18.4 18.1H5.4Z\"/>","cubes":"<path d=\"M12 3.2L8.1 5.2v4.4l3.9 2l3.9-2V5.2ZM7.6 11.6L3.6 13.6v4.4l3.9 2l3.9-2V13.6ZM16.4 11.6l-3.9 2v4.4l3.9 2l3.9-2V13.6Z\"/>","database":"<ellipse cx=\"12\" cy=\"6.4\" rx=\"6.6\" ry=\"2.8\"/><path d=\"M5.4 6.4v11.3c0 1.6 2.9 2.8 6.6 2.8s6.6-1.2 6.6-2.8V6.4M5.4 12c0 1.6 2.9 2.8 6.6 2.8s6.6-1.2 6.6-2.8\"/>","dice":"<rect x=\"3.7\" y=\"3.6\" width=\"16.7\" height=\"16.7\" rx=\"3\"/><path d=\"M8.6 8.6h0M15.5 8.6h0M12.1 12h0M8.6 15.4h0M15.5 15.4h0\" stroke-width=\"2.6\"/>","dish":"<path d=\"M3.8 9.2A10.9 10.9 0 0 0 14.8 20.2Z\"/><path d=\"M9 15l5.2-5.2M14.8 3.4a5.8 5.8 0 0 1 5.8 5.8M14.8 7.5a1.8 1.8 0 0 1 1.8 1.8\"/>","dollar":"<path d=\"M15.7 8C15 6.6 13.7 5.6 12 5.6C9.6 5.6 8.3 6.9 8.3 8.5s1.6 2.5 3.7 2.8s3.7 1.3 3.7 3.1s-1.5 3-3.7 3c-1.8 0-3.2-0.9-3.7-2.4M12 3.7v16.7\"/>","donate":"<circle cx=\"11.9\" cy=\"8.4\" r=\"5.2\"/><path d=\"M11.9 6v4.3M3.7 15.6h16.5V20H3.7ZM8.3 17.7h7.2\"/>","door":"<path d=\"M13.7 4.7L6.3 3.2v16.7l7.5-1.4ZM13.7 5.1h3.3a0.9 0.9 0 0 1 0.9 0.9v14M3.5 20h16.7M11 11.6h0\"/>","down":"<path d=\"M3.6 7.9l8.4 8.4l8.4-8.4\"/>","download":"<path d=\"M12 3.2v11.5M6.8 9.5l5.2 5.2l5.2-5.2M4.7 20h14.7\"/>","drive":"<rect x=\"3.5\" y=\"12.3\" width=\"17\" height=\"6.6\" rx=\"1.9\"/><path d=\"M3.9 12.3L6.8 4.7h10.4l2.8 7.6M16.7 15.6h0M13.8 15.6h0\"/>","drop":"<path d=\"M12 3.5s5.9 6.4 5.9 10.8a5.9 5.9 0 0 1-11.8 0c0-4.4 5.9-10.8 5.9-10.8Z\"/>","ear":"<path d=\"M6.2 9.5a5.7 5.7 0 1 1 10.8 2.4c-0.9 1.9-3.1 3-3.1 5.2a3.4 3.4 0 0 1-6.5 1.6\"/><path d=\"M9.7 9.9a2.4 2.4 0 1 1 3.8 1.5\"/>","enter":"<path d=\"M13.8 3.6h4.1a2.1 2.1 0 0 1 2.1 2.1v12.5a2.1 2.1 0 0 1-2.1 2.1h-4.1M9.5 7.9l4.1 4.1l-4.1 4.1M13.8 12H3.2\"/>","eraser":"<path d=\"M14.3 4.4l5.5 5.5l-9 9H6.6l-2.6-2.6a1.5 1.5 0 0 1 0-2.1Z\"/><path d=\"M9.3 9.4l5.5 5.5M10.8 18.9H20.3\"/>","expand":"<path d=\"M3.5 8.8V3.5h5.3M20.5 8.8V3.5h-5.3M3.5 15.2v5.3h5.3M20.5 15.2v5.3h-5.3\"/>","eye":"<path d=\"M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z\"/><circle cx=\"12\" cy=\"12\" r=\"2.7\"/>","eye-off":"<path d=\"M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2\"/><path d=\"M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15\"/>","fast-forward":"<path d=\"M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z\"/>","file":"<path d=\"M6.4 3.5h7.6l3.8 3.8v13.2H6.4Z\"/><path d=\"M13.9 3.5v3.8h3.8\"/>","file-code":"<path d=\"M13.9 3.5H7.4a1.9 1.9 0 0 0-1.9 1.9v13a1.9 1.9 0 0 0 1.9 1.9h9.3a1.9 1.9 0 0 0 1.9-1.9V8.2Z\"/><path d=\"M13.9 3.5v4.6h4.6M10.1 12.4L8.3 14.3l1.9 1.9M13.9 12.4l1.9 1.9l-1.9 1.9\"/>","film":"<rect x=\"3.5\" y=\"4.4\" width=\"17\" height=\"15.1\" rx=\"1.9\"/><path d=\"M7.7 4.4v15.1M16.3 4.4v15.1M3.5 9.2h4.3M3.5 14.8h4.3M16.3 9.2H20.5M16.3 14.8H20.5\"/>","filter":"<path d=\"M3.5 6h17M6.7 12.4h10.6M9.9 18.7h4.2\"/>","finish":"<path d=\"M5.2 20.7V4\"/><rect x=\"5.2\" y=\"4.6\" width=\"13.9\" height=\"8.6\" rx=\"1\"/><path d=\"M5.2 8.8h13.9M9.6 4.6v8.6M14.3 4.6v8.6\"/>","fire":"<path d=\"M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z\"/>","fish":"<path d=\"M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z\"/><path d=\"M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01\"/>","fist":"<path d=\"M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8\"/>","flag":"<path d=\"M6.7 20.7V4M6.7 4h10.8l-2 3.9l2 3.9H6.7\"/>","flask":"<path d=\"M9.5 3.2h4.9M10 3.2V9.2L4.9 17.7a1.5 1.5 0 0 0 1.3 2.3h11.6a1.5 1.5 0 0 0 1.3-2.3L14 9.2V3.2\"/><path d=\"M7.3 14.6h9.5\"/>","focus":"<circle cx=\"12\" cy=\"12\" r=\"2.8\"/><path d=\"M3.5 9V5.9A2.4 2.4 0 0 1 5.9 3.5H9M15 3.5h3.1A2.4 2.4 0 0 1 20.5 5.9V9M20.5 15v3.1a2.4 2.4 0 0 1-2.4 2.4H15M9 20.5H5.9A2.4 2.4 0 0 1 3.5 18.1V15\"/>","folder":"<path d=\"M3.8 7.3a1.9 1.9 0 0 1 1.9-1.9h3.6l1.9 1.9h7.4a1.9 1.9 0 0 1 1.9 1.9v7.4a1.9 1.9 0 0 1-1.9 1.9H5.8a1.9 1.9 0 0 1-1.9-1.9Z\"/>","folder-tree":"<path d=\"M4.1 3.3v13.2a1 1 0 0 0 1 1H9.7M4.1 8.3H9.7\"/><path d=\"M10.2 5.3h3.1l1 1.5h5.6V10.9h-9.7ZM10.2 14.5h3.1l1 1.5h5.6V20.1h-9.7Z\"/>","food":"<path d=\"M8.2 4v6.5M6.3 4v4.2a1.9 1.9 0 0 0 3.7 0V4M8.2 10.5v10.2M17.5 20.8V4c-1.9 1.1-3 3.3-3 6.5v2.8H17.5\"/>","game":"<rect x=\"3.7\" y=\"7.2\" width=\"16.7\" height=\"9.7\" rx=\"4.4\"/><path d=\"M7.6 10.7v2.7M6.4 12h2.7M15.1 11.6h0M17.4 12.9h0\"/>","gauge":"<path d=\"M3.6 16.9a8.4 8.4 0 1 1 16.7 0\"/><path d=\"M11.9 13.2l4.1-5.7\"/><circle cx=\"11.9\" cy=\"13.2\" r=\"1.4\"/>","gavel":"<path d=\"M13.7 4.1l5.1 5.1M10.5 7.4l5.1 5.1M12.1 5.8l-5.6 5.6l5 5l5.6-5.6M3.5 19.5l5.9-5.9M13.7 19.5h6.5\"/>","gear":"<circle cx=\"12\" cy=\"12.1\" r=\"2.3\"/><path d=\"M17.6 14.3a1.3 1.3 0 0 0 0.2 1.5l0.1 0.1a1.5 1.5 0 1 1-2.4 2.4l-0.1-0.1a1.3 1.3 0 0 0-1.5-0.2a1.3 1.3 0 0 0-0.8 1.3V18.8a1.5 1.5 0 1 1-3.4 0v-0.1a1.3 1.3 0 0 0-0.9-1.3a1.3 1.3 0 0 0-1.5 0.2l-0.1 0.1a1.5 1.5 0 1 1-2.4-2.4l0.1-0.1a1.3 1.3 0 0 0 0.2-1.5a1.3 1.3 0 0 0-1.3-0.8H5.4a1.5 1.5 0 1 1 0-3.4h0.1a1.3 1.3 0 0 0 1.3-0.9a1.3 1.3 0 0 0-0.2-1.5l-0.1-0.1a1.5 1.5 0 1 1 2.4-2.4l0.1 0.1a1.3 1.3 0 0 0 1.5 0.2H9.8a1.3 1.3 0 0 0 0.8-1.3V5.4a1.5 1.5 0 1 1 3.4 0v0.1a1.3 1.3 0 0 0 0.8 1.3a1.3 1.3 0 0 0 1.5-0.2l0.1-0.1a1.5 1.5 0 1 1 2.4 2.4l-0.1 0.1a1.3 1.3 0 0 0-0.2 1.5V9.8a1.3 1.3 0 0 0 1.3 0.8H18.7a1.5 1.5 0 1 1 0 3.4h-0.1a1.3 1.3 0 0 0-1.3 0.8Z\"/>","gem":"<path d=\"M6.8 4.9h10.3L20.2 9.5l-8.3 10.3L3.6 9.5Z\"/><path d=\"M3.6 9.5h16.7M9.6 4.9L8.1 9.5l3.8 10.3M14.2 4.9L15.7 9.5l-3.8 10.3\"/>","ghost":"<path d=\"M4.7 20V10.6a7.3 7.3 0 0 1 14.7 0v9.4l-2.4-1.9l-2.5 1.9l-2.4-1.9L9.6 20l-2.5-1.9Z\"/><path d=\"M9.4 10.1h0M14.6 10.1h0\"/>","gift":"<rect x=\"4.4\" y=\"8.8\" width=\"15.1\" height=\"10.4\" rx=\"0.9\"/><path d=\"M3.5 8.8h17M12 8.8v10.4M12 8.8c-1.4-2.8-4.7-3.8-4.7-1.4S12 8.8 12 8.8s4.7-0.9 4.7-3.3S13.4 6 12 8.8\"/>","globe":"<circle cx=\"11.9\" cy=\"11.9\" r=\"8.3\"/><path d=\"M3.6 11.9h16.7M11.9 3.6c2.7 2.7 2.7 13.9 0 16.7M11.9 3.6c-2.7 2.7-2.7 13.9 0 16.7\"/>","grid":"<rect x=\"3.5\" y=\"3.5\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"13.1\" y=\"3.5\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"3.5\" y=\"13.1\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"13.1\" y=\"13.1\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/>","grip":"<path d=\"M8.3 4.5h0M15.8 4.5h0M8.3 12h0M15.8 12h0M8.3 19.5h0M15.8 19.5h0\" stroke-width=\"3.8\"/>","group":"<path d=\"M3.5 7.3V3.5h3.8M16.7 3.5h3.8v3.8M20.5 16.7v3.8h-3.8M7.3 20.5H3.5v-3.8\"/><rect x=\"7.3\" y=\"7.3\" width=\"5.7\" height=\"4.7\" rx=\"0.9\"/><rect x=\"11.1\" y=\"12\" width=\"5.7\" height=\"4.7\" rx=\"0.9\"/>","hammer":"<path d=\"M13.1 3.7L19.3 9.9l-2.7 2.7l-6.2-6.2Z\"/><path d=\"M13.6 9.4L5 18.1a1.3 1.3 0 0 0 1.9 1.9l8.6-8.6\"/>","hand":"<path d=\"M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6\"/>","handshake":"<path d=\"M3.6 9.9v5.3M20.3 9.9v5.3\"/><path d=\"M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2\"/><path d=\"M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2\"/>","hash":"<path d=\"M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17\"/>","heading":"<path d=\"M5.6 3.5v17M18.4 3.5v17M5.6 12h12.7M3.5 3.5h4.2M16.2 3.5h4.2M3.5 20.5h4.2M16.2 20.5h4.2\"/>","headphones":"<path d=\"M4.4 13.9v-2.8a7.5 7.5 0 0 1 14.9 0v2.8\"/><rect x=\"3.5\" y=\"13\" width=\"4.2\" height=\"6\" rx=\"1.4\"/><rect x=\"16.1\" y=\"13\" width=\"4.2\" height=\"6\" rx=\"1.4\"/>","heart":"<path d=\"M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z\"/>","heart-broken":"<path d=\"M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z\"/><path d=\"M11.9 5.8L10 9.8l3.5 2.3l-1.6 3.9\"/>","heart-pulse":"<path d=\"M19 12.3c-1.7 3.6-7 6.7-7 6.7s-5.3-3.1-7-6.7M4.3 9.7A4.3 4.3 0 0 1 12 7.4a4.3 4.3 0 0 1 7.7 2.2\"/><path d=\"M3.5 11.9h4l1.3-2.2l2.2 4.5l1.8-3.1h7.6\"/>","help":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M9.6 9.3a2.5 2.5 0 0 1 4.8.9c0 1.7-2.4 2.2-2.4 3.8M12 17h.01\"/>","history":"<path d=\"M3.8 12.1a8.3 8.3 0 1 0 2.5-5.9L3.8 8.5M3.8 4.2v4.2h4.2\"/><path d=\"M12 7.9v4.3l3.1 1.9\"/>","home":"<path d=\"M3.6 10.6L12 3.3l8.4 7.3v8.4a1 1 0 0 1-1 1h-4.2v-6.3h-6.3v6.3H4.7a1 1 0 0 1-1-1Z\"/>","hot-tub":"<circle cx=\"8.6\" cy=\"5.8\" r=\"1.7\"/><path d=\"M3.8 11.9h16.6v3.3a4.2 4.2 0 0 1-4.2 4.2h-8.4A4.2 4.2 0 0 1 3.8 15.2ZM6.8 11.9v-1.4A2.4 2.4 0 0 1 8.9 8.2H9.4M13.7 9.5c0.8-0.9-0.8-1.9 0-2.8M17.3 9.5c0.8-0.9-0.8-1.9 0-2.8\"/>","hourglass":"<path d=\"M6 3.5h12M6 20.5h12M7.5 3.5c0 4.5 4.5 5.5 4.5 8.5s-4.5 4-4.5 8.5M16.5 3.5c0 4.5-4.5 5.5-4.5 8.5s4.5 4 4.5 8.5\"/>","id":"<rect x=\"3.7\" y=\"5.5\" width=\"16.7\" height=\"13\" rx=\"1.9\"/><circle cx=\"9.2\" cy=\"11\" r=\"1.9\"/><path d=\"M6.4 15.6c0.5-1.4 1.6-2.2 2.8-2.2s2.4 0.8 2.8 2.2M14.8 10.1h2.8M14.8 13.4h2.8\"/>","idea":"<path d=\"M9.1 17.6h5.8M10.1 20.5h3.9M8.7 14.3A5.8 5.8 0 1 1 15.2 14.3c-0.7 0.6-1.4 1.5-1.4 2.3h-3.9c0-0.9-0.7-1.7-1.4-2.3Z\"/>","image":"<rect x=\"3.5\" y=\"5.4\" width=\"16.7\" height=\"13\" rx=\"2.8\"/><circle cx=\"9.1\" cy=\"10\" r=\"1.5\"/><path d=\"M20.3 15.6l-4.7-4.7l-7.4 7.4\"/>","inbox":"<path d=\"M3.5 12.7L5.9 4.8h12.1l2.4 7.9V17.8a0.9 0.9 0 0 1-0.9 0.9H4.4a0.9 0.9 0 0 1-0.9-0.9ZM3.5 12.7h4.6l1.4 2.4h4.6l1.4-2.4h4.6\"/>","infinity":"<path d=\"M12 12c-1.8-2.4-3.3-3.6-4.9-3.6a3.6 3.6 0 0 0 0 7.2c1.6 0 3.1-1.2 4.9-3.6Zm0 0c1.8 2.4 3.3 3.6 4.9 3.6a3.6 3.6 0 0 0 0-7.2c-1.6 0-3.1 1.2-4.9 3.6Z\"/>","info":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 11v5M12 8h.01\"/>","invite":"<circle cx=\"9.2\" cy=\"8.2\" r=\"2.9\"/><path d=\"M3.8 18.8c0-3 2.4-4.8 5.3-4.8s5.3 2 5.3 4.8M17.9 8.2v5.3M15.3 10.9h5.3\"/>","key":"<circle cx=\"8.1\" cy=\"15.9\" r=\"4.3\"/><path d=\"M11.1 12.9l9.4-9.4M16.8 7.3l3.2 3.2M14.6 9.4l2.2 2.2\"/>","keyboard":"<rect x=\"3.5\" y=\"6.6\" width=\"17\" height=\"10.7\" rx=\"1.8\"/><path d=\"M6.6 10.2h0M9.3 10.2h0M12 10.2h0M14.7 10.2h0M17.4 10.2h0M8.4 13.8h7.2\"/>","language":"<path d=\"M4.6 5.4h8.4M8.8 3.6v1.9M6.4 5.4c0.5 2.8 2.3 5.6 5.6 7M11.1 5.4c-0.6 3.2-2.6 6.3-6 7.9M12 20.3l3.7-8.4l3.7 8.4M13.3 17.5h4.8\"/>","laugh":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 13.5h8a4 4 0 0 1-8 0ZM7.5 8.6l2.2 1.2-2.2 1.2M16.5 8.6l-2.2 1.2 2.2 1.2\"/>","layers":"<path d=\"M12 5.4l8.3 4.6l-8.3 4.6l-8.3-4.6Z\"/><path d=\"M3.8 14l8.3 4.6l8.3-4.6\"/>","leaf":"<path d=\"M3.8 20.1c0-9.5 5.6-15.2 16.7-16.7c-1 11.1-6.7 16.7-16.7 16.7ZM3.8 20.1l8.9-8.9\"/>","leave":"<path d=\"M12.7 3.5h4.2a2.1 2.1 0 0 1 2.1 2.1v12.7a2.1 2.1 0 0 1-2.1 2.1h-4.2M8.5 16.2l-4.2-4.2l4.2-4.2M4.2 12h10.6\"/>","lifebuoy":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"3.8\"/><path d=\"M6 6l3.4 3.4M14.6 14.7l3.4 3.4M18 6l-3.4 3.4M9.4 14.7l-3.4 3.4\"/>","link":"<path d=\"M9.9 14.1a4.3 4.3 0 0 0 6.1 0l3.2-3.2a4.3 4.3 0 0 0-6.1-6.1l-1.1 1.1M14.1 9.9a4.3 4.3 0 0 0-6.1 0l-3.2 3.2a4.3 4.3 0 0 0 6.1 6.1l1.1-1.1\"/>","link-off":"<path d=\"M10 13.8a4 4 0 0 0 5.6 0l2.9-2.9a4 4 0 0 0-5.6-5.6l-1 1M13.8 10a4 4 0 0 0-5.6 0l-2.9 2.9a4 4 0 0 0 5.6 5.6l1-1\"/><path d=\"M3.6 3.6l16.7 16.7\"/>","list":"<path d=\"M8.2 5.5h11.9M8.2 12h11.9M8.2 18.5h11.9M3.3 5.5h0M3.3 12h0M3.3 18.5h0\"/>","list-ordered":"<path d=\"M9.7 6.8h10.8M9.7 12.8h10.8M9.7 18.8h10.8M3.8 5.4L4.7 5v4.4M3.8 9.3h2M3.8 13.7a1 1 0 0 1 2 0.3c0 1.1-2 1.7-2 2.7h2.2\"/>","live":"<circle cx=\"12\" cy=\"11.8\" r=\"2\"/><path d=\"M8.6 8.4a4.9 4.9 0 0 0 0 7.1M15.4 8.4a4.9 4.9 0 0 1 0 7.1M6.3 6.1a8.1 8.1 0 0 0 0 11.9M17.7 6.1a8.1 8.1 0 0 1 0 11.9\"/>","lock":"<rect x=\"4.7\" y=\"10.7\" width=\"14.5\" height=\"9.4\" rx=\"2.1\"/><path d=\"M7.8 10.7V7.5a4 4 0 0 1 8.3 0v3.2\"/>","lungs":"<path d=\"M12 3.5v8M12 9.4l-3 2.1M12 9.4l3 2.1M8.4 6.5C5.6 6.5 3.5 10.4 3.5 15.2c0 2.8 1.1 4.8 3.2 4.8s2.7-2.1 2.7-4.8V8.3M15.6 6.5C18.4 6.5 20.5 10.4 20.5 15.2c0 2.8-1.1 4.8-3.2 4.8s-2.7-2.1-2.7-4.8V8.3\"/>","mail":"<rect x=\"3.5\" y=\"5.5\" width=\"17\" height=\"13.2\" rx=\"1.9\"/><path d=\"M4.4 7.4l7.6 5.7l7.6-5.7\"/>","map":"<path d=\"M9.1 4.6L3.5 6.5v13l5.6-1.9l5.6 1.9l5.6-1.9V4.6l-5.6 1.9Z\"/><path d=\"M9.1 4.6v13M14.7 6.5v13\"/>","mask":"<path d=\"M3.5 7c3 1.3 5.8 1.8 8.5 1.8S17.5 8.3 20.5 7c0 6-2.5 10-5 10-1.4 0-2-1.5-3.5-1.5S9.9 17 8.5 17c-2.5 0-5-4-5-10Z\"/><path d=\"M7.5 11.5h2M14.5 11.5h2\"/>","medical":"<rect x=\"3.5\" y=\"7.1\" width=\"17\" height=\"12.3\" rx=\"1.9\"/><path d=\"M9.2 7.1V5.2a0.9 0.9 0 0 1 0.9-0.9h3.8a0.9 0.9 0 0 1 0.9 0.9v1.9M12 10.4v5.7M9.2 13.3h5.7\"/>","megaphone":"<path d=\"M3.6 9.5v4a1 1 0 0 0 1 1H7.1l9 4.5v-15L7.1 8.5H4.5a1 1 0 0 0-1 1Z\"/><path d=\"M7.1 14.5l1.3 5h2.4L10.1 15.1M19.1 9a3.2 3.2 0 0 1 0 5\"/>","members":"<circle cx=\"9.2\" cy=\"7.9\" r=\"3\"/><path d=\"M3.6 19.1c0-3.1 2.6-5.1 5.6-5.1s5.6 2.1 5.6 5.1M15.7 5a3 3 0 0 1 0 5.9M17.6 14.3c1.8 0.6 2.8 2.3 2.8 4.8\"/>","menu":"<path d=\"M3.5 6.7h17M3.5 12h17M3.5 17.3h17\"/>","mic":"<rect x=\"9.2\" y=\"3.5\" width=\"5.7\" height=\"10.4\" rx=\"2.8\"/><path d=\"M5.4 11.1a6.6 6.6 0 0 0 13.2 0M12 17.7v2.8\"/>","mic-off":"<rect x=\"9.2\" y=\"3.6\" width=\"5.7\" height=\"10.4\" rx=\"2.8\"/><path d=\"M5.5 11.1a6.6 6.6 0 0 0 11 5M18.7 11.1c0 0.8-0.1 1.5-0.4 2.2M12.1 17.7v2.8M4.5 4.5l15.1 15.1\"/>","minus":"<path d=\"M3.5 12h17\"/>","minus-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 12h8\"/>","money":"<rect x=\"3.5\" y=\"6.6\" width=\"17\" height=\"10.7\" rx=\"1.8\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><path d=\"M6.6 9.8v0M17.4 14.2v0\"/>","moon":"<path d=\"M20.5 14.6A8.6 8.6 0 1 1 9.4 3.5a6.9 6.9 0 0 0 11.2 11.2Z\"/>","more":"<circle cx=\"5.2\" cy=\"12\" r=\"1.6\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/><circle cx=\"18.8\" cy=\"12\" r=\"1.6\"/>","mountain":"<path d=\"M3.6 17.5L9.3 6l3.7 6.3L15.5 9.1L20.3 17.5Z\"/>","move":"<path d=\"M11.9 3.6v16.7M3.6 11.9h16.7M9 6.5l2.9-2.9l2.9 2.9M9 17.3l2.9 2.9l2.9-2.9M6.5 9l-2.9 2.9l2.9 2.9M17.3 9l2.9 2.9l-2.9 2.9\"/>","mug":"<path d=\"M4.8 9.1h11v7a4 4 0 0 1-4 4h-3a4 4 0 0 1-4-4Z\"/><path d=\"M15.8 10.5H17.3a2.5 2.5 0 0 1 0 5h-1.5M8.3 3.5c-0.8 1 0.8 2 0 3M11.8 3.5c-0.8 1 0.8 2 0 3\"/>","music":"<path d=\"M8.6 17.7V5.6l11.1-2.1v12.2\"/><circle cx=\"6\" cy=\"17.7\" r=\"2.6\"/><circle cx=\"17.2\" cy=\"15.7\" r=\"2.6\"/>","mute":"<path d=\"M3.9 9.4h3.6L12.2 5.8v12.4l-4.6-3.6H3.9Z\"/><path d=\"M16.3 9.9l4.1 4.1M20.5 9.9l-4.1 4.1\"/>","news":"<path d=\"M3.5 3.5h13.8v14.9a2.1 2.1 0 0 0 2.1 2.1H5.6a2.1 2.1 0 0 1-2.1-2.1Z\"/><path d=\"M17.3 7.7h3.2v10.6a2.1 2.1 0 0 1-2.1 2.1M7.2 7.7h6.4M7.2 11.5h6.4M7.2 15.2h3.7\"/>","nodes":"<circle cx=\"12\" cy=\"5.4\" r=\"2.1\"/><circle cx=\"5.8\" cy=\"17.9\" r=\"2.1\"/><circle cx=\"18.2\" cy=\"17.9\" r=\"2.1\"/><path d=\"M11 7.4L6.8 15.9M13 7.4l4.3 8.6M7.9 17.9h8.3\"/>","open":"<path d=\"M14 3.8h6.3v6.3M20.2 3.8l-9.4 9.4M18.2 14.2v4.2a2.1 2.1 0 0 1-2.1 2.1H5.6a2.1 2.1 0 0 1-2.1-2.1V7.9a2.1 2.1 0 0 1 2.1-2.1h4.2\"/>","palette":"<path d=\"M12.2 3.8a8.4 8.4 0 1 0 0 16.8c1.1 0 1.7-0.9 1.7-1.6c0-1.1-0.9-1.5-0.9-2.6s0.9-1.6 1.9-1.6H16.9a3.7 3.7 0 0 0 3.7-3.7C20.6 7.2 16.9 3.8 12.2 3.8Z\"/><circle cx=\"8\" cy=\"11.4\" r=\"1.1\"/><circle cx=\"10.3\" cy=\"7.9\" r=\"1.1\"/><circle cx=\"14.5\" cy=\"7.9\" r=\"1.1\"/>","parking":"<rect x=\"3.7\" y=\"3.7\" width=\"16.7\" height=\"16.7\" rx=\"3\"/><path d=\"M9.6 17V7.2h3.4a3 3 0 0 1 0 5.9H9.6\"/>","pause":"<path d=\"M7.1 3.5v17M16.9 3.5v17\"/>","paw":"<path d=\"M7.8 18.5c0-3 1.9-5.3 4.2-5.3s4.2 2.3 4.2 5.3c0 1.4-1.1 2.1-2.1 2.1c-0.8 0-1.4-0.5-2.1-0.5s-1.3 0.5-2.1 0.5c-1.1 0-2.1-0.7-2.1-2.1Z\"/><circle cx=\"5.4\" cy=\"10.6\" r=\"1.9\"/><circle cx=\"9.2\" cy=\"5.7\" r=\"1.9\"/><circle cx=\"14.8\" cy=\"5.7\" r=\"1.9\"/><circle cx=\"18.6\" cy=\"10.6\" r=\"1.9\"/>","pencil":"<path d=\"M11.9 19.6h8.4M16.1 4.2a2 2 0 0 1 2.8 2.8L7.2 18.7l-3.7 0.9l0.9-3.7Z\"/>","phone":"<path d=\"M5.7 3.4h3.9l2 4.9l-2.5 1.5a10.8 10.8 0 0 0 4.9 4.9L15.6 12.3l4.9 2v3.9a2 2 0 0 1-2 2A15.8 15.8 0 0 1 3.8 5.4a2 2 0 0 1 2-2\"/>","phone-off":"<path d=\"M5.6 4.1h3.7l1.9 4.7l-2.4 1.4a10.3 10.3 0 0 0 4.7 4.7L15.1 12.5l4.7 1.9v3.7a1.9 1.9 0 0 1-1.9 1.9A15.1 15.1 0 0 1 3.8 5.9a1.9 1.9 0 0 1 1.9-1.9\"/><path d=\"M4.3 3.6l16.1 16.1\"/>","piggy":"<path d=\"M3.5 11.4c0-3.2 3.3-5.7 7.7-5.7c1.3 0 2.4 0.2 3.4 0.6L17.4 4.7v3.3c0.8 0.7 1.4 1.6 1.6 2.5h1.4v3.4H18.8c-0.5 1-1.3 1.7-2.3 2.3V19.1h-2.9v-1.9c-0.8 0.2-1.7 0.3-2.5 0.3c-0.8 0-1.6-0.1-2.3-0.3v1.9h-2.9v-2.9C4.4 15.1 3.5 13.4 3.5 11.4Z\"/><path d=\"M14.9 10.1h0M8.7 8.1h2.9\"/>","pin":"<path d=\"M12 20.7s-6.2-5.4-6.2-10.5a6.2 6.2 0 0 1 12.4 0C18.2 15.2 12 20.7 12 20.7Z\"/><circle cx=\"12\" cy=\"10\" r=\"2.3\"/>","plane":"<path d=\"M20 4L3.5 10.8l6.6 3.1l3.1 6.6Z\"/><path d=\"M10.1 13.9l9.9-9.9\"/>","play":"<path d=\"M5.6 3.6v16.9l13.4-8.5Z\"/>","plug":"<path d=\"M9.2 4v4.6M14.8 4v4.6M6.9 8.7h10.2v2.8a5.1 5.1 0 0 1-10.2 0ZM12 16.6V20.7\"/>","plus":"<path d=\"M12 3.5v17M3.5 12h17\"/>","plus-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 8v8M8 12h8\"/>","print":"<path d=\"M7.1 8.9V3.5h9.9V8.9\"/><rect x=\"3.6\" y=\"8.9\" width=\"16.7\" height=\"7.9\" rx=\"2\"/><path d=\"M7.1 13.8h9.9v6.4H7.1ZM16.4 11.9h0\"/>","puzzle":"<path d=\"M3.8 7h4.2a2.6 2.6 0 1 1 4.8 0h4.2v4.2a2.6 2.6 0 1 1 0 4.8v4.2h-4.2a2.6 2.6 0 1 0-4.8 0H3.8v-4.2a2.6 2.6 0 1 0 0-4.8Z\"/>","quote":"<path d=\"M9.8 6.2C5.8 7.2 3.6 10 3.6 13.9v3.3h5.6v-5.6h-5.6M20.3 6.2c-3.9 1.1-6.1 3.9-6.1 7.8v3.3h5.6v-5.6h-5.6\"/>","radio":"<rect x=\"3.5\" y=\"8.3\" width=\"16.8\" height=\"11.3\" rx=\"1.9\"/><path d=\"M7.3 8.3L16.7 3.9\"/><circle cx=\"15.3\" cy=\"14\" r=\"2.4\"/><path d=\"M6.8 12.4h3.8M6.8 15.4h3.8\"/>","ranking":"<path d=\"M3.5 19.9h17M4.5 19.9V13.8h4.7M9.2 19.9V10h5.7v9.9M14.9 19.9V15.7h4.7v4.3\"/><path d=\"M12 3.4l0.9 1.7l1.9 0.3l-1.4 1.3l0.3 1.9L12 7.7l-1.7 0.9l0.3-1.9L9.3 5.4l1.9-0.3Z\"/>","record":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>","recycle":"<path d=\"M7.8 18.2H5.7a1.2 1.2 0 0 1-1-1.8l2.3-3.9M10 5.5l0.9-1.5a1.2 1.2 0 0 1 2.1 0l2.3 3.9M17.7 12.4l1.6 2.7a1.2 1.2 0 0 1-1 1.8h-4.5\"/><path d=\"M11.1 16.5l1.8 1.8l-1.8 1.8M4.5 10.4l2.4-0.7l0.7 2.5M17.2 6.1l-0.7 2.5l-2.5-0.7\"/>","reply":"<path d=\"M9.2 5.8L4 11l5.1 5.1M4 11h10.3a6.2 6.2 0 0 1 6.2 6.2v1\"/>","restroom":"<circle cx=\"7.1\" cy=\"5.3\" r=\"1.7\"/><circle cx=\"16.4\" cy=\"5.3\" r=\"1.7\"/><path d=\"M11.7 3.6v16.7M5.6 20.3v-5.1H4.7V10.6A1.4 1.4 0 0 1 6.1 9.2h1.9a1.4 1.4 0 0 1 1.4 1.4v4.6H8.5V20.3M15.5 20.3v-3.7h-2.4l1.9-6.1a0.9 0.9 0 0 1 0.9-0.9h0.9a0.9 0.9 0 0 1 0.9 0.9l1.9 6.1H17.3v3.7\"/>","retry":"<path d=\"M3.7 12a8.2 8.2 0 0 1 14.1-5.9L20.2 8.4M20.2 3.8v4.6h-4.6M20.2 12a8.2 8.2 0 0 1-14.1 5.9L3.7 15.6M3.7 20.3v-4.6h4.6\"/>","rewind":"<path d=\"M20 6.4v11.2L12.4 12ZM10.9 6.4v11.2L3.3 12Z\"/>","road":"<path d=\"M8.2 3.5L4.4 20.5M15.8 3.5l3.8 17M12 4.4v2.4M12 10.6v2.8M12 17.2V19.6\"/>","robot":"<rect x=\"5.4\" y=\"8.3\" width=\"13.2\" height=\"10.4\" rx=\"2.8\"/><path d=\"M12 4.6v3.8M9.2 13.1h0M14.8 13.1h0M9.6 16.4h4.7M3.5 13.1v1.9M20.5 13.1v1.9\"/>","rocket":"<path d=\"M11.8 15.7L8.4 12.3C9.9 6.9 13.8 3.9 20.2 3.9C20.2 10.3 17.3 14.2 11.8 15.7ZM8.4 12.3L4.9 11.8L7.4 8.3h3.9M11.8 15.7l0.5 3.4l3.4-2.5v-3.9M6.4 17.7c-1.5 0-3 1.5-3 3c1.5 0 3-1.5 3-3Z\"/><circle cx=\"15.3\" cy=\"8.8\" r=\"1.5\"/>","route":"<circle cx=\"6\" cy=\"18\" r=\"2.4\"/><circle cx=\"18\" cy=\"6\" r=\"2.4\"/><path d=\"M8.4 18H16a3 3 0 0 0 0-6H8a3 3 0 0 1 0-6h7.6\"/>","rss":"<path d=\"M4 3.5a16.5 16.5 0 0 1 16.5 16.5M4 10.4A9.6 9.6 0 0 1 13.6 20.1\"/><path d=\"M4.6 19.4h0\" stroke-width=\"3.9\"/>","save":"<path d=\"M4.7 3.5h11.5l3.2 3.2v13.6H4.7Z\"/><path d=\"M7.8 3.5v5.2h7.3V3.5M7.8 20.2v-6.3h8.4v6.3\"/>","scale":"<path d=\"M12 4.3V19.5M8.5 19.5h6.9M5.5 7.4h13M12 4.3h0M3.7 13.4L5.9 7.8L8.1 13.4M15.9 13.4L18.1 7.8l2.2 5.6M3.7 13.4a2.2 2.2 0 0 0 4.3 0M15.9 13.4a2.2 2.2 0 0 0 4.3 0\"/>","scissors":"<circle cx=\"6\" cy=\"7\" r=\"2.6\"/><circle cx=\"6\" cy=\"17\" r=\"2.6\"/><path d=\"M8.2 8.6 20 18M8.2 15.4 20 6\"/>","scroll":"<path d=\"M8.3 3.8h10.1a1.9 1.9 0 0 1 1.9 1.9v1.5H17M8.3 3.8a1.9 1.9 0 0 0-1.9 1.9v11.7a2.9 2.9 0 0 1-2.9 2.9h10.7a2.9 2.9 0 0 0 2.9-2.9v-11.7a1.9 1.9 0 0 0-1.9-1.9M10.2 9.2h3.9M10.2 13h3.9\"/>","search":"<circle cx=\"10.6\" cy=\"10.6\" r=\"7\"/><path d=\"M20.4 20.4l-4.5-4.5\"/>","seedling":"<path d=\"M12 20.8v-9.8M12 11C12 6.7 9.3 4 4.4 4c0 4.3 2.7 7 7.6 7ZM12 13.7c0-4.3 2.7-7 7.6-7c0 4.3-2.7 7-7.6 7Z\"/>","server":"<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"7.4\" rx=\"2.1\"/><rect x=\"3.5\" y=\"13.1\" width=\"17\" height=\"7.4\" rx=\"2.1\"/><path d=\"M7.8 7.2h0M7.8 16.8h0\"/>","shapes":"<circle cx=\"7.5\" cy=\"7.7\" r=\"3.4\"/><path d=\"M16.4 3.7l3.9 6.9h-7.9ZM13.9 14.1h5.9v5.9h-5.9ZM3.6 20l3.4-5.9l3.4 5.9Z\"/>","share":"<path d=\"M12 15.2V3.3M7.4 8.1L12 3.3L16.6 8.1M4.9 12.9v6.1a1 1 0 0 0 1 1h12.2a1 1 0 0 0 1-1v-6.1\"/>","shelter":"<path d=\"M3.7 10.5L12 4l8.3 6.5M5.9 9.2v10.4M18.1 9.2v10.4\"/><circle cx=\"12\" cy=\"11\" r=\"1.6\"/><path d=\"M9.8 19.6v-3.9a2.2 2.2 0 0 1 4.3 0V19.6\"/>","shield":"<path d=\"M12 3.7L5.5 6.6v5.6c0 4.1 2.8 7.1 6.5 8.4c3.7-1.3 6.5-4.2 6.5-8.4V6.6Z\"/>","shirt":"<path d=\"M8.2 3.8L3.7 6.6l1.8 3.8l1.8-0.9v11.2h9.3V9.4l1.8 0.9l1.8-3.8l-4.7-2.7c-0.5 1.4-1.8 2.3-3.8 2.3S8.8 5.1 8.2 3.8Z\"/>","signature":"<path d=\"M3.9 14c2.4 0 3.3-8.4 5.6-8.4c1.4 0 0.9 5.6 2.4 5.6c0.9 0 1.4-2.4 2.4-2.4s0.8 1.9 1.9 1.9c0.8 0 1.4-0.6 1.9-1.1M3.9 17.8h16.7\"/>","skip":"<path d=\"M4.8 3.5l10.8 8.4l-10.8 8.4Z\"/><path d=\"M19.7 3.5v16.7\"/>","skull":"<path d=\"M12 3.7a6.5 6.5 0 0 0-6.5 6.5c0 2.2 1 3.6 2.4 4.6v2.8h8.4v-2.8c1.3-1 2.4-2.6 2.4-4.6a6.5 6.5 0 0 0-6.5-6.5Z\"/><circle cx=\"9.6\" cy=\"10.7\" r=\"1.3\"/><circle cx=\"14.4\" cy=\"10.7\" r=\"1.3\"/><path d=\"M10.6 17.7v2.8M13.4 17.7v2.8\"/>","slash":"<path d=\"M3.6 3.6l16.7 16.7\"/>","sliders":"<path d=\"M3.5 6.8h10M18.7 6.8H20.3M3.5 17.2h3.6M12.4 17.2H20.3\"/><circle cx=\"16.2\" cy=\"6.8\" r=\"2.4\"/><circle cx=\"9.8\" cy=\"17.2\" r=\"2.4\"/>","smile":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8.5 14a4 4 0 0 0 7 0M9 9.5h.01M15 9.5h.01\"/>","snow":"<path d=\"M12 3.5v17M4.6 7.8l14.7 8.5M4.6 16.3l14.7-8.5M9.6 4.9L12 7.3l2.4-2.4M9.6 19.1L12 16.7l2.4 2.4\"/>","sort":"<path d=\"M3.5 5.8h9.2M3.5 12h6.2M3.5 18.2h3M17.5 4.8v14.4M14.3 16.2l3 3l3-3\"/>","sort-asc":"<path d=\"M3.4 5.4h3M3.4 11.6h6.3M3.4 17.9h9.3M17.5 4.3v14.6M14.3 16l3 3l3-3\"/>","spark":"<path d=\"M10.4 3.6l1.7 4.8L17 10.1l-4.8 1.7L10.4 16.7l-1.7-4.8L3.9 10.1l4.8-1.7ZM17 14.8l0.8 2.1L19.8 17.6l-2.1 0.8L17 20.3l-0.8-2.1L14.3 17.6l2.1-0.8Z\"/>","square":"<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"2.7\"/>","star":"<path d=\"M12 4l2.6 5.3l5.7 0.6l-4.3 3.9l1.2 5.7L12 16.8l-5.2 2.9l1.2-5.7l-4.3-3.9l5.7-0.6Z\"/>","steps":"<path d=\"M9.7 5.7h11M9.7 11.8h11M9.7 17.8h11\"/><path d=\"M3.7 5.7l1.5 1.5L7.7 4.8M3.7 11.8l1.5 1.5L7.7 10.8M3.7 17.8l1.5 1.5L7.7 16.8\"/>","stop":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m8.5 8.5 7 7\"/>","store":"<path d=\"M3.7 8.8L5.3 3.7h13.4L20.3 8.8M3.7 8.8h16.5v1.6a2.8 2.8 0 0 1-5.4 0a2.8 2.8 0 0 1-5.6 0A2.8 2.8 0 0 1 3.7 10.4ZM4.8 12.9v7.2h14.5v-7.2M9.9 20.1v-4.1h4.1v4.1\"/>","storm":"<path d=\"M7.8 16a3.8 3.8 0 1 1 0.8-7.4A4.5 4.5 0 0 1 17.4 10.5a3.1 3.1 0 0 1-0.4 6.2\"/><path d=\"M12.9 12.2l-2.1 3.3h2.5L11.3 18.9\"/>","sun":"<circle cx=\"11.9\" cy=\"11.9\" r=\"3.4\"/><path d=\"M11.9 3.5v1.8M11.9 18.6v1.8M6 6l1.2 1.2M16.7 16.7l1.2 1.2M3.5 11.9h1.8M18.6 11.9h1.8M6 17.9l1.2-1.2M16.7 7.2l1.2-1.2\"/>","swap":"<path d=\"M3.5 7.8h14.9l-3.7-3.7M20.5 16.3H5.6l3.7 3.7\"/>","sword":"<path d=\"M20.3 3.7v3.7L10.4 17.3L6.7 13.6L16.7 3.7Z\"/><path d=\"M5.2 12L12 18.8M8.3 15.7L3.6 20.4\"/>","table":"<rect x=\"3.5\" y=\"4.3\" width=\"17\" height=\"15.1\" rx=\"1.9\"/><path d=\"M3.5 9.5h17M3.5 14.7h17M9.2 9.5V19.4M14.8 9.5V19.4\"/>","tack":"<path d=\"M9.3 4h5.6l-0.9 4.6l2.8 2.8H7.4l2.8-2.8ZM12 11.4v9.3\"/>","tag":"<path d=\"M3.8 11.2V3.8h7.4l9.3 9.3l-7.4 7.4Z\"/><circle cx=\"8\" cy=\"8\" r=\"1.2\"/>","target":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\"/>","tent":"<path d=\"M3.5 18.4h17M12 4.9L4.8 18.4M12 4.9l7.2 13.4M12 12.5L9.3 18.4M12 12.5l2.7 5.8\"/>","terminal":"<rect x=\"3.7\" y=\"4.6\" width=\"16.7\" height=\"14.9\" rx=\"1.9\"/><path d=\"M7.4 9.2l2.8 2.8l-2.8 2.8M12.9 14.8h3.7\"/>","text":"<path d=\"M5.2 20.3L10.9 3.6h2.1l5.7 16.7M7.4 14h9.2\"/>","thumbs-up":"<path d=\"M7.3 10.4v9.6H4.8a1 1 0 0 1-1-1v-7.6a1 1 0 0 1 1-1Z\"/><path d=\"M7.3 10.4L10.9 3.3a2.2 2.2 0 0 1 2.5 2.6L12.7 9.4H18.5a2 2 0 0 1 2 2.4l-1.3 6.6a2 2 0 0 1-2 1.6H7.3\"/>","ticket":"<path d=\"M3.6 7.4h16.7v2.8a1.9 1.9 0 0 0 0 3.7v2.8H3.6v-2.8a1.9 1.9 0 0 0 0-3.7Z\"/><path d=\"M13.8 7.4v9.3\"/>","timeline":"<path d=\"M3.5 12h0.9M8.2 12h1.9M13.9 12h1.9M19.6 12h0.9\"/><circle cx=\"6.3\" cy=\"12\" r=\"1.9\"/><circle cx=\"12\" cy=\"12\" r=\"1.9\"/><circle cx=\"17.7\" cy=\"12\" r=\"1.9\"/><path d=\"M6.3 10.1V5.9M12 13.9v4.3M17.7 10.1V5.9\"/>","toolbox":"<rect x=\"3.5\" y=\"8.1\" width=\"17\" height=\"11.3\" rx=\"1.9\"/><path d=\"M9.2 8.1V5.8A1.4 1.4 0 0 1 10.6 4.3h2.8A1.4 1.4 0 0 1 14.8 5.8V8.1M3.5 12.8h17M8.2 11.4v2.8M15.8 11.4v2.8\"/>","train":"<rect x=\"6.4\" y=\"3.8\" width=\"11.2\" height=\"12.1\" rx=\"2.8\"/><path d=\"M6.4 10.3h11.2M9.2 13.1h0M14.8 13.1h0M8.7 20.5l1.9-3.3M15.3 20.5l-1.9-3.3\"/>","trash":"<path d=\"M4.1 6.7h15.8M10 10.6v5.9M14 10.6v5.9M6.1 6.7l1 11.8a2 2 0 0 0 2 2h5.9a2 2 0 0 0 2-2l1-11.8M9 6.7V3.7h5.9v3\"/>","tree":"<path d=\"M12.1 3.6L7 10.6h2.8L5.6 16.6h13l-4.2-6h2.8ZM12.1 16.6v3.7\"/>","trend-down":"<path d=\"M3.2 7.2l5.6 5.6l3.8-3.8l7.4 7.4\"/><path d=\"M14.4 16.6h5.6v-5.6\"/>","trend-up":"<path d=\"M3.2 16.8L8.8 11.3l3.8 3.8l7.4-7.4\"/><path d=\"M14.4 7.4h5.6v5.6\"/>","trophy":"<path d=\"M7.9 4h8.4v5.2a4.1 4.1 0 0 1-8.4 0ZM7.9 6.1H4.7a3.2 3.2 0 0 0 3.2 4.1M16.2 6.1h3.2a3.2 3.2 0 0 1-3.2 4.1M12 13.4v4.1M7.9 20.8h8.4\"/>","tv":"<rect x=\"3.5\" y=\"7.8\" width=\"17\" height=\"11.6\" rx=\"1.8\"/><path d=\"M8.4 4.3l3.6 3.6l3.6-3.6\"/>","umbrella":"<path d=\"M3.8 12.5a8.4 8.4 0 0 1 16.6 0ZM12.1 12.5v6a1.9 1.9 0 0 1-3.7 0M12.1 4.1v0\"/>","undo":"<path d=\"M9.2 14.2L4 8.9l5.2-5.2\"/><path d=\"M4 8.9h11a5.8 5.8 0 0 1 0 11.5H11.3\"/>","up":"<path d=\"M3.7 16.1l8.3-8.3l8.3 8.3\"/>","upload":"<path d=\"M12 20.8V9.2M6.8 14.5l5.2-5.2l5.2 5.2M4.7 4h14.7\"/>","user":"<circle cx=\"12\" cy=\"7.4\" r=\"3.8\"/><path d=\"M4.3 20.5c0-3.9 3.4-6.6 7.7-6.6s7.7 2.6 7.7 6.6\"/>","user-check":"<circle cx=\"9.2\" cy=\"8.1\" r=\"2.8\"/><path d=\"M4 19c0-2.9 2.4-4.9 5.4-4.9s5.4 1.9 5.4 4.9M15.4 10.8l1.8 1.8l3.6-3.6\"/>","user-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M6.6 18.3a6.5 6.5 0 0 1 10.8 0\"/>","user-lock":"<circle cx=\"9.8\" cy=\"7.3\" r=\"3.3\"/><path d=\"M3.5 18.8c0-3.4 2.8-5.7 6.2-5.7c1.2 0 2.2 0.3 3.1 0.7\"/><rect x=\"14.6\" y=\"14.5\" width=\"5.7\" height=\"4.8\" rx=\"1\"/><path d=\"M16 14.5v-1.2a1.5 1.5 0 0 1 2.9 0v1.2\"/>","user-minus":"<circle cx=\"10.1\" cy=\"8\" r=\"3.3\"/><path d=\"M4 19.3c0-3.3 2.7-5.7 6.1-5.7c1.1 0 2.2 0.3 3 0.7\"/><path d=\"M15.1 17h5.7\"/>","user-off":"<circle cx=\"12\" cy=\"8.2\" r=\"3.5\"/><path d=\"M5.1 20c0-3.6 3-5.9 6.9-5.9s6.9 2.3 6.9 5.9\"/><path d=\"M3.7 3.7l16.7 16.7\"/>","user-pen":"<circle cx=\"9.8\" cy=\"8\" r=\"3.3\"/><path d=\"M3.8 19.1c0-3.3 2.7-5.6 6-5.6c1.1 0 2.1 0.3 3 0.7\"/><path d=\"M19.1 12.1l1.4 1.4l-4.7 4.7l-1.9 0.5l0.5-1.9Z\"/>","user-tag":"<circle cx=\"10\" cy=\"7.6\" r=\"3.3\"/><path d=\"M3.8 18.9c0-3.3 2.8-5.6 6.1-5.6c1.1 0 2.2 0.3 3.1 0.7\"/><path d=\"M14.2 14.2h3.7l2.4 2.4l-2.4 2.4h-3.7Z\"/><path d=\"M16.1 16.5h0\"/>","video":"<rect x=\"3.4\" y=\"6.4\" width=\"12.3\" height=\"11.3\" rx=\"1.9\"/><path d=\"M15.6 10.2l4.7-2.8v9.4l-4.7-2.8\"/>","volume":"<path d=\"M3.5 9.5h3.7L11.8 5.8v12.6l-4.7-3.7H3.5Z\"/><path d=\"M15.5 9.5a3.7 3.7 0 0 1 0 5.2M18.1 6.9a7.3 7.3 0 0 1 0 10.5\"/>","walk":"<circle cx=\"12.3\" cy=\"5.1\" r=\"1.7\"/><path d=\"M8.8 20.3l2.4-5.5l1.9 2.2V20.3M11 14.8l0.9-5.2l-2.7 1.4l-1.4 2.7M11.9 9.6l1.8 2.7l2.7 0.9\"/>","wallet":"<path d=\"M3.5 6.8A2.7 2.7 0 0 1 6.2 4.2H18.4v4.2M3.5 6.8V18a2.1 2.1 0 0 0 2.1 2.1h14.9V8.4H6.2A2.7 2.7 0 0 1 3.5 6.8Z\"/><path d=\"M16.2 14.2h0\"/>","water":"<path d=\"M3.5 10.2c2.1 0 2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8s2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8M3.5 15.6c2.1 0 2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8s2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8\"/>","wave":"<path d=\"M3.7 16.2c2.1 0 2.1-1.7 4.2-1.7s2.1 1.7 4.2 1.7s2.1-1.7 4.2-1.7s2.1 1.7 4.2 1.7\"/><path d=\"M6.5 12.7A5.6 5.6 0 0 1 16.4 9.4c-1.9-0.4-3.5 0.3-4 2\"/>","weight":"<circle cx=\"12\" cy=\"5.2\" r=\"2\"/><path d=\"M7.1 8.7h9.9l3 11.3H4.1Z\"/>","wifi":"<path d=\"M3.7 9.4a12.4 12.4 0 0 1 16.7 0M6.4 12.5a8.4 8.4 0 0 1 11.5 0M9.1 15.6a4.4 4.4 0 0 1 6.2 0M12.1 18.6h0\"/>","wind":"<path d=\"M3.5 9.9h10.4a2.8 2.8 0 1 0-2.8-2.8M3.5 13.7h14.2a2.8 2.8 0 1 1-2.8 2.8M3.5 17.5h6.6\"/>","window":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\"/><path d=\"M3.5 9h17\"/>","window-restore":"<rect x=\"3.5\" y=\"8.5\" width=\"12\" height=\"11\" rx=\"2\"/><path d=\"M8.5 8.5v-2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2h-3\"/>","wizard":"<path d=\"M3.6 20h16.7M6.3 20L9.9 9.1L15.7 3.3L14.1 10.1L17.8 20\"/><path d=\"M8.4 15.4h7.3\"/>","wrench":"<path d=\"M14.6 3.6a5.2 5.2 0 0 0-4.6 7.3L3.7 17.3V20.3h3.1l6.4-6.4a5.2 5.2 0 0 0 7.3-4.6l-3.2 1.2l-2.5-2.5l1.2-3.2Z\"/>","x-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m9 9 6 6M15 9l-6 6\"/>","zap":"<path d=\"M13.4 3.5L5.9 12.9h5.7l-0.9 7.6l7.6-9.4h-5.7Z\"/>"};++ const S = {"airplane":"<path d=\"M11.8 2.6c1.3 0 2 1.2 2 3V9.5l7.2 4.2v2.5L13.8 13.7v3.5l2 1.5v2.5L11.8 19.7l-3.7 1.2v-2.5l2-1.5v-3.5l-7.2 2.5v-2.5L9.8 9.5V5.3c0-1.8 0.7-3 2-3Z\"/>","alert":"<path fill-rule=\"evenodd\" d=\"M10.5 4.1a1.7 1.7 0 0 1 3 0l7.7 13.3a1.7 1.7 0 0 1-1.5 2.6H4.3a1.7 1.7 0 0 1-1.5-2.6ZM11 8.8h2v5.2h-2ZM12 15.2a1.2 1.2 0 1 1 0 2.4a1.2 1.2 0 0 1 0-2.4Z\"/>","alert-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.7 6.9h2.5v7.1h-2.5ZM12.9 15.3a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","archive":"<rect x=\"2.6\" y=\"3.4\" width=\"18.8\" height=\"5.4\" rx=\"1.2\"/><path fill-rule=\"evenodd\" d=\"M4.4 10h15.2v9.2a1.6 1.6 0 0 1-1.6 1.6H6a1.6 1.6 0 0 1-1.6-1.6ZM9.6 12.4v1.8h4.8v-1.8Z\"/>","bell":"<path d=\"M5.2 15.4V9.6a6.8 6.8 0 0 1 13.7 0v5.7l1.9 2.6H3.3ZM9.7 19.3h4.6a2.3 2.3 0 0 1-4.6 0Z\"/>","book":"<path d=\"M4.3 5.2A2.4 2.4 0 0 1 6.8 2.7h12.2v14.6H6.8a2.4 2.4 0 0 0-2.4 2.4Z\"/><path class=\"ln\" d=\"M7.2 20.2h11.2\"/>","book-open":"<path d=\"M10.9 5.8C8.8 4.4 6 3.8 2.5 4.5v14c3.5-0.6 6.3 0 8.4 1.5ZM13.1 5.8c2.1-1.5 5-2 8.4-1.4v14c-3.5-0.6-6.3 0-8.4 1.5Z\"/>","box":"<path d=\"M12 2.7l9.4 4.5l-9.4 4.5l-9.4-4.5ZM2.6 8.9l8.6 4.1v8.2l-8.6-4.3ZM21.4 8.9l-8.6 4.1v8.2l8.6-4.3Z\"/>","brain":"<path d=\"M8.9 3.8a3.2 3.2 0 0 0-3.2 3.1a3.1 3.1 0 0 0-2.2 5.3a3.1 3.1 0 0 0 2.2 5.2a3.2 3.2 0 0 0 5.7 1.3V5.6A2.3 2.3 0 0 0 8.9 3.8Z\"/><path d=\"M15.1 3.8a3.2 3.2 0 0 1 3.2 3.1a3.1 3.1 0 0 1 2.2 5.3a3.1 3.1 0 0 1-2.2 5.2a3.2 3.2 0 0 1-5.7 1.3V5.6A2.3 2.3 0 0 1 15.1 3.8Z\"/>","bridge":"<path d=\"M5.7 4.6h2.6v15.4H5.7ZM15.7 4.6h2.6v15.4h-2.6ZM3.4 14.6h17.2v2.8H3.4Z\"/><path class=\"ln\" d=\"M4 10c1.6 0 2.5-2.3 3-5c2.4 5.2 7.6 5.2 10 0c.5 2.7 1.4 5 3 5M12 10.9V15\"/>","briefcase":"<path d=\"M2.7 9.1a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.8H2.7ZM2.7 13.1h7.2v1.5h4.3v-1.5h7.2V17.9a2.5 2.5 0 0 1-2.5 2.5H5.2a2.5 2.5 0 0 1-2.5-2.5Z\"/><path class=\"ln\" d=\"M9.1 6.6V5.7A1.5 1.5 0 0 1 10.5 4.2h2.9A1.5 1.5 0 0 1 14.9 5.7v0.9\"/>","bug":"<path fill-rule=\"evenodd\" d=\"M12 7a4.8 4.8 0 0 1 4.8 4.8v3.4a4.8 4.8 0 0 1-9.6 0v-3.4A4.8 4.8 0 0 1 12 8Zm-0.7 4.4v7.4h1.4v-7.4Z\"/><path d=\"M9.4 5.8a2.6 2.6 0 0 1 5.2 0Z\"/><path class=\"ln\" d=\"M7.2 12.5H3.8M20.2 12.5h-3.4M7.6 9.4L5 7M16.4 9.4L19 7M7.6 16.6L5 19M16.4 16.6L19 19\"/>","burst":"<path d=\"M12.1 2.6l2 4.6l4.7-1.9l-1.9 4.7l4.6 2l-4.6 2l1.9 4.7l-4.7-1.9l-2 4.6l-2-4.6l-4.7 1.9l1.9-4.7L2.7 12l4.6-2l-1.9-4.7l4.7 1.9Z\"/>","calendar":"<path fill-rule=\"evenodd\" d=\"M4.1 8.1a2 2 0 0 1 2-2h11.8a2 2 0 0 1 2 2V19.5a2 2 0 0 1-2 2H6.1a2 2 0 0 1-2-2Zm2.2 3.9V19.3h11.4v-7.3Z\"/><path class=\"ln\" d=\"M9 3.9v3.5M15 3.9v3.5\"/>","camera":"<path fill-rule=\"evenodd\" d=\"M2.5 7.8a1.9 1.9 0 0 1 1.9-1.9h2.6L8.8 3.3h6.3l1.8 2.6h2.6A1.9 1.9 0 0 1 21.5 7.8v10.7a1.9 1.9 0 0 1-1.9 1.9H4.4A1.9 1.9 0 0 1 2.5 18.5Zm9.5 2a3.6 3.6 0 1 0 0 7.2a3.6 3.6 0 0 0 0-7.2Z\"/>","camera-flip":"<path fill-rule=\"evenodd\" d=\"M2.5 7.8a1.9 1.9 0 0 1 1.9-1.9h2.6L8.8 3.3h6.3l1.8 2.6h2.6A1.9 1.9 0 0 1 21.5 7.8v10.7a1.9 1.9 0 0 1-1.9 1.9H4.4A1.9 1.9 0 0 1 2.5 18.5ZM7.7 11.7A4.5 4.5 0 0 1 16.3 11.7L13.9 12.6A2 2 0 0 0 10.1 12.6ZM16.3 14.8A4.5 4.5 0 0 1 7.7 14.8L10.1 14A2 2 0 0 0 13.9 14Z\"/>","camera-off":"<path d=\"M8.5 4.6L9 3.8h6.1l1.7 2.5h2.5A1.8 1.8 0 0 1 21.2 8.1v9.1ZM3.8 7.3L16.7 20.2H4.8A1.8 1.8 0 0 1 3 18.4V8.1Z\"/><path class=\"ln\" d=\"M4 3.8l16.2 16.2\"/>","car":"<path fill-rule=\"evenodd\" d=\"M5.6 5.2h12.7l2.7 5.5H3ZM2.6 12.2h18.7v4.5H2.6ZM5.9 14.4a1.1 1.1 0 1 0 2.3 0a1.1 1.1 0 1 0-2.3 0ZM15.8 14.4a1.1 1.1 0 1 0 2.3 0a1.1 1.1 0 1 0-2.3 0ZM5 17.5h2.7v1.8H5ZM16.3 17.5h2.7v1.8h-2.7Z\"/>","card":"<path fill-rule=\"evenodd\" d=\"M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z\"/>","care":"<path d=\"M12 11s-4.3-2.6-4.3-5.6a2.3 2.3 0 0 1 4.3-1.5a2.3 2.3 0 0 1 4.3 1.5c0 3-4.3 5.6-4.3 5.6Z\"/><path class=\"ln\" d=\"M3.8 13.8v6M3.8 15.2h3.1l3.3 2.7h7.5a1.7 1.7 0 0 0 0-3.4h-3.9\"/>","cart":"<path d=\"M6.3 7h15l-2.5 8.3H8.1Z\"/><circle cx=\"9.5\" cy=\"19.4\" r=\"1.6\"/><circle cx=\"17\" cy=\"19.4\" r=\"1.6\"/><path class=\"ln\" d=\"M3.8 4.8H5.8l2.3 10.5\"/>","cc":"<path fill-rule=\"evenodd\" d=\"M5.6 4.6h12.7a3 3 0 0 1 3 3v8.8a3 3 0 0 1-3 3h-12.7a3 3 0 0 1-3-3v-8.8a3 3 0 0 1 3-3ZM10.8 9.5A3.2 3.2 0 1 0 10.8 14.5L9.6 13A1.3 1.3 0 1 1 9.6 11ZM17.4 9.5A3.2 3.2 0 1 0 17.4 14.5L16.2 13A1.3 1.3 0 1 1 16.2 11Z\"/>","chart":"<path class=\"ln\" d=\"M4 3.5v16.2h16.2\"/><path d=\"M7 14.9L11 10.3l3 2.5l5.2-6.2V17.7H7Z\"/>","chat":"<path d=\"M2.7 4.7A1.8 1.8 0 0 1 4.5 3h15.2a1.8 1.8 0 0 1 1.8 1.8v10.9a1.8 1.8 0 0 1-1.8 1.8H8.3L2.7 21.8Z\"/>","chat-off":"<path d=\"M8.1 4.6H19a1.6 1.6 0 0 1 1.6 1.6v9.5a1.6 1.6 0 0 1-0.4 1ZM3.4 7.3L12.9 16.8H8.3l-4.9 4.6Z\"/><path class=\"ln\" d=\"M4 4.2l16 16\"/>","check-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM17.3 8.9l1.6 1.6l-7 7l-4.1-4.1l1.6-1.6l2.6 2.6Z\"/>","child":"<circle cx=\"12\" cy=\"5.2\" r=\"2.6\"/><path class=\"ln\" d=\"M7.7 10L12 8.6l4.3 1.4M12 8.6v5.8M9.1 20.1l2.9-5.8l2.9 5.8\"/>","chip":"<path fill-rule=\"evenodd\" d=\"M8.6 7.2h6.8a1.4 1.4 0 0 1 1.4 1.4v6.8a1.4 1.4 0 0 1-1.4 1.4H8.6a1.4 1.4 0 0 1-1.4-1.4V8.6a1.4 1.4 0 0 1 1.4-1.4Zm1.7 3.1v3.4h3.4v-3.4Z\"/><path class=\"ln\" d=\"M10.2 4v3.2M13.8 4v3.2M10.2 16.8V20M13.8 16.8V20M4 10.2h3.2M4 13.8h3.2M16.8 10.2H20M16.8 13.8H20\"/>","circle":"<circle cx=\"12\" cy=\"12\" r=\"9.5\"/>","city":"<path fill-rule=\"evenodd\" d=\"M5.4 7.7h4.6v10.9H5.4Zm1.9 2.2v1.4h1.2v-1.4Zm0 2.9v1.4h1.2v-1.4Z\"/><path fill-rule=\"evenodd\" d=\"M10.7 3.4h5.1v15.2h-5.1Zm1.7 2.4v1.4h1.4V5.8Zm0 2.9v1.4h1.4V8.7Zm0 2.9v1.4h1.4v-1.4Z\"/><path d=\"M16.5 11.3h2.2v7.4h-2.2Z\"/><path class=\"ln\" d=\"M3.9 18.6h16.1\"/>","clapper":"<path fill-rule=\"evenodd\" d=\"M2.6 5.9L19.9 2.7l0.9 4.3L3.2 8.7ZM7 5.1L9.2 8.1l2.6-0.2L9.6 4.6ZM12.6 4l2.2 3.6l2.6-0.3L15.2 3.6Z\"/><path d=\"M3.1 9.9h18.2v9a1.6 1.6 0 0 1-1.6 1.6h-15a1.6 1.6 0 0 1-1.6-1.6Z\"/>","clipboard":"<path fill-rule=\"evenodd\" d=\"M7.5 4.2h9a2 2 0 0 1 2 2v13.1a2 2 0 0 1-2 2H7.5a2 2 0 0 1-2-2V6.3a2 2 0 0 1 2-2ZM9.1 9.9v1.6h5.8v-1.6Zm0 3.9v1.6h3.9v-1.6Z\"/><rect x=\"8.7\" y=\"2.5\" width=\"6.6\" height=\"3.7\" rx=\"1.2\"/>","clipboard-check":"<path fill-rule=\"evenodd\" d=\"M7.5 4.2h9a2 2 0 0 1 2 2v13.1a2 2 0 0 1-2 2H7.5a2 2 0 0 1-2-2V6.3a2 2 0 0 1 2-2ZM8 13.1L11 16.1l5-5l-1.6-1.6l-3.4 3.4l-1.5-1.5Z\"/><rect x=\"8.7\" y=\"2.5\" width=\"6.6\" height=\"3.7\" rx=\"1.2\"/>","clock":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.9 6.6h2.3v5l3.3 2l-1.1 2l-4.3-2.7Z\"/>","cloud":"<path d=\"M7.9 18.2h9.6a4.2 4.2 0 0 0 0.6-8.3A6.1 6.1 0 0 0 6.5 9.2A4.5 4.5 0 0 0 7.9 18.2Z\"/>","cloud-off":"<path d=\"M10.1 5.7A6 6 0 0 1 17.9 9.8a4.1 4.1 0 0 1 2.8 6.5ZM6.6 9.1L15.5 18H7.9A4.4 4.4 0 0 1 6.4 9.2Z\"/><path class=\"ln\" d=\"M5.1 4.2l15 15\"/>","coin":"<path fill-rule=\"evenodd\" d=\"M13 2.6a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM12 5.8h2.1v1.2c1.1 0.2 2.1 0.8 2.6 1.7l-1.7 1c-0.3-0.6-1-1-1.8-1c-0.9 0-1.5 0.4-1.5 1s0.5 0.8 1.8 1.1c1.8 0.4 3.5 1 3.5 3.1c0 1.4-1 2.5-2.8 2.8V18h-2.1v-1.3c-1.2-0.2-2.3-0.9-2.8-2l1.7-1c0.4 0.7 1.1 1.1 2.1 1.1c1 0 1.6-0.4 1.6-1s-0.6-0.8-2-1.1c-1.7-0.4-3.4-1-3.4-3c0-1.3 1-2.4 2.7-2.7Z\"/>","columns":"<path d=\"M2.6 6.3a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v1.5H2.6ZM2.6 9.9h8.3v10.4H5.3a2.7 2.7 0 0 1-2.7-2.7ZM13 9.9h8.3v7.7a2.7 2.7 0 0 1-2.7 2.7H13Z\"/>","compass":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM17.4 7.7L14.9 14.1L8.5 16.5L11 10.1Z\"/>","compress":"<path d=\"M9.7 9.7H2.7L9.7 2.7ZM14.3 9.7h7l-7-7ZM9.7 14.3H2.7l7 7ZM14.3 14.3h7l-7 7Z\"/>","computer":"<rect x=\"2.6\" y=\"3.4\" width=\"18.8\" height=\"12.8\" rx=\"2.2\"/><path class=\"ln\" d=\"M8 20h8M12 16.2v3.8\"/>","contrast":"<path fill-rule=\"evenodd\" d=\"M12.4 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 2.1a7.2 7.2 0 0 1 0 14.4Z\"/>","cookie":"<path fill-rule=\"evenodd\" d=\"M21.6 12.4a9.4 9.4 0 1 1-10-10a3.4 3.4 0 0 0 4.4 3.9a3.4 3.4 0 0 0 5.5 5.9ZM7 9.1a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM10.9 14a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM6.5 15.7a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM14.8 15.7a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0Z\"/>","copy":"<rect x=\"7.5\" y=\"7.5\" width=\"13.8\" height=\"13.8\" rx=\"2.5\"/><path class=\"ln\" d=\"M16.4 7.5V5.9a2.1 2.1 0 0 0-2.1-2.1H5.9a2.1 2.1 0 0 0-2.1 2.1v8.5a2.1 2.1 0 0 0 2.1 2.1h1.7\"/>","couch":"<path d=\"M7.1 4.2h9.7A2.5 2.5 0 0 1 19.4 6.7v1.9a3.1 3.1 0 0 0-3.1 3.1v0.1H7.7v-0.1A3.1 3.1 0 0 0 4.6 8.7V6.7A2.5 2.5 0 0 1 7.1 4.2ZM2.7 11.6a2.5 2.5 0 0 1 5.1 0v1.9h8.6V11.6a2.5 2.5 0 0 1 5.1 0v5.5H2.7Z\"/><path class=\"ln\" d=\"M5.2 17.1v1.9M18.8 17.1v1.9\"/>","crown":"<path d=\"M2.6 7.3L7.4 11.5L12 4.1L16.6 11.5l4.8-4.2l-2 11.7H4.6Z\"/>","cubes":"<path d=\"M12 2.3L7.8 4.4v4.8l4.2 2.1l4.2-2.1V4.4ZM6.8 12.1L2.7 14.2v4.8l4.2 2.1l4.2-2.1v-4.8ZM17.2 12.1l-4.2 2.1v4.8l4.2 2.1l4.2-2.1v-4.8Z\"/>","database":"<ellipse cx=\"12\" cy=\"5.7\" rx=\"7.9\" ry=\"3.2\"/><path d=\"M4.1 7.5a7.9 3.2 0 0 0 15.9 0v4.3a7.9 3.2 0 0 1-15.9 0ZM4.1 13.4a7.9 3.2 0 0 0 15.9 0v4.7a7.9 3.2 0 0 1-15.9 0Z\"/>","dice":"<path fill-rule=\"evenodd\" d=\"M6.2 2.7h11.5a3.6 3.6 0 0 1 3.6 3.6v11.5a3.6 3.6 0 0 1-3.6 3.6H6.2a3.6 3.6 0 0 1-3.6-3.6V6.2a3.6 3.6 0 0 1 3.6-3.6ZM6.2 8.2a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM13.8 8.2a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM10 12a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM6.2 15.8a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM13.8 15.8a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0Z\"/>","dish":"<path d=\"M2.7 9.7A11.7 11.7 0 0 0 14.4 21.4Z\"/><path class=\"ln\" d=\"M8.8 15.3l4.9-4.9M14.2 4a5.8 5.8 0 0 1 5.8 5.8M14.2 8.1a1.8 1.8 0 0 1 1.8 1.8\"/>","donate":"<path fill-rule=\"evenodd\" d=\"M12 2.2a5.9 5.9 0 1 0 0 11.8a5.9 5.9 0 0 0 0-11.8Zm-0.8 3.4h1.7v5.1h-1.7ZM2.9 15h18.2v6H2.9ZM7.8 17.1v1.6h8.5V17.1Z\"/>","door":"<path fill-rule=\"evenodd\" d=\"M14.3 4.5L6.2 3v17.1l8.2-1.5ZM10.2 11.5a1 1 0 1 0 2 0a1 1 0 1 0-2 0Z\"/><path class=\"ln\" d=\"M15.5 5.3h1.4a0.9 0.9 0 0 1 0.9 0.9v13.3M15.5 19.5H20M4 19.5h2.1\"/>","download":"<path d=\"M10.6 2.3h2.5v7h4.7L11.9 15.4l-5.9-5.9h4.7Z\"/><path class=\"ln\" d=\"M4.5 19.7h14.9\"/>","drive":"<path fill-rule=\"evenodd\" d=\"M5.3 11.4h13.5a2.7 2.7 0 0 1 2.7 2.7v3a2.7 2.7 0 0 1-2.7 2.7H5.3a2.7 2.7 0 0 1-2.7-2.7v-3a2.7 2.7 0 0 1 2.7-2.7ZM16.8 14.4a1.1 1.1 0 1 1 0 2.3a1.1 1.1 0 0 1 0-2.3ZM13.7 14.4a1.1 1.1 0 1 1 0 2.3a1.1 1.1 0 0 1 0-2.3Z\"/><path class=\"ln\" d=\"M4.1 11.9L6.8 4.7h10.4l2.8 7.2\"/>","drop":"<path d=\"M12 2.2s7 7.4 7 12.6a7 7 0 0 1-13.9 0C5 9.6 12 2.2 12 2.2Z\"/>","eraser":"<path d=\"M14 3.9l6.1 6.1-5.2 5.2-6.1-6.1ZM7.4 10l6.2 6.2-3.2 3.2H6.1l-2.9-2.9a1.6 1.6 0 0 1 0-2.3Z\"/><path class=\"ln\" d=\"M13 19.4h7\"/>","expand":"<path d=\"M2.7 2.7h7L2.7 9.7ZM21.3 2.7h-7l7 7ZM2.7 21.3h7l-7-7ZM21.3 21.3h-7l7-7Z\"/>","eye":"<path fill-rule=\"evenodd\" d=\"M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/>","eye-off":"<path d=\"M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z\"/><path class=\"ln\" d=\"M4.6 4.6l14.8 14.8\"/>","fast-forward":"<path d=\"M3 5.5v13.1L12 12ZM12.7 5.5v13.1L21.8 12Z\"/>","file":"<path d=\"M5.8 2.4h7.6v5.2h5V21.2H5.8ZM15 2.7l3.1 3.3h-3.1Z\"/>","file-code":"<path fill-rule=\"evenodd\" d=\"M5.8 2.4h7.6v5.2h5V21.2H5.8ZM9.8 11l1.5 1.4l-1.6 1.7l1.6 1.7l-1.5 1.4l-2.9-3.1ZM14.4 11l-1.5 1.4l1.6 1.7l-1.6 1.7l1.5 1.4l2.9-3.1Z\"/><path d=\"M15 2.7l3.1 3.3h-3.1Z\"/>","film":"<path fill-rule=\"evenodd\" d=\"M4.8 3.6h14.4a2.3 2.3 0 0 1 2.3 2.3v12.3a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 18.2V5.8A2.3 2.3 0 0 1 4.8 3.6Zm3.8 2v12.9h6.8V5.5ZM4.4 6v2h2.1V6Zm0 5v1.8h2.1v-1.8Zm0 4.9v2h2.1v-2Zm13.1-10v2h2.1V6Zm0 5v1.8h2.1v-1.8Zm0 4.9v2h2.1v-2Z\"/>","finish":"<path d=\"M6.5 4.2h3.9v4.6H6.5ZM14.8 4.2h4a0.9 0.9 0 0 1 0.9 0.9v3.7h-4.9ZM10.5 8.6h4.5v4.6H10.5Z\"/><path class=\"ln\" d=\"M6 20.3V4.1\"/>","fire":"<path fill-rule=\"evenodd\" d=\"M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z\"/>","fish":"<path fill-rule=\"evenodd\" d=\"M8.7 12c1.9-3.5 4.6-5.3 7.6-5.3c2.8 0 4.6 2.2 5.4 5.3c-0.8 3.1-2.6 5.3-5.4 5.3c-3 0-5.7-1.8-7.6-5.3ZM16.2 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0Z\"/><path class=\"ln\" d=\"M8.7 12L4.4 8.9M8.7 12l-4.3 3.1\"/>","flag":"<path class=\"ln\" d=\"M7.2 20.5V4.3\"/><path d=\"M7.8 4.1h10.9l-2 4.1l2 4.1H7.8Z\"/>","focus":"<circle cx=\"12\" cy=\"12\" r=\"3.6\"/><path class=\"ln\" d=\"M3.8 9V6.1A2.3 2.3 0 0 1 6.1 3.8H9M15 3.8h2.9A2.3 2.3 0 0 1 20.2 6.1V9M20.2 15v2.9a2.3 2.3 0 0 1-2.3 2.3H15M9 20.2H6.1A2.3 2.3 0 0 1 3.8 17.9V15\"/>","folder":"<path d=\"M2.7 6.4a2.1 2.1 0 0 1 2.1-2.1h4.4l2.1 2.1h8.1a2.1 2.1 0 0 1 2.1 2.1v8.7a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1Z\"/>","folder-tree":"<path d=\"M9.6 5h4l1 1.5h6.4v5.3H9.6ZM9.6 14.3h4l1 1.5h6.4v5.3H9.6Z\"/><path class=\"ln\" d=\"M4.1 3.6v13.2a1 1 0 0 0 1 1H9.6M4.1 8.8H9.6\"/>","food":"<path d=\"M4.7 3.3h1.5v4.7h0.6V3.3h1.4v4.7h0.6V3.3h1.5v4.9A2.9 2.9 0 0 1 8.6 10.8V21.7H6.5V10.8a2.9 2.9 0 0 1-1.8-2.7ZM18.9 21.7h-2.3v-7.4h-3V10.6c0-3.9 1.7-6.6 5.2-7.7Z\"/>","game":"<path fill-rule=\"evenodd\" d=\"M7.6 6.3h8.8a5.8 5.8 0 0 1 0 11.5H7.6a5.8 5.8 0 0 1 0-11.5Zm-1.4 3.7v1.6H4.7v1.8h1.6v1.6H7.9v-1.6h1.6v-1.8H7.9v-1.6Zm9.2 1a1.2 1.2 0 1 0 0 2.3a1.2 1.2 0 0 0 0-2.3Zm2.5 1.6a1.2 1.2 0 1 0 0 2.3a1.2 1.2 0 0 0 0-2.3Z\"/>","gauge":"<path fill-rule=\"evenodd\" d=\"M3.7 18A9.4 9.4 0 1 1 19.4 19.6ZM15 8.6l-2.2 5.6l-2.1 0.3l-0.4-2.1Z\"/>","gavel":"<path d=\"M11.3 5.5L5.5 11.3l6.1 6.1l5.8-5.8Z\"/><path class=\"ln\" d=\"M13.7 4.2l5 5M3.8 19.1l5.7-5.7M13.7 19.1h6.3\"/>","gear":"<path fill-rule=\"evenodd\" d=\"M18.2 14.6a1.4 1.4 0 0 0 0.3 1.7l0.1 0.1a1.7 1.7 0 1 1-2.7 2.7l-0.1-0.1a1.4 1.4 0 0 0-1.7-0.3a1.4 1.4 0 0 0-0.9 1.4V19.6a1.7 1.7 0 1 1-3.8 0v-0.1a1.4 1.4 0 0 0-1-1.4a1.4 1.4 0 0 0-1.7 0.3l-0.1 0.1a1.7 1.7 0 1 1-2.7-2.7l0.1-0.1a1.4 1.4 0 0 0 0.3-1.7a1.4 1.4 0 0 0-1.4-0.9H4.6a1.7 1.7 0 1 1 0-3.8h0.1a1.4 1.4 0 0 0 1.4-1a1.4 1.4 0 0 0-0.3-1.7l-0.1-0.1a1.7 1.7 0 1 1 2.7-2.7l0.1 0.1a1.4 1.4 0 0 0 1.7 0.3H9.6a1.4 1.4 0 0 0 0.9-1.4V4.6a1.7 1.7 0 1 1 3.8 0v0.1a1.4 1.4 0 0 0 0.9 1.4a1.4 1.4 0 0 0 1.7-0.3l0.1-0.1a1.7 1.7 0 1 1 2.7 2.7l-0.1 0.1a1.4 1.4 0 0 0-0.3 1.7V9.6a1.4 1.4 0 0 0 1.4 0.9H19.6a1.7 1.7 0 1 1 0 3.8h-0.1a1.4 1.4 0 0 0-1.4 0.9ZM12.1 9.3a2.8 2.8 0 1 0 0 6.5a2.8 2.8 0 0 0 0-6.5Z\"/>","gem":"<path d=\"M6.4 3.9h11.2l3.8 5.3l-9.4 11.6L2.6 9.2Z\"/>","ghost":"<path fill-rule=\"evenodd\" d=\"M3.4 21.3V9.9a8.7 8.7 0 0 1 17.2 0v11.5l-2.9-2.1l-2.9 2.1l-2.9-2.1l-2.9 2.1l-2.9-2.1ZM8.8 7.8a1.6 1.6 0 1 0 0 3.1a1.6 1.6 0 0 0 0-3.1Zm6.2 0a1.6 1.6 0 1 0 0 3.1a1.6 1.6 0 0 0 0-3.1Z\"/>","gift":"<path d=\"M3.1 8.6h17.7v3.3H3.1ZM4.4 12.9h6.6v8.2H5.4a1 1 0 0 1-1-1ZM13 12.9h6.6v7.2a1 1 0 0 1-1 1H13Z\"/><path class=\"ln\" d=\"M12 8.6c-1.5-3.1-5.1-4.1-5.1-1.5S12 8.6 12 8.6s5.1-1 5.1-3.6s-3.6-1.5-5.1 3.6\"/>","globe":"<path d=\"M2.6 11.1A9.5 9.5 0 0 1 12 2.6a4.5 9.5 0 0 0-4.5 8.5ZM21.4 11.1A9.5 9.5 0 0 0 12 2.6a4.5 9.5 0 0 1 4.5 8.5ZM2.6 12.9A9.5 9.5 0 0 0 12 21.5a4.5 9.5 0 0 1-4.5-8.5ZM21.4 12.9A9.5 9.5 0 0 1 12 21.5a4.5 9.5 0 0 0 4.5-8.5ZM12 2.6a2.7 9.5 0 0 0-2.7 8.5h5.3A2.7 9.5 0 0 0 12 2.6ZM12 21.5a2.7 9.5 0 0 1-2.7-8.5h5.3A2.7 9.5 0 0 1 12 21.5Z\"/>","grid":"<rect x=\"2.7\" y=\"2.7\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"13.3\" y=\"2.7\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"2.7\" y=\"13.3\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"13.3\" y=\"13.3\" width=\"8\" height=\"8\" rx=\"2.2\"/>","group":"<rect x=\"6.9\" y=\"6.8\" width=\"6.4\" height=\"4.8\" rx=\"1.1\"/><rect x=\"10.8\" y=\"12.5\" width=\"6.4\" height=\"4.6\" rx=\"1.1\"/><path class=\"ln\" d=\"M4 7.6V4h3.6M16.5 4h3.6v3.6M20 16.4v3.6h-3.6M7.6 20H4v-3.6\"/>","hammer":"<path d=\"M13.1 2.5l7.5 7.5l-3.7 3.7l-7.5-7.5ZM12.9 8.9L3.7 18.1a2.1 2.1 0 0 0 2.9 2.9l9.2-9.2Z\"/>","hand":"<path d=\"M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z\"/>","handshake":"<path d=\"M2.3 9.2h2.7v6.8H2.3ZM19 9.2h2.7v6.8H19Z\"/><path class=\"ln\" d=\"M5.6 10.8h0.3l3.4-2.6l2.9 1.3L14.6 8.1l3.4 2.6h0.4M5.9 10.8l5.4 5.4a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.4 12.8l-3.9-3.9l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2\"/>","headphones":"<path class=\"ln\" d=\"M4 14.5V12a8 8 0 0 1 16 0v2.5\"/><rect x=\"2.6\" y=\"13.4\" width=\"5.4\" height=\"7.6\" rx=\"1.8\"/><rect x=\"16\" y=\"13.4\" width=\"5.4\" height=\"7.6\" rx=\"1.8\"/>","heart":"<path d=\"M12 21.6s-9.3-5.7-9.3-13a5.3 5.3 0 0 1 9.3-3.6a5.3 5.3 0 0 1 9.3 3.6c0 7.4-9.3 13-9.3 13Z\"/>","heart-broken":"<path fill-rule=\"evenodd\" d=\"M12 21.6s-9.3-5.7-9.3-13a5.3 5.3 0 0 1 9.3-3.6a5.3 5.3 0 0 1 9.3 3.6c0 7.4-9.3 13-9.3 13ZM10.9 5.9l2.7 0.6l-1.4 2.7l3.6 2.5l-2.6 5.9l-2.5-1.1l1.5-3.7l-3.7-2.5Z\"/>","help":"<path fill-rule=\"evenodd\" d=\"M13 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM9.3 9.4A3.7 3.7 0 1 1 13.9 12.8v1.6h-2.1V10.9h1a1.6 1.6 0 1 0-1.6-1.6ZM13 15.8a1.3 1.3 0 1 1 0 2.6a1.3 1.3 0 0 1 0-2.6Z\"/>","history":"<path d=\"M5.8 5.8A9.1 9.1 0 1 1 3.2 12.2h3a6.1 6.1 0 1 0 1.8-4.3ZM2.5 2.7v7.2h7.2ZM11.2 8.1h2.2v3.7l2.7 1.6l-1.1 1.8l-3.8-2.3Z\"/>","home":"<path d=\"M2.7 10.4L12 2.3l9.3 8.1v9.5a1.1 1.1 0 0 1-1.1 1.1h-5.6v-6.9h-5.4v6.9H3.8a1.1 1.1 0 0 1-1.1-1.1Z\"/>","hot-tub":"<circle cx=\"8.2\" cy=\"5.4\" r=\"2.4\"/><path d=\"M2.6 10.9h18.8v4.2a5.1 5.1 0 0 1-5.1 5.1h-8.5a5.1 5.1 0 0 1-5.1-5.1Z\"/><path class=\"ln\" d=\"M6.3 10.9v-0.6A2.4 2.4 0 0 1 8.7 8H9.2M13.5 9.4c0.8-0.9-0.8-1.9 0-2.8M17.3 9.4c0.8-0.9-0.8-1.9 0-2.8\"/>","id":"<path fill-rule=\"evenodd\" d=\"M4.8 4.6h14.4a2.3 2.3 0 0 1 2.3 2.3v10.3a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 17.2V6.9A2.3 2.3 0 0 1 4.8 4.6Zm4.1 4.2a2.2 2.2 0 1 0 0 4.3a2.2 2.2 0 0 0 0-4.3Zm-3.2 7.7h6.4c-0.6-1.7-1.8-2.7-3.2-2.7s-2.6 0.9-3.2 2.7Zm8.8-7.2v1.5h4V9.4Zm0 3.6v1.5h4v-1.5Z\"/>","idea":"<path d=\"M8.3 14.9A6.5 6.5 0 1 1 15.7 14.9c-0.7 0.6-1.3 1.3-1.4 2.2H9.7c-0.1-0.9-0.7-1.6-1.4-2.2Z\"/><path class=\"ln\" d=\"M9.6 20.5h4.8\"/>","image":"<path fill-rule=\"evenodd\" d=\"M2.8 6.1a2.7 2.7 0 0 1 2.7-2.7h13.3A2.7 2.7 0 0 1 21.5 6.1v12.3a2.7 2.7 0 0 1-2.7 2.7H5.4A2.7 2.7 0 0 1 2.8 18.4Zm6.2 2.2a2 2 0 1 0 0 3.9a2 2 0 0 0 0-3.9Zm7.5 3.5l-8.3 7.8h10.7a1.5 1.5 0 0 0 1.5-1.5v-3.1Z\"/>","inbox":"<path fill-rule=\"evenodd\" d=\"M2.7 12.4L5.2 3.7h13.6l2.5 8.8V17.9a1.6 1.6 0 0 1-1.6 1.6H4.2A1.6 1.6 0 0 1 2.7 17.9ZM6.4 5.6L4.6 11.5h3.8l1.5 2.4h4.3l1.5-2.4h3.8L17.6 5.6Z\"/>","info":"<path fill-rule=\"evenodd\" d=\"M12.9 2.6a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.7 10.5h2.5V16.9h-2.5ZM12.9 6.4a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","invite":"<circle cx=\"8.8\" cy=\"7.7\" r=\"3.2\"/><path d=\"M2.9 19.2c0-3.4 2.7-5.8 5.8-5.8s5.8 2.4 5.8 5.8Z\"/><path class=\"ln\" d=\"M17.6 7.8v5.3M15 10.5h5.3\"/>","key":"<path fill-rule=\"evenodd\" d=\"M8.3 10.1a5.4 5.4 0 1 1 0 10.9a5.4 5.4 0 0 1 0-10.9Zm0 3.6a1.9 1.9 0 1 0 0 3.8a1.9 1.9 0 0 0 0-3.8Z\"/><path class=\"ln\" d=\"M11.7 12.2l8.7-8.7M16.7 7.2l3.1 3.1M14.4 9.5l2.1 2.1\"/>","keyboard":"<path fill-rule=\"evenodd\" d=\"M4.8 5.7h14.4A2.3 2.3 0 0 1 21.5 8v8a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 16V8a2.3 2.3 0 0 1 2.3-2.3ZM5.3 9.1h1.9v1.9H5.3ZM8.2 9.1h1.9v1.9H8.2ZM11 9.1h1.9v1.9h-1.9ZM13.9 9.1h1.9v1.9h-1.9ZM16.8 9.1h1.9v1.9h-1.9ZM7.8 13.3h8.4v1.7H7.8Z\"/>","laugh":"<path fill-rule=\"evenodd\" d=\"M13 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM7.9 8.1l3.5 1.7l-3.5 1.7l-0.7-1.4l0.7-0.4l-0.7-0.4ZM18 8.1l-3.5 1.7l3.5 1.7l0.7-1.4l-0.7-0.4l0.7-0.4ZM8.5 13.5h8.9a4.4 4.4 0 0 1-8.9 0Z\"/>","layers":"<path d=\"M12 4.3l8.6 5l-8.6 5l-8.6-5Z\"/><path class=\"ln\" d=\"M3.9 13.9l8.1 4.5l8.1-4.5\"/>","leaf":"<path fill-rule=\"evenodd\" d=\"M5.4 18.6c0-8.9 5.2-14.2 15.7-15.7c-1 10.4-6.3 15.7-15.7 15.7Zm3.1-2L16.8 7.1l-9.5 8.5Z\"/><path class=\"ln\" d=\"M3.7 20.3L6 18\"/>","lifebuoy":"<path fill-rule=\"evenodd\" d=\"M13.1 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 5.3a4.1 4.1 0 1 1 0 8.2a4.1 4.1 0 0 1 0-8.2ZM15.5 16.2L18.4 19.1L20.2 17.3L17.2 14.3ZM10.8 16.2L7.9 19.1L6 17.3L9 14.3ZM15.5 7.8L18.4 4.9L20.2 6.7L17.2 9.7ZM10.8 7.8L7.9 4.9L6 6.7L9 9.7Z\"/>","live":"<circle cx=\"12\" cy=\"12\" r=\"2.5\"/><path class=\"ln\" d=\"M8.5 8.5a4.9 4.9 0 0 0 0 6.9M15.5 8.5a4.9 4.9 0 0 1 0 6.9M6.2 6.2a8.2 8.2 0 0 0 0 11.5M17.8 6.2a8.2 8.2 0 0 1 0 11.5\"/>","lock":"<path d=\"M4.6 11.1a1.6 1.6 0 0 1 1.6-1.6h11.5a1.6 1.6 0 0 1 1.6 1.6v8.4a1.6 1.6 0 0 1-1.6 1.6H6.2A1.6 1.6 0 0 1 4.6 19.6Z\"/><path class=\"ln\" d=\"M7.9 9.4V6.8a4.1 4.1 0 0 1 8 0V9.4\"/>","mail":"<path d=\"M2.5 7.3v-0.4A2.3 2.3 0 0 1 4.8 4.6h14.4A2.3 2.3 0 0 1 21.5 6.9v0.4l-8.7 5.6a1.6 1.6 0 0 1-1.7 0ZM2.5 9.4v7.6A2.3 2.3 0 0 0 4.8 19.4h14.4a2.3 2.3 0 0 0 2.3-2.3V9.4l-8 5.2a2.7 2.7 0 0 1-3 0Z\"/>","map":"<path d=\"M2.6 6.1 8.3 4.2v14l-5.7 1.9ZM9.7 4.2l4.6 1.6v14l-4.6-1.6ZM15.7 5.8l5.7-1.9v14l-5.7 1.9Z\"/>","mask":"<path fill-rule=\"evenodd\" d=\"M2.7 6.1c3.3 1.4 6.4 2.1 9.4 2.1s6.1-0.6 9.4-2.1c0 7.1-2.9 11.7-5.8 11.7c-1.5 0-2.2-1.5-3.6-1.5s-2.1 1.5-3.6 1.5c-2.9 0-5.8-4.6-5.8-11.7ZM6.8 11.6a1.6 1.1 0 1 0 3.3 0a1.6 1.1 0 1 0-3.3 0ZM14 11.6a1.6 1.1 0 1 0 3.3 0a1.6 1.1 0 1 0-3.3 0Z\"/>","medical":"<path fill-rule=\"evenodd\" d=\"M5.3 6.3h13.5a2.7 2.7 0 0 1 2.7 2.7v8.7a2.7 2.7 0 0 1-2.7 2.7H5.3a2.7 2.7 0 0 1-2.7-2.7V9a2.7 2.7 0 0 1 2.7-2.7ZM10.9 10h2.3v2.2h2.2v2.3h-2.2V16.7h-2.3v-2.2H8.7v-2.3h2.2Z\"/><path class=\"ln\" d=\"M9.2 6.3V5.3a0.9 0.9 0 0 1 0.9-0.9h3.8a0.9 0.9 0 0 1 0.9 0.9v1\"/>","megaphone":"<path d=\"M2.7 9.1a1.1 1.1 0 0 1 1.1-1.1h2.7l9.7-4.8v16.1l-9.7-4.8H3.8A1.1 1.1 0 0 1 2.7 13.2Z\"/><path class=\"ln\" d=\"M6.6 14.5l1.2 5M18.8 8.5a3.4 3.4 0 0 1 0 5.4\"/>","members":"<circle cx=\"9.1\" cy=\"7.1\" r=\"3.5\"/><path d=\"M2.6 19.6c0-3.7 2.9-6.3 6.4-6.3s6.4 2.6 6.4 6.3Z\"/><circle cx=\"16.5\" cy=\"6.6\" r=\"2.8\"/><path d=\"M16.7 12.4c2.8 0.4 4.7 2.7 4.7 6.2V19.6h-4.3c0-2.8-1-5.1-2.7-6.5Z\"/>","mic":"<path d=\"M8.9 5.8a3.1 3.1 0 0 1 6.2 0V10.8a3.1 3.1 0 0 1-6.2 0Z\"/><path class=\"ln\" d=\"M5.9 10.8a6.1 6.1 0 0 0 12.3 0M12 16.9V20.2\"/>","mic-off":"<path d=\"M9 5.4A3.1 3.1 0 0 1 15.2 5.8V10.7a3.1 3.1 0 0 1-0.1 0.8Z\"/><path class=\"ln\" d=\"M5.4 10.7a6.6 6.6 0 0 0 11 5M18.7 10.7c0 0.8-0.1 1.5-0.4 2.2M12.1 17.3v2.8M4.5 4.1l15.1 15.1\"/>","minus-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM7.9 10.9v2.5h10.2v-2.5Z\"/>","money":"<path fill-rule=\"evenodd\" d=\"M4.8 5.7h14.4a2.1 2.1 0 0 1 2.1 2.1v8.4a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1V7.8a2.1 2.1 0 0 1 2.1-2.1ZM12 8.9a3.1 3.1 0 1 0 0 6.3a3.1 3.1 0 0 0 0-6.3ZM6.3 8.7a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Zm11.4 4.6a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Z\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\"/>","moon":"<path d=\"M21.7 14.6A9.7 9.7 0 1 1 9.4 2.3a8 8 0 0 0 12.3 12.3Z\"/>","more":"<circle cx=\"4.8\" cy=\"12\" r=\"2.2\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><circle cx=\"19.2\" cy=\"12\" r=\"2.2\"/>","mountain":"<path d=\"M2.8 18.1L9.2 5.3l4.1 7.1L16.1 8.9L21.5 18.1Z\"/>","mug":"<path d=\"M3.8 8.9h12.2v7.6a4.6 4.6 0 0 1-4.6 4.6h-3a4.6 4.6 0 0 1-4.6-4.6Z\"/><path class=\"ln\" d=\"M16 11H16.9a2.5 2.5 0 0 1 0 5h-0.9M7.9 3.7c-0.8 1 0.8 2 0 3M11.4 3.7c-0.8 1 0.8 2 0 3\"/>","music":"<path d=\"M7.6 5.4l13.3-2.5v3.5l-13.3 2.5Z\"/><path class=\"ln\" d=\"M8.8 17.9V6.5M19.7 15.6V4.2\"/><circle cx=\"5.5\" cy=\"17.9\" r=\"3.2\"/><circle cx=\"16.7\" cy=\"15.6\" r=\"3.2\"/>","mute":"<path d=\"M2.9 8.8h4l5.5-4.2v14.8l-5.5-4.2H2.9Z\"/><path class=\"ln\" d=\"M15.5 9.6l4.7 4.7M20.3 9.6l-4.7 4.7\"/>","news":"<path fill-rule=\"evenodd\" d=\"M2.8 2.6h14.2v15.2a2.2 2.2 0 0 0 2.2 2.2H5.1A2.2 2.2 0 0 1 2.8 18.9ZM6.6 6.6h6.8v1.7H6.6Zm0 3.7h6.8v1.7H6.6Zm0 3.7h4v1.7H6.6Z\"/><path class=\"ln\" d=\"M17.1 7.7H19.8V17.9a2.1 2.1 0 0 1-2.1 2.1\"/>","nodes":"<circle cx=\"12\" cy=\"5.2\" r=\"3\"/><circle cx=\"5.6\" cy=\"18\" r=\"3\"/><circle cx=\"18.4\" cy=\"18\" r=\"3\"/><path class=\"ln\" d=\"M10.9 7.6L6.8 15.5M13.1 7.6l4.1 7.9M8.4 18h7.1\"/>","palette":"<path fill-rule=\"evenodd\" d=\"M12.1 2.7a9.4 9.4 0 1 0 0 18.8c1.3 0 2-0.9 2-1.9c0-1.2-1-1.5-1-2.5s0.8-1.6 2-1.6H17.3a4.4 4.4 0 0 0 4.4-4.4C21.7 6.7 17.4 2.7 12.1 2.7ZM7.8 9.7a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Zm2.5-3.7a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Zm4.6 0a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","parking":"<path fill-rule=\"evenodd\" d=\"M6.2 2.6h11.6a3.6 3.6 0 0 1 3.6 3.6v11.6a3.6 3.6 0 0 1-3.6 3.6H6.2a3.6 3.6 0 0 1-3.6-3.6V6.2a3.6 3.6 0 0 1 3.6-3.6ZM8.4 18V6H13a4 4 0 0 1 0 8h-2.4v4ZM10.6 8.2v3.6H13a1.8 1.8 0 0 0 0-3.6Z\"/>","pause":"<rect x=\"4.8\" y=\"2.6\" width=\"5.1\" height=\"18.8\" rx=\"1.5\"/><rect x=\"14.2\" y=\"2.6\" width=\"5.1\" height=\"18.8\" rx=\"1.5\"/>","paw":"<path d=\"M6.9 18.5c0-3.5 2.2-6.3 5.1-6.3s5.1 2.8 5.1 6.3c0 1.8-1.3 2.9-2.9 2.9c-0.9 0-1.5-0.6-2.2-0.6s-1.3 0.6-2.2 0.6c-1.6 0-2.9-1.1-2.9-2.9Z\"/><circle cx=\"5.1\" cy=\"10.2\" r=\"2.6\"/><circle cx=\"9.1\" cy=\"5.1\" r=\"2.6\"/><circle cx=\"14.9\" cy=\"5.1\" r=\"2.6\"/><circle cx=\"18.9\" cy=\"10.2\" r=\"2.6\"/>","pencil":"<path d=\"M15.6 3.1a2.2 2.2 0 0 1 3.2 3.2L6.9 18.1l-4.5 1.2l1.2-4.5Z\"/><path class=\"ln\" d=\"M11.8 19.7H20.1\"/>","phone":"<path d=\"M5.1 2.4h4.9l2.4 6l-2.7 1.6a10.7 10.7 0 0 0 4.2 4.2l1.6-2.7l6 2.4v4.9a2.3 2.3 0 0 1-2.3 2.3A17.3 17.3 0 0 1 2.8 4.6a2.3 2.3 0 0 1 2.3-2.3Z\"/>","piggy":"<path fill-rule=\"evenodd\" d=\"M2.6 11.4c0-3.6 3.7-6.5 8.7-6.5c1.4 0 2.7 0.2 3.9 0.7L18.3 3.8v3.7c0.9 0.8 1.5 1.7 1.7 2.8h1.5v3.8H20c-0.5 1.1-1.4 2-2.6 2.6V20.1h-3.3v-2.2c-0.9 0.2-1.8 0.3-2.8 0.3c-0.9 0-1.7-0.1-2.6-0.3v2.2h-3.3v-3.3C3.7 15.5 2.6 13.6 2.6 11.4ZM14.5 9.8a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0ZM8.3 6.8v1.5h3.7V6.8Z\"/>","pin":"<path fill-rule=\"evenodd\" d=\"M12 2.8a7.1 7.1 0 0 0-7.1 7.1c0 5.5 7.1 11.8 7.1 11.8s7.1-6.3 7.1-11.8A7.1 7.1 0 0 0 12 2.8Zm0 4.5a2.5 2.5 0 1 1 0 5.1a2.5 2.5 0 0 1 0-5.1Z\"/>","plane":"<path d=\"M21.2 2.9L2.4 10.7l6.9 3.2ZM21.2 2.9l-11 12l3.2 6.9Z\"/>","play":"<path d=\"M5.1 3.5v17a0.9 0.9 0 0 0 1.3 0.8l12.8-8.5a0.9 0.9 0 0 0 0-1.6L6.5 2.7a0.9 0.9 0 0 0-1.3 0.8Z\"/>","plug":"<path d=\"M6.5 8h10.9v3.3a5.4 5.4 0 0 1-10.9 0Z\"/><path class=\"ln\" d=\"M9.2 4.2v3.8M14.6 4.2v3.8M11.9 16.8v3.5\"/>","plus-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm-1.2 4.2h2.5v3.8H18v2.5h-3.8V17.1h-2.5v-3.8H7.9v-2.5h3.8Z\"/>","print":"<path d=\"M6.2 2.6h11.5v4.4H6.2ZM2.6 11a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v4.1a2.7 2.7 0 0 1-2.7 2.7h-0.3v-4.5H5.6v4.5h-0.3A2.7 2.7 0 0 1 2.6 15.1ZM7.1 14.7h9.9v6.7H7.1Z\"/>","puzzle":"<path d=\"M2.8 5.4h5a2.9 2.9 0 1 1 5.8 0h5v5a2.9 2.9 0 1 1 0 5.8v5h-5a2.9 2.9 0 1 0-5.8 0H2.8v-5a2.9 2.9 0 1 0 0-5.8Z\"/>","radio":"<path fill-rule=\"evenodd\" d=\"M5.2 7.8h13.6a2.5 2.5 0 0 1 2.5 2.5v7.8a2.5 2.5 0 0 1-2.5 2.5H5.2A2.5 2.5 0 0 1 2.6 18.1v-7.8A2.5 2.5 0 0 1 5.2 7.8ZM12.9 14.2a2.5 2.5 0 1 0 5.1 0a2.5 2.5 0 1 0-5.1 0ZM6.1 11.6v2h4.7v-2ZM6.1 15v2h4.7v-2Z\"/><path class=\"ln\" d=\"M7.1 7.8L16.9 4\"/>","ranking":"<path d=\"M3.5 13.7h4.9V9.9h7.1v5.7h4.9v5.4H3.5ZM12 2.2l1 2l2.2 0.3l-1.6 1.6l0.4 2.2L12 7.5l-2 1l0.4-2.2l-1.6-1.6l2.2-0.3Z\"/>","record":"<path fill-rule=\"evenodd\" d=\"M13.2 2.7a9.3 9.3 0 1 0 0 18.5a9.3 9.3 0 0 0 0-18.5Zm0 3.3a6 6 0 1 1 0 11.9a6 6 0 0 1 0-11.9Z\"/><circle cx=\"13.2\" cy=\"12\" r=\"3.7\"/>","restroom":"<circle cx=\"7.2\" cy=\"5.1\" r=\"1.8\"/><circle cx=\"16.2\" cy=\"5.1\" r=\"1.8\"/><path d=\"M6 9h1.8a1.5 1.5 0 0 1 1.5 1.5v4.7H8.6v5H5.5v-5H4.7v-4.7A1.5 1.5 0 0 1 6 9Z\"/><path d=\"M15.7 9.4h1.1a0.9 0.9 0 0 1 0.9 0.7l1.9 6.3H17.4v3.6h-2.3v-3.6h-2.1l1.9-6.3a0.9 0.9 0 0 1 0.9-0.7Z\"/><path class=\"ln\" d=\"M11.6 3.7v16.3\"/>","retry":"<path class=\"ln\" d=\"M4 12a8 8 0 0 1 13.4-5.9M20 12a8 8 0 0 1-13.4 5.9\"/><path d=\"M21.3 2.8v7h-7ZM2.7 21.2v-7h7Z\"/>","rewind":"<path d=\"M21 5.5v13.1L12 12ZM11.3 5.5v13.1L2.2 12Z\"/>","robot":"<path fill-rule=\"evenodd\" d=\"M8.5 8.7h6.9a3.1 3.1 0 0 1 3.1 3.1v4.3A3.1 3.1 0 0 1 15.5 19.3H8.5A3.1 3.1 0 0 1 5.4 16.2v-4.3A3.1 3.1 0 0 1 8.5 8.7Zm0.9 3.8a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4Zm5.2 0a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4ZM9.7 16v1.3h4.5v-1.3Z\"/><path class=\"ln\" d=\"M12 5.3v3.5M3.9 13.1v2.8M20.2 13.1v2.8\"/>","rocket":"<path fill-rule=\"evenodd\" d=\"M11.9 16.6L7.4 12.2C9.1 6.1 13.6 2.9 21.1 2.9c0 7.5-3.2 12-9.2 13.7ZM13.6 8.7a1.7 1.7 0 1 0 3.5 0a1.7 1.7 0 1 0-3.5 0Z\"/><path d=\"M3.7 12.2L6.8 7.5h3.5L6.6 12.6ZM11.4 17.4L11.9 20.3l4.6-3.3v-3.5ZM6.3 17.7c-2 0-3.9 2-3.9 3.9c2 0 3.9-2 3.9-3.9Z\"/>","save":"<path fill-rule=\"evenodd\" d=\"M4.4 2.7h12.4l3.5 3.5V20.8a0.7 0.7 0 0 1-0.7 0.7H4.4a0.7 0.7 0 0 1-0.7-0.7V3.4a0.7 0.7 0 0 1 0.7-0.7Zm3.4 1.4v4.9h7.4V4.1ZM7.2 13.6v6.4h9.6v-6.4Z\"/>","scissors":"<path fill-rule=\"evenodd\" d=\"M6.2 3.8a3.2 3.2 0 1 1 0 6.5a3.2 3.2 0 0 1 0-6.5Zm0 2a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4ZM6.2 13.7a3.2 3.2 0 1 1 0 6.5a3.2 3.2 0 0 1 0-6.5Zm0 2a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4Z\"/><path class=\"ln\" d=\"M8.7 8.8L20.4 18.1M8.7 15.2L20.4 5.9\"/>","search":"<path fill-rule=\"evenodd\" d=\"M10.6 3a7.7 7.7 0 1 1 0 15.4a7.7 7.7 0 0 1 0-15.4Zm0 3.2a4.5 4.5 0 1 0 0 9.2a4.5 4.5 0 0 0 0-9.2Z\"/><path class=\"ln\" d=\"M16.3 16.4l3.8 3.8\"/>","seedling":"<path d=\"M12.4 10.8C12.4 6.1 9.5 2.9 4 2.9c0 4.9 3 7.8 8.4 7.8ZM11.6 13.4c0-4.7 3-7.8 8.4-7.8c0 4.9-3 7.8-8.4 7.8Z\"/><path class=\"ln\" d=\"M12 20.4V12.5\"/>","server":"<path fill-rule=\"evenodd\" d=\"M5.2 2.6h13.4a2.7 2.7 0 0 1 2.7 2.7v3.4a2.7 2.7 0 0 1-2.7 2.7H5.2A2.7 2.7 0 0 1 2.5 8.6V5.3A2.7 2.7 0 0 1 5.2 2.6Zm2.2 2.9a1.5 1.5 0 1 0 0 2.9a1.5 1.5 0 0 0 0-2.9ZM5.2 12.7h13.4a2.7 2.7 0 0 1 2.7 2.7v3.4a2.7 2.7 0 0 1-2.7 2.7H5.2A2.7 2.7 0 0 1 2.5 18.7v-3.4A2.7 2.7 0 0 1 5.2 12.7Zm2.2 2.9a1.5 1.5 0 1 0 0 2.9a1.5 1.5 0 0 0 0-2.9Z\"/>","shapes":"<circle cx=\"7.3\" cy=\"7.6\" r=\"4.3\"/><path d=\"M16.5 2.7l5 8.6h-9.8ZM13.4 13.7h7.4v7.4h-7.4ZM2.5 21.1L6.8 13.7l4.3 7.4Z\"/>","shelter":"<path fill-rule=\"evenodd\" d=\"M12 2.7L2.5 10.2l1.1 1.5l1-0.8v10h14.8V10.9l1 0.8l1.1-1.5ZM9.5 20.9v-4.8a2.5 2.5 0 0 1 4.9 0v4.8ZM12 9.1a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4Z\"/>","shield":"<path d=\"M12 2.6 4.6 5.8V12c0 4.6 3.1 8 7.4 9.5 4.3-1.5 7.4-4.9 7.4-9.5V5.8Z\"/>","shirt":"<path d=\"M8 2.7L2.5 5.9l2.5 4.9l1.5-0.8v11.2h11V10.1l1.5 0.8L21.5 5.9l-5.5-3.2c-0.6 1.5-1.9 2.5-4 2.5S8.6 4.2 8 2.7Z\"/>","skip":"<path d=\"M3.3 2.6v18.9L15.8 12Z\"/><rect x=\"17.8\" y=\"2.7\" width=\"3.2\" height=\"18.7\" rx=\"1.5\"/>","skull":"<path fill-rule=\"evenodd\" d=\"M12 2.6a7.9 7.9 0 0 0-7.9 7.9c0 2.4 1.1 4.2 2.5 5.4V19.5a2 2 0 0 0 2 2h6.8a2 2 0 0 0 2-2v-3.6c1.4-1.2 2.5-3 2.5-5.4A7.9 7.9 0 0 0 12 2.6ZM9.2 9.4a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4ZM14.8 9.4a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4ZM12 13.3l1 1.8h-2ZM10.1 18.1h0.9v2.4h-0.9ZM13 18.1h0.9v2.4H13Z\"/>","sliders":"<path class=\"ln\" d=\"M4 7h8.8M19.2 7H20M4 17h2.8M13.2 17H20\"/><circle cx=\"16\" cy=\"7\" r=\"3.2\"/><circle cx=\"10\" cy=\"17\" r=\"3.2\"/>","smile":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM9.9 8.6a1.4 1.4 0 1 1 0 2.8a1.4 1.4 0 0 1 0-2.8ZM16 8.6a1.4 1.4 0 1 1 0 2.8a1.4 1.4 0 0 1 0-2.8ZM8.8 13.5h8.3a4.1 4.1 0 0 1-8.3 0Z\"/>","spark":"<path d=\"M10.7 2.6l2 5.6l5.6 2l-5.6 2L10.7 17.8l-2-5.6l-5.6-2l5.6-2ZM17.6 14.7l0.9 2.5l2.5 0.9l-2.5 0.9l-0.9 2.5l-0.9-2.5l-2.5-0.9l2.5-0.9Z\"/>","square":"<rect x=\"2.7\" y=\"2.7\" width=\"18.7\" height=\"18.7\" rx=\"3.3\"/>","star":"<path d=\"M12 2.8l2.9 6l6.6 0.8l-4.9 4.5l1.3 6.6L12 17.4l-5.9 3.2l1.3-6.6l-4.9-4.5l6.6-0.8Z\"/>","steps":"<path fill-rule=\"evenodd\" d=\"M2.8 4h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3ZM2.8 9.4h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3ZM2.8 15h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3Z\"/><path class=\"ln\" d=\"M10.6 6.4H20.3M10.6 11.9H20.3M10.6 17.4H20.3\"/>","store":"<path d=\"M4.4 3h15l2 6.2v1.4a3.2 3.2 0 0 1-6.3 0a3.2 3.2 0 0 1-6.3 0a3.2 3.2 0 0 1-6.3 0V9.2ZM4 14.9h15.9v5.6a1.1 1.1 0 0 1-1.1 1.1H14.1v-5.1h-4.4v5.1H5.1a1.1 1.1 0 0 1-1.1-1.1Z\"/>","sun":"<circle cx=\"12\" cy=\"12\" r=\"3.8\"/><path class=\"ln\" d=\"M12 3.9v1.3M12 18.7v1.3M6.3 6.2l0.9 0.9M16.8 16.8L17.8 17.8M4 12h1.3M18.7 12h1.3M6.3 17.8l0.9-0.9M16.8 7.2L17.8 6.2\"/>","sword":"<path d=\"M21.2 2.8v4.7l-10.8 10.8l-4.7-4.7L16.5 2.8Z\"/><path class=\"ln\" d=\"M5.2 11.9L12.1 18.8M8.4 15.6L3.7 20.3\"/>","table":"<path d=\"M2.7 6.2a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.3H2.7ZM2.7 10.5h5.3v9.9H5.2a2.5 2.5 0 0 1-2.5-2.5ZM9.8 10.5h4.5v9.9H9.8ZM16.1 10.5h5.3V17.9a2.5 2.5 0 0 1-2.5 2.5h-2.7Z\"/>","tack":"<path d=\"M8.5 3h7.2a0.8 0.8 0 0 1 0.8 1l-0.8 4l2.8 2.8a0.7 0.7 0 0 1-0.6 1.4H6.1a0.7 0.7 0 0 1-0.6-1.4l2.8-2.8l-0.8-4a0.8 0.8 0 0 1 0.8-1Z\"/><path class=\"ln\" d=\"M12 12.2V20.5\"/>","tag":"<path fill-rule=\"evenodd\" d=\"M2.9 3.4A1.5 1.5 0 0 1 4.4 2.9h7.2l10 10l-8.7 8.7L2.9 10.6Zm5 2.5a1.9 1.9 0 1 0 0 3.7a1.9 1.9 0 0 0 0-3.7Z\"/>","target":"<path fill-rule=\"evenodd\" d=\"M12 2.6a9.4 9.4 0 1 1 0 18.8a9.4 9.4 0 0 1 0-18.8Zm0 3a6.4 6.4 0 1 0 0 12.9a6.4 6.4 0 0 0 0-12.9Zm0 2.7a3.7 3.7 0 1 1 0 7.4a3.7 3.7 0 0 1 0-7.4Z\"/>","tent":"<path fill-rule=\"evenodd\" d=\"M12 4.2L19.3 17.4H4.7ZM12 11.6L9.5 17.4h5.1Z\"/><path class=\"ln\" d=\"M3.9 17.7h16.2\"/>","terminal":"<path fill-rule=\"evenodd\" d=\"M5 3.6h14a2.4 2.4 0 0 1 2.4 2.4v12a2.4 2.4 0 0 1-2.4 2.4H5A2.4 2.4 0 0 1 2.6 18V6A2.4 2.4 0 0 1 5 3.6Zm1.4 6 1.3-1.3 3.6 3.7-3.6 3.7-1.3-1.3 2.4-2.4Zm6.4 4.6h4.4v1.7h-4.4Z\"/>","text":"<path fill-rule=\"evenodd\" d=\"M10.2 2.4h3.7l6.8 18.7h-3.4l-1.6-4.7H8.3l-1.6 4.7H3.3ZM9.3 13.6h5.4L12 5.7Z\"/>","thumbs-up":"<path d=\"M6.5 10.1v10.3H3.6a1.1 1.1 0 0 1-1.1-1.1v-8a1.1 1.1 0 0 1 1.1-1.1ZM7.9 10.1l3.6-7.3a2.4 2.4 0 0 1 2.7 2.8l-0.6 3.5h5.6a2.2 2.2 0 0 1 2.2 2.6l-1.4 7a2.2 2.2 0 0 1-2.2 1.7H7.9Z\"/>","ticket":"<path fill-rule=\"evenodd\" d=\"M2.6 6.4h18.8v3.4a2.2 2.2 0 0 0 0 4.4v3.4H2.6v-3.4a2.2 2.2 0 0 0 0-4.4ZM13.3 8.4v1.8h1.4V8.4Zm0 2.7v1.8h1.4v-1.8Zm0 2.7v1.8h1.4v-1.8Z\"/>","toolbox":"<path d=\"M2.7 10.1a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.2H2.7ZM2.7 13.7h4.7v1.5h1.6v-1.5h6.2v1.5h1.6v-1.5h4.7V17.8a2.5 2.5 0 0 1-2.5 2.5H5.2A2.5 2.5 0 0 1 2.7 17.8Z\"/><path class=\"ln\" d=\"M9.1 7.5V5.7A1.5 1.5 0 0 1 10.5 4.2h2.9A1.5 1.5 0 0 1 14.9 5.7v1.9\"/>","train":"<path fill-rule=\"evenodd\" d=\"M9.1 2.7h5.8a2.9 2.9 0 0 1 2.9 2.9v6.8a2.9 2.9 0 0 1-2.9 2.9H9.1a2.9 2.9 0 0 1-2.9-2.9V5.6a2.9 2.9 0 0 1 2.9-2.9Zm-1.2 2.5v4.1h8.2V5.2ZM9.1 11.4a1.1 1.1 0 1 0 0 2.1A1.1 1.1 0 0 0 9.1 11.4Zm5.8 0a1.1 1.1 0 1 0 0 2.1a1.1 1.1 0 0 0 0-2.1Z\"/><path class=\"ln\" d=\"M8.6 20.2l1.9-3.4M15.4 20.2l-1.9-3.4\"/>","trash":"<path d=\"M5.8 7.6h12.4l-1 12a2 2 0 0 1-2 1.8H8.8a2 2 0 0 1-2-1.8Z\"/><path class=\"ln\" d=\"M3.8 6.6h16.4M9 6.6V4h6v2.6\"/>","tree":"<path d=\"M12 2.5L5.9 10.7h3L4.4 16.9h15.1l-4.5-6.2h3Z\"/><path class=\"ln\" d=\"M12 16.2v4\"/>","trophy":"<path d=\"M7.3 3h9.6V8.6a4.7 4.7 0 0 1-9.6 0Z\"/><path class=\"ln\" d=\"M7.3 5.6H5a3.1 3.1 0 0 0 3.1 4.1M16.7 5.6h2.3a3.1 3.1 0 0 1-3.1 4.1M12 13.7V16.9M8 20.4h8.1\"/>","tv":"<rect x=\"2.7\" y=\"7.4\" width=\"18.6\" height=\"13.3\" rx=\"2.3\"/><path class=\"ln\" d=\"M8.2 3.8l3.8 3.4l3.8-3.4\"/>","umbrella":"<path d=\"M2.6 12.7a9.4 9.4 0 0 1 18.8 0Z\"/><path class=\"ln\" d=\"M12 12.7v5.6a1.9 1.9 0 0 1-3.8 0\"/>","upload":"<path d=\"M10.6 21.7h2.5v-7h4.7L11.9 8.6l-5.9 5.9h4.7Z\"/><path class=\"ln\" d=\"M4.5 4.3h14.9\"/>","user":"<circle cx=\"12\" cy=\"6.7\" r=\"4.5\"/><path d=\"M3.5 21c0-4.7 3.8-7.8 8.5-7.8s8.5 3.2 8.5 7.8Z\"/>","user-check":"<circle cx=\"8.9\" cy=\"7.5\" r=\"3.2\"/><path d=\"M2.9 19.3c0-3.4 2.7-5.9 5.9-5.9s5.9 2.4 5.9 5.9Z\"/><path class=\"ln\" d=\"M14.8 10.6l1.9 1.9l3.8-3.8\"/>","user-circle":"<path fill-rule=\"evenodd\" d=\"M13 2.9a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 3.8a3.3 3.3 0 1 1 0 6.5a3.3 3.3 0 0 1 0-6.5ZM7.2 17.9a6.7 6.7 0 0 1 11.5 0a8.1 8.1 0 0 1-11.5 0Z\"/>","user-lock":"<circle cx=\"9.9\" cy=\"7.2\" r=\"4.2\"/><path d=\"M2.7 20c0-4.2 3.2-7 7.2-7c1.2 0 2.3 0.3 3.2 0.8v6.2Z\"/><rect x=\"14.5\" y=\"14.5\" width=\"6.9\" height=\"5.7\" rx=\"1.3\"/><path class=\"ln\" d=\"M16.4 14.5v-1a1.5 1.5 0 0 1 3 0v1\"/>","user-minus":"<circle cx=\"9.6\" cy=\"7.6\" r=\"3.9\"/><path d=\"M2.8 19.7c0-3.9 3.1-6.6 6.8-6.6c1.2 0 2.2 0.3 3.1 0.8v5.9Z\"/><path class=\"ln\" d=\"M15.1 16.7h5.2\"/>","user-off":"<path d=\"M9.1 4.7A4.2 4.2 0 1 1 15 10.6ZM4.2 20.8c0-4.3 2.8-6.9 6.3-7.2L17.5 20.8Z\"/><path class=\"ln\" d=\"M4 3.5l16.2 16.2\"/>","user-pen":"<circle cx=\"9.8\" cy=\"7.6\" r=\"4\"/><path d=\"M2.9 19.9c0-4 3.1-6.7 6.9-6.7c1.2 0 2.2 0.3 3.1 0.8v5.9Z\"/><path d=\"M19.5 11.4l2.1 2.1l-5.2 5.2l-2.8 0.7l0.7-2.8Z\"/>","user-tag":"<circle cx=\"10\" cy=\"7.4\" r=\"4\"/><path d=\"M2.9 19.9c0-4 3.2-6.8 7-6.8c1.2 0 2.3 0.3 3.2 0.8v6Z\"/><path fill-rule=\"evenodd\" d=\"M14 13.7h4.5l3.1 3.1l-3.1 3.1h-4.5ZM15.2 16.8a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z\"/>","video":"<path d=\"M3 7.7a2 2 0 0 1 2-2H14.4a2 2 0 0 1 2 2v8.7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2ZM17.5 10.1l4.2-2.6v8.9l-4.2-2.6Z\"/>","volume":"<path d=\"M2.5 8.9h4l5.4-4.2v14.6l-5.4-4.2H2.5Z\"/><path class=\"ln\" d=\"M15.2 9.3a3.8 3.8 0 0 1 0 5.5M17.7 6.5a7.5 7.5 0 0 1 0 11\"/>","walk":"<circle cx=\"12.4\" cy=\"4.6\" r=\"2.2\"/><path class=\"ln\" d=\"M8.7 19.8l2.4-5.5l1.9 2.2V19.8M11.1 14.3l0.9-5.2l-2.8 1.5l-1.4 2.8M12 9.1l1.8 2.8l2.8 0.9\"/>","wallet":"<path fill-rule=\"evenodd\" d=\"M5.7 2.8H19v4.6h1.6a0.9 0.9 0 0 1 0.9 0.9v12.4H5.1a2.5 2.5 0 0 1-2.5-2.5V5.9a3.1 3.1 0 0 1 3.1-3.1Zm0 2.1a1 1 0 0 0 0 2.1h11.2V4.9ZM16.7 12.9a1.4 1.4 0 1 0 0 2.8a1.4 1.4 0 0 0 0-2.8Z\"/>","water":"<path d=\"M2.7 7.9c2.4 0 2.4-2 4.7-2s2.4 2 4.6 2s2.4-2 4.7-2s2.4 2 4.6 2v3.2c-2.3 0-2.3-2-4.6-2s-2.4 2-4.7 2s-2.3-2-4.6-2s-2.4 2-4.7 2ZM2.7 14.8c2.4 0 2.4-2 4.7-2s2.4 2 4.6 2s2.4-2 4.7-2s2.4 2 4.6 2v3.2c-2.3 0-2.3-2-4.6-2s-2.4 2-4.7 2s-2.3-2-4.6-2s-2.4 2-4.7 2Z\"/>","weight":"<circle cx=\"12\" cy=\"4.8\" r=\"2.6\"/><path d=\"M6.5 8.7h10.9l3.3 12.3H3.2Z\"/>","window":"<path d=\"M2.6 6.2a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v1.5H2.6ZM2.6 9.8h18.7v7.7a2.7 2.7 0 0 1-2.7 2.7h-13.4a2.7 2.7 0 0 1-2.7-2.7Z\"/>","window-restore":"<path d=\"M2.7 10.4a2.7 2.7 0 0 1 2.7-2.7h8.2a2.7 2.7 0 0 1 2.7 2.7v7.2a2.7 2.7 0 0 1-2.7 2.7h-8.2a2.7 2.7 0 0 1-2.7-2.7ZM7.9 6.4V6.3a2.7 2.7 0 0 1 2.7-2.7h8.2a2.7 2.7 0 0 1 2.7 2.7v7.2a2.7 2.7 0 0 1-2.7 2.7h-1.1v-5.8a4 4 0 0 0-4-4Z\"/>","wrench":"<path d=\"M14.9 2.5a6 6 0 0 0-5.5 8.3L2.7 17.5V21.3H6.5l6.7-6.7a6 6 0 0 0 8.3-5.5l-3.5 1.3l-2.9-2.9l1.3-3.5Z\"/>","x-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM10.1 7.9L12.9 10.7l2.9-2.9l1.4 1.4l-2.9 2.9l2.9 2.9l-1.4 1.4l-2.9-2.9l-2.9 2.9l-1.4-1.4l2.9-2.9l-2.9-2.9Z\"/>","zap":"<path d=\"M13.9 2.5L5.2 13.3h6.1l-1.2 8.1l8.7-10.8h-6.1Z\"/>"};const FA = {"address-card":"id","adjust":"contrast","align-left":"align-left","angle-down":"down","angle-right":"chevron","angles-left":"chevrons-left","angles-right":"chevrons-right","arrow-down":"arrow-down","arrow-down-short-wide":"sort-asc","arrow-down-wide-short":"sort","arrow-left":"arrow-left","arrow-right":"arrow-right","arrow-right-arrow-left":"swap","arrow-right-from-bracket":"leave","arrow-right-to-bracket":"enter","arrow-rotate-right":"retry","arrow-trend-down":"trend-down","arrow-trend-up":"trend-up","arrow-up":"arrow-up","arrow-up-from-bracket":"share","arrow-up-right-from-square":"open","arrows-left-right":"arrows-h","arrows-rotate":"retry","arrows-to-dot":"focus","arrows-up-down-left-right":"move","at":"at","backward":"rewind","backward-fast":"rewind","balance-scale":"scale","ban":"ban","bars":"menu","basket-shopping":"cart","bell":"bell","bolt":"zap","bolt-lightning":"zap","book":"book","book-open":"book-open","box":"box","box-archive":"archive","box-open":"box","brain":"brain","bridge":"bridge","briefcase":"briefcase","briefcase-medical":"medical","broadcast-tower":"live","bug":"bug","bullhorn":"megaphone","bullseye":"target","burst":"burst","calendar":"calendar","calendar-day":"calendar","calendar-days":"calendar","camera":"camera","camera-cctv":"camera","camera-retro":"camera","camera-rotate":"camera-flip","camera-slash":"camera-off","campground":"tent","car":"car","caret-down":"down","cart":"cart","cart-plus":"cart","cart-shopping":"cart","chart-area":"chart","chart-bar":"chart","chart-column":"chart","chart-line":"chart","chart-simple":"chart","check":"check","check-circle":"check-circle","check-double":"check-double","chevron-down":"down","chevron-left":"back","chevron-right":"chevron","chevron-up":"up","child":"child","circle":"circle","circle-check":"check-circle","circle-dollar-to-slot":"donate","circle-dot":"record","circle-exclamation":"alert-circle","circle-half-stroke":"contrast","circle-info":"info","circle-minus":"minus-circle","circle-nodes":"nodes","circle-notch":"busy","circle-play":"play","circle-plus":"plus-circle","circle-question":"help","circle-user":"user-circle","circle-xmark":"x-circle","city":"city","clapperboard":"clapper","clipboard":"clipboard","clipboard-check":"clipboard-check","clipboard-list":"clipboard","clock":"clock","clock-rotate-left":"history","clone":"copy","closed-captioning":"cc","cloud":"cloud","cloud-arrow-up":"upload","cloud-bolt":"storm","cloud-moon":"cloud","cloud-rain":"cloud","cloud-showers-heavy":"cloud","cloud-slash":"cloud-off","cloud-sun":"cloud","code":"code","code-branch":"branch","code-commit":"commit","code-fork":"branch","coin":"coin","coins":"coin","comment":"chat","comment-dots":"chat","comment-slash":"chat-off","comments":"chat","compass":"compass","compress":"compress","cookie":"cookie","cookie-bite":"cookie","copy":"copy","couch":"couch","credit-card":"card","crown":"crown","cube":"box","cubes":"cubes","cut":"scissors","database":"database","desktop":"computer","diagram-project":"nodes","dice":"dice","dice-five":"dice","dice-six":"dice","display":"computer","dollar-sign":"dollar","door-closed":"door","door-open":"door","down-left-and-up-right-to-center":"compress","download":"download","droplet":"drop","ear-listen":"ear","earth-americas":"globe","earth-europe":"globe","ellipsis":"more","ellipsis-vertical":"more","envelope":"mail","eraser":"eraser","exchange-alt":"swap","expand":"expand","external-link":"open","eye":"eye","eye-slash":"eye-off","face-grin":"laugh","face-grin-squint":"laugh","face-grin-squint-tears":"laugh","face-grin-stars":"smile","face-laugh":"laugh","face-smile":"smile","faucet":"drop","faucet-drip":"drop","file":"file","file-audio":"file","file-code":"file-code","file-image":"image","file-lines":"file","file-pdf":"file","file-pen":"pencil","film":"film","filter":"filter","fire":"fire","fish":"fish","fist-raised":"fist","flag":"flag","flag-checkered":"finish","flask":"flask","flask-vial":"flask","floppy-disk":"save","folder":"folder","folder-open":"folder","folder-tree":"folder-tree","font":"text","forward":"fast-forward","forward-fast":"fast-forward","forward-step":"skip","gamepad":"game","gauge":"gauge","gauge-high":"gauge","gauge-simple":"gauge","gauge-simple-high":"gauge","gauge-simple-low":"gauge","gavel":"gavel","gear":"gear","gears":"gear","gem":"gem","ghost":"ghost","gift":"gift","globe":"globe","grid":"grid","grip":"grip","grip-vertical":"grip","hammer":"hammer","hand":"hand","hand-fist":"fist","hand-holding-dollar":"coin","hand-holding-heart":"care","hand-point-right":"hand","hand-pointer":"hand","handshake":"handshake","handshake-angle":"handshake","hard-drive":"drive","hashtag":"hash","hat-wizard":"wizard","hdd":"drive","heading":"heading","headphones":"headphones","headphones-simple":"headphones","headset":"headphones","heart":"heart","heart-crack":"heart-broken","heart-pulse":"heart-pulse","heartbeat":"heart-pulse","hiking":"mountain","hot-tub":"hot-tub","hot-tub-person":"hot-tub","hourglass":"hourglass","hourglass-end":"hourglass","hourglass-half":"hourglass","hourglass-start":"hourglass","house":"home","house-chimney":"home","house-signal":"home","icicles":"snow","icons":"shapes","id-card":"id","image":"image","images":"image","inbox":"inbox","infinity":"infinity","info-circle":"info","key":"key","keyboard":"keyboard","kit-medical":"medical","language":"language","laptop":"computer","layer-group":"layers","leaf":"leaf","left-right":"arrows-h","life-ring":"lifebuoy","lightbulb":"idea","link":"link","link-slash":"link-off","list":"list","list-check":"steps","list-ol":"list-ordered","list-ul":"list","location-dot":"pin","location-pin":"pin","lock":"lock","lungs":"lungs","magnifying-glass":"search","map":"map","map-location-dot":"map","map-marker-alt":"pin","map-pin":"pin","mask":"mask","message":"chat","microchip":"chip","microphone":"mic","microphone-lines":"mic","microphone-slash":"mic-off","minus":"minus","minus-circle":"minus-circle","mobile-screen":"phone","mobile-screen-button":"phone","money-bill":"money","money-bill-1":"money","money-bill-transfer":"money","money-bill-wave":"money","money-check":"money","moon":"moon","mountain":"mountain","mountain-sun":"mountain","mug-hot":"mug","mug-saucer":"mug","music":"music","network-wired":"nodes","newspaper":"news","object-group":"group","paint-brush":"palette","paintbrush":"palette","palette":"palette","paper-plane":"plane","parking":"parking","paste":"clipboard","pause":"pause","paw":"paw","pen":"pencil","pen-nib":"pencil","pen-to-square":"pencil","pencil":"pencil","people-arrows":"members","people-group":"members","person-hiking":"mountain","person-shelter":"shelter","person-swimming":"water","person-walking":"walk","phone":"phone","phone-slash":"phone-off","photo-film":"film","piggy-bank":"piggy","plane":"airplane","plane-departure":"airplane","play":"play","plug":"plug","plug-circle-bolt":"plug","plug-circle-check":"plug","plug-circle-xmark":"plug","plus":"plus","plus-circle":"plus-circle","print":"print","puzzle":"puzzle","puzzle-piece":"puzzle","puzzle-piece-simple":"puzzle","question":"help","quote-left":"quote","quote-right":"quote","radio":"radio","ranking-star":"ranking","recycle":"recycle","reply":"reply","restroom":"restroom","right-from-bracket":"leave","right-left":"swap","right-to-bracket":"enter","road":"road","robot":"robot","rocket":"rocket","rotate":"retry","rotate-back":"undo","rotate-left":"retry","rotate-right":"retry","route":"route","rss":"rss","satellite-dish":"dish","save":"save","scale-balanced":"scale","scissors":"scissors","screwdriver-wrench":"wrench","scroll":"scroll","search":"search","seedling":"seedling","server":"server","shapes":"shapes","share-nodes":"nodes","shield":"shield","shield-halved":"shield","shirt":"shirt","signal":"wifi","signature":"signature","sitemap":"nodes","skull":"skull","skull-crossbones":"skull","slash":"slash","sliders":"sliders","sliders-h":"sliders","smog":"cloud","snowflake":"snow","sparkles":"spark","spinner":"busy","square":"square","square-parking":"parking","star":"star","star-of-life":"spark","step-forward":"skip","stop":"stop","store":"store","suitcase":"briefcase","suitcase-medical":"medical","sun":"sun","sword":"sword","table":"table","table-cells":"grid","table-columns":"columns","table-list":"table","tag":"tag","tags":"tag","television":"tv","terminal":"terminal","text-height":"text","th":"grid","thumbs-up":"thumbs-up","thumbtack":"tack","ticket":"ticket","timeline":"timeline","times":"close","toolbox":"toolbox","tower-broadcast":"live","tower-cell":"live","train":"train","trash":"trash","trash-can":"trash","tree":"tree","triangle-exclamation":"alert","trophy":"trophy","tv":"tv","umbrella":"umbrella","umbrella-beach":"umbrella","undo":"undo","unlock":"lock","up-right-and-down-left-from-center":"expand","up-right-from-square":"open","upload":"upload","user":"user","user-astronaut":"user","user-check":"user-check","user-circle":"user-circle","user-edit":"user-pen","user-group":"members","user-lock":"user-lock","user-minus":"user-minus","user-pen":"user-pen","user-plus":"invite","user-secret":"user","user-shield":"shield","user-slash":"user-off","user-tag":"user-tag","users":"members","utensils":"food","video":"video","video-slash":"video","volume-high":"volume","volume-low":"volume","volume-off":"mute","volume-xmark":"mute","wallet":"wallet","wand-magic":"spark","wand-magic-sparkles":"spark","water":"water","wave-square":"wave","weight-hanging":"weight","wifi":"wifi","wind":"wind","window-maximize":"window","window-restore":"window-restore","wrench":"wrench","xmark":"close","xmark-circle":"x-circle"};const FB = {"youtube":"youtube","square-youtube":"youtube","twitch":"twitch","discord":"discord","github":"github","square-github":"github","x-twitter":"x","square-x-twitter":"x","twitter":"x","kick":"kick","kickstarter-k":"kick","kickstarter":"kickstarter","google":"google","tiktok":"tiktok","threads":"threads","spotify":"spotify","soundcloud":"soundcloud","reddit":"reddit","reddit-alien":"reddit","tumblr":"tumblr","hacker-news":"ycombinator","line":"line","paypal":"paypal","patreon":"patreon","mastodon":"mastodon","linux":"linux","instagram":"instagram","facebook":"facebook","facebook-f":"facebook","cloudflare":"cloudflare","brave":"brave","bluesky":"bluesky","bitcoin":"bitcoin","apple":"apple","telegram":"telegram","whatsapp":"whatsapp","steam":"steam","snapchat":"snapchat","pinterest":"pinterest","vimeo":"vimeo","vimeo-v":"vimeo","npm":"npm","node":"nodedotjs","node-js":"nodedotjs","docker":"docker","python":"python","android":"android","chrome":"googlechrome","firefox":"firefoxbrowser","firefox-browser":"firefoxbrowser","gitlab":"gitlab","ubuntu":"ubuntu","raspberry":"raspberrypi","raspberry-pi":"raspberrypi","stripe":"stripe","cc-stripe":"stripe","signal":"signal","matrix":"matrix","medium":"medium","wikipedia":"wikipedia","wikipedia-w":"wikipedia","ethereum":"ethereum"};// Font Awesome's style, size, layout and animation classes: they say how, not what.@@@ -188,13 +188,13 @@<symbol id="ovg-card-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3.7" y="5.8" width="16.7" height="12.3" rx="1.8"/><path d="M3.7 10.3h16.7M6.7 14.6h3.5"/></symbol><symbol id="ovg-card-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z"/></symbol><symbol id="ovg-card-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z"/></g><rect x="3.7" y="5.8" width="16.7" height="12.3" rx="1.8"/><path d="M3.7 10.3h16.7M6.7 14.6h3.5"/></symbol>--<symbol id="ovg-care" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>--<symbol id="ovg-care-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>--<symbol id="ovg-care-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>--<symbol id="ovg-care-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>--<symbol id="ovg-care-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>--<symbol id="ovg-care-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M17 11s-4.1-2.4-4.1-5.4a2.3 2.3 0 0 1 4.1-1.6a2.3 2.3 0 0 1 4.1 1.6c0 2.9-4.1 5.4-4.1 5.4Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M3.5 16.2h3.2l4.3 3.2h5.9a2.1 2.1 0 0 0 0-4.3H13.3M7.9 16.2l2.3-2.1h3.6"/></symbol>--<symbol id="ovg-care-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M17 11s-4.1-2.4-4.1-5.4a2.3 2.3 0 0 1 4.1-1.6a2.3 2.3 0 0 1 4.1 1.6c0 2.9-4.1 5.4-4.1 5.4Z"/><path class="ln" d="M3.5 16.2h3.2l4.3 3.2h5.9a2.1 2.1 0 0 0 0-4.3H13.3M7.9 16.2l2.3-2.1h3.6"/></g><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>++<symbol id="ovg-care" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>++<symbol id="ovg-care-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>++<symbol id="ovg-care-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>++<symbol id="ovg-care-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>++<symbol id="ovg-care-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>++<symbol id="ovg-care-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M12 11s-4.3-2.6-4.3-5.6a2.3 2.3 0 0 1 4.3-1.5a2.3 2.3 0 0 1 4.3 1.5c0 3-4.3 5.6-4.3 5.6Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M3.8 13.8v6M3.8 15.2h3.1l3.3 2.7h7.5a1.7 1.7 0 0 0 0-3.4h-3.9"/></symbol>++<symbol id="ovg-care-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M12 11s-4.3-2.6-4.3-5.6a2.3 2.3 0 0 1 4.3-1.5a2.3 2.3 0 0 1 4.3 1.5c0 3-4.3 5.6-4.3 5.6Z"/><path class="ln" d="M3.8 13.8v6M3.8 15.2h3.1l3.3 2.7h7.5a1.7 1.7 0 0 0 0-3.4h-3.9"/></g><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol><symbol id="ovg-cart" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol><symbol id="ovg-cart-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol><symbol id="ovg-cart-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol>@@@ -521,13 +521,13 @@<symbol id="ovg-eye-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z"/><circle cx="12" cy="12" r="2.7"/></symbol><symbol id="ovg-eye-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z"/><circle cx="12" cy="12" r="1.6"/></symbol><symbol id="ovg-eye-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z"/><circle cx="12" cy="12" r="1.6"/></g><path d="M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z"/><circle cx="12" cy="12" r="2.7"/></symbol>--<symbol id="ovg-eye-off" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>--<symbol id="ovg-eye-off-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>--<symbol id="ovg-eye-off-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>--<symbol id="ovg-eye-off-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>--<symbol id="ovg-eye-off-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>++<symbol id="ovg-eye-off" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>++<symbol id="ovg-eye-off-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>++<symbol id="ovg-eye-off-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>++<symbol id="ovg-eye-off-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>++<symbol id="ovg-eye-off-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol><symbol id="ovg-eye-off-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M4.6 4.6l14.8 14.8"/></symbol>--<symbol id="ovg-eye-off-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z"/><path class="ln" d="M4.6 4.6l14.8 14.8"/></g><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>++<symbol id="ovg-eye-off-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z"/><path class="ln" d="M4.6 4.6l14.8 14.8"/></g><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol><symbol id="ovg-fast-forward" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol><symbol id="ovg-fast-forward-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol><symbol id="ovg-fast-forward-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol>@@@ -575,13 +575,13 @@<symbol id="ovg-fire-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/></symbol><symbol id="ovg-fire-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z"/></symbol><symbol id="ovg-fire-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z"/></g><path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/></symbol>--<symbol id="ovg-fish" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>--<symbol id="ovg-fish-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>--<symbol id="ovg-fish-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>--<symbol id="ovg-fish-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>--<symbol id="ovg-fish-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>--<symbol id="ovg-fish-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M7.6 12c2.1-3.6 4.8-5.4 7.9-5.4 2.9 0 5 2.2 6.1 5.4-1.1 3.2-3.2 5.4-6.1 5.4-3.1 0-5.8-1.8-7.9-5.4ZM15.7 10.6a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z"/><path d="M8.4 12 2.9 7.4v9.2Z"/></symbol>--<symbol id="ovg-fish-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M7.6 12c2.1-3.6 4.8-5.4 7.9-5.4 2.9 0 5 2.2 6.1 5.4-1.1 3.2-3.2 5.4-6.1 5.4-3.1 0-5.8-1.8-7.9-5.4ZM15.7 10.6a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z"/><path d="M8.4 12 2.9 7.4v9.2Z"/></g><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>++<symbol id="ovg-fish" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>++<symbol id="ovg-fish-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>++<symbol id="ovg-fish-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>++<symbol id="ovg-fish-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>++<symbol id="ovg-fish-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>++<symbol id="ovg-fish-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M8.7 12c1.9-3.5 4.6-5.3 7.6-5.3c2.8 0 4.6 2.2 5.4 5.3c-0.8 3.1-2.6 5.3-5.4 5.3c-3 0-5.7-1.8-7.6-5.3ZM16.2 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M8.7 12L4.4 8.9M8.7 12l-4.3 3.1"/></symbol>++<symbol id="ovg-fish-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M8.7 12c1.9-3.5 4.6-5.3 7.6-5.3c2.8 0 4.6 2.2 5.4 5.3c-0.8 3.1-2.6 5.3-5.4 5.3c-3 0-5.7-1.8-7.6-5.3ZM16.2 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0Z"/><path class="ln" d="M8.7 12L4.4 8.9M8.7 12l-4.3 3.1"/></g><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol><symbol id="ovg-fist" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol><symbol id="ovg-fist-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol><symbol id="ovg-fist-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol>@@@ -728,11 +728,13 @@<symbol id="ovg-hand-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6"/></symbol><symbol id="ovg-hand-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/></symbol><symbol id="ovg-hand-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/></g><path d="M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6"/></symbol>--<symbol id="ovg-handshake" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>--<symbol id="ovg-handshake-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>--<symbol id="ovg-handshake-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>--<symbol id="ovg-handshake-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>--<symbol id="ovg-handshake-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>++<symbol id="ovg-handshake" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>++<symbol id="ovg-handshake-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>++<symbol id="ovg-handshake-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>++<symbol id="ovg-handshake-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>++<symbol id="ovg-handshake-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>++<symbol id="ovg-handshake-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M2.3 9.2h2.7v6.8H2.3ZM19 9.2h2.7v6.8H19Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M5.6 10.8h0.3l3.4-2.6l2.9 1.3L14.6 8.1l3.4 2.6h0.4M5.9 10.8l5.4 5.4a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.4 12.8l-3.9-3.9l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>++<symbol id="ovg-handshake-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M2.3 9.2h2.7v6.8H2.3ZM19 9.2h2.7v6.8H19Z"/><path class="ln" d="M5.6 10.8h0.3l3.4-2.6l2.9 1.3L14.6 8.1l3.4 2.6h0.4M5.9 10.8l5.4 5.4a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.4 12.8l-3.9-3.9l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></g><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol><symbol id="ovg-hash" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol><symbol id="ovg-hash-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol><symbol id="ovg-hash-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol>BBinary files a/ov-glyphs.woff2 and b/ov-glyphs.woff2 differ@@@ -1,4 +1,4 @@--/* Generated by scripts/build-locker-core.js from openvibe-sdk 0.150.0 (src/locker). Do not edit: change the SDK,++/* Generated by scripts/build-locker-core.js from openvibe-sdk 0.152.0 (src/locker). Do not edit: change the SDK,* release it, bump the pin, and run the script. The SDK's files, unchanged but for the names of require and module:* bytes.js 80a5a560c683f489* errors.js e73f94b7711452e7@@@ -1711,5 +1711,5 @@ __ovLockerModule.exports = { WORDS };if (!cache[key]) { const m = { exports: {} }; cache[key] = m; defs[key](m, m.exports, req); }return cache[key].exports;}-- root.OVLockerCore = Object.assign({}, req('index'), { SDK_VERSION: "0.150.0" });++ root.OVLockerCore = Object.assign({}, req('index'), { SDK_VERSION: "0.152.0" });})(typeof globalThis !== 'undefined' ? globalThis : this);@@@ -1,12 +1,12 @@{"name": "openvibe-shared",-- "version": "4.213.0",++ "version": "4.214.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-shared",-- "version": "4.213.0",++ "version": "4.214.0","license": "MIT","dependencies": {"clean-css": "^5.3.3",@@@ -21,7 +21,7 @@"@electric-sql/pglite": "^0.5.8","express": "^4.22.3","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.408.0",-- "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.150.0"++ "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.152.0"}},"node_modules/@electric-sql/pglite": {@@@ -1172,9 +1172,9 @@}},"node_modules/openvibe-sdk": {-- "version": "0.150.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.150.0",-- "integrity": "sha512-5k2PovDQ2zhYXxLHtNNm1Q3rzPMXLpdh0lIYdl9kfa6D2/X2gYozT5W0CHRCIMAK4UhjbsZaXOSMM8GbkJWsNw==",++ "version": "0.152.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.152.0",++ "integrity": "sha512-/nZbjF9KTJPa3582v60tx238BBDa47tJAmxVkbgSWRReXgMHHGAhV8FGKqFmxPHOxLzvMgVp0Ei4mz4A4jsUvQ==","dev": true,"license": "MIT","bin": {@@@ -1,6 +1,6 @@{"name": "openvibe-shared",-- "version": "4.213.0",++ "version": "4.214.0","description": "Shared navbar, footer, themes, icons, legal pages, SEO, auth and analytics for every OpenVibe site","main": "index.js","bin": {@@@ -9,6 +9,8 @@"exports": {".": "./index.js","./offer-card": "./offer-card.js",++ "./ov-arrange": "./ov-arrange.js",++ "./ov-arrange-core": "./ov-arrange-core.js","./quest": "./quest.js","./quest-guide": "./guide.js","./account-switcher": "./account-switcher.js",@@@ -210,6 +212,6 @@"@electric-sql/pglite": "^0.5.8","express": "^4.22.3","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.408.0",-- "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.150.0"++ "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.152.0"}}nnew file mode 100755@@@ -0,0 +1,47 @@++#!/usr/bin/env node++'use strict';++/**++ * Writes ov-arrange-core.js: openvibe-sdk/ui-layout for the browser, as one classic script that sets++ * window.OVArrangeCore. One implementation of the rules, not two: this copies the SDK's own src/ui-layout.js++ * unchanged but for the name of module.exports, and records the SDK version and the file's SHA-256.++ * test/ov-arrange-core.test.js checks the file is current and runs the SDK's own cases through it.++ *++ * node scripts/build-arrange-core.js [<path to openvibe-sdk>] # default: node_modules/openvibe-sdk++ */++const fs = require('fs');++const path = require('path');++const crypto = require('crypto');++++const ROOT = path.join(__dirname, '..');++++function build(sdkDir = path.join(ROOT, 'node_modules', 'openvibe-sdk')) {++ const pkg = JSON.parse(fs.readFileSync(path.join(sdkDir, 'package.json'), 'utf8'));++ const file = path.join(sdkDir, 'src', 'ui-layout.js');++ if (!fs.existsSync(file)) throw new Error(`openvibe-sdk ${pkg.version} has no src/ui-layout.js: release the SDK with ui-layout first`);++ const src = fs.readFileSync(file, 'utf8');++ const bad = [...src.matchAll(/require\((['"])([^'"]+)\1\)/g)].map((m) => m[2]);++ if (bad.length) throw new Error(`src/ui-layout.js requires ${bad.join(', ')}: the browser build takes a self-contained module`);++ const hash = crypto.createHash('sha256').update(src).digest('hex').slice(0, 16);++ // The one change: module.exports takes the browser's own name, so the browser file says no module.++ const body = src.replace(/\bmodule\.exports\b/g, '__ovArrangeCoreModule.exports');++ return `/* Generated by scripts/build-arrange-core.js from openvibe-sdk ${pkg.version} (src/ui-layout.js). Do not edit:++ * change the SDK, release it, bump the pin, and run the script. The SDK's file, unchanged but for the name of++ * module.exports:++ * ui-layout.js ${hash}++ */++(function (root) {++ 'use strict';++ if (!root || root.OVArrangeCore) return;++ const __ovArrangeCoreModule = { exports: {} };++${body}++ root.OVArrangeCore = __ovArrangeCoreModule.exports;++})(typeof globalThis !== 'undefined' ? globalThis : this);++`;++}++++if (require.main === module) {++ const out = build(process.argv[2]);++ fs.writeFileSync(path.join(ROOT, 'ov-arrange-core.js'), out);++ console.log('ov-arrange-core.js written');++}++module.exports = { build };@@@ -22,11 +22,14 @@ const FILES = ['ov-mark.js', 'ov-glyphs.js', 'ov-brand.woff2', 'ov-look.js', 'ov'ov-drop.js',// 4.193.0: the one tooltip (Sign in, the menu button, short labels).'ov-tip.js',++ // 2026-11-11: the Arrange editor, loaded only when someone presses Arrange.++ 'ov-arrange.js',// 2026-11-10: soft pages (intent prefetch, cross-document view transitions); not loaded by navbar.js yet.'soft.js'];// The files dock.js and notification-ui.js load from beside themselves: their own tables, in their own files.const OWN = { 'dock.js': { name: 'DOCK_REV', files: ['dock-vibe.js', 'dock-code.js', 'dock-mount.js', 'dock-runs.js', 'ai-marks-client.js', 'action-center.js', 'dock-timeline.js', 'dock-actor.js', 'dock-agent.js', 'dock-timer.js', 'dock-share.js', 'dock-card.js', 'dock-chat-edits.js'] },'notification-ui.js': { name: 'NOTIFY_REV', files: ['notification-live.js'] },++ 'ov-arrange.js': { name: 'ARRANGE_CORE_REV', files: ['ov-arrange-core.js'] },'footer.js': { name: 'FOOTER_REV', files: ['shipped.js'] }, 'ov-thread.js': { name: 'THREAD_REV', files: ['ov-composer.js', 'ov-combo.js'] }, 'ov-composer.js': { name: 'COMPOSER_REV', files: ['ov-window.js'] }, 'ov-user.js': { name: 'USER_REV', files: ['ov-window.js'] }, 'ov-wallet.js': { name: 'WALLET_REV', files: ['ov-window.js'] }, 'ov-window.js': { name: 'WINDOW_REV', files: ['ov-float.js'] }, 'dock-vibe.js': { name: 'VIBE_REV', files: ['ov-composer.js'] }, 'boost.js': { name: 'BOOST_REV', files: ['route-transition.js'] }, 'dock-actor.js': { name: 'ACTOR_REV', files: ['ov-window.js', 'agent-sheet.js'] } };const table = (name, files) => ` const ${name} = { ${files.map((f) => `'${f}': '${hashAsset(fs.readFileSync(path.join(ROOT, f)))}'`).join(', ')} };`;function writeOwn() {@@@ -105,7 +105,8 @@const res = await fetch(fedcmLogin, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: cred.token, nonce }) });const data = await res.json().catch(() => ({}));if (!res.ok) return { ok: false, reason: data.error || `http-${res.status}`, auto: !!cred.isAutoSelected };-- try { sessionStorage.setItem('ov_sso_hint', 'account'); localStorage.setItem('ov_sso_hint', 'account'); } catch { /* */ }++ const who = data.user && /^[A-Za-z0-9_.-]{1,64}$/.test(data.user.username || '') ? ':' + data.user.username : '';++ try { sessionStorage.setItem('ov_sso_hint', 'account' + who); localStorage.setItem('ov_sso_hint', 'account' + who); } catch { /* */ }return { ok: true, user: data.user || null, auto: !!cred.isAutoSelected };} catch (err) { return { ok: false, reason: 'network' }; }}@@@ -1,5 +1,5 @@{-- "generated": "2026-11-11T19:14:06.693Z",++ "generated": "2026-11-12T00:45:28.117Z","chrome": "/usr/bin/google-chrome","px": 96,"target": 0.79,@@@ -4975,26 +4975,26 @@},"care": {"ink": [-- 0.7813,-- 0.7396++ 0.7604,++ 0.7813],"off": [-0.0156,-- -0.0052++ -0.0156],"com": [-- 0.0702,-- 0.039++ -0.019,++ 0.0092],"sw": 2,-- "n": 1855,++ "n": 2010,"geo": [-- 0.6958,-- 0.6526++ 0.6749,++ 0.6904],"geoOff": [-- -0.0146,-- -0.0054++ -0.0167,++ -0.0118]},"city": {@@@ -5071,26 +5071,26 @@},"eye-off": {"ink": [-- 0.8021,-- 0.7188++ 0.7917,++ 0.7292],"off": [-- 0.0052,-- -0.0052++ 0,++ 0],"com": [-- -0.0044,-- 0.0063++ -0.0096,++ 0.0092],"sw": 2,-- "n": 2109,++ "n": 2404,"geo": [-- 0.7,-- 0.6208++ 0.7083,++ 0.625],"geoOff": [-- 0.0042,-- -0.0021++ 0,++ 0]},"plane": {@@@ -7904,24 +7904,24 @@"fish": {"ink": [0.7917,-- 0.4792++ 0.5],"off": [-- 0,++ 0.0208,0],"com": [-- -0.0163,-- -0.0004++ 0.0412,++ -0.002],"sw": 2,-- "n": 1790,++ "n": 1669,"geo": [0.7,-- 0.3833++ 0.4],"geoOff": [-- 0.0042,++ 0.025,0]},@@@ -8127,18 +8127,18 @@-0.0052],"com": [-- 0.0087,-- -0.002++ -0.0014,++ -0.0096],"sw": 2,-- "n": 2077,++ "n": 2000,"geo": [0.6958,-- 0.4166++ 0.4089],"geoOff": [-0.0021,-- -0.0001++ -0.0039]},"wizard": {@@@ -9086,6 +9086,30 @@],"norm": true,"icons": {++ "handshake": {++ "ink": [++ 0.8125,++ 0.5104++ ],++ "off": [++ 0,++ -0.0052++ ],++ "com": [++ 0.0015,++ -0.0074++ ],++ "sw": 2.6,++ "n": 2328,++ "geo": [++ 0.8083,++ 0.3964++ ],++ "geoOff": [++ 0,++ -0.006++ ]++ },"focus": {"ink": [0.7917,@@@ -9280,25 +9304,25 @@},"fish": {"ink": [-- 0.7917,++ 0.7813,0.4583],"off": [-- 0.0104,++ 0.0156,0],"com": [-- 0.0343,-- 0.0022++ 0.0484,++ 0.0018],-- "sw": 0,-- "n": 2200,++ "sw": 2.6,++ "n": 2132,"geo": [-- 0.7792,-- 0.45++ 0.7208,++ 0.4417],"geoOff": [-- 0.0104,++ 0.0437,0]},@@@ -12736,26 +12760,26 @@},"care": {"ink": [-- 0.8021,-- 0.7396++ 0.7604,++ 0.7813],"off": [-0.0156,-0.0052],"com": [-- 0.0837,-- 0.0442++ -0.0192,++ 0.0224],"sw": 2.6,-- "n": 2258,++ "n": 2329,"geo": [-- 0.7336,-- 0.6782++ 0.65,++ 0.7143],"geoOff": [-- 0.0126,-- -0.0308++ -0.0167,++ -0.0322]},"news": {@@@ -434,6 +434,44 @@ const USER = { id: 7, username: 'vibe', display_name: 'Vibe', avatar_url: null,'/auth/login?silent=1&next=' + encodeURIComponent(href), 'preserves the page, query and fragment');}++ // ── 12. First paint from the sign-in hint (no Sign In flash for a signed-in person) ──++ {++ // The hint saying account draws the avatar before the session check; a failed check corrects it.++ const { navbar, storage } = loadNavbar({++ hostname: 'openvibe.blog', cookie: 'ov_sso_hint=account',++ fetch: async () => jsonResponse(401, {}),++ });++ navbar.init({ service: 'blog', sessionUrl: '/auth/me', fedcm: false, silentLogin: false });++ assert.ok(navbar.getElement().innerHTML.includes('openvibe-navbar-avatar'), 'account hint: avatar on the first paint');++ assert.ok(!navbar.getElement().innerHTML.includes('openvibe-navbar-login'), 'account hint: no Sign In on the first paint');++ await navbar.refreshAuth();++ assert.ok(navbar.getElement().innerHTML.includes('openvibe-navbar-login'), 'a failed check corrects the bar to guest');++ assert.strictEqual(storage.getItem('openvibe_seen_accounts'), null, 'the hint is not remembered as an account');++ }++ {++ // A named hint shows the account's own name; the picture stays the neutral initial.++ const { navbar } = loadNavbar({++ hostname: 'openvibe.blog', cookie: 'ov_sso_hint=account%3Avibe',++ fetch: async () => jsonResponse(401, {}),++ });++ navbar.init({ service: 'blog', sessionUrl: '/auth/me', fedcm: false, silentLogin: false });++ const html = navbar.getElement().innerHTML;++ assert.ok(html.includes('openvibe-navbar-avatar'), 'named hint: avatar on the first paint');++ assert.ok(html.includes('alt="vibe"'), 'named hint: the hint name is the avatar alt');++ assert.ok(!html.includes('openvibe-navbar-login'), 'named hint: no Sign In on the first paint');++ }++ {++ // An explicit guest hint keeps the guest bar and never starts the silent round trip.++ const { navbar, calls } = loadNavbar({++ hostname: 'openvibe.blog', cookie: 'ov_sso_hint=guest', referrer: 'https://openvibe.network/',++ fetch: async () => jsonResponse(401, {}),++ });++ navbar.init({ service: 'blog', sessionUrl: '/auth/me', fedcm: false, silentLogin: '/auth/login?silent=1&next={url}' });++ assert.ok(navbar.getElement().innerHTML.includes('openvibe-navbar-login'), 'guest hint: guest bar on the first paint');++ await navbar.refreshAuth();++ assert.strictEqual(calls.filter(c => c.navigation).length, 0, 'guest hint: no silent navigation');++ }++console.log('navbar-auth: all tests passed');})().catch((err) => {console.error(err);nnew file mode 100644@@@ -0,0 +1,138 @@++'use strict';++// The Arrange editor in a real headless Chrome (make your own controls, stage 2): a surface's real parts are++// placed from the person's layout, arrow keys move and Shift+arrows resize, a refused move says why and leaves++// the layout alone, every move is announced, the part sheet hides a part, Undo/Reset/Save work, and OpenVibe's++// suggestion is previewed on the parts and applied only with Keep. Skipped (exit 0) without Chrome.++const assert = require('node:assert/strict');++const fs = require('node:fs');++const os = require('node:os');++const path = require('node:path');++const http = require('node:http');++const h = require('../browser-harness');++assert.doesNotThrow(() => require('../ov-arrange'), 'ov-arrange.js loads (browser-only: Node takes the early return)');++if (process.env.OV_SKIP_BROWSER === '1' || !h.findChrome()) {++ console.log('ov-arrange-chrome: skipped (no Chrome; set CHROME_BIN)');++ process.exit(0);++}++const root = path.join(__dirname, '..');++const catalog = {++ id: 'bot.controls', version: 1, name: 'Robot controls', devices: ['phone', 'tablet', 'computer'],++ grid: { columns: { phone: 4, tablet: 8, computer: 12 }, cell_px: { phone: 64, tablet: 64, computer: 64 } },++ theme_tokens: ['danger', 'surface', 'accent', 'text'],++ parts: [++ { id: 'stop', name: 'Stop', kind: 'button', required: true, pressed: true, min: { w: 2, h: 2, px: 64 }, sizes: [{ w: 2, h: 2 }, { w: 2, h: 1 }], styles: { tints: ['danger'], shapes: ['round'], label: true }, bindings: { keys: ['Space'], gamepad: ['south'] } },++ { id: 'stick', name: 'Drive stick', kind: 'stick', required: false, pressed: true, min: { w: 2, h: 2 }, styles: { tints: ['surface'], shapes: ['round'], label: false }, bindings: { keys: ['W', 'A', 'S', 'D'], gamepad: ['left-stick'] } },++ { id: 'head', name: 'Head', kind: 'slider', required: false, pressed: true, min: { w: 2, h: 1 }, styles: { tints: ['accent'], shapes: ['pill'], label: true }, bindings: { keys: [], gamepad: [] } },++ { id: 'battery', name: 'Battery', kind: 'readout', required: false, pressed: false, min: { w: 1, h: 1 }, styles: { tints: ['text', 'surface'], shapes: ['pill', 'square'], label: true }, bindings: { keys: [], gamepad: [] } },++ ],++};++const page = `<!doctype html><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">++<style>body{margin:0;background:#0d1117;color:#e6edf3;font:14px system-ui}#surface{display:grid;gap:8px;padding:12px;width:390px}++[data-ov-part]{background:#1b2230;border:1px solid #334;border-radius:10px;padding:8px;min-height:24px}</style>++<main id="surface">${catalog.parts.map((p) => `<section data-ov-part="${p.id}" id="${p.id}">${p.name}</section>`).join('')}</main>++<script>window.CATALOG=${JSON.stringify(catalog)};</script>++<script src="/ov-arrange-core.js"></script><script src="/ov-arrange.js"></script>++<script>++window.calls = {};++window.editor = OVArrange.open({++ surface: document.getElementById('surface'), catalog: window.CATALOG, layout: null, device: 'phone',++ core: window.OVArrangeCore,++ onSave: (layout) => { window.calls.save = layout; return { ok: true }; },++ onShare: async () => ({ url: 'https://openvibe.bot/l/abc' }),++ onReset: async () => { window.calls.reset = true; return { ok: true }; },++ onAsk: async (words, request) => {++ window.calls.asked = { words, request };++ const layout = OVArrangeCore.applyDefaults(window.CATALOG, 'phone');++ layout.parts = layout.parts.map((p) => p.id === 'stop' ? { ...p, place: { x: 1, y: 3, w: 2, h: 2 } } : p);++ layout.name = 'Big Stop'; layout.summary = 'Stop is first, at 2 by 2.';++ return { ok: true, layout, summary: 'Stop is first, at 2 by 2.', reasons: [] };++ },++ confirm: () => true,++});++</script>`;++const server = http.createServer((req, res) => {++ const u = new URL(req.url, 'http://x');++ if (u.pathname === '/ov-arrange.js' || u.pathname === '/ov-arrange-core.js') {++ res.writeHead(200, { 'content-type': 'application/javascript' });++ return res.end(fs.readFileSync(path.join(root, u.pathname.slice(1))));++ }++ res.writeHead(200, { 'content-type': 'text/html; charset=utf-8' });++ res.end(page);++});++(async () => {++ await new Promise((ok) => server.listen(0, '127.0.0.1', ok));++ const base = `http://127.0.0.1:${server.address().port}`;++ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ov-arrange-'));++ const browser = await h.launch({ tmpDir });++ const wait = (ms) => new Promise((r) => setTimeout(r, ms));++ try {++ const context = await browser.newContext();++ const p = await h.openPage(browser, context, { width: 390, height: 800 });++ await p.goto(base + '/', { maxMs: 5000 });++ const until = async (expr) => { const end = Date.now() + 5000; while (Date.now() < end) { const v = await p.evaluate(expr); if (v) return v; await wait(40); } return false; };++ const evalv = (expr) => p.evaluate(expr);++ assert.ok(await until(`!!window.editor && document.querySelectorAll('[data-ov-part]').length === 4`), 'the editor opened on the real parts');++ assert.ok(await evalv(`document.querySelector('[data-ov-part="stop"]').style.gridColumn === '1 / span 2'`), 'Stop is placed by the default layout');++ assert.ok(await evalv(`document.querySelector('[data-ov-part="stick"]').style.gridColumn !== ''`), 'the stick is placed too');++++ // Arrow keys move, and the move is announced. The stick goes down first so Stop has room (nothing may++ // cover a required part: Stop itself stays where it is until the way is clear).++ for (let i = 0; i < 2; i++) await evalv(`(() => { const el = document.getElementById('stick'); el.focus(); el.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true })); })()`);++ await evalv(`(() => { const el = document.getElementById('stop'); el.focus(); el.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true })); })()`);++ const moved = await evalv(`window.editor.layout().parts.find((p) => p.id === 'stop').place`);++ assert.equal(moved.x, 1, 'ArrowRight moved Stop one cell');++ assert.ok(/Stop moved to column 2/.test(await evalv(`document.querySelector('.ov-arrange-status').textContent`)), 'the move is said in the status line');++ assert.ok(/column 2/.test(await evalv(`document.querySelector('[aria-live="polite"][aria-atomic="true"]').textContent`)), 'and announced');++++ // A refused resize says why and leaves the layout alone.++ const before = JSON.stringify(await evalv(`window.editor.layout()`));++ await evalv(`(() => { const el = document.getElementById('stop'); el.focus(); el.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', shiftKey: true, bubbles: true })); })()`);++ assert.ok(/Can't do that: Stop has to be at least 2 × 2 cells\./.test(await evalv(`document.querySelector('.ov-arrange-status').textContent`)), 'a too-small Stop is refused with the reason');++ assert.equal(JSON.stringify(await evalv(`window.editor.layout()`)), before, 'the refused resize changed nothing');++++ // Undo takes the move back.++ await evalv(`document.querySelector('[data-undo]').click()`);++ assert.equal(await evalv(`window.editor.layout().parts.find((p) => p.id === 'stop').place.x`), 0, 'Undo restored Stop');++++ // The part sheet hides the battery (a layout may hide what is not required), and Save sends it.++ await evalv(`(() => { const el = document.getElementById('battery'); el.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true, button: 0, pointerId: 1, clientX: 30, clientY: 300 })); })()`);++ await evalv(`document.querySelector('.ov-arrange-style').click()`);++ assert.ok(await until(`!!document.querySelector('.ov-arrange-sheet')`), 'the part sheet opened');++ await evalv(`(() => { const c = document.querySelector('.ov-arrange-sheet [data-visible]'); c.checked = false; c.dispatchEvent(new Event('change', { bubbles: true })); })()`);++ assert.ok(await evalv(`document.getElementById('battery').hidden === true`), 'hiding the battery hides its part');++ await evalv(`document.querySelector('.ov-arrange-sheet [data-close]').click()`);++ await evalv(`document.querySelector('[data-save]').click()`);++ assert.ok(await until(`!!window.calls.save`), 'Save sent the layout');++ assert.equal(await evalv(`window.calls.save.parts.find((p) => p.id === 'battery').visible`), false, 'the saved layout carries the hidden battery');++++ // Ask OpenVibe: previewed on the real parts, kept only with Keep.++ await evalv(`(() => { const f = document.querySelector('form[data-ask]'); f.querySelector('input').value = 'put Stop first and make it big'; f.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true })); })()`);++ assert.ok(await until(`!!document.querySelector('.ov-arrange-preview')`), 'the suggestion is previewed');++ assert.ok(/Stop is first/.test(await evalv(`document.querySelector('.ov-arrange-preview').textContent`)), 'the preview says what changed');++ assert.equal(await evalv(`document.getElementById('stop').style.gridColumn`), '2 / span 2', 'the suggestion is shown on the real Stop');++ assert.equal(await evalv(`document.getElementById('stop').style.gridRow`), '4 / span 2', 'and in its row');++ await evalv(`document.querySelector('.ov-arrange-preview [data-keep]').click()`);++ assert.equal(await evalv(`window.editor.layout().parts.find((p) => p.id === 'stop').place.x`), 1, 'Keep applied the suggestion');++ assert.equal(await evalv(`document.querySelector('.ov-arrange-preview') === null`), true, 'the preview bar went away');++++ // A long press opens the part's sheet (the phone's way to the style controls).++ await evalv(`(() => { const el = document.getElementById('stick'); const r = el.getBoundingClientRect(); el.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true, button: 0, pointerId: 9, clientX: r.left + 5, clientY: r.top + 5 })); })()`);++ assert.ok(await until(`!!document.querySelector('.ov-arrange-sheet')`), 'a long press opens the part sheet');++ await evalv(`document.querySelector('.ov-arrange-sheet [data-close]').click()`);++ await evalv(`(() => { const el = document.getElementById('stick'); el.dispatchEvent(new PointerEvent('pointerup', { bubbles: true, pointerId: 9 })); })()`);++++ // Reset to default, Share, Done.++ await evalv(`document.querySelector('[data-reset]').click()`);++ assert.equal(await evalv(`window.editor.layout().name`), 'Default', 'Reset to default');++ assert.ok(await until(`!!window.calls.reset`), 'Reset clears the stored layout through onReset');++ await evalv(`document.querySelector('[data-share]').click()`);++ assert.ok(await until(`!!document.querySelector('.ov-arrange-share input')`), 'Share shows the link');++ await evalv(`document.querySelector('[data-done]').click()`);++ assert.equal(await evalv(`document.querySelector('.ov-arrange-bar') === null`), true, 'Done closes the editor');++ console.log('ov-arrange-chrome: move, refuse with the reason, undo, sheet, save, AI preview and Keep, reset, share and done');++ } finally {++ await browser.close();++ server.close();++ fs.rmSync(tmpDir, { recursive: true, force: true });++ }++})().catch((e) => { console.error(e); process.exit(1); });nnew file mode 100644@@@ -0,0 +1,48 @@++'use strict';++// ov-arrange-core.js is openvibe-sdk/ui-layout for the browser, generated by scripts/build-arrange-core.js. The++// editor loads it from beside itself (ARRANGE_CORE_REV) so the one validator the SDK/server/AI use is also the++// one that refuses a bad move while a person drags. This checks the file is current and that the browser copy++// keeps the SDK's rules, including a docked overlay's own size.++const assert = require('node:assert/strict');++const fs = require('node:fs');++const path = require('node:path');++const { build } = require('../scripts/build-arrange-core');++++const ROOT = path.join(__dirname, '..');++const generated = fs.readFileSync(path.join(ROOT, 'ov-arrange-core.js'), 'utf8');++const sdk = path.join(ROOT, 'node_modules', 'openvibe-sdk');++assert.ok(fs.existsSync(path.join(sdk, 'src', 'ui-layout.js')), 'the pinned openvibe-sdk has ui-layout (pin 0.151.0 or later)');++assert.equal(generated, build(sdk), 'ov-arrange-core.js is current: run node scripts/build-arrange-core.js');++++const saved = global.window;++global.window = global;++delete require.cache[require.resolve('../ov-arrange-core.js')];++require('../ov-arrange-core.js');++const core = global.OVArrangeCore;++assert.ok(core && typeof core.validate === 'function' && typeof core.applyDefaults === 'function' && typeof core.merge === 'function', 'the browser core exposes validate, applyDefaults and merge');++assert.equal(core.PRESSED_PX, 44);++++const catalog = {++ id: 'bot.overlay', version: 1, name: 'Robot over a stream', devices: ['phone', 'tablet', 'computer'],++ grid: { columns: { phone: 4, tablet: 8, computer: 12 }, cell_px: { phone: 64, tablet: 64, computer: 64 } },++ theme_tokens: ['danger', 'surface', 'accent'],++ parts: [++ { id: 'estop', name: 'E-stop', kind: 'button', required: true, pressed: true, min: { w: 2, h: 2, px: 56 }, styles: { tints: ['danger'], shapes: ['round'], label: true }, bindings: { keys: [], gamepad: [] } },++ { id: 'stick', name: 'Stick', kind: 'stick', required: false, pressed: true, min: { w: 2, h: 2 }, styles: { tints: ['surface'], shapes: ['round'], label: false }, bindings: { keys: ['W'], gamepad: [] } },++ ],++};++const part = (id, place) => ({ id, visible: true, place, style: { tint: id === 'estop' ? 'danger' : 'surface', shape: 'round', opacity: 1, label: id === 'estop' }, bindings: { keys: [], gamepad: [] } });++const layout = (estop = { dock: 'right', order: 0, w: 2, h: 2 }) => ({++ surface: 'bot.overlay', surface_version: 1, device: 'phone', name: 'Mine', author: { name: 'Ana' }, sharing: 'private',++ parts: [part('estop', estop), part('stick', { dock: 'left', order: 0, w: 2, h: 2 })],++});++assert.deepEqual(core.validate(catalog, layout()), { ok: true, reasons: [] });++assert.ok(core.validate(catalog, layout({ dock: 'right', order: 0, w: 1, h: 1 })).reasons.includes('E-stop has to be at least 2 × 2 cells.'));++const covered = layout();++covered.parts[1].place = { dock: 'right', order: 0, w: 2, h: 2 };++assert.ok(core.validate(catalog, covered).reasons.some((r) => /Stick covers E-stop/.test(r)));++const defaults = core.applyDefaults(catalog, 'phone');++assert.deepEqual(core.validate(catalog, defaults), { ok: true, reasons: [] }, 'the SDK defaults are valid');++assert.equal(core.merge(layout(), { parts: [{ id: 'stick', style: { opacity: 0.5 } }] }).parts[1].style.opacity, 0.5);++console.log('ov-arrange-core: current with the SDK and its rules, dock sizes and coverage included');++if (saved === undefined) delete global.window;@@@ -7,6 +7,7 @@ const fs = require('fs');const path = require('path');const vm = require('vm');const { build } = require('../scripts/build-locker-core');++assert.doesNotThrow(() => require('../ov-locker-core'), 'ov-locker-core.js loads in Node too (the browser globals are there)');const ROOT = path.join(__dirname, '..');const file = fs.readFileSync(path.join(ROOT, 'ov-locker-core.js'), 'utf8');nnew file mode 100644@@@ -0,0 +1,47 @@++'use strict';++// sso-client.js — the FedCM hint carries the account's own name into the navbar's first paint, and never a++// name that is not a safe username.++const assert = require('assert');++const fs = require('fs');++const path = require('path');++const vm = require('vm');++++function load(user) {++ const store = {}, tab = {};++ const ctx = {++ console, setTimeout, clearTimeout, AbortController,++ crypto: { getRandomValues: (a) => { a.fill(1); return a; } },++ location: { origin: 'https://openvibe.blog', hostname: 'openvibe.blog', href: 'https://openvibe.blog/' },++ isSecureContext: true,++ IdentityCredential: function IdentityCredential() {},++ localStorage: { getItem: k => (k in store ? store[k] : null), setItem: (k, v) => { store[k] = String(v); } },++ sessionStorage: { getItem: k => (k in tab ? tab[k] : null), setItem: (k, v) => { tab[k] = String(v); } },++ navigator: { credentials: { get: async () => ({ token: 'fedcm-token', isAutoSelected: false }) } },++ fetch: async () => ({ ok: true, json: async () => ({ user }) }),++ };++ ctx.globalThis = ctx; ctx.window = ctx; ctx.self = ctx; ctx.top = ctx;++ vm.createContext(ctx);++ vm.runInContext(fs.readFileSync(path.join(__dirname, '..', 'sso-client.js'), 'utf8'), ctx);++ return { ctx, store };++}++++(async () => {++ {++ const { ctx, store } = load({ username: 'vibe' });++ assert.ok(ctx.OpenVibeSSO, 'the module loads');++ const out = await ctx.OpenVibeSSO.fedcm({ apiBase: 'https://openvibe.network', fedcmLogin: '/auth/fedcm' });++ assert.equal(out.ok, true);++ assert.equal(store.ov_sso_hint, 'account:vibe', 'the next first paint knows the account name');++ }++ {++ const { ctx, store } = load({ username: '<b>not-a-name</b>' });++ const out = await ctx.OpenVibeSSO.fedcm({ apiBase: 'https://openvibe.network', fedcmLogin: '/auth/fedcm' });++ assert.equal(out.ok, true);++ assert.equal(store.ov_sso_hint, 'account', 'an unsafe name is dropped, never rendered');++ }++ console.log('sso-client: the FedCM hint carries only a safe account name into the first paint');++})().catch((err) => {++ console.error('sso-client test failed');++ console.error(String(err.stack).split('\n').slice(0, 5).join('\n'));++ process.exitCode = 1;++});nnew file mode 100644@@@ -0,0 +1,76 @@++'use strict';++// openvibe-shared/thread's renderThread (4.215.0): the inline Community thread Video, Pics, Community's paste page and++// /c show, carried from OpenVibe.MediaHub test/comments-inline.test.js and OpenVibe.Community's page tests. The++// markup is one renderer: attachments only where the site allows them, the draft kept, and signed out the composer's++// spot is one sign-in line (the whole empty state when nobody has commented).++const assert = require('assert');++const fs = require('fs');++const path = require('path');++const { renderThread } = require('../thread');++const files = require('../files');++const serve = require('../serve');++++const answer = {++ thread: { id: 'cth_1234567890123456789012' }, viewer: { can_comment: true },++ comments: [{ id: 10, message: 'A <picture>', author: { username: 'alice', display_name: 'Alice', avatar_url: 'https://openvibe.network/avatar/alice' },++ created_at: '2026-11-10T12:00:00Z', reply_count: 3, can_delete: true,++ attachments: [{ id: 'med_01JAB2C3D4E5F6G7H8J9K0MNPQ', name: 'image.png', media_type: 'image/png' },++ { id: 'med_01JAB2C3D4E5F6G7H8J9K0MNPR', name: 'notes.pdf', media_type: 'application/pdf' }],++ replies: [{ id: 11, parent_id: 10, reply_to_id: 10, reply_to: { display_name: 'Alice' }, message: 'First', author: { username: 'bob', display_name: 'Bob' } },++ { id: 12, parent_id: 10, reply_to_id: 11, reply_to: { display_name: 'Bob' }, message: 'Second', author: { username: 'alice', display_name: 'Alice' } }],++ }],++};++const options = { answer, base: '/watch?v=12345678901', post: '/u/vup_1/comments', remove: '/u/vup_1/comments/delete', sort: 'top' };++++const signedOut = renderThread({ ...options, signedIn: false });++assert.match(signedOut, /class="ovc-thread"/);++assert.match(signedOut, /Sign in to comment/);++assert.doesNotMatch(signedOut, /data-ovt-composer/);++assert.doesNotMatch(signedOut, /<nav class="ovc-order"/, 'one top-level comment has nothing to put in order');++assert.doesNotMatch(signedOut, /ovk-empty/, 'the empty box is gone; the sign-in line says it');++assert.match(signedOut, /1 more reply/);++assert.match(signedOut, /href="https:\/\/openvibe.network\/@alice"/);++assert.match(signedOut, /class="ovc-target"/);++assert.match(signedOut, /<picture>/);++assert.match(signedOut, /<img src="https:\/\/openvibe.media\/o\/med_/);++assert.match(signedOut, /notes.pdf/);++assert.match(signedOut, /%2Fwatch%3Fv%3D12345678901%26sort%3Dtop/);++assert.match(signedOut, /<p class="ovc-community"><a href="https:\/\/openvibe.community\/c\/cth_1234567890123456789012">Discuss on OpenVibe.Community<\/a><\/p>/);++++// Top and Newest appear only when there is something to order.++const two = renderThread({ ...options, answer: { ...answer, comments: [...answer.comments, { ...answer.comments[0], id: 20, replies: [], reply_count: 0 }] }, signedIn: false });++assert.match(two, /<nav class="ovc-order"/);++assert.match(two, /sort=new/);++assert.match(two, /aria-current="page"/);++++const signedIn = renderThread({ ...options, signedIn: true, replyId: 11 });++assert.match(signedIn, /data-ovt-composer/);++assert.match(signedIn, /name="parent_id" value="11"/);++assert.match(signedIn, /data-ovt-files/);++assert.match(signedIn, /name="comment_id" value="10"/);++assert.match(signedIn, /Up to four files, 16 MB each/);++++// Community's paste page and Pics allow files; a thread that does not (attachmentsAllowed: false) draws no picker.++const noFiles = renderThread({ ...options, signedIn: true, attachmentsAllowed: false });++assert.doesNotMatch(noFiles, /data-ovt-files/);++assert.doesNotMatch(noFiles, /Up to four files/);++assert.doesNotMatch(noFiles, /enctype="multipart\/form-data"/);++assert.match(noFiles, /data-ovt-composer/);++++// A failed post keeps the person's draft in the box, escaped.++const draft = renderThread({ ...options, signedIn: true, draft: 'half <b>written</b>' });++assert.match(draft, /data-ovt-text required>half <b>written<\/b><\/textarea>/);++++// Signed out with no comments yet: one line, not the line plus an empty-state box.++const emptyOut = renderThread({ ...options, answer: { ...answer, comments: [] }, signedIn: false });++assert.match(emptyOut, /<p class="ovc-signin">Be the first to comment\. <a /, 'signed out with no comments: one line, sign-in beside it');++assert.doesNotMatch(emptyOut, /ovk-empty/);++assert.doesNotMatch(emptyOut, /<nav class="ovc-order"/);++assert.match(renderThread({ ...options, answer: { ...answer, comments: [] }, signedIn: true }), /<p class="ovc-none">Be the first to comment\.<\/p>/);++++// The stylesheet is a sibling this package serves like thread.css: listed, present, content-addressed.++assert.ok(files.STYLES.includes('thread-inline.css'), 'thread-inline.css is a browser stylesheet');++assert.ok(fs.existsSync(path.join(__dirname, '..', 'thread-inline.css')));++assert.match(serve.url('thread-inline.css'), /^\/shared\/thread-inline\.css\?v=[0-9a-f]{12}$/);++++process.stdout.write('Inline thread: order only with two, one sign-in line when empty, attachments and drafts per site, the hashed stylesheet\n');nnew file mode 100644@@@ -0,0 +1,25 @@++/* The inline Community thread a page shows under a thing (openvibe-shared/thread renderThread): a quiet head (the++ title, then Top and Newest only when there is something to order), the composer or one sign-in line, the comments,++ and a small link to the discussion. One look on Video, Pics, a paste page and /c. */++.ovc-thread { margin: 24px 0; }++.ovv-panel > .ovc-thread { margin: 0; }++.ovc-head, .ovc-comment header, .ovc-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }++.ovc-head { justify-content: space-between; min-height: 40px; margin-bottom: 8px; }++.ovc-head h2 { margin: 0; font-size: 1.125rem; }++.ovc-signin, .ovc-none { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px; margin: 0; }++.ovc-none { margin-top: 12px; opacity: .75; }++.ovc-comment { padding: 12px 0; border-bottom: 1px solid var(--border, #5555); }++.ovc-comment header img { border-radius: 50%; object-fit: cover; }++.ovc-comment time { font-size: .875em; opacity: .8; }++.ovc-replies { margin-left: 24px; }++.ovc-actions form { display: inline; }++.ovc-attach { display: inline-block; margin: 4px 8px 4px 0; }++.ovc-attach--file { border: 1px solid currentColor; border-radius: 999px; padding: 4px 12px; }++.ovc-attach img { max-width: 120px; max-height: 90px; object-fit: cover; }++.ovc-order { display: inline-flex; gap: 2px; padding: 2px; border-radius: 999px; background: color-mix(in srgb, currentColor 8%, transparent); }++.ovc-order a { min-height: 36px; padding: 4px 14px; border: 0; border-radius: 999px; font-size: .875rem; }++.ovc-order .is-active { font-weight: 700; background: color-mix(in srgb, currentColor 16%, transparent); }++.ovc-community { margin: 12px 0 0; font-size: .875em; }++.ovc-community a { color: inherit; opacity: .8; text-decoration: none; }++.ovc-community a::after { content: ' \2192'; }++.ovc-community a:hover, .ovc-community a:focus-visible { opacity: 1; text-decoration: underline; }@@@ -300,6 +300,91 @@ ${foot || ''}<p class="ovt-c-note" data-ovt-note role="status">${esc(note || '')</form>`;}++// The inline Community thread a page shows under a thing (MediaHub's Video and Pics item pages, Community's paste++// and /c pages): the same markup on every site, from the comment service's answer. Draw with thread-inline.css.++const MEDIA_ID = /^med_[0-9A-HJKMNP-TV-Z]{26}$/;++const USERNAME = /^[A-Za-z0-9_]{1,32}$/;++const ID = /^\d{1,15}$/;++const safeHttps = (value) => { try { const url = new URL(String(value)); return url.protocol === 'https:' ? url.href : null; } catch { return null; } };++const author = (c) => c.author || c;++const username = (c) => author(c).username || c.username || '';++const name = (c) => author(c).display_name || c.display_name || username(c) || c.anon_name || 'Member';++const date = (iso) => {++ const ms = Date.parse(String(iso || ''));++ if (!Number.isFinite(ms)) return { short: '', full: '' };++ const full = new Date(ms).toLocaleString('en-US', { dateStyle: 'long', timeStyle: 'short', timeZone: 'UTC' }) + ' UTC';++ const seconds = Math.max(0, Math.floor((Date.now() - ms) / 1000));++ const unit = seconds < 60 ? ['second', seconds] : seconds < 3600 ? ['minute', Math.floor(seconds / 60)]++ : seconds < 86400 ? ['hour', Math.floor(seconds / 3600)] : seconds < 2592000 ? ['day', Math.floor(seconds / 86400)]++ : seconds < 31536000 ? ['month', Math.floor(seconds / 2592000)] : ['year', Math.floor(seconds / 31536000)];++ return { short: seconds < 60 ? 'just now' : `${unit[1]} ${unit[0]}${unit[1] === 1 ? '' : 's'} ago`, full };++};++++function query(base, sort, extra = {}, anchor = 'comments') {++ const q = new URLSearchParams({ sort, ...extra });++ return `${base}${base.includes('?') ? '&' : '?'}${q.toString()}#${anchor}`;++}++++/**++ * The inline Community thread a page shows under a thing (Video, Pics, a paste page, /c): the quiet head, the++ * composer or one sign-in line, the comments with their replies, targets and attachments, the order (Top and++ * Newest only when there is something to put in order), More, and the link to the discussion. Server-rendered and++ * complete without script; ov-thread.js and ov-composer.js give the composer its behaviour.++ * answer: the comment service's answer ({ thread, comments, next_cursor, viewer }), or null for a thread nobody++ * has commented on; base: the page's own address (sorting, paging and reply links come back here)++ * post, remove: where the composer and Delete post; signedIn: this person may write++ * attachmentsAllowed: the composer offers files (Community's paste page and Pics say yes; elsewhere no)++ * draft: the message kept in the box after a failed post++ * sort, replyId, expandedId, expandedReplies, error: as the page received them++ */++function renderThread({ answer, base, post, remove, signedIn, attachmentsAllowed = true, sort = 'top', replyId = null, expandedId = null, expandedReplies = null, error = null, draft = '' }) {++ const comments = Array.isArray(answer && answer.comments) ? answer.comments : [];++ const accessId = answer && answer.thread && String(answer.thread.access_id || answer.thread.id || '');++ const threadUrl = safeHttps(answer && answer.thread && answer.thread.url) || (/^cth_[A-Za-z0-9_-]{22}$/.test(accessId) ? `https://openvibe.community/c/${accessId}` : null);++ const validReply = ID.test(String(replyId || '')) ? String(replyId) : null;++ const validExpanded = ID.test(String(expandedId || '')) ? String(expandedId) : null;++ // Signed out, the composer's spot is one line; with no comments yet that line is the whole empty state (no second++ // box saying the same thing).++ const signIn = `<p class="ovc-signin">${comments.length ? 'Sign in to comment.' : 'Be the first to comment.'} <a class="ovk-btn ovk-btn--primary" href="/auth/login?next=${encodeURIComponent(query(base, sort))}">Sign in</a></p>`;++ const composer_html = (parent = null) => signedIn ? composer({ action: post, name: 'message', label: 'Comment', placeholder: parent ? 'Write a reply…' : 'Add a comment…', value: draft, maxlength: 2000,++ sendLabel: parent ? 'Reply' : 'Comment', hidden: parent ? { parent_id: parent } : {},++ attach: attachmentsAllowed ? { name: 'files', accept: 'image/jpeg,image/png,image/gif,image/webp,application/pdf,text/plain' } : null,++ note: attachmentsAllowed ? 'Up to four files, 16 MB each. JPEG, PNG, GIF, WebP, PDF or text.' : '',++ }) : signIn;++ const attachments = (c) => (Array.isArray(c.attachments) ? c.attachments : []).map((a) => {++ if (!MEDIA_ID.test(String(a.id || ''))) return '';++ const url = `https://openvibe.media/o/${a.id}`;++ const title = esc(a.name || 'Attached file');++ return `<a class="ovc-attach${String(a.media_type || '').startsWith('image/') ? ' ovc-attach--image' : ' ovc-attach--file'}" href="${url}" target="_blank" rel="noopener noreferrer">${String(a.media_type || '').startsWith('image/')++ ? `<img src="${url}" alt="${title}" loading="lazy" width="120">` : title}</a>`;++ }).join('');++ const comment = (c, root = null) => {++ const id = String(c.id);++ if (!ID.test(id)) return '';++ const gone = !!(c.deleted || c.is_deleted);++ const user = username(c);++ const profile = USERNAME.test(user) ? `https://openvibe.network/@${encodeURIComponent(user)}` : null;++ const avatar = safeHttps(author(c).avatar_url || c.avatar_url) || (profile ? `https://openvibe.network/avatar/${encodeURIComponent(user)}?s=80` : null);++ const when = date(c.created_at);++ const targetId = ID.test(String(c.reply_to_id || '')) ? String(c.reply_to_id) : null;++ const topId = root || id;++ const target = targetId && c.reply_to ? `<a class="ovc-target" href="${query(base, sort, { replies: topId }, `comment-${targetId}`)}">↪ @${esc(c.reply_to.display_name || 'Member')}</a>` : '';++ const controls = !gone ? `<div class="ovc-actions">${signedIn ? `<a class="ovk-btn ovk-btn--quiet" href="${query(base, sort, { reply: id }, `comment-${id}`)}" data-ovc-reply="${id}">Reply</a>` : ''}${c.can_delete && signedIn ? `<form method="post" action="${esc(remove)}"><input type="hidden" name="comment_id" value="${id}"><button class="ovk-btn ovk-btn--quiet" type="submit">Delete</button></form>` : ''}</div>` : '';++ let replies = '';++ if (!root) {++ const rows = validExpanded === id && Array.isArray(expandedReplies) ? expandedReplies : (Array.isArray(c.replies) ? c.replies : []);++ const more = Math.max(0, Number(c.reply_count || 0) - rows.length);++ replies = `<div class="ovc-replies" data-ovc-replies="${id}">${rows.map((r) => comment(r, id)).join('')}${more ? `<a class="ovc-more ovk-btn ovk-btn--quiet" data-ovc-more="${id}" href="${query(base, sort, { replies: id })}">${more} more ${more === 1 ? 'reply' : 'replies'}</a>` : ''}</div>`;++ }++ return `<article class="ovc-comment" id="comment-${id}"><header>${avatar ? `<img src="${esc(avatar)}" alt="" width="32" height="32" loading="lazy">` : ''}${profile ? `<a href="${profile}">${esc(name(c))}</a>` : `<span>${esc(name(c))}</span>`}${when.short ? `<time datetime="${esc(c.created_at)}" title="${esc(when.full)}">${esc(when.short)}</time>` : ''}</header>${target}${gone ? '<p>Comment removed</p>' : `<p>${esc(c.message || '')}</p>${attachments(c)}`}${controls}${validReply === id ? `<div data-ovc-composer-slot>${composer_html(id)}</div>` : ''}${replies}</article>`;++ };++ const hasReplySlot = validReply && comments.some((c) => String(c.id) === validReply || (validExpanded === String(c.id) && Array.isArray(expandedReplies) ? expandedReplies : c.replies || []).some((r) => String(r.id) === validReply));++ // Top and Newest only when there is something to put in order.++ const order = comments.length < 2 && !(answer && answer.next_cursor) ? '' : `<nav class="ovc-order" aria-label="Comment order">${[['top', 'Top'], ['new', 'Newest']].map(([key, label]) => `<a class="ovk-btn ovk-btn--quiet${sort === key ? ' is-active' : ''}" href="${query(base, key)}"${sort === key ? ' aria-current="page"' : ''} data-ovc-order>${label}</a>`).join('')}</nav>`;++ const next = answer && answer.next_cursor ? `<a class="ovk-btn ovk-btn--quiet ovc-more" href="${query(base, sort, { after: answer.next_cursor })}" data-ovc-order>More comments</a>` : '';++ return `<section class="ovc-thread" id="comments" data-ovc-thread><div class="ovc-head"><h2>Comments</h2>${order}</div>${error ? `<p role="alert">${esc(error)}</p>` : ''}${!hasReplySlot ? `<div data-ovc-composer-slot>${composer_html()}</div>` : ''}${comments.length ? `<div class="ovc-list">${comments.map((c) => comment(c)).join('')}</div>` : (signedIn ? '<p class="ovc-none">Be the first to comment.</p>' : '')}${next}${threadUrl ? `<p class="ovc-community"><a href="${esc(threadUrl)}">Discuss on OpenVibe.Community</a></p>` : ''}</section>`;++}++/*** The whole screen: the sidebar and the conversation (head, the turns or the empty state, the composer). Wrap it in* the site's page; on a phone the composer stays at the bottom above the app bar.@@@ -319,4 +404,4 @@ function page({ sidebar: side = '', head: top = '', turns = [], empty = '', comp${body}</section>${pan ? `${pan}<div class="ovt-panel-scrim" data-ovt-panel-scrim hidden></div>` : ''}</div>`;}--module.exports = { page, sidebar, head, turn, divider, work, answer, card, panel, composer, files, face, group, groupOf, icon, esc };++module.exports = { page, sidebar, head, turn, divider, work, answer, card, panel, composer, renderThread, files, face, group, groupOf, icon, esc };
@@ -1,5 +1,39 @@
@@ -1,5 +1,39 @@
# Changelog
# Changelog
+## 4.214.0 — 2026-11-11
+
+A train of four pull requests: the Arrange editor (#481), one inline comment thread for every site (#479), the bar's first paint following the sign-in hint (#482) and four redrawn glyphs (#484).
+
+- **The Arrange editor: a person's own controls, on the real parts.** `ov-arrange.js` is loaded only when someone
+ presses Arrange, and loads `ov-arrange-core.js` (openvibe-sdk/ui-layout for the browser, generated by
+ `scripts/build-arrange-core.js`) from beside itself by content hash. A surface's `[data-ov-part]` elements are
+ placed from a ui.layout@1: drag to move on the grid, the corner to resize, arrows to move and Shift with the
+ arrows to resize (a docked overlay chooses an edge the same way). The part's sheet has visible, size, tint, shape,
+ opacity, label and bindings; long press opens it on a phone. The SDK rules refuse a bad move with the reason in
+ plain words (Stop has to stay visible; it is too small), every move and resize is announced, and Undo, Reset to
+ default, Save and Share are in the bar. Ask OpenVibe's ui.layout.suggestion is previewed on the real parts and
+ applied only with Keep; Motion Off shows no animation and Calm plays the short one. (#481)
+
+- **One inline comment thread for every site: `thread.renderThread` and `thread-inline.css` (new), beside the
+ composer.** MediaHub's Video and Pics item pages and Community's paste and `/c` pages rendered two copies of the
+ same thread; the renderer now lives in `openvibe-shared/thread`, with both sites' options:
+ `attachmentsAllowed` (Pics and a paste page offer files; elsewhere the composer does not) and `draft` (the message
+ kept after a failed post). It draws the quiet head, Top and Newest only when there is something to order, the
+ composer or one sign-in line (the whole empty state when nobody has commented), the comments with their replies,
+ targets, deletions and attachments, More, and the discussion link. The markup is byte-for-byte what the two sites
+ render; each keeps its own post, delete and sign-in routes. The stylesheet is served like the package's other CSS
+ (`/shared/thread-inline.css?v=<content hash>`, `files.js` STYLES), so a site pins one look. Both sites' renderer
+ tests are here; MediaHub and Community delete their copies and pin this release. (#479)
+
+- **The bar's first paint follows the sign-in hint (asks 327, 345).** When `ov_sso_hint` says `account`, navbar.js
+ draws the signed-in shape at once: a neutral placeholder avatar, and the account's own name/initial only when the
+ hint carries it (`account:<username>`); the session check then replaces it or corrects the bar to guest. A failed
+ check no longer leaves the optimistic bar behind, and an explicit `guest` hint keeps the guest bar and starts no
+ silent round trip. The hint is never authorization: it holds no token and is not remembered as an account.
+ sso-client.js stores the name after a FedCM sign-in when the response has one. (#482)
+
+- **Glyphs: care, fish, handshake and eye-off redrawn for 16 px** (the last four the 11-11 glyph review named weak): care keeps its heart clear of an open hand; fish has an open V tail and a dot eye; handshake drops the tiny finger strokes and gets its first solid twin; eye-off breaks the outline where the slash crosses (#484).
+
## 4.213.0 — 2026-11-11
## 4.213.0 — 2026-11-11
- **The menu button's flight, polished** (the owner, 11-11: "the icon becomes whiter than it was when idle … needs
- **The menu button's flight, polished** (the owner, 11-11: "the icon becomes whiter than it was when idle … needs
@@ -5,7 +5,7 @@
@@ -5,7 +5,7 @@
**Docs:** https://openvibe.services · **For AI:** https://openvibe.network/llms.txt
**Docs:** https://openvibe.services · **For AI:** https://openvibe.network/llms.txt
**Install and test:** `npm ci && npm test`
**Install and test:** `npm ci && npm test`
-**Status:** alpha, v4.213.0 (every release is a tag; see [CHANGELOG.md](CHANGELOG.md)). Every deployed
+**Status:** alpha, v4.214.0 (every release is a tag; see [CHANGELOG.md](CHANGELOG.md)). Every deployed
consumer installs a tagged release and none keeps a vendored copy
consumer installs a tagged release and none keeps a vendored copy
([docs/migration-plan.md](docs/migration-plan.md) is done); each repository's `package.json` names
([docs/migration-plan.md](docs/migration-plan.md) is done); each repository's `package.json` names
the tag it pins.
the tag it pins.
@@ -1239,5 +1239,5 @@ The Locker browser core currently uses the immutable SDK review commit `80f21232
@@ -1239,5 +1239,5 @@ The Locker browser core currently uses the immutable SDK review commit `80f21232
<!-- versions:start -->
<!-- versions:start -->
- openvibe-contracts: v0.408.0
- openvibe-contracts: v0.408.0
-- openvibe-sdk: v0.150.0
+- openvibe-sdk: v0.152.0
<!-- versions:end -->
<!-- versions:end -->
@@ -4,12 +4,12 @@
@@ -4,12 +4,12 @@
"code": true,
"code": true,
"wave": "W2",
"wave": "W2",
"package": "openvibe-shared",
"package": "openvibe-shared",
- "version": "4.213.0",
+ "version": "4.214.0",
"plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)",
"plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)",
"deployed": false,
"deployed": false,
"deployment": "none of its own: a package released as git tags; OpenVibe.Network serves /shared/* from its pinned tag, and a site can serve its own pinned copy (openvibe-shared/serve)",
"deployment": "none of its own: a package released as git tags; OpenVibe.Network serves /shared/* from its pinned tag, and a site can serve its own pinned copy (openvibe-shared/serve)",
"contracts": "openvibe-contracts v0.408.0 (devDependency: the release manifest contract)",
"contracts": "openvibe-contracts v0.408.0 (devDependency: the release manifest contract)",
- "sdk": "openvibe-sdk v0.150.0",
+ "sdk": "openvibe-sdk v0.152.0",
"features": [
"features": [
"the Quest guide on any page and the current Live step in the Dock's agent view (4.209.0)",
"the Quest guide on any page and the current Live step in the Dock's agent view (4.209.0)",
"one move engine for a floating thing: OVFloat.attach gives the PiP's drag, flick, tuck and kept place to any box, and a panel window adopts it (4.208.0)",
"one move engine for a floating thing: OVFloat.attach gives the PiP's drag, flick, tuck and kept place to any box, and a panel window adopts it (4.208.0)",
@@ -62,5 +62,5 @@
@@ -62,5 +62,5 @@
"openvibe-shared/config accepts x-unit seconds for an integer owner setting, so an owner form can label the input in seconds",
"openvibe-shared/config accepts x-unit seconds for an integer owner setting, so an owner form can label the input in seconds",
"a navbar link can be the site's one featured piece (featured: true): a quiet accent pill with its glyph, first in the phone's menu (4.117.0)"
"a navbar link can be the site's one featured piece (featured: true): a quiet accent pill with its glyph, first in the phone's menu (4.117.0)"
],
],
- "updated": "2026-11-11"
+ "updated": "2026-11-12"
}
}
@@ -48,6 +48,8 @@ const BROWSER = Object.freeze([
@@ -48,6 +48,8 @@ const BROWSER = Object.freeze([
'ov-labels.js', // content labels (L1): each viewer's show / blur / hide; navbar.js loads it when a page has [data-ov-labels]
'ov-labels.js', // content labels (L1): each viewer's show / blur / hide; navbar.js loads it when a page has [data-ov-labels]
'ov-forms.js', // OpenVibe's own select (a menu on a computer, a sheet on a phone); navbar.js loads it when a page has a form control
'ov-forms.js', // OpenVibe's own select (a menu on a computer, a sheet on a phone); navbar.js loads it when a page has a form control
'ov-qr.js', // a QR code from a link, on the device: the Share sheet's QR code (ov-share.js loads it on first use)
'ov-qr.js', // a QR code from a link, on the device: the Share sheet's QR code (ov-share.js loads it on first use)
+ 'ov-arrange.js', // the Arrange editor (make your own controls, 2026-11-11): a person moves and resizes a surface's parts; a product loads it when Arrange is pressed
+ 'ov-arrange-core.js', // openvibe-sdk/ui-layout for the browser, generated (scripts/build-arrange-core.js): the one validator
'ov-locker-core.js', // openvibe-sdk/locker for the browser, generated (scripts/build-locker-core.js): WebCrypto only, the SDK's own vectors
'ov-locker-core.js', // openvibe-sdk/locker for the browser, generated (scripts/build-locker-core.js): WebCrypto only, the SDK's own vectors
'ov-locker.js', // Locker in the browser (plan Q2): a locked item's card, making and unlocking your locker; crypto in ov-locker-core.js
'ov-locker.js', // Locker in the browser (plan Q2): a locked item's card, making and unlocking your locker; crypto in ov-locker-core.js
'ov-wallet.js',
'ov-wallet.js',
@@ -114,6 +116,7 @@ const STYLES = Object.freeze([
@@ -114,6 +116,7 @@ const STYLES = Object.freeze([
'messages.css', // the room and bubble views' look
'messages.css', // the room and bubble views' look
'room.css', // kit.card, kit.rail and a room's accent (4.29.1; load after kit.css where cards, rails or sc.room() are)
'room.css', // kit.card, kit.rail and a room's accent (4.29.1; load after kit.css where cards, rails or sc.room() are)
'thread.css', // the conversation UI's look (openvibe-shared/thread, ov-thread.js; plan L55 C4)
'thread.css', // the conversation UI's look (openvibe-shared/thread, ov-thread.js; plan L55 C4)
+ 'thread-inline.css', // the inline Community thread's look (openvibe-shared/thread renderThread; 4.215.0)
'kit-layout.css', // the fluid scale, the layout primitives (.ov-stack, .ov-switcher…) and the opt-in .ov-base (4.78.0; after kit.css)
'kit-layout.css', // the fluid scale, the layout primitives (.ov-stack, .ov-switcher…) and the opt-in .ov-base (4.78.0; after kit.css)
'kit-data.css', // Kit 2's look: steps, tables, charts, rankings, meters, drop zones, receipts (4.37.0; after kit.css)
'kit-data.css', // Kit 2's look: steps, tables, charts, rankings, meters, drop zones, receipts (4.37.0; after kit.css)
'agent-session.css', // agent-session.js's look (4.32.0; the script links it from beside itself unless the page does)
'agent-session.css', // agent-session.js's look (4.32.0; the script links it from beside itself unless the page does)
@@ -1,22 +1,22 @@
@@ -1,22 +1,22 @@
{
{
"family": "OV Glyphs",
"family": "OV Glyphs",
"glyphs": 278,
"glyphs": 278,
- "source_sha256": "d9fec0f9aa6f987778848492219f6139bff1dc2da9739fce9866d3b3764d1214",
+ "source_sha256": "a4d2fb79a53342b1d3733d11d5d2420165c6d495a640dde5889a9f7d425c81f9",
"files": {
"files": {
- "ov-glyphs.woff2": 25728,
- "glyph-fonts/ov-glyphs.ttf": 55028,
- "glyph-fonts/ov-glyphs.otf": 68960,
- "ov-glyphs-thin.woff2": 25984,
- "glyph-fonts/ov-glyphs-thin.ttf": 59512,
- "glyph-fonts/ov-glyphs-thin.otf": 69776,
- "ov-glyphs-light.woff2": 26204,
- "glyph-fonts/ov-glyphs-light.ttf": 59920,
- "glyph-fonts/ov-glyphs-light.otf": 69668,
- "ov-glyphs-bold.woff2": 26156,
- "glyph-fonts/ov-glyphs-bold.ttf": 55012,
- "glyph-fonts/ov-glyphs-bold.otf": 68152,
- "ov-glyphs-solid.woff2": 15220,
- "glyph-fonts/ov-glyphs-solid.ttf": 30996,
- "glyph-fonts/ov-glyphs-solid.otf": 27916
+ "ov-glyphs.woff2": 25636,
+ "glyph-fonts/ov-glyphs.ttf": 54876,
+ "glyph-fonts/ov-glyphs.otf": 68816,
+ "ov-glyphs-thin.woff2": 25964,
+ "glyph-fonts/ov-glyphs-thin.ttf": 59348,
+ "glyph-fonts/ov-glyphs-thin.otf": 69652,
+ "ov-glyphs-light.woff2": 26112,
+ "glyph-fonts/ov-glyphs-light.ttf": 59772,
+ "glyph-fonts/ov-glyphs-light.otf": 69544,
+ "ov-glyphs-bold.woff2": 26052,
+ "glyph-fonts/ov-glyphs-bold.ttf": 54920,
+ "glyph-fonts/ov-glyphs-bold.otf": 68052,
+ "ov-glyphs-solid.woff2": 15308,
+ "glyph-fonts/ov-glyphs-solid.ttf": 31240,
+ "glyph-fonts/ov-glyphs-solid.otf": 28184
}
}
}
}
Binary files a/glyph-fonts/ov-glyphs-bold.otf and b/glyph-fonts/ov-glyphs-bold.otf differ
Binary files a/glyph-fonts/ov-glyphs-bold.otf and b/glyph-fonts/ov-glyphs-bold.otf differ
Binary files a/glyph-fonts/ov-glyphs-bold.ttf and b/glyph-fonts/ov-glyphs-bold.ttf differ
Binary files a/glyph-fonts/ov-glyphs-bold.ttf and b/glyph-fonts/ov-glyphs-bold.ttf differ
Binary files a/glyph-fonts/ov-glyphs-light.otf and b/glyph-fonts/ov-glyphs-light.otf differ
Binary files a/glyph-fonts/ov-glyphs-light.otf and b/glyph-fonts/ov-glyphs-light.otf differ
Binary files a/glyph-fonts/ov-glyphs-light.ttf and b/glyph-fonts/ov-glyphs-light.ttf differ
Binary files a/glyph-fonts/ov-glyphs-light.ttf and b/glyph-fonts/ov-glyphs-light.ttf differ
Binary files a/glyph-fonts/ov-glyphs-solid.otf and b/glyph-fonts/ov-glyphs-solid.otf differ
Binary files a/glyph-fonts/ov-glyphs-solid.otf and b/glyph-fonts/ov-glyphs-solid.otf differ
Binary files a/glyph-fonts/ov-glyphs-solid.ttf and b/glyph-fonts/ov-glyphs-solid.ttf differ
Binary files a/glyph-fonts/ov-glyphs-solid.ttf and b/glyph-fonts/ov-glyphs-solid.ttf differ
Binary files a/glyph-fonts/ov-glyphs-thin.otf and b/glyph-fonts/ov-glyphs-thin.otf differ
Binary files a/glyph-fonts/ov-glyphs-thin.otf and b/glyph-fonts/ov-glyphs-thin.otf differ
Binary files a/glyph-fonts/ov-glyphs-thin.ttf and b/glyph-fonts/ov-glyphs-thin.ttf differ
Binary files a/glyph-fonts/ov-glyphs-thin.ttf and b/glyph-fonts/ov-glyphs-thin.ttf differ
Binary files a/glyph-fonts/ov-glyphs.otf and b/glyph-fonts/ov-glyphs.otf differ
Binary files a/glyph-fonts/ov-glyphs.otf and b/glyph-fonts/ov-glyphs.otf differ
Binary files a/glyph-fonts/ov-glyphs.ttf and b/glyph-fonts/ov-glyphs.ttf differ
Binary files a/glyph-fonts/ov-glyphs.ttf and b/glyph-fonts/ov-glyphs.ttf differ
@@ -49,11 +49,11 @@
@@ -49,11 +49,11 @@
puzzle: '<path d="M3.8 7h4.2a2.6 2.6 0 1 1 4.8 0h4.2v4.2a2.6 2.6 0 1 1 0 4.8v4.2h-4.2a2.6 2.6 0 1 0-4.8 0H3.8v-4.2a2.6 2.6 0 1 0 0-4.8Z"/>',
puzzle: '<path d="M3.8 7h4.2a2.6 2.6 0 1 1 4.8 0h4.2v4.2a2.6 2.6 0 1 1 0 4.8v4.2h-4.2a2.6 2.6 0 1 0-4.8 0H3.8v-4.2a2.6 2.6 0 1 0 0-4.8Z"/>',
compress: '<path d="M8.8 3.5v5.3H3.5M15.2 3.5v5.3h5.3M8.8 20.5v-5.3H3.5M15.2 20.5v-5.3h5.3"/>',
compress: '<path d="M8.8 3.5v5.3H3.5M15.2 3.5v5.3h5.3M8.8 20.5v-5.3H3.5M15.2 20.5v-5.3h5.3"/>',
expand: '<path d="M3.5 8.8V3.5h5.3M20.5 8.8V3.5h-5.3M3.5 15.2v5.3h5.3M20.5 15.2v5.3h-5.3"/>',
expand: '<path d="M3.5 8.8V3.5h5.3M20.5 8.8V3.5h-5.3M3.5 15.2v5.3h5.3M20.5 15.2v5.3h-5.3"/>',
- care: '<path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/>',
+ care: '<path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/>',
city: '<path d="M3.5 19.7h17M5.4 19.7V8.3h4.7v11.3M10.1 19.7V3.6h5.7v16.1M15.8 19.7v-7.6h3.3v7.6M7.8 11.2h0M7.8 14.5h0M12.9 6.9h0M12.9 10.2h0M12.9 13.5h0"/>',
city: '<path d="M3.5 19.7h17M5.4 19.7V8.3h4.7v11.3M10.1 19.7V3.6h5.7v16.1M15.8 19.7v-7.6h3.3v7.6M7.8 11.2h0M7.8 14.5h0M12.9 6.9h0M12.9 10.2h0M12.9 13.5h0"/>',
wrench: '<path d="M14.6 3.6a5.2 5.2 0 0 0-4.6 7.3L3.7 17.3V20.3h3.1l6.4-6.4a5.2 5.2 0 0 0 7.3-4.6l-3.2 1.2l-2.5-2.5l1.2-3.2Z"/>',
wrench: '<path d="M14.6 3.6a5.2 5.2 0 0 0-4.6 7.3L3.7 17.3V20.3h3.1l6.4-6.4a5.2 5.2 0 0 0 7.3-4.6l-3.2 1.2l-2.5-2.5l1.2-3.2Z"/>',
music: '<path d="M8.6 17.7V5.6l11.1-2.1v12.2"/><circle cx="6" cy="17.7" r="2.6"/><circle cx="17.2" cy="15.7" r="2.6"/>',
music: '<path d="M8.6 17.7V5.6l11.1-2.1v12.2"/><circle cx="6" cy="17.7" r="2.6"/><circle cx="17.2" cy="15.7" r="2.6"/>',
- 'eye-off': '<path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/>',
+ 'eye-off': '<path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/>',
plane: '<path d="M20 4L3.5 10.8l6.6 3.1l3.1 6.6Z"/><path d="M10.1 13.9l9.9-9.9"/>',
plane: '<path d="M20 4L3.5 10.8l6.6 3.1l3.1 6.6Z"/><path d="M10.1 13.9l9.9-9.9"/>',
fire: '<path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/>',
fire: '<path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/>',
nodes: '<circle cx="12" cy="5.4" r="2.1"/><circle cx="5.8" cy="17.9" r="2.1"/><circle cx="18.2" cy="17.9" r="2.1"/><path d="M11 7.4L6.8 15.9M13 7.4l4.3 8.6M7.9 17.9h8.3"/>',
nodes: '<circle cx="12" cy="5.4" r="2.1"/><circle cx="5.8" cy="17.9" r="2.1"/><circle cx="18.2" cy="17.9" r="2.1"/><path d="M11 7.4L6.8 15.9M13 7.4l4.3 8.6M7.9 17.9h8.3"/>',
@@ -174,7 +174,7 @@
@@ -174,7 +174,7 @@
ear: '<path d="M6.2 9.5a5.7 5.7 0 1 1 10.8 2.4c-0.9 1.9-3.1 3-3.1 5.2a3.4 3.4 0 0 1-6.5 1.6"/><path d="M9.7 9.9a2.4 2.4 0 1 1 3.8 1.5"/>',
ear: '<path d="M6.2 9.5a5.7 5.7 0 1 1 10.8 2.4c-0.9 1.9-3.1 3-3.1 5.2a3.4 3.4 0 0 1-6.5 1.6"/><path d="M9.7 9.9a2.4 2.4 0 1 1 3.8 1.5"/>',
eraser: '<path d="M14.3 4.4l5.5 5.5l-9 9H6.6l-2.6-2.6a1.5 1.5 0 0 1 0-2.1Z"/><path d="M9.3 9.4l5.5 5.5M10.8 18.9H20.3"/>',
eraser: '<path d="M14.3 4.4l5.5 5.5l-9 9H6.6l-2.6-2.6a1.5 1.5 0 0 1 0-2.1Z"/><path d="M9.3 9.4l5.5 5.5M10.8 18.9H20.3"/>',
laugh: '<circle cx="12" cy="12" r="8.5"/><path d="M8 13.5h8a4 4 0 0 1-8 0ZM7.5 8.6l2.2 1.2-2.2 1.2M16.5 8.6l-2.2 1.2 2.2 1.2"/>',
laugh: '<circle cx="12" cy="12" r="8.5"/><path d="M8 13.5h8a4 4 0 0 1-8 0ZM7.5 8.6l2.2 1.2-2.2 1.2M16.5 8.6l-2.2 1.2 2.2 1.2"/>',
- fish: '<path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/>',
+ fish: '<path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/>',
finish: '<path d="M5.2 20.7V4"/><rect x="5.2" y="4.6" width="13.9" height="8.6" rx="1"/><path d="M5.2 8.8h13.9M9.6 4.6v8.6M14.3 4.6v8.6"/>',
finish: '<path d="M5.2 20.7V4"/><rect x="5.2" y="4.6" width="13.9" height="8.6" rx="1"/><path d="M5.2 8.8h13.9M9.6 4.6v8.6M14.3 4.6v8.6"/>',
flask: '<path d="M9.5 3.2h4.9M10 3.2V9.2L4.9 17.7a1.5 1.5 0 0 0 1.3 2.3h11.6a1.5 1.5 0 0 0 1.3-2.3L14 9.2V3.2"/><path d="M7.3 14.6h9.5"/>',
flask: '<path d="M9.5 3.2h4.9M10 3.2V9.2L4.9 17.7a1.5 1.5 0 0 0 1.3 2.3h11.6a1.5 1.5 0 0 0 1.3-2.3L14 9.2V3.2"/><path d="M7.3 14.6h9.5"/>',
'folder-tree': '<path d="M4.1 3.3v13.2a1 1 0 0 0 1 1H9.7M4.1 8.3H9.7"/><path d="M10.2 5.3h3.1l1 1.5h5.6V10.9h-9.7ZM10.2 14.5h3.1l1 1.5h5.6V20.1h-9.7Z"/>',
'folder-tree': '<path d="M4.1 3.3v13.2a1 1 0 0 0 1 1H9.7M4.1 8.3H9.7"/><path d="M10.2 5.3h3.1l1 1.5h5.6V10.9h-9.7ZM10.2 14.5h3.1l1 1.5h5.6V20.1h-9.7Z"/>',
@@ -183,7 +183,7 @@
@@ -183,7 +183,7 @@
ghost: '<path d="M4.7 20V10.6a7.3 7.3 0 0 1 14.7 0v9.4l-2.4-1.9l-2.5 1.9l-2.4-1.9L9.6 20l-2.5-1.9Z"/><path d="M9.4 10.1h0M14.6 10.1h0"/>',
ghost: '<path d="M4.7 20V10.6a7.3 7.3 0 0 1 14.7 0v9.4l-2.4-1.9l-2.5 1.9l-2.4-1.9L9.6 20l-2.5-1.9Z"/><path d="M9.4 10.1h0M14.6 10.1h0"/>',
grip: '<path d="M8.3 4.5h0M15.8 4.5h0M8.3 12h0M15.8 12h0M8.3 19.5h0M15.8 19.5h0" stroke-width="3.8"/>',
grip: '<path d="M8.3 4.5h0M15.8 4.5h0M8.3 12h0M15.8 12h0M8.3 19.5h0M15.8 19.5h0" stroke-width="3.8"/>',
hammer: '<path d="M13.1 3.7L19.3 9.9l-2.7 2.7l-6.2-6.2Z"/><path d="M13.6 9.4L5 18.1a1.3 1.3 0 0 0 1.9 1.9l8.6-8.6"/>',
hammer: '<path d="M13.1 3.7L19.3 9.9l-2.7 2.7l-6.2-6.2Z"/><path d="M13.6 9.4L5 18.1a1.3 1.3 0 0 0 1.9 1.9l8.6-8.6"/>',
- handshake: '<path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/>',
+ handshake: '<path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/>',
wizard: '<path d="M3.6 20h16.7M6.3 20L9.9 9.1L15.7 3.3L14.1 10.1L17.8 20"/><path d="M8.4 15.4h7.3"/>',
wizard: '<path d="M3.6 20h16.7M6.3 20L9.9 9.1L15.7 3.3L14.1 10.1L17.8 20"/><path d="M8.4 15.4h7.3"/>',
'heart-broken': '<path d="M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z"/><path d="M11.9 5.8L10 9.8l3.5 2.3l-1.6 3.9"/>',
'heart-broken': '<path d="M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z"/><path d="M11.9 5.8L10 9.8l3.5 2.3l-1.6 3.9"/>',
hourglass: '<path d="M6 3.5h12M6 20.5h12M7.5 3.5c0 4.5 4.5 5.5 4.5 8.5s-4.5 4-4.5 8.5M16.5 3.5c0 4.5-4.5 5.5-4.5 8.5s4.5 4 4.5 8.5"/>',
hourglass: '<path d="M6 3.5h12M6 20.5h12M7.5 3.5c0 4.5 4.5 5.5 4.5 8.5s-4.5 4-4.5 8.5M16.5 3.5c0 4.5-4.5 5.5-4.5 8.5s4.5 4 4.5 8.5"/>',
@@ -232,6 +232,7 @@
@@ -232,6 +232,7 @@
// shows the solid one when the icon is 18 px or smaller (pure CSS, see scripts/build-glyphs.js); a glyph without
// shows the solid one when the icon is 18 px or smaller (pure CSS, see scripts/build-glyphs.js); a glyph without
// one draws its lines heavier there instead.
// one draws its lines heavier there instead.
const SOLID = Object.freeze({
const SOLID = Object.freeze({
+ handshake: '<path d="M2.3 9.2h2.7v6.8H2.3ZM19 9.2h2.7v6.8H19Z"/><path class="ln" d="M5.6 10.8h0.3l3.4-2.6l2.9 1.3L14.6 8.1l3.4 2.6h0.4M5.9 10.8l5.4 5.4a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.4 12.8l-3.9-3.9l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/>',
focus: '<circle cx="12" cy="12" r="3.6"/><path class="ln" d="M3.8 9V6.1A2.3 2.3 0 0 1 6.1 3.8H9M15 3.8h2.9A2.3 2.3 0 0 1 20.2 6.1V9M20.2 15v2.9a2.3 2.3 0 0 1-2.3 2.3H15M9 20.2H6.1A2.3 2.3 0 0 1 3.8 17.9V15"/>',
focus: '<circle cx="12" cy="12" r="3.6"/><path class="ln" d="M3.8 9V6.1A2.3 2.3 0 0 1 6.1 3.8H9M15 3.8h2.9A2.3 2.3 0 0 1 20.2 6.1V9M20.2 15v2.9a2.3 2.3 0 0 1-2.3 2.3H15M9 20.2H6.1A2.3 2.3 0 0 1 3.8 17.9V15"/>',
// 4.182.0, the last five shapes: a car, a door, a podium, a rocket and a camera that flips. After these, every
// 4.182.0, the last five shapes: a car, a door, a podium, a rocket and a camera that flips. After these, every
// glyph without a solid drawing is one made of lines, which thickens when small instead.
// glyph without a solid drawing is one made of lines, which thickens when small instead.
@@ -244,7 +245,7 @@
@@ -244,7 +245,7 @@
// piggy bank), a couch, a coin over a box, two folders on a tree, a chequered flag, and two people.
// piggy bank), a couch, a coin over a box, two folders on a tree, a chequered flag, and two people.
airplane: '<path d="M11.8 2.6c1.3 0 2 1.2 2 3V9.5l7.2 4.2v2.5L13.8 13.7v3.5l2 1.5v2.5L11.8 19.7l-3.7 1.2v-2.5l2-1.5v-3.5l-7.2 2.5v-2.5L9.8 9.5V5.3c0-1.8 0.7-3 2-3Z"/>',
airplane: '<path d="M11.8 2.6c1.3 0 2 1.2 2 3V9.5l7.2 4.2v2.5L13.8 13.7v3.5l2 1.5v2.5L11.8 19.7l-3.7 1.2v-2.5l2-1.5v-3.5l-7.2 2.5v-2.5L9.8 9.5V5.3c0-1.8 0.7-3 2-3Z"/>',
burst: '<path d="M12.1 2.6l2 4.6l4.7-1.9l-1.9 4.7l4.6 2l-4.6 2l1.9 4.7l-4.7-1.9l-2 4.6l-2-4.6l-4.7 1.9l1.9-4.7L2.7 12l4.6-2l-1.9-4.7l4.7 1.9Z"/>',
burst: '<path d="M12.1 2.6l2 4.6l4.7-1.9l-1.9 4.7l4.6 2l-4.6 2l1.9 4.7l-4.7-1.9l-2 4.6l-2-4.6l-4.7 1.9l1.9-4.7L2.7 12l4.6-2l-1.9-4.7l4.7 1.9Z"/>',
- fish: '<path fill-rule="evenodd" d="M7.6 12c2.1-3.6 4.8-5.4 7.9-5.4 2.9 0 5 2.2 6.1 5.4-1.1 3.2-3.2 5.4-6.1 5.4-3.1 0-5.8-1.8-7.9-5.4ZM15.7 10.6a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z"/><path d="M8.4 12 2.9 7.4v9.2Z"/>',
+ fish: '<path fill-rule="evenodd" d="M8.7 12c1.9-3.5 4.6-5.3 7.6-5.3c2.8 0 4.6 2.2 5.4 5.3c-0.8 3.1-2.6 5.3-5.4 5.3c-3 0-5.7-1.8-7.6-5.3ZM16.2 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0Z"/><path class="ln" d="M8.7 12L4.4 8.9M8.7 12l-4.3 3.1"/>',
shoe: '<path d="M3.7 14.5V9.1l3.6-0.5l2.6-3.5l3.5 1.6l-0.8 2.3l3.1 1.7l3.6 0.8a1.9 1.9 0 0 1 1.3 1.8v1.4Z"/><path class="ln" d="M4.2 17h16"/>',
shoe: '<path d="M3.7 14.5V9.1l3.6-0.5l2.6-3.5l3.5 1.6l-0.8 2.3l3.1 1.7l3.6 0.8a1.9 1.9 0 0 1 1.3 1.8v1.4Z"/><path class="ln" d="M4.2 17h16"/>',
sword: '<path d="M21.2 2.8v4.7l-10.8 10.8l-4.7-4.7L16.5 2.8Z"/><path class="ln" d="M5.2 11.9L12.1 18.8M8.4 15.6L3.7 20.3"/>',
sword: '<path d="M21.2 2.8v4.7l-10.8 10.8l-4.7-4.7L16.5 2.8Z"/><path class="ln" d="M5.2 11.9L12.1 18.8M8.4 15.6L3.7 20.3"/>',
donate: '<path fill-rule="evenodd" d="M12 2.2a5.9 5.9 0 1 0 0 11.8a5.9 5.9 0 0 0 0-11.8Zm-0.8 3.4h1.7v5.1h-1.7ZM2.9 15h18.2v6H2.9ZM7.8 17.1v1.6h8.5V17.1Z"/>',
donate: '<path fill-rule="evenodd" d="M12 2.2a5.9 5.9 0 1 0 0 11.8a5.9 5.9 0 0 0 0-11.8Zm-0.8 3.4h1.7v5.1h-1.7ZM2.9 15h18.2v6H2.9ZM7.8 17.1v1.6h8.5V17.1Z"/>',
@@ -400,7 +401,7 @@
@@ -400,7 +401,7 @@
layers: '<path d="M12 4.3l8.6 5l-8.6 5l-8.6-5Z"/><path class="ln" d="M3.9 13.9l8.1 4.5l8.1-4.5"/>',
layers: '<path d="M12 4.3l8.6 5l-8.6 5l-8.6-5Z"/><path class="ln" d="M3.9 13.9l8.1 4.5l8.1-4.5"/>',
phone: '<path d="M5.1 2.4h4.9l2.4 6l-2.7 1.6a10.7 10.7 0 0 0 4.2 4.2l1.6-2.7l6 2.4v4.9a2.3 2.3 0 0 1-2.3 2.3A17.3 17.3 0 0 1 2.8 4.6a2.3 2.3 0 0 1 2.3-2.3Z"/>',
phone: '<path d="M5.1 2.4h4.9l2.4 6l-2.7 1.6a10.7 10.7 0 0 0 4.2 4.2l1.6-2.7l6 2.4v4.9a2.3 2.3 0 0 1-2.3 2.3A17.3 17.3 0 0 1 2.8 4.6a2.3 2.3 0 0 1 2.3-2.3Z"/>',
money: '<path fill-rule="evenodd" d="M4.8 5.7h14.4a2.1 2.1 0 0 1 2.1 2.1v8.4a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1V7.8a2.1 2.1 0 0 1 2.1-2.1ZM12 8.9a3.1 3.1 0 1 0 0 6.3a3.1 3.1 0 0 0 0-6.3ZM6.3 8.7a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Zm11.4 4.6a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Z"/><circle cx="12" cy="12" r="1.4"/>',
money: '<path fill-rule="evenodd" d="M4.8 5.7h14.4a2.1 2.1 0 0 1 2.1 2.1v8.4a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1V7.8a2.1 2.1 0 0 1 2.1-2.1ZM12 8.9a3.1 3.1 0 1 0 0 6.3a3.1 3.1 0 0 0 0-6.3ZM6.3 8.7a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Zm11.4 4.6a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Z"/><circle cx="12" cy="12" r="1.4"/>',
- care: '<path d="M17 11s-4.1-2.4-4.1-5.4a2.3 2.3 0 0 1 4.1-1.6a2.3 2.3 0 0 1 4.1 1.6c0 2.9-4.1 5.4-4.1 5.4Z"/><path class="ln" d="M3.5 16.2h3.2l4.3 3.2h5.9a2.1 2.1 0 0 0 0-4.3H13.3M7.9 16.2l2.3-2.1h3.6"/>',
+ care: '<path d="M12 11s-4.3-2.6-4.3-5.6a2.3 2.3 0 0 1 4.3-1.5a2.3 2.3 0 0 1 4.3 1.5c0 3-4.3 5.6-4.3 5.6Z"/><path class="ln" d="M3.8 13.8v6M3.8 15.2h3.1l3.3 2.7h7.5a1.7 1.7 0 0 0 0-3.4h-3.9"/>',
news: '<path fill-rule="evenodd" d="M2.8 2.6h14.2v15.2a2.2 2.2 0 0 0 2.2 2.2H5.1A2.2 2.2 0 0 1 2.8 18.9ZM6.6 6.6h6.8v1.7H6.6Zm0 3.7h6.8v1.7H6.6Zm0 3.7h4v1.7H6.6Z"/><path class="ln" d="M17.1 7.7H19.8V17.9a2.1 2.1 0 0 1-2.1 2.1"/>',
news: '<path fill-rule="evenodd" d="M2.8 2.6h14.2v15.2a2.2 2.2 0 0 0 2.2 2.2H5.1A2.2 2.2 0 0 1 2.8 18.9ZM6.6 6.6h6.8v1.7H6.6Zm0 3.7h6.8v1.7H6.6Zm0 3.7h4v1.7H6.6Z"/><path class="ln" d="M17.1 7.7H19.8V17.9a2.1 2.1 0 0 1-2.1 2.1"/>',
hand: '<path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/>',
hand: '<path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/>',
tack: '<path d="M8.5 3h7.2a0.8 0.8 0 0 1 0.8 1l-0.8 4l2.8 2.8a0.7 0.7 0 0 1-0.6 1.4H6.1a0.7 0.7 0 0 1-0.6-1.4l2.8-2.8l-0.8-4a0.8 0.8 0 0 1 0.8-1Z"/><path class="ln" d="M12 12.2V20.5"/>',
tack: '<path d="M8.5 3h7.2a0.8 0.8 0 0 1 0.8 1l-0.8 4l2.8 2.8a0.7 0.7 0 0 1-0.6 1.4H6.1a0.7 0.7 0 0 1-0.6-1.4l2.8-2.8l-0.8-4a0.8 0.8 0 0 1 0.8-1Z"/><path class="ln" d="M12 12.2V20.5"/>',
@@ -602,7 +602,7 @@
@@ -602,7 +602,7 @@
* serves its own pinned copy at /shared/ gets its own), else the network's copy.
* serves its own pinned copy at /shared/ gets its own), else the network's copy.
*/
*/
// The files loaded from beside this one, by content (scripts/sibling-revs.js): a release changes their URLs.
// The files loaded from beside this one, by content (scripts/sibling-revs.js): a release changes their URLs.
- const SIBLING_REV = { 'ov-mark.js': 'f34f731c3a94', 'ov-glyphs.js': 'aee8e54637c2', 'ov-brand.woff2': '3b4e6a8a5878', 'ov-look.js': 'dd84a30bb646', 'ov-fx.js': '947820d69097', 'ov-labels.js': 'd40f7ca14bc4', 'ov-forms.js': '2eb9e2604c3e', 'ov-forms.css': '06208fe89eac', 'ov-share.js': 'd419508a797e', 'ov-share.css': 'd609a71f611a', 'search.js': 'f9f34e3030b0', 'dock.js': 'aa5ad5d80283', 'presence.js': '5f195d41f8c5', 'panels.js': 'd90bfe987d81', 'surfaces.js': 'a94e76bd1200', 'notification-ui.js': '3b6d2e2933de', 'history.js': 'f9fb9e096c65', 'bottom.js': '4bcb219a2624', 'appbar.js': 'c21485176ae9', 'release-watch.js': '25f02a3f0684', 'ov-icons.js': 'aaa688bf6fc7', 'sso-client.js': '52439265b980', 'overlay.js': '2bc56b3cf726', 'ov-home.js': '0724f4913525', 'nav-slots.js': '7b11e6916732', 'ov-wallet.js': '22286b70f8f6', 'ov-wallet.css': 'be8daa24c3a8', 'purse.js': '9d3fea0dae02', 'ov-drop.js': '445689a5eb80', 'ov-tip.js': '1d918e7de69d', 'soft.js': '98ab9b8080b1' };
+ const SIBLING_REV = { 'ov-mark.js': 'f34f731c3a94', 'ov-glyphs.js': '642a391c85d5', 'ov-brand.woff2': '3b4e6a8a5878', 'ov-look.js': 'dd84a30bb646', 'ov-fx.js': '947820d69097', 'ov-labels.js': 'd40f7ca14bc4', 'ov-forms.js': '2eb9e2604c3e', 'ov-forms.css': '06208fe89eac', 'ov-share.js': 'd419508a797e', 'ov-share.css': 'd609a71f611a', 'search.js': 'f9f34e3030b0', 'dock.js': 'aa5ad5d80283', 'presence.js': '5f195d41f8c5', 'panels.js': 'd90bfe987d81', 'surfaces.js': 'a94e76bd1200', 'notification-ui.js': '3b6d2e2933de', 'history.js': 'f9fb9e096c65', 'bottom.js': '4bcb219a2624', 'appbar.js': 'c21485176ae9', 'release-watch.js': '25f02a3f0684', 'ov-icons.js': 'aaa688bf6fc7', 'sso-client.js': 'f574ac3331a5', 'overlay.js': '2bc56b3cf726', 'ov-home.js': '0724f4913525', 'nav-slots.js': '7b11e6916732', 'ov-wallet.js': '22286b70f8f6', 'ov-wallet.css': 'be8daa24c3a8', 'purse.js': '9d3fea0dae02', 'ov-drop.js': '445689a5eb80', 'ov-tip.js': '1d918e7de69d', 'ov-arrange.js': '898af091b3e1', 'soft.js': '98ab9b8080b1' };
const siblingV = (name) => `${sibling(name)}${SIBLING_REV[name] ? `?v=${SIBLING_REV[name]}` : ''}`;
const siblingV = (name) => `${sibling(name)}${SIBLING_REV[name] ? `?v=${SIBLING_REV[name]}` : ''}`;
// ov-tip.js loads at the first hover over a tooltip's owner.
// ov-tip.js loads at the first hover over a tooltip's owner.
@@ -1822,6 +1822,7 @@
@@ -1822,6 +1822,7 @@
}
}
let _authInFlight = null;
let _authInFlight = null;
+ let _hintPainted = false, _hintSettled = false;
function ssoHint() {
function ssoHint() {
const m = (typeof document !== 'undefined' ? document.cookie : '').match(/(?:^|;\s*)ov_sso_hint=([^;]*)/);
const m = (typeof document !== 'undefined' ? document.cookie : '').match(/(?:^|;\s*)ov_sso_hint=([^;]*)/);
@@ -1829,6 +1830,19 @@
@@ -1829,6 +1830,19 @@
try { return localStorage.getItem('ov_sso_hint'); } catch { return null; }
try { return localStorage.getItem('ov_sso_hint'); } catch { return null; }
}
}
+ /**
+ * The first paint, before the session check: a hint that this browser signed in here. It is not
+ * authorization and carries no token; only the account's own name may ride along (account:<name>).
+ */
+ function hintUser() {
+ let raw = ssoHint() || '';
+ try { raw = decodeURIComponent(raw); } catch { /* as written */ }
+ const m = /^account(?::(.{1,64}))?$/.exec(raw);
+ if (!m) return null;
+ let name = (m[1] || '').replace(/^@/, '');
+ return { is_anon: false, username: /^[A-Za-z0-9_.-]{1,64}$/.test(name) ? name : '', __ssoHint: true };
+ }
+
/** One silent sign-in per tab, only after an earlier sign-in here (never after 'guest', never for bots): silent=1. */
/** One silent sign-in per tab, only after an earlier sign-in here (never after 'guest', never for bots): silent=1. */
let _ssoClientLoading = null;
let _ssoClientLoading = null;
function loadSsoClient() {
function loadSsoClient() {
@@ -1965,7 +1979,9 @@
@@ -1965,7 +1979,9 @@
enableHandoff();
enableHandoff();
startQuestGuide();
startQuestGuide();
} else {
} else {
- maybeSilentLogin();
+ const navigating = maybeSilentLogin();
+ // The hint was only a first paint: no session behind it, so draw the guest bar.
+ if (_hintPainted && !navigating) { _hintPainted = false; _hintSettled = true; render(); }
}
}
try {
try {
document.dispatchEvent(new CustomEvent('openvibe-navbar-auth', {
document.dispatchEvent(new CustomEvent('openvibe-navbar-auth', {
@@ -2124,7 +2140,11 @@
@@ -2124,7 +2140,11 @@
if (typeof nav.setAttribute === 'function') { nav.setAttribute('data-compact', _config.compact || 'auto'); nav.setAttribute('data-service', svc); }
if (typeof nav.setAttribute === 'function') { nav.setAttribute('data-compact', _config.compact || 'auto'); nav.setAttribute('data-service', svc); }
const links = currentLinks();
const links = currentLinks();
- const u = _config.user;
+ // With the hint saying account, the bar starts in the signed-in shape (a neutral avatar, the
+ // account's name only when the hint carries it). refreshAuthState replaces or clears it.
+ const hinted = !_config.user && !_hintSettled && _config.auth !== 'external' ? hintUser() : null;
+ if (hinted) _hintPainted = true;
+ const u = _config.user || hinted;
rememberAccount(u);
rememberAccount(u);
const accounts = getAccounts();
const accounts = getAccounts();
const isAnon = u && u.is_anon;
const isAnon = u && u.is_anon;
new file mode 100644
new file mode 100644
@@ -0,0 +1,315 @@
@@ -0,0 +1,315 @@
+/* Generated by scripts/build-arrange-core.js from openvibe-sdk 0.152.0 (src/ui-layout.js). Do not edit:
+ * change the SDK, release it, bump the pin, and run the script. The SDK's file, unchanged but for the name of
+ * module.exports:
+ * ui-layout.js 4a079a94b487fd25
+ */
+(function (root) {
+ 'use strict';
+ if (!root || root.OVArrangeCore) return;
+ const __ovArrangeCoreModule = { exports: {} };
+'use strict';
+/**
+ * ui.layout validation and editing (make your own controls design, 2026-11-11, pieces 2-3).
+ *
+ * One function is the authority for a person's arrangement of a surface: the server uses it before
+ * a layout is stored, the editor uses it before Save, and OpenVibe.AI uses it on every answer. It is
+ * plain code with no browser or Node dependency, so the same check runs everywhere.
+ *
+ * validate(catalog, layout) -> { ok, reasons[] } the catalog is ui.surface@1, the layout ui.layout@1
+ * applyDefaults(catalog) -> a valid layout for the default (or named) device
+ * merge(layout, patch) -> a new layout, patched by part id
+ *
+ * The rules, in the words a person sees (the design note's "Can't do that: <reason>"):
+ * - required parts present, visible and at their minimum size;
+ * - anything pressed is at least 44 px, and a part above that gets its own minimum (Stop 64 px);
+ * - nothing covers a required part, and a catalog's never_covers rules hold;
+ * - every tint is a theme token the catalog lists, and every style and binding is one the part allows;
+ * - only parts the catalog has;
+ * - no URL, markup or code anywhere: a layout is data.
+ *
+ * The validator never changes a layout and never fills a missing value in: a caller that wants the
+ * default asks applyDefaults. Reasons are unique and in a stable order, so two runs and two callers
+ * agree on the refusal.
+ */
+
+const DEVICE_PX = { phone: 44, tablet: 44, computer: 44 };
+const DEVICE_COLUMNS = { phone: 4, tablet: 8, computer: 12 };
+const PRESSED_PX = 44;
+const MIN_OPACITY = 0.4;
+const MAX_OPACITY = 1;
+const URL_RE = /(?:https?:\/\/|www\.)/i;
+const SCHEME_RE = /(?:^|[\s"'(])(?:javascript|data|vbscript|file):/i;
+const CODE_RE = /(?:<\s*\/?\s*(?:script|iframe|img|svg|style|a|object|embed)\b|\bon[a-z]{3,}\s*=|\bfunction\s*\(|=>|\beval\s*\(|\brequire\s*\(|\bimport\s*\()/i;
+
+const isObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
+const clone = (v) => (v === undefined ? undefined : JSON.parse(JSON.stringify(v)));
+const nameOf = (part) => String((part && part.name) || (part && part.id) || 'that part');
+const unique = (list) => [...new Set(list)];
+
+/** Every string (and object key) in a value, for the no-URL/no-code rule. */
+function stringsIn(value, out = []) {
+ if (typeof value === 'string') { out.push(value); return out; }
+ if (Array.isArray(value)) { for (const v of value) stringsIn(v, out); return out; }
+ if (!isObject(value)) return out;
+ for (const [k, v] of Object.entries(value)) { out.push(k); stringsIn(v, out); }
+ return out;
+}
+
+/** A part's size in cells: grid place (w/h) or dock place (w/h); null when the place is unusable. */
+function sizeOf(place) {
+ if (!isObject(place)) return null;
+ if (place.dock !== undefined) {
+ return Number.isInteger(place.w) && Number.isInteger(place.h) && place.w >= 1 && place.h >= 1 ? { w: place.w, h: place.h } : null;
+ }
+ return Number.isInteger(place.w) && Number.isInteger(place.h) && place.w >= 1 && place.h >= 1 ? { w: place.w, h: place.h } : null;
+}
+
+/** The rectangular cells a visible part occupies, or null for a dock (which covers along its edge). */
+function boxOf(part) {
+ const p = part && part.place;
+ if (!isObject(p) || p.dock !== undefined) return null;
+ if (![p.x, p.y, p.w, p.h].every(Number.isInteger)) return null;
+ if (p.x < 0 || p.y < 0 || p.w < 1 || p.h < 1) return null;
+ return { x: p.x, y: p.y, w: p.w, h: p.h };
+}
+
+function overlaps(a, b) {
+ return a.x < b.x + b.w && b.x < a.x + a.w && a.y < b.y + b.h && b.y < a.y + a.h;
+}
+
+/** Two docked parts cover each other only when they claim the same edge and order. */
+function dockOverlaps(a, b) {
+ const pa = a && a.place;
+ const pb = b && b.place;
+ return isObject(pa) && isObject(pb) && pa.dock !== undefined && pb.dock !== undefined
+ && pa.dock === pb.dock && pa.order === pb.order;
+}
+
+/**
+ * Check one layout against its surface catalog.
+ * @returns {{ ok: boolean, reasons: string[] }}
+ */
+function validate(catalog, layout) {
+ const reasons = [];
+ const fail = (reason) => { if (!reasons.includes(reason)) reasons.push(reason); };
+ if (!isObject(catalog) || !Array.isArray(catalog.parts)) {
+ return { ok: false, reasons: ['The surface catalog is missing.'] };
+ }
+ if (!isObject(layout)) return { ok: false, reasons: ['A layout has to be an object.'] };
+
+ // A layout is data: never a URL, markup or code, anywhere in a name, a value or a key.
+ if (stringsIn(layout).some((s) => URL_RE.test(s) || SCHEME_RE.test(s) || CODE_RE.test(s))) {
+ fail("A layout is data only: it can't carry a URL or code.");
+ }
+
+ if (layout.surface !== catalog.id) fail(`This layout is not for ${catalog.id || 'this surface'}.`);
+ if (layout.surface_version !== catalog.version) {
+ fail(`${catalog.name || 'This surface'} has changed since this layout was made; reset it to the default.`);
+ }
+ const device = layout.device;
+ const devices = Array.isArray(catalog.devices) ? catalog.devices : ['phone', 'tablet', 'computer'];
+ if (!devices.includes(device)) fail(`This surface doesn't come in ${device || 'that device'}.`);
+
+ const columns = (catalog.grid && catalog.grid.columns && catalog.grid.columns[device]) || DEVICE_COLUMNS[device] || 4;
+ const cellPx = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[device]) || DEVICE_PX[device] || 44;
+ const tokens = Array.isArray(catalog.theme_tokens) ? catalog.theme_tokens : [];
+ const byId = new Map(catalog.parts.filter((p) => p && p.id).map((p) => [p.id, p]));
+ const parts = Array.isArray(layout.parts) ? layout.parts : [];
+ const placed = new Map();
+
+ if (!Array.isArray(layout.parts) || layout.parts.length === 0) fail('A layout needs at least one part.');
+
+ for (const placedPart of parts) {
+ if (!isObject(placedPart) || typeof placedPart.id !== 'string') { fail('Every part in a layout needs an id.'); continue; }
+ const source = byId.get(placedPart.id);
+ if (!source) { fail(`${placedPart.id} is not a part of ${catalog.name || 'this surface'}.`); continue; }
+ if (placed.has(placedPart.id)) { fail(`${nameOf(source)} appears more than once.`); continue; }
+ placed.set(placedPart.id, placedPart);
+
+ const name = nameOf(source);
+ if (source.required && placedPart.visible !== true) fail(`${name} has to stay visible.`);
+
+ const place = placedPart.place;
+ if (!isObject(place)) { fail(`${name} needs a place on the surface.`); continue; }
+ const size = sizeOf(place);
+ if (!size) { fail(`${name} needs a size, in cells.`); continue; }
+ if (place.dock !== undefined) {
+ if (!['left', 'right', 'top', 'bottom'].includes(place.dock)) fail(`${name} can only dock to an edge.`);
+ if (!Number.isInteger(place.order) || place.order < 0) fail(`${name} needs a place in the dock order.`);
+ } else {
+ if (!Number.isInteger(place.x) || place.x < 0 || !Number.isInteger(place.y) || place.y < 0) fail(`${name} needs a place on the grid.`);
+ else if (place.x + place.w > columns) fail(`${name} runs past the edge of the ${device} grid.`);
+ }
+ const min = source.min || {};
+ if (size.w < (min.w || 1) || size.h < (min.h || 1)) {
+ fail(`${name} has to be at least ${Math.max(min.w || 1, 1)} × ${Math.max(min.h || 1, 1)} cells.`);
+ }
+ const needPx = Math.max(source.pressed ? PRESSED_PX : 0, Number(min.px) || 0);
+ if (needPx && (size.w * cellPx < needPx || size.h * cellPx < needPx)) fail(`${name} has to be at least ${needPx} px.`);
+
+ const style = isObject(placedPart.style) ? placedPart.style : {};
+ const allowedStyles = isObject(source.styles) ? source.styles : {};
+ if (typeof style.tint !== 'string' || !tokens.includes(style.tint)) {
+ fail(`${name}'s tint has to be one of the theme's tokens${tokens.length ? ` (${tokens.join(', ')})` : ''}.`);
+ } else if (Array.isArray(allowedStyles.tints) && !allowedStyles.tints.includes(style.tint)) {
+ fail(`${name} can only be tinted ${allowedStyles.tints.join(', ')}.`);
+ }
+ if (!['round', 'pill', 'square'].includes(style.shape)) fail(`${name} needs a shape: round, pill or square.`);
+ else if (Array.isArray(allowedStyles.shapes) && !allowedStyles.shapes.includes(style.shape)) {
+ fail(`${name} can only be ${allowedStyles.shapes.join(', ')}.`);
+ }
+ const low = Math.max(MIN_OPACITY, Number(allowedStyles.opacity && allowedStyles.opacity.min) || MIN_OPACITY);
+ const high = Math.min(MAX_OPACITY, Number(allowedStyles.opacity && allowedStyles.opacity.max) || MAX_OPACITY);
+ if (typeof style.opacity !== 'number' || style.opacity < low || style.opacity > high) {
+ fail(`${name}'s opacity has to be between ${low} and ${high}.`);
+ }
+ if (style.label !== true && style.label !== false) fail(`${name} says whether its label is on.`);
+ else if (style.label && allowedStyles.label === false) fail(`${name} can't show a label.`);
+
+ const bindings = isObject(placedPart.bindings) ? placedPart.bindings : {};
+ const allowed = isObject(source.bindings) ? source.bindings : {};
+ for (const kind of ['keys', 'gamepad']) {
+ const list = Array.isArray(bindings[kind]) ? bindings[kind] : [];
+ const ok = Array.isArray(allowed[kind]) ? allowed[kind] : [];
+ const bad = list.filter((b) => !ok.includes(b));
+ if (bad.length) fail(`${name} can't be bound to ${bad.join(', ')}.`);
+ if (new Set(list).size !== list.length) fail(`${name} binds ${kind} more than once.`);
+ }
+ }
+
+ for (const source of catalog.parts) {
+ if (source && source.required && !placed.has(source.id)) fail(`${nameOf(source)} has to stay on the surface.`);
+ }
+
+ // Nothing covers a required part. Only a visible part can cover anything, and a required part
+ // that is itself hidden is already refused above; its neighbours still do not cover it.
+ const visible = parts.filter((p) => p && p.visible === true && placed.has(p.id));
+ for (const required of visible) {
+ const source = byId.get(required.id);
+ if (!source || !source.required) continue;
+ for (const other of visible) {
+ if (other === required || other.id === required.id) continue;
+ const covers = overlaps(boxOf(required) || { x: 0, y: 0, w: 0, h: 0 }, boxOf(other) || { x: 0, y: 0, w: 0, h: 0 })
+ || dockOverlaps(required, other);
+ if (covers) fail(`${nameOf(byId.get(other.id))} covers ${nameOf(source)}.`);
+ }
+ }
+ // A catalog's own never_covers rules, in either direction of the relation it states.
+ for (const [id, source] of byId) {
+ const own = placed.get(id);
+ if (!own || own.visible !== true) continue;
+ for (const targetId of Array.isArray(source.never_covers) ? source.never_covers : []) {
+ const target = placed.get(targetId);
+ if (!target || target.visible !== true) continue;
+ const targetSource = byId.get(targetId);
+ if (overlaps(boxOf(own) || { x: 0, y: 0, w: 0, h: 0 }, boxOf(target) || { x: 0, y: 0, w: 0, h: 0 }) || dockOverlaps(own, target)) {
+ fail(`${nameOf(source)} covers ${nameOf(targetSource || { id: targetId })}.`);
+ }
+ }
+ }
+
+ return { ok: reasons.length === 0, reasons };
+}
+
+/** The cells a part needs at the default size: its own minimum, and at least 44 px when pressed. */
+function cellsFor(part, cellPx) {
+ const min = part.min || {};
+ const px = Math.max(part.pressed ? PRESSED_PX : 0, Number(min.px) || 0);
+ return {
+ w: Math.max(1, Number(min.w) || 1, px ? Math.ceil(px / cellPx) : 0),
+ h: Math.max(1, Number(min.h) || 1, px ? Math.ceil(px / cellPx) : 0),
+ };
+}
+
+/**
+ * The default arrangement of a surface: every catalog part, visible, at its minimum (or a size that
+ * meets the 44 px rule), required parts first, laid out left to right and then down the grid.
+ * @param {object} catalog ui.surface@1
+ * @param {'phone'|'tablet'|'computer'} [device] defaults to the catalog's first device
+ */
+function applyDefaults(catalog, device) {
+ if (!isObject(catalog) || !Array.isArray(catalog.parts)) throw new TypeError('applyDefaults: a ui.surface@1 catalog is required');
+ const chosen = (Array.isArray(catalog.devices) && catalog.devices.includes(device)) ? device : (catalog.devices || ['phone'])[0];
+ const columns = (catalog.grid && catalog.grid.columns && catalog.grid.columns[chosen]) || DEVICE_COLUMNS[chosen] || 4;
+ const cellPx = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[chosen]) || DEVICE_PX[chosen] || 44;
+ const ordered = [...catalog.parts].sort((a, b) => (b.required ? 1 : 0) - (a.required ? 1 : 0));
+ let x = 0; let y = 0; let rowHeight = 0;
+ const parts = ordered.map((part) => {
+ const size = cellsFor(part, cellPx);
+ const w = Math.min(columns, size.w);
+ const h = size.h;
+ if (x + w > columns) { x = 0; y += rowHeight; rowHeight = 0; }
+ const place = { x, y, w, h };
+ x += w;
+ rowHeight = Math.max(rowHeight, h);
+ const styles = isObject(part.styles) ? part.styles : {};
+ const bindings = isObject(part.bindings) ? part.bindings : {};
+ const tokens = Array.isArray(catalog.theme_tokens) ? catalog.theme_tokens : [];
+ const tints = Array.isArray(styles.tints) ? styles.tints : [];
+ return {
+ id: part.id,
+ visible: true,
+ place,
+ style: {
+ tint: tints.find((t) => tokens.includes(t)) || tints[0] || tokens[0] || 'surface',
+ shape: (Array.isArray(styles.shapes) && styles.shapes[0]) || 'square',
+ opacity: 1,
+ label: styles.label !== false,
+ },
+ bindings: {
+ keys: Array.isArray(bindings.keys) ? [...bindings.keys] : [],
+ gamepad: Array.isArray(bindings.gamepad) ? [...bindings.gamepad] : [],
+ },
+ };
+ });
+ return {
+ surface: catalog.id,
+ surface_version: catalog.version,
+ device: chosen,
+ name: 'Default',
+ author: { name: 'OpenVibe' },
+ sharing: 'private',
+ parts,
+ };
+}
+
+function mergeInto(base, patch) {
+ if (!isObject(base)) return clone(patch);
+ if (!isObject(patch)) return clone(patch);
+ const out = clone(base);
+ for (const [key, value] of Object.entries(patch)) {
+ if (isObject(value) && isObject(out[key])) out[key] = mergeInto(out[key], value);
+ else out[key] = clone(value);
+ }
+ return out;
+}
+
+/**
+ * A new layout with `patch` applied. `parts` are merged by id: a patch part changes only the fields it
+ * names, and a part the layout does not have is appended. Nothing is mutated, and the result is not
+ * validated (the caller validates before storing or showing it).
+ */
+function merge(layout, patch) {
+ if (!isObject(layout)) throw new TypeError('merge: a layout is required');
+ if (!isObject(patch)) return clone(layout);
+ const out = clone(layout);
+ for (const [key, value] of Object.entries(patch)) {
+ if (key === 'parts' && Array.isArray(value)) {
+ const parts = Array.isArray(out.parts) ? out.parts.map(clone) : [];
+ const index = new Map(parts.map((p, i) => [p && p.id, i]));
+ for (const incoming of value) {
+ if (!isObject(incoming) || typeof incoming.id !== 'string') { parts.push(clone(incoming)); continue; }
+ if (index.has(incoming.id)) parts[index.get(incoming.id)] = mergeInto(parts[index.get(incoming.id)], incoming);
+ else { index.set(incoming.id, parts.length); parts.push(clone(incoming)); }
+ }
+ out.parts = parts;
+ } else if (isObject(value) && isObject(out[key])) out[key] = mergeInto(out[key], value);
+ else out[key] = clone(value);
+ }
+ return out;
+}
+
+__ovArrangeCoreModule.exports = { validate, applyDefaults, merge, PRESSED_PX };
+
+ root.OVArrangeCore = __ovArrangeCoreModule.exports;
+})(typeof globalThis !== 'undefined' ? globalThis : this);
new file mode 100644
new file mode 100644
@@ -0,0 +1,844 @@
@@ -0,0 +1,844 @@
+/**
+ * openvibe-shared/ov-arrange.js — the Arrange editor (make your own controls, stage 2, 2026-11-11).
+ *
+ * A product publishes a ui.surface@1 catalog and renders one element per part with data-ov-part="<id>".
+ * A person's ui.layout@1 is applied to those real parts: a place on the surface's grid, or a dock edge for
+ * an overlay; visible; a style (a theme token, a shape, an opacity and the label); and bindings. This file
+ * is loaded only when someone presses Arrange (a product loads it then, by the shared serve URL, and this
+ * file loads its own sibling ov-arrange-core.js — openvibe-sdk/ui-layout for the browser — by content hash).
+ *
+ * OVArrange.open({
+ * surface, catalog, layout, device: 'phone'|'tablet'|'computer',
+ * validate(catalog, layout) -> { ok, reasons[] }, // optional: defaults to the sdk core
+ * defaults(catalog) -> layout, // optional: defaults to the sdk core
+ * onSave(layout) -> Promise<{ ok?, reasons? }>, // PUT the person's layout (Network)
+ * onShare(layout) -> Promise<{ url?, reasons? }>, // save, then a share link
+ * onReset() -> Promise<{ ok?, reasons? }>, // clear the stored layout (Network's reset)
+ * onAsk(words, request) -> Promise<ui.layout-suggestion@1>,
+ * onClose(), confirm() -> boolean, core
+ * }) -> { close, apply, layout, destroy }
+ *
+ * Edit mode: drag a part to move it, drag its corner to resize, arrow keys to move and Shift with the
+ * arrows to resize (for a docked part: the arrows choose the edge, up/down its order). A part's sheet
+ * (long press on a phone, the Style button, or Enter on a part) has visible, size, style and bindings.
+ * Every move and resize is announced, and a refused move says why in plain words (Stop has to stay
+ * visible; it is too small). Undo, Reset to default, Save and Share are in the bar, with Ask OpenVibe:
+ * a suggestion is previewed on the real parts and kept only with Keep. Motion Off changes nothing;
+ * Calm plays the short transition. Plain kit markup (ovk-*): the look is the page's.
+ */
+(function (root) {
+ 'use strict';
+ if (!root || root.OVArrange || typeof document === 'undefined') return;
+
+ const VERSION = '1.0.0';
+ const MOTION = () => {
+ const m = document.documentElement.getAttribute('data-ov-motion');
+ if (m === 'off') return 'off';
+ return m === 'reduced' || (!m && root.matchMedia && root.matchMedia('(prefers-reduced-motion: reduce)').matches) ? 'calm' : 'full';
+ };
+
+ const CSS = `
+.ov-arrange-surface { position: relative; display: grid; grid-template-columns: repeat(var(--ov-cols, 12), minmax(0, 1fr)); grid-auto-rows: minmax(var(--ov-cell, 64px), auto); gap: var(--ov-gap, .75rem); }
+.ov-arrange-surface > [data-ov-part] { min-width: 0; min-height: 0; opacity: var(--ov-part-opacity, 1); }
+.ov-arrange-surface > [data-ov-part][data-ov-label="false"] .ov-arrange-label { display: none; }
+.ov-arrange-editing [data-ov-part] { cursor: grab; outline: 1px dashed color-mix(in srgb, var(--accent, #3b82f6) 55%, transparent); outline-offset: 2px; touch-action: none; transition: box-shadow var(--ov-arrange-dur, .2s) ease, outline-color var(--ov-arrange-dur, .2s) ease; }
+.ov-arrange-editing [data-ov-part]:focus-visible { outline: 2px solid var(--accent, #3b82f6); outline-offset: 3px; }
+.ov-arrange-editing [data-ov-part][data-ov-selected] { outline: 2px solid var(--accent, #3b82f6); outline-offset: 3px; }
+.ov-arrange-editing [data-ov-part] :is(button, input, select, textarea, a, [role="button"]) { pointer-events: none; }
+.ov-arrange-editing [data-ov-part][data-ov-dragging] { cursor: grabbing; opacity: .8; }
+.ov-arrange-editing [data-ov-part][data-ov-refused] { outline-color: var(--danger, #e5484d); }
+.ov-arrange-sel { position: fixed; z-index: 2147482990; pointer-events: none; border: 2px solid var(--accent, #3b82f6); border-radius: 10px; box-shadow: 0 0 0 9999px color-mix(in srgb, #000 14%, transparent); }
+.ov-arrange-handle, .ov-arrange-style { position: fixed; z-index: 2147482991; pointer-events: auto; width: 34px; height: 34px; min-width: 34px; min-height: 34px; padding: 0; display: grid; place-items: center; border-radius: 9px; border: 1px solid var(--line, rgba(255,255,255,.2)); background: var(--raised, #1b2230); color: var(--text, #eef); cursor: nwse-resize; }
+.ov-arrange-handle { touch-action: none; }
+.ov-arrange-style { cursor: pointer; font-size: 15px; }
+.ov-arrange-handle::before { content: ""; width: 12px; height: 12px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translate(-2px, -2px); }
+.ov-arrange-bar { position: fixed; z-index: 2147483000; left: 50%; bottom: max(12px, env(safe-area-inset-bottom)); transform: translateX(-50%); width: min(56rem, calc(100vw - 24px)); display: grid; gap: 8px; padding: 10px 12px; border: 1px solid var(--line, rgba(255,255,255,.16)); border-radius: 16px; background: var(--surface, #151b26); color: var(--text, #eef); box-shadow: 0 18px 50px -16px rgba(0,0,0,.7); font: 14px/1.4 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
+.ov-arrange-bar form { display: flex; gap: 8px; min-width: 0; }
+.ov-arrange-bar input { flex: 1; min-width: 0; min-height: 40px; padding: 0 12px; border-radius: 10px; border: 1px solid var(--line, rgba(255,255,255,.18)); background: var(--bg, #0d1117); color: var(--text, #eef); font: inherit; }
+.ov-arrange-actions { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
+.ov-arrange-actions .ovk-btn, .ov-arrange-bar form .ovk-btn { min-height: 38px; }
+.ov-arrange-status { margin: 0; min-height: 1.2em; color: var(--muted, #9aa6b6); font-size: 12.5px; }
+.ov-arrange-status[data-tone="bad"] { color: var(--danger, #e5484d); }
+.ov-arrange-status[data-tone="ok"] { color: var(--ok, #3fb950); }
+.ov-arrange-preview { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 10px; background: color-mix(in srgb, var(--accent, #3b82f6) 14%, transparent); }
+.ov-arrange-preview p { margin: 0; flex: 1 1 14rem; }
+.ov-arrange-sheet { position: fixed; z-index: 2147483001; inset: auto 0 0 0; max-height: min(82vh, 42rem); overflow: auto; padding: 14px; background: var(--surface, #151b26); color: var(--text, #eef); border-top: 1px solid var(--line, rgba(255,255,255,.18)); border-radius: 16px 16px 0 0; box-shadow: 0 -20px 50px -20px rgba(0,0,0,.7); font: 14px/1.4 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; display: grid; gap: 12px; }
+@media (min-width: 44rem) { .ov-arrange-sheet { left: 50%; right: auto; bottom: 50%; transform: translate(-50%, 50%); width: min(30rem, calc(100vw - 32px)); border-radius: 16px; border: 1px solid var(--line, rgba(255,255,255,.18)); } }
+.ov-arrange-sheet h2 { margin: 0; font-size: 15px; }
+.ov-arrange-sheet .ov-arrange-row { display: grid; gap: 5px; }
+.ov-arrange-sheet .ov-arrange-row > span { font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted, #9aa6b6); }
+.ov-arrange-sheet .ov-arrange-opts { display: flex; flex-wrap: wrap; gap: 6px; }
+.ov-arrange-sheet .ov-arrange-opts label { display: inline-flex; align-items: center; gap: 5px; min-height: 36px; padding: 0 10px; border: 1px solid var(--line, rgba(255,255,255,.18)); border-radius: 9px; cursor: pointer; }
+.ov-arrange-sheet .ov-arrange-opts input { margin: 0; }
+.ov-arrange-sheet .ov-arrange-close { justify-self: end; }
+.ov-arrange-sheet input[type="text"] { min-height: 38px; padding: 0 10px; border-radius: 9px; border: 1px solid var(--line, rgba(255,255,255,.18)); background: var(--bg, #0d1117); color: var(--text, #eef); font: inherit; }
+.ov-arrange-share { display: grid; gap: 8px; padding: 10px; border-radius: 10px; background: var(--bg, #0d1117); }
+.ov-arrange-share input { width: 100%; min-height: 38px; padding: 0 10px; border-radius: 9px; border: 1px solid var(--line, rgba(255,255,255,.18)); background: var(--surface, #151b26); color: var(--text, #eef); font: inherit; }
+html[data-ov-motion="off"] .ov-arrange-surface [data-ov-part], html[data-ov-motion="off"] .ov-arrange-sel, html[data-ov-motion="off"] .ov-arrange-bar { transition: none !important; }
+html[data-ov-motion="reduced"] { --ov-arrange-dur: .12s; }
+`;
+
+ const clone = (v) => (v == null ? v : JSON.parse(JSON.stringify(v)));
+ const isObj = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
+ const esc = (s) => String(s == null ? '' : s);
+ const partName = (catalog, id) => {
+ const p = (catalog.parts || []).find((x) => x.id === id);
+ return p ? p.name : id;
+ };
+ const catalogPart = (catalog, id) => (catalog.parts || []).find((x) => x.id === id) || null;
+ const entryOf = (layout, id) => ((layout && layout.parts) || []).find((p) => p.id === id) || null;
+ const docked = (place) => !!(place && place.dock);
+
+ function styleOnce(doc) {
+ if (doc.getElementById('ov-arrange-styles')) return;
+ const st = doc.createElement('style');
+ st.id = 'ov-arrange-styles';
+ st.textContent = CSS;
+ (doc.head || doc.documentElement).appendChild(st);
+ }
+
+ // ── The SDK's rules, as a browser sibling (scripts/build-arrange-core.js) ─────────────────────────
+ const ARRANGE_CORE_REV = { 'ov-arrange-core.js': 'bc9a2caac869' };
+ let coreLoading = null;
+ function loadCore(opts) {
+ if (opts && opts.core) return Promise.resolve(opts.core);
+ if (root.OVArrangeCore) return Promise.resolve(root.OVArrangeCore);
+ if (coreLoading) return coreLoading;
+ if (!root.document || !document.currentScript) return Promise.resolve(null);
+ const src = document.currentScript.src || '';
+ if (!src) return Promise.resolve(null);
+ const url = src.replace(/[^/]*$/, `ov-arrange-core.js${ARRANGE_CORE_REV['ov-arrange-core.js'] ? `?v=${ARRANGE_CORE_REV['ov-arrange-core.js']}` : ''}`);
+ coreLoading = new Promise((resolve) => {
+ const sc = document.createElement('script');
+ sc.src = url; sc.async = true;
+ sc.onload = () => resolve(root.OVArrangeCore || null);
+ sc.onerror = () => resolve(null);
+ document.head.appendChild(sc);
+ });
+ return coreLoading;
+ }
+
+ // The rules when the SDK core is not there (a product without the sibling): the same checks the contract
+ // lists, in the same plain words. The SDK remains the one authority when it is loaded.
+ function fallbackValidate(catalog, layout) {
+ const reasons = [];
+ const parts = catalog && catalog.parts || [];
+ const byId = new Map(parts.map((p) => [p.id, p]));
+ if (!isObj(layout)) return { ok: false, reasons: ['That is not a layout.'] };
+ if (layout.surface !== catalog.id) reasons.push(`This layout is for ${esc(layout.surface)}, not ${esc(catalog.id)}.`);
+ if (layout.surface_version !== catalog.version) reasons.push('This layout was made for another version of these controls.');
+ if (!(catalog.devices || []).includes(layout.device)) reasons.push(`These controls do not work on a ${esc(layout.device)}.`);
+ if (!Array.isArray(layout.parts) || !layout.parts.length) reasons.push('A layout needs at least one part.');
+ const seen = new Set();
+ const entries = Array.isArray(layout.parts) ? layout.parts : [];
+ for (const e of entries) {
+ if (!isObj(e) || typeof e.id !== 'string') { reasons.push('A layout has a part without an id.'); continue; }
+ if (seen.has(e.id)) reasons.push(`${partName(catalog, e.id)} is in the layout twice.`);
+ seen.add(e.id);
+ if (!byId.has(e.id)) { reasons.push(`These controls have no part called ${esc(e.id)}.`); continue; }
+ // No links or code anywhere in the data.
+ for (const [k, v] of Object.entries(e)) {
+ if (typeof v === 'string' && /(https?:\/\/|\/\/|javascript:|data:|<[a-z])/i.test(v)) reasons.push('A layout only carries data: no links or code.');
+ if (k === 'style' && isObj(v)) for (const sv of Object.values(v)) if (typeof sv === 'string' && /(https?:\/\/|\/\/|javascript:|data:|<[a-z])/i.test(sv)) reasons.push('A layout only carries data: no links or code.');
+ }
+ }
+ for (const p of parts) {
+ const e = entries.find((x) => isObj(x) && x.id === p.id);
+ if (p.required && !e) { reasons.push(`${p.name} has to be there.`); continue; }
+ if (!e) continue;
+ if (p.required && e.visible === false) { reasons.push(`${p.name} has to stay visible.`); continue; }
+ if (!isObj(e.place)) { reasons.push(`${p.name} has no place.`); continue; }
+ if (!docked(e.place)) {
+ const { x, y, w, h } = e.place;
+ const cols = (catalog.grid && catalog.grid.columns && catalog.grid.columns[layout.device]) || 12;
+ if (![x, y, w, h].every((n) => Number.isInteger(n))) { reasons.push(`${p.name} needs a place on the grid.`); continue; }
+ if (x < 0 || y < 0 || w < 1 || h < 1 || x + w > cols) reasons.push(`${p.name} does not fit on this grid.`);
+ if (w < p.min.w || h < p.min.h) reasons.push(`${p.name} is too small: it needs ${p.min.w} by ${p.min.h} cells.`);
+ const cell = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[layout.device]) || 44;
+ if (p.min.px && (w * cell < p.min.px || h * cell < p.min.px)) reasons.push(`${p.name} has to be at least ${p.min.px} px.`);
+ if (p.pressed && (w * cell < 44 || h * cell < 44)) reasons.push(`${p.name} is pressed, so it has to be at least 44 px.`);
+ } else {
+ if (!['left', 'right', 'top', 'bottom'].includes(e.place.dock)) reasons.push(`${p.name} needs an edge to dock to.`);
+ if (!Number.isInteger(e.place.order) || e.place.order < 0) reasons.push(`${p.name} needs an order on its edge.`);
+ if (!Number.isInteger(e.place.w) || !Number.isInteger(e.place.h)) reasons.push(`${p.name} needs a size, in cells.`);
+ else {
+ if (e.place.w < p.min.w || e.place.h < p.min.h) reasons.push(`${p.name} is too small: it needs ${p.min.w} by ${p.min.h} cells.`);
+ const cell = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[layout.device]) || 44;
+ if (p.min.px && (e.place.w * cell < p.min.px || e.place.h * cell < p.min.px)) reasons.push(`${p.name} has to be at least ${p.min.px} px.`);
+ if (p.pressed && (e.place.w * cell < 44 || e.place.h * cell < 44)) reasons.push(`${p.name} is pressed, so it has to be at least 44 px.`);
+ }
+ }
+ const st = e.style || {};
+ if (!(catalog.theme_tokens || []).includes(st.tint)) reasons.push(`${p.name} uses a colour this theme does not have.`);
+ if (!((p.styles && p.styles.tints) || []).includes(st.tint)) reasons.push(`${partName(catalog, p.id)} cannot use that colour.`);
+ if (!((p.styles && p.styles.shapes) || []).includes(st.shape)) reasons.push(`${p.name} cannot be that shape.`);
+ if (typeof st.opacity === 'number' && (st.opacity < 0.4 || st.opacity > 1)) reasons.push(`${p.name} has to stay at least 40% visible.`);
+ const b = e.bindings || {};
+ for (const k of (b.keys || [])) if (!((p.bindings && p.bindings.keys) || []).includes(k)) reasons.push(`${p.name} cannot use the key ${esc(k)}.`);
+ for (const g of (b.gamepad || [])) if (!((p.bindings && p.bindings.gamepad) || []).includes(g)) reasons.push(`${p.name} cannot use the gamepad control ${esc(g)}.`);
+ }
+ // Nothing covers a required part, and never_covers.
+ const placed = entries.filter((e) => isObj(e.place) && !docked(e.place));
+ const dockedEntries = entries.filter((e) => isObj(e.place) && docked(e.place));
+ for (const a of dockedEntries) {
+ if (!catalogPart(catalog, a.id)) continue;
+ for (const b of dockedEntries) {
+ if (a === b || !catalogPart(catalog, b.id)) continue;
+ if (a.place.dock === b.place.dock && a.place.order === b.place.order) {
+ const ap = catalogPart(catalog, a.id), bp = catalogPart(catalog, b.id);
+ if (bp.required) reasons.push(`${partName(catalog, a.id)} covers ${bp.name}.`);
+ if (((ap.never_covers) || []).includes(b.id)) reasons.push(`${partName(catalog, a.id)} must never cover ${bp.name}.`);
+ }
+ }
+ }
+ for (const a of placed) {
+ if (!catalogPart(catalog, a.id)) continue;
+ for (const b of placed) {
+ if (a === b || !catalogPart(catalog, b.id)) continue;
+ const covers = a.place.x < b.place.x + b.place.w && a.place.x + a.place.w > b.place.x && a.place.y < b.place.y + b.place.h && a.place.y + a.place.h > b.place.y;
+ if (!covers) continue;
+ const bp = catalogPart(catalog, b.id);
+ if (bp.required) reasons.push(`${partName(catalog, a.id)} covers ${bp.name}.`);
+ if (((catalogPart(catalog, a.id).never_covers) || []).includes(b.id)) reasons.push(`${partName(catalog, a.id)} must never cover ${bp.name}.`);
+ }
+ }
+ return { ok: reasons.length === 0, reasons: [...new Set(reasons)] };
+ }
+
+ // ── Defaults: one visible part after another on the grid; docked parts by their catalog order ─────
+ function spanFor(p, device) {
+ const cols = (p && p._cols) || 4;
+ if (device === 'computer') return { w: Math.min(4, cols), h: 2 };
+ if (device === 'tablet') return { w: Math.min(4, cols), h: 2 };
+ return { w: cols, h: 2 };
+ }
+ function fallbackDefaults(catalog, device) {
+ const cols = (catalog.grid && catalog.grid.columns && catalog.grid.columns[device]) || 12;
+ const overlay = (catalog.id || '').split('.').pop() === 'overlay';
+ const parts = (catalog.parts || []).map((p) => {
+ const st = { tint: (p.styles && p.styles.tints && p.styles.tints[0]) || (catalog.theme_tokens || ['surface'])[0], shape: (p.styles && p.styles.shapes && p.styles.shapes[0]) || 'square', opacity: 1, label: true };
+ const b = { keys: (p.bindings && p.bindings.keys || []).slice(0, 0), gamepad: [] };
+ if (overlay) {
+ const dock = p.id === 'pill' || p.id === 'stick' ? 'left' : p.id === 'slider' || p.id === 'estop' ? 'bottom' : 'right';
+ return { id: p.id, visible: true, place: { dock, order: 0, w: Math.max(p.min.w, p.id === 'stick' ? 2 : p.id === 'estop' ? 2 : 1), h: Math.max(p.min.h, p.id === 'stick' ? 2 : p.id === 'estop' ? 2 : 1) }, style: st, bindings: b };
+ }
+ return { id: p.id, visible: true, place: { x: 0, y: 0, w: Math.min(spanFor({ ...p, _cols: cols }, device).w, cols), h: Math.max(p.min.h, 2) }, style: st, bindings: b };
+ });
+ if (!overlay) {
+ // Flow them: full-width rows on a phone, two or three columns on larger surfaces.
+ let y = 0;
+ for (const p of parts) {
+ const c = catalogPart(catalog, p.id);
+ const w = Math.min(cols, Math.max(c.min.w, device === 'phone' ? cols : Math.min(cols, device === 'tablet' ? 4 : 4)));
+ const h = Math.max(c.min.h, c.kind === 'video' ? 3 : c.kind === 'readout' ? 1 : 2);
+ if (p.place.x + w > cols) { p.place.x = 0; y += 1; }
+ p.place = { x: p.place.x, y, w, h };
+ p.place.x += w;
+ if (p.place.x >= cols) { p.place.x = 0; y += h; }
+ }
+ }
+ return { surface: catalog.id, surface_version: catalog.version, device, name: 'My layout', author: { name: 'Me' }, sharing: 'private', parts };
+ }
+
+ function fitPlace(place, catalog, device, part) {
+ if (!place) return null;
+ const cols = (catalog.grid && catalog.grid.columns && catalog.grid.columns[device]) || 12;
+ if (docked(place)) return { dock: place.dock, order: Math.max(0, Math.min(63, Number(place.order) || 0)), w: Math.max(1, Math.min(24, Math.round(place.w) || part.min.w)), h: Math.max(1, Math.min(24, Math.round(place.h) || part.min.h)) };
+ const w = Math.max(1, Math.min(24, Math.round(place.w) || part.min.w));
+ const h = Math.max(1, Math.min(24, Math.round(place.h) || part.min.h));
+ return { x: Math.max(0, Math.min(Math.max(0, cols - w), Math.round(place.x) || 0)), y: Math.max(0, Math.min(100, Math.round(place.y) || 0)), w, h };
+ }
+
+ // ── The editor ──────────────────────────────────────────────────────────────────────────────────
+ function open(opts) {
+ const surface = opts && opts.surface;
+ if (!surface || !isObj(opts.catalog)) throw new Error('OVArrange.open: a surface element and its ui.surface@1 catalog are needed');
+ const catalog = opts.catalog;
+ const doc = surface.ownerDocument || document;
+ const device = ['phone', 'tablet', 'computer'].includes(opts.device) ? opts.device : 'computer';
+ styleOnce(doc);
+ const cols = (catalog.grid && catalog.grid.columns && catalog.grid.columns[device]) || 12;
+ const cell = (catalog.grid && catalog.grid.cell_px && catalog.grid.cell_px[device]) || 64;
+ const confirmFn = typeof opts.confirm === 'function' ? opts.confirm : (msg) => !root.confirm || root.confirm(msg);
+ const announce = (text) => { if (live) live.textContent = text; if (opts.announce) try { opts.announce(text); } catch (_) { /* */ } };
+
+ let core = opts.core || root.OVArrangeCore || null;
+ loadCore(opts).then((c) => { if (c) core = c; }).catch(() => { /* the fallback rules stay */ });
+ const validate = (lay) => {
+ const fn = (opts.validate || (core && core.validate) || fallbackValidate);
+ try {
+ const v = fn(catalog, lay, device);
+ return v && typeof v.ok === 'boolean' ? { ok: v.ok, reasons: Array.isArray(v.reasons) ? v.reasons : [] } : { ok: false, reasons: ['That layout could not be checked.'] };
+ } catch (e) { return { ok: false, reasons: [String(e && e.message || e)] }; }
+ };
+ const defaults = () => {
+ const fn = opts.defaults || (core && core.applyDefaults);
+ try { const d = fn ? fn(catalog, device) : null; if (isObj(d)) return d; } catch (_) { /* fall through */ }
+ return fallbackDefaults(catalog, device);
+ };
+ const normal = (lay) => {
+ const d = defaults();
+ const out = clone(d);
+ const base = isObj(lay) ? lay : opts.layout;
+ out.surface = catalog.id; out.surface_version = catalog.version; out.device = device;
+ if (isObj(base)) {
+ out.name = base.name || out.name; out.sharing = base.sharing || out.sharing; out.author = base.author || out.author;
+ out.parts = (out.parts || []).map((p) => {
+ const got = entryOf(base, p.id);
+ return got ? { ...p, ...clone(got) } : p;
+ });
+ }
+ out.parts = (out.parts || []).map((p) => {
+ const cp = catalogPart(catalog, p.id) || { min: { w: 1, h: 1 }, styles: {} };
+ return { ...p, visible: cp.required ? true : p.visible !== false, place: fitPlace(p.place, catalog, device, cp) || { x: 0, y: 0, w: cp.min.w, h: cp.min.h }, style: { tint: (p.style && p.style.tint) || (cp.styles.tints || catalog.theme_tokens || ['surface'])[0], shape: (p.style && p.style.shape) || (cp.styles.shapes || ['square'])[0], opacity: p.style && typeof p.style.opacity === 'number' ? p.style.opacity : 1, label: p.style && typeof p.style.label === 'boolean' ? p.style.label : (cp.styles && cp.styles.label) !== false }, bindings: { keys: (p.bindings && p.bindings.keys) || [], gamepad: (p.bindings && p.bindings.gamepad) || [] } };
+ });
+ return out;
+ };
+
+ const initial = normal(opts.layout);
+ let working = clone(initial);
+ let undoStack = [];
+ let preview = null; // { layout, summary, reasons, words }
+ let selected = null;
+ let dirty = false;
+ let saving = false;
+ let closed = false;
+ let drag = null;
+
+ const host = doc.createElement('div');
+ host.className = 'ov-arrange-bar';
+ host.setAttribute('role', 'toolbar');
+ host.setAttribute('aria-label', 'Arrange the controls');
+ host.innerHTML = `<form data-ask><label class="sr-only" for="ov-arrange-words">Ask OpenVibe</label><input id="ov-arrange-words" type="text" maxlength="500" autocomplete="off" placeholder="Describe how you want it…" aria-label="Ask OpenVibe"><button type="submit" class="ovk-btn ovk-btn--primary">Ask OpenVibe</button></form>
+<div class="ov-arrange-actions"><button type="button" class="ovk-btn ovk-btn--quiet" data-undo>Undo</button><button type="button" class="ovk-btn ovk-btn--quiet" data-reset>Reset to default</button><button type="button" class="ovk-btn ovk-btn--quiet" data-share>Share</button><button type="button" class="ovk-btn ovk-btn--primary" data-save>Save</button><button type="button" class="ovk-btn ovk-btn--ghost" data-done>Done</button></div>
+<p class="ov-arrange-status" data-status role="status" aria-live="polite"></p>`;
+ doc.body.appendChild(host);
+ const statusEl = host.querySelector('[data-status]');
+ const setStatus = (text, tone) => { statusEl.textContent = text || ''; if (tone) statusEl.dataset.tone = tone; else delete statusEl.dataset.tone; if (text) announce(text); };
+ const live = doc.createElement('div');
+ live.setAttribute('aria-live', 'polite'); live.setAttribute('aria-atomic', 'true');
+ live.className = 'sr-only';
+ doc.body.appendChild(live);
+
+ const sel = doc.createElement('div'); sel.className = 'ov-arrange-sel'; sel.hidden = true; doc.body.appendChild(sel);
+ const handle = doc.createElement('button'); handle.type = 'button'; handle.className = 'ov-arrange-handle'; handle.setAttribute('aria-label', 'Resize'); handle.title = 'Resize'; handle.hidden = true; doc.body.appendChild(handle);
+ const styleBtn = doc.createElement('button'); styleBtn.type = 'button'; styleBtn.className = 'ov-arrange-style'; styleBtn.textContent = 'Aa'; styleBtn.setAttribute('aria-label', 'Style this part'); styleBtn.title = 'Style this part'; styleBtn.hidden = true; doc.body.appendChild(styleBtn);
+
+ const partEls = () => [...surface.querySelectorAll('[data-ov-part]')].filter((el) => catalogPart(catalog, el.dataset.ovPart));
+ const originals = new Map();
+ const innerTab = [];
+ for (const el of partEls()) originals.set(el, { style: el.getAttribute('style'), hidden: el.hidden, tabindex: el.getAttribute('tabindex'), role: el.getAttribute('role'), label: el.getAttribute('aria-label'), cls: el.className });
+ const surfaceStyle = surface.getAttribute('style');
+ const surfaceClass = surface.className;
+ const surfaceCustom = surface.getAttribute('data-ov-custom');
+ const elOf = (id) => partEls().find((el) => el.dataset.ovPart === id) || null;
+ const entry = (id) => entryOf(working, id);
+
+ function snapshot() { return clone(working); }
+ function pushUndo() { undoStack.push(snapshot()); if (undoStack.length > 40) undoStack.shift(); }
+ function markDirty() { dirty = true; paintActions(); }
+
+ function flatten(el) {
+ for (let a = el.parentElement; a && a !== surface; a = a.parentElement) a.setAttribute('data-ov-flatten', 'true');
+ }
+
+ function paintPlace(el, e) {
+ const p = e.place || {};
+ el.style.gridColumn = ''; el.style.gridRow = ''; el.style.order = '';
+ delete el.dataset.ovDock; delete el.dataset.ovOrder;
+ if (docked(p)) {
+ el.dataset.ovDock = p.dock;
+ el.dataset.ovOrder = String(p.order || 0);
+ el.style.order = String(p.order || 0);
+ } else {
+ el.style.gridColumn = `${p.x + 1} / span ${p.w}`;
+ el.style.gridRow = `${p.y + 1} / span ${p.h}`;
+ }
+ if (el.dataset.ovRoleHidden !== 'true') el.hidden = e.visible === false;
+ el.style.setProperty('--ov-part-opacity', String(e.style && typeof e.style.opacity === 'number' ? e.style.opacity : 1));
+ el.dataset.ovTint = (e.style && e.style.tint) || '';
+ el.dataset.ovShape = (e.style && e.style.shape) || '';
+ el.dataset.ovLabel = e.style && e.style.label === false ? 'false' : 'true';
+ el.dataset.ovKeys = ((e.bindings && e.bindings.keys) || []).join(' ');
+ el.dataset.ovGamepad = ((e.bindings && e.bindings.gamepad) || []).join(' ');
+ el.classList.toggle('ov-arrange-part', true);
+ }
+
+ function apply(lay, { focus = true } = {}) {
+ surface.classList.add('ov-arrange-surface');
+ surface.setAttribute('data-ov-custom', 'true');
+ surface.style.setProperty('--ov-cols', String(cols));
+ surface.style.setProperty('--ov-cell', `${cell}px`);
+ surface.style.gridTemplateColumns = `repeat(${cols}, minmax(0, 1fr))`;
+ surface.style.gridAutoRows = `minmax(${cell}px, auto)`;
+ const dockMode = (catalog.id || '').split('.').pop() === 'overlay';
+ if (dockMode) { surface.style.display = surface.style.display || 'block'; surface.style.position = 'relative'; }
+ for (const el of partEls()) {
+ flatten(el);
+ for (const inner of el.querySelectorAll('button, input, select, textarea, a[href], [tabindex]')) {
+ if (!innerTab.some((x) => x.el === inner)) innerTab.push({ el: inner, tabindex: inner.getAttribute('tabindex') });
+ if (inner !== el) inner.setAttribute('tabindex', '-1');
+ }
+ }
+ for (const p of (catalog.parts || [])) {
+ const el = elOf(p.id), e = entryOf(lay, p.id);
+ if (!el || !e) continue;
+ paintPlace(el, e);
+ if (focus && !dockMode) {
+ el.tabIndex = 0;
+ el.setAttribute('role', 'group');
+ el.setAttribute('aria-label', `${p.name}${p.required ? ', required' : ''}. Arrow keys move it, Shift with the arrows resizes it, Enter opens its style.`);
+ }
+ }
+ positionSelection();
+ }
+
+ function selectedEl() { return selected ? elOf(selected) : null; }
+ function positionSelection() {
+ const el = selectedEl();
+ if (!el || el.hidden || closed) { sel.hidden = true; handle.hidden = true; styleBtn.hidden = true; return; }
+ const r = el.getBoundingClientRect();
+ sel.hidden = false; sel.style.left = `${r.left - 3}px`; sel.style.top = `${r.top - 3}px`; sel.style.width = `${r.width + 6}px`; sel.style.height = `${r.height + 6}px`;
+ handle.hidden = false; handle.style.left = `${r.right - 20}px`; handle.style.top = `${r.bottom - 20}px`;
+ styleBtn.hidden = false; styleBtn.style.left = `${r.left + 6}px`; styleBtn.style.top = `${r.top + 6}px`;
+ }
+ function select(id) {
+ if (selected && elOf(selected)) elOf(selected).removeAttribute('data-ov-selected');
+ selected = id;
+ if (id && elOf(id)) elOf(id).setAttribute('data-ov-selected', 'true');
+ positionSelection();
+ }
+
+ function labelOf(id) { return partName(catalog, id); }
+ function where(d, place) {
+ if (docked(place)) return `on the ${place.dock} edge, number ${Number(place.order) + 1}`;
+ return `column ${place.x + 1}, row ${place.y + 1}, ${place.w} by ${place.h} cells`;
+ }
+
+ function paintActions() {
+ const u = host.querySelector('[data-undo]'); if (u) u.disabled = !undoStack.length;
+ const s = host.querySelector('[data-save]'); if (s) s.disabled = saving || !dirty;
+ const sh = host.querySelector('[data-share]'); if (sh) sh.disabled = saving;
+ }
+
+ function refuse(reasons) {
+ setStatus((reasons && reasons[0]) ? `Can't do that: ${reasons[0]}` : "Can't do that.", 'bad');
+ const el = selectedEl(); if (el) el.setAttribute('data-ov-refused', 'true');
+ }
+
+ function commit(candidate, { announceText, push = true } = {}) {
+ const v = validate(candidate);
+ if (!v.ok) { refuse(v.reasons); return false; }
+ if (push) pushUndo();
+ working = candidate;
+ const el = selectedEl(); if (el) el.removeAttribute('data-ov-refused');
+ apply(working);
+ markDirty();
+ if (announceText) { const id = selected; setStatus(announceText, 'ok'); if (id) announce(`${labelOf(id)} is now ${where(device, entry(id).place)}.`); }
+ return true;
+ }
+
+ function moveBy(id, dx, dy) {
+ const e = clone(entry(id)); if (!e) return;
+ const p = catalogPart(catalog, id) || { min: { w: 1, h: 1 } };
+ if (docked(e.place)) {
+ if (dx) e.place.dock = dx < 0 ? 'left' : 'right';
+ else if (dy) e.place.dock = dy < 0 ? 'top' : 'bottom';
+ } else {
+ e.place.x = Math.max(0, Math.min(cols - e.place.w, e.place.x + dx));
+ e.place.y = Math.max(0, e.place.y + dy);
+ if (e.place.x === entry(id).place.x && e.place.y === entry(id).place.y) return;
+ }
+ const cand = snapshot();
+ const at = cand.parts.findIndex((x) => x.id === id);
+ cand.parts[at] = e;
+ commit(cand, { announceText: `${labelOf(id)} moved to ${where(device, e.place)}.` });
+ }
+
+ function resizeBy(id, dw, dh) {
+ const e = clone(entry(id)); if (!e) return;
+ const p = catalogPart(catalog, id) || { min: { w: 1, h: 1 } };
+ if (docked(e.place)) {
+ e.place.w = Math.max(1, Math.min(24, e.place.w + dw));
+ e.place.h = Math.max(1, Math.min(24, e.place.h + dh));
+ } else {
+ e.place.w = Math.max(1, Math.min(cols - e.place.x, e.place.w + dw));
+ e.place.h = Math.max(1, e.place.h + dh);
+ }
+ if (e.place.w === entry(id).place.w && e.place.h === entry(id).place.h) return;
+ const cand = snapshot();
+ const at = cand.parts.findIndex((x) => x.id === id);
+ cand.parts[at] = e;
+ commit(cand, { announceText: `${labelOf(id)} is now ${where(device, e.place)}.` });
+ }
+
+ // Pointer drag: move, then the corner handle for resize. A refused cell keeps the last one that passed.
+ function cellAt(clientX, clientY) {
+ const r = surface.getBoundingClientRect();
+ const col = Math.max(0, Math.min(cols - 1, Math.floor((clientX - r.left) / (r.width / cols))));
+ const rows = (getComputedStyle(surface).gridTemplateRows || '').split(/\s+/).map(parseFloat).filter((n) => n > 0);
+ let y = 0, top = r.top;
+ for (let i = 0; i < rows.length; i++) { if (clientY < top + rows[i]) { y = i; break; } top += rows[i]; y = i + 1; }
+ return { x: col, y };
+ }
+ function startDrag(e, id, mode) {
+ if (e.button != null && e.button !== 0) return;
+ const el = elOf(id); if (!el) return;
+ if (preview) { setStatus('Keep or discard the suggestion first.'); return; }
+ e.preventDefault();
+ select(id);
+ const p = clone(entry(id).place);
+ drag = { id, mode, startX: e.clientX, startY: e.clientY, place: p, before: snapshot(), pushed: false, moved: false };
+ el.setAttribute('data-ov-dragging', 'true');
+ try { (mode === 'resize' ? handle : el).setPointerCapture(e.pointerId); } catch (_) { /* */ }
+ onPointerMove = (ev) => {
+ if (!drag) return;
+ if (Math.abs(ev.clientX - drag.startX) + Math.abs(ev.clientY - drag.startY) < 3 && !drag.moved) return;
+ drag.moved = true;
+ const cand = snapshot();
+ const at = cand.parts.findIndex((x) => x.id === drag.id);
+ if (docked(drag.place)) {
+ if (drag.mode === 'resize') {
+ const colW = surface.getBoundingClientRect().width / cols;
+ const w = Math.max(1, Math.round((ev.clientX - drag.startX) / colW) + drag.place.w);
+ const h = Math.max(1, Math.round((ev.clientY - drag.startY) / cell) + drag.place.h);
+ if (w === cand.parts[at].place.w && h === cand.parts[at].place.h) return;
+ cand.parts[at].place.w = w; cand.parts[at].place.h = h;
+ } else {
+ const r = surface.getBoundingClientRect();
+ const dx = (ev.clientX - r.left) / Math.max(1, r.width);
+ const dy = (ev.clientY - r.top) / Math.max(1, r.height);
+ const dock = Math.abs(dx - 0.5) > Math.abs(dy - 0.5) ? (dx < 0.5 ? 'left' : 'right') : (dy < 0.5 ? 'top' : 'bottom');
+ const along = dock === 'left' || dock === 'right' ? dy : dx;
+ const order = Math.max(0, Math.min(63, Math.floor(along * 8)));
+ if (dock === cand.parts[at].place.dock && order === cand.parts[at].place.order) return;
+ cand.parts[at].place.dock = dock; cand.parts[at].place.order = order;
+ }
+ const v = validate(cand);
+ if (!v.ok) { refuse(v.reasons); return; }
+ if (!drag.pushed) { undoStack.push(drag.before); drag.pushed = true; }
+ working = cand; apply(working); markDirty();
+ return;
+ }
+ const c = cellAt(ev.clientX, ev.clientY);
+ if (drag.mode === 'resize') {
+ const w = Math.max(1, c.x - drag.place.x + 1);
+ const h = Math.max(1, c.y - drag.place.y + 1);
+ if (w === cand.parts[at].place.w && h === cand.parts[at].place.h) return;
+ cand.parts[at].place.w = w; cand.parts[at].place.h = h;
+ } else {
+ const colW = surface.getBoundingClientRect().width / cols;
+ const dx = Math.round((ev.clientX - drag.startX) / colW);
+ const x = Math.max(0, Math.min(cols - drag.place.w, drag.place.x + dx));
+ const y = Math.max(0, drag.place.y + (c.y - cellAt(drag.startX, drag.startY).y));
+ if (x === cand.parts[at].place.x && y === cand.parts[at].place.y) return;
+ cand.parts[at].place.x = x; cand.parts[at].place.y = y;
+ }
+ const v = validate(cand);
+ if (!v.ok) { refuse(v.reasons); return; }
+ if (!drag.pushed) { undoStack.push(drag.before); drag.pushed = true; }
+ working = cand; apply(working); markDirty();
+ };
+ onPointerUp = () => {
+ if (!drag) return;
+ const done = drag; drag = null;
+ const el2 = elOf(done.id);
+ if (el2) { el2.removeAttribute('data-ov-dragging'); el2.removeAttribute('data-ov-refused'); }
+ if (done.moved) {
+ const place = entry(done.id).place;
+ setStatus(`${labelOf(done.id)} is now ${where(device, place)}.`, 'ok');
+ announce(`${labelOf(done.id)} is now ${where(device, place)}.`);
+ }
+ positionSelection();
+ };
+ onPointerCancel = onPointerUp;
+ }
+ let onPointerMove = null, onPointerUp = null, onPointerCancel = null;
+ const pointerMove = (e) => { if (onPointerMove) onPointerMove(e); };
+ const pointerUp = (e) => { if (onPointerUp) { const f = onPointerUp; onPointerMove = null; onPointerUp = null; onPointerCancel = null; f(e); } };
+ doc.addEventListener('pointermove', pointerMove, { passive: true });
+ doc.addEventListener('pointerup', pointerUp);
+ doc.addEventListener('pointercancel', pointerUp);
+
+ // Long press (a phone) opens the sheet; a short press selects and focuses.
+ let pressTimer = null;
+ function onPartDown(e) {
+ const el = e.target.closest && e.target.closest('[data-ov-part]');
+ if (!el || !surface.contains(el)) return;
+ if (e.target.closest('.ov-arrange-handle, .ov-arrange-style')) return;
+ const id = el.dataset.ovPart;
+ select(id);
+ clearTimeout(pressTimer);
+ pressTimer = setTimeout(() => {
+ if (drag && drag.moved) return;
+ if (drag) {
+ // A long press is the part's sheet, not a drag: let go of the gesture before opening it.
+ const held = elOf(drag.id); drag = null;
+ onPointerMove = null; onPointerUp = null; onPointerCancel = null;
+ if (held) held.removeAttribute('data-ov-dragging');
+ }
+ openSheet(id);
+ }, 520);
+ startDrag(e, id, 'move');
+ if (e.pointerType === 'touch') try { el.setPointerCapture(e.pointerId); } catch (_) { /* */ }
+ }
+ surface.addEventListener('pointerdown', onPartDown);
+ const cancelPress = () => clearTimeout(pressTimer);
+ surface.addEventListener('pointerup', cancelPress);
+ surface.addEventListener('pointercancel', cancelPress);
+
+ // Keyboard: arrows move, Shift+arrows resize, Enter opens the sheet.
+ function onKey(e) {
+ const el = e.target.closest && e.target.closest('[data-ov-part]');
+ if (!el) return;
+ const id = el.dataset.ovPart;
+ if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); openSheet(id); return; }
+ if (!/^Arrow(Up|Down|Left|Right)$/.test(e.key)) return;
+ e.preventDefault();
+ const dx = e.key === 'ArrowLeft' ? -1 : e.key === 'ArrowRight' ? 1 : 0;
+ const dy = e.key === 'ArrowUp' ? -1 : e.key === 'ArrowDown' ? 1 : 0;
+ if (e.shiftKey) resizeBy(id, dx, dy); else moveBy(id, dx, dy);
+ }
+ surface.addEventListener('keydown', onKey);
+
+ handle.addEventListener('pointerdown', (e) => { if (selected) startDrag(e, selected, 'resize'); });
+ styleBtn.addEventListener('click', () => { if (selected) openSheet(selected); });
+
+ // ── The part's sheet ─────────────────────────────────────────────────────────────────────
+ let sheet = null;
+ function closeSheet() { if (sheet) { sheet.remove(); sheet = null; select(selected); } }
+ function openSheet(id) {
+ closeSheet();
+ const p = catalogPart(catalog, id), e = entry(id);
+ if (!p || !e) return;
+ select(id);
+ sheet = doc.createElement('section');
+ sheet.className = 'ov-arrange-sheet';
+ sheet.setAttribute('role', 'dialog');
+ sheet.setAttribute('aria-modal', 'false');
+ sheet.setAttribute('aria-label', `${p.name}`);
+ const tints = (p.styles && p.styles.tints) || catalog.theme_tokens || ['surface'];
+ const shapes = (p.styles && p.styles.shapes) || ['square'];
+ const wp = clone(e.place);
+ sheet.innerHTML = `<button type="button" class="ovk-btn ovk-btn--quiet ov-arrange-close" data-close>Close</button>
+<h2>${esc(p.name)}</h2>
+${p.required ? '<p>The Stop has to stay visible and at its size.</p>' : ''}
+<label class="ov-arrange-row"><input type="checkbox" data-visible${e.visible === false ? '' : ' checked'}${p.required ? ' disabled' : ''}> <span>Visible</span></label>
+<div class="ov-arrange-row"><span>Size</span><div class="ov-arrange-opts">
+${(p.sizes || []).filter((s) => s.w >= p.min.w && s.h >= p.min.h).map((s) => `<label><input type="radio" name="ov-arrange-size" value="${s.w}x${s.h}"${docked(e.place) ? ' disabled' : (e.place.w === s.w && e.place.h === s.h ? ' checked' : '')}>${s.w} × ${s.h}</label>`).join('')}
+<label>Width <input type="number" min="${p.min.w}" max="24" value="${e.place.w}" data-w style="width:4.5rem"></label>
+<label>Height <input type="number" min="${p.min.h}" max="24" value="${e.place.h}" data-h style="width:4.5rem"></label>
+</div></div>
+<div class="ov-arrange-row"><span>Colour</span><div class="ov-arrange-opts">${(catalog.theme_tokens || tints).filter((t) => tints.includes(t)).map((t) => `<label><input type="radio" name="ov-arrange-tint" value="${esc(t)}"${e.style.tint === t ? ' checked' : ''}>${esc(t)}</label>`).join('')}</div></div>
+<div class="ov-arrange-row"><span>Shape</span><div class="ov-arrange-opts">${shapes.map((s) => `<label><input type="radio" name="ov-arrange-shape" value="${esc(s)}"${e.style.shape === s ? ' checked' : ''}>${esc(s)}</label>`).join('')}</div></div>
+<div class="ov-arrange-row"><span>Opacity</span><input type="range" min="0.4" max="1" step="0.05" value="${e.style.opacity}" data-opacity></div>
+<label class="ov-arrange-row"><input type="checkbox" data-label${e.style.label === false ? '' : ' checked'}> <span>Show its label</span></label>
+<div class="ov-arrange-row"><span>Keys</span><input type="text" data-keys value="${esc(((e.bindings && e.bindings.keys) || []).join(' '))}" placeholder="${esc(((p.bindings && p.bindings.keys) || []).join(' '))}" aria-label="Keys"></div>
+<div class="ov-arrange-row"><span>Gamepad</span><input type="text" data-gamepad value="${esc(((e.bindings && e.bindings.gamepad) || []).join(' '))}" placeholder="${esc(((p.bindings && p.bindings.gamepad) || []).join(' '))}" aria-label="Gamepad controls"></div>
+<p class="ov-arrange-status" data-sheet-status role="status" aria-live="polite"></p>`;
+ doc.body.appendChild(sheet);
+ const sheetStatus = sheet.querySelector('[data-sheet-status]');
+ const setSheetStatus = (t, tone) => { sheetStatus.textContent = t; sheetStatus.dataset.tone = tone || ''; announce(t); };
+ function change(fn) {
+ const cand = snapshot();
+ const at = cand.parts.findIndex((x) => x.id === id);
+ fn(cand.parts[at], p);
+ const v = validate(cand);
+ if (!v.ok) { setSheetStatus(`Can't do that: ${v.reasons[0]}`, 'bad'); return false; }
+ pushUndo(); working = cand; apply(working); markDirty(); setSheetStatus('', ''); return true;
+ }
+ sheet.querySelector('[data-close]').addEventListener('click', closeSheet);
+ sheet.querySelector('[data-visible]').addEventListener('change', (ev) => {
+ const on = ev.target.checked;
+ const ok = change((x) => { x.visible = on; });
+ if (!ok) ev.target.checked = !on;
+ else announce(`${p.name} is ${on ? 'shown' : 'hidden'}.`);
+ });
+ sheet.querySelectorAll('input[name="ov-arrange-size"]').forEach((r) => r.addEventListener('change', () => {
+ const [w, h] = r.value.split('x').map(Number);
+ if (change((x) => { x.place.w = w; x.place.h = h; })) announce(`${p.name} is now ${w} by ${h} cells.`);
+ }));
+ const wIn = sheet.querySelector('[data-w]'), hIn = sheet.querySelector('[data-h]');
+ for (const [inp, key] of [[wIn, 'w'], [hIn, 'h']]) inp.addEventListener('change', () => {
+ const n = Number(inp.value);
+ if (!Number.isInteger(n) || n < 1) { setSheetStatus(`Can't do that: ${p.name} needs at least ${key === 'w' ? p.min.w : p.min.h} cells.`, 'bad'); return; }
+ change((x) => { x.place[key] = n; });
+ });
+ sheet.querySelectorAll('input[name="ov-arrange-tint"]').forEach((r) => r.addEventListener('change', () => { if (change((x) => { x.style.tint = r.value; })) announce(`${p.name} is ${r.value}.`); }));
+ sheet.querySelectorAll('input[name="ov-arrange-shape"]').forEach((r) => r.addEventListener('change', () => { if (change((x) => { x.style.shape = r.value; })) announce(`${p.name} is ${r.value}.`); }));
+ const op = sheet.querySelector('[data-opacity]');
+ op.addEventListener('change', () => { if (change((x) => { x.style.opacity = Number(op.value); })) announce(`${p.name} is ${Math.round(op.value * 100)}% visible.`); });
+ sheet.querySelector('[data-label]').addEventListener('change', (ev) => { const on = ev.target.checked; if (change((x) => { x.style.label = on; })) announce(`${p.name}'s label is ${on ? 'shown' : 'hidden'}.`); });
+ const keys = sheet.querySelector('[data-keys]'), pad = sheet.querySelector('[data-gamepad]');
+ const parse = (v) => String(v || '').trim().split(/\s+/).filter(Boolean);
+ keys.addEventListener('change', () => { const v = parse(keys.value); if (change((x) => { x.bindings.keys = v; })) announce(`${p.name}'s keys: ${v.join(' ') || 'none'}.`); });
+ pad.addEventListener('change', () => { const v = parse(pad.value); if (change((x) => { x.bindings.gamepad = v; })) announce(`${p.name}'s gamepad: ${v.join(' ') || 'none'}.`); });
+ const first = sheet.querySelector('[data-close]'); if (first) first.focus();
+ }
+ function onDocKey(e) {
+ if (e.key === 'Escape') { if (sheet) closeSheet(); else if (preview) discardPreview(); }
+ }
+ doc.addEventListener('keydown', onDocKey);
+
+ // ── Ask OpenVibe, previewed ───────────────────────────────────────────────────────────────
+ const ask = host.querySelector('form[data-ask]');
+ const words = host.querySelector('#ov-arrange-words');
+ let previewBar = null;
+ function showPreview(sug, wordText) {
+ preview = { layout: normal(sug.layout), summary: sug.summary || '', reasons: sug.reasons || [], words: wordText, model: sug.receipt && sug.receipt.model ? String(sug.receipt.model) : '' };
+ apply(preview.layout);
+ if (previewBar) previewBar.remove();
+ previewBar = doc.createElement('div');
+ previewBar.className = 'ov-arrange-preview';
+ previewBar.setAttribute('role', 'group');
+ previewBar.setAttribute('aria-label', 'OpenVibe\'s suggestion');
+ previewBar.innerHTML = `<p><b>OpenVibe suggests:</b> ${esc(preview.summary)}${preview.model ? ` <span class="ov-arrange-by">(${esc(preview.model)})</span>` : ''}</p><button type="button" class="ovk-btn ovk-btn--primary" data-keep>Keep</button><button type="button" class="ovk-btn ovk-btn--quiet" data-discard>Discard</button>`;
+ host.querySelector('.ov-arrange-actions').before(previewBar);
+ previewBar.querySelector('[data-keep]').addEventListener('click', keepPreview);
+ previewBar.querySelector('[data-discard]').addEventListener('click', discardPreview);
+ setStatus(preview.summary || 'Previewing OpenVibe\'s suggestion.', 'ok');
+ announce(`OpenVibe suggests: ${preview.summary}. Keep or discard.`);
+ }
+ function keepPreview() {
+ if (!preview) return;
+ pushUndo(); working = preview.layout; preview = null;
+ if (previewBar) { previewBar.remove(); previewBar = null; }
+ apply(working); markDirty(); setStatus('Kept. Save it to keep it for next time.', 'ok');
+ announce('Kept the suggestion. Save it to keep it.');
+ }
+ function discardPreview() {
+ if (!preview) return;
+ preview = null;
+ if (previewBar) { previewBar.remove(); previewBar = null; }
+ apply(working); setStatus('Discarded the suggestion.');
+ announce('Discarded the suggestion.');
+ }
+ ask.addEventListener('submit', async (e) => {
+ e.preventDefault();
+ const text = words.value.trim();
+ if (!text) return;
+ if (typeof opts.onAsk !== 'function') { setStatus('Ask OpenVibe needs a signed-in person.', 'bad'); return; }
+ if (preview) discardPreview();
+ setStatus('Asking OpenVibe…');
+ ask.querySelector('button').disabled = true;
+ try {
+ const request = { catalog, layout: clone(working), words: text, device };
+ const sug = await opts.onAsk(text, request);
+ if (!sug) { setStatus("OpenVibe couldn't answer. Try again.", 'bad'); return; }
+ if (sug.ok === false || !isObj(sug.layout)) {
+ const why = (sug.reasons && sug.reasons[0]) || sug.summary || "OpenVibe couldn't do that.";
+ setStatus(`Can't do that: ${why}`, 'bad'); return;
+ }
+ const v = validate(sug.layout);
+ if (!v.ok) { setStatus(`Can't do that: ${v.reasons[0]}`, 'bad'); return; }
+ showPreview(sug, text);
+ } catch (err) {
+ setStatus(`OpenVibe could not answer: ${String(err && err.message || err)}`, 'bad');
+ } finally { ask.querySelector('button').disabled = false; }
+ });
+
+ // ── Save, Share, Reset, Undo, Done ───────────────────────────────────────────────────────
+ host.querySelector('[data-undo]').addEventListener('click', () => {
+ if (!undoStack.length) return;
+ working = undoStack.pop(); preview = null;
+ if (previewBar) { previewBar.remove(); previewBar = null; }
+ apply(working); markDirty(); setStatus('Undone.'); announce('Undone.');
+ });
+ host.querySelector('[data-reset]').addEventListener('click', async () => {
+ preview = null;
+ if (previewBar) { previewBar.remove(); previewBar = null; }
+ pushUndo(); working = defaults(); apply(working); markDirty();
+ if (typeof opts.onReset !== 'function') { setStatus('Reset to the default. Save it to keep it.', 'ok'); announce('Reset to the default.'); return; }
+ setStatus('Resetting to the default…');
+ try {
+ const r = await opts.onReset({ surface: catalog.id, device });
+ if (r && r.ok === false) { setStatus(`Couldn't reset: ${(r.reasons && r.reasons[0]) || 'try again.'}`, 'bad'); return; }
+ dirty = false; paintActions();
+ setStatus('Reset to the default.', 'ok'); announce('Reset to the default. It comes back next time.');
+ } catch (err) { setStatus(`Couldn't reset: ${String(err && err.message || err)}`, 'bad'); }
+ });
+ host.querySelector('[data-save]').addEventListener('click', async () => {
+ if (saving) return;
+ const v = validate(working);
+ if (!v.ok) { refuse(v.reasons); return; }
+ if (typeof opts.onSave !== 'function') { setStatus('Sign in to save your layout.', 'bad'); return; }
+ saving = true; paintActions(); setStatus('Saving…');
+ try {
+ const r = await opts.onSave(clone(working), { surface: catalog.id, device });
+ if (r && r.ok === false) { setStatus(`Couldn't save: ${(r.reasons && r.reasons[0]) || r.message || 'try again.'}`, 'bad'); return; }
+ dirty = false; setStatus('Saved. It follows you to your other devices.', 'ok');
+ announce('Saved.');
+ } catch (err) { setStatus(`Couldn't save: ${String(err && err.message || err)}`, 'bad'); }
+ finally { saving = false; paintActions(); }
+ });
+ host.querySelector('[data-share]').addEventListener('click', async () => {
+ if (typeof opts.onShare !== 'function') { setStatus('Sign in to share a layout.', 'bad'); return; }
+ const v = validate(working);
+ if (!v.ok) { refuse(v.reasons); return; }
+ setStatus('Making a share link…');
+ try {
+ const r = await opts.onShare(clone(working), { surface: catalog.id, device });
+ if (!r || !r.url) { setStatus(`Couldn't share: ${(r && r.reasons && r.reasons[0]) || 'try again.'}`, 'bad'); return; }
+ shareBox(r.url);
+ setStatus('Shared. Anyone with the link can use this arrangement.', 'ok');
+ } catch (err) { setStatus(`Couldn't share: ${String(err && err.message || err)}`, 'bad'); }
+ });
+ function shareBox(url) {
+ const box = doc.createElement('div');
+ box.className = 'ov-arrange-share';
+ box.innerHTML = `<label>Share this arrangement<input type="text" readonly value="${esc(url)}" aria-label="Share link"></label><button type="button" class="ovk-btn ovk-btn--quiet" data-copy>Copy link</button>`;
+ host.querySelector('.ov-arrange-status').before(box);
+ const input = box.querySelector('input');
+ box.querySelector('[data-copy]').addEventListener('click', async () => {
+ input.select();
+ try { await navigator.clipboard.writeText(url); setStatus('Link copied.', 'ok'); }
+ catch (_) { setStatus('Select the link and copy it.', 'ok'); }
+ });
+ }
+ function close({ force = false } = {}) {
+ if (closed) return;
+ if (dirty && !force && !confirmFn('Leave without saving your arrangement?')) return;
+ closed = true;
+ if (previewBar) previewBar.remove();
+ if (sheet) sheet.remove();
+ host.remove(); live.remove(); sel.remove(); handle.remove(); styleBtn.remove();
+ doc.removeEventListener('pointermove', pointerMove);
+ doc.removeEventListener('pointerup', pointerUp);
+ doc.removeEventListener('pointercancel', pointerUp);
+ doc.removeEventListener('keydown', onDocKey);
+ root.removeEventListener('resize', positionSelection);
+ doc.removeEventListener('scroll', positionSelection, true);
+ surface.removeEventListener('pointerdown', onPartDown);
+ surface.removeEventListener('keydown', onKey);
+ if (surfaceStyle == null) surface.removeAttribute('style'); else surface.setAttribute('style', surfaceStyle);
+ surface.className = surfaceClass;
+ if (surfaceCustom == null) surface.removeAttribute('data-ov-custom'); else surface.setAttribute('data-ov-custom', surfaceCustom);
+ for (const [el, o] of originals) {
+ for (const a of ['data-ov-selected', 'data-ov-dragging', 'data-ov-refused', 'data-ov-flatten', 'data-ov-tint', 'data-ov-shape', 'data-ov-label', 'data-ov-keys', 'data-ov-gamepad', 'data-ov-dock', 'data-ov-order']) el.removeAttribute(a);
+ if (o.style == null) el.removeAttribute('style'); else el.setAttribute('style', o.style);
+ el.hidden = o.hidden;
+ if (o.tabindex == null) el.removeAttribute('tabindex'); else el.setAttribute('tabindex', o.tabindex);
+ if (o.role == null) el.removeAttribute('role'); else el.setAttribute('role', o.role);
+ if (o.label == null) el.removeAttribute('aria-label'); else el.setAttribute('aria-label', o.label);
+ el.className = o.cls;
+ }
+ for (const x of innerTab) { if (x.tabindex == null) x.el.removeAttribute('tabindex'); else x.el.setAttribute('tabindex', x.tabindex); }
+ for (const a of surface.querySelectorAll('[data-ov-flatten]')) a.removeAttribute('data-ov-flatten');
+ if (typeof opts.onApply === 'function') try { opts.onApply(clone(working)); } catch (_) { /* */ }
+ if (typeof opts.onClose === 'function') try { opts.onClose(clone(working), { dirty }); } catch (_) { /* */ }
+ }
+ host.querySelector('[data-done]').addEventListener('click', () => close());
+
+ surface.classList.add('ov-arrange-editing');
+ apply(working);
+ paintActions();
+ positionSelection();
+ root.addEventListener('resize', positionSelection, { passive: true });
+ doc.addEventListener('scroll', positionSelection, { passive: true, capture: true });
+ setStatus('Arrange: drag a part, or use the arrow keys. Shift with the arrows resizes.');
+ return { close, apply: (lay) => { working = normal(lay); apply(working); }, layout: () => clone(working), destroy: () => close({ force: true }), get core() { return core; } };
+ }
+
+ root.OVArrange = { open, validate: fallbackValidate, defaults: fallbackDefaults, _fallback: { validate: fallbackValidate, defaults: fallbackDefaults }, VERSION };
+ loadCore().then((c) => { if (c) { fallbackValidate.sdk = c; root.OVArrange.core = c; } }).catch(() => { /* the fallback rules stay */ });
+})(typeof window !== 'undefined' ? window : globalThis);
Binary files a/ov-glyphs-bold.woff2 and b/ov-glyphs-bold.woff2 differ
Binary files a/ov-glyphs-bold.woff2 and b/ov-glyphs-bold.woff2 differ
@@ -600,6 +600,8 @@
@@ -600,6 +600,8 @@
.fa-duotone.fa-hand::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-hand::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-hand-pointer::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-hand-pointer::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-hand-point-right::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-hand-point-right::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
+.fa-duotone.fa-handshake::after{content:"\e0e5";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
+.fa-duotone.fa-handshake-angle::after{content:"\e0e5";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-headphones::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-headphones::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-headphones-simple::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-headphones-simple::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-headset::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
.fa-duotone.fa-headset::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2}
@@ -371,6 +371,7 @@
@@ -371,6 +371,7 @@
.ovi-duotone.ovi-group::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-group::after{content:"\e0a6";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-group::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-group::after{content:"\e0a6";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-hammer::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-hammer::after{content:"\e0e4";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-hammer::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-hammer::after{content:"\e0e4";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-hand::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-hand::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-hand::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-hand::after{content:"\e03f";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
+.ovi-duotone.ovi-handshake::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-handshake::after{content:"\e0e5";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-headphones::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-headphones::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-headphones::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-headphones::after{content:"\e0a8";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-heart::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-heart::after{content:"\e041";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-heart::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-heart::after{content:"\e041";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-heart-broken::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-heart-broken::after{content:"\e0e6";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
.ovi-duotone.ovi-heart-broken::before{font-family:"OV Glyphs"}.ovi-duotone.ovi-heart-broken::after{content:"\e0e6";position:absolute;font-family:"OV Glyphs Solid";opacity:.2;pointer-events:none}
Binary files a/ov-glyphs-light.woff2 and b/ov-glyphs-light.woff2 differ
Binary files a/ov-glyphs-light.woff2 and b/ov-glyphs-light.woff2 differ
Binary files a/ov-glyphs-solid.woff2 and b/ov-glyphs-solid.woff2 differ
Binary files a/ov-glyphs-solid.woff2 and b/ov-glyphs-solid.woff2 differ
Binary files a/ov-glyphs-thin.woff2 and b/ov-glyphs-thin.woff2 differ
Binary files a/ov-glyphs-thin.woff2 and b/ov-glyphs-thin.woff2 differ
@@ -23,8 +23,8 @@
@@ -23,8 +23,8 @@
(function () {
(function () {
'use strict';
'use strict';
if (typeof window === 'undefined' || window.OVGlyphs) return;
if (typeof window === 'undefined' || window.OVGlyphs) return;
- const G = {"airplane":"<path d=\"M12 3.2c0.9 0 1.4 0.9 1.4 2.4V9.8l7 4.2V15.4l-7-2.4V17.2l1.9 1.4V20L12 19.1l-3.3 0.9v-1.4l1.9-1.4v-4.2L3.6 15.4v-1.4L10.6 9.8V5.6C10.6 4.2 11.1 3.2 12 3.2Z\"/>","alert":"<path d=\"M12 4.5L3.6 18.8h16.9Z\"/><path d=\"M12 10v3.7M12 16.5h0\"/>","alert-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5v5.5M12 16.5h.01\"/>","align-left":"<path d=\"M4 5.9h16.6M4 10h10.4M4 14.3h16.6M4 18.5h10.4\"/>","archive":"<rect x=\"3.5\" y=\"4.8\" width=\"17\" height=\"4.7\" rx=\"0.9\"/><path d=\"M5.4 9.5v9.4a0.9 0.9 0 0 0 0.9 0.9h11.3a0.9 0.9 0 0 0 0.9-0.9V9.5M10.1 13.3h3.8\"/>","arrow-down":"<path d=\"M12 3.2v16.7M5.7 13.7l6.3 6.3l6.3-6.3\"/>","arrow-left":"<path d=\"M20.8 12H4M10.3 5.7l-6.3 6.3l6.3 6.3\"/>","arrow-right":"<path d=\"M3.2 12h16.7M13.7 5.7l6.3 6.3l-6.3 6.3\"/>","arrow-up":"<path d=\"M12 20.8V4M5.7 10.3l6.3-6.3l6.3 6.3\"/>","arrows-h":"<path d=\"M3.8 12h16.5M7.6 8.1l-3.9 3.9l3.9 3.9M16.4 8.1l3.9 3.9l-3.9 3.9\"/>","at":"<circle cx=\"12\" cy=\"12\" r=\"3.4\"/><path d=\"M15.4 12v1.3a2.5 2.5 0 0 0 4.9 0V12a8.3 8.3 0 1 0-3.2 6.5\"/>","back":"<path d=\"M16.1 3.6l-8.4 8.4l8.4 8.4\"/>","ban":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m6 6 12 12\"/>","bell":"<path d=\"M6 14.6V9.5a6.1 6.1 0 0 1 12.2 0v5.1l1.5 2.1h-15.3ZM10 18.7a2.1 2.1 0 0 0 4 0\"/>","book":"<path d=\"M5 5.7a1.9 1.9 0 0 1 1.9-1.9h12.1v14.9H6.8a1.9 1.9 0 0 0-1.9 1.9Z\"/><path d=\"M5 18.7V5.7\"/>","book-open":"<path d=\"M12 6.3C10 4.8 7 4.3 3.5 4.9v13.2c3.5-0.6 6.5-0.1 8.5 1.4c2-1.5 5-2 8.5-1.4V4.9C17 4.3 14 4.8 12 6.3Z\"/><path d=\"M12 6.3v13.2\"/>","box":"<path d=\"M3.6 7.9L11.9 3.9l8.4 3.9v8.4L11.9 20.1l-8.4-3.9Z\"/><path d=\"M3.6 7.9L11.9 11.8l8.4-3.9M11.9 11.8v8.4M7.8 5.9l8.4 3.9\"/>","brain":"<path d=\"M9.2 4.2a2.8 2.8 0 0 0-2.8 2.8a2.8 2.8 0 0 0-1.9 4.8a2.8 2.8 0 0 0 1.9 4.8a2.8 2.8 0 0 0 5.8 1.1V5.8A1.9 1.9 0 0 0 9.2 4.2ZM14.9 4.2a2.8 2.8 0 0 1 2.8 2.8a2.8 2.8 0 0 1 1.9 4.8a2.8 2.8 0 0 1-1.9 4.8a2.8 2.8 0 0 1-5.8 1.1\"/>","branch":"<circle cx=\"6.7\" cy=\"5.6\" r=\"1.9\"/><circle cx=\"6.7\" cy=\"18.6\" r=\"1.9\"/><circle cx=\"17.9\" cy=\"7.5\" r=\"1.9\"/><path d=\"M6.7 7.5v9.3M17.9 9.3c0 5.1-6 3.7-10.2 7.9\"/>","bridge":"<path d=\"M3.5 16h17M7 19.5V5M17 19.5V5\"/><path d=\"M3.5 10c1.8 0 2.8-2.3 3.5-5c2.4 5.2 7.6 5.2 10 0c.7 2.7 1.7 5 3.5 5\"/><path d=\"M12 10.9V16\"/>","briefcase":"<rect x=\"3.5\" y=\"7.2\" width=\"17\" height=\"12.3\" rx=\"1.9\"/><path d=\"M9.2 7.2V5.7A1.4 1.4 0 0 1 10.6 4.3h2.8A1.4 1.4 0 0 1 14.8 5.7V7.2M3.5 12.3h7.1M13.4 12.3H20.5M10.6 11.4h2.8v2.4h-2.8Z\"/>","bug":"<rect x=\"7.2\" y=\"6.2\" width=\"9.6\" height=\"13.3\" rx=\"4.8\"/><path d=\"M9.3 6.5a2.7 2.7 0 0 1 5.3 0M12 10.9v8.5M7.2 12H3.5M20.5 12h-3.7M7.6 8.3L4.6 5.6M16.4 8.3L19.4 5.6M7.6 16.3L4.6 18.9M16.4 16.3L19.4 18.9\"/>","burst":"<path d=\"M11.9 3.7L13.6 7.8L17.8 6.2L16.2 10.4L20.3 12.1L16.2 13.8L17.8 18L13.6 16.4L11.9 20.4L10.2 16.4L6 18L7.6 13.8L3.6 12.1L7.6 10.4L6 6.2L10.2 7.8Z\"/>","busy":"<path d=\"M4.7 12h0M12.1 12h0M19.4 12h0\" stroke-width=\"4.2\"/>","calendar":"<rect x=\"4\" y=\"5.5\" width=\"16\" height=\"15\" rx=\"2\"/><path d=\"M4 10.5h16M9 3.5v4M15 3.5v4\"/>","camera":"<path d=\"M3.5 8h3.4l1.8-2.8h6.6L17.1 8h3.4v11.5h-17Z\"/><circle cx=\"12\" cy=\"13.3\" r=\"3.4\"/>","camera-flip":"<path d=\"M3.5 8h3.4l1.8-2.8h6.6L17.1 8h3.4v11.5h-17Z\"/><path d=\"M15 12.6a3.1 3.1 0 0 0-5.6-1.2M9 14.4a3.1 3.1 0 0 0 5.6 1.2M9.3 9.5v2h2M14.7 17.5v-2h-2\"/>","camera-off":"<path d=\"M3.7 7.9h3.3l1.7-2.7h6.4L16.9 7.9h3.3v11.2h-16.5Z\"/><circle cx=\"11.9\" cy=\"13\" r=\"3.3\"/><path d=\"M3.7 3.5l16.5 16.5\"/>","car":"<path d=\"M3.5 15.8v-4.5L6.2 5.8h11.6l2.7 5.5V15.8Z\"/><path d=\"M3.5 11.3h17M6.5 15.8v2.5M17.5 15.8v2.5M7.2 13.8h0M16.8 13.8h0\"/>","card":"<rect x=\"3.7\" y=\"5.8\" width=\"16.7\" height=\"12.3\" rx=\"1.8\"/><path d=\"M3.7 10.3h16.7M6.7 14.6h3.5\"/>","care":"<path d=\"M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5\"/><path d=\"M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z\"/>","cart":"<path d=\"M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5\"/><circle cx=\"9.1\" cy=\"18.6\" r=\"1.2\"/><circle cx=\"16.5\" cy=\"18.6\" r=\"1.2\"/>","cc":"<rect x=\"3.5\" y=\"5.4\" width=\"17\" height=\"13.2\" rx=\"2.4\"/><path d=\"M10.7 10.2a2.3 2.3 0 1 0 0 3.6M16.8 10.2a2.3 2.3 0 1 0 0 3.6\"/>","chart":"<path d=\"M3.9 3.4v16.7h16.7\"/><path d=\"M7.7 14.5l3.6-4.1l3.2 2.7l5.2-6.3\"/>","chat":"<path d=\"M3.8 4.3h16.8v11.7H8l-4.2 4.2Z\"/>","chat-off":"<path d=\"M4.2 5.1h15.7v10.9H8l-4 4Z\"/><path d=\"M3.7 3.7l16.7 16.7\"/>","check":"<path d=\"M3.7 12.1l5.4 5.4L20.4 6.1\"/>","check-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m8 12.4 2.8 2.8L16 9.6\"/>","check-double":"<path d=\"M3.6 11.7l3.6 3.6L14.6 7.7M11.1 15.2l0.9 0.9L20.4 7.7\"/>","chevron":"<path d=\"M7.9 3.6l8.4 8.4l-8.4 8.4\"/>","chevrons-left":"<path d=\"M10.9 19.3l-7.3-7.3l7.3-7.3M20.4 19.3l-7.3-7.3l7.3-7.3\"/>","chevrons-right":"<path d=\"M3.6 19.3l7.3-7.3l-7.3-7.3M13.1 19.3l7.3-7.3l-7.3-7.3\"/>","child":"<circle cx=\"12\" cy=\"5.8\" r=\"2.1\"/><path d=\"M7.9 10.5L12 9.2l4.1 1.4M12 9.2v5.6M9.2 20.4l2.8-5.6l2.8 5.6\"/>","chip":"<rect x=\"7.3\" y=\"7.3\" width=\"9.4\" height=\"9.4\" rx=\"1.4\"/><path d=\"M10.1 3.5v3.8M13.9 3.5v3.8M10.1 16.7v3.8M13.9 16.7v3.8M3.5 10.1h3.8M3.5 13.9h3.8M16.7 10.1h3.8M16.7 13.9h3.8\"/>","circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/>","city":"<path d=\"M3.5 19.7h17M5.4 19.7V8.3h4.7v11.3M10.1 19.7V3.6h5.7v16.1M15.8 19.7v-7.6h3.3v7.6M7.8 11.2h0M7.8 14.5h0M12.9 6.9h0M12.9 10.2h0M12.9 13.5h0\"/>","clapper":"<path d=\"M4 10.4h16.3v8.6a1 1 0 0 1-1 1h-14.4a1 1 0 0 1-1-1Z\"/><path d=\"M4 10.4L3.4 7.2l15.7-2.9l0.7 3.3ZM8.5 6.3l2.2 3.2M13.3 5.4l2.2 3.2\"/>","clipboard":"<rect x=\"5.7\" y=\"5\" width=\"12.6\" height=\"15.5\" rx=\"1.9\"/><path d=\"M9.1 5V3.5h5.8V5M9.1 10.8h5.8M9.1 14.7h3.9\"/>","clipboard-check":"<rect x=\"5.7\" y=\"4.9\" width=\"12.6\" height=\"15.5\" rx=\"1.9\"/><path d=\"M9.1 4.9V3.5h5.8V4.9M9.1 13.2l1.9 1.9l3.9-3.9\"/>","clock":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5V12l3 2\"/>","close":"<path d=\"M3.7 3.7l16.7 16.7M20.4 3.7L3.7 20.4\"/>","cloud":"<path d=\"M7.8 17.6h8.9a3.4 3.4 0 0 0 0.5-7A5.2 5.2 0 0 0 6.9 10.1A3.7 3.7 0 0 0 7.8 17.6Z\"/>","cloud-off":"<path d=\"M7.5 17.6h9.5a3.8 3.8 0 0 0 0.5-7.5A5.7 5.7 0 0 0 6.4 9.6A4.1 4.1 0 0 0 7.5 17.6Z\"/><path d=\"M4 3.9l16.1 16.1\"/>","code":"<path d=\"M7.8 7.8l-4.2 4.2l4.2 4.2M16.2 7.8l4.2 4.2l-4.2 4.2M14.2 4.6l-4.2 14.8\"/>","coin":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M14.5 9.2c-.5-.8-1.4-1.2-2.5-1.2-1.5 0-2.5.8-2.5 2s1 1.6 2.5 2 2.5.8 2.5 2-1 2-2.5 2c-1.1 0-2-.4-2.5-1.2M12 6.5v11\"/>","columns":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\"/><path d=\"M12 4.5v15M3.5 9h17\"/>","commit":"<circle cx=\"12\" cy=\"12\" r=\"3.4\"/><path d=\"M3.5 12h5.1M15.4 12H20.5\"/>","compass":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m15.6 8.4-2.1 5.1-5.1 2.1 2.1-5.1Z\"/>","compress":"<path d=\"M8.8 3.5v5.3H3.5M15.2 3.5v5.3h5.3M8.8 20.5v-5.3H3.5M15.2 20.5v-5.3h5.3\"/>","computer":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"11.3\" rx=\"1.9\"/><path d=\"M8.2 19.7h7.6M12 15.9v3.8\"/>","contrast":"<circle cx=\"11.7\" cy=\"12\" r=\"8.4\"/><path d=\"M11.7 3.6v16.7M11.7 7.9h6.5M11.7 12h8.4M11.7 16.2h6.5\"/>","cookie":"<path d=\"M20.6 12.3a8.4 8.4 0 1 1-8.9-8.9a3 3 0 0 0 3.9 3.5a3 3 0 0 0 4.9 5.3Z\"/><path d=\"M8.8 9.4h0M12.2 13.8h0M8.3 15.3h0M15.7 15.3h0\"/>","copy":"<rect x=\"8\" y=\"8\" width=\"12.5\" height=\"12.5\" rx=\"2.1\"/><path d=\"M16.3 8V5.8a2.1 2.1 0 0 0-2.1-2.1H5.8a2.1 2.1 0 0 0-2.1 2.1v8.4a2.1 2.1 0 0 0 2.1 2.1h2.1\"/>","couch":"<path d=\"M5.4 10.1V7.2a1.9 1.9 0 0 1 1.9-1.9h9.4a1.9 1.9 0 0 1 1.9 1.9v2.8\"/><path d=\"M3.5 11.9a1.9 1.9 0 0 1 3.8 0v1.4h9.4V11.9a1.9 1.9 0 0 1 3.8 0v4.7H3.5ZM5.4 16.7v1.9M18.6 16.7v1.9\"/>","crown":"<path d=\"M3.5 8.3L7.8 12L11.9 5.5l4.2 6.5l4.2-3.7L18.4 18.1H5.4Z\"/>","cubes":"<path d=\"M12 3.2L8.1 5.2v4.4l3.9 2l3.9-2V5.2ZM7.6 11.6L3.6 13.6v4.4l3.9 2l3.9-2V13.6ZM16.4 11.6l-3.9 2v4.4l3.9 2l3.9-2V13.6Z\"/>","database":"<ellipse cx=\"12\" cy=\"6.4\" rx=\"6.6\" ry=\"2.8\"/><path d=\"M5.4 6.4v11.3c0 1.6 2.9 2.8 6.6 2.8s6.6-1.2 6.6-2.8V6.4M5.4 12c0 1.6 2.9 2.8 6.6 2.8s6.6-1.2 6.6-2.8\"/>","dice":"<rect x=\"3.7\" y=\"3.6\" width=\"16.7\" height=\"16.7\" rx=\"3\"/><path d=\"M8.6 8.6h0M15.5 8.6h0M12.1 12h0M8.6 15.4h0M15.5 15.4h0\" stroke-width=\"2.6\"/>","dish":"<path d=\"M3.8 9.2A10.9 10.9 0 0 0 14.8 20.2Z\"/><path d=\"M9 15l5.2-5.2M14.8 3.4a5.8 5.8 0 0 1 5.8 5.8M14.8 7.5a1.8 1.8 0 0 1 1.8 1.8\"/>","dollar":"<path d=\"M15.7 8C15 6.6 13.7 5.6 12 5.6C9.6 5.6 8.3 6.9 8.3 8.5s1.6 2.5 3.7 2.8s3.7 1.3 3.7 3.1s-1.5 3-3.7 3c-1.8 0-3.2-0.9-3.7-2.4M12 3.7v16.7\"/>","donate":"<circle cx=\"11.9\" cy=\"8.4\" r=\"5.2\"/><path d=\"M11.9 6v4.3M3.7 15.6h16.5V20H3.7ZM8.3 17.7h7.2\"/>","door":"<path d=\"M13.7 4.7L6.3 3.2v16.7l7.5-1.4ZM13.7 5.1h3.3a0.9 0.9 0 0 1 0.9 0.9v14M3.5 20h16.7M11 11.6h0\"/>","down":"<path d=\"M3.6 7.9l8.4 8.4l8.4-8.4\"/>","download":"<path d=\"M12 3.2v11.5M6.8 9.5l5.2 5.2l5.2-5.2M4.7 20h14.7\"/>","drive":"<rect x=\"3.5\" y=\"12.3\" width=\"17\" height=\"6.6\" rx=\"1.9\"/><path d=\"M3.9 12.3L6.8 4.7h10.4l2.8 7.6M16.7 15.6h0M13.8 15.6h0\"/>","drop":"<path d=\"M12 3.5s5.9 6.4 5.9 10.8a5.9 5.9 0 0 1-11.8 0c0-4.4 5.9-10.8 5.9-10.8Z\"/>","ear":"<path d=\"M6.2 9.5a5.7 5.7 0 1 1 10.8 2.4c-0.9 1.9-3.1 3-3.1 5.2a3.4 3.4 0 0 1-6.5 1.6\"/><path d=\"M9.7 9.9a2.4 2.4 0 1 1 3.8 1.5\"/>","enter":"<path d=\"M13.8 3.6h4.1a2.1 2.1 0 0 1 2.1 2.1v12.5a2.1 2.1 0 0 1-2.1 2.1h-4.1M9.5 7.9l4.1 4.1l-4.1 4.1M13.8 12H3.2\"/>","eraser":"<path d=\"M14.3 4.4l5.5 5.5l-9 9H6.6l-2.6-2.6a1.5 1.5 0 0 1 0-2.1Z\"/><path d=\"M9.3 9.4l5.5 5.5M10.8 18.9H20.3\"/>","expand":"<path d=\"M3.5 8.8V3.5h5.3M20.5 8.8V3.5h-5.3M3.5 15.2v5.3h5.3M20.5 15.2v5.3h-5.3\"/>","eye":"<path d=\"M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z\"/><circle cx=\"12\" cy=\"12\" r=\"2.7\"/>","eye-off":"<path d=\"M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1\"/><path d=\"M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9\"/>","fast-forward":"<path d=\"M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z\"/>","file":"<path d=\"M6.4 3.5h7.6l3.8 3.8v13.2H6.4Z\"/><path d=\"M13.9 3.5v3.8h3.8\"/>","file-code":"<path d=\"M13.9 3.5H7.4a1.9 1.9 0 0 0-1.9 1.9v13a1.9 1.9 0 0 0 1.9 1.9h9.3a1.9 1.9 0 0 0 1.9-1.9V8.2Z\"/><path d=\"M13.9 3.5v4.6h4.6M10.1 12.4L8.3 14.3l1.9 1.9M13.9 12.4l1.9 1.9l-1.9 1.9\"/>","film":"<rect x=\"3.5\" y=\"4.4\" width=\"17\" height=\"15.1\" rx=\"1.9\"/><path d=\"M7.7 4.4v15.1M16.3 4.4v15.1M3.5 9.2h4.3M3.5 14.8h4.3M16.3 9.2H20.5M16.3 14.8H20.5\"/>","filter":"<path d=\"M3.5 6h17M6.7 12.4h10.6M9.9 18.7h4.2\"/>","finish":"<path d=\"M5.2 20.7V4\"/><rect x=\"5.2\" y=\"4.6\" width=\"13.9\" height=\"8.6\" rx=\"1\"/><path d=\"M5.2 8.8h13.9M9.6 4.6v8.6M14.3 4.6v8.6\"/>","fire":"<path d=\"M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z\"/>","fish":"<path d=\"M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z\"/><path d=\"M8.1 12L3.7 8.8v6.7Z\"/><path d=\"M16.5 10.7h0\"/>","fist":"<path d=\"M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8\"/>","flag":"<path d=\"M6.7 20.7V4M6.7 4h10.8l-2 3.9l2 3.9H6.7\"/>","flask":"<path d=\"M9.5 3.2h4.9M10 3.2V9.2L4.9 17.7a1.5 1.5 0 0 0 1.3 2.3h11.6a1.5 1.5 0 0 0 1.3-2.3L14 9.2V3.2\"/><path d=\"M7.3 14.6h9.5\"/>","focus":"<circle cx=\"12\" cy=\"12\" r=\"2.8\"/><path d=\"M3.5 9V5.9A2.4 2.4 0 0 1 5.9 3.5H9M15 3.5h3.1A2.4 2.4 0 0 1 20.5 5.9V9M20.5 15v3.1a2.4 2.4 0 0 1-2.4 2.4H15M9 20.5H5.9A2.4 2.4 0 0 1 3.5 18.1V15\"/>","folder":"<path d=\"M3.8 7.3a1.9 1.9 0 0 1 1.9-1.9h3.6l1.9 1.9h7.4a1.9 1.9 0 0 1 1.9 1.9v7.4a1.9 1.9 0 0 1-1.9 1.9H5.8a1.9 1.9 0 0 1-1.9-1.9Z\"/>","folder-tree":"<path d=\"M4.1 3.3v13.2a1 1 0 0 0 1 1H9.7M4.1 8.3H9.7\"/><path d=\"M10.2 5.3h3.1l1 1.5h5.6V10.9h-9.7ZM10.2 14.5h3.1l1 1.5h5.6V20.1h-9.7Z\"/>","food":"<path d=\"M8.2 4v6.5M6.3 4v4.2a1.9 1.9 0 0 0 3.7 0V4M8.2 10.5v10.2M17.5 20.8V4c-1.9 1.1-3 3.3-3 6.5v2.8H17.5\"/>","game":"<rect x=\"3.7\" y=\"7.2\" width=\"16.7\" height=\"9.7\" rx=\"4.4\"/><path d=\"M7.6 10.7v2.7M6.4 12h2.7M15.1 11.6h0M17.4 12.9h0\"/>","gauge":"<path d=\"M3.6 16.9a8.4 8.4 0 1 1 16.7 0\"/><path d=\"M11.9 13.2l4.1-5.7\"/><circle cx=\"11.9\" cy=\"13.2\" r=\"1.4\"/>","gavel":"<path d=\"M13.7 4.1l5.1 5.1M10.5 7.4l5.1 5.1M12.1 5.8l-5.6 5.6l5 5l5.6-5.6M3.5 19.5l5.9-5.9M13.7 19.5h6.5\"/>","gear":"<circle cx=\"12\" cy=\"12.1\" r=\"2.3\"/><path d=\"M17.6 14.3a1.3 1.3 0 0 0 0.2 1.5l0.1 0.1a1.5 1.5 0 1 1-2.4 2.4l-0.1-0.1a1.3 1.3 0 0 0-1.5-0.2a1.3 1.3 0 0 0-0.8 1.3V18.8a1.5 1.5 0 1 1-3.4 0v-0.1a1.3 1.3 0 0 0-0.9-1.3a1.3 1.3 0 0 0-1.5 0.2l-0.1 0.1a1.5 1.5 0 1 1-2.4-2.4l0.1-0.1a1.3 1.3 0 0 0 0.2-1.5a1.3 1.3 0 0 0-1.3-0.8H5.4a1.5 1.5 0 1 1 0-3.4h0.1a1.3 1.3 0 0 0 1.3-0.9a1.3 1.3 0 0 0-0.2-1.5l-0.1-0.1a1.5 1.5 0 1 1 2.4-2.4l0.1 0.1a1.3 1.3 0 0 0 1.5 0.2H9.8a1.3 1.3 0 0 0 0.8-1.3V5.4a1.5 1.5 0 1 1 3.4 0v0.1a1.3 1.3 0 0 0 0.8 1.3a1.3 1.3 0 0 0 1.5-0.2l0.1-0.1a1.5 1.5 0 1 1 2.4 2.4l-0.1 0.1a1.3 1.3 0 0 0-0.2 1.5V9.8a1.3 1.3 0 0 0 1.3 0.8H18.7a1.5 1.5 0 1 1 0 3.4h-0.1a1.3 1.3 0 0 0-1.3 0.8Z\"/>","gem":"<path d=\"M6.8 4.9h10.3L20.2 9.5l-8.3 10.3L3.6 9.5Z\"/><path d=\"M3.6 9.5h16.7M9.6 4.9L8.1 9.5l3.8 10.3M14.2 4.9L15.7 9.5l-3.8 10.3\"/>","ghost":"<path d=\"M4.7 20V10.6a7.3 7.3 0 0 1 14.7 0v9.4l-2.4-1.9l-2.5 1.9l-2.4-1.9L9.6 20l-2.5-1.9Z\"/><path d=\"M9.4 10.1h0M14.6 10.1h0\"/>","gift":"<rect x=\"4.4\" y=\"8.8\" width=\"15.1\" height=\"10.4\" rx=\"0.9\"/><path d=\"M3.5 8.8h17M12 8.8v10.4M12 8.8c-1.4-2.8-4.7-3.8-4.7-1.4S12 8.8 12 8.8s4.7-0.9 4.7-3.3S13.4 6 12 8.8\"/>","globe":"<circle cx=\"11.9\" cy=\"11.9\" r=\"8.3\"/><path d=\"M3.6 11.9h16.7M11.9 3.6c2.7 2.7 2.7 13.9 0 16.7M11.9 3.6c-2.7 2.7-2.7 13.9 0 16.7\"/>","grid":"<rect x=\"3.5\" y=\"3.5\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"13.1\" y=\"3.5\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"3.5\" y=\"13.1\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"13.1\" y=\"13.1\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/>","grip":"<path d=\"M8.3 4.5h0M15.8 4.5h0M8.3 12h0M15.8 12h0M8.3 19.5h0M15.8 19.5h0\" stroke-width=\"3.8\"/>","group":"<path d=\"M3.5 7.3V3.5h3.8M16.7 3.5h3.8v3.8M20.5 16.7v3.8h-3.8M7.3 20.5H3.5v-3.8\"/><rect x=\"7.3\" y=\"7.3\" width=\"5.7\" height=\"4.7\" rx=\"0.9\"/><rect x=\"11.1\" y=\"12\" width=\"5.7\" height=\"4.7\" rx=\"0.9\"/>","hammer":"<path d=\"M13.1 3.7L19.3 9.9l-2.7 2.7l-6.2-6.2Z\"/><path d=\"M13.6 9.4L5 18.1a1.3 1.3 0 0 0 1.9 1.9l8.6-8.6\"/>","hand":"<path d=\"M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6\"/>","handshake":"<path d=\"M3.6 9.9v5.3M20.3 9.9v5.3\"/><path d=\"M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2\"/><path d=\"M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2\"/>","hash":"<path d=\"M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17\"/>","heading":"<path d=\"M5.6 3.5v17M18.4 3.5v17M5.6 12h12.7M3.5 3.5h4.2M16.2 3.5h4.2M3.5 20.5h4.2M16.2 20.5h4.2\"/>","headphones":"<path d=\"M4.4 13.9v-2.8a7.5 7.5 0 0 1 14.9 0v2.8\"/><rect x=\"3.5\" y=\"13\" width=\"4.2\" height=\"6\" rx=\"1.4\"/><rect x=\"16.1\" y=\"13\" width=\"4.2\" height=\"6\" rx=\"1.4\"/>","heart":"<path d=\"M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z\"/>","heart-broken":"<path d=\"M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z\"/><path d=\"M11.9 5.8L10 9.8l3.5 2.3l-1.6 3.9\"/>","heart-pulse":"<path d=\"M19 12.3c-1.7 3.6-7 6.7-7 6.7s-5.3-3.1-7-6.7M4.3 9.7A4.3 4.3 0 0 1 12 7.4a4.3 4.3 0 0 1 7.7 2.2\"/><path d=\"M3.5 11.9h4l1.3-2.2l2.2 4.5l1.8-3.1h7.6\"/>","help":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M9.6 9.3a2.5 2.5 0 0 1 4.8.9c0 1.7-2.4 2.2-2.4 3.8M12 17h.01\"/>","history":"<path d=\"M3.8 12.1a8.3 8.3 0 1 0 2.5-5.9L3.8 8.5M3.8 4.2v4.2h4.2\"/><path d=\"M12 7.9v4.3l3.1 1.9\"/>","home":"<path d=\"M3.6 10.6L12 3.3l8.4 7.3v8.4a1 1 0 0 1-1 1h-4.2v-6.3h-6.3v6.3H4.7a1 1 0 0 1-1-1Z\"/>","hot-tub":"<circle cx=\"8.6\" cy=\"5.8\" r=\"1.7\"/><path d=\"M3.8 11.9h16.6v3.3a4.2 4.2 0 0 1-4.2 4.2h-8.4A4.2 4.2 0 0 1 3.8 15.2ZM6.8 11.9v-1.4A2.4 2.4 0 0 1 8.9 8.2H9.4M13.7 9.5c0.8-0.9-0.8-1.9 0-2.8M17.3 9.5c0.8-0.9-0.8-1.9 0-2.8\"/>","hourglass":"<path d=\"M6 3.5h12M6 20.5h12M7.5 3.5c0 4.5 4.5 5.5 4.5 8.5s-4.5 4-4.5 8.5M16.5 3.5c0 4.5-4.5 5.5-4.5 8.5s4.5 4 4.5 8.5\"/>","id":"<rect x=\"3.7\" y=\"5.5\" width=\"16.7\" height=\"13\" rx=\"1.9\"/><circle cx=\"9.2\" cy=\"11\" r=\"1.9\"/><path d=\"M6.4 15.6c0.5-1.4 1.6-2.2 2.8-2.2s2.4 0.8 2.8 2.2M14.8 10.1h2.8M14.8 13.4h2.8\"/>","idea":"<path d=\"M9.1 17.6h5.8M10.1 20.5h3.9M8.7 14.3A5.8 5.8 0 1 1 15.2 14.3c-0.7 0.6-1.4 1.5-1.4 2.3h-3.9c0-0.9-0.7-1.7-1.4-2.3Z\"/>","image":"<rect x=\"3.5\" y=\"5.4\" width=\"16.7\" height=\"13\" rx=\"2.8\"/><circle cx=\"9.1\" cy=\"10\" r=\"1.5\"/><path d=\"M20.3 15.6l-4.7-4.7l-7.4 7.4\"/>","inbox":"<path d=\"M3.5 12.7L5.9 4.8h12.1l2.4 7.9V17.8a0.9 0.9 0 0 1-0.9 0.9H4.4a0.9 0.9 0 0 1-0.9-0.9ZM3.5 12.7h4.6l1.4 2.4h4.6l1.4-2.4h4.6\"/>","infinity":"<path d=\"M12 12c-1.8-2.4-3.3-3.6-4.9-3.6a3.6 3.6 0 0 0 0 7.2c1.6 0 3.1-1.2 4.9-3.6Zm0 0c1.8 2.4 3.3 3.6 4.9 3.6a3.6 3.6 0 0 0 0-7.2c-1.6 0-3.1 1.2-4.9 3.6Z\"/>","info":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 11v5M12 8h.01\"/>","invite":"<circle cx=\"9.2\" cy=\"8.2\" r=\"2.9\"/><path d=\"M3.8 18.8c0-3 2.4-4.8 5.3-4.8s5.3 2 5.3 4.8M17.9 8.2v5.3M15.3 10.9h5.3\"/>","key":"<circle cx=\"8.1\" cy=\"15.9\" r=\"4.3\"/><path d=\"M11.1 12.9l9.4-9.4M16.8 7.3l3.2 3.2M14.6 9.4l2.2 2.2\"/>","keyboard":"<rect x=\"3.5\" y=\"6.6\" width=\"17\" height=\"10.7\" rx=\"1.8\"/><path d=\"M6.6 10.2h0M9.3 10.2h0M12 10.2h0M14.7 10.2h0M17.4 10.2h0M8.4 13.8h7.2\"/>","language":"<path d=\"M4.6 5.4h8.4M8.8 3.6v1.9M6.4 5.4c0.5 2.8 2.3 5.6 5.6 7M11.1 5.4c-0.6 3.2-2.6 6.3-6 7.9M12 20.3l3.7-8.4l3.7 8.4M13.3 17.5h4.8\"/>","laugh":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 13.5h8a4 4 0 0 1-8 0ZM7.5 8.6l2.2 1.2-2.2 1.2M16.5 8.6l-2.2 1.2 2.2 1.2\"/>","layers":"<path d=\"M12 5.4l8.3 4.6l-8.3 4.6l-8.3-4.6Z\"/><path d=\"M3.8 14l8.3 4.6l8.3-4.6\"/>","leaf":"<path d=\"M3.8 20.1c0-9.5 5.6-15.2 16.7-16.7c-1 11.1-6.7 16.7-16.7 16.7ZM3.8 20.1l8.9-8.9\"/>","leave":"<path d=\"M12.7 3.5h4.2a2.1 2.1 0 0 1 2.1 2.1v12.7a2.1 2.1 0 0 1-2.1 2.1h-4.2M8.5 16.2l-4.2-4.2l4.2-4.2M4.2 12h10.6\"/>","lifebuoy":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"3.8\"/><path d=\"M6 6l3.4 3.4M14.6 14.7l3.4 3.4M18 6l-3.4 3.4M9.4 14.7l-3.4 3.4\"/>","link":"<path d=\"M9.9 14.1a4.3 4.3 0 0 0 6.1 0l3.2-3.2a4.3 4.3 0 0 0-6.1-6.1l-1.1 1.1M14.1 9.9a4.3 4.3 0 0 0-6.1 0l-3.2 3.2a4.3 4.3 0 0 0 6.1 6.1l1.1-1.1\"/>","link-off":"<path d=\"M10 13.8a4 4 0 0 0 5.6 0l2.9-2.9a4 4 0 0 0-5.6-5.6l-1 1M13.8 10a4 4 0 0 0-5.6 0l-2.9 2.9a4 4 0 0 0 5.6 5.6l1-1\"/><path d=\"M3.6 3.6l16.7 16.7\"/>","list":"<path d=\"M8.2 5.5h11.9M8.2 12h11.9M8.2 18.5h11.9M3.3 5.5h0M3.3 12h0M3.3 18.5h0\"/>","list-ordered":"<path d=\"M9.7 6.8h10.8M9.7 12.8h10.8M9.7 18.8h10.8M3.8 5.4L4.7 5v4.4M3.8 9.3h2M3.8 13.7a1 1 0 0 1 2 0.3c0 1.1-2 1.7-2 2.7h2.2\"/>","live":"<circle cx=\"12\" cy=\"11.8\" r=\"2\"/><path d=\"M8.6 8.4a4.9 4.9 0 0 0 0 7.1M15.4 8.4a4.9 4.9 0 0 1 0 7.1M6.3 6.1a8.1 8.1 0 0 0 0 11.9M17.7 6.1a8.1 8.1 0 0 1 0 11.9\"/>","lock":"<rect x=\"4.7\" y=\"10.7\" width=\"14.5\" height=\"9.4\" rx=\"2.1\"/><path d=\"M7.8 10.7V7.5a4 4 0 0 1 8.3 0v3.2\"/>","lungs":"<path d=\"M12 3.5v8M12 9.4l-3 2.1M12 9.4l3 2.1M8.4 6.5C5.6 6.5 3.5 10.4 3.5 15.2c0 2.8 1.1 4.8 3.2 4.8s2.7-2.1 2.7-4.8V8.3M15.6 6.5C18.4 6.5 20.5 10.4 20.5 15.2c0 2.8-1.1 4.8-3.2 4.8s-2.7-2.1-2.7-4.8V8.3\"/>","mail":"<rect x=\"3.5\" y=\"5.5\" width=\"17\" height=\"13.2\" rx=\"1.9\"/><path d=\"M4.4 7.4l7.6 5.7l7.6-5.7\"/>","map":"<path d=\"M9.1 4.6L3.5 6.5v13l5.6-1.9l5.6 1.9l5.6-1.9V4.6l-5.6 1.9Z\"/><path d=\"M9.1 4.6v13M14.7 6.5v13\"/>","mask":"<path d=\"M3.5 7c3 1.3 5.8 1.8 8.5 1.8S17.5 8.3 20.5 7c0 6-2.5 10-5 10-1.4 0-2-1.5-3.5-1.5S9.9 17 8.5 17c-2.5 0-5-4-5-10Z\"/><path d=\"M7.5 11.5h2M14.5 11.5h2\"/>","medical":"<rect x=\"3.5\" y=\"7.1\" width=\"17\" height=\"12.3\" rx=\"1.9\"/><path d=\"M9.2 7.1V5.2a0.9 0.9 0 0 1 0.9-0.9h3.8a0.9 0.9 0 0 1 0.9 0.9v1.9M12 10.4v5.7M9.2 13.3h5.7\"/>","megaphone":"<path d=\"M3.6 9.5v4a1 1 0 0 0 1 1H7.1l9 4.5v-15L7.1 8.5H4.5a1 1 0 0 0-1 1Z\"/><path d=\"M7.1 14.5l1.3 5h2.4L10.1 15.1M19.1 9a3.2 3.2 0 0 1 0 5\"/>","members":"<circle cx=\"9.2\" cy=\"7.9\" r=\"3\"/><path d=\"M3.6 19.1c0-3.1 2.6-5.1 5.6-5.1s5.6 2.1 5.6 5.1M15.7 5a3 3 0 0 1 0 5.9M17.6 14.3c1.8 0.6 2.8 2.3 2.8 4.8\"/>","menu":"<path d=\"M3.5 6.7h17M3.5 12h17M3.5 17.3h17\"/>","mic":"<rect x=\"9.2\" y=\"3.5\" width=\"5.7\" height=\"10.4\" rx=\"2.8\"/><path d=\"M5.4 11.1a6.6 6.6 0 0 0 13.2 0M12 17.7v2.8\"/>","mic-off":"<rect x=\"9.2\" y=\"3.6\" width=\"5.7\" height=\"10.4\" rx=\"2.8\"/><path d=\"M5.5 11.1a6.6 6.6 0 0 0 11 5M18.7 11.1c0 0.8-0.1 1.5-0.4 2.2M12.1 17.7v2.8M4.5 4.5l15.1 15.1\"/>","minus":"<path d=\"M3.5 12h17\"/>","minus-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 12h8\"/>","money":"<rect x=\"3.5\" y=\"6.6\" width=\"17\" height=\"10.7\" rx=\"1.8\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><path d=\"M6.6 9.8v0M17.4 14.2v0\"/>","moon":"<path d=\"M20.5 14.6A8.6 8.6 0 1 1 9.4 3.5a6.9 6.9 0 0 0 11.2 11.2Z\"/>","more":"<circle cx=\"5.2\" cy=\"12\" r=\"1.6\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/><circle cx=\"18.8\" cy=\"12\" r=\"1.6\"/>","mountain":"<path d=\"M3.6 17.5L9.3 6l3.7 6.3L15.5 9.1L20.3 17.5Z\"/>","move":"<path d=\"M11.9 3.6v16.7M3.6 11.9h16.7M9 6.5l2.9-2.9l2.9 2.9M9 17.3l2.9 2.9l2.9-2.9M6.5 9l-2.9 2.9l2.9 2.9M17.3 9l2.9 2.9l-2.9 2.9\"/>","mug":"<path d=\"M4.8 9.1h11v7a4 4 0 0 1-4 4h-3a4 4 0 0 1-4-4Z\"/><path d=\"M15.8 10.5H17.3a2.5 2.5 0 0 1 0 5h-1.5M8.3 3.5c-0.8 1 0.8 2 0 3M11.8 3.5c-0.8 1 0.8 2 0 3\"/>","music":"<path d=\"M8.6 17.7V5.6l11.1-2.1v12.2\"/><circle cx=\"6\" cy=\"17.7\" r=\"2.6\"/><circle cx=\"17.2\" cy=\"15.7\" r=\"2.6\"/>","mute":"<path d=\"M3.9 9.4h3.6L12.2 5.8v12.4l-4.6-3.6H3.9Z\"/><path d=\"M16.3 9.9l4.1 4.1M20.5 9.9l-4.1 4.1\"/>","news":"<path d=\"M3.5 3.5h13.8v14.9a2.1 2.1 0 0 0 2.1 2.1H5.6a2.1 2.1 0 0 1-2.1-2.1Z\"/><path d=\"M17.3 7.7h3.2v10.6a2.1 2.1 0 0 1-2.1 2.1M7.2 7.7h6.4M7.2 11.5h6.4M7.2 15.2h3.7\"/>","nodes":"<circle cx=\"12\" cy=\"5.4\" r=\"2.1\"/><circle cx=\"5.8\" cy=\"17.9\" r=\"2.1\"/><circle cx=\"18.2\" cy=\"17.9\" r=\"2.1\"/><path d=\"M11 7.4L6.8 15.9M13 7.4l4.3 8.6M7.9 17.9h8.3\"/>","open":"<path d=\"M14 3.8h6.3v6.3M20.2 3.8l-9.4 9.4M18.2 14.2v4.2a2.1 2.1 0 0 1-2.1 2.1H5.6a2.1 2.1 0 0 1-2.1-2.1V7.9a2.1 2.1 0 0 1 2.1-2.1h4.2\"/>","palette":"<path d=\"M12.2 3.8a8.4 8.4 0 1 0 0 16.8c1.1 0 1.7-0.9 1.7-1.6c0-1.1-0.9-1.5-0.9-2.6s0.9-1.6 1.9-1.6H16.9a3.7 3.7 0 0 0 3.7-3.7C20.6 7.2 16.9 3.8 12.2 3.8Z\"/><circle cx=\"8\" cy=\"11.4\" r=\"1.1\"/><circle cx=\"10.3\" cy=\"7.9\" r=\"1.1\"/><circle cx=\"14.5\" cy=\"7.9\" r=\"1.1\"/>","parking":"<rect x=\"3.7\" y=\"3.7\" width=\"16.7\" height=\"16.7\" rx=\"3\"/><path d=\"M9.6 17V7.2h3.4a3 3 0 0 1 0 5.9H9.6\"/>","pause":"<path d=\"M7.1 3.5v17M16.9 3.5v17\"/>","paw":"<path d=\"M7.8 18.5c0-3 1.9-5.3 4.2-5.3s4.2 2.3 4.2 5.3c0 1.4-1.1 2.1-2.1 2.1c-0.8 0-1.4-0.5-2.1-0.5s-1.3 0.5-2.1 0.5c-1.1 0-2.1-0.7-2.1-2.1Z\"/><circle cx=\"5.4\" cy=\"10.6\" r=\"1.9\"/><circle cx=\"9.2\" cy=\"5.7\" r=\"1.9\"/><circle cx=\"14.8\" cy=\"5.7\" r=\"1.9\"/><circle cx=\"18.6\" cy=\"10.6\" r=\"1.9\"/>","pencil":"<path d=\"M11.9 19.6h8.4M16.1 4.2a2 2 0 0 1 2.8 2.8L7.2 18.7l-3.7 0.9l0.9-3.7Z\"/>","phone":"<path d=\"M5.7 3.4h3.9l2 4.9l-2.5 1.5a10.8 10.8 0 0 0 4.9 4.9L15.6 12.3l4.9 2v3.9a2 2 0 0 1-2 2A15.8 15.8 0 0 1 3.8 5.4a2 2 0 0 1 2-2\"/>","phone-off":"<path d=\"M5.6 4.1h3.7l1.9 4.7l-2.4 1.4a10.3 10.3 0 0 0 4.7 4.7L15.1 12.5l4.7 1.9v3.7a1.9 1.9 0 0 1-1.9 1.9A15.1 15.1 0 0 1 3.8 5.9a1.9 1.9 0 0 1 1.9-1.9\"/><path d=\"M4.3 3.6l16.1 16.1\"/>","piggy":"<path d=\"M3.5 11.4c0-3.2 3.3-5.7 7.7-5.7c1.3 0 2.4 0.2 3.4 0.6L17.4 4.7v3.3c0.8 0.7 1.4 1.6 1.6 2.5h1.4v3.4H18.8c-0.5 1-1.3 1.7-2.3 2.3V19.1h-2.9v-1.9c-0.8 0.2-1.7 0.3-2.5 0.3c-0.8 0-1.6-0.1-2.3-0.3v1.9h-2.9v-2.9C4.4 15.1 3.5 13.4 3.5 11.4Z\"/><path d=\"M14.9 10.1h0M8.7 8.1h2.9\"/>","pin":"<path d=\"M12 20.7s-6.2-5.4-6.2-10.5a6.2 6.2 0 0 1 12.4 0C18.2 15.2 12 20.7 12 20.7Z\"/><circle cx=\"12\" cy=\"10\" r=\"2.3\"/>","plane":"<path d=\"M20 4L3.5 10.8l6.6 3.1l3.1 6.6Z\"/><path d=\"M10.1 13.9l9.9-9.9\"/>","play":"<path d=\"M5.6 3.6v16.9l13.4-8.5Z\"/>","plug":"<path d=\"M9.2 4v4.6M14.8 4v4.6M6.9 8.7h10.2v2.8a5.1 5.1 0 0 1-10.2 0ZM12 16.6V20.7\"/>","plus":"<path d=\"M12 3.5v17M3.5 12h17\"/>","plus-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 8v8M8 12h8\"/>","print":"<path d=\"M7.1 8.9V3.5h9.9V8.9\"/><rect x=\"3.6\" y=\"8.9\" width=\"16.7\" height=\"7.9\" rx=\"2\"/><path d=\"M7.1 13.8h9.9v6.4H7.1ZM16.4 11.9h0\"/>","puzzle":"<path d=\"M3.8 7h4.2a2.6 2.6 0 1 1 4.8 0h4.2v4.2a2.6 2.6 0 1 1 0 4.8v4.2h-4.2a2.6 2.6 0 1 0-4.8 0H3.8v-4.2a2.6 2.6 0 1 0 0-4.8Z\"/>","quote":"<path d=\"M9.8 6.2C5.8 7.2 3.6 10 3.6 13.9v3.3h5.6v-5.6h-5.6M20.3 6.2c-3.9 1.1-6.1 3.9-6.1 7.8v3.3h5.6v-5.6h-5.6\"/>","radio":"<rect x=\"3.5\" y=\"8.3\" width=\"16.8\" height=\"11.3\" rx=\"1.9\"/><path d=\"M7.3 8.3L16.7 3.9\"/><circle cx=\"15.3\" cy=\"14\" r=\"2.4\"/><path d=\"M6.8 12.4h3.8M6.8 15.4h3.8\"/>","ranking":"<path d=\"M3.5 19.9h17M4.5 19.9V13.8h4.7M9.2 19.9V10h5.7v9.9M14.9 19.9V15.7h4.7v4.3\"/><path d=\"M12 3.4l0.9 1.7l1.9 0.3l-1.4 1.3l0.3 1.9L12 7.7l-1.7 0.9l0.3-1.9L9.3 5.4l1.9-0.3Z\"/>","record":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>","recycle":"<path d=\"M7.8 18.2H5.7a1.2 1.2 0 0 1-1-1.8l2.3-3.9M10 5.5l0.9-1.5a1.2 1.2 0 0 1 2.1 0l2.3 3.9M17.7 12.4l1.6 2.7a1.2 1.2 0 0 1-1 1.8h-4.5\"/><path d=\"M11.1 16.5l1.8 1.8l-1.8 1.8M4.5 10.4l2.4-0.7l0.7 2.5M17.2 6.1l-0.7 2.5l-2.5-0.7\"/>","reply":"<path d=\"M9.2 5.8L4 11l5.1 5.1M4 11h10.3a6.2 6.2 0 0 1 6.2 6.2v1\"/>","restroom":"<circle cx=\"7.1\" cy=\"5.3\" r=\"1.7\"/><circle cx=\"16.4\" cy=\"5.3\" r=\"1.7\"/><path d=\"M11.7 3.6v16.7M5.6 20.3v-5.1H4.7V10.6A1.4 1.4 0 0 1 6.1 9.2h1.9a1.4 1.4 0 0 1 1.4 1.4v4.6H8.5V20.3M15.5 20.3v-3.7h-2.4l1.9-6.1a0.9 0.9 0 0 1 0.9-0.9h0.9a0.9 0.9 0 0 1 0.9 0.9l1.9 6.1H17.3v3.7\"/>","retry":"<path d=\"M3.7 12a8.2 8.2 0 0 1 14.1-5.9L20.2 8.4M20.2 3.8v4.6h-4.6M20.2 12a8.2 8.2 0 0 1-14.1 5.9L3.7 15.6M3.7 20.3v-4.6h4.6\"/>","rewind":"<path d=\"M20 6.4v11.2L12.4 12ZM10.9 6.4v11.2L3.3 12Z\"/>","road":"<path d=\"M8.2 3.5L4.4 20.5M15.8 3.5l3.8 17M12 4.4v2.4M12 10.6v2.8M12 17.2V19.6\"/>","robot":"<rect x=\"5.4\" y=\"8.3\" width=\"13.2\" height=\"10.4\" rx=\"2.8\"/><path d=\"M12 4.6v3.8M9.2 13.1h0M14.8 13.1h0M9.6 16.4h4.7M3.5 13.1v1.9M20.5 13.1v1.9\"/>","rocket":"<path d=\"M11.8 15.7L8.4 12.3C9.9 6.9 13.8 3.9 20.2 3.9C20.2 10.3 17.3 14.2 11.8 15.7ZM8.4 12.3L4.9 11.8L7.4 8.3h3.9M11.8 15.7l0.5 3.4l3.4-2.5v-3.9M6.4 17.7c-1.5 0-3 1.5-3 3c1.5 0 3-1.5 3-3Z\"/><circle cx=\"15.3\" cy=\"8.8\" r=\"1.5\"/>","route":"<circle cx=\"6\" cy=\"18\" r=\"2.4\"/><circle cx=\"18\" cy=\"6\" r=\"2.4\"/><path d=\"M8.4 18H16a3 3 0 0 0 0-6H8a3 3 0 0 1 0-6h7.6\"/>","rss":"<path d=\"M4 3.5a16.5 16.5 0 0 1 16.5 16.5M4 10.4A9.6 9.6 0 0 1 13.6 20.1\"/><path d=\"M4.6 19.4h0\" stroke-width=\"3.9\"/>","save":"<path d=\"M4.7 3.5h11.5l3.2 3.2v13.6H4.7Z\"/><path d=\"M7.8 3.5v5.2h7.3V3.5M7.8 20.2v-6.3h8.4v6.3\"/>","scale":"<path d=\"M12 4.3V19.5M8.5 19.5h6.9M5.5 7.4h13M12 4.3h0M3.7 13.4L5.9 7.8L8.1 13.4M15.9 13.4L18.1 7.8l2.2 5.6M3.7 13.4a2.2 2.2 0 0 0 4.3 0M15.9 13.4a2.2 2.2 0 0 0 4.3 0\"/>","scissors":"<circle cx=\"6\" cy=\"7\" r=\"2.6\"/><circle cx=\"6\" cy=\"17\" r=\"2.6\"/><path d=\"M8.2 8.6 20 18M8.2 15.4 20 6\"/>","scroll":"<path d=\"M8.3 3.8h10.1a1.9 1.9 0 0 1 1.9 1.9v1.5H17M8.3 3.8a1.9 1.9 0 0 0-1.9 1.9v11.7a2.9 2.9 0 0 1-2.9 2.9h10.7a2.9 2.9 0 0 0 2.9-2.9v-11.7a1.9 1.9 0 0 0-1.9-1.9M10.2 9.2h3.9M10.2 13h3.9\"/>","search":"<circle cx=\"10.6\" cy=\"10.6\" r=\"7\"/><path d=\"M20.4 20.4l-4.5-4.5\"/>","seedling":"<path d=\"M12 20.8v-9.8M12 11C12 6.7 9.3 4 4.4 4c0 4.3 2.7 7 7.6 7ZM12 13.7c0-4.3 2.7-7 7.6-7c0 4.3-2.7 7-7.6 7Z\"/>","server":"<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"7.4\" rx=\"2.1\"/><rect x=\"3.5\" y=\"13.1\" width=\"17\" height=\"7.4\" rx=\"2.1\"/><path d=\"M7.8 7.2h0M7.8 16.8h0\"/>","shapes":"<circle cx=\"7.5\" cy=\"7.7\" r=\"3.4\"/><path d=\"M16.4 3.7l3.9 6.9h-7.9ZM13.9 14.1h5.9v5.9h-5.9ZM3.6 20l3.4-5.9l3.4 5.9Z\"/>","share":"<path d=\"M12 15.2V3.3M7.4 8.1L12 3.3L16.6 8.1M4.9 12.9v6.1a1 1 0 0 0 1 1h12.2a1 1 0 0 0 1-1v-6.1\"/>","shelter":"<path d=\"M3.7 10.5L12 4l8.3 6.5M5.9 9.2v10.4M18.1 9.2v10.4\"/><circle cx=\"12\" cy=\"11\" r=\"1.6\"/><path d=\"M9.8 19.6v-3.9a2.2 2.2 0 0 1 4.3 0V19.6\"/>","shield":"<path d=\"M12 3.7L5.5 6.6v5.6c0 4.1 2.8 7.1 6.5 8.4c3.7-1.3 6.5-4.2 6.5-8.4V6.6Z\"/>","shirt":"<path d=\"M8.2 3.8L3.7 6.6l1.8 3.8l1.8-0.9v11.2h9.3V9.4l1.8 0.9l1.8-3.8l-4.7-2.7c-0.5 1.4-1.8 2.3-3.8 2.3S8.8 5.1 8.2 3.8Z\"/>","signature":"<path d=\"M3.9 14c2.4 0 3.3-8.4 5.6-8.4c1.4 0 0.9 5.6 2.4 5.6c0.9 0 1.4-2.4 2.4-2.4s0.8 1.9 1.9 1.9c0.8 0 1.4-0.6 1.9-1.1M3.9 17.8h16.7\"/>","skip":"<path d=\"M4.8 3.5l10.8 8.4l-10.8 8.4Z\"/><path d=\"M19.7 3.5v16.7\"/>","skull":"<path d=\"M12 3.7a6.5 6.5 0 0 0-6.5 6.5c0 2.2 1 3.6 2.4 4.6v2.8h8.4v-2.8c1.3-1 2.4-2.6 2.4-4.6a6.5 6.5 0 0 0-6.5-6.5Z\"/><circle cx=\"9.6\" cy=\"10.7\" r=\"1.3\"/><circle cx=\"14.4\" cy=\"10.7\" r=\"1.3\"/><path d=\"M10.6 17.7v2.8M13.4 17.7v2.8\"/>","slash":"<path d=\"M3.6 3.6l16.7 16.7\"/>","sliders":"<path d=\"M3.5 6.8h10M18.7 6.8H20.3M3.5 17.2h3.6M12.4 17.2H20.3\"/><circle cx=\"16.2\" cy=\"6.8\" r=\"2.4\"/><circle cx=\"9.8\" cy=\"17.2\" r=\"2.4\"/>","smile":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8.5 14a4 4 0 0 0 7 0M9 9.5h.01M15 9.5h.01\"/>","snow":"<path d=\"M12 3.5v17M4.6 7.8l14.7 8.5M4.6 16.3l14.7-8.5M9.6 4.9L12 7.3l2.4-2.4M9.6 19.1L12 16.7l2.4 2.4\"/>","sort":"<path d=\"M3.5 5.8h9.2M3.5 12h6.2M3.5 18.2h3M17.5 4.8v14.4M14.3 16.2l3 3l3-3\"/>","sort-asc":"<path d=\"M3.4 5.4h3M3.4 11.6h6.3M3.4 17.9h9.3M17.5 4.3v14.6M14.3 16l3 3l3-3\"/>","spark":"<path d=\"M10.4 3.6l1.7 4.8L17 10.1l-4.8 1.7L10.4 16.7l-1.7-4.8L3.9 10.1l4.8-1.7ZM17 14.8l0.8 2.1L19.8 17.6l-2.1 0.8L17 20.3l-0.8-2.1L14.3 17.6l2.1-0.8Z\"/>","square":"<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"2.7\"/>","star":"<path d=\"M12 4l2.6 5.3l5.7 0.6l-4.3 3.9l1.2 5.7L12 16.8l-5.2 2.9l1.2-5.7l-4.3-3.9l5.7-0.6Z\"/>","steps":"<path d=\"M9.7 5.7h11M9.7 11.8h11M9.7 17.8h11\"/><path d=\"M3.7 5.7l1.5 1.5L7.7 4.8M3.7 11.8l1.5 1.5L7.7 10.8M3.7 17.8l1.5 1.5L7.7 16.8\"/>","stop":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m8.5 8.5 7 7\"/>","store":"<path d=\"M3.7 8.8L5.3 3.7h13.4L20.3 8.8M3.7 8.8h16.5v1.6a2.8 2.8 0 0 1-5.4 0a2.8 2.8 0 0 1-5.6 0A2.8 2.8 0 0 1 3.7 10.4ZM4.8 12.9v7.2h14.5v-7.2M9.9 20.1v-4.1h4.1v4.1\"/>","storm":"<path d=\"M7.8 16a3.8 3.8 0 1 1 0.8-7.4A4.5 4.5 0 0 1 17.4 10.5a3.1 3.1 0 0 1-0.4 6.2\"/><path d=\"M12.9 12.2l-2.1 3.3h2.5L11.3 18.9\"/>","sun":"<circle cx=\"11.9\" cy=\"11.9\" r=\"3.4\"/><path d=\"M11.9 3.5v1.8M11.9 18.6v1.8M6 6l1.2 1.2M16.7 16.7l1.2 1.2M3.5 11.9h1.8M18.6 11.9h1.8M6 17.9l1.2-1.2M16.7 7.2l1.2-1.2\"/>","swap":"<path d=\"M3.5 7.8h14.9l-3.7-3.7M20.5 16.3H5.6l3.7 3.7\"/>","sword":"<path d=\"M20.3 3.7v3.7L10.4 17.3L6.7 13.6L16.7 3.7Z\"/><path d=\"M5.2 12L12 18.8M8.3 15.7L3.6 20.4\"/>","table":"<rect x=\"3.5\" y=\"4.3\" width=\"17\" height=\"15.1\" rx=\"1.9\"/><path d=\"M3.5 9.5h17M3.5 14.7h17M9.2 9.5V19.4M14.8 9.5V19.4\"/>","tack":"<path d=\"M9.3 4h5.6l-0.9 4.6l2.8 2.8H7.4l2.8-2.8ZM12 11.4v9.3\"/>","tag":"<path d=\"M3.8 11.2V3.8h7.4l9.3 9.3l-7.4 7.4Z\"/><circle cx=\"8\" cy=\"8\" r=\"1.2\"/>","target":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\"/>","tent":"<path d=\"M3.5 18.4h17M12 4.9L4.8 18.4M12 4.9l7.2 13.4M12 12.5L9.3 18.4M12 12.5l2.7 5.8\"/>","terminal":"<rect x=\"3.7\" y=\"4.6\" width=\"16.7\" height=\"14.9\" rx=\"1.9\"/><path d=\"M7.4 9.2l2.8 2.8l-2.8 2.8M12.9 14.8h3.7\"/>","text":"<path d=\"M5.2 20.3L10.9 3.6h2.1l5.7 16.7M7.4 14h9.2\"/>","thumbs-up":"<path d=\"M7.3 10.4v9.6H4.8a1 1 0 0 1-1-1v-7.6a1 1 0 0 1 1-1Z\"/><path d=\"M7.3 10.4L10.9 3.3a2.2 2.2 0 0 1 2.5 2.6L12.7 9.4H18.5a2 2 0 0 1 2 2.4l-1.3 6.6a2 2 0 0 1-2 1.6H7.3\"/>","ticket":"<path d=\"M3.6 7.4h16.7v2.8a1.9 1.9 0 0 0 0 3.7v2.8H3.6v-2.8a1.9 1.9 0 0 0 0-3.7Z\"/><path d=\"M13.8 7.4v9.3\"/>","timeline":"<path d=\"M3.5 12h0.9M8.2 12h1.9M13.9 12h1.9M19.6 12h0.9\"/><circle cx=\"6.3\" cy=\"12\" r=\"1.9\"/><circle cx=\"12\" cy=\"12\" r=\"1.9\"/><circle cx=\"17.7\" cy=\"12\" r=\"1.9\"/><path d=\"M6.3 10.1V5.9M12 13.9v4.3M17.7 10.1V5.9\"/>","toolbox":"<rect x=\"3.5\" y=\"8.1\" width=\"17\" height=\"11.3\" rx=\"1.9\"/><path d=\"M9.2 8.1V5.8A1.4 1.4 0 0 1 10.6 4.3h2.8A1.4 1.4 0 0 1 14.8 5.8V8.1M3.5 12.8h17M8.2 11.4v2.8M15.8 11.4v2.8\"/>","train":"<rect x=\"6.4\" y=\"3.8\" width=\"11.2\" height=\"12.1\" rx=\"2.8\"/><path d=\"M6.4 10.3h11.2M9.2 13.1h0M14.8 13.1h0M8.7 20.5l1.9-3.3M15.3 20.5l-1.9-3.3\"/>","trash":"<path d=\"M4.1 6.7h15.8M10 10.6v5.9M14 10.6v5.9M6.1 6.7l1 11.8a2 2 0 0 0 2 2h5.9a2 2 0 0 0 2-2l1-11.8M9 6.7V3.7h5.9v3\"/>","tree":"<path d=\"M12.1 3.6L7 10.6h2.8L5.6 16.6h13l-4.2-6h2.8ZM12.1 16.6v3.7\"/>","trend-down":"<path d=\"M3.2 7.2l5.6 5.6l3.8-3.8l7.4 7.4\"/><path d=\"M14.4 16.6h5.6v-5.6\"/>","trend-up":"<path d=\"M3.2 16.8L8.8 11.3l3.8 3.8l7.4-7.4\"/><path d=\"M14.4 7.4h5.6v5.6\"/>","trophy":"<path d=\"M7.9 4h8.4v5.2a4.1 4.1 0 0 1-8.4 0ZM7.9 6.1H4.7a3.2 3.2 0 0 0 3.2 4.1M16.2 6.1h3.2a3.2 3.2 0 0 1-3.2 4.1M12 13.4v4.1M7.9 20.8h8.4\"/>","tv":"<rect x=\"3.5\" y=\"7.8\" width=\"17\" height=\"11.6\" rx=\"1.8\"/><path d=\"M8.4 4.3l3.6 3.6l3.6-3.6\"/>","umbrella":"<path d=\"M3.8 12.5a8.4 8.4 0 0 1 16.6 0ZM12.1 12.5v6a1.9 1.9 0 0 1-3.7 0M12.1 4.1v0\"/>","undo":"<path d=\"M9.2 14.2L4 8.9l5.2-5.2\"/><path d=\"M4 8.9h11a5.8 5.8 0 0 1 0 11.5H11.3\"/>","up":"<path d=\"M3.7 16.1l8.3-8.3l8.3 8.3\"/>","upload":"<path d=\"M12 20.8V9.2M6.8 14.5l5.2-5.2l5.2 5.2M4.7 4h14.7\"/>","user":"<circle cx=\"12\" cy=\"7.4\" r=\"3.8\"/><path d=\"M4.3 20.5c0-3.9 3.4-6.6 7.7-6.6s7.7 2.6 7.7 6.6\"/>","user-check":"<circle cx=\"9.2\" cy=\"8.1\" r=\"2.8\"/><path d=\"M4 19c0-2.9 2.4-4.9 5.4-4.9s5.4 1.9 5.4 4.9M15.4 10.8l1.8 1.8l3.6-3.6\"/>","user-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M6.6 18.3a6.5 6.5 0 0 1 10.8 0\"/>","user-lock":"<circle cx=\"9.8\" cy=\"7.3\" r=\"3.3\"/><path d=\"M3.5 18.8c0-3.4 2.8-5.7 6.2-5.7c1.2 0 2.2 0.3 3.1 0.7\"/><rect x=\"14.6\" y=\"14.5\" width=\"5.7\" height=\"4.8\" rx=\"1\"/><path d=\"M16 14.5v-1.2a1.5 1.5 0 0 1 2.9 0v1.2\"/>","user-minus":"<circle cx=\"10.1\" cy=\"8\" r=\"3.3\"/><path d=\"M4 19.3c0-3.3 2.7-5.7 6.1-5.7c1.1 0 2.2 0.3 3 0.7\"/><path d=\"M15.1 17h5.7\"/>","user-off":"<circle cx=\"12\" cy=\"8.2\" r=\"3.5\"/><path d=\"M5.1 20c0-3.6 3-5.9 6.9-5.9s6.9 2.3 6.9 5.9\"/><path d=\"M3.7 3.7l16.7 16.7\"/>","user-pen":"<circle cx=\"9.8\" cy=\"8\" r=\"3.3\"/><path d=\"M3.8 19.1c0-3.3 2.7-5.6 6-5.6c1.1 0 2.1 0.3 3 0.7\"/><path d=\"M19.1 12.1l1.4 1.4l-4.7 4.7l-1.9 0.5l0.5-1.9Z\"/>","user-tag":"<circle cx=\"10\" cy=\"7.6\" r=\"3.3\"/><path d=\"M3.8 18.9c0-3.3 2.8-5.6 6.1-5.6c1.1 0 2.2 0.3 3.1 0.7\"/><path d=\"M14.2 14.2h3.7l2.4 2.4l-2.4 2.4h-3.7Z\"/><path d=\"M16.1 16.5h0\"/>","video":"<rect x=\"3.4\" y=\"6.4\" width=\"12.3\" height=\"11.3\" rx=\"1.9\"/><path d=\"M15.6 10.2l4.7-2.8v9.4l-4.7-2.8\"/>","volume":"<path d=\"M3.5 9.5h3.7L11.8 5.8v12.6l-4.7-3.7H3.5Z\"/><path d=\"M15.5 9.5a3.7 3.7 0 0 1 0 5.2M18.1 6.9a7.3 7.3 0 0 1 0 10.5\"/>","walk":"<circle cx=\"12.3\" cy=\"5.1\" r=\"1.7\"/><path d=\"M8.8 20.3l2.4-5.5l1.9 2.2V20.3M11 14.8l0.9-5.2l-2.7 1.4l-1.4 2.7M11.9 9.6l1.8 2.7l2.7 0.9\"/>","wallet":"<path d=\"M3.5 6.8A2.7 2.7 0 0 1 6.2 4.2H18.4v4.2M3.5 6.8V18a2.1 2.1 0 0 0 2.1 2.1h14.9V8.4H6.2A2.7 2.7 0 0 1 3.5 6.8Z\"/><path d=\"M16.2 14.2h0\"/>","water":"<path d=\"M3.5 10.2c2.1 0 2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8s2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8M3.5 15.6c2.1 0 2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8s2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8\"/>","wave":"<path d=\"M3.7 16.2c2.1 0 2.1-1.7 4.2-1.7s2.1 1.7 4.2 1.7s2.1-1.7 4.2-1.7s2.1 1.7 4.2 1.7\"/><path d=\"M6.5 12.7A5.6 5.6 0 0 1 16.4 9.4c-1.9-0.4-3.5 0.3-4 2\"/>","weight":"<circle cx=\"12\" cy=\"5.2\" r=\"2\"/><path d=\"M7.1 8.7h9.9l3 11.3H4.1Z\"/>","wifi":"<path d=\"M3.7 9.4a12.4 12.4 0 0 1 16.7 0M6.4 12.5a8.4 8.4 0 0 1 11.5 0M9.1 15.6a4.4 4.4 0 0 1 6.2 0M12.1 18.6h0\"/>","wind":"<path d=\"M3.5 9.9h10.4a2.8 2.8 0 1 0-2.8-2.8M3.5 13.7h14.2a2.8 2.8 0 1 1-2.8 2.8M3.5 17.5h6.6\"/>","window":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\"/><path d=\"M3.5 9h17\"/>","window-restore":"<rect x=\"3.5\" y=\"8.5\" width=\"12\" height=\"11\" rx=\"2\"/><path d=\"M8.5 8.5v-2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2h-3\"/>","wizard":"<path d=\"M3.6 20h16.7M6.3 20L9.9 9.1L15.7 3.3L14.1 10.1L17.8 20\"/><path d=\"M8.4 15.4h7.3\"/>","wrench":"<path d=\"M14.6 3.6a5.2 5.2 0 0 0-4.6 7.3L3.7 17.3V20.3h3.1l6.4-6.4a5.2 5.2 0 0 0 7.3-4.6l-3.2 1.2l-2.5-2.5l1.2-3.2Z\"/>","x-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m9 9 6 6M15 9l-6 6\"/>","zap":"<path d=\"M13.4 3.5L5.9 12.9h5.7l-0.9 7.6l7.6-9.4h-5.7Z\"/>"};
- const S = {"airplane":"<path d=\"M11.8 2.6c1.3 0 2 1.2 2 3V9.5l7.2 4.2v2.5L13.8 13.7v3.5l2 1.5v2.5L11.8 19.7l-3.7 1.2v-2.5l2-1.5v-3.5l-7.2 2.5v-2.5L9.8 9.5V5.3c0-1.8 0.7-3 2-3Z\"/>","alert":"<path fill-rule=\"evenodd\" d=\"M10.5 4.1a1.7 1.7 0 0 1 3 0l7.7 13.3a1.7 1.7 0 0 1-1.5 2.6H4.3a1.7 1.7 0 0 1-1.5-2.6ZM11 8.8h2v5.2h-2ZM12 15.2a1.2 1.2 0 1 1 0 2.4a1.2 1.2 0 0 1 0-2.4Z\"/>","alert-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.7 6.9h2.5v7.1h-2.5ZM12.9 15.3a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","archive":"<rect x=\"2.6\" y=\"3.4\" width=\"18.8\" height=\"5.4\" rx=\"1.2\"/><path fill-rule=\"evenodd\" d=\"M4.4 10h15.2v9.2a1.6 1.6 0 0 1-1.6 1.6H6a1.6 1.6 0 0 1-1.6-1.6ZM9.6 12.4v1.8h4.8v-1.8Z\"/>","bell":"<path d=\"M5.2 15.4V9.6a6.8 6.8 0 0 1 13.7 0v5.7l1.9 2.6H3.3ZM9.7 19.3h4.6a2.3 2.3 0 0 1-4.6 0Z\"/>","book":"<path d=\"M4.3 5.2A2.4 2.4 0 0 1 6.8 2.7h12.2v14.6H6.8a2.4 2.4 0 0 0-2.4 2.4Z\"/><path class=\"ln\" d=\"M7.2 20.2h11.2\"/>","book-open":"<path d=\"M10.9 5.8C8.8 4.4 6 3.8 2.5 4.5v14c3.5-0.6 6.3 0 8.4 1.5ZM13.1 5.8c2.1-1.5 5-2 8.4-1.4v14c-3.5-0.6-6.3 0-8.4 1.5Z\"/>","box":"<path d=\"M12 2.7l9.4 4.5l-9.4 4.5l-9.4-4.5ZM2.6 8.9l8.6 4.1v8.2l-8.6-4.3ZM21.4 8.9l-8.6 4.1v8.2l8.6-4.3Z\"/>","brain":"<path d=\"M8.9 3.8a3.2 3.2 0 0 0-3.2 3.1a3.1 3.1 0 0 0-2.2 5.3a3.1 3.1 0 0 0 2.2 5.2a3.2 3.2 0 0 0 5.7 1.3V5.6A2.3 2.3 0 0 0 8.9 3.8Z\"/><path d=\"M15.1 3.8a3.2 3.2 0 0 1 3.2 3.1a3.1 3.1 0 0 1 2.2 5.3a3.1 3.1 0 0 1-2.2 5.2a3.2 3.2 0 0 1-5.7 1.3V5.6A2.3 2.3 0 0 1 15.1 3.8Z\"/>","bridge":"<path d=\"M5.7 4.6h2.6v15.4H5.7ZM15.7 4.6h2.6v15.4h-2.6ZM3.4 14.6h17.2v2.8H3.4Z\"/><path class=\"ln\" d=\"M4 10c1.6 0 2.5-2.3 3-5c2.4 5.2 7.6 5.2 10 0c.5 2.7 1.4 5 3 5M12 10.9V15\"/>","briefcase":"<path d=\"M2.7 9.1a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.8H2.7ZM2.7 13.1h7.2v1.5h4.3v-1.5h7.2V17.9a2.5 2.5 0 0 1-2.5 2.5H5.2a2.5 2.5 0 0 1-2.5-2.5Z\"/><path class=\"ln\" d=\"M9.1 6.6V5.7A1.5 1.5 0 0 1 10.5 4.2h2.9A1.5 1.5 0 0 1 14.9 5.7v0.9\"/>","bug":"<path fill-rule=\"evenodd\" d=\"M12 7a4.8 4.8 0 0 1 4.8 4.8v3.4a4.8 4.8 0 0 1-9.6 0v-3.4A4.8 4.8 0 0 1 12 8Zm-0.7 4.4v7.4h1.4v-7.4Z\"/><path d=\"M9.4 5.8a2.6 2.6 0 0 1 5.2 0Z\"/><path class=\"ln\" d=\"M7.2 12.5H3.8M20.2 12.5h-3.4M7.6 9.4L5 7M16.4 9.4L19 7M7.6 16.6L5 19M16.4 16.6L19 19\"/>","burst":"<path d=\"M12.1 2.6l2 4.6l4.7-1.9l-1.9 4.7l4.6 2l-4.6 2l1.9 4.7l-4.7-1.9l-2 4.6l-2-4.6l-4.7 1.9l1.9-4.7L2.7 12l4.6-2l-1.9-4.7l4.7 1.9Z\"/>","calendar":"<path fill-rule=\"evenodd\" d=\"M4.1 8.1a2 2 0 0 1 2-2h11.8a2 2 0 0 1 2 2V19.5a2 2 0 0 1-2 2H6.1a2 2 0 0 1-2-2Zm2.2 3.9V19.3h11.4v-7.3Z\"/><path class=\"ln\" d=\"M9 3.9v3.5M15 3.9v3.5\"/>","camera":"<path fill-rule=\"evenodd\" d=\"M2.5 7.8a1.9 1.9 0 0 1 1.9-1.9h2.6L8.8 3.3h6.3l1.8 2.6h2.6A1.9 1.9 0 0 1 21.5 7.8v10.7a1.9 1.9 0 0 1-1.9 1.9H4.4A1.9 1.9 0 0 1 2.5 18.5Zm9.5 2a3.6 3.6 0 1 0 0 7.2a3.6 3.6 0 0 0 0-7.2Z\"/>","camera-flip":"<path fill-rule=\"evenodd\" d=\"M2.5 7.8a1.9 1.9 0 0 1 1.9-1.9h2.6L8.8 3.3h6.3l1.8 2.6h2.6A1.9 1.9 0 0 1 21.5 7.8v10.7a1.9 1.9 0 0 1-1.9 1.9H4.4A1.9 1.9 0 0 1 2.5 18.5ZM7.7 11.7A4.5 4.5 0 0 1 16.3 11.7L13.9 12.6A2 2 0 0 0 10.1 12.6ZM16.3 14.8A4.5 4.5 0 0 1 7.7 14.8L10.1 14A2 2 0 0 0 13.9 14Z\"/>","camera-off":"<path d=\"M8.5 4.6L9 3.8h6.1l1.7 2.5h2.5A1.8 1.8 0 0 1 21.2 8.1v9.1ZM3.8 7.3L16.7 20.2H4.8A1.8 1.8 0 0 1 3 18.4V8.1Z\"/><path class=\"ln\" d=\"M4 3.8l16.2 16.2\"/>","car":"<path fill-rule=\"evenodd\" d=\"M5.6 5.2h12.7l2.7 5.5H3ZM2.6 12.2h18.7v4.5H2.6ZM5.9 14.4a1.1 1.1 0 1 0 2.3 0a1.1 1.1 0 1 0-2.3 0ZM15.8 14.4a1.1 1.1 0 1 0 2.3 0a1.1 1.1 0 1 0-2.3 0ZM5 17.5h2.7v1.8H5ZM16.3 17.5h2.7v1.8h-2.7Z\"/>","card":"<path fill-rule=\"evenodd\" d=\"M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z\"/>","care":"<path d=\"M17 11s-4.1-2.4-4.1-5.4a2.3 2.3 0 0 1 4.1-1.6a2.3 2.3 0 0 1 4.1 1.6c0 2.9-4.1 5.4-4.1 5.4Z\"/><path class=\"ln\" d=\"M3.5 16.2h3.2l4.3 3.2h5.9a2.1 2.1 0 0 0 0-4.3H13.3M7.9 16.2l2.3-2.1h3.6\"/>","cart":"<path d=\"M6.3 7h15l-2.5 8.3H8.1Z\"/><circle cx=\"9.5\" cy=\"19.4\" r=\"1.6\"/><circle cx=\"17\" cy=\"19.4\" r=\"1.6\"/><path class=\"ln\" d=\"M3.8 4.8H5.8l2.3 10.5\"/>","cc":"<path fill-rule=\"evenodd\" d=\"M5.6 4.6h12.7a3 3 0 0 1 3 3v8.8a3 3 0 0 1-3 3h-12.7a3 3 0 0 1-3-3v-8.8a3 3 0 0 1 3-3ZM10.8 9.5A3.2 3.2 0 1 0 10.8 14.5L9.6 13A1.3 1.3 0 1 1 9.6 11ZM17.4 9.5A3.2 3.2 0 1 0 17.4 14.5L16.2 13A1.3 1.3 0 1 1 16.2 11Z\"/>","chart":"<path class=\"ln\" d=\"M4 3.5v16.2h16.2\"/><path d=\"M7 14.9L11 10.3l3 2.5l5.2-6.2V17.7H7Z\"/>","chat":"<path d=\"M2.7 4.7A1.8 1.8 0 0 1 4.5 3h15.2a1.8 1.8 0 0 1 1.8 1.8v10.9a1.8 1.8 0 0 1-1.8 1.8H8.3L2.7 21.8Z\"/>","chat-off":"<path d=\"M8.1 4.6H19a1.6 1.6 0 0 1 1.6 1.6v9.5a1.6 1.6 0 0 1-0.4 1ZM3.4 7.3L12.9 16.8H8.3l-4.9 4.6Z\"/><path class=\"ln\" d=\"M4 4.2l16 16\"/>","check-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM17.3 8.9l1.6 1.6l-7 7l-4.1-4.1l1.6-1.6l2.6 2.6Z\"/>","child":"<circle cx=\"12\" cy=\"5.2\" r=\"2.6\"/><path class=\"ln\" d=\"M7.7 10L12 8.6l4.3 1.4M12 8.6v5.8M9.1 20.1l2.9-5.8l2.9 5.8\"/>","chip":"<path fill-rule=\"evenodd\" d=\"M8.6 7.2h6.8a1.4 1.4 0 0 1 1.4 1.4v6.8a1.4 1.4 0 0 1-1.4 1.4H8.6a1.4 1.4 0 0 1-1.4-1.4V8.6a1.4 1.4 0 0 1 1.4-1.4Zm1.7 3.1v3.4h3.4v-3.4Z\"/><path class=\"ln\" d=\"M10.2 4v3.2M13.8 4v3.2M10.2 16.8V20M13.8 16.8V20M4 10.2h3.2M4 13.8h3.2M16.8 10.2H20M16.8 13.8H20\"/>","circle":"<circle cx=\"12\" cy=\"12\" r=\"9.5\"/>","city":"<path fill-rule=\"evenodd\" d=\"M5.4 7.7h4.6v10.9H5.4Zm1.9 2.2v1.4h1.2v-1.4Zm0 2.9v1.4h1.2v-1.4Z\"/><path fill-rule=\"evenodd\" d=\"M10.7 3.4h5.1v15.2h-5.1Zm1.7 2.4v1.4h1.4V5.8Zm0 2.9v1.4h1.4V8.7Zm0 2.9v1.4h1.4v-1.4Z\"/><path d=\"M16.5 11.3h2.2v7.4h-2.2Z\"/><path class=\"ln\" d=\"M3.9 18.6h16.1\"/>","clapper":"<path fill-rule=\"evenodd\" d=\"M2.6 5.9L19.9 2.7l0.9 4.3L3.2 8.7ZM7 5.1L9.2 8.1l2.6-0.2L9.6 4.6ZM12.6 4l2.2 3.6l2.6-0.3L15.2 3.6Z\"/><path d=\"M3.1 9.9h18.2v9a1.6 1.6 0 0 1-1.6 1.6h-15a1.6 1.6 0 0 1-1.6-1.6Z\"/>","clipboard":"<path fill-rule=\"evenodd\" d=\"M7.5 4.2h9a2 2 0 0 1 2 2v13.1a2 2 0 0 1-2 2H7.5a2 2 0 0 1-2-2V6.3a2 2 0 0 1 2-2ZM9.1 9.9v1.6h5.8v-1.6Zm0 3.9v1.6h3.9v-1.6Z\"/><rect x=\"8.7\" y=\"2.5\" width=\"6.6\" height=\"3.7\" rx=\"1.2\"/>","clipboard-check":"<path fill-rule=\"evenodd\" d=\"M7.5 4.2h9a2 2 0 0 1 2 2v13.1a2 2 0 0 1-2 2H7.5a2 2 0 0 1-2-2V6.3a2 2 0 0 1 2-2ZM8 13.1L11 16.1l5-5l-1.6-1.6l-3.4 3.4l-1.5-1.5Z\"/><rect x=\"8.7\" y=\"2.5\" width=\"6.6\" height=\"3.7\" rx=\"1.2\"/>","clock":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.9 6.6h2.3v5l3.3 2l-1.1 2l-4.3-2.7Z\"/>","cloud":"<path d=\"M7.9 18.2h9.6a4.2 4.2 0 0 0 0.6-8.3A6.1 6.1 0 0 0 6.5 9.2A4.5 4.5 0 0 0 7.9 18.2Z\"/>","cloud-off":"<path d=\"M10.1 5.7A6 6 0 0 1 17.9 9.8a4.1 4.1 0 0 1 2.8 6.5ZM6.6 9.1L15.5 18H7.9A4.4 4.4 0 0 1 6.4 9.2Z\"/><path class=\"ln\" d=\"M5.1 4.2l15 15\"/>","coin":"<path fill-rule=\"evenodd\" d=\"M13 2.6a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM12 5.8h2.1v1.2c1.1 0.2 2.1 0.8 2.6 1.7l-1.7 1c-0.3-0.6-1-1-1.8-1c-0.9 0-1.5 0.4-1.5 1s0.5 0.8 1.8 1.1c1.8 0.4 3.5 1 3.5 3.1c0 1.4-1 2.5-2.8 2.8V18h-2.1v-1.3c-1.2-0.2-2.3-0.9-2.8-2l1.7-1c0.4 0.7 1.1 1.1 2.1 1.1c1 0 1.6-0.4 1.6-1s-0.6-0.8-2-1.1c-1.7-0.4-3.4-1-3.4-3c0-1.3 1-2.4 2.7-2.7Z\"/>","columns":"<path d=\"M2.6 6.3a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v1.5H2.6ZM2.6 9.9h8.3v10.4H5.3a2.7 2.7 0 0 1-2.7-2.7ZM13 9.9h8.3v7.7a2.7 2.7 0 0 1-2.7 2.7H13Z\"/>","compass":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM17.4 7.7L14.9 14.1L8.5 16.5L11 10.1Z\"/>","compress":"<path d=\"M9.7 9.7H2.7L9.7 2.7ZM14.3 9.7h7l-7-7ZM9.7 14.3H2.7l7 7ZM14.3 14.3h7l-7 7Z\"/>","computer":"<rect x=\"2.6\" y=\"3.4\" width=\"18.8\" height=\"12.8\" rx=\"2.2\"/><path class=\"ln\" d=\"M8 20h8M12 16.2v3.8\"/>","contrast":"<path fill-rule=\"evenodd\" d=\"M12.4 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 2.1a7.2 7.2 0 0 1 0 14.4Z\"/>","cookie":"<path fill-rule=\"evenodd\" d=\"M21.6 12.4a9.4 9.4 0 1 1-10-10a3.4 3.4 0 0 0 4.4 3.9a3.4 3.4 0 0 0 5.5 5.9ZM7 9.1a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM10.9 14a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM6.5 15.7a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM14.8 15.7a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0Z\"/>","copy":"<rect x=\"7.5\" y=\"7.5\" width=\"13.8\" height=\"13.8\" rx=\"2.5\"/><path class=\"ln\" d=\"M16.4 7.5V5.9a2.1 2.1 0 0 0-2.1-2.1H5.9a2.1 2.1 0 0 0-2.1 2.1v8.5a2.1 2.1 0 0 0 2.1 2.1h1.7\"/>","couch":"<path d=\"M7.1 4.2h9.7A2.5 2.5 0 0 1 19.4 6.7v1.9a3.1 3.1 0 0 0-3.1 3.1v0.1H7.7v-0.1A3.1 3.1 0 0 0 4.6 8.7V6.7A2.5 2.5 0 0 1 7.1 4.2ZM2.7 11.6a2.5 2.5 0 0 1 5.1 0v1.9h8.6V11.6a2.5 2.5 0 0 1 5.1 0v5.5H2.7Z\"/><path class=\"ln\" d=\"M5.2 17.1v1.9M18.8 17.1v1.9\"/>","crown":"<path d=\"M2.6 7.3L7.4 11.5L12 4.1L16.6 11.5l4.8-4.2l-2 11.7H4.6Z\"/>","cubes":"<path d=\"M12 2.3L7.8 4.4v4.8l4.2 2.1l4.2-2.1V4.4ZM6.8 12.1L2.7 14.2v4.8l4.2 2.1l4.2-2.1v-4.8ZM17.2 12.1l-4.2 2.1v4.8l4.2 2.1l4.2-2.1v-4.8Z\"/>","database":"<ellipse cx=\"12\" cy=\"5.7\" rx=\"7.9\" ry=\"3.2\"/><path d=\"M4.1 7.5a7.9 3.2 0 0 0 15.9 0v4.3a7.9 3.2 0 0 1-15.9 0ZM4.1 13.4a7.9 3.2 0 0 0 15.9 0v4.7a7.9 3.2 0 0 1-15.9 0Z\"/>","dice":"<path fill-rule=\"evenodd\" d=\"M6.2 2.7h11.5a3.6 3.6 0 0 1 3.6 3.6v11.5a3.6 3.6 0 0 1-3.6 3.6H6.2a3.6 3.6 0 0 1-3.6-3.6V6.2a3.6 3.6 0 0 1 3.6-3.6ZM6.2 8.2a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM13.8 8.2a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM10 12a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM6.2 15.8a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM13.8 15.8a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0Z\"/>","dish":"<path d=\"M2.7 9.7A11.7 11.7 0 0 0 14.4 21.4Z\"/><path class=\"ln\" d=\"M8.8 15.3l4.9-4.9M14.2 4a5.8 5.8 0 0 1 5.8 5.8M14.2 8.1a1.8 1.8 0 0 1 1.8 1.8\"/>","donate":"<path fill-rule=\"evenodd\" d=\"M12 2.2a5.9 5.9 0 1 0 0 11.8a5.9 5.9 0 0 0 0-11.8Zm-0.8 3.4h1.7v5.1h-1.7ZM2.9 15h18.2v6H2.9ZM7.8 17.1v1.6h8.5V17.1Z\"/>","door":"<path fill-rule=\"evenodd\" d=\"M14.3 4.5L6.2 3v17.1l8.2-1.5ZM10.2 11.5a1 1 0 1 0 2 0a1 1 0 1 0-2 0Z\"/><path class=\"ln\" d=\"M15.5 5.3h1.4a0.9 0.9 0 0 1 0.9 0.9v13.3M15.5 19.5H20M4 19.5h2.1\"/>","download":"<path d=\"M10.6 2.3h2.5v7h4.7L11.9 15.4l-5.9-5.9h4.7Z\"/><path class=\"ln\" d=\"M4.5 19.7h14.9\"/>","drive":"<path fill-rule=\"evenodd\" d=\"M5.3 11.4h13.5a2.7 2.7 0 0 1 2.7 2.7v3a2.7 2.7 0 0 1-2.7 2.7H5.3a2.7 2.7 0 0 1-2.7-2.7v-3a2.7 2.7 0 0 1 2.7-2.7ZM16.8 14.4a1.1 1.1 0 1 1 0 2.3a1.1 1.1 0 0 1 0-2.3ZM13.7 14.4a1.1 1.1 0 1 1 0 2.3a1.1 1.1 0 0 1 0-2.3Z\"/><path class=\"ln\" d=\"M4.1 11.9L6.8 4.7h10.4l2.8 7.2\"/>","drop":"<path d=\"M12 2.2s7 7.4 7 12.6a7 7 0 0 1-13.9 0C5 9.6 12 2.2 12 2.2Z\"/>","eraser":"<path d=\"M14 3.9l6.1 6.1-5.2 5.2-6.1-6.1ZM7.4 10l6.2 6.2-3.2 3.2H6.1l-2.9-2.9a1.6 1.6 0 0 1 0-2.3Z\"/><path class=\"ln\" d=\"M13 19.4h7\"/>","expand":"<path d=\"M2.7 2.7h7L2.7 9.7ZM21.3 2.7h-7l7 7ZM2.7 21.3h7l-7-7ZM21.3 21.3h-7l7-7Z\"/>","eye":"<path fill-rule=\"evenodd\" d=\"M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/>","eye-off":"<path d=\"M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z\"/><path class=\"ln\" d=\"M4.6 4.6l14.8 14.8\"/>","fast-forward":"<path d=\"M3 5.5v13.1L12 12ZM12.7 5.5v13.1L21.8 12Z\"/>","file":"<path d=\"M5.8 2.4h7.6v5.2h5V21.2H5.8ZM15 2.7l3.1 3.3h-3.1Z\"/>","file-code":"<path fill-rule=\"evenodd\" d=\"M5.8 2.4h7.6v5.2h5V21.2H5.8ZM9.8 11l1.5 1.4l-1.6 1.7l1.6 1.7l-1.5 1.4l-2.9-3.1ZM14.4 11l-1.5 1.4l1.6 1.7l-1.6 1.7l1.5 1.4l2.9-3.1Z\"/><path d=\"M15 2.7l3.1 3.3h-3.1Z\"/>","film":"<path fill-rule=\"evenodd\" d=\"M4.8 3.6h14.4a2.3 2.3 0 0 1 2.3 2.3v12.3a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 18.2V5.8A2.3 2.3 0 0 1 4.8 3.6Zm3.8 2v12.9h6.8V5.5ZM4.4 6v2h2.1V6Zm0 5v1.8h2.1v-1.8Zm0 4.9v2h2.1v-2Zm13.1-10v2h2.1V6Zm0 5v1.8h2.1v-1.8Zm0 4.9v2h2.1v-2Z\"/>","finish":"<path d=\"M6.5 4.2h3.9v4.6H6.5ZM14.8 4.2h4a0.9 0.9 0 0 1 0.9 0.9v3.7h-4.9ZM10.5 8.6h4.5v4.6H10.5Z\"/><path class=\"ln\" d=\"M6 20.3V4.1\"/>","fire":"<path fill-rule=\"evenodd\" d=\"M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z\"/>","fish":"<path fill-rule=\"evenodd\" d=\"M7.6 12c2.1-3.6 4.8-5.4 7.9-5.4 2.9 0 5 2.2 6.1 5.4-1.1 3.2-3.2 5.4-6.1 5.4-3.1 0-5.8-1.8-7.9-5.4ZM15.7 10.6a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z\"/><path d=\"M8.4 12 2.9 7.4v9.2Z\"/>","flag":"<path class=\"ln\" d=\"M7.2 20.5V4.3\"/><path d=\"M7.8 4.1h10.9l-2 4.1l2 4.1H7.8Z\"/>","focus":"<circle cx=\"12\" cy=\"12\" r=\"3.6\"/><path class=\"ln\" d=\"M3.8 9V6.1A2.3 2.3 0 0 1 6.1 3.8H9M15 3.8h2.9A2.3 2.3 0 0 1 20.2 6.1V9M20.2 15v2.9a2.3 2.3 0 0 1-2.3 2.3H15M9 20.2H6.1A2.3 2.3 0 0 1 3.8 17.9V15\"/>","folder":"<path d=\"M2.7 6.4a2.1 2.1 0 0 1 2.1-2.1h4.4l2.1 2.1h8.1a2.1 2.1 0 0 1 2.1 2.1v8.7a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1Z\"/>","folder-tree":"<path d=\"M9.6 5h4l1 1.5h6.4v5.3H9.6ZM9.6 14.3h4l1 1.5h6.4v5.3H9.6Z\"/><path class=\"ln\" d=\"M4.1 3.6v13.2a1 1 0 0 0 1 1H9.6M4.1 8.8H9.6\"/>","food":"<path d=\"M4.7 3.3h1.5v4.7h0.6V3.3h1.4v4.7h0.6V3.3h1.5v4.9A2.9 2.9 0 0 1 8.6 10.8V21.7H6.5V10.8a2.9 2.9 0 0 1-1.8-2.7ZM18.9 21.7h-2.3v-7.4h-3V10.6c0-3.9 1.7-6.6 5.2-7.7Z\"/>","game":"<path fill-rule=\"evenodd\" d=\"M7.6 6.3h8.8a5.8 5.8 0 0 1 0 11.5H7.6a5.8 5.8 0 0 1 0-11.5Zm-1.4 3.7v1.6H4.7v1.8h1.6v1.6H7.9v-1.6h1.6v-1.8H7.9v-1.6Zm9.2 1a1.2 1.2 0 1 0 0 2.3a1.2 1.2 0 0 0 0-2.3Zm2.5 1.6a1.2 1.2 0 1 0 0 2.3a1.2 1.2 0 0 0 0-2.3Z\"/>","gauge":"<path fill-rule=\"evenodd\" d=\"M3.7 18A9.4 9.4 0 1 1 19.4 19.6ZM15 8.6l-2.2 5.6l-2.1 0.3l-0.4-2.1Z\"/>","gavel":"<path d=\"M11.3 5.5L5.5 11.3l6.1 6.1l5.8-5.8Z\"/><path class=\"ln\" d=\"M13.7 4.2l5 5M3.8 19.1l5.7-5.7M13.7 19.1h6.3\"/>","gear":"<path fill-rule=\"evenodd\" d=\"M18.2 14.6a1.4 1.4 0 0 0 0.3 1.7l0.1 0.1a1.7 1.7 0 1 1-2.7 2.7l-0.1-0.1a1.4 1.4 0 0 0-1.7-0.3a1.4 1.4 0 0 0-0.9 1.4V19.6a1.7 1.7 0 1 1-3.8 0v-0.1a1.4 1.4 0 0 0-1-1.4a1.4 1.4 0 0 0-1.7 0.3l-0.1 0.1a1.7 1.7 0 1 1-2.7-2.7l0.1-0.1a1.4 1.4 0 0 0 0.3-1.7a1.4 1.4 0 0 0-1.4-0.9H4.6a1.7 1.7 0 1 1 0-3.8h0.1a1.4 1.4 0 0 0 1.4-1a1.4 1.4 0 0 0-0.3-1.7l-0.1-0.1a1.7 1.7 0 1 1 2.7-2.7l0.1 0.1a1.4 1.4 0 0 0 1.7 0.3H9.6a1.4 1.4 0 0 0 0.9-1.4V4.6a1.7 1.7 0 1 1 3.8 0v0.1a1.4 1.4 0 0 0 0.9 1.4a1.4 1.4 0 0 0 1.7-0.3l0.1-0.1a1.7 1.7 0 1 1 2.7 2.7l-0.1 0.1a1.4 1.4 0 0 0-0.3 1.7V9.6a1.4 1.4 0 0 0 1.4 0.9H19.6a1.7 1.7 0 1 1 0 3.8h-0.1a1.4 1.4 0 0 0-1.4 0.9ZM12.1 9.3a2.8 2.8 0 1 0 0 6.5a2.8 2.8 0 0 0 0-6.5Z\"/>","gem":"<path d=\"M6.4 3.9h11.2l3.8 5.3l-9.4 11.6L2.6 9.2Z\"/>","ghost":"<path fill-rule=\"evenodd\" d=\"M3.4 21.3V9.9a8.7 8.7 0 0 1 17.2 0v11.5l-2.9-2.1l-2.9 2.1l-2.9-2.1l-2.9 2.1l-2.9-2.1ZM8.8 7.8a1.6 1.6 0 1 0 0 3.1a1.6 1.6 0 0 0 0-3.1Zm6.2 0a1.6 1.6 0 1 0 0 3.1a1.6 1.6 0 0 0 0-3.1Z\"/>","gift":"<path d=\"M3.1 8.6h17.7v3.3H3.1ZM4.4 12.9h6.6v8.2H5.4a1 1 0 0 1-1-1ZM13 12.9h6.6v7.2a1 1 0 0 1-1 1H13Z\"/><path class=\"ln\" d=\"M12 8.6c-1.5-3.1-5.1-4.1-5.1-1.5S12 8.6 12 8.6s5.1-1 5.1-3.6s-3.6-1.5-5.1 3.6\"/>","globe":"<path d=\"M2.6 11.1A9.5 9.5 0 0 1 12 2.6a4.5 9.5 0 0 0-4.5 8.5ZM21.4 11.1A9.5 9.5 0 0 0 12 2.6a4.5 9.5 0 0 1 4.5 8.5ZM2.6 12.9A9.5 9.5 0 0 0 12 21.5a4.5 9.5 0 0 1-4.5-8.5ZM21.4 12.9A9.5 9.5 0 0 1 12 21.5a4.5 9.5 0 0 0 4.5-8.5ZM12 2.6a2.7 9.5 0 0 0-2.7 8.5h5.3A2.7 9.5 0 0 0 12 2.6ZM12 21.5a2.7 9.5 0 0 1-2.7-8.5h5.3A2.7 9.5 0 0 1 12 21.5Z\"/>","grid":"<rect x=\"2.7\" y=\"2.7\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"13.3\" y=\"2.7\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"2.7\" y=\"13.3\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"13.3\" y=\"13.3\" width=\"8\" height=\"8\" rx=\"2.2\"/>","group":"<rect x=\"6.9\" y=\"6.8\" width=\"6.4\" height=\"4.8\" rx=\"1.1\"/><rect x=\"10.8\" y=\"12.5\" width=\"6.4\" height=\"4.6\" rx=\"1.1\"/><path class=\"ln\" d=\"M4 7.6V4h3.6M16.5 4h3.6v3.6M20 16.4v3.6h-3.6M7.6 20H4v-3.6\"/>","hammer":"<path d=\"M13.1 2.5l7.5 7.5l-3.7 3.7l-7.5-7.5ZM12.9 8.9L3.7 18.1a2.1 2.1 0 0 0 2.9 2.9l9.2-9.2Z\"/>","hand":"<path d=\"M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z\"/>","headphones":"<path class=\"ln\" d=\"M4 14.5V12a8 8 0 0 1 16 0v2.5\"/><rect x=\"2.6\" y=\"13.4\" width=\"5.4\" height=\"7.6\" rx=\"1.8\"/><rect x=\"16\" y=\"13.4\" width=\"5.4\" height=\"7.6\" rx=\"1.8\"/>","heart":"<path d=\"M12 21.6s-9.3-5.7-9.3-13a5.3 5.3 0 0 1 9.3-3.6a5.3 5.3 0 0 1 9.3 3.6c0 7.4-9.3 13-9.3 13Z\"/>","heart-broken":"<path fill-rule=\"evenodd\" d=\"M12 21.6s-9.3-5.7-9.3-13a5.3 5.3 0 0 1 9.3-3.6a5.3 5.3 0 0 1 9.3 3.6c0 7.4-9.3 13-9.3 13ZM10.9 5.9l2.7 0.6l-1.4 2.7l3.6 2.5l-2.6 5.9l-2.5-1.1l1.5-3.7l-3.7-2.5Z\"/>","help":"<path fill-rule=\"evenodd\" d=\"M13 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM9.3 9.4A3.7 3.7 0 1 1 13.9 12.8v1.6h-2.1V10.9h1a1.6 1.6 0 1 0-1.6-1.6ZM13 15.8a1.3 1.3 0 1 1 0 2.6a1.3 1.3 0 0 1 0-2.6Z\"/>","history":"<path d=\"M5.8 5.8A9.1 9.1 0 1 1 3.2 12.2h3a6.1 6.1 0 1 0 1.8-4.3ZM2.5 2.7v7.2h7.2ZM11.2 8.1h2.2v3.7l2.7 1.6l-1.1 1.8l-3.8-2.3Z\"/>","home":"<path d=\"M2.7 10.4L12 2.3l9.3 8.1v9.5a1.1 1.1 0 0 1-1.1 1.1h-5.6v-6.9h-5.4v6.9H3.8a1.1 1.1 0 0 1-1.1-1.1Z\"/>","hot-tub":"<circle cx=\"8.2\" cy=\"5.4\" r=\"2.4\"/><path d=\"M2.6 10.9h18.8v4.2a5.1 5.1 0 0 1-5.1 5.1h-8.5a5.1 5.1 0 0 1-5.1-5.1Z\"/><path class=\"ln\" d=\"M6.3 10.9v-0.6A2.4 2.4 0 0 1 8.7 8H9.2M13.5 9.4c0.8-0.9-0.8-1.9 0-2.8M17.3 9.4c0.8-0.9-0.8-1.9 0-2.8\"/>","id":"<path fill-rule=\"evenodd\" d=\"M4.8 4.6h14.4a2.3 2.3 0 0 1 2.3 2.3v10.3a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 17.2V6.9A2.3 2.3 0 0 1 4.8 4.6Zm4.1 4.2a2.2 2.2 0 1 0 0 4.3a2.2 2.2 0 0 0 0-4.3Zm-3.2 7.7h6.4c-0.6-1.7-1.8-2.7-3.2-2.7s-2.6 0.9-3.2 2.7Zm8.8-7.2v1.5h4V9.4Zm0 3.6v1.5h4v-1.5Z\"/>","idea":"<path d=\"M8.3 14.9A6.5 6.5 0 1 1 15.7 14.9c-0.7 0.6-1.3 1.3-1.4 2.2H9.7c-0.1-0.9-0.7-1.6-1.4-2.2Z\"/><path class=\"ln\" d=\"M9.6 20.5h4.8\"/>","image":"<path fill-rule=\"evenodd\" d=\"M2.8 6.1a2.7 2.7 0 0 1 2.7-2.7h13.3A2.7 2.7 0 0 1 21.5 6.1v12.3a2.7 2.7 0 0 1-2.7 2.7H5.4A2.7 2.7 0 0 1 2.8 18.4Zm6.2 2.2a2 2 0 1 0 0 3.9a2 2 0 0 0 0-3.9Zm7.5 3.5l-8.3 7.8h10.7a1.5 1.5 0 0 0 1.5-1.5v-3.1Z\"/>","inbox":"<path fill-rule=\"evenodd\" d=\"M2.7 12.4L5.2 3.7h13.6l2.5 8.8V17.9a1.6 1.6 0 0 1-1.6 1.6H4.2A1.6 1.6 0 0 1 2.7 17.9ZM6.4 5.6L4.6 11.5h3.8l1.5 2.4h4.3l1.5-2.4h3.8L17.6 5.6Z\"/>","info":"<path fill-rule=\"evenodd\" d=\"M12.9 2.6a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.7 10.5h2.5V16.9h-2.5ZM12.9 6.4a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","invite":"<circle cx=\"8.8\" cy=\"7.7\" r=\"3.2\"/><path d=\"M2.9 19.2c0-3.4 2.7-5.8 5.8-5.8s5.8 2.4 5.8 5.8Z\"/><path class=\"ln\" d=\"M17.6 7.8v5.3M15 10.5h5.3\"/>","key":"<path fill-rule=\"evenodd\" d=\"M8.3 10.1a5.4 5.4 0 1 1 0 10.9a5.4 5.4 0 0 1 0-10.9Zm0 3.6a1.9 1.9 0 1 0 0 3.8a1.9 1.9 0 0 0 0-3.8Z\"/><path class=\"ln\" d=\"M11.7 12.2l8.7-8.7M16.7 7.2l3.1 3.1M14.4 9.5l2.1 2.1\"/>","keyboard":"<path fill-rule=\"evenodd\" d=\"M4.8 5.7h14.4A2.3 2.3 0 0 1 21.5 8v8a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 16V8a2.3 2.3 0 0 1 2.3-2.3ZM5.3 9.1h1.9v1.9H5.3ZM8.2 9.1h1.9v1.9H8.2ZM11 9.1h1.9v1.9h-1.9ZM13.9 9.1h1.9v1.9h-1.9ZM16.8 9.1h1.9v1.9h-1.9ZM7.8 13.3h8.4v1.7H7.8Z\"/>","laugh":"<path fill-rule=\"evenodd\" d=\"M13 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM7.9 8.1l3.5 1.7l-3.5 1.7l-0.7-1.4l0.7-0.4l-0.7-0.4ZM18 8.1l-3.5 1.7l3.5 1.7l0.7-1.4l-0.7-0.4l0.7-0.4ZM8.5 13.5h8.9a4.4 4.4 0 0 1-8.9 0Z\"/>","layers":"<path d=\"M12 4.3l8.6 5l-8.6 5l-8.6-5Z\"/><path class=\"ln\" d=\"M3.9 13.9l8.1 4.5l8.1-4.5\"/>","leaf":"<path fill-rule=\"evenodd\" d=\"M5.4 18.6c0-8.9 5.2-14.2 15.7-15.7c-1 10.4-6.3 15.7-15.7 15.7Zm3.1-2L16.8 7.1l-9.5 8.5Z\"/><path class=\"ln\" d=\"M3.7 20.3L6 18\"/>","lifebuoy":"<path fill-rule=\"evenodd\" d=\"M13.1 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 5.3a4.1 4.1 0 1 1 0 8.2a4.1 4.1 0 0 1 0-8.2ZM15.5 16.2L18.4 19.1L20.2 17.3L17.2 14.3ZM10.8 16.2L7.9 19.1L6 17.3L9 14.3ZM15.5 7.8L18.4 4.9L20.2 6.7L17.2 9.7ZM10.8 7.8L7.9 4.9L6 6.7L9 9.7Z\"/>","live":"<circle cx=\"12\" cy=\"12\" r=\"2.5\"/><path class=\"ln\" d=\"M8.5 8.5a4.9 4.9 0 0 0 0 6.9M15.5 8.5a4.9 4.9 0 0 1 0 6.9M6.2 6.2a8.2 8.2 0 0 0 0 11.5M17.8 6.2a8.2 8.2 0 0 1 0 11.5\"/>","lock":"<path d=\"M4.6 11.1a1.6 1.6 0 0 1 1.6-1.6h11.5a1.6 1.6 0 0 1 1.6 1.6v8.4a1.6 1.6 0 0 1-1.6 1.6H6.2A1.6 1.6 0 0 1 4.6 19.6Z\"/><path class=\"ln\" d=\"M7.9 9.4V6.8a4.1 4.1 0 0 1 8 0V9.4\"/>","mail":"<path d=\"M2.5 7.3v-0.4A2.3 2.3 0 0 1 4.8 4.6h14.4A2.3 2.3 0 0 1 21.5 6.9v0.4l-8.7 5.6a1.6 1.6 0 0 1-1.7 0ZM2.5 9.4v7.6A2.3 2.3 0 0 0 4.8 19.4h14.4a2.3 2.3 0 0 0 2.3-2.3V9.4l-8 5.2a2.7 2.7 0 0 1-3 0Z\"/>","map":"<path d=\"M2.6 6.1 8.3 4.2v14l-5.7 1.9ZM9.7 4.2l4.6 1.6v14l-4.6-1.6ZM15.7 5.8l5.7-1.9v14l-5.7 1.9Z\"/>","mask":"<path fill-rule=\"evenodd\" d=\"M2.7 6.1c3.3 1.4 6.4 2.1 9.4 2.1s6.1-0.6 9.4-2.1c0 7.1-2.9 11.7-5.8 11.7c-1.5 0-2.2-1.5-3.6-1.5s-2.1 1.5-3.6 1.5c-2.9 0-5.8-4.6-5.8-11.7ZM6.8 11.6a1.6 1.1 0 1 0 3.3 0a1.6 1.1 0 1 0-3.3 0ZM14 11.6a1.6 1.1 0 1 0 3.3 0a1.6 1.1 0 1 0-3.3 0Z\"/>","medical":"<path fill-rule=\"evenodd\" d=\"M5.3 6.3h13.5a2.7 2.7 0 0 1 2.7 2.7v8.7a2.7 2.7 0 0 1-2.7 2.7H5.3a2.7 2.7 0 0 1-2.7-2.7V9a2.7 2.7 0 0 1 2.7-2.7ZM10.9 10h2.3v2.2h2.2v2.3h-2.2V16.7h-2.3v-2.2H8.7v-2.3h2.2Z\"/><path class=\"ln\" d=\"M9.2 6.3V5.3a0.9 0.9 0 0 1 0.9-0.9h3.8a0.9 0.9 0 0 1 0.9 0.9v1\"/>","megaphone":"<path d=\"M2.7 9.1a1.1 1.1 0 0 1 1.1-1.1h2.7l9.7-4.8v16.1l-9.7-4.8H3.8A1.1 1.1 0 0 1 2.7 13.2Z\"/><path class=\"ln\" d=\"M6.6 14.5l1.2 5M18.8 8.5a3.4 3.4 0 0 1 0 5.4\"/>","members":"<circle cx=\"9.1\" cy=\"7.1\" r=\"3.5\"/><path d=\"M2.6 19.6c0-3.7 2.9-6.3 6.4-6.3s6.4 2.6 6.4 6.3Z\"/><circle cx=\"16.5\" cy=\"6.6\" r=\"2.8\"/><path d=\"M16.7 12.4c2.8 0.4 4.7 2.7 4.7 6.2V19.6h-4.3c0-2.8-1-5.1-2.7-6.5Z\"/>","mic":"<path d=\"M8.9 5.8a3.1 3.1 0 0 1 6.2 0V10.8a3.1 3.1 0 0 1-6.2 0Z\"/><path class=\"ln\" d=\"M5.9 10.8a6.1 6.1 0 0 0 12.3 0M12 16.9V20.2\"/>","mic-off":"<path d=\"M9 5.4A3.1 3.1 0 0 1 15.2 5.8V10.7a3.1 3.1 0 0 1-0.1 0.8Z\"/><path class=\"ln\" d=\"M5.4 10.7a6.6 6.6 0 0 0 11 5M18.7 10.7c0 0.8-0.1 1.5-0.4 2.2M12.1 17.3v2.8M4.5 4.1l15.1 15.1\"/>","minus-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM7.9 10.9v2.5h10.2v-2.5Z\"/>","money":"<path fill-rule=\"evenodd\" d=\"M4.8 5.7h14.4a2.1 2.1 0 0 1 2.1 2.1v8.4a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1V7.8a2.1 2.1 0 0 1 2.1-2.1ZM12 8.9a3.1 3.1 0 1 0 0 6.3a3.1 3.1 0 0 0 0-6.3ZM6.3 8.7a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Zm11.4 4.6a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Z\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\"/>","moon":"<path d=\"M21.7 14.6A9.7 9.7 0 1 1 9.4 2.3a8 8 0 0 0 12.3 12.3Z\"/>","more":"<circle cx=\"4.8\" cy=\"12\" r=\"2.2\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><circle cx=\"19.2\" cy=\"12\" r=\"2.2\"/>","mountain":"<path d=\"M2.8 18.1L9.2 5.3l4.1 7.1L16.1 8.9L21.5 18.1Z\"/>","mug":"<path d=\"M3.8 8.9h12.2v7.6a4.6 4.6 0 0 1-4.6 4.6h-3a4.6 4.6 0 0 1-4.6-4.6Z\"/><path class=\"ln\" d=\"M16 11H16.9a2.5 2.5 0 0 1 0 5h-0.9M7.9 3.7c-0.8 1 0.8 2 0 3M11.4 3.7c-0.8 1 0.8 2 0 3\"/>","music":"<path d=\"M7.6 5.4l13.3-2.5v3.5l-13.3 2.5Z\"/><path class=\"ln\" d=\"M8.8 17.9V6.5M19.7 15.6V4.2\"/><circle cx=\"5.5\" cy=\"17.9\" r=\"3.2\"/><circle cx=\"16.7\" cy=\"15.6\" r=\"3.2\"/>","mute":"<path d=\"M2.9 8.8h4l5.5-4.2v14.8l-5.5-4.2H2.9Z\"/><path class=\"ln\" d=\"M15.5 9.6l4.7 4.7M20.3 9.6l-4.7 4.7\"/>","news":"<path fill-rule=\"evenodd\" d=\"M2.8 2.6h14.2v15.2a2.2 2.2 0 0 0 2.2 2.2H5.1A2.2 2.2 0 0 1 2.8 18.9ZM6.6 6.6h6.8v1.7H6.6Zm0 3.7h6.8v1.7H6.6Zm0 3.7h4v1.7H6.6Z\"/><path class=\"ln\" d=\"M17.1 7.7H19.8V17.9a2.1 2.1 0 0 1-2.1 2.1\"/>","nodes":"<circle cx=\"12\" cy=\"5.2\" r=\"3\"/><circle cx=\"5.6\" cy=\"18\" r=\"3\"/><circle cx=\"18.4\" cy=\"18\" r=\"3\"/><path class=\"ln\" d=\"M10.9 7.6L6.8 15.5M13.1 7.6l4.1 7.9M8.4 18h7.1\"/>","palette":"<path fill-rule=\"evenodd\" d=\"M12.1 2.7a9.4 9.4 0 1 0 0 18.8c1.3 0 2-0.9 2-1.9c0-1.2-1-1.5-1-2.5s0.8-1.6 2-1.6H17.3a4.4 4.4 0 0 0 4.4-4.4C21.7 6.7 17.4 2.7 12.1 2.7ZM7.8 9.7a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Zm2.5-3.7a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Zm4.6 0a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","parking":"<path fill-rule=\"evenodd\" d=\"M6.2 2.6h11.6a3.6 3.6 0 0 1 3.6 3.6v11.6a3.6 3.6 0 0 1-3.6 3.6H6.2a3.6 3.6 0 0 1-3.6-3.6V6.2a3.6 3.6 0 0 1 3.6-3.6ZM8.4 18V6H13a4 4 0 0 1 0 8h-2.4v4ZM10.6 8.2v3.6H13a1.8 1.8 0 0 0 0-3.6Z\"/>","pause":"<rect x=\"4.8\" y=\"2.6\" width=\"5.1\" height=\"18.8\" rx=\"1.5\"/><rect x=\"14.2\" y=\"2.6\" width=\"5.1\" height=\"18.8\" rx=\"1.5\"/>","paw":"<path d=\"M6.9 18.5c0-3.5 2.2-6.3 5.1-6.3s5.1 2.8 5.1 6.3c0 1.8-1.3 2.9-2.9 2.9c-0.9 0-1.5-0.6-2.2-0.6s-1.3 0.6-2.2 0.6c-1.6 0-2.9-1.1-2.9-2.9Z\"/><circle cx=\"5.1\" cy=\"10.2\" r=\"2.6\"/><circle cx=\"9.1\" cy=\"5.1\" r=\"2.6\"/><circle cx=\"14.9\" cy=\"5.1\" r=\"2.6\"/><circle cx=\"18.9\" cy=\"10.2\" r=\"2.6\"/>","pencil":"<path d=\"M15.6 3.1a2.2 2.2 0 0 1 3.2 3.2L6.9 18.1l-4.5 1.2l1.2-4.5Z\"/><path class=\"ln\" d=\"M11.8 19.7H20.1\"/>","phone":"<path d=\"M5.1 2.4h4.9l2.4 6l-2.7 1.6a10.7 10.7 0 0 0 4.2 4.2l1.6-2.7l6 2.4v4.9a2.3 2.3 0 0 1-2.3 2.3A17.3 17.3 0 0 1 2.8 4.6a2.3 2.3 0 0 1 2.3-2.3Z\"/>","piggy":"<path fill-rule=\"evenodd\" d=\"M2.6 11.4c0-3.6 3.7-6.5 8.7-6.5c1.4 0 2.7 0.2 3.9 0.7L18.3 3.8v3.7c0.9 0.8 1.5 1.7 1.7 2.8h1.5v3.8H20c-0.5 1.1-1.4 2-2.6 2.6V20.1h-3.3v-2.2c-0.9 0.2-1.8 0.3-2.8 0.3c-0.9 0-1.7-0.1-2.6-0.3v2.2h-3.3v-3.3C3.7 15.5 2.6 13.6 2.6 11.4ZM14.5 9.8a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0ZM8.3 6.8v1.5h3.7V6.8Z\"/>","pin":"<path fill-rule=\"evenodd\" d=\"M12 2.8a7.1 7.1 0 0 0-7.1 7.1c0 5.5 7.1 11.8 7.1 11.8s7.1-6.3 7.1-11.8A7.1 7.1 0 0 0 12 2.8Zm0 4.5a2.5 2.5 0 1 1 0 5.1a2.5 2.5 0 0 1 0-5.1Z\"/>","plane":"<path d=\"M21.2 2.9L2.4 10.7l6.9 3.2ZM21.2 2.9l-11 12l3.2 6.9Z\"/>","play":"<path d=\"M5.1 3.5v17a0.9 0.9 0 0 0 1.3 0.8l12.8-8.5a0.9 0.9 0 0 0 0-1.6L6.5 2.7a0.9 0.9 0 0 0-1.3 0.8Z\"/>","plug":"<path d=\"M6.5 8h10.9v3.3a5.4 5.4 0 0 1-10.9 0Z\"/><path class=\"ln\" d=\"M9.2 4.2v3.8M14.6 4.2v3.8M11.9 16.8v3.5\"/>","plus-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm-1.2 4.2h2.5v3.8H18v2.5h-3.8V17.1h-2.5v-3.8H7.9v-2.5h3.8Z\"/>","print":"<path d=\"M6.2 2.6h11.5v4.4H6.2ZM2.6 11a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v4.1a2.7 2.7 0 0 1-2.7 2.7h-0.3v-4.5H5.6v4.5h-0.3A2.7 2.7 0 0 1 2.6 15.1ZM7.1 14.7h9.9v6.7H7.1Z\"/>","puzzle":"<path d=\"M2.8 5.4h5a2.9 2.9 0 1 1 5.8 0h5v5a2.9 2.9 0 1 1 0 5.8v5h-5a2.9 2.9 0 1 0-5.8 0H2.8v-5a2.9 2.9 0 1 0 0-5.8Z\"/>","radio":"<path fill-rule=\"evenodd\" d=\"M5.2 7.8h13.6a2.5 2.5 0 0 1 2.5 2.5v7.8a2.5 2.5 0 0 1-2.5 2.5H5.2A2.5 2.5 0 0 1 2.6 18.1v-7.8A2.5 2.5 0 0 1 5.2 7.8ZM12.9 14.2a2.5 2.5 0 1 0 5.1 0a2.5 2.5 0 1 0-5.1 0ZM6.1 11.6v2h4.7v-2ZM6.1 15v2h4.7v-2Z\"/><path class=\"ln\" d=\"M7.1 7.8L16.9 4\"/>","ranking":"<path d=\"M3.5 13.7h4.9V9.9h7.1v5.7h4.9v5.4H3.5ZM12 2.2l1 2l2.2 0.3l-1.6 1.6l0.4 2.2L12 7.5l-2 1l0.4-2.2l-1.6-1.6l2.2-0.3Z\"/>","record":"<path fill-rule=\"evenodd\" d=\"M13.2 2.7a9.3 9.3 0 1 0 0 18.5a9.3 9.3 0 0 0 0-18.5Zm0 3.3a6 6 0 1 1 0 11.9a6 6 0 0 1 0-11.9Z\"/><circle cx=\"13.2\" cy=\"12\" r=\"3.7\"/>","restroom":"<circle cx=\"7.2\" cy=\"5.1\" r=\"1.8\"/><circle cx=\"16.2\" cy=\"5.1\" r=\"1.8\"/><path d=\"M6 9h1.8a1.5 1.5 0 0 1 1.5 1.5v4.7H8.6v5H5.5v-5H4.7v-4.7A1.5 1.5 0 0 1 6 9Z\"/><path d=\"M15.7 9.4h1.1a0.9 0.9 0 0 1 0.9 0.7l1.9 6.3H17.4v3.6h-2.3v-3.6h-2.1l1.9-6.3a0.9 0.9 0 0 1 0.9-0.7Z\"/><path class=\"ln\" d=\"M11.6 3.7v16.3\"/>","retry":"<path class=\"ln\" d=\"M4 12a8 8 0 0 1 13.4-5.9M20 12a8 8 0 0 1-13.4 5.9\"/><path d=\"M21.3 2.8v7h-7ZM2.7 21.2v-7h7Z\"/>","rewind":"<path d=\"M21 5.5v13.1L12 12ZM11.3 5.5v13.1L2.2 12Z\"/>","robot":"<path fill-rule=\"evenodd\" d=\"M8.5 8.7h6.9a3.1 3.1 0 0 1 3.1 3.1v4.3A3.1 3.1 0 0 1 15.5 19.3H8.5A3.1 3.1 0 0 1 5.4 16.2v-4.3A3.1 3.1 0 0 1 8.5 8.7Zm0.9 3.8a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4Zm5.2 0a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4ZM9.7 16v1.3h4.5v-1.3Z\"/><path class=\"ln\" d=\"M12 5.3v3.5M3.9 13.1v2.8M20.2 13.1v2.8\"/>","rocket":"<path fill-rule=\"evenodd\" d=\"M11.9 16.6L7.4 12.2C9.1 6.1 13.6 2.9 21.1 2.9c0 7.5-3.2 12-9.2 13.7ZM13.6 8.7a1.7 1.7 0 1 0 3.5 0a1.7 1.7 0 1 0-3.5 0Z\"/><path d=\"M3.7 12.2L6.8 7.5h3.5L6.6 12.6ZM11.4 17.4L11.9 20.3l4.6-3.3v-3.5ZM6.3 17.7c-2 0-3.9 2-3.9 3.9c2 0 3.9-2 3.9-3.9Z\"/>","save":"<path fill-rule=\"evenodd\" d=\"M4.4 2.7h12.4l3.5 3.5V20.8a0.7 0.7 0 0 1-0.7 0.7H4.4a0.7 0.7 0 0 1-0.7-0.7V3.4a0.7 0.7 0 0 1 0.7-0.7Zm3.4 1.4v4.9h7.4V4.1ZM7.2 13.6v6.4h9.6v-6.4Z\"/>","scissors":"<path fill-rule=\"evenodd\" d=\"M6.2 3.8a3.2 3.2 0 1 1 0 6.5a3.2 3.2 0 0 1 0-6.5Zm0 2a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4ZM6.2 13.7a3.2 3.2 0 1 1 0 6.5a3.2 3.2 0 0 1 0-6.5Zm0 2a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4Z\"/><path class=\"ln\" d=\"M8.7 8.8L20.4 18.1M8.7 15.2L20.4 5.9\"/>","search":"<path fill-rule=\"evenodd\" d=\"M10.6 3a7.7 7.7 0 1 1 0 15.4a7.7 7.7 0 0 1 0-15.4Zm0 3.2a4.5 4.5 0 1 0 0 9.2a4.5 4.5 0 0 0 0-9.2Z\"/><path class=\"ln\" d=\"M16.3 16.4l3.8 3.8\"/>","seedling":"<path d=\"M12.4 10.8C12.4 6.1 9.5 2.9 4 2.9c0 4.9 3 7.8 8.4 7.8ZM11.6 13.4c0-4.7 3-7.8 8.4-7.8c0 4.9-3 7.8-8.4 7.8Z\"/><path class=\"ln\" d=\"M12 20.4V12.5\"/>","server":"<path fill-rule=\"evenodd\" d=\"M5.2 2.6h13.4a2.7 2.7 0 0 1 2.7 2.7v3.4a2.7 2.7 0 0 1-2.7 2.7H5.2A2.7 2.7 0 0 1 2.5 8.6V5.3A2.7 2.7 0 0 1 5.2 2.6Zm2.2 2.9a1.5 1.5 0 1 0 0 2.9a1.5 1.5 0 0 0 0-2.9ZM5.2 12.7h13.4a2.7 2.7 0 0 1 2.7 2.7v3.4a2.7 2.7 0 0 1-2.7 2.7H5.2A2.7 2.7 0 0 1 2.5 18.7v-3.4A2.7 2.7 0 0 1 5.2 12.7Zm2.2 2.9a1.5 1.5 0 1 0 0 2.9a1.5 1.5 0 0 0 0-2.9Z\"/>","shapes":"<circle cx=\"7.3\" cy=\"7.6\" r=\"4.3\"/><path d=\"M16.5 2.7l5 8.6h-9.8ZM13.4 13.7h7.4v7.4h-7.4ZM2.5 21.1L6.8 13.7l4.3 7.4Z\"/>","shelter":"<path fill-rule=\"evenodd\" d=\"M12 2.7L2.5 10.2l1.1 1.5l1-0.8v10h14.8V10.9l1 0.8l1.1-1.5ZM9.5 20.9v-4.8a2.5 2.5 0 0 1 4.9 0v4.8ZM12 9.1a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4Z\"/>","shield":"<path d=\"M12 2.6 4.6 5.8V12c0 4.6 3.1 8 7.4 9.5 4.3-1.5 7.4-4.9 7.4-9.5V5.8Z\"/>","shirt":"<path d=\"M8 2.7L2.5 5.9l2.5 4.9l1.5-0.8v11.2h11V10.1l1.5 0.8L21.5 5.9l-5.5-3.2c-0.6 1.5-1.9 2.5-4 2.5S8.6 4.2 8 2.7Z\"/>","skip":"<path d=\"M3.3 2.6v18.9L15.8 12Z\"/><rect x=\"17.8\" y=\"2.7\" width=\"3.2\" height=\"18.7\" rx=\"1.5\"/>","skull":"<path fill-rule=\"evenodd\" d=\"M12 2.6a7.9 7.9 0 0 0-7.9 7.9c0 2.4 1.1 4.2 2.5 5.4V19.5a2 2 0 0 0 2 2h6.8a2 2 0 0 0 2-2v-3.6c1.4-1.2 2.5-3 2.5-5.4A7.9 7.9 0 0 0 12 2.6ZM9.2 9.4a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4ZM14.8 9.4a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4ZM12 13.3l1 1.8h-2ZM10.1 18.1h0.9v2.4h-0.9ZM13 18.1h0.9v2.4H13Z\"/>","sliders":"<path class=\"ln\" d=\"M4 7h8.8M19.2 7H20M4 17h2.8M13.2 17H20\"/><circle cx=\"16\" cy=\"7\" r=\"3.2\"/><circle cx=\"10\" cy=\"17\" r=\"3.2\"/>","smile":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM9.9 8.6a1.4 1.4 0 1 1 0 2.8a1.4 1.4 0 0 1 0-2.8ZM16 8.6a1.4 1.4 0 1 1 0 2.8a1.4 1.4 0 0 1 0-2.8ZM8.8 13.5h8.3a4.1 4.1 0 0 1-8.3 0Z\"/>","spark":"<path d=\"M10.7 2.6l2 5.6l5.6 2l-5.6 2L10.7 17.8l-2-5.6l-5.6-2l5.6-2ZM17.6 14.7l0.9 2.5l2.5 0.9l-2.5 0.9l-0.9 2.5l-0.9-2.5l-2.5-0.9l2.5-0.9Z\"/>","square":"<rect x=\"2.7\" y=\"2.7\" width=\"18.7\" height=\"18.7\" rx=\"3.3\"/>","star":"<path d=\"M12 2.8l2.9 6l6.6 0.8l-4.9 4.5l1.3 6.6L12 17.4l-5.9 3.2l1.3-6.6l-4.9-4.5l6.6-0.8Z\"/>","steps":"<path fill-rule=\"evenodd\" d=\"M2.8 4h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3ZM2.8 9.4h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3ZM2.8 15h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3Z\"/><path class=\"ln\" d=\"M10.6 6.4H20.3M10.6 11.9H20.3M10.6 17.4H20.3\"/>","store":"<path d=\"M4.4 3h15l2 6.2v1.4a3.2 3.2 0 0 1-6.3 0a3.2 3.2 0 0 1-6.3 0a3.2 3.2 0 0 1-6.3 0V9.2ZM4 14.9h15.9v5.6a1.1 1.1 0 0 1-1.1 1.1H14.1v-5.1h-4.4v5.1H5.1a1.1 1.1 0 0 1-1.1-1.1Z\"/>","sun":"<circle cx=\"12\" cy=\"12\" r=\"3.8\"/><path class=\"ln\" d=\"M12 3.9v1.3M12 18.7v1.3M6.3 6.2l0.9 0.9M16.8 16.8L17.8 17.8M4 12h1.3M18.7 12h1.3M6.3 17.8l0.9-0.9M16.8 7.2L17.8 6.2\"/>","sword":"<path d=\"M21.2 2.8v4.7l-10.8 10.8l-4.7-4.7L16.5 2.8Z\"/><path class=\"ln\" d=\"M5.2 11.9L12.1 18.8M8.4 15.6L3.7 20.3\"/>","table":"<path d=\"M2.7 6.2a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.3H2.7ZM2.7 10.5h5.3v9.9H5.2a2.5 2.5 0 0 1-2.5-2.5ZM9.8 10.5h4.5v9.9H9.8ZM16.1 10.5h5.3V17.9a2.5 2.5 0 0 1-2.5 2.5h-2.7Z\"/>","tack":"<path d=\"M8.5 3h7.2a0.8 0.8 0 0 1 0.8 1l-0.8 4l2.8 2.8a0.7 0.7 0 0 1-0.6 1.4H6.1a0.7 0.7 0 0 1-0.6-1.4l2.8-2.8l-0.8-4a0.8 0.8 0 0 1 0.8-1Z\"/><path class=\"ln\" d=\"M12 12.2V20.5\"/>","tag":"<path fill-rule=\"evenodd\" d=\"M2.9 3.4A1.5 1.5 0 0 1 4.4 2.9h7.2l10 10l-8.7 8.7L2.9 10.6Zm5 2.5a1.9 1.9 0 1 0 0 3.7a1.9 1.9 0 0 0 0-3.7Z\"/>","target":"<path fill-rule=\"evenodd\" d=\"M12 2.6a9.4 9.4 0 1 1 0 18.8a9.4 9.4 0 0 1 0-18.8Zm0 3a6.4 6.4 0 1 0 0 12.9a6.4 6.4 0 0 0 0-12.9Zm0 2.7a3.7 3.7 0 1 1 0 7.4a3.7 3.7 0 0 1 0-7.4Z\"/>","tent":"<path fill-rule=\"evenodd\" d=\"M12 4.2L19.3 17.4H4.7ZM12 11.6L9.5 17.4h5.1Z\"/><path class=\"ln\" d=\"M3.9 17.7h16.2\"/>","terminal":"<path fill-rule=\"evenodd\" d=\"M5 3.6h14a2.4 2.4 0 0 1 2.4 2.4v12a2.4 2.4 0 0 1-2.4 2.4H5A2.4 2.4 0 0 1 2.6 18V6A2.4 2.4 0 0 1 5 3.6Zm1.4 6 1.3-1.3 3.6 3.7-3.6 3.7-1.3-1.3 2.4-2.4Zm6.4 4.6h4.4v1.7h-4.4Z\"/>","text":"<path fill-rule=\"evenodd\" d=\"M10.2 2.4h3.7l6.8 18.7h-3.4l-1.6-4.7H8.3l-1.6 4.7H3.3ZM9.3 13.6h5.4L12 5.7Z\"/>","thumbs-up":"<path d=\"M6.5 10.1v10.3H3.6a1.1 1.1 0 0 1-1.1-1.1v-8a1.1 1.1 0 0 1 1.1-1.1ZM7.9 10.1l3.6-7.3a2.4 2.4 0 0 1 2.7 2.8l-0.6 3.5h5.6a2.2 2.2 0 0 1 2.2 2.6l-1.4 7a2.2 2.2 0 0 1-2.2 1.7H7.9Z\"/>","ticket":"<path fill-rule=\"evenodd\" d=\"M2.6 6.4h18.8v3.4a2.2 2.2 0 0 0 0 4.4v3.4H2.6v-3.4a2.2 2.2 0 0 0 0-4.4ZM13.3 8.4v1.8h1.4V8.4Zm0 2.7v1.8h1.4v-1.8Zm0 2.7v1.8h1.4v-1.8Z\"/>","toolbox":"<path d=\"M2.7 10.1a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.2H2.7ZM2.7 13.7h4.7v1.5h1.6v-1.5h6.2v1.5h1.6v-1.5h4.7V17.8a2.5 2.5 0 0 1-2.5 2.5H5.2A2.5 2.5 0 0 1 2.7 17.8Z\"/><path class=\"ln\" d=\"M9.1 7.5V5.7A1.5 1.5 0 0 1 10.5 4.2h2.9A1.5 1.5 0 0 1 14.9 5.7v1.9\"/>","train":"<path fill-rule=\"evenodd\" d=\"M9.1 2.7h5.8a2.9 2.9 0 0 1 2.9 2.9v6.8a2.9 2.9 0 0 1-2.9 2.9H9.1a2.9 2.9 0 0 1-2.9-2.9V5.6a2.9 2.9 0 0 1 2.9-2.9Zm-1.2 2.5v4.1h8.2V5.2ZM9.1 11.4a1.1 1.1 0 1 0 0 2.1A1.1 1.1 0 0 0 9.1 11.4Zm5.8 0a1.1 1.1 0 1 0 0 2.1a1.1 1.1 0 0 0 0-2.1Z\"/><path class=\"ln\" d=\"M8.6 20.2l1.9-3.4M15.4 20.2l-1.9-3.4\"/>","trash":"<path d=\"M5.8 7.6h12.4l-1 12a2 2 0 0 1-2 1.8H8.8a2 2 0 0 1-2-1.8Z\"/><path class=\"ln\" d=\"M3.8 6.6h16.4M9 6.6V4h6v2.6\"/>","tree":"<path d=\"M12 2.5L5.9 10.7h3L4.4 16.9h15.1l-4.5-6.2h3Z\"/><path class=\"ln\" d=\"M12 16.2v4\"/>","trophy":"<path d=\"M7.3 3h9.6V8.6a4.7 4.7 0 0 1-9.6 0Z\"/><path class=\"ln\" d=\"M7.3 5.6H5a3.1 3.1 0 0 0 3.1 4.1M16.7 5.6h2.3a3.1 3.1 0 0 1-3.1 4.1M12 13.7V16.9M8 20.4h8.1\"/>","tv":"<rect x=\"2.7\" y=\"7.4\" width=\"18.6\" height=\"13.3\" rx=\"2.3\"/><path class=\"ln\" d=\"M8.2 3.8l3.8 3.4l3.8-3.4\"/>","umbrella":"<path d=\"M2.6 12.7a9.4 9.4 0 0 1 18.8 0Z\"/><path class=\"ln\" d=\"M12 12.7v5.6a1.9 1.9 0 0 1-3.8 0\"/>","upload":"<path d=\"M10.6 21.7h2.5v-7h4.7L11.9 8.6l-5.9 5.9h4.7Z\"/><path class=\"ln\" d=\"M4.5 4.3h14.9\"/>","user":"<circle cx=\"12\" cy=\"6.7\" r=\"4.5\"/><path d=\"M3.5 21c0-4.7 3.8-7.8 8.5-7.8s8.5 3.2 8.5 7.8Z\"/>","user-check":"<circle cx=\"8.9\" cy=\"7.5\" r=\"3.2\"/><path d=\"M2.9 19.3c0-3.4 2.7-5.9 5.9-5.9s5.9 2.4 5.9 5.9Z\"/><path class=\"ln\" d=\"M14.8 10.6l1.9 1.9l3.8-3.8\"/>","user-circle":"<path fill-rule=\"evenodd\" d=\"M13 2.9a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 3.8a3.3 3.3 0 1 1 0 6.5a3.3 3.3 0 0 1 0-6.5ZM7.2 17.9a6.7 6.7 0 0 1 11.5 0a8.1 8.1 0 0 1-11.5 0Z\"/>","user-lock":"<circle cx=\"9.9\" cy=\"7.2\" r=\"4.2\"/><path d=\"M2.7 20c0-4.2 3.2-7 7.2-7c1.2 0 2.3 0.3 3.2 0.8v6.2Z\"/><rect x=\"14.5\" y=\"14.5\" width=\"6.9\" height=\"5.7\" rx=\"1.3\"/><path class=\"ln\" d=\"M16.4 14.5v-1a1.5 1.5 0 0 1 3 0v1\"/>","user-minus":"<circle cx=\"9.6\" cy=\"7.6\" r=\"3.9\"/><path d=\"M2.8 19.7c0-3.9 3.1-6.6 6.8-6.6c1.2 0 2.2 0.3 3.1 0.8v5.9Z\"/><path class=\"ln\" d=\"M15.1 16.7h5.2\"/>","user-off":"<path d=\"M9.1 4.7A4.2 4.2 0 1 1 15 10.6ZM4.2 20.8c0-4.3 2.8-6.9 6.3-7.2L17.5 20.8Z\"/><path class=\"ln\" d=\"M4 3.5l16.2 16.2\"/>","user-pen":"<circle cx=\"9.8\" cy=\"7.6\" r=\"4\"/><path d=\"M2.9 19.9c0-4 3.1-6.7 6.9-6.7c1.2 0 2.2 0.3 3.1 0.8v5.9Z\"/><path d=\"M19.5 11.4l2.1 2.1l-5.2 5.2l-2.8 0.7l0.7-2.8Z\"/>","user-tag":"<circle cx=\"10\" cy=\"7.4\" r=\"4\"/><path d=\"M2.9 19.9c0-4 3.2-6.8 7-6.8c1.2 0 2.3 0.3 3.2 0.8v6Z\"/><path fill-rule=\"evenodd\" d=\"M14 13.7h4.5l3.1 3.1l-3.1 3.1h-4.5ZM15.2 16.8a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z\"/>","video":"<path d=\"M3 7.7a2 2 0 0 1 2-2H14.4a2 2 0 0 1 2 2v8.7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2ZM17.5 10.1l4.2-2.6v8.9l-4.2-2.6Z\"/>","volume":"<path d=\"M2.5 8.9h4l5.4-4.2v14.6l-5.4-4.2H2.5Z\"/><path class=\"ln\" d=\"M15.2 9.3a3.8 3.8 0 0 1 0 5.5M17.7 6.5a7.5 7.5 0 0 1 0 11\"/>","walk":"<circle cx=\"12.4\" cy=\"4.6\" r=\"2.2\"/><path class=\"ln\" d=\"M8.7 19.8l2.4-5.5l1.9 2.2V19.8M11.1 14.3l0.9-5.2l-2.8 1.5l-1.4 2.8M12 9.1l1.8 2.8l2.8 0.9\"/>","wallet":"<path fill-rule=\"evenodd\" d=\"M5.7 2.8H19v4.6h1.6a0.9 0.9 0 0 1 0.9 0.9v12.4H5.1a2.5 2.5 0 0 1-2.5-2.5V5.9a3.1 3.1 0 0 1 3.1-3.1Zm0 2.1a1 1 0 0 0 0 2.1h11.2V4.9ZM16.7 12.9a1.4 1.4 0 1 0 0 2.8a1.4 1.4 0 0 0 0-2.8Z\"/>","water":"<path d=\"M2.7 7.9c2.4 0 2.4-2 4.7-2s2.4 2 4.6 2s2.4-2 4.7-2s2.4 2 4.6 2v3.2c-2.3 0-2.3-2-4.6-2s-2.4 2-4.7 2s-2.3-2-4.6-2s-2.4 2-4.7 2ZM2.7 14.8c2.4 0 2.4-2 4.7-2s2.4 2 4.6 2s2.4-2 4.7-2s2.4 2 4.6 2v3.2c-2.3 0-2.3-2-4.6-2s-2.4 2-4.7 2s-2.3-2-4.6-2s-2.4 2-4.7 2Z\"/>","weight":"<circle cx=\"12\" cy=\"4.8\" r=\"2.6\"/><path d=\"M6.5 8.7h10.9l3.3 12.3H3.2Z\"/>","window":"<path d=\"M2.6 6.2a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v1.5H2.6ZM2.6 9.8h18.7v7.7a2.7 2.7 0 0 1-2.7 2.7h-13.4a2.7 2.7 0 0 1-2.7-2.7Z\"/>","window-restore":"<path d=\"M2.7 10.4a2.7 2.7 0 0 1 2.7-2.7h8.2a2.7 2.7 0 0 1 2.7 2.7v7.2a2.7 2.7 0 0 1-2.7 2.7h-8.2a2.7 2.7 0 0 1-2.7-2.7ZM7.9 6.4V6.3a2.7 2.7 0 0 1 2.7-2.7h8.2a2.7 2.7 0 0 1 2.7 2.7v7.2a2.7 2.7 0 0 1-2.7 2.7h-1.1v-5.8a4 4 0 0 0-4-4Z\"/>","wrench":"<path d=\"M14.9 2.5a6 6 0 0 0-5.5 8.3L2.7 17.5V21.3H6.5l6.7-6.7a6 6 0 0 0 8.3-5.5l-3.5 1.3l-2.9-2.9l1.3-3.5Z\"/>","x-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM10.1 7.9L12.9 10.7l2.9-2.9l1.4 1.4l-2.9 2.9l2.9 2.9l-1.4 1.4l-2.9-2.9l-2.9 2.9l-1.4-1.4l2.9-2.9l-2.9-2.9Z\"/>","zap":"<path d=\"M13.9 2.5L5.2 13.3h6.1l-1.2 8.1l8.7-10.8h-6.1Z\"/>"};
+ const G = {"airplane":"<path d=\"M12 3.2c0.9 0 1.4 0.9 1.4 2.4V9.8l7 4.2V15.4l-7-2.4V17.2l1.9 1.4V20L12 19.1l-3.3 0.9v-1.4l1.9-1.4v-4.2L3.6 15.4v-1.4L10.6 9.8V5.6C10.6 4.2 11.1 3.2 12 3.2Z\"/>","alert":"<path d=\"M12 4.5L3.6 18.8h16.9Z\"/><path d=\"M12 10v3.7M12 16.5h0\"/>","alert-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5v5.5M12 16.5h.01\"/>","align-left":"<path d=\"M4 5.9h16.6M4 10h10.4M4 14.3h16.6M4 18.5h10.4\"/>","archive":"<rect x=\"3.5\" y=\"4.8\" width=\"17\" height=\"4.7\" rx=\"0.9\"/><path d=\"M5.4 9.5v9.4a0.9 0.9 0 0 0 0.9 0.9h11.3a0.9 0.9 0 0 0 0.9-0.9V9.5M10.1 13.3h3.8\"/>","arrow-down":"<path d=\"M12 3.2v16.7M5.7 13.7l6.3 6.3l6.3-6.3\"/>","arrow-left":"<path d=\"M20.8 12H4M10.3 5.7l-6.3 6.3l6.3 6.3\"/>","arrow-right":"<path d=\"M3.2 12h16.7M13.7 5.7l6.3 6.3l-6.3 6.3\"/>","arrow-up":"<path d=\"M12 20.8V4M5.7 10.3l6.3-6.3l6.3 6.3\"/>","arrows-h":"<path d=\"M3.8 12h16.5M7.6 8.1l-3.9 3.9l3.9 3.9M16.4 8.1l3.9 3.9l-3.9 3.9\"/>","at":"<circle cx=\"12\" cy=\"12\" r=\"3.4\"/><path d=\"M15.4 12v1.3a2.5 2.5 0 0 0 4.9 0V12a8.3 8.3 0 1 0-3.2 6.5\"/>","back":"<path d=\"M16.1 3.6l-8.4 8.4l8.4 8.4\"/>","ban":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m6 6 12 12\"/>","bell":"<path d=\"M6 14.6V9.5a6.1 6.1 0 0 1 12.2 0v5.1l1.5 2.1h-15.3ZM10 18.7a2.1 2.1 0 0 0 4 0\"/>","book":"<path d=\"M5 5.7a1.9 1.9 0 0 1 1.9-1.9h12.1v14.9H6.8a1.9 1.9 0 0 0-1.9 1.9Z\"/><path d=\"M5 18.7V5.7\"/>","book-open":"<path d=\"M12 6.3C10 4.8 7 4.3 3.5 4.9v13.2c3.5-0.6 6.5-0.1 8.5 1.4c2-1.5 5-2 8.5-1.4V4.9C17 4.3 14 4.8 12 6.3Z\"/><path d=\"M12 6.3v13.2\"/>","box":"<path d=\"M3.6 7.9L11.9 3.9l8.4 3.9v8.4L11.9 20.1l-8.4-3.9Z\"/><path d=\"M3.6 7.9L11.9 11.8l8.4-3.9M11.9 11.8v8.4M7.8 5.9l8.4 3.9\"/>","brain":"<path d=\"M9.2 4.2a2.8 2.8 0 0 0-2.8 2.8a2.8 2.8 0 0 0-1.9 4.8a2.8 2.8 0 0 0 1.9 4.8a2.8 2.8 0 0 0 5.8 1.1V5.8A1.9 1.9 0 0 0 9.2 4.2ZM14.9 4.2a2.8 2.8 0 0 1 2.8 2.8a2.8 2.8 0 0 1 1.9 4.8a2.8 2.8 0 0 1-1.9 4.8a2.8 2.8 0 0 1-5.8 1.1\"/>","branch":"<circle cx=\"6.7\" cy=\"5.6\" r=\"1.9\"/><circle cx=\"6.7\" cy=\"18.6\" r=\"1.9\"/><circle cx=\"17.9\" cy=\"7.5\" r=\"1.9\"/><path d=\"M6.7 7.5v9.3M17.9 9.3c0 5.1-6 3.7-10.2 7.9\"/>","bridge":"<path d=\"M3.5 16h17M7 19.5V5M17 19.5V5\"/><path d=\"M3.5 10c1.8 0 2.8-2.3 3.5-5c2.4 5.2 7.6 5.2 10 0c.7 2.7 1.7 5 3.5 5\"/><path d=\"M12 10.9V16\"/>","briefcase":"<rect x=\"3.5\" y=\"7.2\" width=\"17\" height=\"12.3\" rx=\"1.9\"/><path d=\"M9.2 7.2V5.7A1.4 1.4 0 0 1 10.6 4.3h2.8A1.4 1.4 0 0 1 14.8 5.7V7.2M3.5 12.3h7.1M13.4 12.3H20.5M10.6 11.4h2.8v2.4h-2.8Z\"/>","bug":"<rect x=\"7.2\" y=\"6.2\" width=\"9.6\" height=\"13.3\" rx=\"4.8\"/><path d=\"M9.3 6.5a2.7 2.7 0 0 1 5.3 0M12 10.9v8.5M7.2 12H3.5M20.5 12h-3.7M7.6 8.3L4.6 5.6M16.4 8.3L19.4 5.6M7.6 16.3L4.6 18.9M16.4 16.3L19.4 18.9\"/>","burst":"<path d=\"M11.9 3.7L13.6 7.8L17.8 6.2L16.2 10.4L20.3 12.1L16.2 13.8L17.8 18L13.6 16.4L11.9 20.4L10.2 16.4L6 18L7.6 13.8L3.6 12.1L7.6 10.4L6 6.2L10.2 7.8Z\"/>","busy":"<path d=\"M4.7 12h0M12.1 12h0M19.4 12h0\" stroke-width=\"4.2\"/>","calendar":"<rect x=\"4\" y=\"5.5\" width=\"16\" height=\"15\" rx=\"2\"/><path d=\"M4 10.5h16M9 3.5v4M15 3.5v4\"/>","camera":"<path d=\"M3.5 8h3.4l1.8-2.8h6.6L17.1 8h3.4v11.5h-17Z\"/><circle cx=\"12\" cy=\"13.3\" r=\"3.4\"/>","camera-flip":"<path d=\"M3.5 8h3.4l1.8-2.8h6.6L17.1 8h3.4v11.5h-17Z\"/><path d=\"M15 12.6a3.1 3.1 0 0 0-5.6-1.2M9 14.4a3.1 3.1 0 0 0 5.6 1.2M9.3 9.5v2h2M14.7 17.5v-2h-2\"/>","camera-off":"<path d=\"M3.7 7.9h3.3l1.7-2.7h6.4L16.9 7.9h3.3v11.2h-16.5Z\"/><circle cx=\"11.9\" cy=\"13\" r=\"3.3\"/><path d=\"M3.7 3.5l16.5 16.5\"/>","car":"<path d=\"M3.5 15.8v-4.5L6.2 5.8h11.6l2.7 5.5V15.8Z\"/><path d=\"M3.5 11.3h17M6.5 15.8v2.5M17.5 15.8v2.5M7.2 13.8h0M16.8 13.8h0\"/>","card":"<rect x=\"3.7\" y=\"5.8\" width=\"16.7\" height=\"12.3\" rx=\"1.8\"/><path d=\"M3.7 10.3h16.7M6.7 14.6h3.5\"/>","care":"<path d=\"M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z\"/><path d=\"M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1\"/>","cart":"<path d=\"M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5\"/><circle cx=\"9.1\" cy=\"18.6\" r=\"1.2\"/><circle cx=\"16.5\" cy=\"18.6\" r=\"1.2\"/>","cc":"<rect x=\"3.5\" y=\"5.4\" width=\"17\" height=\"13.2\" rx=\"2.4\"/><path d=\"M10.7 10.2a2.3 2.3 0 1 0 0 3.6M16.8 10.2a2.3 2.3 0 1 0 0 3.6\"/>","chart":"<path d=\"M3.9 3.4v16.7h16.7\"/><path d=\"M7.7 14.5l3.6-4.1l3.2 2.7l5.2-6.3\"/>","chat":"<path d=\"M3.8 4.3h16.8v11.7H8l-4.2 4.2Z\"/>","chat-off":"<path d=\"M4.2 5.1h15.7v10.9H8l-4 4Z\"/><path d=\"M3.7 3.7l16.7 16.7\"/>","check":"<path d=\"M3.7 12.1l5.4 5.4L20.4 6.1\"/>","check-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m8 12.4 2.8 2.8L16 9.6\"/>","check-double":"<path d=\"M3.6 11.7l3.6 3.6L14.6 7.7M11.1 15.2l0.9 0.9L20.4 7.7\"/>","chevron":"<path d=\"M7.9 3.6l8.4 8.4l-8.4 8.4\"/>","chevrons-left":"<path d=\"M10.9 19.3l-7.3-7.3l7.3-7.3M20.4 19.3l-7.3-7.3l7.3-7.3\"/>","chevrons-right":"<path d=\"M3.6 19.3l7.3-7.3l-7.3-7.3M13.1 19.3l7.3-7.3l-7.3-7.3\"/>","child":"<circle cx=\"12\" cy=\"5.8\" r=\"2.1\"/><path d=\"M7.9 10.5L12 9.2l4.1 1.4M12 9.2v5.6M9.2 20.4l2.8-5.6l2.8 5.6\"/>","chip":"<rect x=\"7.3\" y=\"7.3\" width=\"9.4\" height=\"9.4\" rx=\"1.4\"/><path d=\"M10.1 3.5v3.8M13.9 3.5v3.8M10.1 16.7v3.8M13.9 16.7v3.8M3.5 10.1h3.8M3.5 13.9h3.8M16.7 10.1h3.8M16.7 13.9h3.8\"/>","circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/>","city":"<path d=\"M3.5 19.7h17M5.4 19.7V8.3h4.7v11.3M10.1 19.7V3.6h5.7v16.1M15.8 19.7v-7.6h3.3v7.6M7.8 11.2h0M7.8 14.5h0M12.9 6.9h0M12.9 10.2h0M12.9 13.5h0\"/>","clapper":"<path d=\"M4 10.4h16.3v8.6a1 1 0 0 1-1 1h-14.4a1 1 0 0 1-1-1Z\"/><path d=\"M4 10.4L3.4 7.2l15.7-2.9l0.7 3.3ZM8.5 6.3l2.2 3.2M13.3 5.4l2.2 3.2\"/>","clipboard":"<rect x=\"5.7\" y=\"5\" width=\"12.6\" height=\"15.5\" rx=\"1.9\"/><path d=\"M9.1 5V3.5h5.8V5M9.1 10.8h5.8M9.1 14.7h3.9\"/>","clipboard-check":"<rect x=\"5.7\" y=\"4.9\" width=\"12.6\" height=\"15.5\" rx=\"1.9\"/><path d=\"M9.1 4.9V3.5h5.8V4.9M9.1 13.2l1.9 1.9l3.9-3.9\"/>","clock":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 7.5V12l3 2\"/>","close":"<path d=\"M3.7 3.7l16.7 16.7M20.4 3.7L3.7 20.4\"/>","cloud":"<path d=\"M7.8 17.6h8.9a3.4 3.4 0 0 0 0.5-7A5.2 5.2 0 0 0 6.9 10.1A3.7 3.7 0 0 0 7.8 17.6Z\"/>","cloud-off":"<path d=\"M7.5 17.6h9.5a3.8 3.8 0 0 0 0.5-7.5A5.7 5.7 0 0 0 6.4 9.6A4.1 4.1 0 0 0 7.5 17.6Z\"/><path d=\"M4 3.9l16.1 16.1\"/>","code":"<path d=\"M7.8 7.8l-4.2 4.2l4.2 4.2M16.2 7.8l4.2 4.2l-4.2 4.2M14.2 4.6l-4.2 14.8\"/>","coin":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M14.5 9.2c-.5-.8-1.4-1.2-2.5-1.2-1.5 0-2.5.8-2.5 2s1 1.6 2.5 2 2.5.8 2.5 2-1 2-2.5 2c-1.1 0-2-.4-2.5-1.2M12 6.5v11\"/>","columns":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\"/><path d=\"M12 4.5v15M3.5 9h17\"/>","commit":"<circle cx=\"12\" cy=\"12\" r=\"3.4\"/><path d=\"M3.5 12h5.1M15.4 12H20.5\"/>","compass":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m15.6 8.4-2.1 5.1-5.1 2.1 2.1-5.1Z\"/>","compress":"<path d=\"M8.8 3.5v5.3H3.5M15.2 3.5v5.3h5.3M8.8 20.5v-5.3H3.5M15.2 20.5v-5.3h5.3\"/>","computer":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"11.3\" rx=\"1.9\"/><path d=\"M8.2 19.7h7.6M12 15.9v3.8\"/>","contrast":"<circle cx=\"11.7\" cy=\"12\" r=\"8.4\"/><path d=\"M11.7 3.6v16.7M11.7 7.9h6.5M11.7 12h8.4M11.7 16.2h6.5\"/>","cookie":"<path d=\"M20.6 12.3a8.4 8.4 0 1 1-8.9-8.9a3 3 0 0 0 3.9 3.5a3 3 0 0 0 4.9 5.3Z\"/><path d=\"M8.8 9.4h0M12.2 13.8h0M8.3 15.3h0M15.7 15.3h0\"/>","copy":"<rect x=\"8\" y=\"8\" width=\"12.5\" height=\"12.5\" rx=\"2.1\"/><path d=\"M16.3 8V5.8a2.1 2.1 0 0 0-2.1-2.1H5.8a2.1 2.1 0 0 0-2.1 2.1v8.4a2.1 2.1 0 0 0 2.1 2.1h2.1\"/>","couch":"<path d=\"M5.4 10.1V7.2a1.9 1.9 0 0 1 1.9-1.9h9.4a1.9 1.9 0 0 1 1.9 1.9v2.8\"/><path d=\"M3.5 11.9a1.9 1.9 0 0 1 3.8 0v1.4h9.4V11.9a1.9 1.9 0 0 1 3.8 0v4.7H3.5ZM5.4 16.7v1.9M18.6 16.7v1.9\"/>","crown":"<path d=\"M3.5 8.3L7.8 12L11.9 5.5l4.2 6.5l4.2-3.7L18.4 18.1H5.4Z\"/>","cubes":"<path d=\"M12 3.2L8.1 5.2v4.4l3.9 2l3.9-2V5.2ZM7.6 11.6L3.6 13.6v4.4l3.9 2l3.9-2V13.6ZM16.4 11.6l-3.9 2v4.4l3.9 2l3.9-2V13.6Z\"/>","database":"<ellipse cx=\"12\" cy=\"6.4\" rx=\"6.6\" ry=\"2.8\"/><path d=\"M5.4 6.4v11.3c0 1.6 2.9 2.8 6.6 2.8s6.6-1.2 6.6-2.8V6.4M5.4 12c0 1.6 2.9 2.8 6.6 2.8s6.6-1.2 6.6-2.8\"/>","dice":"<rect x=\"3.7\" y=\"3.6\" width=\"16.7\" height=\"16.7\" rx=\"3\"/><path d=\"M8.6 8.6h0M15.5 8.6h0M12.1 12h0M8.6 15.4h0M15.5 15.4h0\" stroke-width=\"2.6\"/>","dish":"<path d=\"M3.8 9.2A10.9 10.9 0 0 0 14.8 20.2Z\"/><path d=\"M9 15l5.2-5.2M14.8 3.4a5.8 5.8 0 0 1 5.8 5.8M14.8 7.5a1.8 1.8 0 0 1 1.8 1.8\"/>","dollar":"<path d=\"M15.7 8C15 6.6 13.7 5.6 12 5.6C9.6 5.6 8.3 6.9 8.3 8.5s1.6 2.5 3.7 2.8s3.7 1.3 3.7 3.1s-1.5 3-3.7 3c-1.8 0-3.2-0.9-3.7-2.4M12 3.7v16.7\"/>","donate":"<circle cx=\"11.9\" cy=\"8.4\" r=\"5.2\"/><path d=\"M11.9 6v4.3M3.7 15.6h16.5V20H3.7ZM8.3 17.7h7.2\"/>","door":"<path d=\"M13.7 4.7L6.3 3.2v16.7l7.5-1.4ZM13.7 5.1h3.3a0.9 0.9 0 0 1 0.9 0.9v14M3.5 20h16.7M11 11.6h0\"/>","down":"<path d=\"M3.6 7.9l8.4 8.4l8.4-8.4\"/>","download":"<path d=\"M12 3.2v11.5M6.8 9.5l5.2 5.2l5.2-5.2M4.7 20h14.7\"/>","drive":"<rect x=\"3.5\" y=\"12.3\" width=\"17\" height=\"6.6\" rx=\"1.9\"/><path d=\"M3.9 12.3L6.8 4.7h10.4l2.8 7.6M16.7 15.6h0M13.8 15.6h0\"/>","drop":"<path d=\"M12 3.5s5.9 6.4 5.9 10.8a5.9 5.9 0 0 1-11.8 0c0-4.4 5.9-10.8 5.9-10.8Z\"/>","ear":"<path d=\"M6.2 9.5a5.7 5.7 0 1 1 10.8 2.4c-0.9 1.9-3.1 3-3.1 5.2a3.4 3.4 0 0 1-6.5 1.6\"/><path d=\"M9.7 9.9a2.4 2.4 0 1 1 3.8 1.5\"/>","enter":"<path d=\"M13.8 3.6h4.1a2.1 2.1 0 0 1 2.1 2.1v12.5a2.1 2.1 0 0 1-2.1 2.1h-4.1M9.5 7.9l4.1 4.1l-4.1 4.1M13.8 12H3.2\"/>","eraser":"<path d=\"M14.3 4.4l5.5 5.5l-9 9H6.6l-2.6-2.6a1.5 1.5 0 0 1 0-2.1Z\"/><path d=\"M9.3 9.4l5.5 5.5M10.8 18.9H20.3\"/>","expand":"<path d=\"M3.5 8.8V3.5h5.3M20.5 8.8V3.5h-5.3M3.5 15.2v5.3h5.3M20.5 15.2v5.3h-5.3\"/>","eye":"<path d=\"M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z\"/><circle cx=\"12\" cy=\"12\" r=\"2.7\"/>","eye-off":"<path d=\"M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2\"/><path d=\"M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15\"/>","fast-forward":"<path d=\"M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z\"/>","file":"<path d=\"M6.4 3.5h7.6l3.8 3.8v13.2H6.4Z\"/><path d=\"M13.9 3.5v3.8h3.8\"/>","file-code":"<path d=\"M13.9 3.5H7.4a1.9 1.9 0 0 0-1.9 1.9v13a1.9 1.9 0 0 0 1.9 1.9h9.3a1.9 1.9 0 0 0 1.9-1.9V8.2Z\"/><path d=\"M13.9 3.5v4.6h4.6M10.1 12.4L8.3 14.3l1.9 1.9M13.9 12.4l1.9 1.9l-1.9 1.9\"/>","film":"<rect x=\"3.5\" y=\"4.4\" width=\"17\" height=\"15.1\" rx=\"1.9\"/><path d=\"M7.7 4.4v15.1M16.3 4.4v15.1M3.5 9.2h4.3M3.5 14.8h4.3M16.3 9.2H20.5M16.3 14.8H20.5\"/>","filter":"<path d=\"M3.5 6h17M6.7 12.4h10.6M9.9 18.7h4.2\"/>","finish":"<path d=\"M5.2 20.7V4\"/><rect x=\"5.2\" y=\"4.6\" width=\"13.9\" height=\"8.6\" rx=\"1\"/><path d=\"M5.2 8.8h13.9M9.6 4.6v8.6M14.3 4.6v8.6\"/>","fire":"<path d=\"M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z\"/>","fish":"<path d=\"M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z\"/><path d=\"M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01\"/>","fist":"<path d=\"M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8\"/>","flag":"<path d=\"M6.7 20.7V4M6.7 4h10.8l-2 3.9l2 3.9H6.7\"/>","flask":"<path d=\"M9.5 3.2h4.9M10 3.2V9.2L4.9 17.7a1.5 1.5 0 0 0 1.3 2.3h11.6a1.5 1.5 0 0 0 1.3-2.3L14 9.2V3.2\"/><path d=\"M7.3 14.6h9.5\"/>","focus":"<circle cx=\"12\" cy=\"12\" r=\"2.8\"/><path d=\"M3.5 9V5.9A2.4 2.4 0 0 1 5.9 3.5H9M15 3.5h3.1A2.4 2.4 0 0 1 20.5 5.9V9M20.5 15v3.1a2.4 2.4 0 0 1-2.4 2.4H15M9 20.5H5.9A2.4 2.4 0 0 1 3.5 18.1V15\"/>","folder":"<path d=\"M3.8 7.3a1.9 1.9 0 0 1 1.9-1.9h3.6l1.9 1.9h7.4a1.9 1.9 0 0 1 1.9 1.9v7.4a1.9 1.9 0 0 1-1.9 1.9H5.8a1.9 1.9 0 0 1-1.9-1.9Z\"/>","folder-tree":"<path d=\"M4.1 3.3v13.2a1 1 0 0 0 1 1H9.7M4.1 8.3H9.7\"/><path d=\"M10.2 5.3h3.1l1 1.5h5.6V10.9h-9.7ZM10.2 14.5h3.1l1 1.5h5.6V20.1h-9.7Z\"/>","food":"<path d=\"M8.2 4v6.5M6.3 4v4.2a1.9 1.9 0 0 0 3.7 0V4M8.2 10.5v10.2M17.5 20.8V4c-1.9 1.1-3 3.3-3 6.5v2.8H17.5\"/>","game":"<rect x=\"3.7\" y=\"7.2\" width=\"16.7\" height=\"9.7\" rx=\"4.4\"/><path d=\"M7.6 10.7v2.7M6.4 12h2.7M15.1 11.6h0M17.4 12.9h0\"/>","gauge":"<path d=\"M3.6 16.9a8.4 8.4 0 1 1 16.7 0\"/><path d=\"M11.9 13.2l4.1-5.7\"/><circle cx=\"11.9\" cy=\"13.2\" r=\"1.4\"/>","gavel":"<path d=\"M13.7 4.1l5.1 5.1M10.5 7.4l5.1 5.1M12.1 5.8l-5.6 5.6l5 5l5.6-5.6M3.5 19.5l5.9-5.9M13.7 19.5h6.5\"/>","gear":"<circle cx=\"12\" cy=\"12.1\" r=\"2.3\"/><path d=\"M17.6 14.3a1.3 1.3 0 0 0 0.2 1.5l0.1 0.1a1.5 1.5 0 1 1-2.4 2.4l-0.1-0.1a1.3 1.3 0 0 0-1.5-0.2a1.3 1.3 0 0 0-0.8 1.3V18.8a1.5 1.5 0 1 1-3.4 0v-0.1a1.3 1.3 0 0 0-0.9-1.3a1.3 1.3 0 0 0-1.5 0.2l-0.1 0.1a1.5 1.5 0 1 1-2.4-2.4l0.1-0.1a1.3 1.3 0 0 0 0.2-1.5a1.3 1.3 0 0 0-1.3-0.8H5.4a1.5 1.5 0 1 1 0-3.4h0.1a1.3 1.3 0 0 0 1.3-0.9a1.3 1.3 0 0 0-0.2-1.5l-0.1-0.1a1.5 1.5 0 1 1 2.4-2.4l0.1 0.1a1.3 1.3 0 0 0 1.5 0.2H9.8a1.3 1.3 0 0 0 0.8-1.3V5.4a1.5 1.5 0 1 1 3.4 0v0.1a1.3 1.3 0 0 0 0.8 1.3a1.3 1.3 0 0 0 1.5-0.2l0.1-0.1a1.5 1.5 0 1 1 2.4 2.4l-0.1 0.1a1.3 1.3 0 0 0-0.2 1.5V9.8a1.3 1.3 0 0 0 1.3 0.8H18.7a1.5 1.5 0 1 1 0 3.4h-0.1a1.3 1.3 0 0 0-1.3 0.8Z\"/>","gem":"<path d=\"M6.8 4.9h10.3L20.2 9.5l-8.3 10.3L3.6 9.5Z\"/><path d=\"M3.6 9.5h16.7M9.6 4.9L8.1 9.5l3.8 10.3M14.2 4.9L15.7 9.5l-3.8 10.3\"/>","ghost":"<path d=\"M4.7 20V10.6a7.3 7.3 0 0 1 14.7 0v9.4l-2.4-1.9l-2.5 1.9l-2.4-1.9L9.6 20l-2.5-1.9Z\"/><path d=\"M9.4 10.1h0M14.6 10.1h0\"/>","gift":"<rect x=\"4.4\" y=\"8.8\" width=\"15.1\" height=\"10.4\" rx=\"0.9\"/><path d=\"M3.5 8.8h17M12 8.8v10.4M12 8.8c-1.4-2.8-4.7-3.8-4.7-1.4S12 8.8 12 8.8s4.7-0.9 4.7-3.3S13.4 6 12 8.8\"/>","globe":"<circle cx=\"11.9\" cy=\"11.9\" r=\"8.3\"/><path d=\"M3.6 11.9h16.7M11.9 3.6c2.7 2.7 2.7 13.9 0 16.7M11.9 3.6c-2.7 2.7-2.7 13.9 0 16.7\"/>","grid":"<rect x=\"3.5\" y=\"3.5\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"13.1\" y=\"3.5\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"3.5\" y=\"13.1\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/><rect x=\"13.1\" y=\"13.1\" width=\"7.4\" height=\"7.4\" rx=\"1.6\"/>","grip":"<path d=\"M8.3 4.5h0M15.8 4.5h0M8.3 12h0M15.8 12h0M8.3 19.5h0M15.8 19.5h0\" stroke-width=\"3.8\"/>","group":"<path d=\"M3.5 7.3V3.5h3.8M16.7 3.5h3.8v3.8M20.5 16.7v3.8h-3.8M7.3 20.5H3.5v-3.8\"/><rect x=\"7.3\" y=\"7.3\" width=\"5.7\" height=\"4.7\" rx=\"0.9\"/><rect x=\"11.1\" y=\"12\" width=\"5.7\" height=\"4.7\" rx=\"0.9\"/>","hammer":"<path d=\"M13.1 3.7L19.3 9.9l-2.7 2.7l-6.2-6.2Z\"/><path d=\"M13.6 9.4L5 18.1a1.3 1.3 0 0 0 1.9 1.9l8.6-8.6\"/>","hand":"<path d=\"M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6\"/>","handshake":"<path d=\"M3.6 9.9v5.3M20.3 9.9v5.3\"/><path d=\"M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2\"/><path d=\"M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2\"/>","hash":"<path d=\"M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17\"/>","heading":"<path d=\"M5.6 3.5v17M18.4 3.5v17M5.6 12h12.7M3.5 3.5h4.2M16.2 3.5h4.2M3.5 20.5h4.2M16.2 20.5h4.2\"/>","headphones":"<path d=\"M4.4 13.9v-2.8a7.5 7.5 0 0 1 14.9 0v2.8\"/><rect x=\"3.5\" y=\"13\" width=\"4.2\" height=\"6\" rx=\"1.4\"/><rect x=\"16.1\" y=\"13\" width=\"4.2\" height=\"6\" rx=\"1.4\"/>","heart":"<path d=\"M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z\"/>","heart-broken":"<path d=\"M11.9 20.3s-8.1-5.1-8.1-11.6a4.6 4.6 0 0 1 8.1-3A4.6 4.6 0 0 1 20 9.2c0 6.5-8.1 11.6-8.1 11.6Z\"/><path d=\"M11.9 5.8L10 9.8l3.5 2.3l-1.6 3.9\"/>","heart-pulse":"<path d=\"M19 12.3c-1.7 3.6-7 6.7-7 6.7s-5.3-3.1-7-6.7M4.3 9.7A4.3 4.3 0 0 1 12 7.4a4.3 4.3 0 0 1 7.7 2.2\"/><path d=\"M3.5 11.9h4l1.3-2.2l2.2 4.5l1.8-3.1h7.6\"/>","help":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M9.6 9.3a2.5 2.5 0 0 1 4.8.9c0 1.7-2.4 2.2-2.4 3.8M12 17h.01\"/>","history":"<path d=\"M3.8 12.1a8.3 8.3 0 1 0 2.5-5.9L3.8 8.5M3.8 4.2v4.2h4.2\"/><path d=\"M12 7.9v4.3l3.1 1.9\"/>","home":"<path d=\"M3.6 10.6L12 3.3l8.4 7.3v8.4a1 1 0 0 1-1 1h-4.2v-6.3h-6.3v6.3H4.7a1 1 0 0 1-1-1Z\"/>","hot-tub":"<circle cx=\"8.6\" cy=\"5.8\" r=\"1.7\"/><path d=\"M3.8 11.9h16.6v3.3a4.2 4.2 0 0 1-4.2 4.2h-8.4A4.2 4.2 0 0 1 3.8 15.2ZM6.8 11.9v-1.4A2.4 2.4 0 0 1 8.9 8.2H9.4M13.7 9.5c0.8-0.9-0.8-1.9 0-2.8M17.3 9.5c0.8-0.9-0.8-1.9 0-2.8\"/>","hourglass":"<path d=\"M6 3.5h12M6 20.5h12M7.5 3.5c0 4.5 4.5 5.5 4.5 8.5s-4.5 4-4.5 8.5M16.5 3.5c0 4.5-4.5 5.5-4.5 8.5s4.5 4 4.5 8.5\"/>","id":"<rect x=\"3.7\" y=\"5.5\" width=\"16.7\" height=\"13\" rx=\"1.9\"/><circle cx=\"9.2\" cy=\"11\" r=\"1.9\"/><path d=\"M6.4 15.6c0.5-1.4 1.6-2.2 2.8-2.2s2.4 0.8 2.8 2.2M14.8 10.1h2.8M14.8 13.4h2.8\"/>","idea":"<path d=\"M9.1 17.6h5.8M10.1 20.5h3.9M8.7 14.3A5.8 5.8 0 1 1 15.2 14.3c-0.7 0.6-1.4 1.5-1.4 2.3h-3.9c0-0.9-0.7-1.7-1.4-2.3Z\"/>","image":"<rect x=\"3.5\" y=\"5.4\" width=\"16.7\" height=\"13\" rx=\"2.8\"/><circle cx=\"9.1\" cy=\"10\" r=\"1.5\"/><path d=\"M20.3 15.6l-4.7-4.7l-7.4 7.4\"/>","inbox":"<path d=\"M3.5 12.7L5.9 4.8h12.1l2.4 7.9V17.8a0.9 0.9 0 0 1-0.9 0.9H4.4a0.9 0.9 0 0 1-0.9-0.9ZM3.5 12.7h4.6l1.4 2.4h4.6l1.4-2.4h4.6\"/>","infinity":"<path d=\"M12 12c-1.8-2.4-3.3-3.6-4.9-3.6a3.6 3.6 0 0 0 0 7.2c1.6 0 3.1-1.2 4.9-3.6Zm0 0c1.8 2.4 3.3 3.6 4.9 3.6a3.6 3.6 0 0 0 0-7.2c-1.6 0-3.1 1.2-4.9 3.6Z\"/>","info":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 11v5M12 8h.01\"/>","invite":"<circle cx=\"9.2\" cy=\"8.2\" r=\"2.9\"/><path d=\"M3.8 18.8c0-3 2.4-4.8 5.3-4.8s5.3 2 5.3 4.8M17.9 8.2v5.3M15.3 10.9h5.3\"/>","key":"<circle cx=\"8.1\" cy=\"15.9\" r=\"4.3\"/><path d=\"M11.1 12.9l9.4-9.4M16.8 7.3l3.2 3.2M14.6 9.4l2.2 2.2\"/>","keyboard":"<rect x=\"3.5\" y=\"6.6\" width=\"17\" height=\"10.7\" rx=\"1.8\"/><path d=\"M6.6 10.2h0M9.3 10.2h0M12 10.2h0M14.7 10.2h0M17.4 10.2h0M8.4 13.8h7.2\"/>","language":"<path d=\"M4.6 5.4h8.4M8.8 3.6v1.9M6.4 5.4c0.5 2.8 2.3 5.6 5.6 7M11.1 5.4c-0.6 3.2-2.6 6.3-6 7.9M12 20.3l3.7-8.4l3.7 8.4M13.3 17.5h4.8\"/>","laugh":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 13.5h8a4 4 0 0 1-8 0ZM7.5 8.6l2.2 1.2-2.2 1.2M16.5 8.6l-2.2 1.2 2.2 1.2\"/>","layers":"<path d=\"M12 5.4l8.3 4.6l-8.3 4.6l-8.3-4.6Z\"/><path d=\"M3.8 14l8.3 4.6l8.3-4.6\"/>","leaf":"<path d=\"M3.8 20.1c0-9.5 5.6-15.2 16.7-16.7c-1 11.1-6.7 16.7-16.7 16.7ZM3.8 20.1l8.9-8.9\"/>","leave":"<path d=\"M12.7 3.5h4.2a2.1 2.1 0 0 1 2.1 2.1v12.7a2.1 2.1 0 0 1-2.1 2.1h-4.2M8.5 16.2l-4.2-4.2l4.2-4.2M4.2 12h10.6\"/>","lifebuoy":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"3.8\"/><path d=\"M6 6l3.4 3.4M14.6 14.7l3.4 3.4M18 6l-3.4 3.4M9.4 14.7l-3.4 3.4\"/>","link":"<path d=\"M9.9 14.1a4.3 4.3 0 0 0 6.1 0l3.2-3.2a4.3 4.3 0 0 0-6.1-6.1l-1.1 1.1M14.1 9.9a4.3 4.3 0 0 0-6.1 0l-3.2 3.2a4.3 4.3 0 0 0 6.1 6.1l1.1-1.1\"/>","link-off":"<path d=\"M10 13.8a4 4 0 0 0 5.6 0l2.9-2.9a4 4 0 0 0-5.6-5.6l-1 1M13.8 10a4 4 0 0 0-5.6 0l-2.9 2.9a4 4 0 0 0 5.6 5.6l1-1\"/><path d=\"M3.6 3.6l16.7 16.7\"/>","list":"<path d=\"M8.2 5.5h11.9M8.2 12h11.9M8.2 18.5h11.9M3.3 5.5h0M3.3 12h0M3.3 18.5h0\"/>","list-ordered":"<path d=\"M9.7 6.8h10.8M9.7 12.8h10.8M9.7 18.8h10.8M3.8 5.4L4.7 5v4.4M3.8 9.3h2M3.8 13.7a1 1 0 0 1 2 0.3c0 1.1-2 1.7-2 2.7h2.2\"/>","live":"<circle cx=\"12\" cy=\"11.8\" r=\"2\"/><path d=\"M8.6 8.4a4.9 4.9 0 0 0 0 7.1M15.4 8.4a4.9 4.9 0 0 1 0 7.1M6.3 6.1a8.1 8.1 0 0 0 0 11.9M17.7 6.1a8.1 8.1 0 0 1 0 11.9\"/>","lock":"<rect x=\"4.7\" y=\"10.7\" width=\"14.5\" height=\"9.4\" rx=\"2.1\"/><path d=\"M7.8 10.7V7.5a4 4 0 0 1 8.3 0v3.2\"/>","lungs":"<path d=\"M12 3.5v8M12 9.4l-3 2.1M12 9.4l3 2.1M8.4 6.5C5.6 6.5 3.5 10.4 3.5 15.2c0 2.8 1.1 4.8 3.2 4.8s2.7-2.1 2.7-4.8V8.3M15.6 6.5C18.4 6.5 20.5 10.4 20.5 15.2c0 2.8-1.1 4.8-3.2 4.8s-2.7-2.1-2.7-4.8V8.3\"/>","mail":"<rect x=\"3.5\" y=\"5.5\" width=\"17\" height=\"13.2\" rx=\"1.9\"/><path d=\"M4.4 7.4l7.6 5.7l7.6-5.7\"/>","map":"<path d=\"M9.1 4.6L3.5 6.5v13l5.6-1.9l5.6 1.9l5.6-1.9V4.6l-5.6 1.9Z\"/><path d=\"M9.1 4.6v13M14.7 6.5v13\"/>","mask":"<path d=\"M3.5 7c3 1.3 5.8 1.8 8.5 1.8S17.5 8.3 20.5 7c0 6-2.5 10-5 10-1.4 0-2-1.5-3.5-1.5S9.9 17 8.5 17c-2.5 0-5-4-5-10Z\"/><path d=\"M7.5 11.5h2M14.5 11.5h2\"/>","medical":"<rect x=\"3.5\" y=\"7.1\" width=\"17\" height=\"12.3\" rx=\"1.9\"/><path d=\"M9.2 7.1V5.2a0.9 0.9 0 0 1 0.9-0.9h3.8a0.9 0.9 0 0 1 0.9 0.9v1.9M12 10.4v5.7M9.2 13.3h5.7\"/>","megaphone":"<path d=\"M3.6 9.5v4a1 1 0 0 0 1 1H7.1l9 4.5v-15L7.1 8.5H4.5a1 1 0 0 0-1 1Z\"/><path d=\"M7.1 14.5l1.3 5h2.4L10.1 15.1M19.1 9a3.2 3.2 0 0 1 0 5\"/>","members":"<circle cx=\"9.2\" cy=\"7.9\" r=\"3\"/><path d=\"M3.6 19.1c0-3.1 2.6-5.1 5.6-5.1s5.6 2.1 5.6 5.1M15.7 5a3 3 0 0 1 0 5.9M17.6 14.3c1.8 0.6 2.8 2.3 2.8 4.8\"/>","menu":"<path d=\"M3.5 6.7h17M3.5 12h17M3.5 17.3h17\"/>","mic":"<rect x=\"9.2\" y=\"3.5\" width=\"5.7\" height=\"10.4\" rx=\"2.8\"/><path d=\"M5.4 11.1a6.6 6.6 0 0 0 13.2 0M12 17.7v2.8\"/>","mic-off":"<rect x=\"9.2\" y=\"3.6\" width=\"5.7\" height=\"10.4\" rx=\"2.8\"/><path d=\"M5.5 11.1a6.6 6.6 0 0 0 11 5M18.7 11.1c0 0.8-0.1 1.5-0.4 2.2M12.1 17.7v2.8M4.5 4.5l15.1 15.1\"/>","minus":"<path d=\"M3.5 12h17\"/>","minus-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8 12h8\"/>","money":"<rect x=\"3.5\" y=\"6.6\" width=\"17\" height=\"10.7\" rx=\"1.8\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><path d=\"M6.6 9.8v0M17.4 14.2v0\"/>","moon":"<path d=\"M20.5 14.6A8.6 8.6 0 1 1 9.4 3.5a6.9 6.9 0 0 0 11.2 11.2Z\"/>","more":"<circle cx=\"5.2\" cy=\"12\" r=\"1.6\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/><circle cx=\"18.8\" cy=\"12\" r=\"1.6\"/>","mountain":"<path d=\"M3.6 17.5L9.3 6l3.7 6.3L15.5 9.1L20.3 17.5Z\"/>","move":"<path d=\"M11.9 3.6v16.7M3.6 11.9h16.7M9 6.5l2.9-2.9l2.9 2.9M9 17.3l2.9 2.9l2.9-2.9M6.5 9l-2.9 2.9l2.9 2.9M17.3 9l2.9 2.9l-2.9 2.9\"/>","mug":"<path d=\"M4.8 9.1h11v7a4 4 0 0 1-4 4h-3a4 4 0 0 1-4-4Z\"/><path d=\"M15.8 10.5H17.3a2.5 2.5 0 0 1 0 5h-1.5M8.3 3.5c-0.8 1 0.8 2 0 3M11.8 3.5c-0.8 1 0.8 2 0 3\"/>","music":"<path d=\"M8.6 17.7V5.6l11.1-2.1v12.2\"/><circle cx=\"6\" cy=\"17.7\" r=\"2.6\"/><circle cx=\"17.2\" cy=\"15.7\" r=\"2.6\"/>","mute":"<path d=\"M3.9 9.4h3.6L12.2 5.8v12.4l-4.6-3.6H3.9Z\"/><path d=\"M16.3 9.9l4.1 4.1M20.5 9.9l-4.1 4.1\"/>","news":"<path d=\"M3.5 3.5h13.8v14.9a2.1 2.1 0 0 0 2.1 2.1H5.6a2.1 2.1 0 0 1-2.1-2.1Z\"/><path d=\"M17.3 7.7h3.2v10.6a2.1 2.1 0 0 1-2.1 2.1M7.2 7.7h6.4M7.2 11.5h6.4M7.2 15.2h3.7\"/>","nodes":"<circle cx=\"12\" cy=\"5.4\" r=\"2.1\"/><circle cx=\"5.8\" cy=\"17.9\" r=\"2.1\"/><circle cx=\"18.2\" cy=\"17.9\" r=\"2.1\"/><path d=\"M11 7.4L6.8 15.9M13 7.4l4.3 8.6M7.9 17.9h8.3\"/>","open":"<path d=\"M14 3.8h6.3v6.3M20.2 3.8l-9.4 9.4M18.2 14.2v4.2a2.1 2.1 0 0 1-2.1 2.1H5.6a2.1 2.1 0 0 1-2.1-2.1V7.9a2.1 2.1 0 0 1 2.1-2.1h4.2\"/>","palette":"<path d=\"M12.2 3.8a8.4 8.4 0 1 0 0 16.8c1.1 0 1.7-0.9 1.7-1.6c0-1.1-0.9-1.5-0.9-2.6s0.9-1.6 1.9-1.6H16.9a3.7 3.7 0 0 0 3.7-3.7C20.6 7.2 16.9 3.8 12.2 3.8Z\"/><circle cx=\"8\" cy=\"11.4\" r=\"1.1\"/><circle cx=\"10.3\" cy=\"7.9\" r=\"1.1\"/><circle cx=\"14.5\" cy=\"7.9\" r=\"1.1\"/>","parking":"<rect x=\"3.7\" y=\"3.7\" width=\"16.7\" height=\"16.7\" rx=\"3\"/><path d=\"M9.6 17V7.2h3.4a3 3 0 0 1 0 5.9H9.6\"/>","pause":"<path d=\"M7.1 3.5v17M16.9 3.5v17\"/>","paw":"<path d=\"M7.8 18.5c0-3 1.9-5.3 4.2-5.3s4.2 2.3 4.2 5.3c0 1.4-1.1 2.1-2.1 2.1c-0.8 0-1.4-0.5-2.1-0.5s-1.3 0.5-2.1 0.5c-1.1 0-2.1-0.7-2.1-2.1Z\"/><circle cx=\"5.4\" cy=\"10.6\" r=\"1.9\"/><circle cx=\"9.2\" cy=\"5.7\" r=\"1.9\"/><circle cx=\"14.8\" cy=\"5.7\" r=\"1.9\"/><circle cx=\"18.6\" cy=\"10.6\" r=\"1.9\"/>","pencil":"<path d=\"M11.9 19.6h8.4M16.1 4.2a2 2 0 0 1 2.8 2.8L7.2 18.7l-3.7 0.9l0.9-3.7Z\"/>","phone":"<path d=\"M5.7 3.4h3.9l2 4.9l-2.5 1.5a10.8 10.8 0 0 0 4.9 4.9L15.6 12.3l4.9 2v3.9a2 2 0 0 1-2 2A15.8 15.8 0 0 1 3.8 5.4a2 2 0 0 1 2-2\"/>","phone-off":"<path d=\"M5.6 4.1h3.7l1.9 4.7l-2.4 1.4a10.3 10.3 0 0 0 4.7 4.7L15.1 12.5l4.7 1.9v3.7a1.9 1.9 0 0 1-1.9 1.9A15.1 15.1 0 0 1 3.8 5.9a1.9 1.9 0 0 1 1.9-1.9\"/><path d=\"M4.3 3.6l16.1 16.1\"/>","piggy":"<path d=\"M3.5 11.4c0-3.2 3.3-5.7 7.7-5.7c1.3 0 2.4 0.2 3.4 0.6L17.4 4.7v3.3c0.8 0.7 1.4 1.6 1.6 2.5h1.4v3.4H18.8c-0.5 1-1.3 1.7-2.3 2.3V19.1h-2.9v-1.9c-0.8 0.2-1.7 0.3-2.5 0.3c-0.8 0-1.6-0.1-2.3-0.3v1.9h-2.9v-2.9C4.4 15.1 3.5 13.4 3.5 11.4Z\"/><path d=\"M14.9 10.1h0M8.7 8.1h2.9\"/>","pin":"<path d=\"M12 20.7s-6.2-5.4-6.2-10.5a6.2 6.2 0 0 1 12.4 0C18.2 15.2 12 20.7 12 20.7Z\"/><circle cx=\"12\" cy=\"10\" r=\"2.3\"/>","plane":"<path d=\"M20 4L3.5 10.8l6.6 3.1l3.1 6.6Z\"/><path d=\"M10.1 13.9l9.9-9.9\"/>","play":"<path d=\"M5.6 3.6v16.9l13.4-8.5Z\"/>","plug":"<path d=\"M9.2 4v4.6M14.8 4v4.6M6.9 8.7h10.2v2.8a5.1 5.1 0 0 1-10.2 0ZM12 16.6V20.7\"/>","plus":"<path d=\"M12 3.5v17M3.5 12h17\"/>","plus-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 8v8M8 12h8\"/>","print":"<path d=\"M7.1 8.9V3.5h9.9V8.9\"/><rect x=\"3.6\" y=\"8.9\" width=\"16.7\" height=\"7.9\" rx=\"2\"/><path d=\"M7.1 13.8h9.9v6.4H7.1ZM16.4 11.9h0\"/>","puzzle":"<path d=\"M3.8 7h4.2a2.6 2.6 0 1 1 4.8 0h4.2v4.2a2.6 2.6 0 1 1 0 4.8v4.2h-4.2a2.6 2.6 0 1 0-4.8 0H3.8v-4.2a2.6 2.6 0 1 0 0-4.8Z\"/>","quote":"<path d=\"M9.8 6.2C5.8 7.2 3.6 10 3.6 13.9v3.3h5.6v-5.6h-5.6M20.3 6.2c-3.9 1.1-6.1 3.9-6.1 7.8v3.3h5.6v-5.6h-5.6\"/>","radio":"<rect x=\"3.5\" y=\"8.3\" width=\"16.8\" height=\"11.3\" rx=\"1.9\"/><path d=\"M7.3 8.3L16.7 3.9\"/><circle cx=\"15.3\" cy=\"14\" r=\"2.4\"/><path d=\"M6.8 12.4h3.8M6.8 15.4h3.8\"/>","ranking":"<path d=\"M3.5 19.9h17M4.5 19.9V13.8h4.7M9.2 19.9V10h5.7v9.9M14.9 19.9V15.7h4.7v4.3\"/><path d=\"M12 3.4l0.9 1.7l1.9 0.3l-1.4 1.3l0.3 1.9L12 7.7l-1.7 0.9l0.3-1.9L9.3 5.4l1.9-0.3Z\"/>","record":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>","recycle":"<path d=\"M7.8 18.2H5.7a1.2 1.2 0 0 1-1-1.8l2.3-3.9M10 5.5l0.9-1.5a1.2 1.2 0 0 1 2.1 0l2.3 3.9M17.7 12.4l1.6 2.7a1.2 1.2 0 0 1-1 1.8h-4.5\"/><path d=\"M11.1 16.5l1.8 1.8l-1.8 1.8M4.5 10.4l2.4-0.7l0.7 2.5M17.2 6.1l-0.7 2.5l-2.5-0.7\"/>","reply":"<path d=\"M9.2 5.8L4 11l5.1 5.1M4 11h10.3a6.2 6.2 0 0 1 6.2 6.2v1\"/>","restroom":"<circle cx=\"7.1\" cy=\"5.3\" r=\"1.7\"/><circle cx=\"16.4\" cy=\"5.3\" r=\"1.7\"/><path d=\"M11.7 3.6v16.7M5.6 20.3v-5.1H4.7V10.6A1.4 1.4 0 0 1 6.1 9.2h1.9a1.4 1.4 0 0 1 1.4 1.4v4.6H8.5V20.3M15.5 20.3v-3.7h-2.4l1.9-6.1a0.9 0.9 0 0 1 0.9-0.9h0.9a0.9 0.9 0 0 1 0.9 0.9l1.9 6.1H17.3v3.7\"/>","retry":"<path d=\"M3.7 12a8.2 8.2 0 0 1 14.1-5.9L20.2 8.4M20.2 3.8v4.6h-4.6M20.2 12a8.2 8.2 0 0 1-14.1 5.9L3.7 15.6M3.7 20.3v-4.6h4.6\"/>","rewind":"<path d=\"M20 6.4v11.2L12.4 12ZM10.9 6.4v11.2L3.3 12Z\"/>","road":"<path d=\"M8.2 3.5L4.4 20.5M15.8 3.5l3.8 17M12 4.4v2.4M12 10.6v2.8M12 17.2V19.6\"/>","robot":"<rect x=\"5.4\" y=\"8.3\" width=\"13.2\" height=\"10.4\" rx=\"2.8\"/><path d=\"M12 4.6v3.8M9.2 13.1h0M14.8 13.1h0M9.6 16.4h4.7M3.5 13.1v1.9M20.5 13.1v1.9\"/>","rocket":"<path d=\"M11.8 15.7L8.4 12.3C9.9 6.9 13.8 3.9 20.2 3.9C20.2 10.3 17.3 14.2 11.8 15.7ZM8.4 12.3L4.9 11.8L7.4 8.3h3.9M11.8 15.7l0.5 3.4l3.4-2.5v-3.9M6.4 17.7c-1.5 0-3 1.5-3 3c1.5 0 3-1.5 3-3Z\"/><circle cx=\"15.3\" cy=\"8.8\" r=\"1.5\"/>","route":"<circle cx=\"6\" cy=\"18\" r=\"2.4\"/><circle cx=\"18\" cy=\"6\" r=\"2.4\"/><path d=\"M8.4 18H16a3 3 0 0 0 0-6H8a3 3 0 0 1 0-6h7.6\"/>","rss":"<path d=\"M4 3.5a16.5 16.5 0 0 1 16.5 16.5M4 10.4A9.6 9.6 0 0 1 13.6 20.1\"/><path d=\"M4.6 19.4h0\" stroke-width=\"3.9\"/>","save":"<path d=\"M4.7 3.5h11.5l3.2 3.2v13.6H4.7Z\"/><path d=\"M7.8 3.5v5.2h7.3V3.5M7.8 20.2v-6.3h8.4v6.3\"/>","scale":"<path d=\"M12 4.3V19.5M8.5 19.5h6.9M5.5 7.4h13M12 4.3h0M3.7 13.4L5.9 7.8L8.1 13.4M15.9 13.4L18.1 7.8l2.2 5.6M3.7 13.4a2.2 2.2 0 0 0 4.3 0M15.9 13.4a2.2 2.2 0 0 0 4.3 0\"/>","scissors":"<circle cx=\"6\" cy=\"7\" r=\"2.6\"/><circle cx=\"6\" cy=\"17\" r=\"2.6\"/><path d=\"M8.2 8.6 20 18M8.2 15.4 20 6\"/>","scroll":"<path d=\"M8.3 3.8h10.1a1.9 1.9 0 0 1 1.9 1.9v1.5H17M8.3 3.8a1.9 1.9 0 0 0-1.9 1.9v11.7a2.9 2.9 0 0 1-2.9 2.9h10.7a2.9 2.9 0 0 0 2.9-2.9v-11.7a1.9 1.9 0 0 0-1.9-1.9M10.2 9.2h3.9M10.2 13h3.9\"/>","search":"<circle cx=\"10.6\" cy=\"10.6\" r=\"7\"/><path d=\"M20.4 20.4l-4.5-4.5\"/>","seedling":"<path d=\"M12 20.8v-9.8M12 11C12 6.7 9.3 4 4.4 4c0 4.3 2.7 7 7.6 7ZM12 13.7c0-4.3 2.7-7 7.6-7c0 4.3-2.7 7-7.6 7Z\"/>","server":"<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"7.4\" rx=\"2.1\"/><rect x=\"3.5\" y=\"13.1\" width=\"17\" height=\"7.4\" rx=\"2.1\"/><path d=\"M7.8 7.2h0M7.8 16.8h0\"/>","shapes":"<circle cx=\"7.5\" cy=\"7.7\" r=\"3.4\"/><path d=\"M16.4 3.7l3.9 6.9h-7.9ZM13.9 14.1h5.9v5.9h-5.9ZM3.6 20l3.4-5.9l3.4 5.9Z\"/>","share":"<path d=\"M12 15.2V3.3M7.4 8.1L12 3.3L16.6 8.1M4.9 12.9v6.1a1 1 0 0 0 1 1h12.2a1 1 0 0 0 1-1v-6.1\"/>","shelter":"<path d=\"M3.7 10.5L12 4l8.3 6.5M5.9 9.2v10.4M18.1 9.2v10.4\"/><circle cx=\"12\" cy=\"11\" r=\"1.6\"/><path d=\"M9.8 19.6v-3.9a2.2 2.2 0 0 1 4.3 0V19.6\"/>","shield":"<path d=\"M12 3.7L5.5 6.6v5.6c0 4.1 2.8 7.1 6.5 8.4c3.7-1.3 6.5-4.2 6.5-8.4V6.6Z\"/>","shirt":"<path d=\"M8.2 3.8L3.7 6.6l1.8 3.8l1.8-0.9v11.2h9.3V9.4l1.8 0.9l1.8-3.8l-4.7-2.7c-0.5 1.4-1.8 2.3-3.8 2.3S8.8 5.1 8.2 3.8Z\"/>","signature":"<path d=\"M3.9 14c2.4 0 3.3-8.4 5.6-8.4c1.4 0 0.9 5.6 2.4 5.6c0.9 0 1.4-2.4 2.4-2.4s0.8 1.9 1.9 1.9c0.8 0 1.4-0.6 1.9-1.1M3.9 17.8h16.7\"/>","skip":"<path d=\"M4.8 3.5l10.8 8.4l-10.8 8.4Z\"/><path d=\"M19.7 3.5v16.7\"/>","skull":"<path d=\"M12 3.7a6.5 6.5 0 0 0-6.5 6.5c0 2.2 1 3.6 2.4 4.6v2.8h8.4v-2.8c1.3-1 2.4-2.6 2.4-4.6a6.5 6.5 0 0 0-6.5-6.5Z\"/><circle cx=\"9.6\" cy=\"10.7\" r=\"1.3\"/><circle cx=\"14.4\" cy=\"10.7\" r=\"1.3\"/><path d=\"M10.6 17.7v2.8M13.4 17.7v2.8\"/>","slash":"<path d=\"M3.6 3.6l16.7 16.7\"/>","sliders":"<path d=\"M3.5 6.8h10M18.7 6.8H20.3M3.5 17.2h3.6M12.4 17.2H20.3\"/><circle cx=\"16.2\" cy=\"6.8\" r=\"2.4\"/><circle cx=\"9.8\" cy=\"17.2\" r=\"2.4\"/>","smile":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8.5 14a4 4 0 0 0 7 0M9 9.5h.01M15 9.5h.01\"/>","snow":"<path d=\"M12 3.5v17M4.6 7.8l14.7 8.5M4.6 16.3l14.7-8.5M9.6 4.9L12 7.3l2.4-2.4M9.6 19.1L12 16.7l2.4 2.4\"/>","sort":"<path d=\"M3.5 5.8h9.2M3.5 12h6.2M3.5 18.2h3M17.5 4.8v14.4M14.3 16.2l3 3l3-3\"/>","sort-asc":"<path d=\"M3.4 5.4h3M3.4 11.6h6.3M3.4 17.9h9.3M17.5 4.3v14.6M14.3 16l3 3l3-3\"/>","spark":"<path d=\"M10.4 3.6l1.7 4.8L17 10.1l-4.8 1.7L10.4 16.7l-1.7-4.8L3.9 10.1l4.8-1.7ZM17 14.8l0.8 2.1L19.8 17.6l-2.1 0.8L17 20.3l-0.8-2.1L14.3 17.6l2.1-0.8Z\"/>","square":"<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"2.7\"/>","star":"<path d=\"M12 4l2.6 5.3l5.7 0.6l-4.3 3.9l1.2 5.7L12 16.8l-5.2 2.9l1.2-5.7l-4.3-3.9l5.7-0.6Z\"/>","steps":"<path d=\"M9.7 5.7h11M9.7 11.8h11M9.7 17.8h11\"/><path d=\"M3.7 5.7l1.5 1.5L7.7 4.8M3.7 11.8l1.5 1.5L7.7 10.8M3.7 17.8l1.5 1.5L7.7 16.8\"/>","stop":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m8.5 8.5 7 7\"/>","store":"<path d=\"M3.7 8.8L5.3 3.7h13.4L20.3 8.8M3.7 8.8h16.5v1.6a2.8 2.8 0 0 1-5.4 0a2.8 2.8 0 0 1-5.6 0A2.8 2.8 0 0 1 3.7 10.4ZM4.8 12.9v7.2h14.5v-7.2M9.9 20.1v-4.1h4.1v4.1\"/>","storm":"<path d=\"M7.8 16a3.8 3.8 0 1 1 0.8-7.4A4.5 4.5 0 0 1 17.4 10.5a3.1 3.1 0 0 1-0.4 6.2\"/><path d=\"M12.9 12.2l-2.1 3.3h2.5L11.3 18.9\"/>","sun":"<circle cx=\"11.9\" cy=\"11.9\" r=\"3.4\"/><path d=\"M11.9 3.5v1.8M11.9 18.6v1.8M6 6l1.2 1.2M16.7 16.7l1.2 1.2M3.5 11.9h1.8M18.6 11.9h1.8M6 17.9l1.2-1.2M16.7 7.2l1.2-1.2\"/>","swap":"<path d=\"M3.5 7.8h14.9l-3.7-3.7M20.5 16.3H5.6l3.7 3.7\"/>","sword":"<path d=\"M20.3 3.7v3.7L10.4 17.3L6.7 13.6L16.7 3.7Z\"/><path d=\"M5.2 12L12 18.8M8.3 15.7L3.6 20.4\"/>","table":"<rect x=\"3.5\" y=\"4.3\" width=\"17\" height=\"15.1\" rx=\"1.9\"/><path d=\"M3.5 9.5h17M3.5 14.7h17M9.2 9.5V19.4M14.8 9.5V19.4\"/>","tack":"<path d=\"M9.3 4h5.6l-0.9 4.6l2.8 2.8H7.4l2.8-2.8ZM12 11.4v9.3\"/>","tag":"<path d=\"M3.8 11.2V3.8h7.4l9.3 9.3l-7.4 7.4Z\"/><circle cx=\"8\" cy=\"8\" r=\"1.2\"/>","target":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"12\" r=\"5\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\"/>","tent":"<path d=\"M3.5 18.4h17M12 4.9L4.8 18.4M12 4.9l7.2 13.4M12 12.5L9.3 18.4M12 12.5l2.7 5.8\"/>","terminal":"<rect x=\"3.7\" y=\"4.6\" width=\"16.7\" height=\"14.9\" rx=\"1.9\"/><path d=\"M7.4 9.2l2.8 2.8l-2.8 2.8M12.9 14.8h3.7\"/>","text":"<path d=\"M5.2 20.3L10.9 3.6h2.1l5.7 16.7M7.4 14h9.2\"/>","thumbs-up":"<path d=\"M7.3 10.4v9.6H4.8a1 1 0 0 1-1-1v-7.6a1 1 0 0 1 1-1Z\"/><path d=\"M7.3 10.4L10.9 3.3a2.2 2.2 0 0 1 2.5 2.6L12.7 9.4H18.5a2 2 0 0 1 2 2.4l-1.3 6.6a2 2 0 0 1-2 1.6H7.3\"/>","ticket":"<path d=\"M3.6 7.4h16.7v2.8a1.9 1.9 0 0 0 0 3.7v2.8H3.6v-2.8a1.9 1.9 0 0 0 0-3.7Z\"/><path d=\"M13.8 7.4v9.3\"/>","timeline":"<path d=\"M3.5 12h0.9M8.2 12h1.9M13.9 12h1.9M19.6 12h0.9\"/><circle cx=\"6.3\" cy=\"12\" r=\"1.9\"/><circle cx=\"12\" cy=\"12\" r=\"1.9\"/><circle cx=\"17.7\" cy=\"12\" r=\"1.9\"/><path d=\"M6.3 10.1V5.9M12 13.9v4.3M17.7 10.1V5.9\"/>","toolbox":"<rect x=\"3.5\" y=\"8.1\" width=\"17\" height=\"11.3\" rx=\"1.9\"/><path d=\"M9.2 8.1V5.8A1.4 1.4 0 0 1 10.6 4.3h2.8A1.4 1.4 0 0 1 14.8 5.8V8.1M3.5 12.8h17M8.2 11.4v2.8M15.8 11.4v2.8\"/>","train":"<rect x=\"6.4\" y=\"3.8\" width=\"11.2\" height=\"12.1\" rx=\"2.8\"/><path d=\"M6.4 10.3h11.2M9.2 13.1h0M14.8 13.1h0M8.7 20.5l1.9-3.3M15.3 20.5l-1.9-3.3\"/>","trash":"<path d=\"M4.1 6.7h15.8M10 10.6v5.9M14 10.6v5.9M6.1 6.7l1 11.8a2 2 0 0 0 2 2h5.9a2 2 0 0 0 2-2l1-11.8M9 6.7V3.7h5.9v3\"/>","tree":"<path d=\"M12.1 3.6L7 10.6h2.8L5.6 16.6h13l-4.2-6h2.8ZM12.1 16.6v3.7\"/>","trend-down":"<path d=\"M3.2 7.2l5.6 5.6l3.8-3.8l7.4 7.4\"/><path d=\"M14.4 16.6h5.6v-5.6\"/>","trend-up":"<path d=\"M3.2 16.8L8.8 11.3l3.8 3.8l7.4-7.4\"/><path d=\"M14.4 7.4h5.6v5.6\"/>","trophy":"<path d=\"M7.9 4h8.4v5.2a4.1 4.1 0 0 1-8.4 0ZM7.9 6.1H4.7a3.2 3.2 0 0 0 3.2 4.1M16.2 6.1h3.2a3.2 3.2 0 0 1-3.2 4.1M12 13.4v4.1M7.9 20.8h8.4\"/>","tv":"<rect x=\"3.5\" y=\"7.8\" width=\"17\" height=\"11.6\" rx=\"1.8\"/><path d=\"M8.4 4.3l3.6 3.6l3.6-3.6\"/>","umbrella":"<path d=\"M3.8 12.5a8.4 8.4 0 0 1 16.6 0ZM12.1 12.5v6a1.9 1.9 0 0 1-3.7 0M12.1 4.1v0\"/>","undo":"<path d=\"M9.2 14.2L4 8.9l5.2-5.2\"/><path d=\"M4 8.9h11a5.8 5.8 0 0 1 0 11.5H11.3\"/>","up":"<path d=\"M3.7 16.1l8.3-8.3l8.3 8.3\"/>","upload":"<path d=\"M12 20.8V9.2M6.8 14.5l5.2-5.2l5.2 5.2M4.7 4h14.7\"/>","user":"<circle cx=\"12\" cy=\"7.4\" r=\"3.8\"/><path d=\"M4.3 20.5c0-3.9 3.4-6.6 7.7-6.6s7.7 2.6 7.7 6.6\"/>","user-check":"<circle cx=\"9.2\" cy=\"8.1\" r=\"2.8\"/><path d=\"M4 19c0-2.9 2.4-4.9 5.4-4.9s5.4 1.9 5.4 4.9M15.4 10.8l1.8 1.8l3.6-3.6\"/>","user-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/><path d=\"M6.6 18.3a6.5 6.5 0 0 1 10.8 0\"/>","user-lock":"<circle cx=\"9.8\" cy=\"7.3\" r=\"3.3\"/><path d=\"M3.5 18.8c0-3.4 2.8-5.7 6.2-5.7c1.2 0 2.2 0.3 3.1 0.7\"/><rect x=\"14.6\" y=\"14.5\" width=\"5.7\" height=\"4.8\" rx=\"1\"/><path d=\"M16 14.5v-1.2a1.5 1.5 0 0 1 2.9 0v1.2\"/>","user-minus":"<circle cx=\"10.1\" cy=\"8\" r=\"3.3\"/><path d=\"M4 19.3c0-3.3 2.7-5.7 6.1-5.7c1.1 0 2.2 0.3 3 0.7\"/><path d=\"M15.1 17h5.7\"/>","user-off":"<circle cx=\"12\" cy=\"8.2\" r=\"3.5\"/><path d=\"M5.1 20c0-3.6 3-5.9 6.9-5.9s6.9 2.3 6.9 5.9\"/><path d=\"M3.7 3.7l16.7 16.7\"/>","user-pen":"<circle cx=\"9.8\" cy=\"8\" r=\"3.3\"/><path d=\"M3.8 19.1c0-3.3 2.7-5.6 6-5.6c1.1 0 2.1 0.3 3 0.7\"/><path d=\"M19.1 12.1l1.4 1.4l-4.7 4.7l-1.9 0.5l0.5-1.9Z\"/>","user-tag":"<circle cx=\"10\" cy=\"7.6\" r=\"3.3\"/><path d=\"M3.8 18.9c0-3.3 2.8-5.6 6.1-5.6c1.1 0 2.2 0.3 3.1 0.7\"/><path d=\"M14.2 14.2h3.7l2.4 2.4l-2.4 2.4h-3.7Z\"/><path d=\"M16.1 16.5h0\"/>","video":"<rect x=\"3.4\" y=\"6.4\" width=\"12.3\" height=\"11.3\" rx=\"1.9\"/><path d=\"M15.6 10.2l4.7-2.8v9.4l-4.7-2.8\"/>","volume":"<path d=\"M3.5 9.5h3.7L11.8 5.8v12.6l-4.7-3.7H3.5Z\"/><path d=\"M15.5 9.5a3.7 3.7 0 0 1 0 5.2M18.1 6.9a7.3 7.3 0 0 1 0 10.5\"/>","walk":"<circle cx=\"12.3\" cy=\"5.1\" r=\"1.7\"/><path d=\"M8.8 20.3l2.4-5.5l1.9 2.2V20.3M11 14.8l0.9-5.2l-2.7 1.4l-1.4 2.7M11.9 9.6l1.8 2.7l2.7 0.9\"/>","wallet":"<path d=\"M3.5 6.8A2.7 2.7 0 0 1 6.2 4.2H18.4v4.2M3.5 6.8V18a2.1 2.1 0 0 0 2.1 2.1h14.9V8.4H6.2A2.7 2.7 0 0 1 3.5 6.8Z\"/><path d=\"M16.2 14.2h0\"/>","water":"<path d=\"M3.5 10.2c2.1 0 2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8s2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8M3.5 15.6c2.1 0 2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8s2.1-1.8 4.3-1.8s2.1 1.8 4.2 1.8\"/>","wave":"<path d=\"M3.7 16.2c2.1 0 2.1-1.7 4.2-1.7s2.1 1.7 4.2 1.7s2.1-1.7 4.2-1.7s2.1 1.7 4.2 1.7\"/><path d=\"M6.5 12.7A5.6 5.6 0 0 1 16.4 9.4c-1.9-0.4-3.5 0.3-4 2\"/>","weight":"<circle cx=\"12\" cy=\"5.2\" r=\"2\"/><path d=\"M7.1 8.7h9.9l3 11.3H4.1Z\"/>","wifi":"<path d=\"M3.7 9.4a12.4 12.4 0 0 1 16.7 0M6.4 12.5a8.4 8.4 0 0 1 11.5 0M9.1 15.6a4.4 4.4 0 0 1 6.2 0M12.1 18.6h0\"/>","wind":"<path d=\"M3.5 9.9h10.4a2.8 2.8 0 1 0-2.8-2.8M3.5 13.7h14.2a2.8 2.8 0 1 1-2.8 2.8M3.5 17.5h6.6\"/>","window":"<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2\"/><path d=\"M3.5 9h17\"/>","window-restore":"<rect x=\"3.5\" y=\"8.5\" width=\"12\" height=\"11\" rx=\"2\"/><path d=\"M8.5 8.5v-2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2h-3\"/>","wizard":"<path d=\"M3.6 20h16.7M6.3 20L9.9 9.1L15.7 3.3L14.1 10.1L17.8 20\"/><path d=\"M8.4 15.4h7.3\"/>","wrench":"<path d=\"M14.6 3.6a5.2 5.2 0 0 0-4.6 7.3L3.7 17.3V20.3h3.1l6.4-6.4a5.2 5.2 0 0 0 7.3-4.6l-3.2 1.2l-2.5-2.5l1.2-3.2Z\"/>","x-circle":"<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"m9 9 6 6M15 9l-6 6\"/>","zap":"<path d=\"M13.4 3.5L5.9 12.9h5.7l-0.9 7.6l7.6-9.4h-5.7Z\"/>"};
+ const S = {"airplane":"<path d=\"M11.8 2.6c1.3 0 2 1.2 2 3V9.5l7.2 4.2v2.5L13.8 13.7v3.5l2 1.5v2.5L11.8 19.7l-3.7 1.2v-2.5l2-1.5v-3.5l-7.2 2.5v-2.5L9.8 9.5V5.3c0-1.8 0.7-3 2-3Z\"/>","alert":"<path fill-rule=\"evenodd\" d=\"M10.5 4.1a1.7 1.7 0 0 1 3 0l7.7 13.3a1.7 1.7 0 0 1-1.5 2.6H4.3a1.7 1.7 0 0 1-1.5-2.6ZM11 8.8h2v5.2h-2ZM12 15.2a1.2 1.2 0 1 1 0 2.4a1.2 1.2 0 0 1 0-2.4Z\"/>","alert-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.7 6.9h2.5v7.1h-2.5ZM12.9 15.3a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","archive":"<rect x=\"2.6\" y=\"3.4\" width=\"18.8\" height=\"5.4\" rx=\"1.2\"/><path fill-rule=\"evenodd\" d=\"M4.4 10h15.2v9.2a1.6 1.6 0 0 1-1.6 1.6H6a1.6 1.6 0 0 1-1.6-1.6ZM9.6 12.4v1.8h4.8v-1.8Z\"/>","bell":"<path d=\"M5.2 15.4V9.6a6.8 6.8 0 0 1 13.7 0v5.7l1.9 2.6H3.3ZM9.7 19.3h4.6a2.3 2.3 0 0 1-4.6 0Z\"/>","book":"<path d=\"M4.3 5.2A2.4 2.4 0 0 1 6.8 2.7h12.2v14.6H6.8a2.4 2.4 0 0 0-2.4 2.4Z\"/><path class=\"ln\" d=\"M7.2 20.2h11.2\"/>","book-open":"<path d=\"M10.9 5.8C8.8 4.4 6 3.8 2.5 4.5v14c3.5-0.6 6.3 0 8.4 1.5ZM13.1 5.8c2.1-1.5 5-2 8.4-1.4v14c-3.5-0.6-6.3 0-8.4 1.5Z\"/>","box":"<path d=\"M12 2.7l9.4 4.5l-9.4 4.5l-9.4-4.5ZM2.6 8.9l8.6 4.1v8.2l-8.6-4.3ZM21.4 8.9l-8.6 4.1v8.2l8.6-4.3Z\"/>","brain":"<path d=\"M8.9 3.8a3.2 3.2 0 0 0-3.2 3.1a3.1 3.1 0 0 0-2.2 5.3a3.1 3.1 0 0 0 2.2 5.2a3.2 3.2 0 0 0 5.7 1.3V5.6A2.3 2.3 0 0 0 8.9 3.8Z\"/><path d=\"M15.1 3.8a3.2 3.2 0 0 1 3.2 3.1a3.1 3.1 0 0 1 2.2 5.3a3.1 3.1 0 0 1-2.2 5.2a3.2 3.2 0 0 1-5.7 1.3V5.6A2.3 2.3 0 0 1 15.1 3.8Z\"/>","bridge":"<path d=\"M5.7 4.6h2.6v15.4H5.7ZM15.7 4.6h2.6v15.4h-2.6ZM3.4 14.6h17.2v2.8H3.4Z\"/><path class=\"ln\" d=\"M4 10c1.6 0 2.5-2.3 3-5c2.4 5.2 7.6 5.2 10 0c.5 2.7 1.4 5 3 5M12 10.9V15\"/>","briefcase":"<path d=\"M2.7 9.1a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.8H2.7ZM2.7 13.1h7.2v1.5h4.3v-1.5h7.2V17.9a2.5 2.5 0 0 1-2.5 2.5H5.2a2.5 2.5 0 0 1-2.5-2.5Z\"/><path class=\"ln\" d=\"M9.1 6.6V5.7A1.5 1.5 0 0 1 10.5 4.2h2.9A1.5 1.5 0 0 1 14.9 5.7v0.9\"/>","bug":"<path fill-rule=\"evenodd\" d=\"M12 7a4.8 4.8 0 0 1 4.8 4.8v3.4a4.8 4.8 0 0 1-9.6 0v-3.4A4.8 4.8 0 0 1 12 8Zm-0.7 4.4v7.4h1.4v-7.4Z\"/><path d=\"M9.4 5.8a2.6 2.6 0 0 1 5.2 0Z\"/><path class=\"ln\" d=\"M7.2 12.5H3.8M20.2 12.5h-3.4M7.6 9.4L5 7M16.4 9.4L19 7M7.6 16.6L5 19M16.4 16.6L19 19\"/>","burst":"<path d=\"M12.1 2.6l2 4.6l4.7-1.9l-1.9 4.7l4.6 2l-4.6 2l1.9 4.7l-4.7-1.9l-2 4.6l-2-4.6l-4.7 1.9l1.9-4.7L2.7 12l4.6-2l-1.9-4.7l4.7 1.9Z\"/>","calendar":"<path fill-rule=\"evenodd\" d=\"M4.1 8.1a2 2 0 0 1 2-2h11.8a2 2 0 0 1 2 2V19.5a2 2 0 0 1-2 2H6.1a2 2 0 0 1-2-2Zm2.2 3.9V19.3h11.4v-7.3Z\"/><path class=\"ln\" d=\"M9 3.9v3.5M15 3.9v3.5\"/>","camera":"<path fill-rule=\"evenodd\" d=\"M2.5 7.8a1.9 1.9 0 0 1 1.9-1.9h2.6L8.8 3.3h6.3l1.8 2.6h2.6A1.9 1.9 0 0 1 21.5 7.8v10.7a1.9 1.9 0 0 1-1.9 1.9H4.4A1.9 1.9 0 0 1 2.5 18.5Zm9.5 2a3.6 3.6 0 1 0 0 7.2a3.6 3.6 0 0 0 0-7.2Z\"/>","camera-flip":"<path fill-rule=\"evenodd\" d=\"M2.5 7.8a1.9 1.9 0 0 1 1.9-1.9h2.6L8.8 3.3h6.3l1.8 2.6h2.6A1.9 1.9 0 0 1 21.5 7.8v10.7a1.9 1.9 0 0 1-1.9 1.9H4.4A1.9 1.9 0 0 1 2.5 18.5ZM7.7 11.7A4.5 4.5 0 0 1 16.3 11.7L13.9 12.6A2 2 0 0 0 10.1 12.6ZM16.3 14.8A4.5 4.5 0 0 1 7.7 14.8L10.1 14A2 2 0 0 0 13.9 14Z\"/>","camera-off":"<path d=\"M8.5 4.6L9 3.8h6.1l1.7 2.5h2.5A1.8 1.8 0 0 1 21.2 8.1v9.1ZM3.8 7.3L16.7 20.2H4.8A1.8 1.8 0 0 1 3 18.4V8.1Z\"/><path class=\"ln\" d=\"M4 3.8l16.2 16.2\"/>","car":"<path fill-rule=\"evenodd\" d=\"M5.6 5.2h12.7l2.7 5.5H3ZM2.6 12.2h18.7v4.5H2.6ZM5.9 14.4a1.1 1.1 0 1 0 2.3 0a1.1 1.1 0 1 0-2.3 0ZM15.8 14.4a1.1 1.1 0 1 0 2.3 0a1.1 1.1 0 1 0-2.3 0ZM5 17.5h2.7v1.8H5ZM16.3 17.5h2.7v1.8h-2.7Z\"/>","card":"<path fill-rule=\"evenodd\" d=\"M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z\"/>","care":"<path d=\"M12 11s-4.3-2.6-4.3-5.6a2.3 2.3 0 0 1 4.3-1.5a2.3 2.3 0 0 1 4.3 1.5c0 3-4.3 5.6-4.3 5.6Z\"/><path class=\"ln\" d=\"M3.8 13.8v6M3.8 15.2h3.1l3.3 2.7h7.5a1.7 1.7 0 0 0 0-3.4h-3.9\"/>","cart":"<path d=\"M6.3 7h15l-2.5 8.3H8.1Z\"/><circle cx=\"9.5\" cy=\"19.4\" r=\"1.6\"/><circle cx=\"17\" cy=\"19.4\" r=\"1.6\"/><path class=\"ln\" d=\"M3.8 4.8H5.8l2.3 10.5\"/>","cc":"<path fill-rule=\"evenodd\" d=\"M5.6 4.6h12.7a3 3 0 0 1 3 3v8.8a3 3 0 0 1-3 3h-12.7a3 3 0 0 1-3-3v-8.8a3 3 0 0 1 3-3ZM10.8 9.5A3.2 3.2 0 1 0 10.8 14.5L9.6 13A1.3 1.3 0 1 1 9.6 11ZM17.4 9.5A3.2 3.2 0 1 0 17.4 14.5L16.2 13A1.3 1.3 0 1 1 16.2 11Z\"/>","chart":"<path class=\"ln\" d=\"M4 3.5v16.2h16.2\"/><path d=\"M7 14.9L11 10.3l3 2.5l5.2-6.2V17.7H7Z\"/>","chat":"<path d=\"M2.7 4.7A1.8 1.8 0 0 1 4.5 3h15.2a1.8 1.8 0 0 1 1.8 1.8v10.9a1.8 1.8 0 0 1-1.8 1.8H8.3L2.7 21.8Z\"/>","chat-off":"<path d=\"M8.1 4.6H19a1.6 1.6 0 0 1 1.6 1.6v9.5a1.6 1.6 0 0 1-0.4 1ZM3.4 7.3L12.9 16.8H8.3l-4.9 4.6Z\"/><path class=\"ln\" d=\"M4 4.2l16 16\"/>","check-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM17.3 8.9l1.6 1.6l-7 7l-4.1-4.1l1.6-1.6l2.6 2.6Z\"/>","child":"<circle cx=\"12\" cy=\"5.2\" r=\"2.6\"/><path class=\"ln\" d=\"M7.7 10L12 8.6l4.3 1.4M12 8.6v5.8M9.1 20.1l2.9-5.8l2.9 5.8\"/>","chip":"<path fill-rule=\"evenodd\" d=\"M8.6 7.2h6.8a1.4 1.4 0 0 1 1.4 1.4v6.8a1.4 1.4 0 0 1-1.4 1.4H8.6a1.4 1.4 0 0 1-1.4-1.4V8.6a1.4 1.4 0 0 1 1.4-1.4Zm1.7 3.1v3.4h3.4v-3.4Z\"/><path class=\"ln\" d=\"M10.2 4v3.2M13.8 4v3.2M10.2 16.8V20M13.8 16.8V20M4 10.2h3.2M4 13.8h3.2M16.8 10.2H20M16.8 13.8H20\"/>","circle":"<circle cx=\"12\" cy=\"12\" r=\"9.5\"/>","city":"<path fill-rule=\"evenodd\" d=\"M5.4 7.7h4.6v10.9H5.4Zm1.9 2.2v1.4h1.2v-1.4Zm0 2.9v1.4h1.2v-1.4Z\"/><path fill-rule=\"evenodd\" d=\"M10.7 3.4h5.1v15.2h-5.1Zm1.7 2.4v1.4h1.4V5.8Zm0 2.9v1.4h1.4V8.7Zm0 2.9v1.4h1.4v-1.4Z\"/><path d=\"M16.5 11.3h2.2v7.4h-2.2Z\"/><path class=\"ln\" d=\"M3.9 18.6h16.1\"/>","clapper":"<path fill-rule=\"evenodd\" d=\"M2.6 5.9L19.9 2.7l0.9 4.3L3.2 8.7ZM7 5.1L9.2 8.1l2.6-0.2L9.6 4.6ZM12.6 4l2.2 3.6l2.6-0.3L15.2 3.6Z\"/><path d=\"M3.1 9.9h18.2v9a1.6 1.6 0 0 1-1.6 1.6h-15a1.6 1.6 0 0 1-1.6-1.6Z\"/>","clipboard":"<path fill-rule=\"evenodd\" d=\"M7.5 4.2h9a2 2 0 0 1 2 2v13.1a2 2 0 0 1-2 2H7.5a2 2 0 0 1-2-2V6.3a2 2 0 0 1 2-2ZM9.1 9.9v1.6h5.8v-1.6Zm0 3.9v1.6h3.9v-1.6Z\"/><rect x=\"8.7\" y=\"2.5\" width=\"6.6\" height=\"3.7\" rx=\"1.2\"/>","clipboard-check":"<path fill-rule=\"evenodd\" d=\"M7.5 4.2h9a2 2 0 0 1 2 2v13.1a2 2 0 0 1-2 2H7.5a2 2 0 0 1-2-2V6.3a2 2 0 0 1 2-2ZM8 13.1L11 16.1l5-5l-1.6-1.6l-3.4 3.4l-1.5-1.5Z\"/><rect x=\"8.7\" y=\"2.5\" width=\"6.6\" height=\"3.7\" rx=\"1.2\"/>","clock":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.9 6.6h2.3v5l3.3 2l-1.1 2l-4.3-2.7Z\"/>","cloud":"<path d=\"M7.9 18.2h9.6a4.2 4.2 0 0 0 0.6-8.3A6.1 6.1 0 0 0 6.5 9.2A4.5 4.5 0 0 0 7.9 18.2Z\"/>","cloud-off":"<path d=\"M10.1 5.7A6 6 0 0 1 17.9 9.8a4.1 4.1 0 0 1 2.8 6.5ZM6.6 9.1L15.5 18H7.9A4.4 4.4 0 0 1 6.4 9.2Z\"/><path class=\"ln\" d=\"M5.1 4.2l15 15\"/>","coin":"<path fill-rule=\"evenodd\" d=\"M13 2.6a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM12 5.8h2.1v1.2c1.1 0.2 2.1 0.8 2.6 1.7l-1.7 1c-0.3-0.6-1-1-1.8-1c-0.9 0-1.5 0.4-1.5 1s0.5 0.8 1.8 1.1c1.8 0.4 3.5 1 3.5 3.1c0 1.4-1 2.5-2.8 2.8V18h-2.1v-1.3c-1.2-0.2-2.3-0.9-2.8-2l1.7-1c0.4 0.7 1.1 1.1 2.1 1.1c1 0 1.6-0.4 1.6-1s-0.6-0.8-2-1.1c-1.7-0.4-3.4-1-3.4-3c0-1.3 1-2.4 2.7-2.7Z\"/>","columns":"<path d=\"M2.6 6.3a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v1.5H2.6ZM2.6 9.9h8.3v10.4H5.3a2.7 2.7 0 0 1-2.7-2.7ZM13 9.9h8.3v7.7a2.7 2.7 0 0 1-2.7 2.7H13Z\"/>","compass":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM17.4 7.7L14.9 14.1L8.5 16.5L11 10.1Z\"/>","compress":"<path d=\"M9.7 9.7H2.7L9.7 2.7ZM14.3 9.7h7l-7-7ZM9.7 14.3H2.7l7 7ZM14.3 14.3h7l-7 7Z\"/>","computer":"<rect x=\"2.6\" y=\"3.4\" width=\"18.8\" height=\"12.8\" rx=\"2.2\"/><path class=\"ln\" d=\"M8 20h8M12 16.2v3.8\"/>","contrast":"<path fill-rule=\"evenodd\" d=\"M12.4 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 2.1a7.2 7.2 0 0 1 0 14.4Z\"/>","cookie":"<path fill-rule=\"evenodd\" d=\"M21.6 12.4a9.4 9.4 0 1 1-10-10a3.4 3.4 0 0 0 4.4 3.9a3.4 3.4 0 0 0 5.5 5.9ZM7 9.1a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM10.9 14a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM6.5 15.7a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0ZM14.8 15.7a1.3 1.3 0 1 0 2.7 0a1.3 1.3 0 1 0-2.7 0Z\"/>","copy":"<rect x=\"7.5\" y=\"7.5\" width=\"13.8\" height=\"13.8\" rx=\"2.5\"/><path class=\"ln\" d=\"M16.4 7.5V5.9a2.1 2.1 0 0 0-2.1-2.1H5.9a2.1 2.1 0 0 0-2.1 2.1v8.5a2.1 2.1 0 0 0 2.1 2.1h1.7\"/>","couch":"<path d=\"M7.1 4.2h9.7A2.5 2.5 0 0 1 19.4 6.7v1.9a3.1 3.1 0 0 0-3.1 3.1v0.1H7.7v-0.1A3.1 3.1 0 0 0 4.6 8.7V6.7A2.5 2.5 0 0 1 7.1 4.2ZM2.7 11.6a2.5 2.5 0 0 1 5.1 0v1.9h8.6V11.6a2.5 2.5 0 0 1 5.1 0v5.5H2.7Z\"/><path class=\"ln\" d=\"M5.2 17.1v1.9M18.8 17.1v1.9\"/>","crown":"<path d=\"M2.6 7.3L7.4 11.5L12 4.1L16.6 11.5l4.8-4.2l-2 11.7H4.6Z\"/>","cubes":"<path d=\"M12 2.3L7.8 4.4v4.8l4.2 2.1l4.2-2.1V4.4ZM6.8 12.1L2.7 14.2v4.8l4.2 2.1l4.2-2.1v-4.8ZM17.2 12.1l-4.2 2.1v4.8l4.2 2.1l4.2-2.1v-4.8Z\"/>","database":"<ellipse cx=\"12\" cy=\"5.7\" rx=\"7.9\" ry=\"3.2\"/><path d=\"M4.1 7.5a7.9 3.2 0 0 0 15.9 0v4.3a7.9 3.2 0 0 1-15.9 0ZM4.1 13.4a7.9 3.2 0 0 0 15.9 0v4.7a7.9 3.2 0 0 1-15.9 0Z\"/>","dice":"<path fill-rule=\"evenodd\" d=\"M6.2 2.7h11.5a3.6 3.6 0 0 1 3.6 3.6v11.5a3.6 3.6 0 0 1-3.6 3.6H6.2a3.6 3.6 0 0 1-3.6-3.6V6.2a3.6 3.6 0 0 1 3.6-3.6ZM6.2 8.2a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM13.8 8.2a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM10 12a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM6.2 15.8a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0ZM13.8 15.8a2 2 0 1 0 3.9 0a2 2 0 1 0-3.9 0Z\"/>","dish":"<path d=\"M2.7 9.7A11.7 11.7 0 0 0 14.4 21.4Z\"/><path class=\"ln\" d=\"M8.8 15.3l4.9-4.9M14.2 4a5.8 5.8 0 0 1 5.8 5.8M14.2 8.1a1.8 1.8 0 0 1 1.8 1.8\"/>","donate":"<path fill-rule=\"evenodd\" d=\"M12 2.2a5.9 5.9 0 1 0 0 11.8a5.9 5.9 0 0 0 0-11.8Zm-0.8 3.4h1.7v5.1h-1.7ZM2.9 15h18.2v6H2.9ZM7.8 17.1v1.6h8.5V17.1Z\"/>","door":"<path fill-rule=\"evenodd\" d=\"M14.3 4.5L6.2 3v17.1l8.2-1.5ZM10.2 11.5a1 1 0 1 0 2 0a1 1 0 1 0-2 0Z\"/><path class=\"ln\" d=\"M15.5 5.3h1.4a0.9 0.9 0 0 1 0.9 0.9v13.3M15.5 19.5H20M4 19.5h2.1\"/>","download":"<path d=\"M10.6 2.3h2.5v7h4.7L11.9 15.4l-5.9-5.9h4.7Z\"/><path class=\"ln\" d=\"M4.5 19.7h14.9\"/>","drive":"<path fill-rule=\"evenodd\" d=\"M5.3 11.4h13.5a2.7 2.7 0 0 1 2.7 2.7v3a2.7 2.7 0 0 1-2.7 2.7H5.3a2.7 2.7 0 0 1-2.7-2.7v-3a2.7 2.7 0 0 1 2.7-2.7ZM16.8 14.4a1.1 1.1 0 1 1 0 2.3a1.1 1.1 0 0 1 0-2.3ZM13.7 14.4a1.1 1.1 0 1 1 0 2.3a1.1 1.1 0 0 1 0-2.3Z\"/><path class=\"ln\" d=\"M4.1 11.9L6.8 4.7h10.4l2.8 7.2\"/>","drop":"<path d=\"M12 2.2s7 7.4 7 12.6a7 7 0 0 1-13.9 0C5 9.6 12 2.2 12 2.2Z\"/>","eraser":"<path d=\"M14 3.9l6.1 6.1-5.2 5.2-6.1-6.1ZM7.4 10l6.2 6.2-3.2 3.2H6.1l-2.9-2.9a1.6 1.6 0 0 1 0-2.3Z\"/><path class=\"ln\" d=\"M13 19.4h7\"/>","expand":"<path d=\"M2.7 2.7h7L2.7 9.7ZM21.3 2.7h-7l7 7ZM2.7 21.3h7l-7-7ZM21.3 21.3h-7l7-7Z\"/>","eye":"<path fill-rule=\"evenodd\" d=\"M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z\"/><circle cx=\"12\" cy=\"12\" r=\"1.6\"/>","eye-off":"<path d=\"M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z\"/><path class=\"ln\" d=\"M4.6 4.6l14.8 14.8\"/>","fast-forward":"<path d=\"M3 5.5v13.1L12 12ZM12.7 5.5v13.1L21.8 12Z\"/>","file":"<path d=\"M5.8 2.4h7.6v5.2h5V21.2H5.8ZM15 2.7l3.1 3.3h-3.1Z\"/>","file-code":"<path fill-rule=\"evenodd\" d=\"M5.8 2.4h7.6v5.2h5V21.2H5.8ZM9.8 11l1.5 1.4l-1.6 1.7l1.6 1.7l-1.5 1.4l-2.9-3.1ZM14.4 11l-1.5 1.4l1.6 1.7l-1.6 1.7l1.5 1.4l2.9-3.1Z\"/><path d=\"M15 2.7l3.1 3.3h-3.1Z\"/>","film":"<path fill-rule=\"evenodd\" d=\"M4.8 3.6h14.4a2.3 2.3 0 0 1 2.3 2.3v12.3a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 18.2V5.8A2.3 2.3 0 0 1 4.8 3.6Zm3.8 2v12.9h6.8V5.5ZM4.4 6v2h2.1V6Zm0 5v1.8h2.1v-1.8Zm0 4.9v2h2.1v-2Zm13.1-10v2h2.1V6Zm0 5v1.8h2.1v-1.8Zm0 4.9v2h2.1v-2Z\"/>","finish":"<path d=\"M6.5 4.2h3.9v4.6H6.5ZM14.8 4.2h4a0.9 0.9 0 0 1 0.9 0.9v3.7h-4.9ZM10.5 8.6h4.5v4.6H10.5Z\"/><path class=\"ln\" d=\"M6 20.3V4.1\"/>","fire":"<path fill-rule=\"evenodd\" d=\"M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z\"/>","fish":"<path fill-rule=\"evenodd\" d=\"M8.7 12c1.9-3.5 4.6-5.3 7.6-5.3c2.8 0 4.6 2.2 5.4 5.3c-0.8 3.1-2.6 5.3-5.4 5.3c-3 0-5.7-1.8-7.6-5.3ZM16.2 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0Z\"/><path class=\"ln\" d=\"M8.7 12L4.4 8.9M8.7 12l-4.3 3.1\"/>","flag":"<path class=\"ln\" d=\"M7.2 20.5V4.3\"/><path d=\"M7.8 4.1h10.9l-2 4.1l2 4.1H7.8Z\"/>","focus":"<circle cx=\"12\" cy=\"12\" r=\"3.6\"/><path class=\"ln\" d=\"M3.8 9V6.1A2.3 2.3 0 0 1 6.1 3.8H9M15 3.8h2.9A2.3 2.3 0 0 1 20.2 6.1V9M20.2 15v2.9a2.3 2.3 0 0 1-2.3 2.3H15M9 20.2H6.1A2.3 2.3 0 0 1 3.8 17.9V15\"/>","folder":"<path d=\"M2.7 6.4a2.1 2.1 0 0 1 2.1-2.1h4.4l2.1 2.1h8.1a2.1 2.1 0 0 1 2.1 2.1v8.7a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1Z\"/>","folder-tree":"<path d=\"M9.6 5h4l1 1.5h6.4v5.3H9.6ZM9.6 14.3h4l1 1.5h6.4v5.3H9.6Z\"/><path class=\"ln\" d=\"M4.1 3.6v13.2a1 1 0 0 0 1 1H9.6M4.1 8.8H9.6\"/>","food":"<path d=\"M4.7 3.3h1.5v4.7h0.6V3.3h1.4v4.7h0.6V3.3h1.5v4.9A2.9 2.9 0 0 1 8.6 10.8V21.7H6.5V10.8a2.9 2.9 0 0 1-1.8-2.7ZM18.9 21.7h-2.3v-7.4h-3V10.6c0-3.9 1.7-6.6 5.2-7.7Z\"/>","game":"<path fill-rule=\"evenodd\" d=\"M7.6 6.3h8.8a5.8 5.8 0 0 1 0 11.5H7.6a5.8 5.8 0 0 1 0-11.5Zm-1.4 3.7v1.6H4.7v1.8h1.6v1.6H7.9v-1.6h1.6v-1.8H7.9v-1.6Zm9.2 1a1.2 1.2 0 1 0 0 2.3a1.2 1.2 0 0 0 0-2.3Zm2.5 1.6a1.2 1.2 0 1 0 0 2.3a1.2 1.2 0 0 0 0-2.3Z\"/>","gauge":"<path fill-rule=\"evenodd\" d=\"M3.7 18A9.4 9.4 0 1 1 19.4 19.6ZM15 8.6l-2.2 5.6l-2.1 0.3l-0.4-2.1Z\"/>","gavel":"<path d=\"M11.3 5.5L5.5 11.3l6.1 6.1l5.8-5.8Z\"/><path class=\"ln\" d=\"M13.7 4.2l5 5M3.8 19.1l5.7-5.7M13.7 19.1h6.3\"/>","gear":"<path fill-rule=\"evenodd\" d=\"M18.2 14.6a1.4 1.4 0 0 0 0.3 1.7l0.1 0.1a1.7 1.7 0 1 1-2.7 2.7l-0.1-0.1a1.4 1.4 0 0 0-1.7-0.3a1.4 1.4 0 0 0-0.9 1.4V19.6a1.7 1.7 0 1 1-3.8 0v-0.1a1.4 1.4 0 0 0-1-1.4a1.4 1.4 0 0 0-1.7 0.3l-0.1 0.1a1.7 1.7 0 1 1-2.7-2.7l0.1-0.1a1.4 1.4 0 0 0 0.3-1.7a1.4 1.4 0 0 0-1.4-0.9H4.6a1.7 1.7 0 1 1 0-3.8h0.1a1.4 1.4 0 0 0 1.4-1a1.4 1.4 0 0 0-0.3-1.7l-0.1-0.1a1.7 1.7 0 1 1 2.7-2.7l0.1 0.1a1.4 1.4 0 0 0 1.7 0.3H9.6a1.4 1.4 0 0 0 0.9-1.4V4.6a1.7 1.7 0 1 1 3.8 0v0.1a1.4 1.4 0 0 0 0.9 1.4a1.4 1.4 0 0 0 1.7-0.3l0.1-0.1a1.7 1.7 0 1 1 2.7 2.7l-0.1 0.1a1.4 1.4 0 0 0-0.3 1.7V9.6a1.4 1.4 0 0 0 1.4 0.9H19.6a1.7 1.7 0 1 1 0 3.8h-0.1a1.4 1.4 0 0 0-1.4 0.9ZM12.1 9.3a2.8 2.8 0 1 0 0 6.5a2.8 2.8 0 0 0 0-6.5Z\"/>","gem":"<path d=\"M6.4 3.9h11.2l3.8 5.3l-9.4 11.6L2.6 9.2Z\"/>","ghost":"<path fill-rule=\"evenodd\" d=\"M3.4 21.3V9.9a8.7 8.7 0 0 1 17.2 0v11.5l-2.9-2.1l-2.9 2.1l-2.9-2.1l-2.9 2.1l-2.9-2.1ZM8.8 7.8a1.6 1.6 0 1 0 0 3.1a1.6 1.6 0 0 0 0-3.1Zm6.2 0a1.6 1.6 0 1 0 0 3.1a1.6 1.6 0 0 0 0-3.1Z\"/>","gift":"<path d=\"M3.1 8.6h17.7v3.3H3.1ZM4.4 12.9h6.6v8.2H5.4a1 1 0 0 1-1-1ZM13 12.9h6.6v7.2a1 1 0 0 1-1 1H13Z\"/><path class=\"ln\" d=\"M12 8.6c-1.5-3.1-5.1-4.1-5.1-1.5S12 8.6 12 8.6s5.1-1 5.1-3.6s-3.6-1.5-5.1 3.6\"/>","globe":"<path d=\"M2.6 11.1A9.5 9.5 0 0 1 12 2.6a4.5 9.5 0 0 0-4.5 8.5ZM21.4 11.1A9.5 9.5 0 0 0 12 2.6a4.5 9.5 0 0 1 4.5 8.5ZM2.6 12.9A9.5 9.5 0 0 0 12 21.5a4.5 9.5 0 0 1-4.5-8.5ZM21.4 12.9A9.5 9.5 0 0 1 12 21.5a4.5 9.5 0 0 0 4.5-8.5ZM12 2.6a2.7 9.5 0 0 0-2.7 8.5h5.3A2.7 9.5 0 0 0 12 2.6ZM12 21.5a2.7 9.5 0 0 1-2.7-8.5h5.3A2.7 9.5 0 0 1 12 21.5Z\"/>","grid":"<rect x=\"2.7\" y=\"2.7\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"13.3\" y=\"2.7\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"2.7\" y=\"13.3\" width=\"8\" height=\"8\" rx=\"2.2\"/><rect x=\"13.3\" y=\"13.3\" width=\"8\" height=\"8\" rx=\"2.2\"/>","group":"<rect x=\"6.9\" y=\"6.8\" width=\"6.4\" height=\"4.8\" rx=\"1.1\"/><rect x=\"10.8\" y=\"12.5\" width=\"6.4\" height=\"4.6\" rx=\"1.1\"/><path class=\"ln\" d=\"M4 7.6V4h3.6M16.5 4h3.6v3.6M20 16.4v3.6h-3.6M7.6 20H4v-3.6\"/>","hammer":"<path d=\"M13.1 2.5l7.5 7.5l-3.7 3.7l-7.5-7.5ZM12.9 8.9L3.7 18.1a2.1 2.1 0 0 0 2.9 2.9l9.2-9.2Z\"/>","hand":"<path d=\"M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z\"/>","handshake":"<path d=\"M2.3 9.2h2.7v6.8H2.3ZM19 9.2h2.7v6.8H19Z\"/><path class=\"ln\" d=\"M5.6 10.8h0.3l3.4-2.6l2.9 1.3L14.6 8.1l3.4 2.6h0.4M5.9 10.8l5.4 5.4a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.4 12.8l-3.9-3.9l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2\"/>","headphones":"<path class=\"ln\" d=\"M4 14.5V12a8 8 0 0 1 16 0v2.5\"/><rect x=\"2.6\" y=\"13.4\" width=\"5.4\" height=\"7.6\" rx=\"1.8\"/><rect x=\"16\" y=\"13.4\" width=\"5.4\" height=\"7.6\" rx=\"1.8\"/>","heart":"<path d=\"M12 21.6s-9.3-5.7-9.3-13a5.3 5.3 0 0 1 9.3-3.6a5.3 5.3 0 0 1 9.3 3.6c0 7.4-9.3 13-9.3 13Z\"/>","heart-broken":"<path fill-rule=\"evenodd\" d=\"M12 21.6s-9.3-5.7-9.3-13a5.3 5.3 0 0 1 9.3-3.6a5.3 5.3 0 0 1 9.3 3.6c0 7.4-9.3 13-9.3 13ZM10.9 5.9l2.7 0.6l-1.4 2.7l3.6 2.5l-2.6 5.9l-2.5-1.1l1.5-3.7l-3.7-2.5Z\"/>","help":"<path fill-rule=\"evenodd\" d=\"M13 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM9.3 9.4A3.7 3.7 0 1 1 13.9 12.8v1.6h-2.1V10.9h1a1.6 1.6 0 1 0-1.6-1.6ZM13 15.8a1.3 1.3 0 1 1 0 2.6a1.3 1.3 0 0 1 0-2.6Z\"/>","history":"<path d=\"M5.8 5.8A9.1 9.1 0 1 1 3.2 12.2h3a6.1 6.1 0 1 0 1.8-4.3ZM2.5 2.7v7.2h7.2ZM11.2 8.1h2.2v3.7l2.7 1.6l-1.1 1.8l-3.8-2.3Z\"/>","home":"<path d=\"M2.7 10.4L12 2.3l9.3 8.1v9.5a1.1 1.1 0 0 1-1.1 1.1h-5.6v-6.9h-5.4v6.9H3.8a1.1 1.1 0 0 1-1.1-1.1Z\"/>","hot-tub":"<circle cx=\"8.2\" cy=\"5.4\" r=\"2.4\"/><path d=\"M2.6 10.9h18.8v4.2a5.1 5.1 0 0 1-5.1 5.1h-8.5a5.1 5.1 0 0 1-5.1-5.1Z\"/><path class=\"ln\" d=\"M6.3 10.9v-0.6A2.4 2.4 0 0 1 8.7 8H9.2M13.5 9.4c0.8-0.9-0.8-1.9 0-2.8M17.3 9.4c0.8-0.9-0.8-1.9 0-2.8\"/>","id":"<path fill-rule=\"evenodd\" d=\"M4.8 4.6h14.4a2.3 2.3 0 0 1 2.3 2.3v10.3a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 17.2V6.9A2.3 2.3 0 0 1 4.8 4.6Zm4.1 4.2a2.2 2.2 0 1 0 0 4.3a2.2 2.2 0 0 0 0-4.3Zm-3.2 7.7h6.4c-0.6-1.7-1.8-2.7-3.2-2.7s-2.6 0.9-3.2 2.7Zm8.8-7.2v1.5h4V9.4Zm0 3.6v1.5h4v-1.5Z\"/>","idea":"<path d=\"M8.3 14.9A6.5 6.5 0 1 1 15.7 14.9c-0.7 0.6-1.3 1.3-1.4 2.2H9.7c-0.1-0.9-0.7-1.6-1.4-2.2Z\"/><path class=\"ln\" d=\"M9.6 20.5h4.8\"/>","image":"<path fill-rule=\"evenodd\" d=\"M2.8 6.1a2.7 2.7 0 0 1 2.7-2.7h13.3A2.7 2.7 0 0 1 21.5 6.1v12.3a2.7 2.7 0 0 1-2.7 2.7H5.4A2.7 2.7 0 0 1 2.8 18.4Zm6.2 2.2a2 2 0 1 0 0 3.9a2 2 0 0 0 0-3.9Zm7.5 3.5l-8.3 7.8h10.7a1.5 1.5 0 0 0 1.5-1.5v-3.1Z\"/>","inbox":"<path fill-rule=\"evenodd\" d=\"M2.7 12.4L5.2 3.7h13.6l2.5 8.8V17.9a1.6 1.6 0 0 1-1.6 1.6H4.2A1.6 1.6 0 0 1 2.7 17.9ZM6.4 5.6L4.6 11.5h3.8l1.5 2.4h4.3l1.5-2.4h3.8L17.6 5.6Z\"/>","info":"<path fill-rule=\"evenodd\" d=\"M12.9 2.6a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM11.7 10.5h2.5V16.9h-2.5ZM12.9 6.4a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","invite":"<circle cx=\"8.8\" cy=\"7.7\" r=\"3.2\"/><path d=\"M2.9 19.2c0-3.4 2.7-5.8 5.8-5.8s5.8 2.4 5.8 5.8Z\"/><path class=\"ln\" d=\"M17.6 7.8v5.3M15 10.5h5.3\"/>","key":"<path fill-rule=\"evenodd\" d=\"M8.3 10.1a5.4 5.4 0 1 1 0 10.9a5.4 5.4 0 0 1 0-10.9Zm0 3.6a1.9 1.9 0 1 0 0 3.8a1.9 1.9 0 0 0 0-3.8Z\"/><path class=\"ln\" d=\"M11.7 12.2l8.7-8.7M16.7 7.2l3.1 3.1M14.4 9.5l2.1 2.1\"/>","keyboard":"<path fill-rule=\"evenodd\" d=\"M4.8 5.7h14.4A2.3 2.3 0 0 1 21.5 8v8a2.3 2.3 0 0 1-2.3 2.3H4.8A2.3 2.3 0 0 1 2.5 16V8a2.3 2.3 0 0 1 2.3-2.3ZM5.3 9.1h1.9v1.9H5.3ZM8.2 9.1h1.9v1.9H8.2ZM11 9.1h1.9v1.9h-1.9ZM13.9 9.1h1.9v1.9h-1.9ZM16.8 9.1h1.9v1.9h-1.9ZM7.8 13.3h8.4v1.7H7.8Z\"/>","laugh":"<path fill-rule=\"evenodd\" d=\"M13 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM7.9 8.1l3.5 1.7l-3.5 1.7l-0.7-1.4l0.7-0.4l-0.7-0.4ZM18 8.1l-3.5 1.7l3.5 1.7l0.7-1.4l-0.7-0.4l0.7-0.4ZM8.5 13.5h8.9a4.4 4.4 0 0 1-8.9 0Z\"/>","layers":"<path d=\"M12 4.3l8.6 5l-8.6 5l-8.6-5Z\"/><path class=\"ln\" d=\"M3.9 13.9l8.1 4.5l8.1-4.5\"/>","leaf":"<path fill-rule=\"evenodd\" d=\"M5.4 18.6c0-8.9 5.2-14.2 15.7-15.7c-1 10.4-6.3 15.7-15.7 15.7Zm3.1-2L16.8 7.1l-9.5 8.5Z\"/><path class=\"ln\" d=\"M3.7 20.3L6 18\"/>","lifebuoy":"<path fill-rule=\"evenodd\" d=\"M13.1 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 5.3a4.1 4.1 0 1 1 0 8.2a4.1 4.1 0 0 1 0-8.2ZM15.5 16.2L18.4 19.1L20.2 17.3L17.2 14.3ZM10.8 16.2L7.9 19.1L6 17.3L9 14.3ZM15.5 7.8L18.4 4.9L20.2 6.7L17.2 9.7ZM10.8 7.8L7.9 4.9L6 6.7L9 9.7Z\"/>","live":"<circle cx=\"12\" cy=\"12\" r=\"2.5\"/><path class=\"ln\" d=\"M8.5 8.5a4.9 4.9 0 0 0 0 6.9M15.5 8.5a4.9 4.9 0 0 1 0 6.9M6.2 6.2a8.2 8.2 0 0 0 0 11.5M17.8 6.2a8.2 8.2 0 0 1 0 11.5\"/>","lock":"<path d=\"M4.6 11.1a1.6 1.6 0 0 1 1.6-1.6h11.5a1.6 1.6 0 0 1 1.6 1.6v8.4a1.6 1.6 0 0 1-1.6 1.6H6.2A1.6 1.6 0 0 1 4.6 19.6Z\"/><path class=\"ln\" d=\"M7.9 9.4V6.8a4.1 4.1 0 0 1 8 0V9.4\"/>","mail":"<path d=\"M2.5 7.3v-0.4A2.3 2.3 0 0 1 4.8 4.6h14.4A2.3 2.3 0 0 1 21.5 6.9v0.4l-8.7 5.6a1.6 1.6 0 0 1-1.7 0ZM2.5 9.4v7.6A2.3 2.3 0 0 0 4.8 19.4h14.4a2.3 2.3 0 0 0 2.3-2.3V9.4l-8 5.2a2.7 2.7 0 0 1-3 0Z\"/>","map":"<path d=\"M2.6 6.1 8.3 4.2v14l-5.7 1.9ZM9.7 4.2l4.6 1.6v14l-4.6-1.6ZM15.7 5.8l5.7-1.9v14l-5.7 1.9Z\"/>","mask":"<path fill-rule=\"evenodd\" d=\"M2.7 6.1c3.3 1.4 6.4 2.1 9.4 2.1s6.1-0.6 9.4-2.1c0 7.1-2.9 11.7-5.8 11.7c-1.5 0-2.2-1.5-3.6-1.5s-2.1 1.5-3.6 1.5c-2.9 0-5.8-4.6-5.8-11.7ZM6.8 11.6a1.6 1.1 0 1 0 3.3 0a1.6 1.1 0 1 0-3.3 0ZM14 11.6a1.6 1.1 0 1 0 3.3 0a1.6 1.1 0 1 0-3.3 0Z\"/>","medical":"<path fill-rule=\"evenodd\" d=\"M5.3 6.3h13.5a2.7 2.7 0 0 1 2.7 2.7v8.7a2.7 2.7 0 0 1-2.7 2.7H5.3a2.7 2.7 0 0 1-2.7-2.7V9a2.7 2.7 0 0 1 2.7-2.7ZM10.9 10h2.3v2.2h2.2v2.3h-2.2V16.7h-2.3v-2.2H8.7v-2.3h2.2Z\"/><path class=\"ln\" d=\"M9.2 6.3V5.3a0.9 0.9 0 0 1 0.9-0.9h3.8a0.9 0.9 0 0 1 0.9 0.9v1\"/>","megaphone":"<path d=\"M2.7 9.1a1.1 1.1 0 0 1 1.1-1.1h2.7l9.7-4.8v16.1l-9.7-4.8H3.8A1.1 1.1 0 0 1 2.7 13.2Z\"/><path class=\"ln\" d=\"M6.6 14.5l1.2 5M18.8 8.5a3.4 3.4 0 0 1 0 5.4\"/>","members":"<circle cx=\"9.1\" cy=\"7.1\" r=\"3.5\"/><path d=\"M2.6 19.6c0-3.7 2.9-6.3 6.4-6.3s6.4 2.6 6.4 6.3Z\"/><circle cx=\"16.5\" cy=\"6.6\" r=\"2.8\"/><path d=\"M16.7 12.4c2.8 0.4 4.7 2.7 4.7 6.2V19.6h-4.3c0-2.8-1-5.1-2.7-6.5Z\"/>","mic":"<path d=\"M8.9 5.8a3.1 3.1 0 0 1 6.2 0V10.8a3.1 3.1 0 0 1-6.2 0Z\"/><path class=\"ln\" d=\"M5.9 10.8a6.1 6.1 0 0 0 12.3 0M12 16.9V20.2\"/>","mic-off":"<path d=\"M9 5.4A3.1 3.1 0 0 1 15.2 5.8V10.7a3.1 3.1 0 0 1-0.1 0.8Z\"/><path class=\"ln\" d=\"M5.4 10.7a6.6 6.6 0 0 0 11 5M18.7 10.7c0 0.8-0.1 1.5-0.4 2.2M12.1 17.3v2.8M4.5 4.1l15.1 15.1\"/>","minus-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM7.9 10.9v2.5h10.2v-2.5Z\"/>","money":"<path fill-rule=\"evenodd\" d=\"M4.8 5.7h14.4a2.1 2.1 0 0 1 2.1 2.1v8.4a2.1 2.1 0 0 1-2.1 2.1H4.8a2.1 2.1 0 0 1-2.1-2.1V7.8a2.1 2.1 0 0 1 2.1-2.1ZM12 8.9a3.1 3.1 0 1 0 0 6.3a3.1 3.1 0 0 0 0-6.3ZM6.3 8.7a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Zm11.4 4.6a1 1 0 1 0 0 2.1a1 1 0 0 0 0-2.1Z\"/><circle cx=\"12\" cy=\"12\" r=\"1.4\"/>","moon":"<path d=\"M21.7 14.6A9.7 9.7 0 1 1 9.4 2.3a8 8 0 0 0 12.3 12.3Z\"/>","more":"<circle cx=\"4.8\" cy=\"12\" r=\"2.2\"/><circle cx=\"12\" cy=\"12\" r=\"2.2\"/><circle cx=\"19.2\" cy=\"12\" r=\"2.2\"/>","mountain":"<path d=\"M2.8 18.1L9.2 5.3l4.1 7.1L16.1 8.9L21.5 18.1Z\"/>","mug":"<path d=\"M3.8 8.9h12.2v7.6a4.6 4.6 0 0 1-4.6 4.6h-3a4.6 4.6 0 0 1-4.6-4.6Z\"/><path class=\"ln\" d=\"M16 11H16.9a2.5 2.5 0 0 1 0 5h-0.9M7.9 3.7c-0.8 1 0.8 2 0 3M11.4 3.7c-0.8 1 0.8 2 0 3\"/>","music":"<path d=\"M7.6 5.4l13.3-2.5v3.5l-13.3 2.5Z\"/><path class=\"ln\" d=\"M8.8 17.9V6.5M19.7 15.6V4.2\"/><circle cx=\"5.5\" cy=\"17.9\" r=\"3.2\"/><circle cx=\"16.7\" cy=\"15.6\" r=\"3.2\"/>","mute":"<path d=\"M2.9 8.8h4l5.5-4.2v14.8l-5.5-4.2H2.9Z\"/><path class=\"ln\" d=\"M15.5 9.6l4.7 4.7M20.3 9.6l-4.7 4.7\"/>","news":"<path fill-rule=\"evenodd\" d=\"M2.8 2.6h14.2v15.2a2.2 2.2 0 0 0 2.2 2.2H5.1A2.2 2.2 0 0 1 2.8 18.9ZM6.6 6.6h6.8v1.7H6.6Zm0 3.7h6.8v1.7H6.6Zm0 3.7h4v1.7H6.6Z\"/><path class=\"ln\" d=\"M17.1 7.7H19.8V17.9a2.1 2.1 0 0 1-2.1 2.1\"/>","nodes":"<circle cx=\"12\" cy=\"5.2\" r=\"3\"/><circle cx=\"5.6\" cy=\"18\" r=\"3\"/><circle cx=\"18.4\" cy=\"18\" r=\"3\"/><path class=\"ln\" d=\"M10.9 7.6L6.8 15.5M13.1 7.6l4.1 7.9M8.4 18h7.1\"/>","palette":"<path fill-rule=\"evenodd\" d=\"M12.1 2.7a9.4 9.4 0 1 0 0 18.8c1.3 0 2-0.9 2-1.9c0-1.2-1-1.5-1-2.5s0.8-1.6 2-1.6H17.3a4.4 4.4 0 0 0 4.4-4.4C21.7 6.7 17.4 2.7 12.1 2.7ZM7.8 9.7a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Zm2.5-3.7a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Zm4.6 0a1.5 1.5 0 1 1 0 3a1.5 1.5 0 0 1 0-3Z\"/>","parking":"<path fill-rule=\"evenodd\" d=\"M6.2 2.6h11.6a3.6 3.6 0 0 1 3.6 3.6v11.6a3.6 3.6 0 0 1-3.6 3.6H6.2a3.6 3.6 0 0 1-3.6-3.6V6.2a3.6 3.6 0 0 1 3.6-3.6ZM8.4 18V6H13a4 4 0 0 1 0 8h-2.4v4ZM10.6 8.2v3.6H13a1.8 1.8 0 0 0 0-3.6Z\"/>","pause":"<rect x=\"4.8\" y=\"2.6\" width=\"5.1\" height=\"18.8\" rx=\"1.5\"/><rect x=\"14.2\" y=\"2.6\" width=\"5.1\" height=\"18.8\" rx=\"1.5\"/>","paw":"<path d=\"M6.9 18.5c0-3.5 2.2-6.3 5.1-6.3s5.1 2.8 5.1 6.3c0 1.8-1.3 2.9-2.9 2.9c-0.9 0-1.5-0.6-2.2-0.6s-1.3 0.6-2.2 0.6c-1.6 0-2.9-1.1-2.9-2.9Z\"/><circle cx=\"5.1\" cy=\"10.2\" r=\"2.6\"/><circle cx=\"9.1\" cy=\"5.1\" r=\"2.6\"/><circle cx=\"14.9\" cy=\"5.1\" r=\"2.6\"/><circle cx=\"18.9\" cy=\"10.2\" r=\"2.6\"/>","pencil":"<path d=\"M15.6 3.1a2.2 2.2 0 0 1 3.2 3.2L6.9 18.1l-4.5 1.2l1.2-4.5Z\"/><path class=\"ln\" d=\"M11.8 19.7H20.1\"/>","phone":"<path d=\"M5.1 2.4h4.9l2.4 6l-2.7 1.6a10.7 10.7 0 0 0 4.2 4.2l1.6-2.7l6 2.4v4.9a2.3 2.3 0 0 1-2.3 2.3A17.3 17.3 0 0 1 2.8 4.6a2.3 2.3 0 0 1 2.3-2.3Z\"/>","piggy":"<path fill-rule=\"evenodd\" d=\"M2.6 11.4c0-3.6 3.7-6.5 8.7-6.5c1.4 0 2.7 0.2 3.9 0.7L18.3 3.8v3.7c0.9 0.8 1.5 1.7 1.7 2.8h1.5v3.8H20c-0.5 1.1-1.4 2-2.6 2.6V20.1h-3.3v-2.2c-0.9 0.2-1.8 0.3-2.8 0.3c-0.9 0-1.7-0.1-2.6-0.3v2.2h-3.3v-3.3C3.7 15.5 2.6 13.6 2.6 11.4ZM14.5 9.8a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0ZM8.3 6.8v1.5h3.7V6.8Z\"/>","pin":"<path fill-rule=\"evenodd\" d=\"M12 2.8a7.1 7.1 0 0 0-7.1 7.1c0 5.5 7.1 11.8 7.1 11.8s7.1-6.3 7.1-11.8A7.1 7.1 0 0 0 12 2.8Zm0 4.5a2.5 2.5 0 1 1 0 5.1a2.5 2.5 0 0 1 0-5.1Z\"/>","plane":"<path d=\"M21.2 2.9L2.4 10.7l6.9 3.2ZM21.2 2.9l-11 12l3.2 6.9Z\"/>","play":"<path d=\"M5.1 3.5v17a0.9 0.9 0 0 0 1.3 0.8l12.8-8.5a0.9 0.9 0 0 0 0-1.6L6.5 2.7a0.9 0.9 0 0 0-1.3 0.8Z\"/>","plug":"<path d=\"M6.5 8h10.9v3.3a5.4 5.4 0 0 1-10.9 0Z\"/><path class=\"ln\" d=\"M9.2 4.2v3.8M14.6 4.2v3.8M11.9 16.8v3.5\"/>","plus-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm-1.2 4.2h2.5v3.8H18v2.5h-3.8V17.1h-2.5v-3.8H7.9v-2.5h3.8Z\"/>","print":"<path d=\"M6.2 2.6h11.5v4.4H6.2ZM2.6 11a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v4.1a2.7 2.7 0 0 1-2.7 2.7h-0.3v-4.5H5.6v4.5h-0.3A2.7 2.7 0 0 1 2.6 15.1ZM7.1 14.7h9.9v6.7H7.1Z\"/>","puzzle":"<path d=\"M2.8 5.4h5a2.9 2.9 0 1 1 5.8 0h5v5a2.9 2.9 0 1 1 0 5.8v5h-5a2.9 2.9 0 1 0-5.8 0H2.8v-5a2.9 2.9 0 1 0 0-5.8Z\"/>","radio":"<path fill-rule=\"evenodd\" d=\"M5.2 7.8h13.6a2.5 2.5 0 0 1 2.5 2.5v7.8a2.5 2.5 0 0 1-2.5 2.5H5.2A2.5 2.5 0 0 1 2.6 18.1v-7.8A2.5 2.5 0 0 1 5.2 7.8ZM12.9 14.2a2.5 2.5 0 1 0 5.1 0a2.5 2.5 0 1 0-5.1 0ZM6.1 11.6v2h4.7v-2ZM6.1 15v2h4.7v-2Z\"/><path class=\"ln\" d=\"M7.1 7.8L16.9 4\"/>","ranking":"<path d=\"M3.5 13.7h4.9V9.9h7.1v5.7h4.9v5.4H3.5ZM12 2.2l1 2l2.2 0.3l-1.6 1.6l0.4 2.2L12 7.5l-2 1l0.4-2.2l-1.6-1.6l2.2-0.3Z\"/>","record":"<path fill-rule=\"evenodd\" d=\"M13.2 2.7a9.3 9.3 0 1 0 0 18.5a9.3 9.3 0 0 0 0-18.5Zm0 3.3a6 6 0 1 1 0 11.9a6 6 0 0 1 0-11.9Z\"/><circle cx=\"13.2\" cy=\"12\" r=\"3.7\"/>","restroom":"<circle cx=\"7.2\" cy=\"5.1\" r=\"1.8\"/><circle cx=\"16.2\" cy=\"5.1\" r=\"1.8\"/><path d=\"M6 9h1.8a1.5 1.5 0 0 1 1.5 1.5v4.7H8.6v5H5.5v-5H4.7v-4.7A1.5 1.5 0 0 1 6 9Z\"/><path d=\"M15.7 9.4h1.1a0.9 0.9 0 0 1 0.9 0.7l1.9 6.3H17.4v3.6h-2.3v-3.6h-2.1l1.9-6.3a0.9 0.9 0 0 1 0.9-0.7Z\"/><path class=\"ln\" d=\"M11.6 3.7v16.3\"/>","retry":"<path class=\"ln\" d=\"M4 12a8 8 0 0 1 13.4-5.9M20 12a8 8 0 0 1-13.4 5.9\"/><path d=\"M21.3 2.8v7h-7ZM2.7 21.2v-7h7Z\"/>","rewind":"<path d=\"M21 5.5v13.1L12 12ZM11.3 5.5v13.1L2.2 12Z\"/>","robot":"<path fill-rule=\"evenodd\" d=\"M8.5 8.7h6.9a3.1 3.1 0 0 1 3.1 3.1v4.3A3.1 3.1 0 0 1 15.5 19.3H8.5A3.1 3.1 0 0 1 5.4 16.2v-4.3A3.1 3.1 0 0 1 8.5 8.7Zm0.9 3.8a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4Zm5.2 0a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4ZM9.7 16v1.3h4.5v-1.3Z\"/><path class=\"ln\" d=\"M12 5.3v3.5M3.9 13.1v2.8M20.2 13.1v2.8\"/>","rocket":"<path fill-rule=\"evenodd\" d=\"M11.9 16.6L7.4 12.2C9.1 6.1 13.6 2.9 21.1 2.9c0 7.5-3.2 12-9.2 13.7ZM13.6 8.7a1.7 1.7 0 1 0 3.5 0a1.7 1.7 0 1 0-3.5 0Z\"/><path d=\"M3.7 12.2L6.8 7.5h3.5L6.6 12.6ZM11.4 17.4L11.9 20.3l4.6-3.3v-3.5ZM6.3 17.7c-2 0-3.9 2-3.9 3.9c2 0 3.9-2 3.9-3.9Z\"/>","save":"<path fill-rule=\"evenodd\" d=\"M4.4 2.7h12.4l3.5 3.5V20.8a0.7 0.7 0 0 1-0.7 0.7H4.4a0.7 0.7 0 0 1-0.7-0.7V3.4a0.7 0.7 0 0 1 0.7-0.7Zm3.4 1.4v4.9h7.4V4.1ZM7.2 13.6v6.4h9.6v-6.4Z\"/>","scissors":"<path fill-rule=\"evenodd\" d=\"M6.2 3.8a3.2 3.2 0 1 1 0 6.5a3.2 3.2 0 0 1 0-6.5Zm0 2a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4ZM6.2 13.7a3.2 3.2 0 1 1 0 6.5a3.2 3.2 0 0 1 0-6.5Zm0 2a1.2 1.2 0 1 0 0 2.4a1.2 1.2 0 0 0 0-2.4Z\"/><path class=\"ln\" d=\"M8.7 8.8L20.4 18.1M8.7 15.2L20.4 5.9\"/>","search":"<path fill-rule=\"evenodd\" d=\"M10.6 3a7.7 7.7 0 1 1 0 15.4a7.7 7.7 0 0 1 0-15.4Zm0 3.2a4.5 4.5 0 1 0 0 9.2a4.5 4.5 0 0 0 0-9.2Z\"/><path class=\"ln\" d=\"M16.3 16.4l3.8 3.8\"/>","seedling":"<path d=\"M12.4 10.8C12.4 6.1 9.5 2.9 4 2.9c0 4.9 3 7.8 8.4 7.8ZM11.6 13.4c0-4.7 3-7.8 8.4-7.8c0 4.9-3 7.8-8.4 7.8Z\"/><path class=\"ln\" d=\"M12 20.4V12.5\"/>","server":"<path fill-rule=\"evenodd\" d=\"M5.2 2.6h13.4a2.7 2.7 0 0 1 2.7 2.7v3.4a2.7 2.7 0 0 1-2.7 2.7H5.2A2.7 2.7 0 0 1 2.5 8.6V5.3A2.7 2.7 0 0 1 5.2 2.6Zm2.2 2.9a1.5 1.5 0 1 0 0 2.9a1.5 1.5 0 0 0 0-2.9ZM5.2 12.7h13.4a2.7 2.7 0 0 1 2.7 2.7v3.4a2.7 2.7 0 0 1-2.7 2.7H5.2A2.7 2.7 0 0 1 2.5 18.7v-3.4A2.7 2.7 0 0 1 5.2 12.7Zm2.2 2.9a1.5 1.5 0 1 0 0 2.9a1.5 1.5 0 0 0 0-2.9Z\"/>","shapes":"<circle cx=\"7.3\" cy=\"7.6\" r=\"4.3\"/><path d=\"M16.5 2.7l5 8.6h-9.8ZM13.4 13.7h7.4v7.4h-7.4ZM2.5 21.1L6.8 13.7l4.3 7.4Z\"/>","shelter":"<path fill-rule=\"evenodd\" d=\"M12 2.7L2.5 10.2l1.1 1.5l1-0.8v10h14.8V10.9l1 0.8l1.1-1.5ZM9.5 20.9v-4.8a2.5 2.5 0 0 1 4.9 0v4.8ZM12 9.1a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4Z\"/>","shield":"<path d=\"M12 2.6 4.6 5.8V12c0 4.6 3.1 8 7.4 9.5 4.3-1.5 7.4-4.9 7.4-9.5V5.8Z\"/>","shirt":"<path d=\"M8 2.7L2.5 5.9l2.5 4.9l1.5-0.8v11.2h11V10.1l1.5 0.8L21.5 5.9l-5.5-3.2c-0.6 1.5-1.9 2.5-4 2.5S8.6 4.2 8 2.7Z\"/>","skip":"<path d=\"M3.3 2.6v18.9L15.8 12Z\"/><rect x=\"17.8\" y=\"2.7\" width=\"3.2\" height=\"18.7\" rx=\"1.5\"/>","skull":"<path fill-rule=\"evenodd\" d=\"M12 2.6a7.9 7.9 0 0 0-7.9 7.9c0 2.4 1.1 4.2 2.5 5.4V19.5a2 2 0 0 0 2 2h6.8a2 2 0 0 0 2-2v-3.6c1.4-1.2 2.5-3 2.5-5.4A7.9 7.9 0 0 0 12 2.6ZM9.2 9.4a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4ZM14.8 9.4a1.7 1.7 0 1 1 0 3.4a1.7 1.7 0 0 1 0-3.4ZM12 13.3l1 1.8h-2ZM10.1 18.1h0.9v2.4h-0.9ZM13 18.1h0.9v2.4H13Z\"/>","sliders":"<path class=\"ln\" d=\"M4 7h8.8M19.2 7H20M4 17h2.8M13.2 17H20\"/><circle cx=\"16\" cy=\"7\" r=\"3.2\"/><circle cx=\"10\" cy=\"17\" r=\"3.2\"/>","smile":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM9.9 8.6a1.4 1.4 0 1 1 0 2.8a1.4 1.4 0 0 1 0-2.8ZM16 8.6a1.4 1.4 0 1 1 0 2.8a1.4 1.4 0 0 1 0-2.8ZM8.8 13.5h8.3a4.1 4.1 0 0 1-8.3 0Z\"/>","spark":"<path d=\"M10.7 2.6l2 5.6l5.6 2l-5.6 2L10.7 17.8l-2-5.6l-5.6-2l5.6-2ZM17.6 14.7l0.9 2.5l2.5 0.9l-2.5 0.9l-0.9 2.5l-0.9-2.5l-2.5-0.9l2.5-0.9Z\"/>","square":"<rect x=\"2.7\" y=\"2.7\" width=\"18.7\" height=\"18.7\" rx=\"3.3\"/>","star":"<path d=\"M12 2.8l2.9 6l6.6 0.8l-4.9 4.5l1.3 6.6L12 17.4l-5.9 3.2l1.3-6.6l-4.9-4.5l6.6-0.8Z\"/>","steps":"<path fill-rule=\"evenodd\" d=\"M2.8 4h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3ZM2.8 9.4h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3ZM2.8 15h4.9v4.9H2.8Zm1 2.5l0.8-0.9l0.9 0.9l1.4-1.4l0.9 0.9l-2.3 2.3Z\"/><path class=\"ln\" d=\"M10.6 6.4H20.3M10.6 11.9H20.3M10.6 17.4H20.3\"/>","store":"<path d=\"M4.4 3h15l2 6.2v1.4a3.2 3.2 0 0 1-6.3 0a3.2 3.2 0 0 1-6.3 0a3.2 3.2 0 0 1-6.3 0V9.2ZM4 14.9h15.9v5.6a1.1 1.1 0 0 1-1.1 1.1H14.1v-5.1h-4.4v5.1H5.1a1.1 1.1 0 0 1-1.1-1.1Z\"/>","sun":"<circle cx=\"12\" cy=\"12\" r=\"3.8\"/><path class=\"ln\" d=\"M12 3.9v1.3M12 18.7v1.3M6.3 6.2l0.9 0.9M16.8 16.8L17.8 17.8M4 12h1.3M18.7 12h1.3M6.3 17.8l0.9-0.9M16.8 7.2L17.8 6.2\"/>","sword":"<path d=\"M21.2 2.8v4.7l-10.8 10.8l-4.7-4.7L16.5 2.8Z\"/><path class=\"ln\" d=\"M5.2 11.9L12.1 18.8M8.4 15.6L3.7 20.3\"/>","table":"<path d=\"M2.7 6.2a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.3H2.7ZM2.7 10.5h5.3v9.9H5.2a2.5 2.5 0 0 1-2.5-2.5ZM9.8 10.5h4.5v9.9H9.8ZM16.1 10.5h5.3V17.9a2.5 2.5 0 0 1-2.5 2.5h-2.7Z\"/>","tack":"<path d=\"M8.5 3h7.2a0.8 0.8 0 0 1 0.8 1l-0.8 4l2.8 2.8a0.7 0.7 0 0 1-0.6 1.4H6.1a0.7 0.7 0 0 1-0.6-1.4l2.8-2.8l-0.8-4a0.8 0.8 0 0 1 0.8-1Z\"/><path class=\"ln\" d=\"M12 12.2V20.5\"/>","tag":"<path fill-rule=\"evenodd\" d=\"M2.9 3.4A1.5 1.5 0 0 1 4.4 2.9h7.2l10 10l-8.7 8.7L2.9 10.6Zm5 2.5a1.9 1.9 0 1 0 0 3.7a1.9 1.9 0 0 0 0-3.7Z\"/>","target":"<path fill-rule=\"evenodd\" d=\"M12 2.6a9.4 9.4 0 1 1 0 18.8a9.4 9.4 0 0 1 0-18.8Zm0 3a6.4 6.4 0 1 0 0 12.9a6.4 6.4 0 0 0 0-12.9Zm0 2.7a3.7 3.7 0 1 1 0 7.4a3.7 3.7 0 0 1 0-7.4Z\"/>","tent":"<path fill-rule=\"evenodd\" d=\"M12 4.2L19.3 17.4H4.7ZM12 11.6L9.5 17.4h5.1Z\"/><path class=\"ln\" d=\"M3.9 17.7h16.2\"/>","terminal":"<path fill-rule=\"evenodd\" d=\"M5 3.6h14a2.4 2.4 0 0 1 2.4 2.4v12a2.4 2.4 0 0 1-2.4 2.4H5A2.4 2.4 0 0 1 2.6 18V6A2.4 2.4 0 0 1 5 3.6Zm1.4 6 1.3-1.3 3.6 3.7-3.6 3.7-1.3-1.3 2.4-2.4Zm6.4 4.6h4.4v1.7h-4.4Z\"/>","text":"<path fill-rule=\"evenodd\" d=\"M10.2 2.4h3.7l6.8 18.7h-3.4l-1.6-4.7H8.3l-1.6 4.7H3.3ZM9.3 13.6h5.4L12 5.7Z\"/>","thumbs-up":"<path d=\"M6.5 10.1v10.3H3.6a1.1 1.1 0 0 1-1.1-1.1v-8a1.1 1.1 0 0 1 1.1-1.1ZM7.9 10.1l3.6-7.3a2.4 2.4 0 0 1 2.7 2.8l-0.6 3.5h5.6a2.2 2.2 0 0 1 2.2 2.6l-1.4 7a2.2 2.2 0 0 1-2.2 1.7H7.9Z\"/>","ticket":"<path fill-rule=\"evenodd\" d=\"M2.6 6.4h18.8v3.4a2.2 2.2 0 0 0 0 4.4v3.4H2.6v-3.4a2.2 2.2 0 0 0 0-4.4ZM13.3 8.4v1.8h1.4V8.4Zm0 2.7v1.8h1.4v-1.8Zm0 2.7v1.8h1.4v-1.8Z\"/>","toolbox":"<path d=\"M2.7 10.1a2.5 2.5 0 0 1 2.5-2.5h13.6a2.5 2.5 0 0 1 2.5 2.5v2.2H2.7ZM2.7 13.7h4.7v1.5h1.6v-1.5h6.2v1.5h1.6v-1.5h4.7V17.8a2.5 2.5 0 0 1-2.5 2.5H5.2A2.5 2.5 0 0 1 2.7 17.8Z\"/><path class=\"ln\" d=\"M9.1 7.5V5.7A1.5 1.5 0 0 1 10.5 4.2h2.9A1.5 1.5 0 0 1 14.9 5.7v1.9\"/>","train":"<path fill-rule=\"evenodd\" d=\"M9.1 2.7h5.8a2.9 2.9 0 0 1 2.9 2.9v6.8a2.9 2.9 0 0 1-2.9 2.9H9.1a2.9 2.9 0 0 1-2.9-2.9V5.6a2.9 2.9 0 0 1 2.9-2.9Zm-1.2 2.5v4.1h8.2V5.2ZM9.1 11.4a1.1 1.1 0 1 0 0 2.1A1.1 1.1 0 0 0 9.1 11.4Zm5.8 0a1.1 1.1 0 1 0 0 2.1a1.1 1.1 0 0 0 0-2.1Z\"/><path class=\"ln\" d=\"M8.6 20.2l1.9-3.4M15.4 20.2l-1.9-3.4\"/>","trash":"<path d=\"M5.8 7.6h12.4l-1 12a2 2 0 0 1-2 1.8H8.8a2 2 0 0 1-2-1.8Z\"/><path class=\"ln\" d=\"M3.8 6.6h16.4M9 6.6V4h6v2.6\"/>","tree":"<path d=\"M12 2.5L5.9 10.7h3L4.4 16.9h15.1l-4.5-6.2h3Z\"/><path class=\"ln\" d=\"M12 16.2v4\"/>","trophy":"<path d=\"M7.3 3h9.6V8.6a4.7 4.7 0 0 1-9.6 0Z\"/><path class=\"ln\" d=\"M7.3 5.6H5a3.1 3.1 0 0 0 3.1 4.1M16.7 5.6h2.3a3.1 3.1 0 0 1-3.1 4.1M12 13.7V16.9M8 20.4h8.1\"/>","tv":"<rect x=\"2.7\" y=\"7.4\" width=\"18.6\" height=\"13.3\" rx=\"2.3\"/><path class=\"ln\" d=\"M8.2 3.8l3.8 3.4l3.8-3.4\"/>","umbrella":"<path d=\"M2.6 12.7a9.4 9.4 0 0 1 18.8 0Z\"/><path class=\"ln\" d=\"M12 12.7v5.6a1.9 1.9 0 0 1-3.8 0\"/>","upload":"<path d=\"M10.6 21.7h2.5v-7h4.7L11.9 8.6l-5.9 5.9h4.7Z\"/><path class=\"ln\" d=\"M4.5 4.3h14.9\"/>","user":"<circle cx=\"12\" cy=\"6.7\" r=\"4.5\"/><path d=\"M3.5 21c0-4.7 3.8-7.8 8.5-7.8s8.5 3.2 8.5 7.8Z\"/>","user-check":"<circle cx=\"8.9\" cy=\"7.5\" r=\"3.2\"/><path d=\"M2.9 19.3c0-3.4 2.7-5.9 5.9-5.9s5.9 2.4 5.9 5.9Z\"/><path class=\"ln\" d=\"M14.8 10.6l1.9 1.9l3.8-3.8\"/>","user-circle":"<path fill-rule=\"evenodd\" d=\"M13 2.9a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7Zm0 3.8a3.3 3.3 0 1 1 0 6.5a3.3 3.3 0 0 1 0-6.5ZM7.2 17.9a6.7 6.7 0 0 1 11.5 0a8.1 8.1 0 0 1-11.5 0Z\"/>","user-lock":"<circle cx=\"9.9\" cy=\"7.2\" r=\"4.2\"/><path d=\"M2.7 20c0-4.2 3.2-7 7.2-7c1.2 0 2.3 0.3 3.2 0.8v6.2Z\"/><rect x=\"14.5\" y=\"14.5\" width=\"6.9\" height=\"5.7\" rx=\"1.3\"/><path class=\"ln\" d=\"M16.4 14.5v-1a1.5 1.5 0 0 1 3 0v1\"/>","user-minus":"<circle cx=\"9.6\" cy=\"7.6\" r=\"3.9\"/><path d=\"M2.8 19.7c0-3.9 3.1-6.6 6.8-6.6c1.2 0 2.2 0.3 3.1 0.8v5.9Z\"/><path class=\"ln\" d=\"M15.1 16.7h5.2\"/>","user-off":"<path d=\"M9.1 4.7A4.2 4.2 0 1 1 15 10.6ZM4.2 20.8c0-4.3 2.8-6.9 6.3-7.2L17.5 20.8Z\"/><path class=\"ln\" d=\"M4 3.5l16.2 16.2\"/>","user-pen":"<circle cx=\"9.8\" cy=\"7.6\" r=\"4\"/><path d=\"M2.9 19.9c0-4 3.1-6.7 6.9-6.7c1.2 0 2.2 0.3 3.1 0.8v5.9Z\"/><path d=\"M19.5 11.4l2.1 2.1l-5.2 5.2l-2.8 0.7l0.7-2.8Z\"/>","user-tag":"<circle cx=\"10\" cy=\"7.4\" r=\"4\"/><path d=\"M2.9 19.9c0-4 3.2-6.8 7-6.8c1.2 0 2.3 0.3 3.2 0.8v6Z\"/><path fill-rule=\"evenodd\" d=\"M14 13.7h4.5l3.1 3.1l-3.1 3.1h-4.5ZM15.2 16.8a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z\"/>","video":"<path d=\"M3 7.7a2 2 0 0 1 2-2H14.4a2 2 0 0 1 2 2v8.7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2ZM17.5 10.1l4.2-2.6v8.9l-4.2-2.6Z\"/>","volume":"<path d=\"M2.5 8.9h4l5.4-4.2v14.6l-5.4-4.2H2.5Z\"/><path class=\"ln\" d=\"M15.2 9.3a3.8 3.8 0 0 1 0 5.5M17.7 6.5a7.5 7.5 0 0 1 0 11\"/>","walk":"<circle cx=\"12.4\" cy=\"4.6\" r=\"2.2\"/><path class=\"ln\" d=\"M8.7 19.8l2.4-5.5l1.9 2.2V19.8M11.1 14.3l0.9-5.2l-2.8 1.5l-1.4 2.8M12 9.1l1.8 2.8l2.8 0.9\"/>","wallet":"<path fill-rule=\"evenodd\" d=\"M5.7 2.8H19v4.6h1.6a0.9 0.9 0 0 1 0.9 0.9v12.4H5.1a2.5 2.5 0 0 1-2.5-2.5V5.9a3.1 3.1 0 0 1 3.1-3.1Zm0 2.1a1 1 0 0 0 0 2.1h11.2V4.9ZM16.7 12.9a1.4 1.4 0 1 0 0 2.8a1.4 1.4 0 0 0 0-2.8Z\"/>","water":"<path d=\"M2.7 7.9c2.4 0 2.4-2 4.7-2s2.4 2 4.6 2s2.4-2 4.7-2s2.4 2 4.6 2v3.2c-2.3 0-2.3-2-4.6-2s-2.4 2-4.7 2s-2.3-2-4.6-2s-2.4 2-4.7 2ZM2.7 14.8c2.4 0 2.4-2 4.7-2s2.4 2 4.6 2s2.4-2 4.7-2s2.4 2 4.6 2v3.2c-2.3 0-2.3-2-4.6-2s-2.4 2-4.7 2s-2.3-2-4.6-2s-2.4 2-4.7 2Z\"/>","weight":"<circle cx=\"12\" cy=\"4.8\" r=\"2.6\"/><path d=\"M6.5 8.7h10.9l3.3 12.3H3.2Z\"/>","window":"<path d=\"M2.6 6.2a2.7 2.7 0 0 1 2.7-2.7h13.4a2.7 2.7 0 0 1 2.7 2.7v1.5H2.6ZM2.6 9.8h18.7v7.7a2.7 2.7 0 0 1-2.7 2.7h-13.4a2.7 2.7 0 0 1-2.7-2.7Z\"/>","window-restore":"<path d=\"M2.7 10.4a2.7 2.7 0 0 1 2.7-2.7h8.2a2.7 2.7 0 0 1 2.7 2.7v7.2a2.7 2.7 0 0 1-2.7 2.7h-8.2a2.7 2.7 0 0 1-2.7-2.7ZM7.9 6.4V6.3a2.7 2.7 0 0 1 2.7-2.7h8.2a2.7 2.7 0 0 1 2.7 2.7v7.2a2.7 2.7 0 0 1-2.7 2.7h-1.1v-5.8a4 4 0 0 0-4-4Z\"/>","wrench":"<path d=\"M14.9 2.5a6 6 0 0 0-5.5 8.3L2.7 17.5V21.3H6.5l6.7-6.7a6 6 0 0 0 8.3-5.5l-3.5 1.3l-2.9-2.9l1.3-3.5Z\"/>","x-circle":"<path fill-rule=\"evenodd\" d=\"M12.9 2.7a9.4 9.4 0 1 0 0 18.7a9.4 9.4 0 0 0 0-18.7ZM10.1 7.9L12.9 10.7l2.9-2.9l1.4 1.4l-2.9 2.9l2.9 2.9l-1.4 1.4l-2.9-2.9l-2.9 2.9l-1.4-1.4l2.9-2.9l-2.9-2.9Z\"/>","zap":"<path d=\"M13.9 2.5L5.2 13.3h6.1l-1.2 8.1l8.7-10.8h-6.1Z\"/>"};
const FA = {"address-card":"id","adjust":"contrast","align-left":"align-left","angle-down":"down","angle-right":"chevron","angles-left":"chevrons-left","angles-right":"chevrons-right","arrow-down":"arrow-down","arrow-down-short-wide":"sort-asc","arrow-down-wide-short":"sort","arrow-left":"arrow-left","arrow-right":"arrow-right","arrow-right-arrow-left":"swap","arrow-right-from-bracket":"leave","arrow-right-to-bracket":"enter","arrow-rotate-right":"retry","arrow-trend-down":"trend-down","arrow-trend-up":"trend-up","arrow-up":"arrow-up","arrow-up-from-bracket":"share","arrow-up-right-from-square":"open","arrows-left-right":"arrows-h","arrows-rotate":"retry","arrows-to-dot":"focus","arrows-up-down-left-right":"move","at":"at","backward":"rewind","backward-fast":"rewind","balance-scale":"scale","ban":"ban","bars":"menu","basket-shopping":"cart","bell":"bell","bolt":"zap","bolt-lightning":"zap","book":"book","book-open":"book-open","box":"box","box-archive":"archive","box-open":"box","brain":"brain","bridge":"bridge","briefcase":"briefcase","briefcase-medical":"medical","broadcast-tower":"live","bug":"bug","bullhorn":"megaphone","bullseye":"target","burst":"burst","calendar":"calendar","calendar-day":"calendar","calendar-days":"calendar","camera":"camera","camera-cctv":"camera","camera-retro":"camera","camera-rotate":"camera-flip","camera-slash":"camera-off","campground":"tent","car":"car","caret-down":"down","cart":"cart","cart-plus":"cart","cart-shopping":"cart","chart-area":"chart","chart-bar":"chart","chart-column":"chart","chart-line":"chart","chart-simple":"chart","check":"check","check-circle":"check-circle","check-double":"check-double","chevron-down":"down","chevron-left":"back","chevron-right":"chevron","chevron-up":"up","child":"child","circle":"circle","circle-check":"check-circle","circle-dollar-to-slot":"donate","circle-dot":"record","circle-exclamation":"alert-circle","circle-half-stroke":"contrast","circle-info":"info","circle-minus":"minus-circle","circle-nodes":"nodes","circle-notch":"busy","circle-play":"play","circle-plus":"plus-circle","circle-question":"help","circle-user":"user-circle","circle-xmark":"x-circle","city":"city","clapperboard":"clapper","clipboard":"clipboard","clipboard-check":"clipboard-check","clipboard-list":"clipboard","clock":"clock","clock-rotate-left":"history","clone":"copy","closed-captioning":"cc","cloud":"cloud","cloud-arrow-up":"upload","cloud-bolt":"storm","cloud-moon":"cloud","cloud-rain":"cloud","cloud-showers-heavy":"cloud","cloud-slash":"cloud-off","cloud-sun":"cloud","code":"code","code-branch":"branch","code-commit":"commit","code-fork":"branch","coin":"coin","coins":"coin","comment":"chat","comment-dots":"chat","comment-slash":"chat-off","comments":"chat","compass":"compass","compress":"compress","cookie":"cookie","cookie-bite":"cookie","copy":"copy","couch":"couch","credit-card":"card","crown":"crown","cube":"box","cubes":"cubes","cut":"scissors","database":"database","desktop":"computer","diagram-project":"nodes","dice":"dice","dice-five":"dice","dice-six":"dice","display":"computer","dollar-sign":"dollar","door-closed":"door","door-open":"door","down-left-and-up-right-to-center":"compress","download":"download","droplet":"drop","ear-listen":"ear","earth-americas":"globe","earth-europe":"globe","ellipsis":"more","ellipsis-vertical":"more","envelope":"mail","eraser":"eraser","exchange-alt":"swap","expand":"expand","external-link":"open","eye":"eye","eye-slash":"eye-off","face-grin":"laugh","face-grin-squint":"laugh","face-grin-squint-tears":"laugh","face-grin-stars":"smile","face-laugh":"laugh","face-smile":"smile","faucet":"drop","faucet-drip":"drop","file":"file","file-audio":"file","file-code":"file-code","file-image":"image","file-lines":"file","file-pdf":"file","file-pen":"pencil","film":"film","filter":"filter","fire":"fire","fish":"fish","fist-raised":"fist","flag":"flag","flag-checkered":"finish","flask":"flask","flask-vial":"flask","floppy-disk":"save","folder":"folder","folder-open":"folder","folder-tree":"folder-tree","font":"text","forward":"fast-forward","forward-fast":"fast-forward","forward-step":"skip","gamepad":"game","gauge":"gauge","gauge-high":"gauge","gauge-simple":"gauge","gauge-simple-high":"gauge","gauge-simple-low":"gauge","gavel":"gavel","gear":"gear","gears":"gear","gem":"gem","ghost":"ghost","gift":"gift","globe":"globe","grid":"grid","grip":"grip","grip-vertical":"grip","hammer":"hammer","hand":"hand","hand-fist":"fist","hand-holding-dollar":"coin","hand-holding-heart":"care","hand-point-right":"hand","hand-pointer":"hand","handshake":"handshake","handshake-angle":"handshake","hard-drive":"drive","hashtag":"hash","hat-wizard":"wizard","hdd":"drive","heading":"heading","headphones":"headphones","headphones-simple":"headphones","headset":"headphones","heart":"heart","heart-crack":"heart-broken","heart-pulse":"heart-pulse","heartbeat":"heart-pulse","hiking":"mountain","hot-tub":"hot-tub","hot-tub-person":"hot-tub","hourglass":"hourglass","hourglass-end":"hourglass","hourglass-half":"hourglass","hourglass-start":"hourglass","house":"home","house-chimney":"home","house-signal":"home","icicles":"snow","icons":"shapes","id-card":"id","image":"image","images":"image","inbox":"inbox","infinity":"infinity","info-circle":"info","key":"key","keyboard":"keyboard","kit-medical":"medical","language":"language","laptop":"computer","layer-group":"layers","leaf":"leaf","left-right":"arrows-h","life-ring":"lifebuoy","lightbulb":"idea","link":"link","link-slash":"link-off","list":"list","list-check":"steps","list-ol":"list-ordered","list-ul":"list","location-dot":"pin","location-pin":"pin","lock":"lock","lungs":"lungs","magnifying-glass":"search","map":"map","map-location-dot":"map","map-marker-alt":"pin","map-pin":"pin","mask":"mask","message":"chat","microchip":"chip","microphone":"mic","microphone-lines":"mic","microphone-slash":"mic-off","minus":"minus","minus-circle":"minus-circle","mobile-screen":"phone","mobile-screen-button":"phone","money-bill":"money","money-bill-1":"money","money-bill-transfer":"money","money-bill-wave":"money","money-check":"money","moon":"moon","mountain":"mountain","mountain-sun":"mountain","mug-hot":"mug","mug-saucer":"mug","music":"music","network-wired":"nodes","newspaper":"news","object-group":"group","paint-brush":"palette","paintbrush":"palette","palette":"palette","paper-plane":"plane","parking":"parking","paste":"clipboard","pause":"pause","paw":"paw","pen":"pencil","pen-nib":"pencil","pen-to-square":"pencil","pencil":"pencil","people-arrows":"members","people-group":"members","person-hiking":"mountain","person-shelter":"shelter","person-swimming":"water","person-walking":"walk","phone":"phone","phone-slash":"phone-off","photo-film":"film","piggy-bank":"piggy","plane":"airplane","plane-departure":"airplane","play":"play","plug":"plug","plug-circle-bolt":"plug","plug-circle-check":"plug","plug-circle-xmark":"plug","plus":"plus","plus-circle":"plus-circle","print":"print","puzzle":"puzzle","puzzle-piece":"puzzle","puzzle-piece-simple":"puzzle","question":"help","quote-left":"quote","quote-right":"quote","radio":"radio","ranking-star":"ranking","recycle":"recycle","reply":"reply","restroom":"restroom","right-from-bracket":"leave","right-left":"swap","right-to-bracket":"enter","road":"road","robot":"robot","rocket":"rocket","rotate":"retry","rotate-back":"undo","rotate-left":"retry","rotate-right":"retry","route":"route","rss":"rss","satellite-dish":"dish","save":"save","scale-balanced":"scale","scissors":"scissors","screwdriver-wrench":"wrench","scroll":"scroll","search":"search","seedling":"seedling","server":"server","shapes":"shapes","share-nodes":"nodes","shield":"shield","shield-halved":"shield","shirt":"shirt","signal":"wifi","signature":"signature","sitemap":"nodes","skull":"skull","skull-crossbones":"skull","slash":"slash","sliders":"sliders","sliders-h":"sliders","smog":"cloud","snowflake":"snow","sparkles":"spark","spinner":"busy","square":"square","square-parking":"parking","star":"star","star-of-life":"spark","step-forward":"skip","stop":"stop","store":"store","suitcase":"briefcase","suitcase-medical":"medical","sun":"sun","sword":"sword","table":"table","table-cells":"grid","table-columns":"columns","table-list":"table","tag":"tag","tags":"tag","television":"tv","terminal":"terminal","text-height":"text","th":"grid","thumbs-up":"thumbs-up","thumbtack":"tack","ticket":"ticket","timeline":"timeline","times":"close","toolbox":"toolbox","tower-broadcast":"live","tower-cell":"live","train":"train","trash":"trash","trash-can":"trash","tree":"tree","triangle-exclamation":"alert","trophy":"trophy","tv":"tv","umbrella":"umbrella","umbrella-beach":"umbrella","undo":"undo","unlock":"lock","up-right-and-down-left-from-center":"expand","up-right-from-square":"open","upload":"upload","user":"user","user-astronaut":"user","user-check":"user-check","user-circle":"user-circle","user-edit":"user-pen","user-group":"members","user-lock":"user-lock","user-minus":"user-minus","user-pen":"user-pen","user-plus":"invite","user-secret":"user","user-shield":"shield","user-slash":"user-off","user-tag":"user-tag","users":"members","utensils":"food","video":"video","video-slash":"video","volume-high":"volume","volume-low":"volume","volume-off":"mute","volume-xmark":"mute","wallet":"wallet","wand-magic":"spark","wand-magic-sparkles":"spark","water":"water","wave-square":"wave","weight-hanging":"weight","wifi":"wifi","wind":"wind","window-maximize":"window","window-restore":"window-restore","wrench":"wrench","xmark":"close","xmark-circle":"x-circle"};
const FA = {"address-card":"id","adjust":"contrast","align-left":"align-left","angle-down":"down","angle-right":"chevron","angles-left":"chevrons-left","angles-right":"chevrons-right","arrow-down":"arrow-down","arrow-down-short-wide":"sort-asc","arrow-down-wide-short":"sort","arrow-left":"arrow-left","arrow-right":"arrow-right","arrow-right-arrow-left":"swap","arrow-right-from-bracket":"leave","arrow-right-to-bracket":"enter","arrow-rotate-right":"retry","arrow-trend-down":"trend-down","arrow-trend-up":"trend-up","arrow-up":"arrow-up","arrow-up-from-bracket":"share","arrow-up-right-from-square":"open","arrows-left-right":"arrows-h","arrows-rotate":"retry","arrows-to-dot":"focus","arrows-up-down-left-right":"move","at":"at","backward":"rewind","backward-fast":"rewind","balance-scale":"scale","ban":"ban","bars":"menu","basket-shopping":"cart","bell":"bell","bolt":"zap","bolt-lightning":"zap","book":"book","book-open":"book-open","box":"box","box-archive":"archive","box-open":"box","brain":"brain","bridge":"bridge","briefcase":"briefcase","briefcase-medical":"medical","broadcast-tower":"live","bug":"bug","bullhorn":"megaphone","bullseye":"target","burst":"burst","calendar":"calendar","calendar-day":"calendar","calendar-days":"calendar","camera":"camera","camera-cctv":"camera","camera-retro":"camera","camera-rotate":"camera-flip","camera-slash":"camera-off","campground":"tent","car":"car","caret-down":"down","cart":"cart","cart-plus":"cart","cart-shopping":"cart","chart-area":"chart","chart-bar":"chart","chart-column":"chart","chart-line":"chart","chart-simple":"chart","check":"check","check-circle":"check-circle","check-double":"check-double","chevron-down":"down","chevron-left":"back","chevron-right":"chevron","chevron-up":"up","child":"child","circle":"circle","circle-check":"check-circle","circle-dollar-to-slot":"donate","circle-dot":"record","circle-exclamation":"alert-circle","circle-half-stroke":"contrast","circle-info":"info","circle-minus":"minus-circle","circle-nodes":"nodes","circle-notch":"busy","circle-play":"play","circle-plus":"plus-circle","circle-question":"help","circle-user":"user-circle","circle-xmark":"x-circle","city":"city","clapperboard":"clapper","clipboard":"clipboard","clipboard-check":"clipboard-check","clipboard-list":"clipboard","clock":"clock","clock-rotate-left":"history","clone":"copy","closed-captioning":"cc","cloud":"cloud","cloud-arrow-up":"upload","cloud-bolt":"storm","cloud-moon":"cloud","cloud-rain":"cloud","cloud-showers-heavy":"cloud","cloud-slash":"cloud-off","cloud-sun":"cloud","code":"code","code-branch":"branch","code-commit":"commit","code-fork":"branch","coin":"coin","coins":"coin","comment":"chat","comment-dots":"chat","comment-slash":"chat-off","comments":"chat","compass":"compass","compress":"compress","cookie":"cookie","cookie-bite":"cookie","copy":"copy","couch":"couch","credit-card":"card","crown":"crown","cube":"box","cubes":"cubes","cut":"scissors","database":"database","desktop":"computer","diagram-project":"nodes","dice":"dice","dice-five":"dice","dice-six":"dice","display":"computer","dollar-sign":"dollar","door-closed":"door","door-open":"door","down-left-and-up-right-to-center":"compress","download":"download","droplet":"drop","ear-listen":"ear","earth-americas":"globe","earth-europe":"globe","ellipsis":"more","ellipsis-vertical":"more","envelope":"mail","eraser":"eraser","exchange-alt":"swap","expand":"expand","external-link":"open","eye":"eye","eye-slash":"eye-off","face-grin":"laugh","face-grin-squint":"laugh","face-grin-squint-tears":"laugh","face-grin-stars":"smile","face-laugh":"laugh","face-smile":"smile","faucet":"drop","faucet-drip":"drop","file":"file","file-audio":"file","file-code":"file-code","file-image":"image","file-lines":"file","file-pdf":"file","file-pen":"pencil","film":"film","filter":"filter","fire":"fire","fish":"fish","fist-raised":"fist","flag":"flag","flag-checkered":"finish","flask":"flask","flask-vial":"flask","floppy-disk":"save","folder":"folder","folder-open":"folder","folder-tree":"folder-tree","font":"text","forward":"fast-forward","forward-fast":"fast-forward","forward-step":"skip","gamepad":"game","gauge":"gauge","gauge-high":"gauge","gauge-simple":"gauge","gauge-simple-high":"gauge","gauge-simple-low":"gauge","gavel":"gavel","gear":"gear","gears":"gear","gem":"gem","ghost":"ghost","gift":"gift","globe":"globe","grid":"grid","grip":"grip","grip-vertical":"grip","hammer":"hammer","hand":"hand","hand-fist":"fist","hand-holding-dollar":"coin","hand-holding-heart":"care","hand-point-right":"hand","hand-pointer":"hand","handshake":"handshake","handshake-angle":"handshake","hard-drive":"drive","hashtag":"hash","hat-wizard":"wizard","hdd":"drive","heading":"heading","headphones":"headphones","headphones-simple":"headphones","headset":"headphones","heart":"heart","heart-crack":"heart-broken","heart-pulse":"heart-pulse","heartbeat":"heart-pulse","hiking":"mountain","hot-tub":"hot-tub","hot-tub-person":"hot-tub","hourglass":"hourglass","hourglass-end":"hourglass","hourglass-half":"hourglass","hourglass-start":"hourglass","house":"home","house-chimney":"home","house-signal":"home","icicles":"snow","icons":"shapes","id-card":"id","image":"image","images":"image","inbox":"inbox","infinity":"infinity","info-circle":"info","key":"key","keyboard":"keyboard","kit-medical":"medical","language":"language","laptop":"computer","layer-group":"layers","leaf":"leaf","left-right":"arrows-h","life-ring":"lifebuoy","lightbulb":"idea","link":"link","link-slash":"link-off","list":"list","list-check":"steps","list-ol":"list-ordered","list-ul":"list","location-dot":"pin","location-pin":"pin","lock":"lock","lungs":"lungs","magnifying-glass":"search","map":"map","map-location-dot":"map","map-marker-alt":"pin","map-pin":"pin","mask":"mask","message":"chat","microchip":"chip","microphone":"mic","microphone-lines":"mic","microphone-slash":"mic-off","minus":"minus","minus-circle":"minus-circle","mobile-screen":"phone","mobile-screen-button":"phone","money-bill":"money","money-bill-1":"money","money-bill-transfer":"money","money-bill-wave":"money","money-check":"money","moon":"moon","mountain":"mountain","mountain-sun":"mountain","mug-hot":"mug","mug-saucer":"mug","music":"music","network-wired":"nodes","newspaper":"news","object-group":"group","paint-brush":"palette","paintbrush":"palette","palette":"palette","paper-plane":"plane","parking":"parking","paste":"clipboard","pause":"pause","paw":"paw","pen":"pencil","pen-nib":"pencil","pen-to-square":"pencil","pencil":"pencil","people-arrows":"members","people-group":"members","person-hiking":"mountain","person-shelter":"shelter","person-swimming":"water","person-walking":"walk","phone":"phone","phone-slash":"phone-off","photo-film":"film","piggy-bank":"piggy","plane":"airplane","plane-departure":"airplane","play":"play","plug":"plug","plug-circle-bolt":"plug","plug-circle-check":"plug","plug-circle-xmark":"plug","plus":"plus","plus-circle":"plus-circle","print":"print","puzzle":"puzzle","puzzle-piece":"puzzle","puzzle-piece-simple":"puzzle","question":"help","quote-left":"quote","quote-right":"quote","radio":"radio","ranking-star":"ranking","recycle":"recycle","reply":"reply","restroom":"restroom","right-from-bracket":"leave","right-left":"swap","right-to-bracket":"enter","road":"road","robot":"robot","rocket":"rocket","rotate":"retry","rotate-back":"undo","rotate-left":"retry","rotate-right":"retry","route":"route","rss":"rss","satellite-dish":"dish","save":"save","scale-balanced":"scale","scissors":"scissors","screwdriver-wrench":"wrench","scroll":"scroll","search":"search","seedling":"seedling","server":"server","shapes":"shapes","share-nodes":"nodes","shield":"shield","shield-halved":"shield","shirt":"shirt","signal":"wifi","signature":"signature","sitemap":"nodes","skull":"skull","skull-crossbones":"skull","slash":"slash","sliders":"sliders","sliders-h":"sliders","smog":"cloud","snowflake":"snow","sparkles":"spark","spinner":"busy","square":"square","square-parking":"parking","star":"star","star-of-life":"spark","step-forward":"skip","stop":"stop","store":"store","suitcase":"briefcase","suitcase-medical":"medical","sun":"sun","sword":"sword","table":"table","table-cells":"grid","table-columns":"columns","table-list":"table","tag":"tag","tags":"tag","television":"tv","terminal":"terminal","text-height":"text","th":"grid","thumbs-up":"thumbs-up","thumbtack":"tack","ticket":"ticket","timeline":"timeline","times":"close","toolbox":"toolbox","tower-broadcast":"live","tower-cell":"live","train":"train","trash":"trash","trash-can":"trash","tree":"tree","triangle-exclamation":"alert","trophy":"trophy","tv":"tv","umbrella":"umbrella","umbrella-beach":"umbrella","undo":"undo","unlock":"lock","up-right-and-down-left-from-center":"expand","up-right-from-square":"open","upload":"upload","user":"user","user-astronaut":"user","user-check":"user-check","user-circle":"user-circle","user-edit":"user-pen","user-group":"members","user-lock":"user-lock","user-minus":"user-minus","user-pen":"user-pen","user-plus":"invite","user-secret":"user","user-shield":"shield","user-slash":"user-off","user-tag":"user-tag","users":"members","utensils":"food","video":"video","video-slash":"video","volume-high":"volume","volume-low":"volume","volume-off":"mute","volume-xmark":"mute","wallet":"wallet","wand-magic":"spark","wand-magic-sparkles":"spark","water":"water","wave-square":"wave","weight-hanging":"weight","wifi":"wifi","wind":"wind","window-maximize":"window","window-restore":"window-restore","wrench":"wrench","xmark":"close","xmark-circle":"x-circle"};
const FB = {"youtube":"youtube","square-youtube":"youtube","twitch":"twitch","discord":"discord","github":"github","square-github":"github","x-twitter":"x","square-x-twitter":"x","twitter":"x","kick":"kick","kickstarter-k":"kick","kickstarter":"kickstarter","google":"google","tiktok":"tiktok","threads":"threads","spotify":"spotify","soundcloud":"soundcloud","reddit":"reddit","reddit-alien":"reddit","tumblr":"tumblr","hacker-news":"ycombinator","line":"line","paypal":"paypal","patreon":"patreon","mastodon":"mastodon","linux":"linux","instagram":"instagram","facebook":"facebook","facebook-f":"facebook","cloudflare":"cloudflare","brave":"brave","bluesky":"bluesky","bitcoin":"bitcoin","apple":"apple","telegram":"telegram","whatsapp":"whatsapp","steam":"steam","snapchat":"snapchat","pinterest":"pinterest","vimeo":"vimeo","vimeo-v":"vimeo","npm":"npm","node":"nodedotjs","node-js":"nodedotjs","docker":"docker","python":"python","android":"android","chrome":"googlechrome","firefox":"firefoxbrowser","firefox-browser":"firefoxbrowser","gitlab":"gitlab","ubuntu":"ubuntu","raspberry":"raspberrypi","raspberry-pi":"raspberrypi","stripe":"stripe","cc-stripe":"stripe","signal":"signal","matrix":"matrix","medium":"medium","wikipedia":"wikipedia","wikipedia-w":"wikipedia","ethereum":"ethereum"};
const FB = {"youtube":"youtube","square-youtube":"youtube","twitch":"twitch","discord":"discord","github":"github","square-github":"github","x-twitter":"x","square-x-twitter":"x","twitter":"x","kick":"kick","kickstarter-k":"kick","kickstarter":"kickstarter","google":"google","tiktok":"tiktok","threads":"threads","spotify":"spotify","soundcloud":"soundcloud","reddit":"reddit","reddit-alien":"reddit","tumblr":"tumblr","hacker-news":"ycombinator","line":"line","paypal":"paypal","patreon":"patreon","mastodon":"mastodon","linux":"linux","instagram":"instagram","facebook":"facebook","facebook-f":"facebook","cloudflare":"cloudflare","brave":"brave","bluesky":"bluesky","bitcoin":"bitcoin","apple":"apple","telegram":"telegram","whatsapp":"whatsapp","steam":"steam","snapchat":"snapchat","pinterest":"pinterest","vimeo":"vimeo","vimeo-v":"vimeo","npm":"npm","node":"nodedotjs","node-js":"nodedotjs","docker":"docker","python":"python","android":"android","chrome":"googlechrome","firefox":"firefoxbrowser","firefox-browser":"firefoxbrowser","gitlab":"gitlab","ubuntu":"ubuntu","raspberry":"raspberrypi","raspberry-pi":"raspberrypi","stripe":"stripe","cc-stripe":"stripe","signal":"signal","matrix":"matrix","medium":"medium","wikipedia":"wikipedia","wikipedia-w":"wikipedia","ethereum":"ethereum"};
// Font Awesome's style, size, layout and animation classes: they say how, not what.
// Font Awesome's style, size, layout and animation classes: they say how, not what.
@@ -188,13 +188,13 @@
@@ -188,13 +188,13 @@
<symbol id="ovg-card-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3.7" y="5.8" width="16.7" height="12.3" rx="1.8"/><path d="M3.7 10.3h16.7M6.7 14.6h3.5"/></symbol>
<symbol id="ovg-card-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3.7" y="5.8" width="16.7" height="12.3" rx="1.8"/><path d="M3.7 10.3h16.7M6.7 14.6h3.5"/></symbol>
<symbol id="ovg-card-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z"/></symbol>
<symbol id="ovg-card-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z"/></symbol>
<symbol id="ovg-card-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z"/></g><rect x="3.7" y="5.8" width="16.7" height="12.3" rx="1.8"/><path d="M3.7 10.3h16.7M6.7 14.6h3.5"/></symbol>
<symbol id="ovg-card-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M2.6 7.4a2.4 2.4 0 0 1 2.4-2.4h13.9a2.4 2.4 0 0 1 2.4 2.4v9.3a2.4 2.4 0 0 1-2.4 2.4h-13.9a2.4 2.4 0 0 1-2.4-2.4ZM2.6 9.5v1.7h18.7V9.5ZM5.9 14.2v1.5h4.8v-1.5Z"/></g><rect x="3.7" y="5.8" width="16.7" height="12.3" rx="1.8"/><path d="M3.7 10.3h16.7M6.7 14.6h3.5"/></symbol>
-<symbol id="ovg-care" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>
-<symbol id="ovg-care-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>
-<symbol id="ovg-care-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>
-<symbol id="ovg-care-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>
-<symbol id="ovg-care-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>
-<symbol id="ovg-care-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M17 11s-4.1-2.4-4.1-5.4a2.3 2.3 0 0 1 4.1-1.6a2.3 2.3 0 0 1 4.1 1.6c0 2.9-4.1 5.4-4.1 5.4Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M3.5 16.2h3.2l4.3 3.2h5.9a2.1 2.1 0 0 0 0-4.3H13.3M7.9 16.2l2.3-2.1h3.6"/></symbol>
-<symbol id="ovg-care-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M17 11s-4.1-2.4-4.1-5.4a2.3 2.3 0 0 1 4.1-1.6a2.3 2.3 0 0 1 4.1 1.6c0 2.9-4.1 5.4-4.1 5.4Z"/><path class="ln" d="M3.5 16.2h3.2l4.3 3.2h5.9a2.1 2.1 0 0 0 0-4.3H13.3M7.9 16.2l2.3-2.1h3.6"/></g><path d="M3.3 16.5h3.2l4.2 3.2h5.8a2.2 2.2 0 0 0 0-4.2H12.8M7.5 16.5l2.4-2.2h3.5"/><path d="M16.6 10.6s-3.4-2.2-3.4-4.7a2.1 2.1 0 0 1 3.4-1.4a2.1 2.1 0 0 1 3.4 1.4c0 2.6-3.4 4.7-3.4 4.7Z"/></symbol>
+<symbol id="ovg-care" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>
+<symbol id="ovg-care-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>
+<symbol id="ovg-care-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>
+<symbol id="ovg-care-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>
+<symbol id="ovg-care-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>
+<symbol id="ovg-care-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M12 11s-4.3-2.6-4.3-5.6a2.3 2.3 0 0 1 4.3-1.5a2.3 2.3 0 0 1 4.3 1.5c0 3-4.3 5.6-4.3 5.6Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M3.8 13.8v6M3.8 15.2h3.1l3.3 2.7h7.5a1.7 1.7 0 0 0 0-3.4h-3.9"/></symbol>
+<symbol id="ovg-care-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M12 11s-4.3-2.6-4.3-5.6a2.3 2.3 0 0 1 4.3-1.5a2.3 2.3 0 0 1 4.3 1.5c0 3-4.3 5.6-4.3 5.6Z"/><path class="ln" d="M3.8 13.8v6M3.8 15.2h3.1l3.3 2.7h7.5a1.7 1.7 0 0 0 0-3.4h-3.9"/></g><path d="M12 10.6s-3.8-2.3-3.8-5a2.1 2.1 0 0 1 3.8-1.3a2.1 2.1 0 0 1 3.8 1.3c0 2.7-3.8 5-3.8 5Z"/><path d="M3.5 13.5v6.5M3.5 15h3.3l3.4 2.8h7.7a1.8 1.8 0 0 0 0-3.6h-4.1"/></symbol>
<symbol id="ovg-cart" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol>
<symbol id="ovg-cart" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol>
<symbol id="ovg-cart-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol>
<symbol id="ovg-cart-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol>
<symbol id="ovg-cart-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol>
<symbol id="ovg-cart-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 4.1h1.9l2.2 10.2h10.2L20.3 6.9H6.5"/><circle cx="9.1" cy="18.6" r="1.2"/><circle cx="16.5" cy="18.6" r="1.2"/></symbol>
@@ -521,13 +521,13 @@
@@ -521,13 +521,13 @@
<symbol id="ovg-eye-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z"/><circle cx="12" cy="12" r="2.7"/></symbol>
<symbol id="ovg-eye-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z"/><circle cx="12" cy="12" r="2.7"/></symbol>
<symbol id="ovg-eye-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z"/><circle cx="12" cy="12" r="1.6"/></symbol>
<symbol id="ovg-eye-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z"/><circle cx="12" cy="12" r="1.6"/></symbol>
<symbol id="ovg-eye-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z"/><circle cx="12" cy="12" r="1.6"/></g><path d="M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z"/><circle cx="12" cy="12" r="2.7"/></symbol>
<symbol id="ovg-eye-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M12 5.3C6.4 5.3 2.6 12 2.6 12s3.9 6.7 9.4 6.7S21.5 12 21.5 12S17.6 5.3 12 5.3Zm0 3.3a3.3 3.3 0 1 1 0 6.7a3.3 3.3 0 0 1 0-6.7Z"/><circle cx="12" cy="12" r="1.6"/></g><path d="M3.5 12S6.6 6.2 12 6.2S20.5 12 20.5 12S17.4 17.8 12 17.8S3.5 12 3.5 12Z"/><circle cx="12" cy="12" r="2.7"/></symbol>
-<symbol id="ovg-eye-off" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>
-<symbol id="ovg-eye-off-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>
-<symbol id="ovg-eye-off-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>
-<symbol id="ovg-eye-off-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>
-<symbol id="ovg-eye-off-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>
+<symbol id="ovg-eye-off" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>
+<symbol id="ovg-eye-off-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>
+<symbol id="ovg-eye-off-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>
+<symbol id="ovg-eye-off-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>
+<symbol id="ovg-eye-off-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>
<symbol id="ovg-eye-off-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M4.6 4.6l14.8 14.8"/></symbol>
<symbol id="ovg-eye-off-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M4.6 4.6l14.8 14.8"/></symbol>
-<symbol id="ovg-eye-off-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z"/><path class="ln" d="M4.6 4.6l14.8 14.8"/></g><path d="M3.7 12s3.2-6.1 8.3-6.1c1.5 0 2.7 0.5 4 1.1M20.5 12s-3.2 6.1-8.3 6.1c-1.5 0-2.7-0.5-4-1.1"/><path d="M10.1 9.9a2.7 2.7 0 0 0 3.9 3.9M4.6 4.5l14.9 14.9"/></symbol>
+<symbol id="ovg-eye-off-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M9 5.8A10 10 0 0 1 21.4 12a10 10 0 0 1-2.5 3.8L15.3 12.2a3.3 3.3 0 0 0-3.5-3.5ZM15 18.2A10 10 0 0 1 2.6 12a10 10 0 0 1 2.5-3.8L8.7 11.8a3.3 3.3 0 0 0 3.5 3.5Z"/><path class="ln" d="M4.6 4.6l14.8 14.8"/></g><path d="M10.6 6.1c0.5-0.1 0.9-0.1 1.4-0.1c5.2 0 8.5 6 8.5 6s-0.6 1.1-1.7 2.4M6.9 7.6C4.7 9.2 3.5 12 3.5 12s3.3 6 8.5 6c1.6 0 3-0.5 4.2-1.2"/><path d="M10 10a2.8 2.8 0 0 0 4 4M4.5 4.5l15 15"/></symbol>
<symbol id="ovg-fast-forward" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol>
<symbol id="ovg-fast-forward" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol>
<symbol id="ovg-fast-forward-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol>
<symbol id="ovg-fast-forward-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol>
<symbol id="ovg-fast-forward-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol>
<symbol id="ovg-fast-forward-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.4v11.2L11.6 12ZM13.1 6.4v11.2L20.7 12Z"/></symbol>
@@ -575,13 +575,13 @@
@@ -575,13 +575,13 @@
<symbol id="ovg-fire-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/></symbol>
<symbol id="ovg-fire-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/></symbol>
<symbol id="ovg-fire-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z"/></symbol>
<symbol id="ovg-fire-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z"/></symbol>
<symbol id="ovg-fire-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z"/></g><path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/></symbol>
<symbol id="ovg-fire-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M12.1 19.8a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.3c-2.1 2.3-2.6 4.6-2.6 4.6S10.8 5.1 9.6 3C7.1 5.9 5.2 9.2 5.2 12.9A6.8 6.8 0 0 0 12.1 21.4Zm0-2.8a2.8 2.8 0 0 0 2.8-2.8c0-1.6-1.2-2.7-1.7-4c-0.9 1-1.1 1.8-1.1 1.8s-0.5-0.9-1-1.6c-1 1.2-1.7 2.5-1.7 3.9a2.8 2.8 0 0 0 2.7 2.7Z"/></g><path d="M12 20.5a6.8 6.8 0 0 0 6.8-6.8c0-4.3-2.9-6.8-4.2-10.1c-2 2.3-2.6 4.5-2.6 4.5S10.7 5.8 9.5 3.8C7 6.6 5.2 10 5.2 13.7a6.8 6.8 0 0 0 6.8 6.8Z"/></symbol>
-<symbol id="ovg-fish" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>
-<symbol id="ovg-fish-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>
-<symbol id="ovg-fish-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>
-<symbol id="ovg-fish-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>
-<symbol id="ovg-fish-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>
-<symbol id="ovg-fish-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M7.6 12c2.1-3.6 4.8-5.4 7.9-5.4 2.9 0 5 2.2 6.1 5.4-1.1 3.2-3.2 5.4-6.1 5.4-3.1 0-5.8-1.8-7.9-5.4ZM15.7 10.6a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z"/><path d="M8.4 12 2.9 7.4v9.2Z"/></symbol>
-<symbol id="ovg-fish-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M7.6 12c2.1-3.6 4.8-5.4 7.9-5.4 2.9 0 5 2.2 6.1 5.4-1.1 3.2-3.2 5.4-6.1 5.4-3.1 0-5.8-1.8-7.9-5.4ZM15.7 10.6a1.1 1.1 0 1 0 2.2 0a1.1 1.1 0 1 0-2.2 0Z"/><path d="M8.4 12 2.9 7.4v9.2Z"/></g><path d="M8.1 12c1.9-3.1 4.3-4.6 7.2-4.6c2.5 0 4.3 1.9 5.2 4.6c-1 2.7-2.8 4.6-5.2 4.6c-2.9 0-5.2-1.6-7.2-4.6Z"/><path d="M8.1 12L3.7 8.8v6.7Z"/><path d="M16.5 10.7h0"/></symbol>
+<symbol id="ovg-fish" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>
+<symbol id="ovg-fish-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>
+<symbol id="ovg-fish-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>
+<symbol id="ovg-fish-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>
+<symbol id="ovg-fish-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>
+<symbol id="ovg-fish-solid" viewBox="0 0 24 24" fill="currentColor"><path fill-rule="evenodd" d="M8.7 12c1.9-3.5 4.6-5.3 7.6-5.3c2.8 0 4.6 2.2 5.4 5.3c-0.8 3.1-2.6 5.3-5.4 5.3c-3 0-5.7-1.8-7.6-5.3ZM16.2 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M8.7 12L4.4 8.9M8.7 12l-4.3 3.1"/></symbol>
+<symbol id="ovg-fish-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path fill-rule="evenodd" d="M8.7 12c1.9-3.5 4.6-5.3 7.6-5.3c2.8 0 4.6 2.2 5.4 5.3c-0.8 3.1-2.6 5.3-5.4 5.3c-3 0-5.7-1.8-7.6-5.3ZM16.2 10.6a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0Z"/><path class="ln" d="M8.7 12L4.4 8.9M8.7 12l-4.3 3.1"/></g><path d="M9 12c1.8-3.2 4.3-4.8 7.1-4.8c2.6 0 4.2 2 4.9 4.8c-0.7 2.8-2.3 4.8-4.9 4.8c-2.8 0-5.3-1.6-7.1-4.8Z"/><path d="M9 12L4.2 8.6M9 12l-4.8 3.4M17.3 10.6h0.01"/></symbol>
<symbol id="ovg-fist" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol>
<symbol id="ovg-fist" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol>
<symbol id="ovg-fist-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol>
<symbol id="ovg-fist-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol>
<symbol id="ovg-fist-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol>
<symbol id="ovg-fist-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6.4 10.1V6.4a1.6 1.6 0 0 1 3.2 0V9.1M9.5 8.5v-3.2a1.6 1.6 0 0 1 3.2 0v3.2M12.6 8.5v-2.1a1.6 1.6 0 0 1 3.2 0V9.1M15.7 9.1V8a1.6 1.6 0 0 1 3.2 0v5.2a7.3 7.3 0 0 1-7.3 7.3H11.1a5.7 5.7 0 0 1-5.7-5.7V12.3A2.1 2.1 0 0 1 7.4 11.2h2.1a1.6 1.6 0 0 1 0 3.2H8"/></symbol>
@@ -728,11 +728,13 @@
@@ -728,11 +728,13 @@
<symbol id="ovg-hand-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6"/></symbol>
<symbol id="ovg-hand-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6"/></symbol>
<symbol id="ovg-hand-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/></symbol>
<symbol id="ovg-hand-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/></symbol>
<symbol id="ovg-hand-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/></g><path d="M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6"/></symbol>
<symbol id="ovg-hand-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M9 14.3V4.9a1.4 1.4 0 0 1 2.8 0v5.2a0.5 0.5 0 0 0 1.1 0V3.8a1.4 1.4 0 0 1 2.8 0v6.4a0.5 0.5 0 0 0 1.1 0V5.7a1.4 1.4 0 0 1 2.8 0v7.7c0 4.5-2.8 7.7-7.3 7.7c-2.9 0-4.7-1.5-6.3-4l-1.8-2.9a1.7 1.7 0 0 1 2.8-2Z"/></g><path d="M9.9 13.6V6.2a1.5 1.5 0 0 1 3 0V11.7M12.8 10.7V5.3a1.5 1.5 0 0 1 3 0V11.7M15.8 11.2V6.7a1.5 1.5 0 0 1 3 0v6.9c0 3.9-2.5 6.9-6.4 6.9c-2.6 0-4.1-1.3-5.6-3.5L4.9 14.2a1.5 1.5 0 0 1 2.4-1.8L9.9 15.6"/></symbol>
-<symbol id="ovg-handshake" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
-<symbol id="ovg-handshake-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
-<symbol id="ovg-handshake-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
-<symbol id="ovg-handshake-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
-<symbol id="ovg-handshake-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l6 6a1.2 1.2 0 0 0 1.7-1.6M13.4 15.3l0.5 0.5a1.2 1.2 0 0 0 1.7-1.6M15.6 14.2l0.3 0.3a1.2 1.2 0 0 0 1.7-1.6L18 10.8M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
+<symbol id="ovg-handshake" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
+<symbol id="ovg-handshake-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
+<symbol id="ovg-handshake-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
+<symbol id="ovg-handshake-regular" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
+<symbol id="ovg-handshake-bold" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
+<symbol id="ovg-handshake-solid" viewBox="0 0 24 24" fill="currentColor"><path d="M2.3 9.2h2.7v6.8H2.3ZM19 9.2h2.7v6.8H19Z"/><path fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" d="M5.6 10.8h0.3l3.4-2.6l2.9 1.3L14.6 8.1l3.4 2.6h0.4M5.9 10.8l5.4 5.4a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.4 12.8l-3.9-3.9l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
+<symbol id="ovg-handshake-duotone" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><g fill="currentColor" stroke="none" opacity=".2"><path d="M2.3 9.2h2.7v6.8H2.3ZM19 9.2h2.7v6.8H19Z"/><path class="ln" d="M5.6 10.8h0.3l3.4-2.6l2.9 1.3L14.6 8.1l3.4 2.6h0.4M5.9 10.8l5.4 5.4a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.4 12.8l-3.9-3.9l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></g><path d="M3.6 9.9v5.3M20.3 9.9v5.3"/><path d="M3.6 10.8h2.2l3.5-2.7l2.9 1.3L14.5 8.2l3.5 2.7h2.2"/><path d="M5.7 10.8l5.6 5.6a1.4 1.4 0 0 0 2-2M18 10.8l-4.7 4.5M17.5 12.8l-4-4l-2.3 2.1a1.3 1.3 0 0 1-1.9-1.9l1.9-2"/></symbol>
<symbol id="ovg-hash" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol>
<symbol id="ovg-hash" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol>
<symbol id="ovg-hash-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol>
<symbol id="ovg-hash-thin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol>
<symbol id="ovg-hash-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol>
<symbol id="ovg-hash-light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 9h15M4 15h15M10 3.5 8 20.5M16 3.5l-2 17"/></symbol>
Binary files a/ov-glyphs.woff2 and b/ov-glyphs.woff2 differ
Binary files a/ov-glyphs.woff2 and b/ov-glyphs.woff2 differ
@@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
-/* Generated by scripts/build-locker-core.js from openvibe-sdk 0.150.0 (src/locker). Do not edit: change the SDK,
+/* Generated by scripts/build-locker-core.js from openvibe-sdk 0.152.0 (src/locker). Do not edit: change the SDK,
* release it, bump the pin, and run the script. The SDK's files, unchanged but for the names of require and module:
* release it, bump the pin, and run the script. The SDK's files, unchanged but for the names of require and module:
* bytes.js 80a5a560c683f489
* bytes.js 80a5a560c683f489
* errors.js e73f94b7711452e7
* errors.js e73f94b7711452e7
@@ -1711,5 +1711,5 @@ __ovLockerModule.exports = { WORDS };
@@ -1711,5 +1711,5 @@ __ovLockerModule.exports = { WORDS };
if (!cache[key]) { const m = { exports: {} }; cache[key] = m; defs[key](m, m.exports, req); }
if (!cache[key]) { const m = { exports: {} }; cache[key] = m; defs[key](m, m.exports, req); }
return cache[key].exports;
return cache[key].exports;
}
}
- root.OVLockerCore = Object.assign({}, req('index'), { SDK_VERSION: "0.150.0" });
+ root.OVLockerCore = Object.assign({}, req('index'), { SDK_VERSION: "0.152.0" });
})(typeof globalThis !== 'undefined' ? globalThis : this);
})(typeof globalThis !== 'undefined' ? globalThis : this);
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-shared",
"name": "openvibe-shared",
- "version": "4.213.0",
+ "version": "4.214.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-shared",
"name": "openvibe-shared",
- "version": "4.213.0",
+ "version": "4.214.0",
"license": "MIT",
"license": "MIT",
"dependencies": {
"dependencies": {
"clean-css": "^5.3.3",
"clean-css": "^5.3.3",
@@ -21,7 +21,7 @@
@@ -21,7 +21,7 @@
"@electric-sql/pglite": "^0.5.8",
"@electric-sql/pglite": "^0.5.8",
"express": "^4.22.3",
"express": "^4.22.3",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.408.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.408.0",
- "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.150.0"
+ "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.152.0"
}
}
},
},
"node_modules/@electric-sql/pglite": {
"node_modules/@electric-sql/pglite": {
@@ -1172,9 +1172,9 @@
@@ -1172,9 +1172,9 @@
}
}
},
},
"node_modules/openvibe-sdk": {
"node_modules/openvibe-sdk": {
- "version": "0.150.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.150.0",
- "integrity": "sha512-5k2PovDQ2zhYXxLHtNNm1Q3rzPMXLpdh0lIYdl9kfa6D2/X2gYozT5W0CHRCIMAK4UhjbsZaXOSMM8GbkJWsNw==",
+ "version": "0.152.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.152.0",
+ "integrity": "sha512-/nZbjF9KTJPa3582v60tx238BBDa47tJAmxVkbgSWRReXgMHHGAhV8FGKqFmxPHOxLzvMgVp0Ei4mz4A4jsUvQ==",
"dev": true,
"dev": true,
"license": "MIT",
"license": "MIT",
"bin": {
"bin": {
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-shared",
"name": "openvibe-shared",
- "version": "4.213.0",
+ "version": "4.214.0",
"description": "Shared navbar, footer, themes, icons, legal pages, SEO, auth and analytics for every OpenVibe site",
"description": "Shared navbar, footer, themes, icons, legal pages, SEO, auth and analytics for every OpenVibe site",
"main": "index.js",
"main": "index.js",
"bin": {
"bin": {
@@ -9,6 +9,8 @@
@@ -9,6 +9,8 @@
"exports": {
"exports": {
".": "./index.js",
".": "./index.js",
"./offer-card": "./offer-card.js",
"./offer-card": "./offer-card.js",
+ "./ov-arrange": "./ov-arrange.js",
+ "./ov-arrange-core": "./ov-arrange-core.js",
"./quest": "./quest.js",
"./quest": "./quest.js",
"./quest-guide": "./guide.js",
"./quest-guide": "./guide.js",
"./account-switcher": "./account-switcher.js",
"./account-switcher": "./account-switcher.js",
@@ -210,6 +212,6 @@
@@ -210,6 +212,6 @@
"@electric-sql/pglite": "^0.5.8",
"@electric-sql/pglite": "^0.5.8",
"express": "^4.22.3",
"express": "^4.22.3",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.408.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.408.0",
- "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.150.0"
+ "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.152.0"
}
}
}
}
new file mode 100755
new file mode 100755
@@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
+#!/usr/bin/env node
+'use strict';
+/**
+ * Writes ov-arrange-core.js: openvibe-sdk/ui-layout for the browser, as one classic script that sets
+ * window.OVArrangeCore. One implementation of the rules, not two: this copies the SDK's own src/ui-layout.js
+ * unchanged but for the name of module.exports, and records the SDK version and the file's SHA-256.
+ * test/ov-arrange-core.test.js checks the file is current and runs the SDK's own cases through it.
+ *
+ * node scripts/build-arrange-core.js [<path to openvibe-sdk>] # default: node_modules/openvibe-sdk
+ */
+const fs = require('fs');
+const path = require('path');
+const crypto = require('crypto');
+
+const ROOT = path.join(__dirname, '..');
+
+function build(sdkDir = path.join(ROOT, 'node_modules', 'openvibe-sdk')) {
+ const pkg = JSON.parse(fs.readFileSync(path.join(sdkDir, 'package.json'), 'utf8'));
+ const file = path.join(sdkDir, 'src', 'ui-layout.js');
+ if (!fs.existsSync(file)) throw new Error(`openvibe-sdk ${pkg.version} has no src/ui-layout.js: release the SDK with ui-layout first`);
+ const src = fs.readFileSync(file, 'utf8');
+ const bad = [...src.matchAll(/require\((['"])([^'"]+)\1\)/g)].map((m) => m[2]);
+ if (bad.length) throw new Error(`src/ui-layout.js requires ${bad.join(', ')}: the browser build takes a self-contained module`);
+ const hash = crypto.createHash('sha256').update(src).digest('hex').slice(0, 16);
+ // The one change: module.exports takes the browser's own name, so the browser file says no module.
+ const body = src.replace(/\bmodule\.exports\b/g, '__ovArrangeCoreModule.exports');
+ return `/* Generated by scripts/build-arrange-core.js from openvibe-sdk ${pkg.version} (src/ui-layout.js). Do not edit:
+ * change the SDK, release it, bump the pin, and run the script. The SDK's file, unchanged but for the name of
+ * module.exports:
+ * ui-layout.js ${hash}
+ */
+(function (root) {
+ 'use strict';
+ if (!root || root.OVArrangeCore) return;
+ const __ovArrangeCoreModule = { exports: {} };
+${body}
+ root.OVArrangeCore = __ovArrangeCoreModule.exports;
+})(typeof globalThis !== 'undefined' ? globalThis : this);
+`;
+}
+
+if (require.main === module) {
+ const out = build(process.argv[2]);
+ fs.writeFileSync(path.join(ROOT, 'ov-arrange-core.js'), out);
+ console.log('ov-arrange-core.js written');
+}
+module.exports = { build };
@@ -22,11 +22,14 @@ const FILES = ['ov-mark.js', 'ov-glyphs.js', 'ov-brand.woff2', 'ov-look.js', 'ov
@@ -22,11 +22,14 @@ const FILES = ['ov-mark.js', 'ov-glyphs.js', 'ov-brand.woff2', 'ov-look.js', 'ov
'ov-drop.js',
'ov-drop.js',
// 4.193.0: the one tooltip (Sign in, the menu button, short labels).
// 4.193.0: the one tooltip (Sign in, the menu button, short labels).
'ov-tip.js',
'ov-tip.js',
+ // 2026-11-11: the Arrange editor, loaded only when someone presses Arrange.
+ 'ov-arrange.js',
// 2026-11-10: soft pages (intent prefetch, cross-document view transitions); not loaded by navbar.js yet.
// 2026-11-10: soft pages (intent prefetch, cross-document view transitions); not loaded by navbar.js yet.
'soft.js'];
'soft.js'];
// The files dock.js and notification-ui.js load from beside themselves: their own tables, in their own files.
// The files dock.js and notification-ui.js load from beside themselves: their own tables, in their own files.
const OWN = { 'dock.js': { name: 'DOCK_REV', files: ['dock-vibe.js', 'dock-code.js', 'dock-mount.js', 'dock-runs.js', 'ai-marks-client.js', 'action-center.js', 'dock-timeline.js', 'dock-actor.js', 'dock-agent.js', 'dock-timer.js', 'dock-share.js', 'dock-card.js', 'dock-chat-edits.js'] },
const OWN = { 'dock.js': { name: 'DOCK_REV', files: ['dock-vibe.js', 'dock-code.js', 'dock-mount.js', 'dock-runs.js', 'ai-marks-client.js', 'action-center.js', 'dock-timeline.js', 'dock-actor.js', 'dock-agent.js', 'dock-timer.js', 'dock-share.js', 'dock-card.js', 'dock-chat-edits.js'] },
'notification-ui.js': { name: 'NOTIFY_REV', files: ['notification-live.js'] },
'notification-ui.js': { name: 'NOTIFY_REV', files: ['notification-live.js'] },
+ 'ov-arrange.js': { name: 'ARRANGE_CORE_REV', files: ['ov-arrange-core.js'] },
'footer.js': { name: 'FOOTER_REV', files: ['shipped.js'] }, 'ov-thread.js': { name: 'THREAD_REV', files: ['ov-composer.js', 'ov-combo.js'] }, 'ov-composer.js': { name: 'COMPOSER_REV', files: ['ov-window.js'] }, 'ov-user.js': { name: 'USER_REV', files: ['ov-window.js'] }, 'ov-wallet.js': { name: 'WALLET_REV', files: ['ov-window.js'] }, 'ov-window.js': { name: 'WINDOW_REV', files: ['ov-float.js'] }, 'dock-vibe.js': { name: 'VIBE_REV', files: ['ov-composer.js'] }, 'boost.js': { name: 'BOOST_REV', files: ['route-transition.js'] }, 'dock-actor.js': { name: 'ACTOR_REV', files: ['ov-window.js', 'agent-sheet.js'] } };
'footer.js': { name: 'FOOTER_REV', files: ['shipped.js'] }, 'ov-thread.js': { name: 'THREAD_REV', files: ['ov-composer.js', 'ov-combo.js'] }, 'ov-composer.js': { name: 'COMPOSER_REV', files: ['ov-window.js'] }, 'ov-user.js': { name: 'USER_REV', files: ['ov-window.js'] }, 'ov-wallet.js': { name: 'WALLET_REV', files: ['ov-window.js'] }, 'ov-window.js': { name: 'WINDOW_REV', files: ['ov-float.js'] }, 'dock-vibe.js': { name: 'VIBE_REV', files: ['ov-composer.js'] }, 'boost.js': { name: 'BOOST_REV', files: ['route-transition.js'] }, 'dock-actor.js': { name: 'ACTOR_REV', files: ['ov-window.js', 'agent-sheet.js'] } };
const table = (name, files) => ` const ${name} = { ${files.map((f) => `'${f}': '${hashAsset(fs.readFileSync(path.join(ROOT, f)))}'`).join(', ')} };`;
const table = (name, files) => ` const ${name} = { ${files.map((f) => `'${f}': '${hashAsset(fs.readFileSync(path.join(ROOT, f)))}'`).join(', ')} };`;
function writeOwn() {
function writeOwn() {
@@ -105,7 +105,8 @@
@@ -105,7 +105,8 @@
const res = await fetch(fedcmLogin, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: cred.token, nonce }) });
const res = await fetch(fedcmLogin, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: cred.token, nonce }) });
const data = await res.json().catch(() => ({}));
const data = await res.json().catch(() => ({}));
if (!res.ok) return { ok: false, reason: data.error || `http-${res.status}`, auto: !!cred.isAutoSelected };
if (!res.ok) return { ok: false, reason: data.error || `http-${res.status}`, auto: !!cred.isAutoSelected };
- try { sessionStorage.setItem('ov_sso_hint', 'account'); localStorage.setItem('ov_sso_hint', 'account'); } catch { /* */ }
+ const who = data.user && /^[A-Za-z0-9_.-]{1,64}$/.test(data.user.username || '') ? ':' + data.user.username : '';
+ try { sessionStorage.setItem('ov_sso_hint', 'account' + who); localStorage.setItem('ov_sso_hint', 'account' + who); } catch { /* */ }
return { ok: true, user: data.user || null, auto: !!cred.isAutoSelected };
return { ok: true, user: data.user || null, auto: !!cred.isAutoSelected };
} catch (err) { return { ok: false, reason: 'network' }; }
} catch (err) { return { ok: false, reason: 'network' }; }
}
}
@@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
{
{
- "generated": "2026-11-11T19:14:06.693Z",
+ "generated": "2026-11-12T00:45:28.117Z",
"chrome": "/usr/bin/google-chrome",
"chrome": "/usr/bin/google-chrome",
"px": 96,
"px": 96,
"target": 0.79,
"target": 0.79,
@@ -4975,26 +4975,26 @@
@@ -4975,26 +4975,26 @@
},
},
"care": {
"care": {
"ink": [
"ink": [
- 0.7813,
- 0.7396
+ 0.7604,
+ 0.7813
],
],
"off": [
"off": [
-0.0156,
-0.0156,
- -0.0052
+ -0.0156
],
],
"com": [
"com": [
- 0.0702,
- 0.039
+ -0.019,
+ 0.0092
],
],
"sw": 2,
"sw": 2,
- "n": 1855,
+ "n": 2010,
"geo": [
"geo": [
- 0.6958,
- 0.6526
+ 0.6749,
+ 0.6904
],
],
"geoOff": [
"geoOff": [
- -0.0146,
- -0.0054
+ -0.0167,
+ -0.0118
]
]
},
},
"city": {
"city": {
@@ -5071,26 +5071,26 @@
@@ -5071,26 +5071,26 @@
},
},
"eye-off": {
"eye-off": {
"ink": [
"ink": [
- 0.8021,
- 0.7188
+ 0.7917,
+ 0.7292
],
],
"off": [
"off": [
- 0.0052,
- -0.0052
+ 0,
+ 0
],
],
"com": [
"com": [
- -0.0044,
- 0.0063
+ -0.0096,
+ 0.0092
],
],
"sw": 2,
"sw": 2,
- "n": 2109,
+ "n": 2404,
"geo": [
"geo": [
- 0.7,
- 0.6208
+ 0.7083,
+ 0.625
],
],
"geoOff": [
"geoOff": [
- 0.0042,
- -0.0021
+ 0,
+ 0
]
]
},
},
"plane": {
"plane": {
@@ -7904,24 +7904,24 @@
@@ -7904,24 +7904,24 @@
"fish": {
"fish": {
"ink": [
"ink": [
0.7917,
0.7917,
- 0.4792
+ 0.5
],
],
"off": [
"off": [
- 0,
+ 0.0208,
0
0
],
],
"com": [
"com": [
- -0.0163,
- -0.0004
+ 0.0412,
+ -0.002
],
],
"sw": 2,
"sw": 2,
- "n": 1790,
+ "n": 1669,
"geo": [
"geo": [
0.7,
0.7,
- 0.3833
+ 0.4
],
],
"geoOff": [
"geoOff": [
- 0.0042,
+ 0.025,
0
0
]
]
},
},
@@ -8127,18 +8127,18 @@
@@ -8127,18 +8127,18 @@
-0.0052
-0.0052
],
],
"com": [
"com": [
- 0.0087,
- -0.002
+ -0.0014,
+ -0.0096
],
],
"sw": 2,
"sw": 2,
- "n": 2077,
+ "n": 2000,
"geo": [
"geo": [
0.6958,
0.6958,
- 0.4166
+ 0.4089
],
],
"geoOff": [
"geoOff": [
-0.0021,
-0.0021,
- -0.0001
+ -0.0039
]
]
},
},
"wizard": {
"wizard": {
@@ -9086,6 +9086,30 @@
@@ -9086,6 +9086,30 @@
],
],
"norm": true,
"norm": true,
"icons": {
"icons": {
+ "handshake": {
+ "ink": [
+ 0.8125,
+ 0.5104
+ ],
+ "off": [
+ 0,
+ -0.0052
+ ],
+ "com": [
+ 0.0015,
+ -0.0074
+ ],
+ "sw": 2.6,
+ "n": 2328,
+ "geo": [
+ 0.8083,
+ 0.3964
+ ],
+ "geoOff": [
+ 0,
+ -0.006
+ ]
+ },
"focus": {
"focus": {
"ink": [
"ink": [
0.7917,
0.7917,
@@ -9280,25 +9304,25 @@
@@ -9280,25 +9304,25 @@
},
},
"fish": {
"fish": {
"ink": [
"ink": [
- 0.7917,
+ 0.7813,
0.4583
0.4583
],
],
"off": [
"off": [
- 0.0104,
+ 0.0156,
0
0
],
],
"com": [
"com": [
- 0.0343,
- 0.0022
+ 0.0484,
+ 0.0018
],
],
- "sw": 0,
- "n": 2200,
+ "sw": 2.6,
+ "n": 2132,
"geo": [
"geo": [
- 0.7792,
- 0.45
+ 0.7208,
+ 0.4417
],
],
"geoOff": [
"geoOff": [
- 0.0104,
+ 0.0437,
0
0
]
]
},
},
@@ -12736,26 +12760,26 @@
@@ -12736,26 +12760,26 @@
},
},
"care": {
"care": {
"ink": [
"ink": [
- 0.8021,
- 0.7396
+ 0.7604,
+ 0.7813
],
],
"off": [
"off": [
-0.0156,
-0.0156,
-0.0052
-0.0052
],
],
"com": [
"com": [
- 0.0837,
- 0.0442
+ -0.0192,
+ 0.0224
],
],
"sw": 2.6,
"sw": 2.6,
- "n": 2258,
+ "n": 2329,
"geo": [
"geo": [
- 0.7336,
- 0.6782
+ 0.65,
+ 0.7143
],
],
"geoOff": [
"geoOff": [
- 0.0126,
- -0.0308
+ -0.0167,
+ -0.0322
]
]
},
},
"news": {
"news": {
@@ -434,6 +434,44 @@ const USER = { id: 7, username: 'vibe', display_name: 'Vibe', avatar_url: null,
@@ -434,6 +434,44 @@ const USER = { id: 7, username: 'vibe', display_name: 'Vibe', avatar_url: null,
'/auth/login?silent=1&next=' + encodeURIComponent(href), 'preserves the page, query and fragment');
'/auth/login?silent=1&next=' + encodeURIComponent(href), 'preserves the page, query and fragment');
}
}
+ // ── 12. First paint from the sign-in hint (no Sign In flash for a signed-in person) ──
+ {
+ // The hint saying account draws the avatar before the session check; a failed check corrects it.
+ const { navbar, storage } = loadNavbar({
+ hostname: 'openvibe.blog', cookie: 'ov_sso_hint=account',
+ fetch: async () => jsonResponse(401, {}),
+ });
+ navbar.init({ service: 'blog', sessionUrl: '/auth/me', fedcm: false, silentLogin: false });
+ assert.ok(navbar.getElement().innerHTML.includes('openvibe-navbar-avatar'), 'account hint: avatar on the first paint');
+ assert.ok(!navbar.getElement().innerHTML.includes('openvibe-navbar-login'), 'account hint: no Sign In on the first paint');
+ await navbar.refreshAuth();
+ assert.ok(navbar.getElement().innerHTML.includes('openvibe-navbar-login'), 'a failed check corrects the bar to guest');
+ assert.strictEqual(storage.getItem('openvibe_seen_accounts'), null, 'the hint is not remembered as an account');
+ }
+ {
+ // A named hint shows the account's own name; the picture stays the neutral initial.
+ const { navbar } = loadNavbar({
+ hostname: 'openvibe.blog', cookie: 'ov_sso_hint=account%3Avibe',
+ fetch: async () => jsonResponse(401, {}),
+ });
+ navbar.init({ service: 'blog', sessionUrl: '/auth/me', fedcm: false, silentLogin: false });
+ const html = navbar.getElement().innerHTML;
+ assert.ok(html.includes('openvibe-navbar-avatar'), 'named hint: avatar on the first paint');
+ assert.ok(html.includes('alt="vibe"'), 'named hint: the hint name is the avatar alt');
+ assert.ok(!html.includes('openvibe-navbar-login'), 'named hint: no Sign In on the first paint');
+ }
+ {
+ // An explicit guest hint keeps the guest bar and never starts the silent round trip.
+ const { navbar, calls } = loadNavbar({
+ hostname: 'openvibe.blog', cookie: 'ov_sso_hint=guest', referrer: 'https://openvibe.network/',
+ fetch: async () => jsonResponse(401, {}),
+ });
+ navbar.init({ service: 'blog', sessionUrl: '/auth/me', fedcm: false, silentLogin: '/auth/login?silent=1&next={url}' });
+ assert.ok(navbar.getElement().innerHTML.includes('openvibe-navbar-login'), 'guest hint: guest bar on the first paint');
+ await navbar.refreshAuth();
+ assert.strictEqual(calls.filter(c => c.navigation).length, 0, 'guest hint: no silent navigation');
+ }
+
console.log('navbar-auth: all tests passed');
console.log('navbar-auth: all tests passed');
})().catch((err) => {
})().catch((err) => {
console.error(err);
console.error(err);
new file mode 100644
new file mode 100644
@@ -0,0 +1,138 @@
@@ -0,0 +1,138 @@
+'use strict';
+// The Arrange editor in a real headless Chrome (make your own controls, stage 2): a surface's real parts are
+// placed from the person's layout, arrow keys move and Shift+arrows resize, a refused move says why and leaves
+// the layout alone, every move is announced, the part sheet hides a part, Undo/Reset/Save work, and OpenVibe's
+// suggestion is previewed on the parts and applied only with Keep. Skipped (exit 0) without Chrome.
+const assert = require('node:assert/strict');
+const fs = require('node:fs');
+const os = require('node:os');
+const path = require('node:path');
+const http = require('node:http');
+const h = require('../browser-harness');
+assert.doesNotThrow(() => require('../ov-arrange'), 'ov-arrange.js loads (browser-only: Node takes the early return)');
+if (process.env.OV_SKIP_BROWSER === '1' || !h.findChrome()) {
+ console.log('ov-arrange-chrome: skipped (no Chrome; set CHROME_BIN)');
+ process.exit(0);
+}
+const root = path.join(__dirname, '..');
+const catalog = {
+ id: 'bot.controls', version: 1, name: 'Robot controls', devices: ['phone', 'tablet', 'computer'],
+ grid: { columns: { phone: 4, tablet: 8, computer: 12 }, cell_px: { phone: 64, tablet: 64, computer: 64 } },
+ theme_tokens: ['danger', 'surface', 'accent', 'text'],
+ parts: [
+ { id: 'stop', name: 'Stop', kind: 'button', required: true, pressed: true, min: { w: 2, h: 2, px: 64 }, sizes: [{ w: 2, h: 2 }, { w: 2, h: 1 }], styles: { tints: ['danger'], shapes: ['round'], label: true }, bindings: { keys: ['Space'], gamepad: ['south'] } },
+ { id: 'stick', name: 'Drive stick', kind: 'stick', required: false, pressed: true, min: { w: 2, h: 2 }, styles: { tints: ['surface'], shapes: ['round'], label: false }, bindings: { keys: ['W', 'A', 'S', 'D'], gamepad: ['left-stick'] } },
+ { id: 'head', name: 'Head', kind: 'slider', required: false, pressed: true, min: { w: 2, h: 1 }, styles: { tints: ['accent'], shapes: ['pill'], label: true }, bindings: { keys: [], gamepad: [] } },
+ { id: 'battery', name: 'Battery', kind: 'readout', required: false, pressed: false, min: { w: 1, h: 1 }, styles: { tints: ['text', 'surface'], shapes: ['pill', 'square'], label: true }, bindings: { keys: [], gamepad: [] } },
+ ],
+};
+const page = `<!doctype html><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<style>body{margin:0;background:#0d1117;color:#e6edf3;font:14px system-ui}#surface{display:grid;gap:8px;padding:12px;width:390px}
+[data-ov-part]{background:#1b2230;border:1px solid #334;border-radius:10px;padding:8px;min-height:24px}</style>
+<main id="surface">${catalog.parts.map((p) => `<section data-ov-part="${p.id}" id="${p.id}">${p.name}</section>`).join('')}</main>
+<script>window.CATALOG=${JSON.stringify(catalog)};</script>
+<script src="/ov-arrange-core.js"></script><script src="/ov-arrange.js"></script>
+<script>
+window.calls = {};
+window.editor = OVArrange.open({
+ surface: document.getElementById('surface'), catalog: window.CATALOG, layout: null, device: 'phone',
+ core: window.OVArrangeCore,
+ onSave: (layout) => { window.calls.save = layout; return { ok: true }; },
+ onShare: async () => ({ url: 'https://openvibe.bot/l/abc' }),
+ onReset: async () => { window.calls.reset = true; return { ok: true }; },
+ onAsk: async (words, request) => {
+ window.calls.asked = { words, request };
+ const layout = OVArrangeCore.applyDefaults(window.CATALOG, 'phone');
+ layout.parts = layout.parts.map((p) => p.id === 'stop' ? { ...p, place: { x: 1, y: 3, w: 2, h: 2 } } : p);
+ layout.name = 'Big Stop'; layout.summary = 'Stop is first, at 2 by 2.';
+ return { ok: true, layout, summary: 'Stop is first, at 2 by 2.', reasons: [] };
+ },
+ confirm: () => true,
+});
+</script>`;
+const server = http.createServer((req, res) => {
+ const u = new URL(req.url, 'http://x');
+ if (u.pathname === '/ov-arrange.js' || u.pathname === '/ov-arrange-core.js') {
+ res.writeHead(200, { 'content-type': 'application/javascript' });
+ return res.end(fs.readFileSync(path.join(root, u.pathname.slice(1))));
+ }
+ res.writeHead(200, { 'content-type': 'text/html; charset=utf-8' });
+ res.end(page);
+});
+(async () => {
+ await new Promise((ok) => server.listen(0, '127.0.0.1', ok));
+ const base = `http://127.0.0.1:${server.address().port}`;
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ov-arrange-'));
+ const browser = await h.launch({ tmpDir });
+ const wait = (ms) => new Promise((r) => setTimeout(r, ms));
+ try {
+ const context = await browser.newContext();
+ const p = await h.openPage(browser, context, { width: 390, height: 800 });
+ await p.goto(base + '/', { maxMs: 5000 });
+ const until = async (expr) => { const end = Date.now() + 5000; while (Date.now() < end) { const v = await p.evaluate(expr); if (v) return v; await wait(40); } return false; };
+ const evalv = (expr) => p.evaluate(expr);
+ assert.ok(await until(`!!window.editor && document.querySelectorAll('[data-ov-part]').length === 4`), 'the editor opened on the real parts');
+ assert.ok(await evalv(`document.querySelector('[data-ov-part="stop"]').style.gridColumn === '1 / span 2'`), 'Stop is placed by the default layout');
+ assert.ok(await evalv(`document.querySelector('[data-ov-part="stick"]').style.gridColumn !== ''`), 'the stick is placed too');
+
+ // Arrow keys move, and the move is announced. The stick goes down first so Stop has room (nothing may
+ // cover a required part: Stop itself stays where it is until the way is clear).
+ for (let i = 0; i < 2; i++) await evalv(`(() => { const el = document.getElementById('stick'); el.focus(); el.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true })); })()`);
+ await evalv(`(() => { const el = document.getElementById('stop'); el.focus(); el.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true })); })()`);
+ const moved = await evalv(`window.editor.layout().parts.find((p) => p.id === 'stop').place`);
+ assert.equal(moved.x, 1, 'ArrowRight moved Stop one cell');
+ assert.ok(/Stop moved to column 2/.test(await evalv(`document.querySelector('.ov-arrange-status').textContent`)), 'the move is said in the status line');
+ assert.ok(/column 2/.test(await evalv(`document.querySelector('[aria-live="polite"][aria-atomic="true"]').textContent`)), 'and announced');
+
+ // A refused resize says why and leaves the layout alone.
+ const before = JSON.stringify(await evalv(`window.editor.layout()`));
+ await evalv(`(() => { const el = document.getElementById('stop'); el.focus(); el.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', shiftKey: true, bubbles: true })); })()`);
+ assert.ok(/Can't do that: Stop has to be at least 2 × 2 cells\./.test(await evalv(`document.querySelector('.ov-arrange-status').textContent`)), 'a too-small Stop is refused with the reason');
+ assert.equal(JSON.stringify(await evalv(`window.editor.layout()`)), before, 'the refused resize changed nothing');
+
+ // Undo takes the move back.
+ await evalv(`document.querySelector('[data-undo]').click()`);
+ assert.equal(await evalv(`window.editor.layout().parts.find((p) => p.id === 'stop').place.x`), 0, 'Undo restored Stop');
+
+ // The part sheet hides the battery (a layout may hide what is not required), and Save sends it.
+ await evalv(`(() => { const el = document.getElementById('battery'); el.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true, button: 0, pointerId: 1, clientX: 30, clientY: 300 })); })()`);
+ await evalv(`document.querySelector('.ov-arrange-style').click()`);
+ assert.ok(await until(`!!document.querySelector('.ov-arrange-sheet')`), 'the part sheet opened');
+ await evalv(`(() => { const c = document.querySelector('.ov-arrange-sheet [data-visible]'); c.checked = false; c.dispatchEvent(new Event('change', { bubbles: true })); })()`);
+ assert.ok(await evalv(`document.getElementById('battery').hidden === true`), 'hiding the battery hides its part');
+ await evalv(`document.querySelector('.ov-arrange-sheet [data-close]').click()`);
+ await evalv(`document.querySelector('[data-save]').click()`);
+ assert.ok(await until(`!!window.calls.save`), 'Save sent the layout');
+ assert.equal(await evalv(`window.calls.save.parts.find((p) => p.id === 'battery').visible`), false, 'the saved layout carries the hidden battery');
+
+ // Ask OpenVibe: previewed on the real parts, kept only with Keep.
+ await evalv(`(() => { const f = document.querySelector('form[data-ask]'); f.querySelector('input').value = 'put Stop first and make it big'; f.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true })); })()`);
+ assert.ok(await until(`!!document.querySelector('.ov-arrange-preview')`), 'the suggestion is previewed');
+ assert.ok(/Stop is first/.test(await evalv(`document.querySelector('.ov-arrange-preview').textContent`)), 'the preview says what changed');
+ assert.equal(await evalv(`document.getElementById('stop').style.gridColumn`), '2 / span 2', 'the suggestion is shown on the real Stop');
+ assert.equal(await evalv(`document.getElementById('stop').style.gridRow`), '4 / span 2', 'and in its row');
+ await evalv(`document.querySelector('.ov-arrange-preview [data-keep]').click()`);
+ assert.equal(await evalv(`window.editor.layout().parts.find((p) => p.id === 'stop').place.x`), 1, 'Keep applied the suggestion');
+ assert.equal(await evalv(`document.querySelector('.ov-arrange-preview') === null`), true, 'the preview bar went away');
+
+ // A long press opens the part's sheet (the phone's way to the style controls).
+ await evalv(`(() => { const el = document.getElementById('stick'); const r = el.getBoundingClientRect(); el.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true, button: 0, pointerId: 9, clientX: r.left + 5, clientY: r.top + 5 })); })()`);
+ assert.ok(await until(`!!document.querySelector('.ov-arrange-sheet')`), 'a long press opens the part sheet');
+ await evalv(`document.querySelector('.ov-arrange-sheet [data-close]').click()`);
+ await evalv(`(() => { const el = document.getElementById('stick'); el.dispatchEvent(new PointerEvent('pointerup', { bubbles: true, pointerId: 9 })); })()`);
+
+ // Reset to default, Share, Done.
+ await evalv(`document.querySelector('[data-reset]').click()`);
+ assert.equal(await evalv(`window.editor.layout().name`), 'Default', 'Reset to default');
+ assert.ok(await until(`!!window.calls.reset`), 'Reset clears the stored layout through onReset');
+ await evalv(`document.querySelector('[data-share]').click()`);
+ assert.ok(await until(`!!document.querySelector('.ov-arrange-share input')`), 'Share shows the link');
+ await evalv(`document.querySelector('[data-done]').click()`);
+ assert.equal(await evalv(`document.querySelector('.ov-arrange-bar') === null`), true, 'Done closes the editor');
+ console.log('ov-arrange-chrome: move, refuse with the reason, undo, sheet, save, AI preview and Keep, reset, share and done');
+ } finally {
+ await browser.close();
+ server.close();
+ fs.rmSync(tmpDir, { recursive: true, force: true });
+ }
+})().catch((e) => { console.error(e); process.exit(1); });
new file mode 100644
new file mode 100644
@@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
+'use strict';
+// ov-arrange-core.js is openvibe-sdk/ui-layout for the browser, generated by scripts/build-arrange-core.js. The
+// editor loads it from beside itself (ARRANGE_CORE_REV) so the one validator the SDK/server/AI use is also the
+// one that refuses a bad move while a person drags. This checks the file is current and that the browser copy
+// keeps the SDK's rules, including a docked overlay's own size.
+const assert = require('node:assert/strict');
+const fs = require('node:fs');
+const path = require('node:path');
+const { build } = require('../scripts/build-arrange-core');
+
+const ROOT = path.join(__dirname, '..');
+const generated = fs.readFileSync(path.join(ROOT, 'ov-arrange-core.js'), 'utf8');
+const sdk = path.join(ROOT, 'node_modules', 'openvibe-sdk');
+assert.ok(fs.existsSync(path.join(sdk, 'src', 'ui-layout.js')), 'the pinned openvibe-sdk has ui-layout (pin 0.151.0 or later)');
+assert.equal(generated, build(sdk), 'ov-arrange-core.js is current: run node scripts/build-arrange-core.js');
+
+const saved = global.window;
+global.window = global;
+delete require.cache[require.resolve('../ov-arrange-core.js')];
+require('../ov-arrange-core.js');
+const core = global.OVArrangeCore;
+assert.ok(core && typeof core.validate === 'function' && typeof core.applyDefaults === 'function' && typeof core.merge === 'function', 'the browser core exposes validate, applyDefaults and merge');
+assert.equal(core.PRESSED_PX, 44);
+
+const catalog = {
+ id: 'bot.overlay', version: 1, name: 'Robot over a stream', devices: ['phone', 'tablet', 'computer'],
+ grid: { columns: { phone: 4, tablet: 8, computer: 12 }, cell_px: { phone: 64, tablet: 64, computer: 64 } },
+ theme_tokens: ['danger', 'surface', 'accent'],
+ parts: [
+ { id: 'estop', name: 'E-stop', kind: 'button', required: true, pressed: true, min: { w: 2, h: 2, px: 56 }, styles: { tints: ['danger'], shapes: ['round'], label: true }, bindings: { keys: [], gamepad: [] } },
+ { id: 'stick', name: 'Stick', kind: 'stick', required: false, pressed: true, min: { w: 2, h: 2 }, styles: { tints: ['surface'], shapes: ['round'], label: false }, bindings: { keys: ['W'], gamepad: [] } },
+ ],
+};
+const part = (id, place) => ({ id, visible: true, place, style: { tint: id === 'estop' ? 'danger' : 'surface', shape: 'round', opacity: 1, label: id === 'estop' }, bindings: { keys: [], gamepad: [] } });
+const layout = (estop = { dock: 'right', order: 0, w: 2, h: 2 }) => ({
+ surface: 'bot.overlay', surface_version: 1, device: 'phone', name: 'Mine', author: { name: 'Ana' }, sharing: 'private',
+ parts: [part('estop', estop), part('stick', { dock: 'left', order: 0, w: 2, h: 2 })],
+});
+assert.deepEqual(core.validate(catalog, layout()), { ok: true, reasons: [] });
+assert.ok(core.validate(catalog, layout({ dock: 'right', order: 0, w: 1, h: 1 })).reasons.includes('E-stop has to be at least 2 × 2 cells.'));
+const covered = layout();
+covered.parts[1].place = { dock: 'right', order: 0, w: 2, h: 2 };
+assert.ok(core.validate(catalog, covered).reasons.some((r) => /Stick covers E-stop/.test(r)));
+const defaults = core.applyDefaults(catalog, 'phone');
+assert.deepEqual(core.validate(catalog, defaults), { ok: true, reasons: [] }, 'the SDK defaults are valid');
+assert.equal(core.merge(layout(), { parts: [{ id: 'stick', style: { opacity: 0.5 } }] }).parts[1].style.opacity, 0.5);
+console.log('ov-arrange-core: current with the SDK and its rules, dock sizes and coverage included');
+if (saved === undefined) delete global.window;
@@ -7,6 +7,7 @@ const fs = require('fs');
@@ -7,6 +7,7 @@ const fs = require('fs');
const path = require('path');
const path = require('path');
const vm = require('vm');
const vm = require('vm');
const { build } = require('../scripts/build-locker-core');
const { build } = require('../scripts/build-locker-core');
+assert.doesNotThrow(() => require('../ov-locker-core'), 'ov-locker-core.js loads in Node too (the browser globals are there)');
const ROOT = path.join(__dirname, '..');
const ROOT = path.join(__dirname, '..');
const file = fs.readFileSync(path.join(ROOT, 'ov-locker-core.js'), 'utf8');
const file = fs.readFileSync(path.join(ROOT, 'ov-locker-core.js'), 'utf8');
new file mode 100644
new file mode 100644
@@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
+'use strict';
+// sso-client.js — the FedCM hint carries the account's own name into the navbar's first paint, and never a
+// name that is not a safe username.
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+const vm = require('vm');
+
+function load(user) {
+ const store = {}, tab = {};
+ const ctx = {
+ console, setTimeout, clearTimeout, AbortController,
+ crypto: { getRandomValues: (a) => { a.fill(1); return a; } },
+ location: { origin: 'https://openvibe.blog', hostname: 'openvibe.blog', href: 'https://openvibe.blog/' },
+ isSecureContext: true,
+ IdentityCredential: function IdentityCredential() {},
+ localStorage: { getItem: k => (k in store ? store[k] : null), setItem: (k, v) => { store[k] = String(v); } },
+ sessionStorage: { getItem: k => (k in tab ? tab[k] : null), setItem: (k, v) => { tab[k] = String(v); } },
+ navigator: { credentials: { get: async () => ({ token: 'fedcm-token', isAutoSelected: false }) } },
+ fetch: async () => ({ ok: true, json: async () => ({ user }) }),
+ };
+ ctx.globalThis = ctx; ctx.window = ctx; ctx.self = ctx; ctx.top = ctx;
+ vm.createContext(ctx);
+ vm.runInContext(fs.readFileSync(path.join(__dirname, '..', 'sso-client.js'), 'utf8'), ctx);
+ return { ctx, store };
+}
+
+(async () => {
+ {
+ const { ctx, store } = load({ username: 'vibe' });
+ assert.ok(ctx.OpenVibeSSO, 'the module loads');
+ const out = await ctx.OpenVibeSSO.fedcm({ apiBase: 'https://openvibe.network', fedcmLogin: '/auth/fedcm' });
+ assert.equal(out.ok, true);
+ assert.equal(store.ov_sso_hint, 'account:vibe', 'the next first paint knows the account name');
+ }
+ {
+ const { ctx, store } = load({ username: '<b>not-a-name</b>' });
+ const out = await ctx.OpenVibeSSO.fedcm({ apiBase: 'https://openvibe.network', fedcmLogin: '/auth/fedcm' });
+ assert.equal(out.ok, true);
+ assert.equal(store.ov_sso_hint, 'account', 'an unsafe name is dropped, never rendered');
+ }
+ console.log('sso-client: the FedCM hint carries only a safe account name into the first paint');
+})().catch((err) => {
+ console.error('sso-client test failed');
+ console.error(String(err.stack).split('\n').slice(0, 5).join('\n'));
+ process.exitCode = 1;
+});
new file mode 100644
new file mode 100644
@@ -0,0 +1,76 @@
@@ -0,0 +1,76 @@
+'use strict';
+// openvibe-shared/thread's renderThread (4.215.0): the inline Community thread Video, Pics, Community's paste page and
+// /c show, carried from OpenVibe.MediaHub test/comments-inline.test.js and OpenVibe.Community's page tests. The
+// markup is one renderer: attachments only where the site allows them, the draft kept, and signed out the composer's
+// spot is one sign-in line (the whole empty state when nobody has commented).
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+const { renderThread } = require('../thread');
+const files = require('../files');
+const serve = require('../serve');
+
+const answer = {
+ thread: { id: 'cth_1234567890123456789012' }, viewer: { can_comment: true },
+ comments: [{ id: 10, message: 'A <picture>', author: { username: 'alice', display_name: 'Alice', avatar_url: 'https://openvibe.network/avatar/alice' },
+ created_at: '2026-11-10T12:00:00Z', reply_count: 3, can_delete: true,
+ attachments: [{ id: 'med_01JAB2C3D4E5F6G7H8J9K0MNPQ', name: 'image.png', media_type: 'image/png' },
+ { id: 'med_01JAB2C3D4E5F6G7H8J9K0MNPR', name: 'notes.pdf', media_type: 'application/pdf' }],
+ replies: [{ id: 11, parent_id: 10, reply_to_id: 10, reply_to: { display_name: 'Alice' }, message: 'First', author: { username: 'bob', display_name: 'Bob' } },
+ { id: 12, parent_id: 10, reply_to_id: 11, reply_to: { display_name: 'Bob' }, message: 'Second', author: { username: 'alice', display_name: 'Alice' } }],
+ }],
+};
+const options = { answer, base: '/watch?v=12345678901', post: '/u/vup_1/comments', remove: '/u/vup_1/comments/delete', sort: 'top' };
+
+const signedOut = renderThread({ ...options, signedIn: false });
+assert.match(signedOut, /class="ovc-thread"/);
+assert.match(signedOut, /Sign in to comment/);
+assert.doesNotMatch(signedOut, /data-ovt-composer/);
+assert.doesNotMatch(signedOut, /<nav class="ovc-order"/, 'one top-level comment has nothing to put in order');
+assert.doesNotMatch(signedOut, /ovk-empty/, 'the empty box is gone; the sign-in line says it');
+assert.match(signedOut, /1 more reply/);
+assert.match(signedOut, /href="https:\/\/openvibe.network\/@alice"/);
+assert.match(signedOut, /class="ovc-target"/);
+assert.match(signedOut, /<picture>/);
+assert.match(signedOut, /<img src="https:\/\/openvibe.media\/o\/med_/);
+assert.match(signedOut, /notes.pdf/);
+assert.match(signedOut, /%2Fwatch%3Fv%3D12345678901%26sort%3Dtop/);
+assert.match(signedOut, /<p class="ovc-community"><a href="https:\/\/openvibe.community\/c\/cth_1234567890123456789012">Discuss on OpenVibe.Community<\/a><\/p>/);
+
+// Top and Newest appear only when there is something to order.
+const two = renderThread({ ...options, answer: { ...answer, comments: [...answer.comments, { ...answer.comments[0], id: 20, replies: [], reply_count: 0 }] }, signedIn: false });
+assert.match(two, /<nav class="ovc-order"/);
+assert.match(two, /sort=new/);
+assert.match(two, /aria-current="page"/);
+
+const signedIn = renderThread({ ...options, signedIn: true, replyId: 11 });
+assert.match(signedIn, /data-ovt-composer/);
+assert.match(signedIn, /name="parent_id" value="11"/);
+assert.match(signedIn, /data-ovt-files/);
+assert.match(signedIn, /name="comment_id" value="10"/);
+assert.match(signedIn, /Up to four files, 16 MB each/);
+
+// Community's paste page and Pics allow files; a thread that does not (attachmentsAllowed: false) draws no picker.
+const noFiles = renderThread({ ...options, signedIn: true, attachmentsAllowed: false });
+assert.doesNotMatch(noFiles, /data-ovt-files/);
+assert.doesNotMatch(noFiles, /Up to four files/);
+assert.doesNotMatch(noFiles, /enctype="multipart\/form-data"/);
+assert.match(noFiles, /data-ovt-composer/);
+
+// A failed post keeps the person's draft in the box, escaped.
+const draft = renderThread({ ...options, signedIn: true, draft: 'half <b>written</b>' });
+assert.match(draft, /data-ovt-text required>half <b>written<\/b><\/textarea>/);
+
+// Signed out with no comments yet: one line, not the line plus an empty-state box.
+const emptyOut = renderThread({ ...options, answer: { ...answer, comments: [] }, signedIn: false });
+assert.match(emptyOut, /<p class="ovc-signin">Be the first to comment\. <a /, 'signed out with no comments: one line, sign-in beside it');
+assert.doesNotMatch(emptyOut, /ovk-empty/);
+assert.doesNotMatch(emptyOut, /<nav class="ovc-order"/);
+assert.match(renderThread({ ...options, answer: { ...answer, comments: [] }, signedIn: true }), /<p class="ovc-none">Be the first to comment\.<\/p>/);
+
+// The stylesheet is a sibling this package serves like thread.css: listed, present, content-addressed.
+assert.ok(files.STYLES.includes('thread-inline.css'), 'thread-inline.css is a browser stylesheet');
+assert.ok(fs.existsSync(path.join(__dirname, '..', 'thread-inline.css')));
+assert.match(serve.url('thread-inline.css'), /^\/shared\/thread-inline\.css\?v=[0-9a-f]{12}$/);
+
+process.stdout.write('Inline thread: order only with two, one sign-in line when empty, attachments and drafts per site, the hashed stylesheet\n');
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+/* The inline Community thread a page shows under a thing (openvibe-shared/thread renderThread): a quiet head (the
+ title, then Top and Newest only when there is something to order), the composer or one sign-in line, the comments,
+ and a small link to the discussion. One look on Video, Pics, a paste page and /c. */
+.ovc-thread { margin: 24px 0; }
+.ovv-panel > .ovc-thread { margin: 0; }
+.ovc-head, .ovc-comment header, .ovc-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
+.ovc-head { justify-content: space-between; min-height: 40px; margin-bottom: 8px; }
+.ovc-head h2 { margin: 0; font-size: 1.125rem; }
+.ovc-signin, .ovc-none { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px; margin: 0; }
+.ovc-none { margin-top: 12px; opacity: .75; }
+.ovc-comment { padding: 12px 0; border-bottom: 1px solid var(--border, #5555); }
+.ovc-comment header img { border-radius: 50%; object-fit: cover; }
+.ovc-comment time { font-size: .875em; opacity: .8; }
+.ovc-replies { margin-left: 24px; }
+.ovc-actions form { display: inline; }
+.ovc-attach { display: inline-block; margin: 4px 8px 4px 0; }
+.ovc-attach--file { border: 1px solid currentColor; border-radius: 999px; padding: 4px 12px; }
+.ovc-attach img { max-width: 120px; max-height: 90px; object-fit: cover; }
+.ovc-order { display: inline-flex; gap: 2px; padding: 2px; border-radius: 999px; background: color-mix(in srgb, currentColor 8%, transparent); }
+.ovc-order a { min-height: 36px; padding: 4px 14px; border: 0; border-radius: 999px; font-size: .875rem; }
+.ovc-order .is-active { font-weight: 700; background: color-mix(in srgb, currentColor 16%, transparent); }
+.ovc-community { margin: 12px 0 0; font-size: .875em; }
+.ovc-community a { color: inherit; opacity: .8; text-decoration: none; }
+.ovc-community a::after { content: ' \2192'; }
+.ovc-community a:hover, .ovc-community a:focus-visible { opacity: 1; text-decoration: underline; }
@@ -300,6 +300,91 @@ ${foot || ''}<p class="ovt-c-note" data-ovt-note role="status">${esc(note || '')
@@ -300,6 +300,91 @@ ${foot || ''}<p class="ovt-c-note" data-ovt-note role="status">${esc(note || '')
</form>`;
</form>`;
}
}
+// The inline Community thread a page shows under a thing (MediaHub's Video and Pics item pages, Community's paste
+// and /c pages): the same markup on every site, from the comment service's answer. Draw with thread-inline.css.
+const MEDIA_ID = /^med_[0-9A-HJKMNP-TV-Z]{26}$/;
+const USERNAME = /^[A-Za-z0-9_]{1,32}$/;
+const ID = /^\d{1,15}$/;
+const safeHttps = (value) => { try { const url = new URL(String(value)); return url.protocol === 'https:' ? url.href : null; } catch { return null; } };
+const author = (c) => c.author || c;
+const username = (c) => author(c).username || c.username || '';
+const name = (c) => author(c).display_name || c.display_name || username(c) || c.anon_name || 'Member';
+const date = (iso) => {
+ const ms = Date.parse(String(iso || ''));
+ if (!Number.isFinite(ms)) return { short: '', full: '' };
+ const full = new Date(ms).toLocaleString('en-US', { dateStyle: 'long', timeStyle: 'short', timeZone: 'UTC' }) + ' UTC';
+ const seconds = Math.max(0, Math.floor((Date.now() - ms) / 1000));
+ const unit = seconds < 60 ? ['second', seconds] : seconds < 3600 ? ['minute', Math.floor(seconds / 60)]
+ : seconds < 86400 ? ['hour', Math.floor(seconds / 3600)] : seconds < 2592000 ? ['day', Math.floor(seconds / 86400)]
+ : seconds < 31536000 ? ['month', Math.floor(seconds / 2592000)] : ['year', Math.floor(seconds / 31536000)];
+ return { short: seconds < 60 ? 'just now' : `${unit[1]} ${unit[0]}${unit[1] === 1 ? '' : 's'} ago`, full };
+};
+
+function query(base, sort, extra = {}, anchor = 'comments') {
+ const q = new URLSearchParams({ sort, ...extra });
+ return `${base}${base.includes('?') ? '&' : '?'}${q.toString()}#${anchor}`;
+}
+
+/**
+ * The inline Community thread a page shows under a thing (Video, Pics, a paste page, /c): the quiet head, the
+ * composer or one sign-in line, the comments with their replies, targets and attachments, the order (Top and
+ * Newest only when there is something to put in order), More, and the link to the discussion. Server-rendered and
+ * complete without script; ov-thread.js and ov-composer.js give the composer its behaviour.
+ * answer: the comment service's answer ({ thread, comments, next_cursor, viewer }), or null for a thread nobody
+ * has commented on; base: the page's own address (sorting, paging and reply links come back here)
+ * post, remove: where the composer and Delete post; signedIn: this person may write
+ * attachmentsAllowed: the composer offers files (Community's paste page and Pics say yes; elsewhere no)
+ * draft: the message kept in the box after a failed post
+ * sort, replyId, expandedId, expandedReplies, error: as the page received them
+ */
+function renderThread({ answer, base, post, remove, signedIn, attachmentsAllowed = true, sort = 'top', replyId = null, expandedId = null, expandedReplies = null, error = null, draft = '' }) {
+ const comments = Array.isArray(answer && answer.comments) ? answer.comments : [];
+ const accessId = answer && answer.thread && String(answer.thread.access_id || answer.thread.id || '');
+ const threadUrl = safeHttps(answer && answer.thread && answer.thread.url) || (/^cth_[A-Za-z0-9_-]{22}$/.test(accessId) ? `https://openvibe.community/c/${accessId}` : null);
+ const validReply = ID.test(String(replyId || '')) ? String(replyId) : null;
+ const validExpanded = ID.test(String(expandedId || '')) ? String(expandedId) : null;
+ // Signed out, the composer's spot is one line; with no comments yet that line is the whole empty state (no second
+ // box saying the same thing).
+ const signIn = `<p class="ovc-signin">${comments.length ? 'Sign in to comment.' : 'Be the first to comment.'} <a class="ovk-btn ovk-btn--primary" href="/auth/login?next=${encodeURIComponent(query(base, sort))}">Sign in</a></p>`;
+ const composer_html = (parent = null) => signedIn ? composer({ action: post, name: 'message', label: 'Comment', placeholder: parent ? 'Write a reply…' : 'Add a comment…', value: draft, maxlength: 2000,
+ sendLabel: parent ? 'Reply' : 'Comment', hidden: parent ? { parent_id: parent } : {},
+ attach: attachmentsAllowed ? { name: 'files', accept: 'image/jpeg,image/png,image/gif,image/webp,application/pdf,text/plain' } : null,
+ note: attachmentsAllowed ? 'Up to four files, 16 MB each. JPEG, PNG, GIF, WebP, PDF or text.' : '',
+ }) : signIn;
+ const attachments = (c) => (Array.isArray(c.attachments) ? c.attachments : []).map((a) => {
+ if (!MEDIA_ID.test(String(a.id || ''))) return '';
+ const url = `https://openvibe.media/o/${a.id}`;
+ const title = esc(a.name || 'Attached file');
+ return `<a class="ovc-attach${String(a.media_type || '').startsWith('image/') ? ' ovc-attach--image' : ' ovc-attach--file'}" href="${url}" target="_blank" rel="noopener noreferrer">${String(a.media_type || '').startsWith('image/')
+ ? `<img src="${url}" alt="${title}" loading="lazy" width="120">` : title}</a>`;
+ }).join('');
+ const comment = (c, root = null) => {
+ const id = String(c.id);
+ if (!ID.test(id)) return '';
+ const gone = !!(c.deleted || c.is_deleted);
+ const user = username(c);
+ const profile = USERNAME.test(user) ? `https://openvibe.network/@${encodeURIComponent(user)}` : null;
+ const avatar = safeHttps(author(c).avatar_url || c.avatar_url) || (profile ? `https://openvibe.network/avatar/${encodeURIComponent(user)}?s=80` : null);
+ const when = date(c.created_at);
+ const targetId = ID.test(String(c.reply_to_id || '')) ? String(c.reply_to_id) : null;
+ const topId = root || id;
+ const target = targetId && c.reply_to ? `<a class="ovc-target" href="${query(base, sort, { replies: topId }, `comment-${targetId}`)}">↪ @${esc(c.reply_to.display_name || 'Member')}</a>` : '';
+ const controls = !gone ? `<div class="ovc-actions">${signedIn ? `<a class="ovk-btn ovk-btn--quiet" href="${query(base, sort, { reply: id }, `comment-${id}`)}" data-ovc-reply="${id}">Reply</a>` : ''}${c.can_delete && signedIn ? `<form method="post" action="${esc(remove)}"><input type="hidden" name="comment_id" value="${id}"><button class="ovk-btn ovk-btn--quiet" type="submit">Delete</button></form>` : ''}</div>` : '';
+ let replies = '';
+ if (!root) {
+ const rows = validExpanded === id && Array.isArray(expandedReplies) ? expandedReplies : (Array.isArray(c.replies) ? c.replies : []);
+ const more = Math.max(0, Number(c.reply_count || 0) - rows.length);
+ replies = `<div class="ovc-replies" data-ovc-replies="${id}">${rows.map((r) => comment(r, id)).join('')}${more ? `<a class="ovc-more ovk-btn ovk-btn--quiet" data-ovc-more="${id}" href="${query(base, sort, { replies: id })}">${more} more ${more === 1 ? 'reply' : 'replies'}</a>` : ''}</div>`;
+ }
+ return `<article class="ovc-comment" id="comment-${id}"><header>${avatar ? `<img src="${esc(avatar)}" alt="" width="32" height="32" loading="lazy">` : ''}${profile ? `<a href="${profile}">${esc(name(c))}</a>` : `<span>${esc(name(c))}</span>`}${when.short ? `<time datetime="${esc(c.created_at)}" title="${esc(when.full)}">${esc(when.short)}</time>` : ''}</header>${target}${gone ? '<p>Comment removed</p>' : `<p>${esc(c.message || '')}</p>${attachments(c)}`}${controls}${validReply === id ? `<div data-ovc-composer-slot>${composer_html(id)}</div>` : ''}${replies}</article>`;
+ };
+ const hasReplySlot = validReply && comments.some((c) => String(c.id) === validReply || (validExpanded === String(c.id) && Array.isArray(expandedReplies) ? expandedReplies : c.replies || []).some((r) => String(r.id) === validReply));
+ // Top and Newest only when there is something to put in order.
+ const order = comments.length < 2 && !(answer && answer.next_cursor) ? '' : `<nav class="ovc-order" aria-label="Comment order">${[['top', 'Top'], ['new', 'Newest']].map(([key, label]) => `<a class="ovk-btn ovk-btn--quiet${sort === key ? ' is-active' : ''}" href="${query(base, key)}"${sort === key ? ' aria-current="page"' : ''} data-ovc-order>${label}</a>`).join('')}</nav>`;
+ const next = answer && answer.next_cursor ? `<a class="ovk-btn ovk-btn--quiet ovc-more" href="${query(base, sort, { after: answer.next_cursor })}" data-ovc-order>More comments</a>` : '';
+ return `<section class="ovc-thread" id="comments" data-ovc-thread><div class="ovc-head"><h2>Comments</h2>${order}</div>${error ? `<p role="alert">${esc(error)}</p>` : ''}${!hasReplySlot ? `<div data-ovc-composer-slot>${composer_html()}</div>` : ''}${comments.length ? `<div class="ovc-list">${comments.map((c) => comment(c)).join('')}</div>` : (signedIn ? '<p class="ovc-none">Be the first to comment.</p>' : '')}${next}${threadUrl ? `<p class="ovc-community"><a href="${esc(threadUrl)}">Discuss on OpenVibe.Community</a></p>` : ''}</section>`;
+}
+
/**
/**
* The whole screen: the sidebar and the conversation (head, the turns or the empty state, the composer). Wrap it in
* The whole screen: the sidebar and the conversation (head, the turns or the empty state, the composer). Wrap it in
* the site's page; on a phone the composer stays at the bottom above the app bar.
* the site's page; on a phone the composer stays at the bottom above the app bar.
@@ -319,4 +404,4 @@ function page({ sidebar: side = '', head: top = '', turns = [], empty = '', comp
@@ -319,4 +404,4 @@ function page({ sidebar: side = '', head: top = '', turns = [], empty = '', comp
${body}</section>${pan ? `${pan}<div class="ovt-panel-scrim" data-ovt-panel-scrim hidden></div>` : ''}</div>`;
${body}</section>${pan ? `${pan}<div class="ovt-panel-scrim" data-ovt-panel-scrim hidden></div>` : ''}</div>`;
}
}
-module.exports = { page, sidebar, head, turn, divider, work, answer, card, panel, composer, files, face, group, groupOf, icon, esc };
+module.exports = { page, sidebar, head, turn, divider, work, answer, card, panel, composer, renderThread, files, face, group, groupOf, icon, esc };