prts-terrarchive 0.2.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 (287) hide show
  1. package/GAME_ASSETS.md +26 -0
  2. package/LICENSE +21 -0
  3. package/README.en.md +274 -0
  4. package/README.md +423 -0
  5. package/THIRD_PARTY_NOTICES.md +61 -0
  6. package/bin/bake-rhine-details.mjs +34 -0
  7. package/bin/install.js +273 -0
  8. package/bin/pack-map-assets.mjs +110 -0
  9. package/bin/preview-rhine.mjs +71 -0
  10. package/bin/rhine-detail-baker.ts +84 -0
  11. package/contracts/cloud_tools_v1.schema.json +243 -0
  12. package/contracts/corpus_i18n_v1.schema.json +179 -0
  13. package/contracts/corpus_tools_v1.schema.json +1801 -0
  14. package/cordis.patch.yml +32 -0
  15. package/docs/endfield-official-i18n.md +103 -0
  16. package/lib/client.js +3912 -0
  17. package/lib/endfield-map/map.js.br +0 -0
  18. package/lib/endfield-map/map.js.gz +0 -0
  19. package/lib/endfield-map/resources/map-00b0d0744a1b4404.json.br +0 -0
  20. package/lib/endfield-map/resources/map-00b0d0744a1b4404.json.gz +0 -0
  21. package/lib/endfield-map/resources/map-01616f534aaaeca1.png +0 -0
  22. package/lib/endfield-map/resources/map-1562e0dff4be3d23.png +0 -0
  23. package/lib/endfield-map/resources/map-160fe040f080f6a3.png +0 -0
  24. package/lib/endfield-map/resources/map-17b9d8be25dc2b39.json.br +0 -0
  25. package/lib/endfield-map/resources/map-17b9d8be25dc2b39.json.gz +0 -0
  26. package/lib/endfield-map/resources/map-1c4245c4e8b80c43.json.br +0 -0
  27. package/lib/endfield-map/resources/map-1c4245c4e8b80c43.json.gz +0 -0
  28. package/lib/endfield-map/resources/map-1d30baaaef3e29cc.png +0 -0
  29. package/lib/endfield-map/resources/map-21a61386af79cd12.json.br +0 -0
  30. package/lib/endfield-map/resources/map-21a61386af79cd12.json.gz +0 -0
  31. package/lib/endfield-map/resources/map-24b920b8dab49b44.json.br +0 -0
  32. package/lib/endfield-map/resources/map-24b920b8dab49b44.json.gz +0 -0
  33. package/lib/endfield-map/resources/map-26caf8d71247abb7.png +0 -0
  34. package/lib/endfield-map/resources/map-2729942c89545e73.json.br +0 -0
  35. package/lib/endfield-map/resources/map-2729942c89545e73.json.gz +0 -0
  36. package/lib/endfield-map/resources/map-29063a9802f67014.json.br +0 -0
  37. package/lib/endfield-map/resources/map-29063a9802f67014.json.gz +0 -0
  38. package/lib/endfield-map/resources/map-2f35d09a3ab60a63.json.br +0 -0
  39. package/lib/endfield-map/resources/map-2f35d09a3ab60a63.json.gz +0 -0
  40. package/lib/endfield-map/resources/map-2f98a873da81425e.json.br +0 -0
  41. package/lib/endfield-map/resources/map-2f98a873da81425e.json.gz +0 -0
  42. package/lib/endfield-map/resources/map-3ab978ae44190f80.json.br +0 -0
  43. package/lib/endfield-map/resources/map-3ab978ae44190f80.json.gz +0 -0
  44. package/lib/endfield-map/resources/map-3b62c80d14208902.json.br +0 -0
  45. package/lib/endfield-map/resources/map-3b62c80d14208902.json.gz +0 -0
  46. package/lib/endfield-map/resources/map-3d486e887ae121ac.png +0 -0
  47. package/lib/endfield-map/resources/map-418dc4865608fce5.png +0 -0
  48. package/lib/endfield-map/resources/map-4366b84607335f76.json.br +0 -0
  49. package/lib/endfield-map/resources/map-4366b84607335f76.json.gz +0 -0
  50. package/lib/endfield-map/resources/map-4371259d3ab7aac7.png +0 -0
  51. package/lib/endfield-map/resources/map-48dcc0fd55e13f7f.png +0 -0
  52. package/lib/endfield-map/resources/map-4aabda0e41197570.json.br +0 -0
  53. package/lib/endfield-map/resources/map-4aabda0e41197570.json.gz +0 -0
  54. package/lib/endfield-map/resources/map-505f5687b287043c.json.br +0 -0
  55. package/lib/endfield-map/resources/map-505f5687b287043c.json.gz +0 -0
  56. package/lib/endfield-map/resources/map-5177e9d1d46f47e2.png +0 -0
  57. package/lib/endfield-map/resources/map-51baeb59b7f8c28d.png +0 -0
  58. package/lib/endfield-map/resources/map-549561b46e621874.png +0 -0
  59. package/lib/endfield-map/resources/map-56c6a0bef799c8dc.json.br +0 -0
  60. package/lib/endfield-map/resources/map-56c6a0bef799c8dc.json.gz +0 -0
  61. package/lib/endfield-map/resources/map-5a6963909423b674.png +0 -0
  62. package/lib/endfield-map/resources/map-5a9c533c0552d7b7.png +0 -0
  63. package/lib/endfield-map/resources/map-5d20ae9ffa9a02b0.png +0 -0
  64. package/lib/endfield-map/resources/map-626c8847393f60bf.png +0 -0
  65. package/lib/endfield-map/resources/map-63d43cbec3bed3b8.png +0 -0
  66. package/lib/endfield-map/resources/map-661b6ec56e722574.png +0 -0
  67. package/lib/endfield-map/resources/map-6ddd384eca190828.png +0 -0
  68. package/lib/endfield-map/resources/map-6fc1aa9144f8156c.json.br +0 -0
  69. package/lib/endfield-map/resources/map-6fc1aa9144f8156c.json.gz +0 -0
  70. package/lib/endfield-map/resources/map-738ebaa002c33cfc.png +0 -0
  71. package/lib/endfield-map/resources/map-758c13be6085ec07.json.br +0 -0
  72. package/lib/endfield-map/resources/map-758c13be6085ec07.json.gz +0 -0
  73. package/lib/endfield-map/resources/map-78929f26d6844509.png +0 -0
  74. package/lib/endfield-map/resources/map-7f09c142950a0f74.png +0 -0
  75. package/lib/endfield-map/resources/map-8385e11f39e1a51c.json.br +0 -0
  76. package/lib/endfield-map/resources/map-8385e11f39e1a51c.json.gz +0 -0
  77. package/lib/endfield-map/resources/map-881343926a568f27.json.br +0 -0
  78. package/lib/endfield-map/resources/map-881343926a568f27.json.gz +0 -0
  79. package/lib/endfield-map/resources/map-8d1ade3f01d952b0.png +0 -0
  80. package/lib/endfield-map/resources/map-8fef3495bb7ed60f.png +0 -0
  81. package/lib/endfield-map/resources/map-907a7ecf8a0ce352.png +0 -0
  82. package/lib/endfield-map/resources/map-9113d5951c4db903.json.br +0 -0
  83. package/lib/endfield-map/resources/map-9113d5951c4db903.json.gz +0 -0
  84. package/lib/endfield-map/resources/map-94ad6634436224e3.json.br +0 -0
  85. package/lib/endfield-map/resources/map-94ad6634436224e3.json.gz +0 -0
  86. package/lib/endfield-map/resources/map-99722e61da5f3e53.png +0 -0
  87. package/lib/endfield-map/resources/map-9be9596cc059abe3.png +0 -0
  88. package/lib/endfield-map/resources/map-a4db9a4763e47fbf.png +0 -0
  89. package/lib/endfield-map/resources/map-a4e8ef07159997e7.json.br +0 -0
  90. package/lib/endfield-map/resources/map-a4e8ef07159997e7.json.gz +0 -0
  91. package/lib/endfield-map/resources/map-ab35d06875ee418f.png +0 -0
  92. package/lib/endfield-map/resources/map-ac51bb3e7623cd8b.png +0 -0
  93. package/lib/endfield-map/resources/map-ac830a66296bc83a.png +0 -0
  94. package/lib/endfield-map/resources/map-b3fd04209718e55e.json.br +0 -0
  95. package/lib/endfield-map/resources/map-b3fd04209718e55e.json.gz +0 -0
  96. package/lib/endfield-map/resources/map-b8164f1af7c5d895.png +0 -0
  97. package/lib/endfield-map/resources/map-b8cde93b965384d8.json.br +0 -0
  98. package/lib/endfield-map/resources/map-b8cde93b965384d8.json.gz +0 -0
  99. package/lib/endfield-map/resources/map-b8e48511502e0e8d.json.br +0 -0
  100. package/lib/endfield-map/resources/map-b8e48511502e0e8d.json.gz +0 -0
  101. package/lib/endfield-map/resources/map-bfc58277d5ba649d.png +0 -0
  102. package/lib/endfield-map/resources/map-c013f82048c6891a.png +0 -0
  103. package/lib/endfield-map/resources/map-c49c947841ae4ab5.json.br +0 -0
  104. package/lib/endfield-map/resources/map-c49c947841ae4ab5.json.gz +0 -0
  105. package/lib/endfield-map/resources/map-c4d1b1c6d6706c81.json.br +0 -0
  106. package/lib/endfield-map/resources/map-c4d1b1c6d6706c81.json.gz +0 -0
  107. package/lib/endfield-map/resources/map-c607f8b4c8ad8967.png +0 -0
  108. package/lib/endfield-map/resources/map-c6f20276b8781326.json.br +0 -0
  109. package/lib/endfield-map/resources/map-c6f20276b8781326.json.gz +0 -0
  110. package/lib/endfield-map/resources/map-d51adf5952af1e8e.png +0 -0
  111. package/lib/endfield-map/resources/map-d695eface22f8b74.json.br +0 -0
  112. package/lib/endfield-map/resources/map-d695eface22f8b74.json.gz +0 -0
  113. package/lib/endfield-map/resources/map-db11d394456a7465.png +0 -0
  114. package/lib/endfield-map/resources/map-dcc4d218581e3dc6.png +0 -0
  115. package/lib/endfield-map/resources/map-ddd43dbb8ab8a4e3.json.br +0 -0
  116. package/lib/endfield-map/resources/map-ddd43dbb8ab8a4e3.json.gz +0 -0
  117. package/lib/endfield-map/resources/map-defe5db7dabf748a.png +0 -0
  118. package/lib/endfield-map/resources/map-e1aeb833e22520aa.json.br +0 -0
  119. package/lib/endfield-map/resources/map-e1aeb833e22520aa.json.gz +0 -0
  120. package/lib/endfield-map/resources/map-e25ee9af6e493500.png +0 -0
  121. package/lib/endfield-map/resources/map-e3824082cd6f747d.json.br +0 -0
  122. package/lib/endfield-map/resources/map-e3824082cd6f747d.json.gz +0 -0
  123. package/lib/endfield-map/resources/map-e694a91e630b1bd6.png +0 -0
  124. package/lib/endfield-map/resources/map-eaa93af79d12a87d.png +0 -0
  125. package/lib/endfield-map/resources/map-ec9575ee65d7766f.json.br +0 -0
  126. package/lib/endfield-map/resources/map-ec9575ee65d7766f.json.gz +0 -0
  127. package/lib/endfield-map/resources/map-ede421a329dc78a4.png +0 -0
  128. package/lib/endfield-map/resources/map-eff3bce8f6888fc5.json.br +0 -0
  129. package/lib/endfield-map/resources/map-eff3bce8f6888fc5.json.gz +0 -0
  130. package/lib/endfield-map/resources/map-fb5f4a59a181452c.png +0 -0
  131. package/lib/endfield-map/resources/map-fdeaa17eeba90d8e.json.br +0 -0
  132. package/lib/endfield-map/resources/map-fdeaa17eeba90d8e.json.gz +0 -0
  133. package/lib/rhine/assets/archive-assembly.glb +0 -0
  134. package/lib/rhine/assets/archive-cassette.glb +0 -0
  135. package/lib/rhine/fonts/MiSans-Bold.woff2 +0 -0
  136. package/lib/rhine/fonts/MiSans-Demibold.woff2 +0 -0
  137. package/lib/rhine/fonts/MiSans-Light.woff2 +0 -0
  138. package/lib/rhine/fonts/MiSans-Regular.woff2 +0 -0
  139. package/lib/rhine/fonts/MiSans-license.pdf +0 -0
  140. package/lib/rhine/fonts/NOTICE.txt +6 -0
  141. package/lib/rhine/licenses/RhineLabUI-MIT.txt +21 -0
  142. package/lib/rhine/licenses/entities-BSD-2-Clause.txt +11 -0
  143. package/lib/rhine/licenses/linkify-it-MIT.txt +22 -0
  144. package/lib/rhine/licenses/markdown-it-MIT.txt +22 -0
  145. package/lib/rhine/licenses/mdurl-MIT.txt +45 -0
  146. package/lib/rhine/licenses/punycode.js-MIT.txt +20 -0
  147. package/lib/rhine/licenses/rolling-number-MIT.txt +21 -0
  148. package/lib/rhine/licenses/three-MIT.txt +21 -0
  149. package/lib/rhine/licenses/uc.micro-MIT.txt +20 -0
  150. package/lib/rhine/rhine.css +1 -0
  151. package/lib/rhine/rhine.js +5106 -0
  152. package/lib/skins/common.css +31 -0
  153. package/lib/skins/endfield-aic.css +141 -0
  154. package/lib/skins/prts-agent.css +136 -0
  155. package/lib/skins/rhine-lab.css +70 -0
  156. package/package.json +112 -0
  157. package/presets/definition.js +26 -0
  158. package/presets/prts/agent.cordis.yml +25 -0
  159. package/presets/prts/preset.yml +3 -0
  160. package/presets/register.js +86 -0
  161. package/resources/entity-routing.json +21 -0
  162. package/skills/prts-investigation/SKILL.md +121 -0
  163. package/skills/prts-retrieval/SKILL.md +35 -0
  164. package/skills/prts-retrieval/references/cloud-tools.md +13 -0
  165. package/skills/prts-retrieval/references/diagnostics.md +15 -0
  166. package/skills/prts-retrieval/references/local-tools.md +24 -0
  167. package/skills/prts-retrieval/references/module-arknights.md +23 -0
  168. package/skills/prts-retrieval/references/module-dual.md +15 -0
  169. package/skills/prts-retrieval/references/module-endfield.md +21 -0
  170. package/skills/prts-retrieval/references/retrieval-process.md +44 -0
  171. package/skills/prts-retrieval/references/retrieval-recipes-dual.md +34 -0
  172. package/skills/prts-retrieval/references/retrieval-recipes-endfield.md +37 -0
  173. package/skills/prts-retrieval/references/retrieval-recipes.md +39 -0
  174. package/skills/prts-retrieval/references/tools-runtime.md +48 -0
  175. package/skills/prts-retrieval/references/wiki-schema.md +38 -0
  176. package/src/archive-presentation.js +287 -0
  177. package/src/cloud-projection.js +124 -0
  178. package/src/cloud.js +498 -0
  179. package/src/entity-recognizer.js +311 -0
  180. package/src/entity-routing.js +82 -0
  181. package/src/evidence-state.js +332 -0
  182. package/src/i18n.js +365 -0
  183. package/src/index.js +1261 -0
  184. package/src/installer.js +1362 -0
  185. package/src/investigation-review.js +87 -0
  186. package/src/investigation-store.js +579 -0
  187. package/src/investigation-tools.js +113 -0
  188. package/src/localization-format.js +23 -0
  189. package/src/manual-search.js +103 -0
  190. package/src/read.js +1097 -0
  191. package/src/release-compatibility.js +73 -0
  192. package/src/release-watch.js +40 -0
  193. package/src/search-projection.js +139 -0
  194. package/src/search.js +1522 -0
  195. package/src/skill.js +98 -0
  196. package/src/source-map.js +348 -0
  197. package/src/state.js +314 -0
  198. package/src/store.js +1569 -0
  199. package/src/timeline.js +386 -0
  200. package/src/ui.js +1353 -0
  201. package/src/wiki.js +111 -0
  202. package/tsconfig.rhine.json +15 -0
  203. package/ui/rhine/archive-navigation-limit.ts +31 -0
  204. package/ui/rhine/archive-rack.ts +83 -0
  205. package/ui/rhine/assets/evidence-observatory.webp +0 -0
  206. package/ui/rhine/board-plane-transform.ts +24 -0
  207. package/ui/rhine/catalogue.ts +72 -0
  208. package/ui/rhine/deferred-preparation.ts +146 -0
  209. package/ui/rhine/evidence-board-controls.css +22 -0
  210. package/ui/rhine/evidence-board-history.ts +73 -0
  211. package/ui/rhine/evidence-board-model.ts +189 -0
  212. package/ui/rhine/evidence-board-panel.ts +762 -0
  213. package/ui/rhine/evidence-board-scene.ts +548 -0
  214. package/ui/rhine/evidence-board.css +191 -0
  215. package/ui/rhine/evidence-card-art.ts +470 -0
  216. package/ui/rhine/evidence-card-style.ts +17 -0
  217. package/ui/rhine/evidence-inbox-scene.ts +43 -0
  218. package/ui/rhine/evidence-inbox.css +29 -0
  219. package/ui/rhine/evidence-inbox.ts +104 -0
  220. package/ui/rhine/index.ts +12 -0
  221. package/ui/rhine/interaction.css +20 -0
  222. package/ui/rhine/investigation-board-plane.ts +5 -0
  223. package/ui/rhine/investigation-board.css +34 -0
  224. package/ui/rhine/investigation-board.ts +348 -0
  225. package/ui/rhine/investigation-edits.ts +46 -0
  226. package/ui/rhine/investigation-layout.ts +29 -0
  227. package/ui/rhine/label-prefetch.ts +34 -0
  228. package/ui/rhine/looping-title.ts +40 -0
  229. package/ui/rhine/manual-search.css +41 -0
  230. package/ui/rhine/manual-search.ts +89 -0
  231. package/ui/rhine/original/appearance.ts +180 -0
  232. package/ui/rhine/original/archive-label.ts +84 -0
  233. package/ui/rhine/original/archive-lighting.ts +39 -0
  234. package/ui/rhine/original/archive-loop.ts +82 -0
  235. package/ui/rhine/original/archive-refill.ts +64 -0
  236. package/ui/rhine/original/array-detail-data.ts +2 -0
  237. package/ui/rhine/original/array-detail.ts +41 -0
  238. package/ui/rhine/original/array-interior.ts +411 -0
  239. package/ui/rhine/original/array-occlusion.ts +166 -0
  240. package/ui/rhine/original/array-shell.ts +38 -0
  241. package/ui/rhine/original/array-visibility.ts +309 -0
  242. package/ui/rhine/original/asset-url.ts +4 -0
  243. package/ui/rhine/original/brand.ts +12 -0
  244. package/ui/rhine/original/cassette-lod.ts +81 -0
  245. package/ui/rhine/original/data.ts +21 -0
  246. package/ui/rhine/original/decryption.ts +185 -0
  247. package/ui/rhine/original/detail-signature.ts +18 -0
  248. package/ui/rhine/original/glass-reveal.ts +45 -0
  249. package/ui/rhine/original/internal-optics.ts +70 -0
  250. package/ui/rhine/original/label-renderer.ts +119 -0
  251. package/ui/rhine/original/label-textures.ts +117 -0
  252. package/ui/rhine/original/model-viewer.ts +658 -0
  253. package/ui/rhine/original/motion.ts +116 -0
  254. package/ui/rhine/original/opaque-backfaces.ts +64 -0
  255. package/ui/rhine/original/program-preparation.ts +111 -0
  256. package/ui/rhine/original/quality-renderer.ts +97 -0
  257. package/ui/rhine/original/quality-settings.ts +111 -0
  258. package/ui/rhine/original/render-quality.ts +163 -0
  259. package/ui/rhine/original/scene.ts +2051 -0
  260. package/ui/rhine/original/shelf-interior.ts +142 -0
  261. package/ui/rhine/original/ui-transitions.ts +111 -0
  262. package/ui/rhine/original/viewer-camera.ts +92 -0
  263. package/ui/rhine/original/viewport-layout.ts +41 -0
  264. package/ui/rhine/original-ui.css +2334 -0
  265. package/ui/rhine/readability.css +46 -0
  266. package/ui/rhine/reading-object.ts +96 -0
  267. package/ui/rhine/reading-origin.ts +28 -0
  268. package/ui/rhine/reading-room.css +55 -0
  269. package/ui/rhine/report-markdown.ts +98 -0
  270. package/ui/rhine/scene-edge-navigation.ts +84 -0
  271. package/ui/rhine/scene.ts +1726 -0
  272. package/ui/rhine/shelf-layout.ts +38 -0
  273. package/ui/rhine/snapshot-update-gate.ts +22 -0
  274. package/ui/rhine/source-reading.ts +15 -0
  275. package/ui/rhine/source-selection.css +164 -0
  276. package/ui/rhine/temporary-performance-observers.ts +163 -0
  277. package/ui/rhine/temporary-performance-panel.ts +124 -0
  278. package/ui/rhine/temporary-performance.css +19 -0
  279. package/ui/rhine/temporary-performance.ts +552 -0
  280. package/ui/rhine/temporary-render-diagnostics.ts +105 -0
  281. package/ui/rhine/tool-activity.ts +69 -0
  282. package/ui/rhine/types.ts +219 -0
  283. package/ui/rhine/visible-scene-hit.ts +13 -0
  284. package/ui/rhine/workbench.css +818 -0
  285. package/ui/rhine/workbench.ts +2245 -0
  286. package/ui/rhine/workspace-travel.ts +32 -0
  287. package/vite.rhine.config.ts +19 -0
@@ -0,0 +1,2334 @@
1
+ /* Upstream RhineLabUI style.css + responsive.css, scoped for the host plugin. */
2
+ @font-face {
3
+ font-family: "MiSans";
4
+ src: url("./fonts/MiSans-Light.woff2") format("woff2");
5
+ font-weight: 300;
6
+ font-style: normal;
7
+ font-display: swap;
8
+ }
9
+ @font-face {
10
+ font-family: "MiSans";
11
+ src: url("./fonts/MiSans-Regular.woff2") format("woff2");
12
+ font-weight: 400;
13
+ font-style: normal;
14
+ font-display: swap;
15
+ }
16
+ @font-face {
17
+ font-family: "MiSans";
18
+ src: url("./fonts/MiSans-Demibold.woff2") format("woff2");
19
+ font-weight: 600;
20
+ font-style: normal;
21
+ font-display: swap;
22
+ }
23
+ @font-face {
24
+ font-family: "MiSans";
25
+ src: url("./fonts/MiSans-Bold.woff2") format("woff2");
26
+ font-weight: 700;
27
+ font-style: normal;
28
+ font-display: swap;
29
+ }
30
+ .rhine-workbench * {
31
+ box-sizing: border-box;
32
+ }
33
+ .rhine-workbench {
34
+ font-family:
35
+ "MiSans", "Mi Sans", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
36
+ color: #080a08;
37
+ background: #e8e5e1;
38
+ font-synthesis: none;
39
+ }
40
+ .rhine-workbench {
41
+ margin: 0;
42
+ overflow: hidden;
43
+ }
44
+ .rhine-workbench button,
45
+ .rhine-workbench input {
46
+ font: inherit;
47
+ }
48
+ .rhine-workbench button {
49
+ border: 0;
50
+ color: inherit;
51
+ background: none;
52
+ cursor: pointer;
53
+ padding: 0;
54
+ }
55
+ .rhine-workbench button:focus-visible,
56
+ .rhine-workbench input:focus-visible {
57
+ outline: 2px solid #a67d48;
58
+ outline-offset: 7px;
59
+ }
60
+ .rhine-workbench button:disabled {
61
+ cursor: default;
62
+ }
63
+ .rhine-workbench button,
64
+ .rhine-workbench input {
65
+ -webkit-tap-highlight-color: transparent;
66
+ }
67
+ .rhine-workbench button {
68
+ touch-action: manipulation;
69
+ }
70
+ .rhine-workbench ::selection {
71
+ background: #cbb397;
72
+ color: #151713;
73
+ }
74
+ .rhine-workbench {
75
+ width: 100vw;
76
+ height: 100dvh;
77
+ position: relative;
78
+ overflow: hidden;
79
+ background: #e8e5e1;
80
+ }
81
+ .rhine-workbench .rhine-original-stage {
82
+ position: absolute;
83
+ left: 50%;
84
+ top: 50%;
85
+ width: 1920px;
86
+ height: 1080px;
87
+ overflow: hidden;
88
+ transform-origin: center;
89
+ isolation: isolate;
90
+ background: #e8e5e1;
91
+ }
92
+ .rhine-workbench .three-scene {
93
+ position: absolute;
94
+ inset: 0;
95
+ opacity: 0;
96
+ transition: opacity 0.45s;
97
+ }
98
+ .rhine-workbench .three-scene canvas {
99
+ display: block;
100
+ width: 100%;
101
+ height: 100%;
102
+ }
103
+ .rhine-workbench [data-review="true"] * {
104
+ transition: none !important;
105
+ }
106
+ .rhine-workbench [data-review="true"] .skip {
107
+ display: none;
108
+ }
109
+ .rhine-workbench .scene-atmosphere {
110
+ position: absolute;
111
+ inset: 0;
112
+ pointer-events: none;
113
+ background:
114
+ linear-gradient(180deg, rgba(234, 231, 226, 0.35), transparent 38%),
115
+ radial-gradient(
116
+ ellipse at 42% 47%,
117
+ transparent 32%,
118
+ rgba(232, 229, 225, 0.19) 85%
119
+ );
120
+ opacity: 0;
121
+ transition: opacity 1.5s;
122
+ }
123
+ .rhine-workbench .brand {
124
+ position: absolute;
125
+ left: 59px;
126
+ top: 114px;
127
+ z-index: 5;
128
+ line-height: 1;
129
+ user-select: none;
130
+ width: 270px;
131
+ white-space: nowrap;
132
+ }
133
+ .rhine-workbench .brand h1 {
134
+ font-size: 44px;
135
+ letter-spacing: 2.5px;
136
+ line-height: 48px;
137
+ margin: 0;
138
+ font-weight: 750;
139
+ }
140
+ .rhine-workbench .brand > div {
141
+ font-size: 19px;
142
+ line-height: 23px;
143
+ letter-spacing: 0.65px;
144
+ font-weight: 600;
145
+ }
146
+ .rhine-workbench .brand p {
147
+ margin: 0;
148
+ font-size: 35px;
149
+ line-height: 40px;
150
+ letter-spacing: 0;
151
+ word-spacing: 0;
152
+ display: flex;
153
+ justify-content: space-between;
154
+ }
155
+ .rhine-workbench .brand p b {
156
+ font-weight: 750;
157
+ letter-spacing: 3px;
158
+ }
159
+ .rhine-workbench .brand-analysis {
160
+ position: relative;
161
+ display: block;
162
+ width: 189px;
163
+ height: 40px;
164
+ }
165
+ .rhine-workbench .brand-analysis > span {
166
+ position: absolute;
167
+ top: 0;
168
+ letter-spacing: 0;
169
+ font-kerning: none;
170
+ }
171
+ .rhine-workbench .powered {
172
+ position: absolute;
173
+ right: 59px;
174
+ bottom: 108px;
175
+ font-size: 18px;
176
+ z-index: 5;
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 5px;
180
+ line-height: 24px;
181
+ }
182
+ .rhine-workbench .powered b {
183
+ font-weight: 750;
184
+ }
185
+ .rhine-workbench .powered i {
186
+ height: 6px;
187
+ width: 25px;
188
+ background: #090a08;
189
+ display: inline-block;
190
+ margin-left: 11px;
191
+ }
192
+ .rhine-workbench .boot-background {
193
+ position: absolute;
194
+ inset: 0;
195
+ background: radial-gradient(
196
+ ellipse at 51% 48%,
197
+ #e7e7e1 0%,
198
+ #e3e1dc 76%,
199
+ #e4dfdb 100%
200
+ );
201
+ transition: none;
202
+ pointer-events: none;
203
+ }
204
+ .rhine-workbench .boot-background svg {
205
+ width: 100%;
206
+ height: 100%;
207
+ opacity: 0.15;
208
+ filter: blur(2px);
209
+ }
210
+ .rhine-workbench .boot {
211
+ position: absolute;
212
+ inset: 0;
213
+ pointer-events: none;
214
+ z-index: 3;
215
+ }
216
+ .rhine-workbench .boot-logo {
217
+ position: absolute;
218
+ width: 296px;
219
+ height: 177px;
220
+ left: 518px;
221
+ top: 462px;
222
+ transition: none;
223
+ opacity: 0;
224
+ }
225
+ .rhine-workbench .boot-logo svg {
226
+ width: 100%;
227
+ height: 100%;
228
+ }
229
+ .rhine-workbench .auth-status {
230
+ position: absolute;
231
+ left: 931px;
232
+ top: 529px;
233
+ font-size: 22px;
234
+ display: flex;
235
+ align-items: center;
236
+ gap: 12px;
237
+ white-space: nowrap;
238
+ opacity: 0;
239
+ }
240
+ .rhine-workbench .auth-status > span:first-child {
241
+ font-size: 14px;
242
+ }
243
+ .rhine-workbench .auth-status i {
244
+ width: 3px;
245
+ height: 22px;
246
+ background: #282b26;
247
+ animation: blink 0.8s steps(1) infinite;
248
+ }
249
+ .rhine-workbench .access-text {
250
+ position: absolute;
251
+ top: 532px;
252
+ left: 800px;
253
+ width: 420px;
254
+ text-align: left;
255
+ font-size: 18px;
256
+ opacity: 0;
257
+ }
258
+ .rhine-workbench .scan {
259
+ position: absolute;
260
+ left: 410px;
261
+ top: -10px;
262
+ width: 1100px;
263
+ height: 1100px;
264
+ opacity: 0;
265
+ transform: scale(0.82);
266
+ transition:
267
+ transform 1.6s cubic-bezier(0.16, 1, 0.3, 1),
268
+ opacity 0.6s;
269
+ }
270
+ .rhine-workbench .scan svg {
271
+ width: 100%;
272
+ height: 100%;
273
+ }
274
+ .rhine-workbench .scan > span {
275
+ position: absolute;
276
+ inset: 0;
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: center;
280
+ font-size: 25px;
281
+ }
282
+ .rhine-workbench .scan-track {
283
+ stroke: #f7f5f0;
284
+ stroke-width: 8;
285
+ }
286
+ .rhine-workbench .scan-ring {
287
+ stroke: #aaa9a0;
288
+ stroke-width: 8;
289
+ transform-origin: center;
290
+ stroke-dasharray: 2400 900;
291
+ }
292
+ .rhine-workbench .ring-one {
293
+ animation: orbit 8s linear infinite;
294
+ }
295
+ .rhine-workbench .ring-two {
296
+ stroke-width: 9;
297
+ stroke-dasharray: 590 500;
298
+ animation: orbit 4s linear infinite reverse;
299
+ }
300
+ .rhine-workbench .ring-three {
301
+ stroke: #f4f3eb;
302
+ stroke-width: 3;
303
+ stroke-dasharray: 600 200;
304
+ animation: orbit 16s linear infinite;
305
+ }
306
+ .rhine-workbench .scan-nodes {
307
+ fill: #e7c69b;
308
+ filter: drop-shadow(0 0 15px #ddb788);
309
+ transform-origin: center;
310
+ animation: orbit 8s linear infinite;
311
+ }
312
+ .rhine-workbench .welcome {
313
+ position: absolute;
314
+ top: 403px;
315
+ left: 0;
316
+ width: 100%;
317
+ text-align: center;
318
+ font-size: 55px;
319
+ font-weight: 700;
320
+ line-height: 1.05;
321
+ opacity: 0;
322
+ transform: translateY(14px);
323
+ transition:
324
+ opacity 0.7s,
325
+ transform 1s;
326
+ }
327
+ .rhine-workbench .welcome strong {
328
+ display: inline-block;
329
+ background: #080a08;
330
+ color: #ece9e4;
331
+ padding: 4px 10px 6px;
332
+ font-size: 51px;
333
+ line-height: 1;
334
+ }
335
+ .rhine-workbench .welcome-logo {
336
+ width: 203px;
337
+ height: 121px;
338
+ margin: 58px auto 0;
339
+ }
340
+ .rhine-workbench .welcome-logo svg {
341
+ width: 100%;
342
+ height: 100%;
343
+ }
344
+ .rhine-workbench .skip {
345
+ position: absolute;
346
+ right: 60px;
347
+ top: 121px;
348
+ z-index: 10;
349
+ font-size: 14px;
350
+ letter-spacing: 1.1px;
351
+ opacity: 0.55;
352
+ padding: 10px 0;
353
+ }
354
+ .rhine-workbench .skip span {
355
+ margin-left: 28px;
356
+ font-size: 23px;
357
+ }
358
+ .rhine-workbench .skip:hover {
359
+ opacity: 1;
360
+ }
361
+ .rhine-workbench .brand,
362
+ .rhine-workbench .powered {
363
+ transition: opacity 0.6s;
364
+ }
365
+ .rhine-workbench .cinema-caption {
366
+ position: absolute;
367
+ bottom: 30px;
368
+ left: 0;
369
+ width: 100%;
370
+ font-size: 22px;
371
+ text-align: center;
372
+ color: #66645f;
373
+ opacity: 0.75;
374
+ pointer-events: none;
375
+ }
376
+ .rhine-workbench .system-nav {
377
+ position: absolute;
378
+ right: 59px;
379
+ top: 124px;
380
+ z-index: 6;
381
+ display: flex;
382
+ align-items: center;
383
+ gap: 43px;
384
+ opacity: 0;
385
+ pointer-events: none;
386
+ transition: opacity 0.8s;
387
+ }
388
+ .rhine-workbench .system-nav button {
389
+ font-size: 14px;
390
+ line-height: 1;
391
+ min-height: 28px;
392
+ letter-spacing: 0.7px;
393
+ display: flex;
394
+ align-items: center;
395
+ gap: 12px;
396
+ }
397
+ .rhine-workbench .system-nav button:hover {
398
+ color: #9b7247;
399
+ }
400
+ .rhine-workbench .nav-glyph {
401
+ width: 23px;
402
+ height: 23px;
403
+ }
404
+ .rhine-workbench .key {
405
+ font-size: 11px;
406
+ border: 1px solid #a6a49c;
407
+ display: inline-flex;
408
+ justify-content: center;
409
+ align-items: center;
410
+ min-width: 19px;
411
+ height: 21px;
412
+ flex-shrink: 0;
413
+ line-height: 1;
414
+ opacity: 0.6;
415
+ margin-left: 6px;
416
+ }
417
+ .rhine-workbench .settings-glyph {
418
+ font-size: 27px;
419
+ }
420
+ .rhine-workbench .archive-ui {
421
+ opacity: 0;
422
+ pointer-events: none;
423
+ transition: opacity 0.8s 0.3s;
424
+ position: absolute;
425
+ inset: 0;
426
+ }
427
+ .rhine-workbench .archive-callout {
428
+ position: absolute;
429
+ left: 970px;
430
+ top: 487px;
431
+ width: 950px;
432
+ }
433
+ .rhine-workbench .eyebrow {
434
+ font-size: 12px;
435
+ letter-spacing: 1.3px;
436
+ margin-bottom: 22px;
437
+ color: #77756d;
438
+ opacity: 0;
439
+ transition: opacity 0.7s;
440
+ }
441
+ .rhine-workbench .eyebrow > span {
442
+ margin-left: 16px;
443
+ }
444
+ .rhine-workbench .file-title {
445
+ font-size: 28px;
446
+ font-weight: 750;
447
+ display: flex;
448
+ gap: 10px;
449
+ align-items: center;
450
+ position: relative;
451
+ letter-spacing: 0.2px;
452
+ }
453
+ .rhine-workbench .file-open {
454
+ font-size: 25px;
455
+ margin-left: 48px;
456
+ opacity: 0;
457
+ transition:
458
+ opacity 0.3s,
459
+ transform 0.3s;
460
+ }
461
+ .rhine-workbench .file-title:hover .file-open {
462
+ opacity: 1;
463
+ transform: translate(3px, -3px);
464
+ }
465
+ .rhine-workbench .callout-rule {
466
+ height: 1px;
467
+ background: #504b41;
468
+ margin-left: 57px;
469
+ margin-top: 55px;
470
+ position: relative;
471
+ transform-origin: right;
472
+ transform: scaleX(0);
473
+ transition: transform 1.3s cubic-bezier(0.22, 1, 0.36, 1);
474
+ }
475
+ .rhine-workbench .callout-rule i {
476
+ position: absolute;
477
+ left: -61px;
478
+ top: -3px;
479
+ width: 6px;
480
+ height: 6px;
481
+ background: #282a24;
482
+ opacity: 0;
483
+ }
484
+ .rhine-workbench .file-summary {
485
+ margin-left: 58px;
486
+ margin-top: 22px;
487
+ width: 652px;
488
+ display: flex;
489
+ align-items: center;
490
+ justify-content: space-between;
491
+ font-size: 16px;
492
+ opacity: 0;
493
+ transform: translateY(8px);
494
+ transition:
495
+ opacity 0.7s 0.4s,
496
+ transform 0.7s 0.4s;
497
+ }
498
+ .rhine-workbench .file-summary > span:last-child {
499
+ font-size: 11px;
500
+ letter-spacing: 1px;
501
+ color: #666257;
502
+ }
503
+ .rhine-workbench .read-file {
504
+ display: flex;
505
+ align-items: center;
506
+ gap: 70px;
507
+ margin-left: 58px;
508
+ margin-top: 58px;
509
+ font-size: 14px;
510
+ letter-spacing: 1px;
511
+ opacity: 0;
512
+ transition: opacity 0.7s 0.4s;
513
+ }
514
+ .rhine-workbench .read-file > span {
515
+ font-size: 24px;
516
+ transition: transform 0.3s;
517
+ }
518
+ .rhine-workbench .read-file:hover > span {
519
+ transform: translateX(9px);
520
+ }
521
+ .rhine-workbench .archive-counter {
522
+ position: absolute;
523
+ bottom: 115px;
524
+ left: 60px;
525
+ }
526
+ .rhine-workbench .tiny-label {
527
+ font-size: 11px;
528
+ letter-spacing: 1.7px;
529
+ }
530
+ .rhine-workbench .archive-counter > div {
531
+ font-size: 58px;
532
+ line-height: 1.1;
533
+ margin-top: 16px;
534
+ display: flex;
535
+ gap: 21px;
536
+ align-items: baseline;
537
+ }
538
+ .rhine-workbench .archive-counter i {
539
+ font-style: normal;
540
+ font-weight: 300;
541
+ font-size: 32px;
542
+ color: #8f8a80;
543
+ }
544
+ .rhine-workbench .count-total {
545
+ font-size: 22px;
546
+ color: #726f67;
547
+ }
548
+ .rhine-workbench .archive-navigation {
549
+ position: absolute;
550
+ left: 504px;
551
+ bottom: 131px;
552
+ display: flex;
553
+ align-items: center;
554
+ gap: 33px;
555
+ }
556
+ .rhine-workbench .archive-navigation > button {
557
+ width: 46px;
558
+ height: 46px;
559
+ font-size: 28px;
560
+ transition: background 0.3s;
561
+ }
562
+ .rhine-workbench .archive-navigation > button:hover {
563
+ background: #e4d5c1;
564
+ }
565
+ .rhine-workbench .column-navigation {
566
+ position: absolute;
567
+ left: 1005px;
568
+ bottom: 131px;
569
+ display: none;
570
+ align-items: center;
571
+ gap: 24px;
572
+ }
573
+ .rhine-workbench [data-mode="archive"] .column-navigation {
574
+ display: flex;
575
+ }
576
+ .rhine-workbench .column-navigation button {
577
+ width: 46px;
578
+ height: 46px;
579
+ font-size: 24px;
580
+ }
581
+ .rhine-workbench .column-navigation button:hover {
582
+ background: #e4d5c1;
583
+ }
584
+ .rhine-workbench .column-navigation button:disabled {
585
+ opacity: 0.25;
586
+ cursor: default;
587
+ }
588
+ .rhine-workbench .column-navigation > div {
589
+ display: grid;
590
+ gap: 7px;
591
+ min-width: 140px;
592
+ }
593
+ .rhine-workbench .column-navigation > div > span {
594
+ font-size: 10px;
595
+ letter-spacing: 1.2px;
596
+ color: #726f67;
597
+ }
598
+ .rhine-workbench .column-navigation strong {
599
+ font-size: 15px;
600
+ font-weight: 400;
601
+ }
602
+ .rhine-workbench #selected-number,
603
+ .rhine-workbench #column-index {
604
+ min-width: 2ch;
605
+ font-variant-numeric: tabular-nums;
606
+ --rn-blur: 0.35;
607
+ --rn-edge-fade: 0.08em;
608
+ }
609
+ .rhine-workbench .file-ticks {
610
+ display: flex;
611
+ align-items: center;
612
+ gap: 12px;
613
+ }
614
+ .rhine-workbench .file-ticks button {
615
+ width: 14px;
616
+ height: 40px;
617
+ position: relative;
618
+ }
619
+ .rhine-workbench .file-ticks button:before {
620
+ content: "";
621
+ position: absolute;
622
+ left: 6px;
623
+ top: 14px;
624
+ width: 2px;
625
+ height: 12px;
626
+ background: #aaa59a;
627
+ transition:
628
+ height 0.4s,
629
+ background 0.4s,
630
+ top 0.4s;
631
+ }
632
+ .rhine-workbench .file-ticks button.selected:before {
633
+ height: 33px;
634
+ top: 3px;
635
+ background: #24261f;
636
+ }
637
+ .rhine-workbench .file-ticks button:hover:before {
638
+ height: 24px;
639
+ top: 8px;
640
+ background: #a27849;
641
+ }
642
+ .rhine-workbench .archive-hint {
643
+ position: absolute;
644
+ bottom: 60px;
645
+ left: 505px;
646
+ color: #858077;
647
+ font-size: 10px;
648
+ letter-spacing: 0.9px;
649
+ }
650
+ .rhine-workbench .archive-hint > span {
651
+ margin: 0 12px;
652
+ }
653
+ .rhine-workbench .archive-hint kbd {
654
+ font: inherit;
655
+ }
656
+ .rhine-workbench .hover-label {
657
+ position: absolute;
658
+ left: 60px;
659
+ bottom: 264px;
660
+ font-size: 13px;
661
+ color: #6f675b;
662
+ letter-spacing: 1px;
663
+ }
664
+ .rhine-workbench .system-footer {
665
+ position: absolute;
666
+ bottom: 35px;
667
+ left: 59px;
668
+ right: 59px;
669
+ font-size: 10px;
670
+ letter-spacing: 0.9px;
671
+ display: flex;
672
+ gap: 44px;
673
+ color: #78776e;
674
+ z-index: 5;
675
+ opacity: 0;
676
+ pointer-events: none;
677
+ transition: opacity 0.8s;
678
+ }
679
+ .rhine-workbench .system-footer > span {
680
+ display: flex;
681
+ align-items: center;
682
+ gap: 10px;
683
+ }
684
+ .rhine-workbench .status-light {
685
+ width: 5px;
686
+ height: 5px;
687
+ background: #777b60;
688
+ display: inline-block;
689
+ }
690
+ .rhine-workbench .system-footer > span:nth-child(2) {
691
+ margin-left: auto;
692
+ }
693
+ .rhine-workbench .system-footer i {
694
+ font-style: normal;
695
+ margin: 0 5px;
696
+ }
697
+ .rhine-workbench .system-footer button {
698
+ font-size: 10px;
699
+ letter-spacing: 1px;
700
+ }
701
+ .rhine-workbench .system-footer button:hover {
702
+ color: #111;
703
+ }
704
+ .rhine-workbench .detail-ui {
705
+ position: absolute;
706
+ inset: 0;
707
+ pointer-events: none;
708
+ z-index: 4;
709
+ }
710
+ .rhine-workbench .detail-ui[hidden] {
711
+ display: none;
712
+ }
713
+ .rhine-workbench .back-button {
714
+ position: absolute;
715
+ left: 59px;
716
+ top: 289px;
717
+ pointer-events: auto;
718
+ display: flex;
719
+ align-items: center;
720
+ gap: 20px;
721
+ font-size: 24px;
722
+ }
723
+ .rhine-workbench .back-button span {
724
+ font-size: 12px;
725
+ letter-spacing: 1px;
726
+ }
727
+ .rhine-workbench .back-button small {
728
+ font-size: 10px;
729
+ margin-left: 18px;
730
+ color: #88877f;
731
+ border: 1px solid #b8b3a9;
732
+ padding: 4px;
733
+ }
734
+ .rhine-workbench .back-button:hover {
735
+ color: #946b3c;
736
+ }
737
+ .rhine-workbench .object-caption {
738
+ position: absolute;
739
+ left: 60px;
740
+ bottom: 235px;
741
+ }
742
+ .rhine-workbench .object-caption > span {
743
+ font-size: 37px;
744
+ letter-spacing: -1px;
745
+ }
746
+ .rhine-workbench .object-caption > div {
747
+ font-size: 10px;
748
+ letter-spacing: 1.8px;
749
+ margin-top: 7px;
750
+ color: #76736a;
751
+ }
752
+ .rhine-workbench .object-caption > small {
753
+ font-size: 10px;
754
+ letter-spacing: 1px;
755
+ display: block;
756
+ margin-top: 34px;
757
+ color: #817b70;
758
+ }
759
+ .rhine-workbench .object-caption > small span {
760
+ font-size: 18px;
761
+ margin-left: 18px;
762
+ }
763
+ .rhine-workbench .detail-content {
764
+ position: absolute;
765
+ left: 1154px;
766
+ top: 289px;
767
+ width: 636px;
768
+ pointer-events: auto;
769
+ opacity: 0;
770
+ outline: none !important;
771
+ }
772
+ .rhine-workbench .detail-kicker {
773
+ display: flex;
774
+ justify-content: space-between;
775
+ align-items: center;
776
+ font-size: 11px;
777
+ letter-spacing: 1.4px;
778
+ }
779
+ .rhine-workbench .detail-kicker span:last-child {
780
+ font-size: 9px;
781
+ color: #77756b;
782
+ }
783
+ .rhine-workbench .detail-content h2 {
784
+ font-size: 40px;
785
+ line-height: 1.12;
786
+ letter-spacing: -1.3px;
787
+ margin: 30px 0 13px;
788
+ max-width: 620px;
789
+ }
790
+ .rhine-workbench .detail-title-cn {
791
+ font-size: 23px;
792
+ display: flex;
793
+ align-items: center;
794
+ gap: 23px;
795
+ }
796
+ .rhine-workbench .detail-title-cn > span {
797
+ font-size: 11px;
798
+ color: #77756a;
799
+ letter-spacing: 1px;
800
+ }
801
+ .rhine-workbench .detail-rule {
802
+ height: 2px;
803
+ background: #20221d;
804
+ margin-top: 28px;
805
+ }
806
+ .rhine-workbench .metadata {
807
+ display: grid;
808
+ grid-template-columns: 1fr 1fr;
809
+ gap: 25px 42px;
810
+ margin: 28px 0 34px;
811
+ }
812
+ .rhine-workbench .metadata dt {
813
+ font-size: 9px;
814
+ letter-spacing: 0.7px;
815
+ color: #807b70;
816
+ }
817
+ .rhine-workbench .metadata dd {
818
+ margin: 8px 0 0;
819
+ font-size: 14px;
820
+ }
821
+ .rhine-workbench .metadata dd i {
822
+ display: inline-block;
823
+ width: 5px;
824
+ height: 5px;
825
+ background: #8b8f75;
826
+ margin-right: 8px;
827
+ vertical-align: middle;
828
+ }
829
+ .rhine-workbench .detail-tabs {
830
+ position: relative;
831
+ display: flex;
832
+ gap: 34px;
833
+ border-bottom: 1px solid #bdb8ad;
834
+ }
835
+ .rhine-workbench .detail-tabs button {
836
+ font-size: 10px;
837
+ color: #989184;
838
+ position: relative;
839
+ padding: 0 0 14px;
840
+ }
841
+ .rhine-workbench .detail-tabs button span {
842
+ font-size: 13px;
843
+ margin-left: 8px;
844
+ }
845
+ .rhine-workbench .detail-tabs button.active {
846
+ color: #191c16;
847
+ }
848
+ .rhine-workbench .tab-indicator {
849
+ position: absolute;
850
+ bottom: -1px;
851
+ left: 0;
852
+ width: 1px;
853
+ height: 2px;
854
+ background: #25281e;
855
+ transform-origin: left center;
856
+ pointer-events: none;
857
+ transition: transform 180ms cubic-bezier(0.22, 1, 0.36, 1);
858
+ }
859
+ .rhine-workbench .tab-panel {
860
+ height: 189px;
861
+ padding-top: 22px;
862
+ overflow-y: auto;
863
+ overflow-x: hidden;
864
+ scrollbar-width: thin;
865
+ scrollbar-color: #bbb4a6 transparent;
866
+ }
867
+ .rhine-workbench .panel-label {
868
+ font-size: 9px;
869
+ letter-spacing: 1px;
870
+ color: #888074;
871
+ }
872
+ .rhine-workbench .tab-panel p {
873
+ font-size: 15px;
874
+ line-height: 1.95;
875
+ margin: 14px 0 0;
876
+ color: #5a584e;
877
+ text-align: justify;
878
+ }
879
+ .rhine-workbench .research-notes {
880
+ margin: 12px 0 0;
881
+ padding: 0;
882
+ list-style: none;
883
+ }
884
+ .rhine-workbench .research-notes li {
885
+ display: flex;
886
+ gap: 14px;
887
+ font-size: 13px;
888
+ line-height: 1.7;
889
+ margin: 8px 0;
890
+ color: #5a584e;
891
+ }
892
+ .rhine-workbench .research-notes li span {
893
+ font-size: 10px;
894
+ color: #a38e72;
895
+ line-height: 22px;
896
+ }
897
+ .rhine-workbench .log-row {
898
+ display: flex;
899
+ justify-content: space-between;
900
+ margin-top: 21px;
901
+ font-size: 10px;
902
+ gap: 12px;
903
+ }
904
+ .rhine-workbench .log-row b {
905
+ font-size: 9px;
906
+ font-weight: 400;
907
+ color: #7a8163;
908
+ }
909
+ .rhine-workbench .tab-panel .log-note {
910
+ font-size: 13px;
911
+ }
912
+ .rhine-workbench .detail-actions {
913
+ display: flex;
914
+ justify-content: space-between;
915
+ margin-top: 19px;
916
+ align-items: center;
917
+ gap: 30px;
918
+ }
919
+ .rhine-workbench .solid-button {
920
+ background: #252820;
921
+ color: #f0eee5;
922
+ height: 46px;
923
+ flex: 1;
924
+ font-size: 11px;
925
+ letter-spacing: 1px;
926
+ text-align: left;
927
+ padding: 0 18px;
928
+ display: flex;
929
+ align-items: center;
930
+ justify-content: space-between;
931
+ transition: background 0.2s;
932
+ }
933
+ .rhine-workbench .solid-button > span {
934
+ font-size: 11px;
935
+ color: #bcbfb1;
936
+ letter-spacing: 0;
937
+ }
938
+ .rhine-workbench .solid-button:hover {
939
+ background: #4b4a3b;
940
+ }
941
+ .rhine-workbench .export-button {
942
+ font-size: 11px;
943
+ letter-spacing: 1px;
944
+ width: 105px;
945
+ text-align: left;
946
+ display: flex;
947
+ align-items: center;
948
+ justify-content: space-between;
949
+ min-height: 46px;
950
+ }
951
+ .rhine-workbench .export-button span {
952
+ font-size: 23px;
953
+ line-height: 1;
954
+ }
955
+ .rhine-workbench .detail-footnote {
956
+ display: flex;
957
+ justify-content: space-between;
958
+ font-size: 8px;
959
+ letter-spacing: 0.6px;
960
+ color: #9a9487;
961
+ margin-top: 22px;
962
+ }
963
+ .rhine-workbench .detail-footnote a {
964
+ color: inherit;
965
+ text-decoration: none;
966
+ }
967
+ .rhine-workbench .detail-footnote a:hover {
968
+ text-decoration: underline;
969
+ }
970
+ .rhine-workbench .modal-backdrop {
971
+ position: absolute;
972
+ inset: 0;
973
+ z-index: 20;
974
+ background: rgba(227, 224, 215, 0.45);
975
+ backdrop-filter: blur(18px);
976
+ display: flex;
977
+ align-items: center;
978
+ justify-content: center;
979
+ }
980
+ .rhine-workbench .modal-backdrop[hidden] {
981
+ display: none;
982
+ }
983
+ .rhine-workbench .modal-backdrop[data-transition="closing"] .terminal-modal {
984
+ pointer-events: none;
985
+ }
986
+ .rhine-workbench .terminal-modal {
987
+ width: 1260px;
988
+ height: 836px;
989
+ background: rgba(237, 235, 228, 0.97);
990
+ box-shadow: 0 26px 95px #63513a20;
991
+ border: 1px solid #f7f5ee;
992
+ position: relative;
993
+ padding: 35px 53px;
994
+ }
995
+ .rhine-workbench .modal-top {
996
+ display: flex;
997
+ align-items: center;
998
+ justify-content: space-between;
999
+ font-size: 11px;
1000
+ letter-spacing: 1px;
1001
+ border-bottom: 1px solid #c2bdb1;
1002
+ padding-bottom: 20px;
1003
+ }
1004
+ .rhine-workbench .modal-top button {
1005
+ font-size: 10px;
1006
+ display: flex;
1007
+ gap: 24px;
1008
+ align-items: center;
1009
+ line-height: 1;
1010
+ }
1011
+ .rhine-workbench .modal-top button > span {
1012
+ position: relative;
1013
+ flex: 0 0 16px;
1014
+ height: 34px;
1015
+ font-size: 0;
1016
+ }
1017
+ .rhine-workbench .modal-top button > span::before,
1018
+ .rhine-workbench .modal-top button > span::after {
1019
+ content: "";
1020
+ position: absolute;
1021
+ left: 50%;
1022
+ top: 50%;
1023
+ width: 14px;
1024
+ height: 2px;
1025
+ background: currentColor;
1026
+ transform: translate(-50%, -50%) rotate(45deg);
1027
+ }
1028
+ .rhine-workbench .modal-top button > span::after {
1029
+ transform: translate(-50%, -50%) rotate(-45deg);
1030
+ }
1031
+ .rhine-workbench .terminal-modal h2 {
1032
+ font-size: 38px;
1033
+ letter-spacing: -0.6px;
1034
+ margin: 32px 0 29px;
1035
+ display: flex;
1036
+ align-items: baseline;
1037
+ gap: 23px;
1038
+ }
1039
+ .rhine-workbench .terminal-modal h2 small {
1040
+ font-size: 15px;
1041
+ color: #817a6c;
1042
+ font-weight: 400;
1043
+ letter-spacing: 2px;
1044
+ }
1045
+ .rhine-workbench .search-field {
1046
+ height: 61px;
1047
+ border-bottom: 2px solid #3b3c30;
1048
+ display: flex;
1049
+ align-items: center;
1050
+ gap: 22px;
1051
+ }
1052
+ .rhine-workbench .search-field > span:first-child {
1053
+ width: 26px;
1054
+ height: 26px;
1055
+ }
1056
+ /* Fixed geometry keeps the search symbol independent of font fallback metrics. */
1057
+ .rhine-workbench .nav-glyph,
1058
+ .rhine-workbench .search-field > span:first-child {
1059
+ position: relative;
1060
+ flex-shrink: 0;
1061
+ display: block;
1062
+ font-size: 0;
1063
+ }
1064
+ .rhine-workbench .nav-glyph::before,
1065
+ .rhine-workbench .search-field > span:first-child::before {
1066
+ content: "";
1067
+ position: absolute;
1068
+ width: 60%;
1069
+ height: 60%;
1070
+ left: 30%;
1071
+ top: 8%;
1072
+ border: 2px solid currentColor;
1073
+ border-radius: 50%;
1074
+ box-sizing: border-box;
1075
+ }
1076
+ .rhine-workbench .nav-glyph::after,
1077
+ .rhine-workbench .search-field > span:first-child::after {
1078
+ content: "";
1079
+ position: absolute;
1080
+ width: 42%;
1081
+ height: 2px;
1082
+ left: 9%;
1083
+ top: 82%;
1084
+ background: currentColor;
1085
+ transform: rotate(-45deg);
1086
+ transform-origin: left center;
1087
+ }
1088
+ .rhine-workbench .search-field input {
1089
+ border: 0;
1090
+ background: none;
1091
+ width: 100%;
1092
+ min-width: 0;
1093
+ padding: 0;
1094
+ height: 100%;
1095
+ outline: none;
1096
+ font-size: 19px;
1097
+ color: #292b21;
1098
+ }
1099
+ .rhine-workbench .search-field input::placeholder {
1100
+ color: #9f988a;
1101
+ font-size: 17px;
1102
+ letter-spacing: 0.5px;
1103
+ }
1104
+ .rhine-workbench .search-field .key {
1105
+ width: 37px;
1106
+ height: 24px;
1107
+ margin-right: 4px;
1108
+ }
1109
+ .rhine-workbench .category-filters {
1110
+ display: flex;
1111
+ gap: 27px;
1112
+ padding: 25px 0 24px;
1113
+ }
1114
+ .rhine-workbench .category-filters button {
1115
+ font-size: 12px;
1116
+ color: #8c8373;
1117
+ transition: color 0.2s;
1118
+ display: inline-flex;
1119
+ align-items: center;
1120
+ gap: 7px;
1121
+ }
1122
+ .rhine-workbench .category-filters button.active {
1123
+ color: #1e2418;
1124
+ }
1125
+ .rhine-workbench .category-filters button:before {
1126
+ content: "";
1127
+ width: 4px;
1128
+ height: 4px;
1129
+ background: currentColor;
1130
+ visibility: hidden;
1131
+ }
1132
+ .rhine-workbench .category-filters button.active:before {
1133
+ visibility: visible;
1134
+ }
1135
+ .rhine-workbench .result-header,
1136
+ .rhine-workbench .result-row {
1137
+ display: grid;
1138
+ grid-template-columns: minmax(0, 1fr) 230px 175px;
1139
+ padding-right: 7px;
1140
+ }
1141
+ .rhine-workbench .result-header {
1142
+ padding-block: 14px;
1143
+ /* Match the list's classic scrollbar gutter, including after filtering. */
1144
+ overflow-y: hidden;
1145
+ scrollbar-gutter: stable;
1146
+ scrollbar-width: thin;
1147
+ border-top: 1px solid #bfb7a7;
1148
+ border-bottom: 1px solid #bfb7a7;
1149
+ font-size: 9px;
1150
+ color: #82796a;
1151
+ letter-spacing: 1px;
1152
+ }
1153
+ .rhine-workbench .search-results {
1154
+ height: 387px;
1155
+ overflow-y: auto;
1156
+ overflow-x: hidden;
1157
+ scrollbar-gutter: stable;
1158
+ scrollbar-width: thin;
1159
+ scrollbar-color: #bbb4a6 transparent;
1160
+ }
1161
+ .rhine-workbench .result-row {
1162
+ width: 100%;
1163
+ align-items: center;
1164
+ min-height: 76px;
1165
+ text-align: left;
1166
+ border-bottom: 1px solid #d6d0c4;
1167
+ transition: background 0.25s;
1168
+ }
1169
+ .rhine-workbench .result-row:hover,
1170
+ .rhine-workbench .result-row:focus-visible {
1171
+ background: #e2dccf;
1172
+ }
1173
+ .rhine-workbench .result-name {
1174
+ display: flex;
1175
+ align-items: center;
1176
+ gap: 25px;
1177
+ font-size: 16px;
1178
+ min-width: 0;
1179
+ padding-right: 24px;
1180
+ }
1181
+ .rhine-workbench .result-name > b {
1182
+ font-size: 14px;
1183
+ flex: 0 0 58px;
1184
+ font-weight: 400;
1185
+ }
1186
+ .rhine-workbench .result-name > span {
1187
+ display: block;
1188
+ min-width: 0;
1189
+ overflow-wrap: anywhere;
1190
+ }
1191
+ .rhine-workbench .result-name small {
1192
+ display: block;
1193
+ font-size: 9px;
1194
+ letter-spacing: 0.7px;
1195
+ color: #9b907e;
1196
+ margin-top: 7px;
1197
+ }
1198
+ .rhine-workbench .result-name > i {
1199
+ color: #ad9170;
1200
+ font-size: 13px;
1201
+ font-style: normal;
1202
+ }
1203
+ .rhine-workbench .result-row > span:nth-child(2) {
1204
+ font-size: 12px;
1205
+ color: #7d7565;
1206
+ }
1207
+ .rhine-workbench .result-row > span:last-child {
1208
+ font-size: 9px;
1209
+ letter-spacing: 0.5px;
1210
+ color: #6b6d54;
1211
+ display: flex;
1212
+ align-items: center;
1213
+ justify-content: space-between;
1214
+ gap: 12px;
1215
+ padding-right: 30px;
1216
+ line-height: 1;
1217
+ }
1218
+ .rhine-workbench .result-row > span:last-child > i {
1219
+ font-size: 24px;
1220
+ flex: 0 0 24px;
1221
+ line-height: 1;
1222
+ font-style: normal;
1223
+ color: #343a29;
1224
+ }
1225
+ .rhine-workbench .modal-bottom {
1226
+ position: absolute;
1227
+ bottom: 30px;
1228
+ left: 53px;
1229
+ right: 53px;
1230
+ display: flex;
1231
+ justify-content: space-between;
1232
+ font-size: 9px;
1233
+ letter-spacing: 1px;
1234
+ color: #8d8575;
1235
+ }
1236
+ .rhine-workbench .modal-bottom i {
1237
+ font-style: normal;
1238
+ color: #858a6b;
1239
+ font-size: 8px;
1240
+ margin: 0 8px;
1241
+ }
1242
+ .rhine-workbench .empty-results {
1243
+ height: 100%;
1244
+ display: flex;
1245
+ flex-direction: column;
1246
+ align-items: center;
1247
+ justify-content: center;
1248
+ }
1249
+ .rhine-workbench .empty-results > span {
1250
+ font-size: 44px;
1251
+ font-weight: 300;
1252
+ color: #a39b8a;
1253
+ }
1254
+ .rhine-workbench .empty-results > strong {
1255
+ font-size: 18px;
1256
+ font-weight: 400;
1257
+ margin-top: 20px;
1258
+ }
1259
+ .rhine-workbench .empty-results > p {
1260
+ font-size: 13px;
1261
+ color: #8b8271;
1262
+ margin: 15px 0 25px;
1263
+ }
1264
+ .rhine-workbench .empty-results > button {
1265
+ font-size: 12px;
1266
+ border-bottom: 1px solid #8d826c;
1267
+ padding-bottom: 8px;
1268
+ }
1269
+ .rhine-workbench .settings-modal {
1270
+ width: 930px;
1271
+ height: 786px;
1272
+ }
1273
+ .rhine-workbench .settings-modal h2 {
1274
+ font-size: 33px;
1275
+ }
1276
+ .rhine-workbench .settings-intro {
1277
+ font-size: 10px;
1278
+ letter-spacing: 1px;
1279
+ color: #87806f;
1280
+ margin: 0 0 34px;
1281
+ }
1282
+ .rhine-workbench .settings-intro > span {
1283
+ margin: 0 18px;
1284
+ }
1285
+ .rhine-workbench .settings-list {
1286
+ border-top: 1px solid #c1b8a7;
1287
+ }
1288
+ .rhine-workbench .audio-settings { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; }
1289
+ .rhine-workbench .settings-list .audio-toggle { padding: 20px 0 12px; border-bottom: 0; }
1290
+ .rhine-workbench .settings-list .audio-toggle span { margin-top: 7px; }
1291
+ .rhine-workbench .settings-list .audio-volume { justify-content: flex-start; gap: 12px; padding: 8px 0 18px; }
1292
+ .rhine-workbench .settings-list .audio-volume span { margin: 0; font-size: 10px; white-space: nowrap; }
1293
+ .rhine-workbench .settings-list .audio-volume input { position: static; width: 100%; min-width: 60px; height: 22px; opacity: 1; accent-color: #565c46; }
1294
+ .rhine-workbench .audio-volume output { min-width: 36px; text-align: right; font-size: 10px; font-variant-numeric: tabular-nums; }
1295
+ .rhine-workbench .audio-volume input:focus-visible { outline: 2px solid #a67d48; outline-offset: 4px; }
1296
+ .rhine-workbench .settings-list label {
1297
+ display: flex;
1298
+ align-items: center;
1299
+ justify-content: space-between;
1300
+ padding: 27px 0;
1301
+ border-bottom: 1px solid #d0c6b5;
1302
+ cursor: pointer;
1303
+ position: relative;
1304
+ }
1305
+ .rhine-workbench .settings-list strong {
1306
+ font-size: 12px;
1307
+ letter-spacing: 0.8px;
1308
+ font-weight: 400;
1309
+ display: block;
1310
+ }
1311
+ .rhine-workbench .settings-list label span {
1312
+ display: block;
1313
+ font-size: 12px;
1314
+ color: #938977;
1315
+ margin-top: 9px;
1316
+ }
1317
+ .rhine-workbench .settings-list input {
1318
+ position: absolute;
1319
+ right: 0;
1320
+ opacity: 0;
1321
+ width: 60px;
1322
+ height: 40px;
1323
+ cursor: pointer;
1324
+ }
1325
+ .rhine-workbench .toggle {
1326
+ width: 50px;
1327
+ height: 24px;
1328
+ background: #d3ccbf;
1329
+ position: relative;
1330
+ pointer-events: none;
1331
+ transition: background 0.3s;
1332
+ }
1333
+ .rhine-workbench .toggle:after {
1334
+ content: "";
1335
+ position: absolute;
1336
+ width: 16px;
1337
+ height: 16px;
1338
+ background: #f5f2e9;
1339
+ left: 4px;
1340
+ top: 4px;
1341
+ transition: transform 0.3s;
1342
+ }
1343
+ .rhine-workbench .settings-list input:checked + .toggle {
1344
+ background: #565c46;
1345
+ }
1346
+ .rhine-workbench .settings-list input:checked + .toggle:after {
1347
+ transform: translateX(26px);
1348
+ }
1349
+ .rhine-workbench .settings-list input:focus-visible + .toggle {
1350
+ outline: 2px solid #a67d48;
1351
+ outline-offset: 5px;
1352
+ }
1353
+ .rhine-workbench .settings-shortcuts {
1354
+ margin-top: 26px;
1355
+ }
1356
+ .rhine-workbench .settings-shortcuts > span {
1357
+ font-size: 9px;
1358
+ letter-spacing: 1px;
1359
+ color: #8e826f;
1360
+ }
1361
+ .rhine-workbench .settings-shortcuts p {
1362
+ font-size: 11px;
1363
+ color: #776f60;
1364
+ margin-top: 19px;
1365
+ }
1366
+ .rhine-workbench .settings-shortcuts kbd {
1367
+ font-family: inherit;
1368
+ padding: 5px;
1369
+ border: 1px solid #c9c1b2;
1370
+ font-size: 9px;
1371
+ margin: 0 9px 0 18px;
1372
+ }
1373
+ .rhine-workbench .settings-shortcuts kbd:first-child {
1374
+ margin-left: 0;
1375
+ }
1376
+ .rhine-workbench .settings-bottom {
1377
+ margin-top: 30px;
1378
+ display: flex;
1379
+ justify-content: space-between;
1380
+ }
1381
+ .rhine-workbench .settings-bottom button {
1382
+ font-size: 11px;
1383
+ letter-spacing: 0.8px;
1384
+ display: flex;
1385
+ align-items: center;
1386
+ gap: 20px;
1387
+ }
1388
+ .rhine-workbench .settings-bottom button span {
1389
+ font-size: 20px;
1390
+ line-height: 1;
1391
+ }
1392
+ .rhine-workbench .toast {
1393
+ position: absolute;
1394
+ z-index: 30;
1395
+ left: 50%;
1396
+ bottom: 85px;
1397
+ transform: translate(-50%, 15px);
1398
+ padding: 15px 27px;
1399
+ background: #30362a;
1400
+ color: #f1efdf;
1401
+ font-size: 14px;
1402
+ opacity: 0;
1403
+ pointer-events: none;
1404
+ transition:
1405
+ opacity 0.3s,
1406
+ transform 0.3s;
1407
+ }
1408
+ .rhine-workbench .toast.visible {
1409
+ opacity: 1;
1410
+ transform: translate(-50%, 0);
1411
+ }
1412
+ .rhine-workbench .loading {
1413
+ position: absolute;
1414
+ inset: 0;
1415
+ background: #e8e5e1;
1416
+ display: flex;
1417
+ align-items: center;
1418
+ justify-content: center;
1419
+ flex-direction: column;
1420
+ z-index: 50;
1421
+ transition: opacity 0.6s;
1422
+ }
1423
+ .rhine-workbench .loading.loaded {
1424
+ opacity: 0;
1425
+ pointer-events: none;
1426
+ }
1427
+ .rhine-workbench .loading-mark {
1428
+ width: 150px;
1429
+ height: 90px;
1430
+ margin-bottom: 49px;
1431
+ }
1432
+ .rhine-workbench .loading-mark svg {
1433
+ width: 100%;
1434
+ height: 100%;
1435
+ }
1436
+ .rhine-workbench .loading > span {
1437
+ font-size: 11px;
1438
+ letter-spacing: 2px;
1439
+ color: #888277;
1440
+ }
1441
+ .rhine-workbench .loading > i {
1442
+ width: 180px;
1443
+ height: 1px;
1444
+ background: #bab3a5;
1445
+ position: relative;
1446
+ margin-top: 20px;
1447
+ overflow: hidden;
1448
+ }
1449
+ .rhine-workbench .loading > i:after {
1450
+ content: "";
1451
+ position: absolute;
1452
+ inset: 0;
1453
+ width: 60px;
1454
+ background: #414639;
1455
+ animation: loading 1.3s ease-in-out infinite;
1456
+ }
1457
+ .rhine-workbench .error-state {
1458
+ width: 700px;
1459
+ text-align: center;
1460
+ }
1461
+ .rhine-workbench .error-state strong {
1462
+ font-size: 29px;
1463
+ }
1464
+ .rhine-workbench .error-state p {
1465
+ font-size: 18px;
1466
+ line-height: 2;
1467
+ color: #7c7568;
1468
+ }
1469
+ .rhine-workbench .error-state button {
1470
+ margin-top: 30px;
1471
+ font-size: 16px;
1472
+ border-bottom: 1px solid;
1473
+ padding-bottom: 8px;
1474
+ }
1475
+
1476
+ /* Reference sequence: each stage uses the same physical scene and DOM. */
1477
+ .rhine-workbench [data-mode="boot"] .system-nav,
1478
+ .rhine-workbench [data-mode="boot"] .system-footer {
1479
+ opacity: 0;
1480
+ pointer-events: none;
1481
+ }
1482
+ .rhine-workbench [data-mode="boot"] .brand,
1483
+ .rhine-workbench [data-mode="boot"] .powered {
1484
+ opacity: 1;
1485
+ }
1486
+ .rhine-workbench [data-boot="access"] .brand,
1487
+ .rhine-workbench [data-boot="access"] .powered,
1488
+ .rhine-workbench [data-boot="logo"] .brand,
1489
+ .rhine-workbench [data-boot="logo"] .powered {
1490
+ opacity: 0;
1491
+ }
1492
+ .rhine-workbench [data-boot="access"] .access-text {
1493
+ opacity: 1;
1494
+ }
1495
+ .rhine-workbench [data-boot="logo"] .boot-logo {
1496
+ opacity: 1;
1497
+ transform: translateX(294px);
1498
+ }
1499
+ .rhine-workbench [data-boot="auth"] .boot-logo {
1500
+ opacity: 1;
1501
+ }
1502
+ .rhine-workbench [data-boot="auth"] .auth-status {
1503
+ opacity: 1;
1504
+ animation: fadeIn 0.7s;
1505
+ }
1506
+ .rhine-workbench [data-boot="scan"] .scan {
1507
+ opacity: 1;
1508
+ transform: scale(1);
1509
+ }
1510
+ .rhine-workbench [data-boot="welcome"] .welcome {
1511
+ opacity: 1;
1512
+ transform: translateY(0);
1513
+ }
1514
+ .rhine-workbench [data-boot="array"] .boot-background,
1515
+ .rhine-workbench [data-boot="select"] .boot-background,
1516
+ .rhine-workbench [data-boot="inspect"] .boot-background,
1517
+ .rhine-workbench [data-boot="done"] .boot-background {
1518
+ opacity: 0;
1519
+ }
1520
+ .rhine-workbench [data-boot="array"] .three-scene,
1521
+ .rhine-workbench [data-boot="select"] .three-scene,
1522
+ .rhine-workbench [data-boot="inspect"] .three-scene,
1523
+ .rhine-workbench [data-boot="done"] .three-scene {
1524
+ opacity: 1;
1525
+ }
1526
+ .rhine-workbench [data-boot="array"] .scene-atmosphere,
1527
+ .rhine-workbench [data-boot="select"] .scene-atmosphere,
1528
+ .rhine-workbench [data-boot="inspect"] .scene-atmosphere,
1529
+ .rhine-workbench [data-boot="done"] .scene-atmosphere {
1530
+ opacity: 1;
1531
+ }
1532
+ .rhine-workbench [data-boot="array"] .archive-ui,
1533
+ .rhine-workbench [data-boot="select"] .archive-ui,
1534
+ .rhine-workbench [data-boot="inspect"] .archive-ui {
1535
+ opacity: 1;
1536
+ }
1537
+ .rhine-workbench [data-mode="boot"] .archive-counter,
1538
+ .rhine-workbench [data-mode="boot"] .archive-navigation,
1539
+ .rhine-workbench [data-mode="boot"] .archive-hint {
1540
+ opacity: 0;
1541
+ }
1542
+ .rhine-workbench [data-boot="array"] .file-title {
1543
+ font-size: 24px;
1544
+ }
1545
+ .rhine-workbench [data-boot="array"][data-mode="boot"] .file-title span {
1546
+ display: none;
1547
+ }
1548
+ .rhine-workbench [data-boot="array"] .callout-rule {
1549
+ transform: scaleX(1);
1550
+ }
1551
+ .rhine-workbench [data-boot="select"] .callout-rule {
1552
+ transform: scaleX(1);
1553
+ }
1554
+ .rhine-workbench [data-boot="inspect"] .archive-ui {
1555
+ opacity: 0;
1556
+ }
1557
+ .rhine-workbench [data-mode="archive"] .system-nav,
1558
+ .rhine-workbench [data-mode="detail"] .system-nav,
1559
+ .rhine-workbench [data-mode="archive"] .system-footer,
1560
+ .rhine-workbench [data-mode="detail"] .system-footer {
1561
+ opacity: 1;
1562
+ pointer-events: auto;
1563
+ }
1564
+ .rhine-workbench [data-mode="archive"] .boot,
1565
+ .rhine-workbench [data-mode="detail"] .boot {
1566
+ opacity: 0;
1567
+ }
1568
+ .rhine-workbench [data-mode="archive"] .skip,
1569
+ .rhine-workbench [data-mode="detail"] .skip {
1570
+ display: none;
1571
+ }
1572
+ .rhine-workbench [data-mode="archive"] .archive-ui {
1573
+ opacity: 1;
1574
+ pointer-events: none;
1575
+ }
1576
+ .rhine-workbench [data-mode="archive"] .archive-ui button {
1577
+ pointer-events: auto;
1578
+ }
1579
+ .rhine-workbench [data-mode="archive"] .eyebrow,
1580
+ .rhine-workbench [data-mode="archive"] .read-file,
1581
+ .rhine-workbench [data-mode="archive"] .file-summary {
1582
+ opacity: 1;
1583
+ transform: translateY(0);
1584
+ }
1585
+ .rhine-workbench [data-mode="archive"] .callout-rule {
1586
+ transform: scaleX(1);
1587
+ }
1588
+ .rhine-workbench [data-mode="archive"] .callout-rule i {
1589
+ opacity: 1;
1590
+ }
1591
+ .rhine-workbench [data-mode="detail"] .powered {
1592
+ bottom: 108px;
1593
+ }
1594
+ .rhine-workbench [data-mode="detail"] .archive-ui {
1595
+ opacity: 0;
1596
+ pointer-events: none;
1597
+ }
1598
+ .rhine-workbench .archive-atmosphere {
1599
+ background: none;
1600
+ }
1601
+ .rhine-workbench .archive-atmosphere::before,
1602
+ .rhine-workbench .archive-atmosphere::after {
1603
+ content: "";
1604
+ position: absolute;
1605
+ inset: 0;
1606
+ }
1607
+ .rhine-workbench .archive-atmosphere::before {
1608
+ opacity: calc(1 - var(--detail-shade, 0));
1609
+ background:
1610
+ linear-gradient(180deg, rgba(234, 231, 226, 0.35), transparent 38%),
1611
+ radial-gradient(ellipse at 42% 47%, transparent 32%, rgba(232, 229, 225, 0.19) 85%);
1612
+ }
1613
+ .rhine-workbench .archive-atmosphere::after {
1614
+ opacity: var(--detail-shade, 0);
1615
+ background: linear-gradient(
1616
+ 90deg,
1617
+ transparent 40%,
1618
+ rgba(232, 229, 225, 0.2) 59%,
1619
+ rgba(232, 229, 225, 0.92) 68%,
1620
+ #e8e5e1 100%
1621
+ );
1622
+ }
1623
+ @keyframes orbit {
1624
+ to {
1625
+ transform: rotate(360deg);
1626
+ }
1627
+ }
1628
+ @keyframes blink {
1629
+ 50% {
1630
+ opacity: 0;
1631
+ }
1632
+ }
1633
+ @keyframes fadeIn {
1634
+ from {
1635
+ opacity: 0;
1636
+ }
1637
+ to {
1638
+ opacity: 1;
1639
+ }
1640
+ }
1641
+ @keyframes detailEnter {
1642
+ from {
1643
+ opacity: 0;
1644
+ transform: translateY(23px);
1645
+ }
1646
+ to {
1647
+ opacity: 1;
1648
+ transform: translateY(0);
1649
+ }
1650
+ }
1651
+ @keyframes modalEnter {
1652
+ from {
1653
+ opacity: 0;
1654
+ transform: translateY(25px) scale(0.99);
1655
+ }
1656
+ to {
1657
+ opacity: 1;
1658
+ transform: translateY(0) scale(1);
1659
+ }
1660
+ }
1661
+ @keyframes loading {
1662
+ from {
1663
+ transform: translateX(-60px);
1664
+ }
1665
+ to {
1666
+ transform: translateX(180px);
1667
+ }
1668
+ }
1669
+ .rhine-workbench .reduce-motion * {
1670
+ animation-duration: 0.01ms !important;
1671
+ animation-iteration-count: 1 !important;
1672
+ transition-duration: 0.01ms !important;
1673
+ transition-delay: 0s !important;
1674
+ }
1675
+ @media (prefers-reduced-motion: reduce) {
1676
+ .rhine-workbench .loading > i:after {
1677
+ animation: none;
1678
+ width: 100%;
1679
+ }
1680
+ }
1681
+ /* Reading sizes for the extended research workspace. */
1682
+ .rhine-workbench .metadata dt {
1683
+ font-size: 11px;
1684
+ }
1685
+ .rhine-workbench .metadata dd {
1686
+ font-size: 17px;
1687
+ }
1688
+ .rhine-workbench .tab-panel p {
1689
+ font-size: 18px;
1690
+ line-height: 1.8;
1691
+ }
1692
+ .rhine-workbench .research-notes li {
1693
+ font-size: 16px;
1694
+ }
1695
+ .rhine-workbench .panel-label {
1696
+ font-size: 11px;
1697
+ }
1698
+ .rhine-workbench .detail-tabs button span {
1699
+ font-size: 15px;
1700
+ }
1701
+ .rhine-workbench .tab-panel .log-note {
1702
+ font-size: 16px;
1703
+ }
1704
+ .rhine-workbench .cinema-caption {
1705
+ font-size: 24px;
1706
+ color: #fff;
1707
+ opacity: 0.88;
1708
+ text-shadow: 0 1px 5px #4a4740;
1709
+ }
1710
+ .rhine-workbench .powered {
1711
+ font-size: 19px;
1712
+ }
1713
+ .rhine-workbench .boot-background svg {
1714
+ opacity: 0.09;
1715
+ filter: blur(3px);
1716
+ }
1717
+ .rhine-workbench .archive-callout {
1718
+ top: 471px;
1719
+ }
1720
+ .rhine-workbench .export-button {
1721
+ color: inherit;
1722
+ text-decoration: none;
1723
+ cursor: pointer;
1724
+ }
1725
+ .rhine-workbench .export-button:hover {
1726
+ color: #947444;
1727
+ }
1728
+ .rhine-workbench .export-button:focus-visible {
1729
+ outline: 2px solid #a67d48;
1730
+ outline-offset: 7px;
1731
+ }
1732
+
1733
+ .rhine-workbench [data-mode="boot"][data-boot="array"] .three-scene {
1734
+ opacity: var(--entry-opacity, 1);
1735
+ transition: none;
1736
+ }
1737
+ .rhine-workbench [data-mode="boot"] .callout-rule {
1738
+ transform-origin: right center;
1739
+ }
1740
+ .rhine-workbench #inspection-marks {
1741
+ position: absolute;
1742
+ inset: 0;
1743
+ width: 100%;
1744
+ height: 100%;
1745
+ pointer-events: none;
1746
+ opacity: 0;
1747
+ fill: #24221f;
1748
+ }
1749
+ .rhine-workbench #inspection-lines {
1750
+ fill: none;
1751
+ stroke: #24221f;
1752
+ stroke-width: 2;
1753
+ }
1754
+ .rhine-workbench #inspection-text {
1755
+ position: absolute;
1756
+ left: 1202px;
1757
+ top: 499px;
1758
+ font-size: 23px;
1759
+ font-weight: 600;
1760
+ opacity: 0;
1761
+ pointer-events: none;
1762
+ }
1763
+ .rhine-workbench #inspection-text strong {
1764
+ display: block;
1765
+ font-size: 30px;
1766
+ margin-top: 16px;
1767
+ }
1768
+ .rhine-workbench .scene-atmosphere {
1769
+ background:
1770
+ linear-gradient(
1771
+ 180deg,
1772
+ #eae5e1 0%,
1773
+ rgba(234, 229, 225, 0.82) 11%,
1774
+ transparent 40%
1775
+ ),
1776
+ linear-gradient(0deg, rgba(234, 229, 225, 0.94) 0%, transparent 19%),
1777
+ radial-gradient(
1778
+ ellipse at 48% 48%,
1779
+ transparent 35%,
1780
+ rgba(234, 229, 225, 0.38) 85%
1781
+ );
1782
+ }
1783
+
1784
+ /* Independent object study, using the archive's typography and warm field. */
1785
+ .rhine-workbench .viewer-open {
1786
+ pointer-events: auto;
1787
+ display: flex;
1788
+ align-items: center;
1789
+ gap: 16px;
1790
+ margin-top: 25px;
1791
+ padding: 12px 0 8px;
1792
+ border-bottom: 1px solid #8e897b;
1793
+ font-size: 14px;
1794
+ letter-spacing: 0.3px;
1795
+ }
1796
+ .rhine-workbench .viewer-open span {
1797
+ font-size: 20px;
1798
+ }
1799
+ .rhine-workbench .viewer-open:hover {
1800
+ color: #946b3c;
1801
+ border-color: currentColor;
1802
+ }
1803
+ .rhine-workbench .model-viewer {
1804
+ position: absolute;
1805
+ inset: 0;
1806
+ z-index: 30;
1807
+ overflow: hidden;
1808
+ background: #e8e5e1;
1809
+ color: #20221c;
1810
+ }
1811
+ .rhine-workbench .model-viewer[hidden] {
1812
+ display: none;
1813
+ }
1814
+ .rhine-workbench .model-viewer .viewer-atmosphere {
1815
+ opacity: 1;
1816
+ transition: none;
1817
+ }
1818
+ .rhine-workbench .viewer-canvas {
1819
+ position: absolute;
1820
+ inset: 0;
1821
+ }
1822
+ .rhine-workbench .viewer-canvas canvas {
1823
+ display: block;
1824
+ width: 100%;
1825
+ height: 100%;
1826
+ touch-action: none;
1827
+ outline-offset: -8px;
1828
+ }
1829
+ .rhine-workbench .viewer-header {
1830
+ position: absolute;
1831
+ top: 58px;
1832
+ left: 60px;
1833
+ right: 60px;
1834
+ display: flex;
1835
+ align-items: flex-start;
1836
+ pointer-events: none;
1837
+ }
1838
+ .rhine-workbench .viewer-back {
1839
+ display: flex;
1840
+ align-items: center;
1841
+ gap: 18px;
1842
+ font-size: 22px;
1843
+ pointer-events: auto;
1844
+ padding: 12px 0;
1845
+ }
1846
+ .rhine-workbench .viewer-back span {
1847
+ font-size: 15px;
1848
+ }
1849
+ .rhine-workbench .viewer-back kbd {
1850
+ font-family: inherit;
1851
+ font-size: 10px;
1852
+ border: 1px solid #b8b3a9;
1853
+ padding: 4px;
1854
+ color: #817b70;
1855
+ margin-left: 8px;
1856
+ }
1857
+ .rhine-workbench .viewer-heading {
1858
+ margin-left: 74px;
1859
+ padding-top: 12px;
1860
+ }
1861
+ .rhine-workbench .viewer-heading > span {
1862
+ font-size: 11px;
1863
+ letter-spacing: 1.8px;
1864
+ color: #79766a;
1865
+ }
1866
+ .rhine-workbench .viewer-heading h2 {
1867
+ margin: 10px 0 8px;
1868
+ font-size: 31px;
1869
+ font-weight: 600;
1870
+ }
1871
+ .rhine-workbench .viewer-heading p {
1872
+ margin: 0;
1873
+ font-size: 11px;
1874
+ letter-spacing: 1px;
1875
+ color: #858073;
1876
+ }
1877
+ .rhine-workbench .viewer-index {
1878
+ margin-left: auto;
1879
+ font-size: 58px;
1880
+ line-height: 1;
1881
+ font-weight: 300;
1882
+ color: #6a6b5d;
1883
+ }
1884
+ .rhine-workbench .viewer-index > span {
1885
+ font-size: 32px;
1886
+ vertical-align: top;
1887
+ }
1888
+ .rhine-workbench .viewer-parts {
1889
+ position: absolute;
1890
+ top: 300px;
1891
+ right: 70px;
1892
+ width: 230px;
1893
+ pointer-events: none;
1894
+ opacity: 0;
1895
+ transform: translateX(12px);
1896
+ transition:
1897
+ opacity 0.4s,
1898
+ transform 0.4s;
1899
+ }
1900
+ .rhine-workbench .model-viewer[data-exploded="true"] .viewer-parts {
1901
+ opacity: 1;
1902
+ transform: translateX(0);
1903
+ }
1904
+ .rhine-workbench .viewer-parts > div {
1905
+ font-size: 11px;
1906
+ letter-spacing: 1px;
1907
+ margin-bottom: 24px;
1908
+ color: #7e7a6d;
1909
+ }
1910
+ .rhine-workbench .viewer-parts p {
1911
+ position: relative;
1912
+ padding: 0 0 18px 38px;
1913
+ margin: 0 0 20px;
1914
+ border-bottom: 1px solid #cec9bc;
1915
+ }
1916
+ .rhine-workbench .viewer-parts p > span {
1917
+ position: absolute;
1918
+ left: 0;
1919
+ top: 2px;
1920
+ font-size: 11px;
1921
+ color: #9b947f;
1922
+ }
1923
+ .rhine-workbench .viewer-parts strong {
1924
+ font-size: 16px;
1925
+ font-weight: 400;
1926
+ }
1927
+ .rhine-workbench .viewer-parts small {
1928
+ display: block;
1929
+ font-size: 9px;
1930
+ letter-spacing: 1px;
1931
+ margin-top: 6px;
1932
+ color: #827b6c;
1933
+ }
1934
+ .rhine-workbench .viewer-footer {
1935
+ position: absolute;
1936
+ bottom: 68px;
1937
+ left: 60px;
1938
+ right: 60px;
1939
+ display: flex;
1940
+ align-items: center;
1941
+ justify-content: space-between;
1942
+ pointer-events: none;
1943
+ }
1944
+ .rhine-workbench .viewer-help {
1945
+ display: flex;
1946
+ flex-wrap: wrap;
1947
+ gap: 18px;
1948
+ width: 400px;
1949
+ font-size: 12px;
1950
+ color: #787568;
1951
+ }
1952
+ .rhine-workbench .viewer-actions {
1953
+ display: flex;
1954
+ pointer-events: auto;
1955
+ border: 1px solid #a4a08f;
1956
+ background: #e8e5e1;
1957
+ }
1958
+ .rhine-workbench .viewer-actions button {
1959
+ min-width: 166px;
1960
+ padding: 19px 24px;
1961
+ font-size: 15px;
1962
+ transition:
1963
+ background 0.2s,
1964
+ color 0.2s;
1965
+ }
1966
+ .rhine-workbench .viewer-actions button span {
1967
+ margin-right: 10px;
1968
+ }
1969
+ .rhine-workbench .viewer-actions button[aria-pressed="true"] {
1970
+ background: #292d24;
1971
+ color: #eeeade;
1972
+ }
1973
+ .rhine-workbench .viewer-actions button:hover {
1974
+ background: #c9c8b6;
1975
+ color: #20221c;
1976
+ }
1977
+ .rhine-workbench .viewer-reset {
1978
+ width: 400px;
1979
+ text-align: right;
1980
+ pointer-events: auto;
1981
+ font-size: 14px;
1982
+ }
1983
+ .rhine-workbench .viewer-reset span {
1984
+ margin-left: 18px;
1985
+ }
1986
+ .rhine-workbench .viewer-state {
1987
+ position: absolute;
1988
+ left: 50%;
1989
+ bottom: 37px;
1990
+ transform: translateX(-50%);
1991
+ color: #85806f;
1992
+ font-size: 11px;
1993
+ letter-spacing: 1px;
1994
+ pointer-events: none;
1995
+ }
1996
+ .rhine-workbench .viewer-loading {
1997
+ position: absolute;
1998
+ left: 50%;
1999
+ top: 50%;
2000
+ transform: translate(-50%, -50%);
2001
+ text-align: center;
2002
+ font-size: 15px;
2003
+ color: #7c7565;
2004
+ }
2005
+ .rhine-workbench .viewer-loading[hidden] {
2006
+ display: none;
2007
+ }
2008
+ .rhine-workbench .viewer-loading button {
2009
+ display: block;
2010
+ margin: 20px auto 0;
2011
+ border-bottom: 1px solid;
2012
+ padding: 8px;
2013
+ }
2014
+ .rhine-workbench .viewer-loading button[hidden] {
2015
+ display: none;
2016
+ }
2017
+ .rhine-workbench .model-viewer button:disabled {
2018
+ opacity: 0.35;
2019
+ cursor: wait;
2020
+ }
2021
+ .rhine-workbench .reduce-motion .viewer-parts,
2022
+ .rhine-workbench .reduce-motion .viewer-actions button {
2023
+ transition: none;
2024
+ }
2025
+
2026
+ /* Use the same rolling engine as archive numbers, with quieter text blur. */
2027
+ .rhine-workbench #column-name,
2028
+ .rhine-workbench #hover-title,
2029
+ .rhine-workbench #archive-category,
2030
+ .rhine-workbench #selected-clearance {
2031
+ flex: none;
2032
+ --rn-blur: 0.2;
2033
+ --rn-edge-fade: 0.08em;
2034
+ }
2035
+ /* Frame-driven opening: no elapsed CSS animation state when seeking/replaying. */
2036
+ .rhine-workbench [data-mode="boot"] .brand,
2037
+ .rhine-workbench [data-mode="boot"] .powered,
2038
+ .rhine-workbench [data-mode="boot"] .boot * {
2039
+ transition: none;
2040
+ animation: none;
2041
+ }
2042
+ .rhine-workbench [data-mode="boot"] .auth-status {
2043
+ animation: none;
2044
+ }
2045
+ .rhine-workbench .auth-status i {
2046
+ display: none;
2047
+ }
2048
+ .rhine-workbench .boot-white {
2049
+ position: absolute;
2050
+ inset: 0;
2051
+ background: #fff;
2052
+ opacity: 0;
2053
+ }
2054
+ .rhine-workbench .scan {
2055
+ inset: 0;
2056
+ width: 1920px;
2057
+ height: 1080px;
2058
+ transform: none;
2059
+ transition: none;
2060
+ }
2061
+ .rhine-workbench .scan > span {
2062
+ font-size: 22px;
2063
+ white-space: nowrap;
2064
+ padding-left: 0;
2065
+ }
2066
+ .rhine-workbench .welcome {
2067
+ left: 720px;
2068
+ top: 403px;
2069
+ width: 480px;
2070
+ height: 340px;
2071
+ transform-origin: 50% 44%;
2072
+ transition: none;
2073
+ }
2074
+ .rhine-workbench .welcome-heading {
2075
+ position: relative;
2076
+ z-index: 1;
2077
+ line-height: 65px;
2078
+ font-size: 55px;
2079
+ white-space: nowrap;
2080
+ }
2081
+ .rhine-workbench .welcome-panel {
2082
+ position: absolute;
2083
+ top: -59px;
2084
+ left: 5px;
2085
+ width: 470px;
2086
+ height: 392px;
2087
+ background: #080a08;
2088
+ }
2089
+ .rhine-workbench .welcome-company {
2090
+ position: absolute;
2091
+ top: 67px;
2092
+ left: 35px;
2093
+ width: 410px;
2094
+ height: 60px;
2095
+ }
2096
+ .rhine-workbench .welcome-company strong {
2097
+ display: block;
2098
+ position: absolute;
2099
+ inset: 0;
2100
+ padding: 5px 8px;
2101
+ background: transparent;
2102
+ color: #080a08;
2103
+ font-size: 48px;
2104
+ line-height: 50px;
2105
+ white-space: nowrap;
2106
+ letter-spacing: -0.5px;
2107
+ }
2108
+ .rhine-workbench .welcome-company .welcome-highlight {
2109
+ background: #080a08;
2110
+ color: #eeede8;
2111
+ }
2112
+ .rhine-workbench .welcome-database {
2113
+ position: absolute;
2114
+ top: 134px;
2115
+ left: 0;
2116
+ width: 100%;
2117
+ font-size: 36px;
2118
+ line-height: 43px;
2119
+ white-space: nowrap;
2120
+ }
2121
+ .rhine-workbench .welcome-logo {
2122
+ position: absolute;
2123
+ top: 187px;
2124
+ left: 138.5px;
2125
+ margin: 0;
2126
+ }
2127
+ .rhine-workbench [data-mode="archive"] .boot,
2128
+ .rhine-workbench [data-mode="detail"] .boot {
2129
+ visibility: hidden;
2130
+ }
2131
+
2132
+ /* The film keeps its reference stage. Interactive layouts share the same DOM. */
2133
+ .rhine-workbench .rhine-original-stage { --edge: 59px; }
2134
+ .rhine-workbench .mobile-entry { display: none; }
2135
+ .rhine-workbench .system-nav .settings-button { position: relative; }
2136
+ .rhine-workbench .settings-label { position: absolute; left: 50%; top: calc(100% + 3px); transform: translateX(-50%); font-size: 10px; white-space: nowrap; letter-spacing: 1px; }
2137
+ .rhine-workbench .pwa-update-notice { position: absolute; z-index: 12; right: var(--edge); bottom: var(--bottom-edge, 32px); max-width: calc(100% - 2 * var(--edge)); min-height: 44px; display: flex; align-items: center; gap: 20px; padding: 0 16px; background: #30362a; color: #f1efdf; font-size: 12px; }
2138
+ .rhine-workbench .pwa-update-notice button { min-height: 44px; color: inherit; white-space: nowrap; border-left: 1px solid #737767; padding-left: 16px; font-size: inherit; }
2139
+ .rhine-workbench .pwa-update-notice[hidden], .rhine-workbench .pwa-update-notice[inert], .rhine-workbench [data-mode="boot"] .pwa-update-notice { display: none; }
2140
+ .rhine-workbench .rhine-original-stage[data-pwa-update="true"]:not([data-mode="boot"]) .system-footer { visibility: hidden; }
2141
+ .rhine-workbench .motion-preference-note { margin-top: 12px; color: #776f60; font-size: 12px; line-height: 1.7; }
2142
+ .rhine-workbench .motion-preference-note p { margin: 0; }
2143
+ .rhine-workbench .motion-preference-note button { min-height: 44px; margin-top: 4px; border-bottom: 1px solid #8e897b; font-size: 12px; }
2144
+ .rhine-workbench .pwa-settings { margin-top: 24px; padding: 20px 0; border-block: 1px solid #c1b8a7; }
2145
+ .rhine-workbench .pwa-settings h3 { font-size: 12px; font-weight: 400; letter-spacing: .8px; margin: 0 0 12px; }
2146
+ .rhine-workbench .pwa-settings p { font-size: 12px; line-height: 1.8; margin: 6px 0; color: #776f60; }
2147
+ .rhine-workbench .pwa-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; font-size: 12px; }
2148
+ .rhine-workbench .pwa-actions:empty { display: none; }
2149
+ .rhine-workbench .pwa-actions button { min-height: 44px; border-bottom: 1px solid #8e897b; font-size: 12px; }
2150
+ @media (display-mode: standalone) { .rhine-workbench { overscroll-behavior: none; } }
2151
+ .rhine-workbench [data-mobile-boot="true"] > .mobile-entry { display: flex; position: absolute; bottom: max(28px, env(safe-area-inset-bottom)); right: max(24px, env(safe-area-inset-right)); align-items: center; gap: 32px; min-height: 48px; padding: 0 16px; font-size: 14px; border-bottom: 1px solid #8e897b; }
2152
+ .rhine-workbench [data-mobile-boot="true"] .skip { display: none; }
2153
+ .rhine-workbench .three-scene canvas { touch-action: none; }
2154
+ .rhine-workbench [data-layout="desktop"] .archive-callout { left: 50.520833%; width: 49.479167%; }
2155
+ .rhine-workbench [data-layout="desktop"] .file-summary { width: min(652px, calc(100% - 117px)); gap: 20px; }
2156
+ .rhine-workbench [data-layout="desktop"] .archive-navigation { left: 26.25%; }
2157
+ .rhine-workbench [data-layout="desktop"] .column-navigation { left: 52.34375%; }
2158
+ .rhine-workbench [data-layout="desktop"] .archive-hint { left: 26.302083%; }
2159
+ .rhine-workbench [data-layout="desktop"] .detail-content { left: 60.104167%; width: min(636px, 33.125%); max-height: calc(100% - 369px); overflow-y: auto; scrollbar-width: thin; }
2160
+ .rhine-workbench [data-layout="desktop"] .terminal-modal { max-width: calc(100% - 100px); }
2161
+ .rhine-workbench [data-layout="desktop"] .viewer-help, .rhine-workbench [data-layout="desktop"] .viewer-reset { width: 25%; }
2162
+
2163
+ /* Compact controls use actual CSS pixels, independent of render resolution. */
2164
+ .rhine-workbench .rhine-original-stage:is([data-layout="compact"], [data-layout="portrait"]) {
2165
+ --edge: max(20px, env(safe-area-inset-left), env(safe-area-inset-right));
2166
+ --top-edge: max(16px, env(safe-area-inset-top));
2167
+ --bottom-edge: max(12px, env(safe-area-inset-bottom));
2168
+ }
2169
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .brand { left: var(--edge); top: var(--top-edge); transform: scale(.48) !important; transform-origin: top left; }
2170
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .system-nav { top: var(--top-edge); right: var(--edge); gap: 18px; }
2171
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .system-nav button { min-height: 44px; min-width: 44px; font-size: 11px; justify-content: center; gap: 7px; }
2172
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) :is(.key, .powered, .archive-hint, .hover-label) { display: none; }
2173
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .system-footer { left: var(--edge); right: var(--edge); bottom: var(--bottom-edge); font-size: 8px; gap: 12px; }
2174
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .system-footer > span:nth-child(2) { display: none; }
2175
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .system-footer button { margin-left: auto; font-size: 9px; min-height: 28px; }
2176
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .archive-callout { left: 53%; top: 35%; width: calc(47% - var(--edge)); }
2177
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .eyebrow { font-size: 9px; letter-spacing: .4px; margin-bottom: 12px; }
2178
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .eyebrow > span { margin-left: 5px; }
2179
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .file-title { font-size: 20px; gap: 6px; min-height: 44px; white-space: nowrap; }
2180
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .file-open { font-size: 20px; margin-left: auto; opacity: 1; }
2181
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .callout-rule { margin: 8px 0 0 20px; }
2182
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .callout-rule i { left: -20px; }
2183
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .file-summary { margin: 12px 0 0; width: 100%; gap: 8px; font-size: 15px; flex-wrap: wrap; }
2184
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .file-summary > span:last-child { font-size: 8px; }
2185
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .read-file { margin: 8px 0 0; min-height: 44px; font-size: 11px; gap: 36px; }
2186
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .archive-counter { left: var(--edge); bottom: 61px; }
2187
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .archive-counter .tiny-label { font-size: 8px; }
2188
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .archive-counter > div { font-size: 34px; margin-top: 4px; gap: 10px; }
2189
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .archive-counter i { font-size: 20px; }
2190
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .count-total { font-size: 15px; }
2191
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .archive-navigation { left: 20%; bottom: 62px; gap: 4px; }
2192
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .file-ticks { gap: 0; }
2193
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .file-ticks button { width: 22px; height: 44px; }
2194
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .file-ticks button:before { left: 10px; }
2195
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .column-navigation { left: auto; right: var(--edge); bottom: 62px; gap: 8px; }
2196
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .column-navigation > div { min-width: 100px; gap: 4px; }
2197
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .column-navigation strong { font-size: 13px; }
2198
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .column-navigation > div > span { font-size: 8px; }
2199
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .back-button { left: var(--edge); top: 84px; min-height: 44px; gap: 8px; }
2200
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .back-button span { font-size: 10px; }
2201
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .back-button small { display: none; }
2202
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .object-caption { left: var(--edge); bottom: 55px; }
2203
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .object-caption > span { font-size: 20px; }
2204
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .object-caption > div { font-size: 8px; }
2205
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .object-caption > small { display: none; }
2206
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-open { margin-top: 8px; min-height: 44px; padding: 5px 0; font-size: 12px; }
2207
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-content { left: 53%; top: 84px; width: calc(47% - var(--edge)); bottom: 53px; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; padding: 0 3px 12px 0; }
2208
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-kicker { font-size: 9px; gap: 8px; flex-wrap: wrap; }
2209
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-content h2 { font-size: 27px; margin: 14px 0 8px; letter-spacing: -.6px; overflow-wrap: anywhere; }
2210
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-title-cn { font-size: 18px; gap: 10px; flex-wrap: wrap; }
2211
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-rule { margin-top: 18px; }
2212
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .metadata { margin: 18px 0; gap: 14px; }
2213
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .metadata dd { font-size: 13px; margin-top: 5px; }
2214
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-tabs { gap: 16px; }
2215
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-tabs button { min-height: 44px; padding: 8px 0; font-size: 9px; }
2216
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-tabs button span { font-size: 12px; margin-left: 4px; }
2217
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .tab-panel { height: auto; overflow: visible; padding-top: 12px; }
2218
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .tab-panel p { font-size: 15px; text-align: left; }
2219
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-actions { gap: 12px; }
2220
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .solid-button { font-size: 9px; padding: 0 12px; gap: 10px; }
2221
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .export-button { width: 88px; font-size: 10px; }
2222
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .detail-footnote { gap: 12px; line-height: 1.8; flex-wrap: wrap; }
2223
+
2224
+ /* Portrait keeps the specimen above an independently scrollable document. */
2225
+ .rhine-workbench [data-layout="portrait"] .brand { transform: scale(.42) !important; }
2226
+ .rhine-workbench [data-layout="portrait"] .system-nav { gap: 8px; }
2227
+ .rhine-workbench [data-layout="portrait"] .system-nav button[data-action="search"] { font-size: 0; gap: 0; }
2228
+ .rhine-workbench [data-layout="portrait"] .system-nav button[data-action="saved"] { font-size: 10px; }
2229
+ .rhine-workbench [data-layout="portrait"] .archive-callout { left: var(--edge); top: auto; bottom: 205px; width: calc(100% - 2 * var(--edge)); }
2230
+ .rhine-workbench [data-layout="portrait"] .archive-counter { bottom: 58px; }
2231
+ .rhine-workbench [data-layout="portrait"] .column-navigation { bottom: 58px; }
2232
+ .rhine-workbench [data-layout="portrait"] .archive-navigation { bottom: 124px; left: 50%; transform: translateX(-50%); gap: 6px; }
2233
+ .rhine-workbench [data-layout="portrait"] .file-ticks button { width: 27px; }
2234
+ .rhine-workbench [data-layout="portrait"] .file-ticks button:before { left: 12px; }
2235
+ .rhine-workbench [data-layout="portrait"] .back-button { top: 77px; }
2236
+ .rhine-workbench [data-layout="portrait"] .detail-content { left: var(--edge); right: var(--edge); width: auto; top: 54%; bottom: 40px; padding-top: 12px; border-top: 1px solid #aaa496; }
2237
+ .rhine-workbench [data-layout="portrait"] .object-caption { left: var(--edge); right: var(--edge); bottom: 46%; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
2238
+ .rhine-workbench [data-layout="portrait"] .object-caption > div { display: none; }
2239
+ .rhine-workbench [data-layout="portrait"] .object-caption > span { font-size: 15px; }
2240
+ .rhine-workbench [data-layout="portrait"] .viewer-open { margin: 0; border: 0; }
2241
+ .rhine-workbench [data-layout="portrait"] .archive-atmosphere::after { background: linear-gradient(180deg, transparent 28%, rgba(232,229,225,.2) 39%, rgba(232,229,225,.96) 51%, #e8e5e1 60%); }
2242
+ .rhine-workbench [data-layout="portrait"] .archive-atmosphere::before { background: linear-gradient(180deg, rgba(234,231,226,.35), transparent 25%, transparent 46%, rgba(232,229,225,.8) 65%, #e8e5e1 82%); }
2243
+
2244
+ /* Dialogs remain inside the visual viewport when a software keyboard opens. */
2245
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .modal-backdrop { top: var(--modal-top, 0px); height: var(--modal-height, 100%); bottom: auto; padding: var(--top-edge) var(--edge) var(--bottom-edge); }
2246
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .terminal-modal { width: min(760px, 100%); height: 100%; max-height: 850px; padding: 16px 20px; overflow: auto; overscroll-behavior: contain; scrollbar-width: thin; }
2247
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .modal-top { padding-bottom: 8px; font-size: 9px; gap: 12px; }
2248
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .modal-top button { min-height: 44px; min-width: 44px; gap: 8px; }
2249
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .terminal-modal h2 { font-size: 25px; margin: 18px 0; flex-wrap: wrap; gap: 8px; }
2250
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .terminal-modal h2 small { font-size: 12px; }
2251
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .search-field { height: 48px; gap: 12px; }
2252
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .search-field input, .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .search-field input::placeholder { font-size: 16px; }
2253
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .category-filters { gap: 4px 18px; padding: 12px 0; flex-wrap: wrap; }
2254
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .category-filters button { min-height: 44px; font-size: 12px; }
2255
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) :is(.result-header, .result-row) { grid-template-columns: minmax(0, 1fr) 100px; }
2256
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) :is(.result-header, .result-row) > span:last-child { display: none; }
2257
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .result-name { gap: 10px; padding-right: 12px; font-size: 14px; }
2258
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .result-name > b { font-size: 12px; flex-basis: 48px; }
2259
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .search-results { height: auto; overflow: visible; }
2260
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .modal-bottom { position: static; margin-top: 22px; gap: 12px; font-size: 8px; flex-wrap: wrap; }
2261
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .audio-settings { grid-template-columns: 1fr; gap: 0; }
2262
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .settings-list label { gap: 16px; }
2263
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .toggle { flex-shrink: 0; }
2264
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .quality-grid { grid-template-columns: 1fr; gap: 0; }
2265
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .quality-heading { gap: 12px; flex-wrap: wrap; }
2266
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .quality-heading h3 span { margin-left: 8px; }
2267
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .quality-range { display: block; }
2268
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .quality-range > div { margin-top: 12px; }
2269
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .quality-range input { width: 100%; min-width: 0; }
2270
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .settings-shortcuts { display: none; }
2271
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .toast { max-width: calc(100% - 40px); width: max-content; font-size: 13px; bottom: 52px; }
2272
+
2273
+ /* Object study: keep controls outside the model's usable canvas. */
2274
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-header { top: var(--top-edge); left: var(--edge); right: var(--edge); }
2275
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-back { padding: 0; min-height: 44px; gap: 8px; }
2276
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-back span { font-size: 13px; }
2277
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-back kbd { display: none; }
2278
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-heading { margin-left: 24px; padding-top: 4px; }
2279
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-heading > span { font-size: 8px; }
2280
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-heading h2 { font-size: 20px; margin: 5px 0; }
2281
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-heading p { font-size: 9px; }
2282
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-index { font-size: 30px; }
2283
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-index > span { font-size: 18px; }
2284
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-surface { top: 68px; right: var(--edge); }
2285
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-surface button { min-height: 44px; padding: 8px 16px; font-size: 12px; }
2286
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-footer { bottom: calc(var(--bottom-edge) + 18px); left: var(--edge); right: var(--edge); gap: 12px; }
2287
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-help { width: auto; max-width: 160px; font-size: 10px; gap: 5px; }
2288
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-reset { width: auto; min-height: 44px; font-size: 12px; }
2289
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-reset span { margin-left: 8px; }
2290
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-actions button { min-width: 100px; min-height: 44px; padding: 10px 12px; font-size: 12px; }
2291
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-actions button span { margin-right: 4px; }
2292
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-state { bottom: var(--bottom-edge); font-size: 9px; }
2293
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-parts { top: 130px; right: var(--edge); width: 110px; }
2294
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-parts > div { font-size: 8px; margin-bottom: 10px; }
2295
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-parts p { margin: 0 0 6px; padding: 0 0 6px 20px; }
2296
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-parts strong { font-size: 11px; }
2297
+ .rhine-workbench :is([data-layout="compact"], [data-layout="portrait"]) .viewer-parts small { display: none; }
2298
+ .rhine-workbench [data-layout="portrait"] .viewer-heading { position: absolute; top: 48px; left: 0; margin: 0; }
2299
+ .rhine-workbench [data-layout="portrait"] .viewer-surface { top: var(--top-edge); right: var(--edge); }
2300
+ .rhine-workbench [data-layout="portrait"] .viewer-index { display: none; }
2301
+ .rhine-workbench [data-layout="portrait"] .viewer-canvas { top: 125px; bottom: 190px; }
2302
+ .rhine-workbench [data-layout="portrait"] .viewer-parts { top: auto; bottom: 102px; left: var(--edge); width: calc(100% - 2 * var(--edge)); display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
2303
+ .rhine-workbench [data-layout="portrait"] .viewer-parts > div { display: none; }
2304
+ .rhine-workbench [data-layout="portrait"] .viewer-parts p { margin: 0; }
2305
+ .rhine-workbench [data-layout="portrait"] .viewer-footer { bottom: calc(var(--bottom-edge) + 24px); flex-wrap: wrap; }
2306
+ .rhine-workbench [data-layout="portrait"] .viewer-help { order: 3; max-width: none; width: 100%; justify-content: center; }
2307
+
2308
+ @media (max-width: 370px) {
2309
+ .rhine-workbench .rhine-original-stage[data-layout="portrait"] { --edge: max(14px, env(safe-area-inset-left), env(safe-area-inset-right)); }
2310
+ .rhine-workbench [data-layout="portrait"] .system-nav { gap: 0; }
2311
+ .rhine-workbench [data-layout="portrait"] .column-navigation { gap: 2px; }
2312
+ .rhine-workbench [data-layout="portrait"] .file-ticks button { width: 24px; }
2313
+ .rhine-workbench [data-layout="portrait"] .terminal-modal { padding: 12px; }
2314
+ .rhine-workbench [data-layout="portrait"] :is(.result-header, .result-row) { grid-template-columns: minmax(0, 1fr) 68px; }
2315
+ .rhine-workbench [data-layout="portrait"] .viewer-actions button { min-width: 90px; padding-inline: 8px; }
2316
+ }
2317
+ @media (max-height: 440px) and (orientation: landscape) {
2318
+ .rhine-workbench [data-layout="compact"] .brand { transform: scale(.36) !important; }
2319
+ .rhine-workbench [data-layout="compact"] .archive-callout { top: 25%; }
2320
+ .rhine-workbench [data-layout="compact"] .eyebrow { display: none; }
2321
+ .rhine-workbench [data-layout="compact"] .back-button { top: 60px; }
2322
+ .rhine-workbench [data-layout="compact"] .detail-content { top: 70px; bottom: 40px; }
2323
+ .rhine-workbench [data-layout="compact"] .archive-navigation { left: 17%; bottom: 44px; }
2324
+ .rhine-workbench [data-layout="compact"] .column-navigation, .rhine-workbench [data-layout="compact"] .archive-counter { bottom: 44px; }
2325
+ .rhine-workbench [data-layout="compact"] .viewer-heading > span, .rhine-workbench [data-layout="compact"] .viewer-parts { display: none; }
2326
+ }
2327
+ @media (max-width: 740px) and (max-height: 440px) and (orientation: landscape) {
2328
+ .rhine-workbench [data-layout="compact"] .archive-navigation { left: var(--edge); bottom: 112px; }
2329
+ .rhine-workbench [data-layout="compact"] .file-title { font-size: 18px; }
2330
+ .rhine-workbench [data-layout="compact"] .file-open { margin-left: 0; }
2331
+ .rhine-workbench [data-layout="compact"] .system-nav { gap: 8px; }
2332
+ .rhine-workbench [data-layout="compact"] .system-nav [data-action="search"] { font-size: 0; gap: 0; }
2333
+ .rhine-workbench [data-layout="compact"] .viewer-help { max-width: 110px; }
2334
+ }