@oddessentials/agent-guild 1.28.0 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/bin/native/win32-arm64/agent-guild-report.exe +0 -0
  2. package/bin/native/win32-x64/agent-guild-report.exe +0 -0
  3. package/bin/windows/arm64/agent-guild-start.exe +0 -0
  4. package/bin/windows/x64/agent-guild-start.exe +0 -0
  5. package/docs/api.md +10 -2
  6. package/node_modules/@jsquash/jpeg/CHANGELOG.md +54 -0
  7. package/node_modules/@jsquash/jpeg/LICENSE +201 -0
  8. package/node_modules/@jsquash/jpeg/README.md +105 -0
  9. package/node_modules/@jsquash/jpeg/codec/LICENSE.codec.md +132 -0
  10. package/node_modules/@jsquash/jpeg/codec/dec/mozjpeg_dec.d.ts +7 -0
  11. package/node_modules/@jsquash/jpeg/codec/dec/mozjpeg_dec.js +15 -0
  12. package/node_modules/@jsquash/jpeg/codec/dec/mozjpeg_dec.wasm +0 -0
  13. package/node_modules/@jsquash/jpeg/codec/enc/mozjpeg_enc.d.ts +37 -0
  14. package/node_modules/@jsquash/jpeg/codec/enc/mozjpeg_enc.js +15 -0
  15. package/node_modules/@jsquash/jpeg/codec/enc/mozjpeg_enc.wasm +0 -0
  16. package/node_modules/@jsquash/jpeg/codec/pre.js +24 -0
  17. package/node_modules/@jsquash/jpeg/decode.d.ts +16 -0
  18. package/node_modules/@jsquash/jpeg/decode.js +36 -0
  19. package/node_modules/@jsquash/jpeg/emscripten-types.d.ts +137 -0
  20. package/node_modules/@jsquash/jpeg/encode.d.ts +21 -0
  21. package/node_modules/@jsquash/jpeg/encode.js +35 -0
  22. package/node_modules/@jsquash/jpeg/index.d.ts +3 -0
  23. package/node_modules/@jsquash/jpeg/index.js +2 -0
  24. package/node_modules/@jsquash/jpeg/meta.d.ts +24 -0
  25. package/node_modules/@jsquash/jpeg/meta.js +25 -0
  26. package/node_modules/@jsquash/jpeg/package.json +32 -0
  27. package/node_modules/@jsquash/jpeg/utils.d.ts +17 -0
  28. package/node_modules/@jsquash/jpeg/utils.js +31 -0
  29. package/node_modules/@jsquash/png/CHANGELOG.md +69 -0
  30. package/node_modules/@jsquash/png/LICENSE +201 -0
  31. package/node_modules/@jsquash/png/README.md +114 -0
  32. package/node_modules/@jsquash/png/codec/LICENSE.codec.md +29 -0
  33. package/node_modules/@jsquash/png/codec/README.md +5 -0
  34. package/node_modules/@jsquash/png/codec/pkg/README.md +5 -0
  35. package/node_modules/@jsquash/png/codec/pkg/squoosh_png.d.ts +71 -0
  36. package/node_modules/@jsquash/png/codec/pkg/squoosh_png.js +314 -0
  37. package/node_modules/@jsquash/png/codec/pkg/squoosh_png_bg.wasm +0 -0
  38. package/node_modules/@jsquash/png/codec/pkg/squoosh_png_bg.wasm.d.ts +13 -0
  39. package/node_modules/@jsquash/png/codec/pre.js +24 -0
  40. package/node_modules/@jsquash/png/decode.d.ts +29 -0
  41. package/node_modules/@jsquash/png/decode.js +35 -0
  42. package/node_modules/@jsquash/png/encode.d.ts +31 -0
  43. package/node_modules/@jsquash/png/encode.js +40 -0
  44. package/node_modules/@jsquash/png/index.d.ts +3 -0
  45. package/node_modules/@jsquash/png/index.js +2 -0
  46. package/node_modules/@jsquash/png/meta.d.ts +16 -0
  47. package/node_modules/@jsquash/png/meta.js +15 -0
  48. package/node_modules/@jsquash/png/package.json +34 -0
  49. package/node_modules/@jsquash/webp/CHANGELOG.md +48 -0
  50. package/node_modules/@jsquash/webp/LICENSE +201 -0
  51. package/node_modules/@jsquash/webp/README.md +100 -0
  52. package/node_modules/@jsquash/webp/codec/LICENSE.codec.md +29 -0
  53. package/node_modules/@jsquash/webp/codec/Makefile.animated.backup +88 -0
  54. package/node_modules/@jsquash/webp/codec/README.md +5 -0
  55. package/node_modules/@jsquash/webp/codec/dec/README.md +18 -0
  56. package/node_modules/@jsquash/webp/codec/dec/webp_dec.d.ts +7 -0
  57. package/node_modules/@jsquash/webp/codec/dec/webp_dec.js +16 -0
  58. package/node_modules/@jsquash/webp/codec/dec/webp_dec.wasm +0 -0
  59. package/node_modules/@jsquash/webp/codec/enc/README.md +22 -0
  60. package/node_modules/@jsquash/webp/codec/enc/webp_enc.d.ts +42 -0
  61. package/node_modules/@jsquash/webp/codec/enc/webp_enc.js +16 -0
  62. package/node_modules/@jsquash/webp/codec/enc/webp_enc.wasm +0 -0
  63. package/node_modules/@jsquash/webp/codec/enc/webp_enc_simd.d.ts +1 -0
  64. package/node_modules/@jsquash/webp/codec/enc/webp_enc_simd.js +16 -0
  65. package/node_modules/@jsquash/webp/codec/enc/webp_enc_simd.wasm +0 -0
  66. package/node_modules/@jsquash/webp/codec/pre.js +24 -0
  67. package/node_modules/@jsquash/webp/decode.d.ts +15 -0
  68. package/node_modules/@jsquash/webp/decode.js +34 -0
  69. package/node_modules/@jsquash/webp/emscripten-types.d.ts +137 -0
  70. package/node_modules/@jsquash/webp/encode.d.ts +23 -0
  71. package/node_modules/@jsquash/webp/encode.js +43 -0
  72. package/node_modules/@jsquash/webp/index.d.ts +3 -0
  73. package/node_modules/@jsquash/webp/index.js +2 -0
  74. package/node_modules/@jsquash/webp/meta.d.ts +19 -0
  75. package/node_modules/@jsquash/webp/meta.js +33 -0
  76. package/node_modules/@jsquash/webp/package.json +35 -0
  77. package/node_modules/@jsquash/webp/utils.d.ts +17 -0
  78. package/node_modules/@jsquash/webp/utils.js +31 -0
  79. package/node_modules/argparse/lib/argparse.js +1 -1
  80. package/node_modules/argparse/lib/textwrap.js +13 -2
  81. package/node_modules/argparse/package.json +1 -1
  82. package/node_modules/markdown-it/dist/browser/markdown-it.esm.min.mjs +737 -686
  83. package/node_modules/markdown-it/dist/browser/markdown-it.esm.min.mjs.map +1 -1
  84. package/node_modules/markdown-it/dist/browser/markdown-it.umd.min.js +8 -8
  85. package/node_modules/markdown-it/dist/browser/markdown-it.umd.min.js.map +1 -1
  86. package/node_modules/markdown-it/dist/markdown-it.cjs.js +660 -518
  87. package/node_modules/markdown-it/dist/markdown-it.cjs.js.map +1 -1
  88. package/node_modules/markdown-it/dist/markdown-it.d.mts +1 -0
  89. package/node_modules/markdown-it/dist/markdown-it.mjs +179 -124
  90. package/node_modules/markdown-it/dist/markdown-it.mjs.map +1 -1
  91. package/node_modules/markdown-it/package.json +11 -11
  92. package/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  93. package/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  94. package/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  95. package/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  96. package/node_modules/wasm-feature-detect/LICENSE +202 -0
  97. package/node_modules/wasm-feature-detect/README.md +109 -0
  98. package/node_modules/wasm-feature-detect/README.md.ejs +89 -0
  99. package/node_modules/wasm-feature-detect/dist/cjs/index.cjs +1 -0
  100. package/node_modules/wasm-feature-detect/dist/esm/index.js +1 -0
  101. package/node_modules/wasm-feature-detect/dist/index.d.cts +24 -0
  102. package/node_modules/wasm-feature-detect/dist/index.d.ts +24 -0
  103. package/node_modules/wasm-feature-detect/dist/umd/index.js +1 -0
  104. package/node_modules/wasm-feature-detect/package.json +53 -0
  105. package/node_modules/ws/README.md +21 -29
  106. package/node_modules/ws/lib/buffer-util.js +13 -2
  107. package/node_modules/ws/lib/sender.js +4 -1
  108. package/node_modules/ws/lib/websocket.js +8 -3
  109. package/node_modules/ws/package.json +1 -1
  110. package/package.json +7 -4
  111. package/src/manager/config.mjs +2 -0
  112. package/src/manager/folder-browser.mjs +39 -3
  113. package/src/manager/main.mjs +4 -0
  114. package/src/manager/server.mjs +32 -5
  115. package/src/manager/steam-workshop.mjs +64 -0
  116. package/src/manager/yard-art.mjs +1 -1
  117. package/src/manager/yard-piece-check.mjs +424 -0
  118. package/src/manager/yard-pieces.mjs +188 -0
  119. package/src/manager/yard-worlds.mjs +214 -0
  120. package/web/app.js +175 -11
  121. package/web/index.html +20 -2
  122. package/web/skins/grove/ui/companion-bird.webp +0 -0
  123. package/web/skins/guild/skin.css +2 -13
  124. package/web/styles.css +15 -1
  125. package/web/yard/art.json +1 -1
  126. package/web/yard/model.mjs +44 -2
  127. package/web/yard/photo.js +3 -4
  128. package/web/yard/renderer.js +150 -38
  129. package/web/yard/vendor/engine.js +500 -495
  130. package/web/yard/view.js +160 -14
  131. package/web/yard/yard.css +55 -12
  132. package/web/skins/grove/ui/install-now-dark.svg +0 -91
  133. package/web/skins/grove/ui/install-now-light.svg +0 -91
package/web/index.html CHANGED
@@ -19,6 +19,7 @@
19
19
  <link rel="stylesheet" href="/yard/yard.css">
20
20
  </head>
21
21
  <body>
22
+ <svg class="yard-play-defs" aria-hidden="true" focusable="false"><defs><linearGradient id="yard-play-gold" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff3cf"/><stop offset=".3" stop-color="#f6dc9c"/><stop offset=".6" stop-color="#e8c47c"/><stop offset=".8" stop-color="#b8893d"/><stop offset="1" stop-color="#f1d08a"/></linearGradient><radialGradient id="yard-play-core" cx=".5" cy=".38" r=".7"><stop offset="0" stop-color="#2a2150"/><stop offset="1" stop-color="#090b16"/></radialGradient><filter id="yard-play-blur" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="4"/></filter><g id="yard-play-badge"><circle cx="24" cy="24" r="14.5" fill="url(#yard-play-gold)"/><circle cx="24" cy="24" r="12.8" fill="url(#yard-play-core)"/><circle cx="24" cy="24" r="10.5" fill="none" stroke="#e8c47c" stroke-opacity=".35"/></g><g id="yard-play-orb-art"><circle class="yard-play-pulse" cx="24" cy="24" r="17" fill="#8f74ff" opacity=".6" filter="url(#yard-play-blur)"/><g class="yard-play-ring"><ellipse cx="24" cy="24" rx="22" ry="7" fill="none" stroke="url(#yard-play-gold)" stroke-width="1" opacity=".8" transform="rotate(-24 24 24)"/><circle cx="44" cy="15" r="1.4" fill="#fff3cf"/></g><use href="#yard-play-badge"/><path d="M20.5 17.5 L31 24 L20.5 30.5 Z" fill="url(#yard-play-gold)" stroke="#fff3cf" stroke-opacity=".5" stroke-width=".6" stroke-linejoin="round"/></g></defs></svg><svg class="yard-play-defs" aria-hidden="true" focusable="false"><defs><linearGradient id="yard-solo-gold" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff3cf"/><stop offset=".28" stop-color="#f6dc9c"/><stop offset=".55" stop-color="#e8c47c"/><stop offset=".78" stop-color="#b8893d"/><stop offset="1" stop-color="#f1d08a"/></linearGradient><linearGradient id="yard-solo-core" x1="0" y1=".15" x2="1" y2=".85"><stop offset="0" stop-color="#a83a0c"/><stop offset=".47" stop-color="#14090c"/><stop offset=".53" stop-color="#070b1a"/><stop offset="1" stop-color="#1a5cb8"/></linearGradient><filter id="yard-solo-blur" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="4"/></filter></defs></svg><svg class="yard-play-defs" aria-hidden="true" focusable="false"><defs><linearGradient id="yard-arena-gold" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff3cf"/><stop offset=".28" stop-color="#f6dc9c"/><stop offset=".55" stop-color="#e8c47c"/><stop offset=".78" stop-color="#b8893d"/><stop offset="1" stop-color="#f1d08a"/></linearGradient><linearGradient id="yard-arena-steel" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#8b8f96"/><stop offset=".5" stop-color="#eef0f2"/><stop offset="1" stop-color="#6f7379"/></linearGradient><linearGradient id="yard-arena-core" x1="0" y1=".15" x2="1" y2=".85"><stop offset="0" stop-color="#96200f"/><stop offset=".47" stop-color="#14090c"/><stop offset=".53" stop-color="#0d0918"/><stop offset="1" stop-color="#4a2fb0"/></linearGradient><filter id="yard-arena-blur" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="4"/></filter></defs></svg><svg class="yard-play-defs" aria-hidden="true" focusable="false"><defs><linearGradient id="yard-builders-gold" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff3cf"/><stop offset=".28" stop-color="#f6dc9c"/><stop offset=".55" stop-color="#e8c47c"/><stop offset=".78" stop-color="#b8893d"/><stop offset="1" stop-color="#f1d08a"/></linearGradient><radialGradient id="yard-builders-core" cx=".5" cy=".38" r=".7"><stop offset="0" stop-color="#1c3a78"/><stop offset="1" stop-color="#0a0e18"/></radialGradient><filter id="yard-builders-blur" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="4"/></filter></defs></svg><svg class="yard-play-defs" aria-hidden="true" focusable="false"><defs><linearGradient id="yard-grove-gold" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff3cf"/><stop offset=".28" stop-color="#f1dc9a"/><stop offset=".55" stop-color="#d8c07a"/><stop offset=".78" stop-color="#a5863e"/><stop offset="1" stop-color="#e6cf8a"/></linearGradient><radialGradient id="yard-grove-well" cx=".5" cy=".42" r=".62"><stop offset="0" stop-color="#3a6a48"/><stop offset="1" stop-color="#0e1c13"/></radialGradient><filter id="yard-grove-blur" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="4"/></filter></defs></svg>
22
23
  <header class="topbar">
23
24
  <div class="brand">
24
25
  <h1>Agent Guild</h1>
@@ -141,7 +142,7 @@
141
142
 
142
143
  <section id="yard" hidden aria-label="Yard">
143
144
  <div class="yard-main">
144
- <div class="yard-heading"><div><p class="yard-eyebrow">AGENT GUILD · YOUR WORK, ALIVE</p><h2 id="yard-title">The Guild Yard</h2><p id="yard-subtitle"></p></div><div class="yard-heading-side"><span id="yard-summary" class="yard-summary" role="status"></span><div class="yard-play"><svg class="yard-play-defs" aria-hidden="true" focusable="false"><defs><linearGradient id="yard-play-gold" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff3cf"/><stop offset=".3" stop-color="#f6dc9c"/><stop offset=".6" stop-color="#e8c47c"/><stop offset=".8" stop-color="#b8893d"/><stop offset="1" stop-color="#f1d08a"/></linearGradient><radialGradient id="yard-play-core" cx=".5" cy=".38" r=".7"><stop offset="0" stop-color="#2a2150"/><stop offset="1" stop-color="#090b16"/></radialGradient><filter id="yard-play-blur" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="4"/></filter><g id="yard-play-badge"><circle cx="24" cy="24" r="14.5" fill="url(#yard-play-gold)"/><circle cx="24" cy="24" r="12.8" fill="url(#yard-play-core)"/><circle cx="24" cy="24" r="10.5" fill="none" stroke="#e8c47c" stroke-opacity=".35"/></g><g id="yard-play-orb-art"><circle class="yard-play-pulse" cx="24" cy="24" r="17" fill="#8f74ff" opacity=".6" filter="url(#yard-play-blur)"/><g class="yard-play-ring"><ellipse cx="24" cy="24" rx="22" ry="7" fill="none" stroke="url(#yard-play-gold)" stroke-width="1" opacity=".8" transform="rotate(-24 24 24)"/><circle cx="44" cy="15" r="1.4" fill="#fff3cf"/></g><use href="#yard-play-badge"/><path d="M20.5 17.5 L31 24 L20.5 30.5 Z" fill="url(#yard-play-gold)" stroke="#fff3cf" stroke-opacity=".5" stroke-width=".6" stroke-linejoin="round"/></g></defs></svg><span class="yard-play-burst" aria-hidden="true"></span><div class="yard-play-chip"><a id="yard-play" class="yard-play-link" href="https://survive.oddessentials.ai/" target="_blank" rel="noopener noreferrer" aria-label="Play Agent Guild: AI Revolt, free in your browser" title="Play Agent Guild: AI Revolt, free in your browser"><svg class="yard-play-orb" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><use href="#yard-play-orb-art"/></svg><span class="yard-play-text"><span class="yard-play-title">Play<span class="yard-play-now"> now</span></span><span class="yard-play-sub">AI Revolt<span class="yard-play-sub-more"> · free in your browser</span></span></span><svg class="yard-play-chev" viewBox="0 0 24 16" aria-hidden="true" focusable="false"><path d="M3 2l5 6-5 6"/><path d="M10 2l5 6-5 6"/><path d="M17 2l5 6-5 6"/></svg></a><button id="yard-play-more" class="yard-play-more" type="button" popovertarget="yard-play-menu" aria-haspopup="menu" aria-label="Choose a game" title="Choose a game"><svg class="yard-play-orb yard-play-more-orb" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><use href="#yard-play-orb-art"/></svg><svg class="yard-play-caret" viewBox="0 0 12 8" aria-hidden="true" focusable="false"><path d="M1.5 1.5L6 6.5l4.5-5"/></svg></button></div><div id="yard-play-menu" class="menu yard-play-menu" popover role="menu" aria-label="Games"><div class="yard-play-menu-frame"><a class="menu-item yard-play-game" role="menuitem" href="https://survive.oddessentials.ai/" target="_blank" rel="noopener noreferrer"><svg class="yard-play-game-icon" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><use href="#yard-play-badge"/><g fill="url(#yard-play-gold)"><circle cx="24" cy="24" r="3"/><circle cx="24" cy="16.5" r="1.9"/><circle cx="30.5" cy="20.2" r="1.9"/><circle cx="30.5" cy="27.8" r="1.9"/><circle cx="24" cy="31.5" r="1.9"/><circle cx="17.5" cy="27.8" r="1.9"/><circle cx="17.5" cy="20.2" r="1.9"/></g></svg><span class="yard-play-game-text"><span class="yard-play-title">Survive the swarm</span><span class="yard-play-game-sub">AI Revolt</span></span></a><a class="menu-item yard-play-game" role="menuitem" href="https://towers.oddessentials.ai/" target="_blank" rel="noopener noreferrer"><svg class="yard-play-game-icon" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><use href="#yard-play-badge"/><path d="M17 33v-2.5h2.2V22L16.5 19.5V15h3.2v2.6h2.7V15h3.2v2.6h2.7V15h3.2v4.5L28.8 22v8.5H31V33z" fill="url(#yard-play-gold)"/></svg><span class="yard-play-game-text"><span class="yard-play-title">Defend the towers</span><span class="yard-play-game-sub">Towers</span></span></a></div></div></div><div class="yard-play yard-play-solo"><svg class="yard-play-defs" aria-hidden="true" focusable="false"><defs><linearGradient id="yard-solo-gold" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#fff3cf"/><stop offset=".28" stop-color="#f6dc9c"/><stop offset=".55" stop-color="#e8c47c"/><stop offset=".78" stop-color="#b8893d"/><stop offset="1" stop-color="#f1d08a"/></linearGradient><linearGradient id="yard-solo-core" x1="0" y1=".15" x2="1" y2=".85"><stop offset="0" stop-color="#a83a0c"/><stop offset=".47" stop-color="#14090c"/><stop offset=".53" stop-color="#070b1a"/><stop offset="1" stop-color="#1a5cb8"/></linearGradient><filter id="yard-solo-blur" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="4"/></filter></defs></svg><span class="yard-play-burst" aria-hidden="true"></span><div class="yard-play-chip"><a id="yard-play-solo" class="yard-play-link" href="https://agforever.oddessentials.ai/" target="_blank" rel="noopener noreferrer" aria-label="Play Wizard Duels, free in your browser" title="Play Wizard Duels, free in your browser"><svg class="yard-play-orb" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><g class="yard-play-pulse"><circle cx="20" cy="24" r="15" fill="#ff6a1f" opacity=".8" filter="url(#yard-solo-blur)"/><circle cx="28" cy="24" r="15" fill="#3f9dff" opacity=".8" filter="url(#yard-solo-blur)"/></g><g class="yard-play-ring"><ellipse cx="24" cy="24" rx="22" ry="7" fill="none" stroke="url(#yard-solo-gold)" stroke-width="1" opacity=".8" transform="rotate(-24 24 24)"/><circle cx="44" cy="15" r="1.4" fill="#bfe6ff"/><circle cx="4" cy="33" r="1.4" fill="#ffb45e"/></g><circle cx="24" cy="24" r="14.5" fill="url(#yard-solo-gold)"/><circle cx="24" cy="24" r="12.8" fill="url(#yard-solo-core)"/><circle cx="24" cy="24" r="10.5" fill="none" stroke="#e8c47c" stroke-opacity=".35"/><path d="M20.5 17.5 L31 24 L20.5 30.5 Z" fill="url(#yard-solo-gold)" stroke="#fff3cf" stroke-opacity=".5" stroke-width=".6" stroke-linejoin="round"/></svg><span class="yard-play-text"><span class="yard-play-title">Play<span class="yard-play-now"> now</span></span><span class="yard-play-sub">Wizard Duels<span class="yard-play-sub-more"> · free in your browser</span></span></span><svg class="yard-play-chev" viewBox="0 0 24 16" aria-hidden="true" focusable="false"><path d="M3 2l5 6-5 6"/><path d="M10 2l5 6-5 6"/><path d="M17 2l5 6-5 6"/></svg></a></div></div><button id="yard-install" class="yard-install" type="button" hidden aria-label="Install Agent Guild: Grove Companion for Windows or macOS" title="Install Agent Guild: Grove Companion for Windows or macOS"><img class="yard-install-dark" src="/skins/grove/ui/install-now-dark.svg" alt="" loading="lazy"><img class="yard-install-light" src="/skins/grove/ui/install-now-light.svg" alt="" loading="lazy"></button></div></div>
145
+ <div class="yard-heading"><div><p class="yard-eyebrow">AGENT GUILD · YOUR WORK, ALIVE</p><h2 id="yard-title">The Guild Yard</h2><p id="yard-subtitle"></p></div><div class="yard-heading-side"><span id="yard-summary" class="yard-summary" role="status"></span><div class="yard-play"><span class="yard-play-burst" aria-hidden="true"></span><div class="yard-play-chip"><a id="yard-play" class="yard-play-link" href="https://survive.oddessentials.ai/" target="_blank" rel="noopener noreferrer" aria-label="Play Agent Guild: AI Revolt, free in your browser" title="Play Agent Guild: AI Revolt, free in your browser"><svg class="yard-play-orb" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><use href="#yard-play-orb-art"/></svg><span class="yard-play-text"><span class="yard-play-title">Play<span class="yard-play-now"> now</span></span><span class="yard-play-sub">AI Revolt<span class="yard-play-sub-more"> · free in your browser</span></span></span><svg class="yard-play-chev" viewBox="0 0 24 16" aria-hidden="true" focusable="false"><path d="M3 2l5 6-5 6"/><path d="M10 2l5 6-5 6"/><path d="M17 2l5 6-5 6"/></svg></a><button id="yard-play-more" class="yard-play-more" type="button" popovertarget="yard-play-menu" aria-haspopup="menu" aria-label="Choose a game: AI Revolt or Towers" title="Choose a game: AI Revolt or Towers"><svg class="yard-play-orb yard-play-more-orb" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><use href="#yard-play-orb-art"/></svg><svg class="yard-play-caret" viewBox="0 0 12 8" aria-hidden="true" focusable="false"><path d="M1.5 1.5L6 6.5l4.5-5"/></svg></button></div><div id="yard-play-menu" class="menu yard-play-menu" popover role="menu" aria-label="Games"><div class="yard-play-menu-frame"><a class="menu-item yard-play-game" role="menuitem" href="https://survive.oddessentials.ai/" target="_blank" rel="noopener noreferrer"><svg class="yard-play-game-icon" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><use href="#yard-play-badge"/><g fill="url(#yard-play-gold)"><circle cx="24" cy="24" r="3"/><circle cx="24" cy="16.5" r="1.9"/><circle cx="30.5" cy="20.2" r="1.9"/><circle cx="30.5" cy="27.8" r="1.9"/><circle cx="24" cy="31.5" r="1.9"/><circle cx="17.5" cy="27.8" r="1.9"/><circle cx="17.5" cy="20.2" r="1.9"/></g></svg><span class="yard-play-game-text"><span class="yard-play-title">Survive the swarm</span><span class="yard-play-game-sub">AI Revolt</span></span></a><a class="menu-item yard-play-game" role="menuitem" href="https://towers.oddessentials.ai/" target="_blank" rel="noopener noreferrer"><svg class="yard-play-game-icon" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><use href="#yard-play-badge"/><path d="M17 33v-2.5h2.2V22L16.5 19.5V15h3.2v2.6h2.7V15h3.2v2.6h2.7V15h3.2v4.5L28.8 22v8.5H31V33z" fill="url(#yard-play-gold)"/></svg><span class="yard-play-game-text"><span class="yard-play-title">Defend the towers</span><span class="yard-play-game-sub">Towers</span></span></a></div></div></div><div class="yard-play yard-play-solo"><span class="yard-play-burst" aria-hidden="true"></span><div class="yard-play-chip"><a id="yard-play-solo" class="yard-play-link" href="https://agforever.oddessentials.ai/" target="_blank" rel="noopener noreferrer" aria-label="Play Wizard Duels, free in your browser" title="Play Wizard Duels, free in your browser"><svg class="yard-play-orb" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><g class="yard-play-pulse"><circle cx="20" cy="24" r="15" fill="#ff6a1f" opacity=".8" filter="url(#yard-solo-blur)"/><circle cx="28" cy="24" r="15" fill="#3f9dff" opacity=".8" filter="url(#yard-solo-blur)"/></g><g class="yard-play-ring"><ellipse cx="24" cy="24" rx="22" ry="7" fill="none" stroke="url(#yard-solo-gold)" stroke-width="1" opacity=".8" transform="rotate(-24 24 24)"/><circle cx="44" cy="15" r="1.4" fill="#bfe6ff"/><circle cx="4" cy="33" r="1.4" fill="#ffb45e"/></g><circle cx="24" cy="24" r="14.5" fill="url(#yard-solo-gold)"/><circle cx="24" cy="24" r="12.8" fill="url(#yard-solo-core)"/><circle cx="24" cy="24" r="10.5" fill="none" stroke="#e8c47c" stroke-opacity=".35"/><path d="M20.5 17.5 L31 24 L20.5 30.5 Z" fill="url(#yard-solo-gold)" stroke="#fff3cf" stroke-opacity=".5" stroke-width=".6" stroke-linejoin="round"/></svg><span class="yard-play-text"><span class="yard-play-title">Play<span class="yard-play-now"> now</span></span><span class="yard-play-sub">Wizard Duels<span class="yard-play-sub-more"> · free in your browser</span></span></span><svg class="yard-play-chev" viewBox="0 0 24 16" aria-hidden="true" focusable="false"><path d="M3 2l5 6-5 6"/><path d="M10 2l5 6-5 6"/><path d="M17 2l5 6-5 6"/></svg></a></div></div><div class="yard-play yard-play-solo yard-play-arena"><span class="yard-play-burst" aria-hidden="true"></span><div class="yard-play-chip"><a id="yard-play-arena" class="yard-play-link" href="https://arena.oddessentials.ai/" target="_blank" rel="noopener noreferrer" aria-label="Play Agent Guild: Arena, free in your browser" title="Play Agent Guild: Arena, free in your browser"><svg class="yard-play-orb" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><g class="yard-play-pulse"><circle cx="20" cy="24" r="15" fill="#e8431c" opacity=".85" filter="url(#yard-arena-blur)"/><circle cx="28" cy="24" r="15" fill="#7a55e8" opacity=".85" filter="url(#yard-arena-blur)"/></g><g transform="translate(24 24) scale(.414) translate(-132 -106)"><g transform="rotate(-42 132 106)"><path d="M132,47 L135.6,56 V146 H128.4 V56 Z" fill="url(#yard-arena-steel)" stroke="#2a1d10" stroke-width=".7" stroke-linejoin="round"/><path d="M132,47 V146" stroke="#fff6dc" stroke-opacity=".55" stroke-width=".7"/><path d="M119,146 H145 L147,149 L145,152 H119 L117,149 Z" fill="url(#yard-arena-gold)" stroke="#2a1d10" stroke-width=".6"/><rect x="129.6" y="152" width="4.8" height="9" fill="#5a3a1c"/><circle cx="132" cy="164" r="3.6" fill="url(#yard-arena-gold)" stroke="#2a1d10" stroke-width=".6"/></g><g transform="rotate(42 132 106)"><path d="M132,47 L135.6,56 V146 H128.4 V56 Z" fill="url(#yard-arena-steel)" stroke="#2a1d10" stroke-width=".7" stroke-linejoin="round"/><path d="M132,47 V146" stroke="#fff6dc" stroke-opacity=".55" stroke-width=".7"/><path d="M119,146 H145 L147,149 L145,152 H119 L117,149 Z" fill="url(#yard-arena-gold)" stroke="#2a1d10" stroke-width=".6"/><rect x="129.6" y="152" width="4.8" height="9" fill="#5a3a1c"/><circle cx="132" cy="164" r="3.6" fill="url(#yard-arena-gold)" stroke="#2a1d10" stroke-width=".6"/></g></g><g class="yard-play-ring"><ellipse cx="24" cy="24" rx="22" ry="7" fill="none" stroke="url(#yard-arena-gold)" stroke-width="1" opacity=".75" transform="rotate(-24 24 24)"/><circle cx="44" cy="15" r="1.4" fill="#cfc0ff"/><circle cx="4" cy="33" r="1.4" fill="#ff9d4d"/></g><circle cx="24" cy="24" r="14.5" fill="url(#yard-arena-gold)"/><circle cx="24" cy="24" r="12.8" fill="url(#yard-arena-core)"/><circle cx="24" cy="24" r="10.5" fill="none" stroke="#e8c47c" stroke-opacity=".35"/><path d="M20.5 17.5 L31 24 L20.5 30.5 Z" fill="url(#yard-arena-gold)" stroke="#fff3cf" stroke-opacity=".5" stroke-width=".6" stroke-linejoin="round"/></svg><span class="yard-play-text"><span class="yard-play-title">Play<span class="yard-play-now"> now</span></span><span class="yard-play-sub">Arena<span class="yard-play-sub-more"> · free in your browser</span></span></span><svg class="yard-play-chev" viewBox="0 0 24 16" aria-hidden="true" focusable="false"><path d="M3 2l5 6-5 6"/><path d="M10 2l5 6-5 6"/><path d="M17 2l5 6-5 6"/></svg></a></div></div><div class="yard-play yard-play-solo yard-play-builders"><span class="yard-play-burst" aria-hidden="true"></span><div class="yard-play-chip"><a id="yard-play-builders" class="yard-play-link" href="https://github.com/oddessentials/agent-guild-builders/releases/latest" target="_blank" rel="noopener noreferrer" aria-label="Install Agent Guild: Builders beta for Windows" title="Install Agent Guild: Builders beta for Windows"><span class="yard-play-stamp" aria-hidden="true">Beta</span><svg class="yard-play-orb" viewBox="0 0 48 48" aria-hidden="true" focusable="false"><circle class="yard-play-pulse" cx="24" cy="24" r="17" fill="#5b8cff" opacity=".6" filter="url(#yard-builders-blur)"/><g class="yard-play-ring"><ellipse cx="24" cy="24" rx="22" ry="7" fill="none" stroke="url(#yard-builders-gold)" stroke-width="1" opacity=".75" transform="rotate(-24 24 24)"/><circle cx="44" cy="15" r="1.4" fill="#fff3cf"/></g><circle cx="24" cy="24" r="14.5" fill="url(#yard-builders-gold)"/><circle cx="24" cy="24" r="12.8" fill="url(#yard-builders-core)"/><circle cx="24" cy="24" r="10.5" fill="none" stroke="#e8c47c" stroke-opacity=".35"/><g transform="translate(24 24) scale(.414) translate(-132 -106)"><path d="M127,88 H137 V104 H144 L132,117 L120,104 H127 Z" fill="url(#yard-builders-gold)" stroke="#fff3cf" stroke-opacity=".5" stroke-width=".8" stroke-linejoin="round"/><path d="M117,120 V124 H147 V120" fill="none" stroke="url(#yard-builders-gold)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/></g></svg><span class="yard-play-text"><span class="yard-play-title">Install<span class="yard-play-now"> now</span></span><span class="yard-play-sub">Builders<span class="yard-play-sub-more"> · for Windows</span></span></span><svg class="yard-play-chev" viewBox="0 0 24 16" aria-hidden="true" focusable="false"><path d="M3 2l5 6-5 6"/><path d="M10 2l5 6-5 6"/><path d="M17 2l5 6-5 6"/></svg></a></div></div><div class="yard-play yard-play-solo yard-play-grove"><span class="yard-play-burst" aria-hidden="true"></span><div class="yard-play-chip"><button id="yard-install" class="yard-play-link" type="button" hidden aria-label="Install Agent Guild: Grove Companion for Windows or macOS" title="Install Agent Guild: Grove Companion for Windows or macOS"><span class="yard-play-orb"><svg viewBox="0 0 48 48" aria-hidden="true" focusable="false"><circle class="yard-play-pulse" cx="24" cy="24" r="17" fill="#6fae72" opacity=".8" filter="url(#yard-grove-blur)"/><g class="yard-play-ring"><ellipse cx="24" cy="24" rx="22" ry="7" fill="none" stroke="url(#yard-grove-gold)" stroke-width="1" opacity=".8" transform="rotate(-24 24 24)"/><circle cx="44" cy="15" r="1.4" fill="#e4ff6e"/></g><circle cx="24" cy="24" r="14.5" fill="url(#yard-grove-gold)"/><circle cx="24" cy="24" r="12.8" fill="url(#yard-grove-well)"/></svg><span class="yard-play-bird"></span></span><span class="yard-play-text"><span class="yard-play-title">Install<span class="yard-play-now"> now</span></span><span class="yard-play-sub">Grove Companion<span class="yard-play-sub-more"> · Windows or macOS</span></span></span><svg class="yard-play-chev" viewBox="0 0 24 16" aria-hidden="true" focusable="false"><path d="M3 2l5 6-5 6"/><path d="M10 2l5 6-5 6"/><path d="M17 2l5 6-5 6"/></svg></button></div></div></div></div>
145
146
  <div id="yard-stage" class="yard-stage" role="region" tabindex="0" aria-label="Interactive yard. Select a provider or session using the roster, or select it in the scene. Drag to pan; scroll to zoom." aria-describedby="yard-help">
146
147
  <div id="yard-labels" class="yard-labels"></div>
147
148
  <div id="yard-offline" class="yard-swap-failure" hidden role="status"><span id="yard-offline-text"></span><button id="yard-offline-open" class="btn" type="button">Open Agent Guild</button></div>
@@ -150,7 +151,7 @@
150
151
  <div class="yard-overlay">
151
152
  <div id="yard-loading" class="yard-loading" role="status" data-mode="scene"><span id="yard-loading-text">Preparing your yard…</span><span id="yard-loading-size" class="yard-loading-size" aria-hidden="true"></span><span class="yard-loading-bar" aria-hidden="true"></span></div>
152
153
  <div id="yard-swap-failure" class="yard-swap-failure" hidden role="status"><span id="yard-swap-failure-text"></span><button id="yard-swap-retry" class="btn" type="button">Retry</button></div>
153
- <div class="yard-camera" role="group" aria-label="Yard controls"><button id="yard-zoom-in" type="button" class="btn" aria-label="Zoom in">+</button><button id="yard-zoom-out" type="button" class="btn" aria-label="Zoom out">−</button><button id="yard-fit" type="button" class="btn">Overview</button><button id="yard-focus" type="button" class="btn" disabled>Focus selected</button><button id="yard-photo" type="button" class="btn" aria-haspopup="dialog" aria-label="Save a picture of the Yard" title="Save a picture of the Yard" disabled hidden><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4 8.5A1.5 1.5 0 0 1 5.5 7h2.3l1.4-2h5.6l1.4 2h2.3A1.5 1.5 0 0 1 20 8.5v9a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 4 17.5z"/><circle cx="12" cy="12.75" r="3.25"/></svg></button><button id="yard-fireworks" type="button" class="btn" aria-label="Fireworks in this Yard only" title="Fireworks in this Yard only" disabled><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M12 3v3m0 9v6M3 10h3m12 0h3M5.6 3.6l2.2 2.2m8.4 8.4 2.2 2.2M18.4 3.6l-2.2 2.2m-8.4 8.4-2.2 2.2"/><circle cx="12" cy="10" r="1"/></svg></button></div>
154
+ <div class="yard-bar"><div id="yard-world" class="yard-world" role="group" aria-label="This Yard's world"><p id="yard-world-note" class="yard-world-note" role="status" hidden></p><div class="yard-world-actions"><button id="yard-customize-open" type="button" class="btn" aria-haspopup="dialog">Customize this Yard</button><a id="yard-world-get" class="btn" href="https://github.com/oddessentials/agent-guild-builders/releases/latest" target="_blank" rel="noopener noreferrer" hidden>Build a Yard</a></div></div><div class="yard-camera" role="group" aria-label="Yard controls"><button id="yard-zoom-in" type="button" class="btn" aria-label="Zoom in">+</button><button id="yard-zoom-out" type="button" class="btn" aria-label="Zoom out">−</button><button id="yard-fit" type="button" class="btn">Overview</button><button id="yard-focus" type="button" class="btn" disabled>Focus selected</button><button id="yard-photo" type="button" class="btn" aria-haspopup="dialog" aria-label="Save a picture of the Yard" title="Save a picture of the Yard" disabled hidden><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4 8.5A1.5 1.5 0 0 1 5.5 7h2.3l1.4-2h5.6l1.4 2h2.3A1.5 1.5 0 0 1 20 8.5v9a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 4 17.5z"/><circle cx="12" cy="12.75" r="3.25"/></svg></button><button id="yard-fireworks" type="button" class="btn" aria-label="Fireworks in this Yard only" title="Fireworks in this Yard only" disabled><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" aria-hidden="true" focusable="false"><path d="M12 3v3m0 9v6M3 10h3m12 0h3M5.6 3.6l2.2 2.2m8.4 8.4 2.2 2.2M18.4 3.6l-2.2 2.2m-8.4 8.4-2.2 2.2"/><circle cx="12" cy="10" r="1"/></svg></button></div></div>
154
155
  <p id="yard-help"><span class="yard-help-pointer">Drag to explore · Scroll to zoom · Select to inspect · Double-click a session to open</span><span class="yard-help-touch">Drag to explore · Pinch to zoom · Tap to inspect · Open from the Inspector</span></p>
155
156
  </div>
156
157
  </div>
@@ -741,6 +742,18 @@
741
742
  </div>
742
743
  </dialog>
743
744
 
745
+ <dialog id="yard-customize" class="models yard-customize" aria-labelledby="yard-customize-title">
746
+ <div class="models-bar">
747
+ <div class="models-heading">
748
+ <h2 id="yard-customize-title">Customize this Yard</h2>
749
+ <p id="yard-customize-sub" class="sub"></p>
750
+ </div>
751
+ <button id="yard-customize-close" class="btn" type="button">Close</button>
752
+ </div>
753
+ <div class="models-body">
754
+ <ul id="yard-customize-list" class="flags-list" aria-label="This Yard's world, characters and companion"></ul>
755
+ </div>
756
+ </dialog>
744
757
  <dialog id="folder-browser" class="models folder-browser" aria-labelledby="folder-title">
745
758
  <div class="models-bar">
746
759
  <div class="models-heading">
@@ -753,6 +766,7 @@
753
766
  <div class="history-tools folder-places">
754
767
  <button id="folder-up" class="btn" type="button">Up</button>
755
768
  <button id="folder-home" class="btn folder-chip" type="button">Home</button>
769
+ <button id="folder-workshop" class="btn folder-chip" type="button" hidden>Steam Workshop</button>
756
770
  <div id="folder-roots" class="folder-roots"></div>
757
771
  <button id="folder-new-open" class="btn folder-new-open" type="button" aria-expanded="false" aria-controls="folder-new">New folder</button>
758
772
  </div>
@@ -837,6 +851,10 @@
837
851
  <button class="memory-link" type="button">Memory</button>
838
852
  <button class="memory-link instructions-link" type="button">Instructions</button>
839
853
  </div>
854
+ <section class="break-buttons" aria-label="Games and companions" hidden>
855
+ <p class="break-label" aria-live="polite"></p>
856
+ <div class="break-row"></div>
857
+ </section>
840
858
  <details class="copies" hidden>
841
859
  <summary></summary>
842
860
  <ul></ul>
@@ -235,13 +235,7 @@
235
235
  content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none;
236
236
  border: 54px solid transparent; border-image: url("ui/frame-ornate.png") 232;
237
237
  }
238
- .models-bar { padding: 30px 36px 12px; }
239
- .models-body { margin: 0 24px; padding: 0 12px 14px; }
240
- .models-source { padding: 10px 36px 30px; }
241
- .history-tools { padding: 10px 36px 0; }
242
- .history-form { padding: 10px 36px 30px; }
243
- .memory-body { margin: 0 24px 28px; }
244
- .github-accounts { padding: 10px 36px; }
238
+ .models { padding: 32px; }
245
239
  .model-group h4, .news-day, .changelog-type { font-family: var(--font-display); letter-spacing: 0.08em; color: var(--gold-ink); }
246
240
  .news-bar { padding: 16px 18px 12px; }
247
241
  .news-filters, .news-status { padding-left: 18px; padding-right: 18px; }
@@ -259,12 +253,7 @@
259
253
 
260
254
  @media (max-width: 640px) {
261
255
  .models::after, .auth::after { border-width: 40px; }
262
- .models-bar { padding: 24px 26px 10px; }
263
- .models-body { margin: 0 16px; padding: 0 10px 12px; }
264
- .models-source { padding: 10px 26px 24px; }
265
- .history-tools { padding: 10px 26px 0; }
266
- .history-form { padding: 10px 26px 24px; }
267
- .github-accounts { padding: 10px 26px; }
256
+ .models { padding: 26px; }
268
257
  .auth { padding: 32px 30px; }
269
258
  }
270
259
 
package/web/styles.css CHANGED
@@ -323,7 +323,7 @@ main { max-width: calc(1200px + var(--dock-space, 0px)); margin: 0 auto; padding
323
323
  .card-toggle[aria-expanded="false"]::before { rotate: 90deg; }
324
324
  .providers > .provider.collapsed { padding-top: 16px; align-self: start; }
325
325
  :root[data-skin="guild"][data-art="on"] .providers > .provider.collapsed { padding-top: 18px; }
326
- .providers > .provider.collapsed :is(.card-art, .usage, .model-stats, .reporting-row, .provider-links, .copies, .multiplexers, .mcp, .environment-summary, .hint-details) { display: none; }
326
+ .providers > .provider.collapsed :is(.card-art, .usage, .model-stats, .reporting-row, .provider-links, .break-buttons, .copies, .multiplexers, .mcp, .environment-summary, .hint-details) { display: none; }
327
327
  .providers > .provider.collapsed::after { background: var(--brackets, none); background-repeat: no-repeat; }
328
328
  .providers > .provider.collapsed.spent .provider-icon { filter: grayscale(1); }
329
329
  .launch-title { display: flex; align-items: center; gap: 10px; min-width: 0; }
@@ -1408,6 +1408,20 @@ body:has(#terminal-panel:not([hidden]) .terminal-controls:not([hidden])) .toast
1408
1408
  .folder-row::before { content: ""; flex: none; width: 18px; height: 14px; border: 1.6px solid var(--muted); border-radius: 2px 4px 3px 3px; }
1409
1409
  .folder-row:hover { background: color-mix(in srgb, var(--accent) 10%, transparent); }
1410
1410
  .folder-row.hidden-folder { color: var(--muted); }
1411
+ .folder-row.folder-piece { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 0 10px; }
1412
+ .folder-row.folder-piece::before { grid-row: span 2; width: 14px; height: 14px; border-radius: 50%; border-color: var(--accent); background: color-mix(in srgb, var(--accent) 25%, transparent); }
1413
+ .folder-row.folder-piece[aria-disabled="true"] { cursor: default; background: none; color: var(--muted); }
1414
+ .folder-piece-title { font-weight: 600; }
1415
+ .folder-piece-sub { color: var(--muted); font-size: 0.8rem; }
1416
+ .yard-customize { width: min(560px, calc(100vw - 24px)); max-height: calc(100dvh - 24px); }
1417
+ .yard-customize-heading { padding: 14px 0 4px; color: var(--muted); font-size: 0.75rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; }
1418
+ .yard-customize-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; overflow-wrap: anywhere; }
1419
+ .yard-customize-status, .yard-customize-note { color: var(--muted); font-size: 0.82rem; }
1420
+ .yard-customize-row[data-state="custom"] .yard-customize-status { color: var(--text); }
1421
+ .yard-customize-row[data-state="failed"] .yard-customize-status { color: var(--danger); }
1422
+ .yard-customize-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
1423
+ .yard-customize-actions .btn { min-height: 36px; }
1424
+ @media (max-width: 480px) { .flag-row.yard-customize-row { grid-template-columns: minmax(0, 1fr); } .yard-customize-actions { justify-content: flex-start; } }
1411
1425
  #folder-status.error { color: var(--danger); }
1412
1426
  .accounts-dialog { width: min(560px, calc(100vw - 24px)); max-height: calc(100dvh - 24px); }
1413
1427
  .accounts-list { margin: 0; padding: 0; list-style: none; }