@womp/kookie-ui 0.7.0 → 0.8.1

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 (472) hide show
  1. package/README.md +1 -1
  2. package/components.css +539 -494
  3. package/dist/cjs/components/_internal/base-menu.utils.js +1 -1
  4. package/dist/cjs/components/_internal/base-menu.utils.js.map +3 -3
  5. package/dist/cjs/components/_internal/menu-context.js +1 -1
  6. package/dist/cjs/components/_internal/menu-context.js.map +3 -3
  7. package/dist/cjs/components/_internal/shell-bottom.d.ts +6 -7
  8. package/dist/cjs/components/_internal/shell-bottom.d.ts.map +1 -1
  9. package/dist/cjs/components/_internal/shell-bottom.js +1 -1
  10. package/dist/cjs/components/_internal/shell-bottom.js.map +4 -4
  11. package/dist/cjs/components/_internal/shell-handles.d.ts +9 -0
  12. package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
  13. package/dist/cjs/components/_internal/shell-handles.js +1 -1
  14. package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
  15. package/dist/cjs/components/_internal/shell-inspector.d.ts +4 -6
  16. package/dist/cjs/components/_internal/shell-inspector.d.ts.map +1 -1
  17. package/dist/cjs/components/_internal/shell-inspector.js +1 -1
  18. package/dist/cjs/components/_internal/shell-inspector.js.map +4 -4
  19. package/dist/cjs/components/_internal/shell-pane.d.ts +70 -0
  20. package/dist/cjs/components/_internal/shell-pane.d.ts.map +1 -0
  21. package/dist/cjs/components/_internal/shell-pane.js +2 -0
  22. package/dist/cjs/components/_internal/shell-pane.js.map +7 -0
  23. package/dist/cjs/components/_internal/shell-resizable.d.ts +48 -0
  24. package/dist/cjs/components/_internal/shell-resizable.d.ts.map +1 -0
  25. package/dist/cjs/components/_internal/shell-resizable.js +2 -0
  26. package/dist/cjs/components/_internal/shell-resizable.js.map +7 -0
  27. package/dist/cjs/components/_internal/shell-resize.d.ts +11 -3
  28. package/dist/cjs/components/_internal/shell-resize.d.ts.map +1 -1
  29. package/dist/cjs/components/_internal/shell-resize.js +1 -1
  30. package/dist/cjs/components/_internal/shell-resize.js.map +2 -2
  31. package/dist/cjs/components/_internal/shell-rest.d.ts +27 -0
  32. package/dist/cjs/components/_internal/shell-rest.d.ts.map +1 -0
  33. package/dist/cjs/components/_internal/shell-rest.js +2 -0
  34. package/dist/cjs/components/_internal/shell-rest.js.map +7 -0
  35. package/dist/cjs/components/_internal/shell-sidebar.d.ts +7 -12
  36. package/dist/cjs/components/_internal/shell-sidebar.d.ts.map +1 -1
  37. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  38. package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
  39. package/dist/cjs/components/_internal/shell-store.d.ts +99 -0
  40. package/dist/cjs/components/_internal/shell-store.d.ts.map +1 -0
  41. package/dist/cjs/components/_internal/shell-store.js +2 -0
  42. package/dist/cjs/components/_internal/shell-store.js.map +7 -0
  43. package/dist/cjs/components/context-menu.js +1 -1
  44. package/dist/cjs/components/context-menu.js.map +3 -3
  45. package/dist/cjs/components/dropdown-menu.js +1 -1
  46. package/dist/cjs/components/dropdown-menu.js.map +3 -3
  47. package/dist/cjs/components/index.js +5 -5
  48. package/dist/cjs/components/index.js.map +4 -4
  49. package/dist/cjs/components/schemas/index.js +1 -1
  50. package/dist/cjs/components/schemas/index.js.map +3 -3
  51. package/dist/cjs/components/schemas/shell.schema.d.ts +277 -229
  52. package/dist/cjs/components/schemas/shell.schema.d.ts.map +1 -1
  53. package/dist/cjs/components/schemas/shell.schema.js +1 -1
  54. package/dist/cjs/components/schemas/shell.schema.js.map +3 -3
  55. package/dist/cjs/components/shell.context.d.ts +25 -114
  56. package/dist/cjs/components/shell.context.d.ts.map +1 -1
  57. package/dist/cjs/components/shell.context.js +1 -1
  58. package/dist/cjs/components/shell.context.js.map +4 -4
  59. package/dist/cjs/components/shell.d.ts +42 -21
  60. package/dist/cjs/components/shell.d.ts.map +1 -1
  61. package/dist/cjs/components/shell.hooks.d.ts +7 -23
  62. package/dist/cjs/components/shell.hooks.d.ts.map +1 -1
  63. package/dist/cjs/components/shell.hooks.js +1 -1
  64. package/dist/cjs/components/shell.hooks.js.map +4 -4
  65. package/dist/cjs/components/shell.js +1 -1
  66. package/dist/cjs/components/shell.js.map +4 -4
  67. package/dist/cjs/components/shell.types.d.ts +19 -2
  68. package/dist/cjs/components/shell.types.d.ts.map +1 -1
  69. package/dist/cjs/components/shell.types.js +1 -1
  70. package/dist/cjs/components/shell.types.js.map +3 -3
  71. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  72. package/dist/cjs/components/sidebar.js +1 -1
  73. package/dist/cjs/components/sidebar.js.map +3 -3
  74. package/dist/cjs/hooks/use-breakpoint.d.ts +5 -0
  75. package/dist/cjs/hooks/use-breakpoint.d.ts.map +1 -1
  76. package/dist/cjs/hooks/use-breakpoint.js +1 -1
  77. package/dist/cjs/hooks/use-breakpoint.js.map +3 -3
  78. package/dist/cjs/index.js +5 -5
  79. package/dist/cjs/index.js.map +4 -4
  80. package/dist/esm/{chunk-HJU4I34X.js → chunk-25X75TI7.js} +2 -2
  81. package/dist/esm/{chunk-4XKK32M4.js → chunk-26I257HE.js} +2 -2
  82. package/dist/esm/chunk-2EQWBT2S.js +2 -0
  83. package/dist/esm/chunk-2EQWBT2S.js.map +7 -0
  84. package/dist/esm/{chunk-GLERJXVS.js → chunk-2Q7BJ7YG.js} +2 -2
  85. package/dist/esm/chunk-3J6AUDID.js +2 -0
  86. package/dist/esm/chunk-3J6AUDID.js.map +7 -0
  87. package/dist/esm/{chunk-7EWFBWBS.js → chunk-3PTSRBVY.js} +2 -2
  88. package/dist/esm/chunk-3XSB7YIM.js +2 -0
  89. package/dist/esm/{chunk-FMBECDL4.js.map → chunk-3XSB7YIM.js.map} +3 -3
  90. package/dist/esm/{chunk-O2U6RJTB.js → chunk-44JZYS7A.js} +2 -2
  91. package/dist/esm/{chunk-CTA5ODAO.js → chunk-4WU2WKUJ.js} +2 -2
  92. package/dist/esm/{chunk-KZWNGWIM.js → chunk-5M7STAH3.js} +2 -2
  93. package/dist/esm/{chunk-5WRCK4R7.js → chunk-5TAHT6VC.js} +2 -2
  94. package/dist/esm/{chunk-RNTCHVFI.js → chunk-6J6YX2VX.js} +2 -2
  95. package/dist/esm/{chunk-AGSSWWFI.js → chunk-7FKKGUHK.js} +2 -2
  96. package/dist/esm/{chunk-WHFJ4JUN.js → chunk-7NYODT3Z.js} +2 -2
  97. package/dist/esm/{chunk-NVDXXGVW.js → chunk-7PMMYHZV.js} +2 -2
  98. package/dist/esm/chunk-A2XVR7GL.js +2 -0
  99. package/dist/esm/chunk-A2XVR7GL.js.map +7 -0
  100. package/dist/esm/chunk-ADXZNG4F.js +2 -0
  101. package/dist/esm/chunk-ADXZNG4F.js.map +7 -0
  102. package/dist/esm/chunk-AGNIFHOE.js +2 -0
  103. package/dist/esm/chunk-AGNIFHOE.js.map +7 -0
  104. package/dist/esm/{chunk-KJUDZCYK.js → chunk-AIHQ3MVK.js} +2 -2
  105. package/dist/esm/{chunk-UBOOUDS4.js → chunk-AO32NT75.js} +2 -2
  106. package/dist/esm/chunk-BZZXXZ3O.js +2 -0
  107. package/dist/esm/chunk-BZZXXZ3O.js.map +7 -0
  108. package/dist/esm/{chunk-JDGJSNWT.js → chunk-C5RVO3C3.js} +2 -2
  109. package/dist/esm/{chunk-IHK3H2OM.js → chunk-CBNTPHYK.js} +2 -2
  110. package/dist/esm/{chunk-BBJUB52V.js → chunk-CRBOJ7N7.js} +2 -2
  111. package/dist/esm/{chunk-VHECAEUP.js → chunk-DCIQHXAR.js} +2 -2
  112. package/dist/esm/{chunk-43A5GUSI.js → chunk-EHBAK3LQ.js} +2 -2
  113. package/dist/esm/{chunk-K3UAS7RW.js → chunk-F3AXE27Q.js} +2 -2
  114. package/dist/esm/{chunk-KFR3CK24.js → chunk-FB3PD4Z3.js} +2 -2
  115. package/dist/esm/{chunk-MCPRXVKZ.js → chunk-FEAOFF77.js} +2 -2
  116. package/dist/esm/{chunk-VZSQATP6.js → chunk-G4YKBAZT.js} +2 -2
  117. package/dist/esm/{chunk-ECXGQQJB.js → chunk-GDAKJS64.js} +2 -2
  118. package/dist/esm/{chunk-VR7ZAFYN.js → chunk-GGSJXOKR.js} +2 -2
  119. package/dist/esm/chunk-GM7KMQDI.js +2 -0
  120. package/dist/esm/chunk-GMHA5CFH.js +2 -0
  121. package/dist/esm/chunk-GMHA5CFH.js.map +7 -0
  122. package/dist/esm/{chunk-CESYMTJQ.js → chunk-H4GR4262.js} +2 -2
  123. package/dist/esm/{chunk-WXQIIKWV.js → chunk-HBIF43PT.js} +2 -2
  124. package/dist/esm/chunk-HCNO7PX6.js +2 -0
  125. package/dist/esm/chunk-HCNO7PX6.js.map +7 -0
  126. package/dist/esm/{chunk-2264DHUW.js → chunk-HMSSFU6I.js} +2 -2
  127. package/dist/esm/chunk-HWQ3NTJP.js +2 -0
  128. package/dist/esm/chunk-HWQ3NTJP.js.map +7 -0
  129. package/dist/esm/{chunk-S5C5YRBS.js → chunk-IDUVJJYG.js} +2 -2
  130. package/dist/esm/{chunk-CIYF56YS.js → chunk-IK3MQHA5.js} +2 -2
  131. package/dist/esm/{chunk-CKMMUHKE.js → chunk-JDEBKA56.js} +2 -2
  132. package/dist/esm/{chunk-E67CIG6A.js → chunk-JDWCQ2XP.js} +2 -2
  133. package/dist/esm/{chunk-L3BWTV7I.js → chunk-JQSZF3E2.js} +2 -2
  134. package/dist/esm/{chunk-MEO7MJMQ.js → chunk-JQW4XYBS.js} +2 -2
  135. package/dist/esm/{chunk-KMPE7TJ6.js → chunk-JRFZ535T.js} +2 -2
  136. package/dist/esm/{chunk-CDG5WH4U.js → chunk-KEEPKI2X.js} +2 -2
  137. package/dist/esm/{chunk-GAV3NHYL.js → chunk-KV4SZP3F.js} +2 -2
  138. package/dist/esm/{chunk-FG7XM7KJ.js → chunk-LJCUPAOI.js} +2 -2
  139. package/dist/esm/{chunk-N4GTDLRD.js → chunk-MBCQA7UZ.js} +2 -2
  140. package/dist/esm/chunk-MM5IHQFM.js +2 -0
  141. package/dist/esm/{chunk-Y5RCH23Z.js → chunk-NQXRWBQM.js} +2 -2
  142. package/dist/esm/{chunk-CSKZZOI2.js → chunk-NTNMJX5M.js} +2 -2
  143. package/dist/esm/{chunk-V27ZAN3E.js → chunk-NV3P2CKH.js} +2 -2
  144. package/dist/esm/{chunk-4ME6O27S.js → chunk-O4CSXNST.js} +2 -2
  145. package/dist/esm/chunk-ODCVOXEV.js +2 -0
  146. package/dist/esm/{chunk-W2FOBR5Q.js → chunk-OEEF6KJG.js} +2 -2
  147. package/dist/esm/{chunk-ABSKRHVM.js → chunk-OJSOX3AX.js} +2 -2
  148. package/dist/esm/{chunk-JGLAE5G7.js → chunk-OQU2SKLN.js} +2 -2
  149. package/dist/esm/{chunk-PZ7OYATT.js → chunk-OTKQN2KY.js} +2 -2
  150. package/dist/esm/{chunk-QWVU2TW4.js → chunk-P27KV2LS.js} +2 -2
  151. package/dist/esm/{chunk-JUY7CBSL.js → chunk-PBFSBHBS.js} +2 -2
  152. package/dist/esm/{chunk-DSJY5RI3.js → chunk-PDUHBDFC.js} +2 -2
  153. package/dist/esm/{chunk-MTOLKA6S.js → chunk-POG3YABW.js} +2 -2
  154. package/dist/esm/chunk-PYHEBG5I.js +2 -0
  155. package/dist/esm/chunk-PYHEBG5I.js.map +7 -0
  156. package/dist/esm/{chunk-GO7OHBHW.js → chunk-PYXMGEO7.js} +2 -2
  157. package/dist/esm/{chunk-VNH7BJOA.js → chunk-QEGEUD4D.js} +2 -2
  158. package/dist/esm/chunk-QEL55MLF.js +2 -0
  159. package/dist/esm/{chunk-MS5J4MF6.js → chunk-QJVAS7AK.js} +2 -2
  160. package/dist/esm/chunk-ROSWI2CL.js +2 -0
  161. package/dist/esm/chunk-ROSWI2CL.js.map +7 -0
  162. package/dist/esm/{chunk-KCWESYMR.js → chunk-RY67WG3O.js} +2 -2
  163. package/dist/esm/{chunk-IFM4EMZB.js → chunk-TLGXIWAS.js} +2 -2
  164. package/dist/esm/{chunk-6FLLFCBU.js → chunk-UBSLEGQZ.js} +2 -2
  165. package/dist/esm/{chunk-VBI3AWPT.js → chunk-UNWPH3SO.js} +2 -2
  166. package/dist/esm/chunk-V5ZSDDVZ.js +2 -0
  167. package/dist/esm/chunk-V5ZSDDVZ.js.map +7 -0
  168. package/dist/esm/{chunk-X7V3V3W4.js → chunk-VTIL55SR.js} +2 -2
  169. package/dist/esm/chunk-VUNNS3ZU.js +2 -0
  170. package/dist/esm/chunk-VUNNS3ZU.js.map +7 -0
  171. package/dist/esm/{chunk-ALWNS44Q.js → chunk-W2LD2YE6.js} +2 -2
  172. package/dist/esm/{chunk-2I7QRVJ5.js → chunk-WGWUEU4K.js} +2 -2
  173. package/dist/esm/{chunk-EPTYNVCU.js → chunk-WIDJYVZF.js} +2 -2
  174. package/dist/esm/{chunk-OLAWVEAI.js → chunk-WJBOOAIO.js} +2 -2
  175. package/dist/esm/{chunk-7FC7HF76.js → chunk-WQCB7KSH.js} +2 -2
  176. package/dist/esm/{chunk-YBSRX63K.js → chunk-WZFVTC7P.js} +2 -2
  177. package/dist/esm/chunk-XDDKT4NF.js +2 -0
  178. package/dist/esm/{chunk-KFA53SVQ.js → chunk-YA5DF67M.js} +2 -2
  179. package/dist/esm/chunk-YA5DF67M.js.map +7 -0
  180. package/dist/esm/chunk-YAQBIO2B.js +2 -0
  181. package/dist/esm/chunk-YAQBIO2B.js.map +7 -0
  182. package/dist/esm/{chunk-OFUNVHZ5.js → chunk-YG66IRW4.js} +2 -2
  183. package/dist/esm/{chunk-WGYUWEQV.js → chunk-YVSM2LGS.js} +2 -2
  184. package/dist/esm/{chunk-4NTGF22C.js → chunk-Z7AZNMNX.js} +2 -2
  185. package/dist/esm/chunk-ZJ33QP5N.js +2 -0
  186. package/dist/esm/{chunk-OGXZHAQL.js → chunk-ZW26J2SA.js} +2 -2
  187. package/dist/esm/components/_internal/base-button.js +1 -1
  188. package/dist/esm/components/_internal/base-menu.utils.js +1 -1
  189. package/dist/esm/components/_internal/menu-context.js +1 -1
  190. package/dist/esm/components/_internal/shell-bottom.d.ts +6 -7
  191. package/dist/esm/components/_internal/shell-bottom.d.ts.map +1 -1
  192. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  193. package/dist/esm/components/_internal/shell-handles.d.ts +9 -0
  194. package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
  195. package/dist/esm/components/_internal/shell-handles.js +1 -1
  196. package/dist/esm/components/_internal/shell-inspector.d.ts +4 -6
  197. package/dist/esm/components/_internal/shell-inspector.d.ts.map +1 -1
  198. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  199. package/dist/esm/components/_internal/shell-pane.d.ts +70 -0
  200. package/dist/esm/components/_internal/shell-pane.d.ts.map +1 -0
  201. package/dist/esm/components/_internal/shell-pane.js +2 -0
  202. package/dist/esm/components/_internal/shell-resizable.d.ts +48 -0
  203. package/dist/esm/components/_internal/shell-resizable.d.ts.map +1 -0
  204. package/dist/esm/components/_internal/shell-resizable.js +2 -0
  205. package/dist/esm/components/_internal/shell-resizable.js.map +7 -0
  206. package/dist/esm/components/_internal/shell-resize.d.ts +11 -3
  207. package/dist/esm/components/_internal/shell-resize.d.ts.map +1 -1
  208. package/dist/esm/components/_internal/shell-resize.js +1 -1
  209. package/dist/esm/components/_internal/shell-rest.d.ts +27 -0
  210. package/dist/esm/components/_internal/shell-rest.d.ts.map +1 -0
  211. package/dist/esm/components/_internal/shell-rest.js +2 -0
  212. package/dist/esm/components/_internal/shell-rest.js.map +7 -0
  213. package/dist/esm/components/_internal/shell-sidebar.d.ts +7 -12
  214. package/dist/esm/components/_internal/shell-sidebar.d.ts.map +1 -1
  215. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  216. package/dist/esm/components/_internal/shell-store.d.ts +99 -0
  217. package/dist/esm/components/_internal/shell-store.d.ts.map +1 -0
  218. package/dist/esm/components/_internal/shell-store.js +2 -0
  219. package/dist/esm/components/_internal/shell-store.js.map +7 -0
  220. package/dist/esm/components/accordion.js +1 -1
  221. package/dist/esm/components/alert-dialog.js +1 -1
  222. package/dist/esm/components/avatar.js +1 -1
  223. package/dist/esm/components/badge.js +1 -1
  224. package/dist/esm/components/blockquote.js +1 -1
  225. package/dist/esm/components/blockquote.props.js +1 -1
  226. package/dist/esm/components/box.js +1 -1
  227. package/dist/esm/components/button.js +1 -1
  228. package/dist/esm/components/callout.js +1 -1
  229. package/dist/esm/components/card.js +1 -1
  230. package/dist/esm/components/chatbar.js +1 -1
  231. package/dist/esm/components/checkbox-cards.js +1 -1
  232. package/dist/esm/components/checkbox-group.js +1 -1
  233. package/dist/esm/components/checkbox.js +1 -1
  234. package/dist/esm/components/code.js +1 -1
  235. package/dist/esm/components/code.props.js +1 -1
  236. package/dist/esm/components/combobox.js +1 -1
  237. package/dist/esm/components/container.js +1 -1
  238. package/dist/esm/components/context-menu.js +1 -1
  239. package/dist/esm/components/data-list.js +1 -1
  240. package/dist/esm/components/dialog.js +1 -1
  241. package/dist/esm/components/dropdown-menu.js +1 -1
  242. package/dist/esm/components/em.js +1 -1
  243. package/dist/esm/components/em.props.js +1 -1
  244. package/dist/esm/components/flex.js +1 -1
  245. package/dist/esm/components/grid.js +1 -1
  246. package/dist/esm/components/heading.js +1 -1
  247. package/dist/esm/components/heading.props.js +1 -1
  248. package/dist/esm/components/hover-card.js +1 -1
  249. package/dist/esm/components/icon-button.js +1 -1
  250. package/dist/esm/components/image.js +1 -1
  251. package/dist/esm/components/index.js +1 -1
  252. package/dist/esm/components/inset.js +1 -1
  253. package/dist/esm/components/kbd.js +1 -1
  254. package/dist/esm/components/link.js +1 -1
  255. package/dist/esm/components/link.props.js +1 -1
  256. package/dist/esm/components/navbar.js +1 -1
  257. package/dist/esm/components/popover.js +1 -1
  258. package/dist/esm/components/progress.js +1 -1
  259. package/dist/esm/components/quote.js +1 -1
  260. package/dist/esm/components/quote.props.js +1 -1
  261. package/dist/esm/components/radio-cards.js +1 -1
  262. package/dist/esm/components/radio-group.js +1 -1
  263. package/dist/esm/components/radio.js +1 -1
  264. package/dist/esm/components/schemas/index.js +1 -1
  265. package/dist/esm/components/schemas/shell.schema.d.ts +277 -229
  266. package/dist/esm/components/schemas/shell.schema.d.ts.map +1 -1
  267. package/dist/esm/components/schemas/shell.schema.js +1 -1
  268. package/dist/esm/components/scroll-area.js +1 -1
  269. package/dist/esm/components/section.js +1 -1
  270. package/dist/esm/components/segmented-control.js +1 -1
  271. package/dist/esm/components/select.js +1 -1
  272. package/dist/esm/components/separator.js +1 -1
  273. package/dist/esm/components/sheet.js +1 -1
  274. package/dist/esm/components/shell.context.d.ts +25 -114
  275. package/dist/esm/components/shell.context.d.ts.map +1 -1
  276. package/dist/esm/components/shell.context.js +1 -1
  277. package/dist/esm/components/shell.d.ts +42 -21
  278. package/dist/esm/components/shell.d.ts.map +1 -1
  279. package/dist/esm/components/shell.hooks.d.ts +7 -23
  280. package/dist/esm/components/shell.hooks.d.ts.map +1 -1
  281. package/dist/esm/components/shell.hooks.js +1 -1
  282. package/dist/esm/components/shell.js +1 -1
  283. package/dist/esm/components/shell.types.d.ts +19 -2
  284. package/dist/esm/components/shell.types.d.ts.map +1 -1
  285. package/dist/esm/components/shell.types.js +1 -1
  286. package/dist/esm/components/sidebar.d.ts.map +1 -1
  287. package/dist/esm/components/sidebar.js +1 -1
  288. package/dist/esm/components/skeleton.js +1 -1
  289. package/dist/esm/components/slider.js +1 -1
  290. package/dist/esm/components/spinner.js +1 -1
  291. package/dist/esm/components/strong.js +1 -1
  292. package/dist/esm/components/strong.props.js +1 -1
  293. package/dist/esm/components/switch.js +1 -1
  294. package/dist/esm/components/tab-nav.js +1 -1
  295. package/dist/esm/components/table.js +1 -1
  296. package/dist/esm/components/tabs.js +1 -1
  297. package/dist/esm/components/text-area.js +1 -1
  298. package/dist/esm/components/text-field.js +1 -1
  299. package/dist/esm/components/text.js +1 -1
  300. package/dist/esm/components/text.props.js +1 -1
  301. package/dist/esm/components/theme-panel.js +1 -1
  302. package/dist/esm/components/toggle-button.js +1 -1
  303. package/dist/esm/components/toggle-icon-button.js +1 -1
  304. package/dist/esm/components/toolbar.js +1 -1
  305. package/dist/esm/components/tooltip.js +1 -1
  306. package/dist/esm/components/user-card.js +1 -1
  307. package/dist/esm/components/virtual-menu.js +1 -1
  308. package/dist/esm/helpers/extract-props.js +1 -1
  309. package/dist/esm/helpers/get-margin-styles.js +1 -1
  310. package/dist/esm/helpers/get-responsive-styles.js +1 -1
  311. package/dist/esm/helpers/index.js +1 -1
  312. package/dist/esm/hooks/index.js +1 -1
  313. package/dist/esm/hooks/use-breakpoint.d.ts +5 -0
  314. package/dist/esm/hooks/use-breakpoint.d.ts.map +1 -1
  315. package/dist/esm/hooks/use-breakpoint.js +1 -1
  316. package/dist/esm/index.js +1 -1
  317. package/dist/esm/props/index.js +1 -1
  318. package/package.json +7 -2
  319. package/schemas/index.json +1655 -0
  320. package/schemas/shell-bottom.d.ts +2 -0
  321. package/schemas/shell-bottom.json +180 -76
  322. package/schemas/shell-content.d.ts +2 -0
  323. package/schemas/shell-content.json +11 -5
  324. package/schemas/shell-handle.d.ts +2 -0
  325. package/schemas/shell-handle.json +7 -5
  326. package/schemas/shell-header.d.ts +2 -0
  327. package/schemas/shell-header.json +9 -10
  328. package/schemas/shell-inspector.d.ts +2 -0
  329. package/schemas/shell-inspector.json +183 -79
  330. package/schemas/shell-panel.d.ts +2 -0
  331. package/schemas/shell-panel.json +180 -76
  332. package/schemas/shell-rail.d.ts +2 -0
  333. package/schemas/shell-rail.json +137 -64
  334. package/schemas/shell-root.d.ts +2 -0
  335. package/schemas/shell-root.json +11 -9
  336. package/schemas/shell-sidebar.d.ts +2 -0
  337. package/schemas/shell-sidebar.json +274 -85
  338. package/schemas/shell-trigger.d.ts +2 -0
  339. package/schemas/shell-trigger.json +29 -17
  340. package/src/components/_internal/base-sidebar-menu.css +2 -1
  341. package/src/components/_internal/shell-bottom.tsx +92 -361
  342. package/src/components/_internal/shell-handles.tsx +193 -108
  343. package/src/components/_internal/shell-inspector.tsx +93 -360
  344. package/src/components/_internal/shell-pane.tsx +283 -0
  345. package/src/components/_internal/shell-resizable.tsx +263 -0
  346. package/src/components/_internal/shell-resize.tsx +11 -3
  347. package/src/components/_internal/shell-rest.ts +45 -0
  348. package/src/components/_internal/shell-sidebar.tsx +130 -441
  349. package/src/components/_internal/shell-store.tsx +204 -0
  350. package/src/components/schemas/shell.schema.ts +162 -153
  351. package/src/components/shell.context.tsx +112 -124
  352. package/src/components/shell.css +637 -496
  353. package/src/components/shell.hooks.ts +12 -170
  354. package/src/components/shell.tsx +566 -1497
  355. package/src/components/shell.types.ts +22 -2
  356. package/src/components/sidebar.tsx +17 -28
  357. package/src/hooks/use-breakpoint.ts +9 -0
  358. package/styles.css +539 -494
  359. package/dist/cjs/components/_internal/shell-prop-helpers.d.ts +0 -7
  360. package/dist/cjs/components/_internal/shell-prop-helpers.d.ts.map +0 -1
  361. package/dist/cjs/components/_internal/shell-prop-helpers.js +0 -2
  362. package/dist/cjs/components/_internal/shell-prop-helpers.js.map +0 -7
  363. package/dist/esm/chunk-2SZZ75RJ.js +0 -2
  364. package/dist/esm/chunk-2SZZ75RJ.js.map +0 -7
  365. package/dist/esm/chunk-4JQZUQY7.js +0 -2
  366. package/dist/esm/chunk-5LXFJMFB.js +0 -2
  367. package/dist/esm/chunk-5LXFJMFB.js.map +0 -7
  368. package/dist/esm/chunk-CECQNGUL.js +0 -2
  369. package/dist/esm/chunk-CECQNGUL.js.map +0 -7
  370. package/dist/esm/chunk-CEIK5U6C.js +0 -2
  371. package/dist/esm/chunk-CEIK5U6C.js.map +0 -7
  372. package/dist/esm/chunk-CJ27XP5Z.js +0 -2
  373. package/dist/esm/chunk-CJ27XP5Z.js.map +0 -7
  374. package/dist/esm/chunk-EE2IH2GL.js +0 -2
  375. package/dist/esm/chunk-EE2IH2GL.js.map +0 -7
  376. package/dist/esm/chunk-FMBECDL4.js +0 -2
  377. package/dist/esm/chunk-HSAG7C53.js +0 -2
  378. package/dist/esm/chunk-JJKQ7CGI.js +0 -2
  379. package/dist/esm/chunk-KFA53SVQ.js.map +0 -7
  380. package/dist/esm/chunk-KRDP5SQ7.js +0 -2
  381. package/dist/esm/chunk-KRDP5SQ7.js.map +0 -7
  382. package/dist/esm/chunk-M6DJRFJZ.js +0 -2
  383. package/dist/esm/chunk-M6DJRFJZ.js.map +0 -7
  384. package/dist/esm/chunk-MCQCG6AS.js +0 -2
  385. package/dist/esm/chunk-NIQT45PJ.js +0 -2
  386. package/dist/esm/chunk-NNO7M466.js +0 -2
  387. package/dist/esm/chunk-NNO7M466.js.map +0 -7
  388. package/dist/esm/chunk-SNHEJU2S.js +0 -2
  389. package/dist/esm/chunk-SNHEJU2S.js.map +0 -7
  390. package/dist/esm/chunk-TLWTUKKL.js +0 -2
  391. package/dist/esm/chunk-TLWTUKKL.js.map +0 -7
  392. package/dist/esm/chunk-XI5YXUCK.js +0 -2
  393. package/dist/esm/components/_internal/shell-prop-helpers.d.ts +0 -7
  394. package/dist/esm/components/_internal/shell-prop-helpers.d.ts.map +0 -1
  395. package/dist/esm/components/_internal/shell-prop-helpers.js +0 -2
  396. package/src/components/_internal/shell-prop-helpers.ts +0 -54
  397. /package/dist/esm/{chunk-HJU4I34X.js.map → chunk-25X75TI7.js.map} +0 -0
  398. /package/dist/esm/{chunk-4XKK32M4.js.map → chunk-26I257HE.js.map} +0 -0
  399. /package/dist/esm/{chunk-GLERJXVS.js.map → chunk-2Q7BJ7YG.js.map} +0 -0
  400. /package/dist/esm/{chunk-7EWFBWBS.js.map → chunk-3PTSRBVY.js.map} +0 -0
  401. /package/dist/esm/{chunk-O2U6RJTB.js.map → chunk-44JZYS7A.js.map} +0 -0
  402. /package/dist/esm/{chunk-CTA5ODAO.js.map → chunk-4WU2WKUJ.js.map} +0 -0
  403. /package/dist/esm/{chunk-KZWNGWIM.js.map → chunk-5M7STAH3.js.map} +0 -0
  404. /package/dist/esm/{chunk-5WRCK4R7.js.map → chunk-5TAHT6VC.js.map} +0 -0
  405. /package/dist/esm/{chunk-RNTCHVFI.js.map → chunk-6J6YX2VX.js.map} +0 -0
  406. /package/dist/esm/{chunk-AGSSWWFI.js.map → chunk-7FKKGUHK.js.map} +0 -0
  407. /package/dist/esm/{chunk-WHFJ4JUN.js.map → chunk-7NYODT3Z.js.map} +0 -0
  408. /package/dist/esm/{chunk-NVDXXGVW.js.map → chunk-7PMMYHZV.js.map} +0 -0
  409. /package/dist/esm/{chunk-KJUDZCYK.js.map → chunk-AIHQ3MVK.js.map} +0 -0
  410. /package/dist/esm/{chunk-UBOOUDS4.js.map → chunk-AO32NT75.js.map} +0 -0
  411. /package/dist/esm/{chunk-JDGJSNWT.js.map → chunk-C5RVO3C3.js.map} +0 -0
  412. /package/dist/esm/{chunk-IHK3H2OM.js.map → chunk-CBNTPHYK.js.map} +0 -0
  413. /package/dist/esm/{chunk-BBJUB52V.js.map → chunk-CRBOJ7N7.js.map} +0 -0
  414. /package/dist/esm/{chunk-VHECAEUP.js.map → chunk-DCIQHXAR.js.map} +0 -0
  415. /package/dist/esm/{chunk-43A5GUSI.js.map → chunk-EHBAK3LQ.js.map} +0 -0
  416. /package/dist/esm/{chunk-K3UAS7RW.js.map → chunk-F3AXE27Q.js.map} +0 -0
  417. /package/dist/esm/{chunk-KFR3CK24.js.map → chunk-FB3PD4Z3.js.map} +0 -0
  418. /package/dist/esm/{chunk-MCPRXVKZ.js.map → chunk-FEAOFF77.js.map} +0 -0
  419. /package/dist/esm/{chunk-VZSQATP6.js.map → chunk-G4YKBAZT.js.map} +0 -0
  420. /package/dist/esm/{chunk-ECXGQQJB.js.map → chunk-GDAKJS64.js.map} +0 -0
  421. /package/dist/esm/{chunk-VR7ZAFYN.js.map → chunk-GGSJXOKR.js.map} +0 -0
  422. /package/dist/esm/{chunk-4JQZUQY7.js.map → chunk-GM7KMQDI.js.map} +0 -0
  423. /package/dist/esm/{chunk-CESYMTJQ.js.map → chunk-H4GR4262.js.map} +0 -0
  424. /package/dist/esm/{chunk-WXQIIKWV.js.map → chunk-HBIF43PT.js.map} +0 -0
  425. /package/dist/esm/{chunk-2264DHUW.js.map → chunk-HMSSFU6I.js.map} +0 -0
  426. /package/dist/esm/{chunk-S5C5YRBS.js.map → chunk-IDUVJJYG.js.map} +0 -0
  427. /package/dist/esm/{chunk-CIYF56YS.js.map → chunk-IK3MQHA5.js.map} +0 -0
  428. /package/dist/esm/{chunk-CKMMUHKE.js.map → chunk-JDEBKA56.js.map} +0 -0
  429. /package/dist/esm/{chunk-E67CIG6A.js.map → chunk-JDWCQ2XP.js.map} +0 -0
  430. /package/dist/esm/{chunk-L3BWTV7I.js.map → chunk-JQSZF3E2.js.map} +0 -0
  431. /package/dist/esm/{chunk-MEO7MJMQ.js.map → chunk-JQW4XYBS.js.map} +0 -0
  432. /package/dist/esm/{chunk-KMPE7TJ6.js.map → chunk-JRFZ535T.js.map} +0 -0
  433. /package/dist/esm/{chunk-CDG5WH4U.js.map → chunk-KEEPKI2X.js.map} +0 -0
  434. /package/dist/esm/{chunk-GAV3NHYL.js.map → chunk-KV4SZP3F.js.map} +0 -0
  435. /package/dist/esm/{chunk-FG7XM7KJ.js.map → chunk-LJCUPAOI.js.map} +0 -0
  436. /package/dist/esm/{chunk-N4GTDLRD.js.map → chunk-MBCQA7UZ.js.map} +0 -0
  437. /package/dist/esm/{chunk-JJKQ7CGI.js.map → chunk-MM5IHQFM.js.map} +0 -0
  438. /package/dist/esm/{chunk-Y5RCH23Z.js.map → chunk-NQXRWBQM.js.map} +0 -0
  439. /package/dist/esm/{chunk-CSKZZOI2.js.map → chunk-NTNMJX5M.js.map} +0 -0
  440. /package/dist/esm/{chunk-V27ZAN3E.js.map → chunk-NV3P2CKH.js.map} +0 -0
  441. /package/dist/esm/{chunk-4ME6O27S.js.map → chunk-O4CSXNST.js.map} +0 -0
  442. /package/dist/esm/{chunk-HSAG7C53.js.map → chunk-ODCVOXEV.js.map} +0 -0
  443. /package/dist/esm/{chunk-W2FOBR5Q.js.map → chunk-OEEF6KJG.js.map} +0 -0
  444. /package/dist/esm/{chunk-ABSKRHVM.js.map → chunk-OJSOX3AX.js.map} +0 -0
  445. /package/dist/esm/{chunk-JGLAE5G7.js.map → chunk-OQU2SKLN.js.map} +0 -0
  446. /package/dist/esm/{chunk-PZ7OYATT.js.map → chunk-OTKQN2KY.js.map} +0 -0
  447. /package/dist/esm/{chunk-QWVU2TW4.js.map → chunk-P27KV2LS.js.map} +0 -0
  448. /package/dist/esm/{chunk-JUY7CBSL.js.map → chunk-PBFSBHBS.js.map} +0 -0
  449. /package/dist/esm/{chunk-DSJY5RI3.js.map → chunk-PDUHBDFC.js.map} +0 -0
  450. /package/dist/esm/{chunk-MTOLKA6S.js.map → chunk-POG3YABW.js.map} +0 -0
  451. /package/dist/esm/{chunk-GO7OHBHW.js.map → chunk-PYXMGEO7.js.map} +0 -0
  452. /package/dist/esm/{chunk-VNH7BJOA.js.map → chunk-QEGEUD4D.js.map} +0 -0
  453. /package/dist/esm/{chunk-MCQCG6AS.js.map → chunk-QEL55MLF.js.map} +0 -0
  454. /package/dist/esm/{chunk-MS5J4MF6.js.map → chunk-QJVAS7AK.js.map} +0 -0
  455. /package/dist/esm/{chunk-KCWESYMR.js.map → chunk-RY67WG3O.js.map} +0 -0
  456. /package/dist/esm/{chunk-IFM4EMZB.js.map → chunk-TLGXIWAS.js.map} +0 -0
  457. /package/dist/esm/{chunk-6FLLFCBU.js.map → chunk-UBSLEGQZ.js.map} +0 -0
  458. /package/dist/esm/{chunk-VBI3AWPT.js.map → chunk-UNWPH3SO.js.map} +0 -0
  459. /package/dist/esm/{chunk-X7V3V3W4.js.map → chunk-VTIL55SR.js.map} +0 -0
  460. /package/dist/esm/{chunk-ALWNS44Q.js.map → chunk-W2LD2YE6.js.map} +0 -0
  461. /package/dist/esm/{chunk-2I7QRVJ5.js.map → chunk-WGWUEU4K.js.map} +0 -0
  462. /package/dist/esm/{chunk-EPTYNVCU.js.map → chunk-WIDJYVZF.js.map} +0 -0
  463. /package/dist/esm/{chunk-OLAWVEAI.js.map → chunk-WJBOOAIO.js.map} +0 -0
  464. /package/dist/esm/{chunk-7FC7HF76.js.map → chunk-WQCB7KSH.js.map} +0 -0
  465. /package/dist/esm/{chunk-YBSRX63K.js.map → chunk-WZFVTC7P.js.map} +0 -0
  466. /package/dist/esm/{chunk-XI5YXUCK.js.map → chunk-XDDKT4NF.js.map} +0 -0
  467. /package/dist/esm/{chunk-OFUNVHZ5.js.map → chunk-YG66IRW4.js.map} +0 -0
  468. /package/dist/esm/{chunk-WGYUWEQV.js.map → chunk-YVSM2LGS.js.map} +0 -0
  469. /package/dist/esm/{chunk-4NTGF22C.js.map → chunk-Z7AZNMNX.js.map} +0 -0
  470. /package/dist/esm/{chunk-NIQT45PJ.js.map → chunk-ZJ33QP5N.js.map} +0 -0
  471. /package/dist/esm/{chunk-OGXZHAQL.js.map → chunk-ZW26J2SA.js.map} +0 -0
  472. /package/dist/esm/components/_internal/{shell-prop-helpers.js.map → shell-pane.js.map} +0 -0
@@ -1,551 +1,740 @@
1
1
  /* stylelint-disable selector-max-specificity */
2
2
  /*
3
- Shell Layout System
4
- - Slot-based layout with 7 slots: Header, Rail, Panel, Sidebar, Content, Inspector, Bottom
5
- - Responsive presentation: fixed vs overlay per breakpoint
6
- - Animation principle: collapse -> fade content, then collapse container; expand -> expand container, then fade content
7
- - Composition rules: Rail+Panel OR Sidebar (exclusive)
3
+ Shell Layout System (0.8.0)
4
+
5
+ The Root is a CSS grid. Each pane claims its own area, so DOM order is free
6
+ and the Root never rearranges its children.
7
+
8
+ Every pane is one element at every width. What a pane shows and how it is
9
+ placed are two separate questions, resolved per breakpoint from data
10
+ attributes the pane writes from its props:
11
+
12
+ - Visibility. `data-state` is `auto` (untouched), `open` or `closed`. An
13
+ untouched pane writes `data-auto` (or `data-auto-<bp>`), what it shows at
14
+ each breakpoint. Closed is `display: none` in every posture.
15
+ - Posture. `data-presentation` (or `data-presentation-<bp>`) is `fixed`,
16
+ `overlay` or `stacked`. Posture is written into private `--rt-shell-*`
17
+ properties, which each pane reads with its own fallbacks for the frame.
18
+
19
+ The breakpoint blocks follow `_BREAKPOINTS` in shell.types.ts, smallest
20
+ first, so the largest matching breakpoint wins. A test holds the two equal.
21
+
22
+ Nothing moves. A pane opens and closes in one step, the way kookie-ui-v2's
23
+ Shell does since motion was removed there (LOG 2026-10-12).
8
24
  */
9
25
 
10
- /* Root container - vertical layout */
26
+ /* ── Frame ─────────────────────────────────────────────────────────────────── */
27
+
11
28
  .rt-ShellRoot {
12
- display: flex;
13
- flex-direction: column;
29
+ /* Read by inset panes. Declared here, so the documented override on the Root works. */
30
+ --shell-inset-gap: var(--space-2);
31
+ /* Written inline by the Root while a Rail shows; stated here so a nested Shell never inherits its parent's. */
32
+ --shell-rail-offset: 0px;
33
+
34
+ display: grid;
35
+ grid-template-areas:
36
+ 'header header header header header'
37
+ 'rail panel sidebar content inspector'
38
+ 'bottom bottom bottom bottom bottom';
39
+ grid-template-columns: auto auto auto minmax(0, 1fr) auto;
40
+ grid-template-rows: auto minmax(0, 1fr) auto;
14
41
  width: 100%;
42
+ height: 100vh;
15
43
  overflow: hidden;
16
- /* Prevent scroll chaining to parent/body on iOS */
44
+ /* Prevent scroll chaining to the page on iOS. */
17
45
  overscroll-behavior: none;
18
- /* Ensure Shell is the scroll boundary */
19
46
  position: relative;
47
+ /* Panes, the scrim and overlays stack inside the frame, not against the page. */
48
+ isolation: isolate;
20
49
  }
21
50
 
22
- /* Default height when no height prop is provided */
23
- .rt-ShellRoot:not([style*='height']) {
24
- height: 100vh;
25
- }
26
-
51
+ /*
52
+ * `height="full"` writes no inline style, so this applies; any other `height`
53
+ * is written inline and wins.
54
+ */
27
55
  @supports (height: 100dvh) {
28
- .rt-ShellRoot:not([style*='height']) {
56
+ .rt-ShellRoot {
29
57
  height: 100dvh;
30
58
  }
31
59
  }
32
60
 
33
- /* Header - fixed at top */
61
+ /* While an overlay is live the page holds still. Counted across Shells by the Root. */
62
+ :root[data-rt-shell-lock] {
63
+ overflow: hidden;
64
+ }
65
+
34
66
  .rt-ShellHeader {
35
- position: sticky;
36
- top: 0;
37
- z-index: 50;
38
- height: var(--shell-header-height, 64px);
39
- min-height: var(--shell-header-height, 64px);
67
+ grid-area: header;
40
68
  display: flex;
41
69
  align-items: center;
42
- flex-shrink: 0;
70
+ height: var(--shell-header-height, 64px);
71
+ min-height: var(--shell-header-height, 64px);
72
+ position: relative;
73
+ z-index: 2;
43
74
  }
44
75
 
45
- /* Body - main horizontal layout container */
46
- .rt-ShellBody {
47
- display: flex;
48
- flex-direction: row;
49
- flex: 1;
76
+ .rt-ShellContent {
77
+ grid-area: content;
78
+ min-width: 0;
50
79
  min-height: 0;
51
- overflow: hidden;
52
- position: relative; /* enable absolute positioning for peek overlays */
53
- /* Prevent scroll chaining on iOS */
80
+ overflow: auto;
81
+ /* iOS momentum scrolling */
82
+ -webkit-overflow-scrolling: touch;
83
+ /* iOS safe area support */
84
+ padding-bottom: env(safe-area-inset-bottom, 0px);
85
+ /* Prevent overscroll bounce from triggering parent scroll */
54
86
  overscroll-behavior: contain;
87
+ /* Nothing positioned inside the content, whatever its z-index, paints over a pane. */
88
+ isolation: isolate;
55
89
  }
56
90
 
57
- /* Left container - holds Rail, Panel, or Sidebar */
58
- .rt-ShellLeft {
59
- display: flex;
60
- flex-direction: row;
61
- align-items: stretch;
62
- flex-shrink: 0;
63
- height: 100%;
64
- }
91
+ /* ── Panes ─────────────────────────────────────────────────────────────────── */
92
+
93
+ /*
94
+ * Every pane declares every posture property, so a pane inside another pane
95
+ * (a nested Shell) never inherits its ancestor's posture. `initial` makes the
96
+ * property guaranteed-invalid, so the readers below fall back to the frame.
97
+ */
98
+ .rt-ShellPane {
99
+ --rt-shell-position: initial;
100
+ --rt-shell-z: initial;
101
+ --rt-shell-row: initial;
102
+ --rt-shell-col: initial;
103
+ --rt-shell-surface: initial;
104
+ --rt-shell-shadow: initial;
105
+ --rt-shell-cap: initial;
106
+ --rt-shell-offset: initial;
107
+ --rt-shell-handle: initial;
108
+ --rt-shell-start: initial;
109
+ --rt-shell-thin: initial;
65
110
 
66
- /* Rail - slim navigation strip */
67
- .rt-ShellRail {
68
111
  display: flex;
69
112
  flex-direction: column;
70
- height: 100%;
71
- overflow: hidden;
72
-
73
- /* Above the panel, so a collapsing panel tucks behind it rather than across it. */
74
- position: relative;
75
- z-index: 2;
113
+ min-width: 0;
114
+ min-height: 0;
115
+ /* The resize handle straddles the pane's edge. */
116
+ overflow: visible;
117
+ position: var(--rt-shell-position, relative);
118
+ /* Above the content, so a handle straddling the boundary can be grabbed from either side. */
119
+ z-index: var(--rt-shell-z, 1);
120
+ background-color: var(--rt-shell-surface);
121
+ box-shadow: var(--rt-shell-shadow, none);
76
122
  }
77
123
 
78
- /* Steps to its width in one layout pass — see .rt-ShellPanel for why. */
79
- .rt-ShellRail[data-mode='expanded'] {
80
- width: var(--rail-size, 64px);
124
+ .rt-ShellPane:has(> .rt-ShellResizer) {
125
+ /* Above the pane beside it too, so the half of the handle that straddles into it can be grabbed. */
126
+ z-index: var(--rt-shell-z, 2);
81
127
  }
82
128
 
83
- .rt-ShellRail[data-mode='collapsed'] {
84
- width: 0px;
85
- transition: width 0s var(--motion-duration-small);
129
+ .rt-ShellPane:focus {
130
+ /* A pane takes focus only programmatically, when it opens as an overlay. */
131
+ outline: none;
86
132
  }
87
133
 
88
- /* Peek overlay rules consolidated later to avoid duplication */
89
-
90
- .rt-ShellRailContent {
91
- position: absolute;
134
+ .rt-ShellRail {
135
+ grid-row: var(--rt-shell-row, rail);
136
+ grid-column: var(--rt-shell-col, rail);
92
137
  inset-block: 0;
93
138
  inset-inline-start: 0;
94
-
95
- display: flex;
96
- flex-direction: column;
97
- width: 100%;
98
- height: 100%;
99
- gap: var(--space-2);
100
-
101
- /* Content animation */
102
- opacity: 0;
103
- pointer-events: none;
104
- transform: translateX(-100%);
105
- transition:
106
- transform var(--motion-duration-small) var(--motion-ease-standard),
107
- opacity var(--motion-duration-small) var(--motion-ease-standard);
139
+ inline-size: var(--rail-size, 64px);
140
+ max-inline-size: var(--rt-shell-cap, none);
108
141
  }
109
142
 
110
- :where([dir='rtl']) .rt-ShellRailContent {
111
- transform: translateX(100%);
112
- }
113
-
114
- .rt-ShellRailContent[data-visible] {
115
- opacity: 1;
116
- pointer-events: auto;
117
- transform: translateX(0);
143
+ .rt-ShellPanel,
144
+ .rt-ShellSidebar {
145
+ /* Where a floating Panel or Sidebar starts: beside the Rail. The cap subtracts it. */
146
+ --rt-shell-start: var(--rt-shell-offset, 0px);
118
147
  }
119
148
 
120
- /* Panel - sidebar content next to Rail */
121
149
  .rt-ShellPanel {
122
- display: flex;
123
- flex-direction: column;
124
- height: 100%;
125
- /* Allow handle to bleed across boundary */
126
- overflow: visible;
127
- position: relative;
128
- z-index: 1;
150
+ grid-row: var(--rt-shell-row, panel);
151
+ grid-column: var(--rt-shell-col, panel);
152
+ inset-block: 0;
153
+ /* Beside the Rail when floating; zero in the frame. */
154
+ inset-inline-start: var(--rt-shell-offset, 0px);
155
+ inline-size: var(--panel-size, var(--panel-expanded-size, 288px));
156
+ max-inline-size: var(--rt-shell-cap, none);
129
157
  }
130
158
 
131
- /*
132
- * The pane takes its width in one step rather than animating it. `width` is a
133
- * layout property, so animating it re-lays-out everything in `.rt-ShellContent`
134
- * on every frame of a collapse: measured on this stylesheet, that is 11 layout
135
- * passes per toggle and 5.3ms per frame with 100 rows of content beside it,
136
- * 10.1ms with 300 and 17.2ms with 800. Stepping to the final width costs one
137
- * layout pass, and the pane's contents slide on `transform`, which the
138
- * compositor handles without laying anything out.
139
- *
140
- * Expanding applies the width immediately, so the contents have somewhere to
141
- * slide into. Collapsing holds the width until the slide has finished — a `0s`
142
- * transition with a delay — so the contents are never sliding across
143
- * `.rt-ShellContent`, and the content area widens once, at the end.
144
- */
145
- .rt-ShellPanel[data-visible] {
146
- width: var(--panel-size, 288px);
159
+ .rt-ShellSidebar {
160
+ grid-row: var(--rt-shell-row, sidebar);
161
+ grid-column: var(--rt-shell-col, sidebar);
162
+ inset-block: 0;
163
+ /* Beside the Rail when floating; zero in the frame. */
164
+ inset-inline-start: var(--rt-shell-offset, 0px);
165
+ inline-size: var(--sidebar-size, var(--sidebar-expanded-size, 288px));
166
+ max-inline-size: var(--rt-shell-cap, none);
147
167
  }
148
168
 
149
- .rt-ShellPanel:not([data-visible]) {
150
- width: 0px;
151
- transition: width 0s var(--motion-duration-small);
169
+ .rt-ShellSidebar[data-thin] {
170
+ inline-size: var(--sidebar-thin-size, 64px);
171
+ --rt-shell-thin: none;
152
172
  }
153
173
 
154
- .rt-ShellPanelContent {
155
- /*
156
- * Taken out of flow so it can slide across the space the pane no longer
157
- * occupies. `.rt-ShellBody` clips it at the edge of the shell.
158
- */
159
- position: absolute;
174
+ .rt-ShellInspector {
175
+ grid-row: var(--rt-shell-row, inspector);
176
+ grid-column: var(--rt-shell-col, inspector);
160
177
  inset-block: 0;
161
- inset-inline-start: 0;
178
+ inset-inline-end: 0;
179
+ inline-size: var(--inspector-size, var(--inspector-expanded-size, 320px));
180
+ max-inline-size: var(--rt-shell-cap, none);
181
+ }
182
+
183
+ .rt-ShellBottom {
184
+ grid-row: var(--rt-shell-row, bottom);
185
+ grid-column: var(--rt-shell-col, bottom);
186
+ inset-inline: 0;
187
+ inset-block-end: 0;
188
+ block-size: var(--bottom-size, var(--bottom-expanded-size, 200px));
189
+ max-block-size: var(--rt-shell-cap, none);
190
+ }
162
191
 
192
+ /* A pane's content fills it. Kept as its own element so stylesheets written against 0.7 still find it. */
193
+ .rt-ShellRailContent,
194
+ .rt-ShellPanelContent,
195
+ .rt-ShellSidebarContent,
196
+ .rt-ShellInspectorContent,
197
+ .rt-ShellBottomContent {
163
198
  display: flex;
164
199
  flex-direction: column;
165
- width: 100%;
166
- height: 100%;
200
+ flex: 1;
201
+ min-width: 0;
202
+ min-height: 0;
167
203
  overflow: hidden;
168
-
169
- /* Content animation */
170
- opacity: 0;
171
- pointer-events: none;
172
- transform: translateX(-100%);
173
- transition:
174
- transform var(--motion-duration-small) var(--motion-ease-standard),
175
- opacity var(--motion-duration-small) var(--motion-ease-standard);
176
204
  }
177
205
 
178
- :where([dir='rtl']) .rt-ShellPanelContent {
179
- transform: translateX(100%);
206
+ .rt-ShellRailContent {
207
+ gap: var(--space-2);
180
208
  }
181
209
 
182
- .rt-ShellPanelContent[data-visible] {
183
- opacity: 1;
184
- pointer-events: auto;
185
- transform: translateX(0);
210
+ /* Closed is closed, in every posture: out of the layout, the tab order and the accessibility tree. */
211
+ .rt-ShellPane[data-state='closed'] {
212
+ display: none;
186
213
  }
187
214
 
188
- :where([dir='rtl']) .rt-ShellPanelContent[data-visible] {
189
- transform: translateX(0);
215
+ /* ── Visibility and posture, per breakpoint ────────────────────────────────── */
216
+
217
+ /* Plain attributes: a pane whose presentation is one value, and the JS mirror. */
218
+ .rt-ShellPane[data-presentation='overlay'],
219
+ .rt-ShellRail[data-presentation='overlay'] ~ .rt-ShellPanel[data-presentation-follows] {
220
+ --rt-shell-position: absolute;
221
+ --rt-shell-z: 6;
222
+ --rt-shell-row: 1 / -1;
223
+ --rt-shell-col: 1 / -1;
224
+ --rt-shell-surface: var(--color-panel-solid);
225
+ --rt-shell-shadow: var(--shadow-5);
226
+ --rt-shell-cap: calc(100% - var(--space-8) - var(--rt-shell-start, 0px));
227
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
228
+ --rt-shell-handle: none;
229
+ }
230
+
231
+ .rt-ShellPane[data-presentation='stacked'],
232
+ .rt-ShellRail[data-presentation='stacked'] ~ .rt-ShellPanel[data-presentation-follows] {
233
+ --rt-shell-position: absolute;
234
+ --rt-shell-z: 3;
235
+ --rt-shell-row: 2 / 3;
236
+ --rt-shell-col: 1 / -1;
237
+ --rt-shell-surface: var(--color-panel-solid);
238
+ --rt-shell-shadow: var(--shadow-4);
239
+ --rt-shell-cap: initial;
240
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
241
+ --rt-shell-handle: initial;
242
+ }
243
+
244
+ .rt-ShellPane[data-state='auto'][data-auto='closed'] {
245
+ display: none;
190
246
  }
191
247
 
192
- /* Sidebar - alternative to Rail+Panel */
193
- .rt-ShellSidebar {
194
- display: flex;
195
- flex-direction: column;
196
- height: 100%;
197
- /* Allow handle to bleed across boundary */
198
- overflow: visible;
199
- position: relative;
200
- z-index: 1;
201
-
248
+ .rt-ShellSidebar[data-state='auto'][data-auto='thin'] {
249
+ inline-size: var(--sidebar-thin-size, 64px);
250
+ --rt-shell-thin: none;
251
+ }
252
+
253
+ /* initial: below 520px, and the base every larger breakpoint overrides. */
254
+ .rt-ShellPane[data-presentation-initial='fixed'],
255
+ .rt-ShellRail[data-presentation-initial='fixed'] ~ .rt-ShellPanel[data-presentation-follows] {
256
+ --rt-shell-position: initial;
257
+ --rt-shell-z: initial;
258
+ --rt-shell-row: initial;
259
+ --rt-shell-col: initial;
260
+ --rt-shell-surface: initial;
261
+ --rt-shell-shadow: initial;
262
+ --rt-shell-cap: initial;
263
+ --rt-shell-offset: initial;
264
+ --rt-shell-handle: initial;
265
+ }
266
+
267
+ .rt-ShellPane[data-presentation-initial='overlay'],
268
+ .rt-ShellRail[data-presentation-initial='overlay'] ~ .rt-ShellPanel[data-presentation-follows] {
269
+ --rt-shell-position: absolute;
270
+ --rt-shell-z: 6;
271
+ --rt-shell-row: 1 / -1;
272
+ --rt-shell-col: 1 / -1;
273
+ --rt-shell-surface: var(--color-panel-solid);
274
+ --rt-shell-shadow: var(--shadow-5);
275
+ --rt-shell-cap: calc(100% - var(--space-8) - var(--rt-shell-start, 0px));
276
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
277
+ --rt-shell-handle: none;
278
+ }
279
+
280
+ .rt-ShellPane[data-presentation-initial='stacked'],
281
+ .rt-ShellRail[data-presentation-initial='stacked'] ~ .rt-ShellPanel[data-presentation-follows] {
282
+ --rt-shell-position: absolute;
283
+ --rt-shell-z: 3;
284
+ --rt-shell-row: 2 / 3;
285
+ --rt-shell-col: 1 / -1;
286
+ --rt-shell-surface: var(--color-panel-solid);
287
+ --rt-shell-shadow: var(--shadow-4);
288
+ --rt-shell-cap: initial;
289
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
290
+ --rt-shell-handle: initial;
291
+ }
292
+
293
+ .rt-ShellPane[data-state='auto'][data-auto-initial='closed'] {
294
+ display: none;
202
295
  }
203
296
 
204
- /*
205
- * Steps to its width in one layout pass — see .rt-ShellPanel for why.
206
- *
207
- * Sidebar has two open sizes, so expanded and thin both apply immediately and
208
- * the switch between them is a step rather than a slide: there is no composited
209
- * way to move a pane between two widths that both take space in the flow. The
210
- * phase rules below already fade the contents out across that switch, so the
211
- * step lands while they are not visible.
212
- */
213
- .rt-ShellSidebar[data-mode='expanded'] {
214
- width: var(--sidebar-size, 288px);
297
+ .rt-ShellPane[data-state='auto'][data-auto-initial='open'],
298
+ .rt-ShellPane[data-state='auto'][data-auto-initial='thin'] {
299
+ display: flex;
215
300
  }
216
301
 
217
- .rt-ShellSidebar[data-mode='thin'] {
218
- width: var(--sidebar-thin-size, 64px);
302
+ .rt-ShellSidebar[data-state='auto'][data-auto-initial='open'] {
303
+ inline-size: var(--sidebar-size, var(--sidebar-expanded-size, 288px));
304
+ --rt-shell-thin: initial;
219
305
  }
220
306
 
221
- .rt-ShellSidebar[data-mode='collapsed'] {
222
- width: 0px;
223
- transition: width 0s var(--motion-duration-small);
307
+ .rt-ShellSidebar[data-state='auto'][data-auto-initial='thin'] {
308
+ inline-size: var(--sidebar-thin-size, 64px);
309
+ --rt-shell-thin: none;
224
310
  }
225
311
 
226
- .rt-ShellSidebarContent {
227
- position: absolute;
228
- inset-block: 0;
229
- inset-inline-start: 0;
312
+ @media (min-width: 520px) {
313
+ .rt-ShellPane[data-presentation-xs='fixed'],
314
+ .rt-ShellRail[data-presentation-xs='fixed'] ~ .rt-ShellPanel[data-presentation-follows] {
315
+ --rt-shell-position: initial;
316
+ --rt-shell-z: initial;
317
+ --rt-shell-row: initial;
318
+ --rt-shell-col: initial;
319
+ --rt-shell-surface: initial;
320
+ --rt-shell-shadow: initial;
321
+ --rt-shell-cap: initial;
322
+ --rt-shell-offset: initial;
323
+ --rt-shell-handle: initial;
324
+ }
230
325
 
231
- display: flex;
232
- flex-direction: column;
233
- width: 100%;
234
- height: 100%;
235
- overflow: hidden;
326
+ .rt-ShellPane[data-presentation-xs='overlay'],
327
+ .rt-ShellRail[data-presentation-xs='overlay'] ~ .rt-ShellPanel[data-presentation-follows] {
328
+ --rt-shell-position: absolute;
329
+ --rt-shell-z: 6;
330
+ --rt-shell-row: 1 / -1;
331
+ --rt-shell-col: 1 / -1;
332
+ --rt-shell-surface: var(--color-panel-solid);
333
+ --rt-shell-shadow: var(--shadow-5);
334
+ --rt-shell-cap: calc(100% - var(--space-8) - var(--rt-shell-start, 0px));
335
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
336
+ --rt-shell-handle: none;
337
+ }
236
338
 
237
- /* Content animation */
238
- opacity: 0;
239
- pointer-events: none;
240
- transform: translateX(-100%);
241
- transition:
242
- transform var(--motion-duration-small) var(--motion-ease-standard),
243
- opacity var(--motion-duration-small) var(--motion-ease-standard);
244
- }
339
+ .rt-ShellPane[data-presentation-xs='stacked'],
340
+ .rt-ShellRail[data-presentation-xs='stacked'] ~ .rt-ShellPanel[data-presentation-follows] {
341
+ --rt-shell-position: absolute;
342
+ --rt-shell-z: 3;
343
+ --rt-shell-row: 2 / 3;
344
+ --rt-shell-col: 1 / -1;
345
+ --rt-shell-surface: var(--color-panel-solid);
346
+ --rt-shell-shadow: var(--shadow-4);
347
+ --rt-shell-cap: initial;
348
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
349
+ --rt-shell-handle: initial;
350
+ }
245
351
 
246
- :where([dir='rtl']) .rt-ShellSidebarContent {
247
- transform: translateX(100%);
248
- }
352
+ .rt-ShellPane[data-state='auto'][data-auto-xs='closed'] {
353
+ display: none;
354
+ }
249
355
 
250
- /* Hide resizer in thin mode */
251
- .rt-ShellSidebar[data-mode='thin'] .rt-ShellResizer {
252
- display: none;
253
- }
356
+ .rt-ShellPane[data-state='auto'][data-auto-xs='open'],
357
+ .rt-ShellPane[data-state='auto'][data-auto-xs='thin'] {
358
+ display: flex;
359
+ }
254
360
 
255
- .rt-ShellSidebarContent[data-visible] {
256
- opacity: 1;
257
- pointer-events: auto;
258
- transform: translateX(0);
259
- }
361
+ .rt-ShellSidebar[data-state='auto'][data-auto-xs='open'] {
362
+ inline-size: var(--sidebar-size, var(--sidebar-expanded-size, 288px));
363
+ --rt-shell-thin: initial;
364
+ }
260
365
 
261
- /* Sidebar presentation switch sequencing (thin ↔ expanded) */
262
- .rt-ShellSidebarContent[data-phase='hiding'] {
263
- /* Immediately fade out */
264
- opacity: 0;
265
- transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
266
- }
267
- .rt-ShellSidebarContent[data-phase='resizing'] {
268
- /* Keep hidden during width transition */
269
- opacity: 0;
270
- }
271
- .rt-ShellSidebarContent[data-phase='showing'] {
272
- /* Fade back in after width settles */
273
- opacity: 1;
274
- transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
366
+ .rt-ShellSidebar[data-state='auto'][data-auto-xs='thin'] {
367
+ inline-size: var(--sidebar-thin-size, 64px);
368
+ --rt-shell-thin: none;
369
+ }
275
370
  }
276
371
 
372
+ @media (min-width: 768px) {
373
+ .rt-ShellPane[data-presentation-sm='fixed'],
374
+ .rt-ShellRail[data-presentation-sm='fixed'] ~ .rt-ShellPanel[data-presentation-follows] {
375
+ --rt-shell-position: initial;
376
+ --rt-shell-z: initial;
377
+ --rt-shell-row: initial;
378
+ --rt-shell-col: initial;
379
+ --rt-shell-surface: initial;
380
+ --rt-shell-shadow: initial;
381
+ --rt-shell-cap: initial;
382
+ --rt-shell-offset: initial;
383
+ --rt-shell-handle: initial;
384
+ }
277
385
 
278
- /* Stacked Sidebar: left side, floating without reflow */
279
- .rt-ShellSidebar[data-presentation='stacked'] {
280
- position: absolute;
281
- inset-block: 0;
282
- inset-inline-start: 0;
283
- z-index: 31; /* between left and inspector; above content */
284
- transform: translateX(-100%);
285
- will-change: transform;
286
- transition:
287
- transform var(--motion-duration-small) var(--motion-ease-standard),
288
- box-shadow var(--motion-duration-small) var(--motion-ease-standard);
289
- box-shadow: 4px 0 12px -6px rgba(0, 0, 0, 0.2);
290
- }
386
+ .rt-ShellPane[data-presentation-sm='overlay'],
387
+ .rt-ShellRail[data-presentation-sm='overlay'] ~ .rt-ShellPanel[data-presentation-follows] {
388
+ --rt-shell-position: absolute;
389
+ --rt-shell-z: 6;
390
+ --rt-shell-row: 1 / -1;
391
+ --rt-shell-col: 1 / -1;
392
+ --rt-shell-surface: var(--color-panel-solid);
393
+ --rt-shell-shadow: var(--shadow-5);
394
+ --rt-shell-cap: calc(100% - var(--space-8) - var(--rt-shell-start, 0px));
395
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
396
+ --rt-shell-handle: none;
397
+ }
291
398
 
292
- .rt-ShellSidebar[data-presentation='stacked'][data-open] {
293
- transform: translateX(0);
294
- }
399
+ .rt-ShellPane[data-presentation-sm='stacked'],
400
+ .rt-ShellRail[data-presentation-sm='stacked'] ~ .rt-ShellPanel[data-presentation-follows] {
401
+ --rt-shell-position: absolute;
402
+ --rt-shell-z: 3;
403
+ --rt-shell-row: 2 / 3;
404
+ --rt-shell-col: 1 / -1;
405
+ --rt-shell-surface: var(--color-panel-solid);
406
+ --rt-shell-shadow: var(--shadow-4);
407
+ --rt-shell-cap: initial;
408
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
409
+ --rt-shell-handle: initial;
410
+ }
295
411
 
296
- .rt-ShellSidebar[data-presentation='stacked'][data-peek] {
297
- transform: translateX(0);
298
- }
412
+ .rt-ShellPane[data-state='auto'][data-auto-sm='closed'] {
413
+ display: none;
414
+ }
299
415
 
300
- /* Content - main work area (always required) */
301
- .rt-ShellContent {
302
- flex: 1;
303
- min-width: 0;
304
- height: 100%;
305
- overflow: auto;
306
- /* iOS momentum scrolling */
307
- -webkit-overflow-scrolling: touch;
308
- /* iOS safe area support */
309
- padding-bottom: env(safe-area-inset-bottom, 0px);
310
- /* Prevent overscroll bounce from triggering parent scroll */
311
- overscroll-behavior: contain;
312
- }
416
+ .rt-ShellPane[data-state='auto'][data-auto-sm='open'],
417
+ .rt-ShellPane[data-state='auto'][data-auto-sm='thin'] {
418
+ display: flex;
419
+ }
313
420
 
314
- /* Inspector - right-side panel */
315
- .rt-ShellInspector {
316
- display: flex;
317
- flex-direction: column;
318
- height: 100%;
319
- /* Allow handle to bleed across boundary */
320
- overflow: visible;
321
- position: relative;
322
- z-index: 1;
421
+ .rt-ShellSidebar[data-state='auto'][data-auto-sm='open'] {
422
+ inline-size: var(--sidebar-size, var(--sidebar-expanded-size, 288px));
423
+ --rt-shell-thin: initial;
424
+ }
323
425
 
426
+ .rt-ShellSidebar[data-state='auto'][data-auto-sm='thin'] {
427
+ inline-size: var(--sidebar-thin-size, 64px);
428
+ --rt-shell-thin: none;
429
+ }
324
430
  }
325
431
 
326
- /* Steps to its width in one layout pass — see .rt-ShellPanel for why. */
327
- .rt-ShellInspector[data-mode='expanded'] {
328
- width: var(--inspector-size, 320px);
329
- }
432
+ @media (min-width: 1024px) {
433
+ .rt-ShellPane[data-presentation-md='fixed'],
434
+ .rt-ShellRail[data-presentation-md='fixed'] ~ .rt-ShellPanel[data-presentation-follows] {
435
+ --rt-shell-position: initial;
436
+ --rt-shell-z: initial;
437
+ --rt-shell-row: initial;
438
+ --rt-shell-col: initial;
439
+ --rt-shell-surface: initial;
440
+ --rt-shell-shadow: initial;
441
+ --rt-shell-cap: initial;
442
+ --rt-shell-offset: initial;
443
+ --rt-shell-handle: initial;
444
+ }
330
445
 
331
- /* Collapsed inspector: stay in flow during transition, then hide */
332
- .rt-ShellInspector[data-mode='collapsed'] {
333
- width: 0px;
334
- transition: width 0s var(--motion-duration-small);
335
- }
446
+ .rt-ShellPane[data-presentation-md='overlay'],
447
+ .rt-ShellRail[data-presentation-md='overlay'] ~ .rt-ShellPanel[data-presentation-follows] {
448
+ --rt-shell-position: absolute;
449
+ --rt-shell-z: 6;
450
+ --rt-shell-row: 1 / -1;
451
+ --rt-shell-col: 1 / -1;
452
+ --rt-shell-surface: var(--color-panel-solid);
453
+ --rt-shell-shadow: var(--shadow-5);
454
+ --rt-shell-cap: calc(100% - var(--space-8) - var(--rt-shell-start, 0px));
455
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
456
+ --rt-shell-handle: none;
457
+ }
336
458
 
337
- .rt-ShellInspectorContent {
338
- position: absolute;
339
- inset-block: 0;
340
- inset-inline-end: 0;
459
+ .rt-ShellPane[data-presentation-md='stacked'],
460
+ .rt-ShellRail[data-presentation-md='stacked'] ~ .rt-ShellPanel[data-presentation-follows] {
461
+ --rt-shell-position: absolute;
462
+ --rt-shell-z: 3;
463
+ --rt-shell-row: 2 / 3;
464
+ --rt-shell-col: 1 / -1;
465
+ --rt-shell-surface: var(--color-panel-solid);
466
+ --rt-shell-shadow: var(--shadow-4);
467
+ --rt-shell-cap: initial;
468
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
469
+ --rt-shell-handle: initial;
470
+ }
341
471
 
342
- display: flex;
343
- flex-direction: column;
344
- width: 100%;
345
- height: 100%;
346
- overflow: hidden;
472
+ .rt-ShellPane[data-state='auto'][data-auto-md='closed'] {
473
+ display: none;
474
+ }
347
475
 
348
- /* Content animation */
349
- opacity: 0;
350
- pointer-events: none;
351
- transform: translateX(100%);
352
- transition:
353
- transform var(--motion-duration-small) var(--motion-ease-standard),
354
- opacity var(--motion-duration-small) var(--motion-ease-standard);
355
- }
476
+ .rt-ShellPane[data-state='auto'][data-auto-md='open'],
477
+ .rt-ShellPane[data-state='auto'][data-auto-md='thin'] {
478
+ display: flex;
479
+ }
356
480
 
357
- :where([dir='rtl']) .rt-ShellInspectorContent {
358
- transform: translateX(-100%);
359
- }
481
+ .rt-ShellSidebar[data-state='auto'][data-auto-md='open'] {
482
+ inline-size: var(--sidebar-size, var(--sidebar-expanded-size, 288px));
483
+ --rt-shell-thin: initial;
484
+ }
360
485
 
361
- .rt-ShellInspectorContent[data-visible] {
362
- opacity: 1;
363
- pointer-events: auto;
364
- transform: translateX(0);
486
+ .rt-ShellSidebar[data-state='auto'][data-auto-md='thin'] {
487
+ inline-size: var(--sidebar-thin-size, 64px);
488
+ --rt-shell-thin: none;
489
+ }
365
490
  }
366
491
 
367
- /* Bottom - bottom panel */
368
- .rt-ShellBottom {
369
- display: flex;
370
- flex-direction: column;
371
- width: 100%;
372
- /* Allow handle to bleed across boundary */
373
- overflow: visible;
374
- flex-shrink: 0;
375
- position: relative;
492
+ @media (min-width: 1280px) {
493
+ .rt-ShellPane[data-presentation-lg='fixed'],
494
+ .rt-ShellRail[data-presentation-lg='fixed'] ~ .rt-ShellPanel[data-presentation-follows] {
495
+ --rt-shell-position: initial;
496
+ --rt-shell-z: initial;
497
+ --rt-shell-row: initial;
498
+ --rt-shell-col: initial;
499
+ --rt-shell-surface: initial;
500
+ --rt-shell-shadow: initial;
501
+ --rt-shell-cap: initial;
502
+ --rt-shell-offset: initial;
503
+ --rt-shell-handle: initial;
504
+ }
376
505
 
377
- }
506
+ .rt-ShellPane[data-presentation-lg='overlay'],
507
+ .rt-ShellRail[data-presentation-lg='overlay'] ~ .rt-ShellPanel[data-presentation-follows] {
508
+ --rt-shell-position: absolute;
509
+ --rt-shell-z: 6;
510
+ --rt-shell-row: 1 / -1;
511
+ --rt-shell-col: 1 / -1;
512
+ --rt-shell-surface: var(--color-panel-solid);
513
+ --rt-shell-shadow: var(--shadow-5);
514
+ --rt-shell-cap: calc(100% - var(--space-8) - var(--rt-shell-start, 0px));
515
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
516
+ --rt-shell-handle: none;
517
+ }
378
518
 
379
- /* Steps to its height in one layout pass — see .rt-ShellPanel for why. */
380
- .rt-ShellBottom[data-mode='expanded'] {
381
- height: var(--bottom-size, 200px);
382
- }
519
+ .rt-ShellPane[data-presentation-lg='stacked'],
520
+ .rt-ShellRail[data-presentation-lg='stacked'] ~ .rt-ShellPanel[data-presentation-follows] {
521
+ --rt-shell-position: absolute;
522
+ --rt-shell-z: 3;
523
+ --rt-shell-row: 2 / 3;
524
+ --rt-shell-col: 1 / -1;
525
+ --rt-shell-surface: var(--color-panel-solid);
526
+ --rt-shell-shadow: var(--shadow-4);
527
+ --rt-shell-cap: initial;
528
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
529
+ --rt-shell-handle: initial;
530
+ }
383
531
 
384
- .rt-ShellBottom[data-mode='collapsed'] {
385
- height: 0px;
386
- transition: height 0s var(--motion-duration-small);
387
- }
532
+ .rt-ShellPane[data-state='auto'][data-auto-lg='closed'] {
533
+ display: none;
534
+ }
388
535
 
389
- .rt-ShellBottomContent {
390
- position: absolute;
391
- inset-inline: 0;
392
- inset-block-end: 0;
536
+ .rt-ShellPane[data-state='auto'][data-auto-lg='open'],
537
+ .rt-ShellPane[data-state='auto'][data-auto-lg='thin'] {
538
+ display: flex;
539
+ }
393
540
 
394
- display: flex;
395
- flex-direction: column;
396
- width: 100%;
397
- height: 100%;
398
- overflow: hidden;
541
+ .rt-ShellSidebar[data-state='auto'][data-auto-lg='open'] {
542
+ inline-size: var(--sidebar-size, var(--sidebar-expanded-size, 288px));
543
+ --rt-shell-thin: initial;
544
+ }
399
545
 
400
- /* Content animation */
401
- opacity: 0;
402
- pointer-events: none;
403
- transform: translateY(100%);
404
- transition:
405
- transform var(--motion-duration-small) var(--motion-ease-standard),
406
- opacity var(--motion-duration-small) var(--motion-ease-standard);
546
+ .rt-ShellSidebar[data-state='auto'][data-auto-lg='thin'] {
547
+ inline-size: var(--sidebar-thin-size, 64px);
548
+ --rt-shell-thin: none;
549
+ }
407
550
  }
408
551
 
409
- .rt-ShellBottomContent[data-visible] {
410
- opacity: 1;
411
- pointer-events: auto;
412
- transform: translateY(0);
413
- }
552
+ @media (min-width: 1640px) {
553
+ .rt-ShellPane[data-presentation-xl='fixed'],
554
+ .rt-ShellRail[data-presentation-xl='fixed'] ~ .rt-ShellPanel[data-presentation-follows] {
555
+ --rt-shell-position: initial;
556
+ --rt-shell-z: initial;
557
+ --rt-shell-row: initial;
558
+ --rt-shell-col: initial;
559
+ --rt-shell-surface: initial;
560
+ --rt-shell-shadow: initial;
561
+ --rt-shell-cap: initial;
562
+ --rt-shell-offset: initial;
563
+ --rt-shell-handle: initial;
564
+ }
414
565
 
415
- /* Disable transitions during active resize */
416
- .rt-ShellPanel[data-resizing],
417
- .rt-ShellSidebar[data-resizing],
418
- .rt-ShellInspector[data-resizing],
419
- .rt-ShellBottom[data-resizing] {
420
- transition: none !important;
421
- }
566
+ .rt-ShellPane[data-presentation-xl='overlay'],
567
+ .rt-ShellRail[data-presentation-xl='overlay'] ~ .rt-ShellPanel[data-presentation-follows] {
568
+ --rt-shell-position: absolute;
569
+ --rt-shell-z: 6;
570
+ --rt-shell-row: 1 / -1;
571
+ --rt-shell-col: 1 / -1;
572
+ --rt-shell-surface: var(--color-panel-solid);
573
+ --rt-shell-shadow: var(--shadow-5);
574
+ --rt-shell-cap: calc(100% - var(--space-8) - var(--rt-shell-start, 0px));
575
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
576
+ --rt-shell-handle: none;
577
+ }
422
578
 
423
- /* Hide resizer when panel isn't visible or is peeking */
424
- .rt-ShellPanel:not([data-visible]) .rt-ShellResizer,
425
- .rt-ShellPanel[data-peek] .rt-ShellResizer {
426
- display: none;
427
- }
579
+ .rt-ShellPane[data-presentation-xl='stacked'],
580
+ .rt-ShellRail[data-presentation-xl='stacked'] ~ .rt-ShellPanel[data-presentation-follows] {
581
+ --rt-shell-position: absolute;
582
+ --rt-shell-z: 3;
583
+ --rt-shell-row: 2 / 3;
584
+ --rt-shell-col: 1 / -1;
585
+ --rt-shell-surface: var(--color-panel-solid);
586
+ --rt-shell-shadow: var(--shadow-4);
587
+ --rt-shell-cap: initial;
588
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
589
+ --rt-shell-handle: initial;
590
+ }
428
591
 
429
- /* Hide resizer for other panes when hidden or peeking */
430
- .rt-ShellInspector[data-mode='collapsed'] .rt-ShellResizer,
431
- .rt-ShellInspector[data-peek] .rt-ShellResizer,
432
- .rt-ShellBottom[data-mode='collapsed'] .rt-ShellResizer,
433
- .rt-ShellBottom[data-peek] .rt-ShellResizer,
434
- .rt-ShellSidebar[data-mode='collapsed'] .rt-ShellResizer,
435
- .rt-ShellSidebar[data-peek] .rt-ShellResizer {
436
- display: none;
437
- }
592
+ .rt-ShellPane[data-state='auto'][data-auto-xl='closed'] {
593
+ display: none;
594
+ }
438
595
 
439
- .rt-ShellBottom[data-mode='collapsed'] .rt-ShellBottomContent {
440
- /* Exit animation: fade out content first, then collapse */
441
- opacity: 0;
442
- height: 0;
443
- visibility: hidden;
444
- transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
445
- }
596
+ .rt-ShellPane[data-state='auto'][data-auto-xl='open'],
597
+ .rt-ShellPane[data-state='auto'][data-auto-xl='thin'] {
598
+ display: flex;
599
+ }
446
600
 
447
- /* Overlay mode handling */
448
- [data-presentation='overlay'] {
449
- /* Overlay handled by JS/Sheet; no extra CSS needed */
450
- contain: style;
451
- }
601
+ .rt-ShellSidebar[data-state='auto'][data-auto-xl='open'] {
602
+ inline-size: var(--sidebar-size, var(--sidebar-expanded-size, 288px));
603
+ --rt-shell-thin: initial;
604
+ }
452
605
 
453
- /* Stacked mode handling: panes float above content without reflow */
454
- .rt-ShellLeft[data-presentation='stacked'] {
455
- position: absolute;
456
- inset-block: 0;
457
- inset-inline-start: 0;
458
- z-index: 30; /* below overlay sheets, above content/fixed */
459
- transform: translateX(-100%);
460
- will-change: transform;
461
- transition:
462
- transform var(--motion-duration-small) var(--motion-ease-standard),
463
- box-shadow var(--motion-duration-small) var(--motion-ease-standard);
464
- box-shadow: 4px 0 12px -6px rgba(0, 0, 0, 0.2);
606
+ .rt-ShellSidebar[data-state='auto'][data-auto-xl='thin'] {
607
+ inline-size: var(--sidebar-thin-size, 64px);
608
+ --rt-shell-thin: none;
609
+ }
465
610
  }
466
611
 
467
- .rt-ShellLeft[data-presentation='stacked'][data-open] {
468
- transform: translateX(0);
469
- }
612
+ /* ── Peek ──────────────────────────────────────────────────────────────────── */
470
613
 
471
- /* Ensure peek forces visibility in stacked mode */
472
- .rt-ShellLeft[data-presentation='stacked'][data-peek] {
473
- transform: translateX(0);
474
- }
614
+ /*
615
+ * A Trigger with `peekOnHover` previews a closed pane while the pointer is on
616
+ * it. The pane shows, floating above the content at its edge. After every
617
+ * breakpoint block, so it wins over a closed state at any width.
618
+ */
619
+ .rt-ShellPane[data-peek][data-state],
620
+ .rt-ShellRail ~ .rt-ShellPanel[data-presentation-follows][data-peek][data-state] {
621
+ --rt-shell-position: absolute;
622
+ --rt-shell-z: 4;
623
+ --rt-shell-row: 2 / 3;
624
+ --rt-shell-col: 1 / -1;
625
+ --rt-shell-surface: var(--color-panel-solid);
626
+ --rt-shell-shadow: var(--shadow-4);
627
+ --rt-shell-offset: var(--shell-rail-offset, 0px);
628
+ --rt-shell-handle: none;
475
629
 
476
- /* Stacked Inspector: right side */
477
- .rt-ShellInspector[data-presentation='stacked'] {
478
- position: absolute;
479
- inset-block: 0;
480
- inset-inline-end: 0;
481
- z-index: 32; /* above left and bottom stacked */
482
- width: var(--inspector-size, 320px);
483
- transform: translateX(100%);
484
- transition:
485
- transform var(--motion-duration-small) var(--motion-ease-standard),
486
- box-shadow var(--motion-duration-small) var(--motion-ease-standard);
487
- box-shadow: -4px 0 12px -6px rgba(0, 0, 0, 0.2);
630
+ display: flex;
488
631
  }
489
632
 
490
- .rt-ShellInspector[data-presentation='stacked'][data-open] {
491
- transform: translateX(0);
633
+ .rt-ShellSidebar[data-peek][data-state] {
634
+ inline-size: var(--peek-sidebar-width, var(--sidebar-size, var(--sidebar-expanded-size, 288px)));
492
635
  }
493
636
 
494
- .rt-ShellInspector[data-presentation='stacked'][data-peek] {
495
- transform: translateX(0);
496
- }
637
+ /* ── Scrim ─────────────────────────────────────────────────────────────────── */
497
638
 
498
- /* Stacked Bottom: bottom edge */
499
- .rt-ShellBottom[data-presentation='stacked'] {
639
+ /* Root-owned and always mounted; shown while an overlay is live. Under the overlay panes, over everything else. */
640
+ .rt-ShellScrim {
641
+ display: none;
500
642
  position: absolute;
501
- inset-inline: 0;
502
- inset-block-end: 0;
503
- z-index: 31; /* between left and inspector */
504
- height: var(--bottom-size, 200px);
505
- transform: translateY(100%);
506
- transition:
507
- transform var(--motion-duration-small) var(--motion-ease-standard),
508
- box-shadow var(--motion-duration-small) var(--motion-ease-standard);
509
- box-shadow: 0 -4px 12px -6px rgba(0, 0, 0, 0.2);
643
+ inset: 0;
644
+ z-index: 5;
645
+ background-color: var(--color-overlay);
510
646
  }
511
647
 
512
- .rt-ShellBottom[data-presentation='stacked'][data-open] {
513
- transform: translateY(0);
648
+ .rt-ShellRoot[data-overlay-live] > .rt-ShellScrim {
649
+ display: block;
514
650
  }
515
651
 
516
- .rt-ShellBottom[data-presentation='stacked'][data-peek] {
517
- transform: translateY(0);
652
+ /*
653
+ * A Shell with height="auto" grows with its page, so the page scrolls and the
654
+ * frame can be taller than the window. Its overlays and scrim are placed on
655
+ * the window, so an open drawer is on screen wherever the page is scrolled.
656
+ */
657
+ .rt-ShellRoot[data-height='auto'] > .rt-ShellScrim,
658
+ .rt-ShellRoot[data-height='auto'] > .rt-ShellPane[data-presentation='overlay'] {
659
+ position: fixed;
518
660
  }
519
661
 
520
- /* Accessibility - reduced motion */
521
- @media (prefers-reduced-motion: reduce) {
522
- .rt-ShellRail,
523
- .rt-ShellPanel,
524
- .rt-ShellSidebar,
525
- .rt-ShellInspector,
526
- .rt-ShellBottom,
527
- .rt-ShellRailContent,
528
- .rt-ShellPanelContent,
529
- .rt-ShellSidebarContent,
530
- .rt-ShellInspectorContent,
531
- .rt-ShellBottomContent {
532
- transition: none;
533
- }
662
+ /* ── Inset ─────────────────────────────────────────────────────────────────── */
663
+
664
+ /*
665
+ * The backdrop behind the middle row while any pane is inset. A grid item of
666
+ * its own, so the header and the bottom row keep the page. `:has()` paints it
667
+ * from the server markup, before any script; `data-has-inset` is the Root's
668
+ * own record, which also covers a pane wrapped in another element.
669
+ */
670
+ .rt-ShellRoot:has(> [data-inset])::before,
671
+ .rt-ShellRoot[data-has-inset]::before {
672
+ content: '';
673
+ grid-row: 2;
674
+ grid-column: 1 / -1;
675
+ background: var(--gray-2);
534
676
  }
535
677
 
536
- /* Trigger styling intentionally omitted */
678
+ .rt-ShellPane[data-inset],
679
+ .rt-ShellContent[data-inset] {
680
+ margin: var(--shell-inset-gap);
681
+ border-radius: var(--radius-surface-3);
682
+ background: var(--color-background);
683
+ box-shadow: var(--shadow-2);
684
+ }
537
685
 
538
- /* Resizer handle (unstyled, full-edge overlay) */
686
+ /*
687
+ * Two inset panes side by side share one gap rather than doubling it: the
688
+ * later pane in the row drops the margin on the side that meets the earlier
689
+ * one. Only the pane right beside it counts, and only while it is shown in
690
+ * the frame (the JS mirror's data-presentation and data-mode), so a closed,
691
+ * hidden or floating pane never takes the gap away. Before hydration the
692
+ * gap is doubled.
693
+ */
694
+ .rt-ShellRoot:has(> .rt-ShellRail[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed'])) > .rt-ShellPanel[data-inset][data-presentation='fixed'],
695
+ .rt-ShellRoot:has(> .rt-ShellPanel[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed'])) > .rt-ShellSidebar[data-inset][data-presentation='fixed'],
696
+ .rt-ShellRoot:has(> .rt-ShellRail[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed'])):not(
697
+ :has(> .rt-ShellPanel[data-presentation='fixed'][data-mode]:not([data-mode='collapsed']))
698
+ )
699
+ > .rt-ShellSidebar[data-inset][data-presentation='fixed'],
700
+ .rt-ShellRoot:has(> .rt-ShellSidebar[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed'])) > .rt-ShellContent[data-inset],
701
+ .rt-ShellRoot:has(> .rt-ShellPanel[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed'])):not(
702
+ :has(> .rt-ShellSidebar[data-presentation='fixed'][data-mode]:not([data-mode='collapsed']))
703
+ )
704
+ > .rt-ShellContent[data-inset],
705
+ .rt-ShellRoot:has(> .rt-ShellRail[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed'])):not(
706
+ :has(> .rt-ShellPanel[data-presentation='fixed'][data-mode]:not([data-mode='collapsed']), > .rt-ShellSidebar[data-presentation='fixed'][data-mode]:not([data-mode='collapsed']))
707
+ )
708
+ > .rt-ShellContent[data-inset],
709
+ .rt-ShellRoot:has(> .rt-ShellContent[data-inset]) > .rt-ShellInspector[data-inset][data-presentation='fixed'] {
710
+ margin-inline-start: 0;
711
+ }
712
+
713
+ .rt-ShellRoot:has(
714
+ > .rt-ShellRail[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed']),
715
+ > .rt-ShellPanel[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed']),
716
+ > .rt-ShellSidebar[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed']),
717
+ > .rt-ShellContent[data-inset],
718
+ > .rt-ShellInspector[data-inset][data-presentation='fixed'][data-mode]:not([data-mode='collapsed'])
719
+ )
720
+ > .rt-ShellBottom[data-inset] {
721
+ margin-block-start: 0;
722
+ }
723
+
724
+ /* ── Resize handle ─────────────────────────────────────────────────────────── */
725
+
726
+ /* A transparent hit area straddling the pane's edge. */
539
727
  .rt-ShellResizer {
540
728
  position: absolute;
541
729
  z-index: 1;
542
730
  background: transparent;
543
731
  /* hit target size, adjustable per media */
544
732
  --resizer-hit: var(--space-3);
545
- display: flex;
733
+ display: var(--rt-shell-thin, var(--rt-shell-handle, flex));
546
734
  align-items: center;
547
735
  justify-content: center;
548
736
  overflow: visible;
737
+ touch-action: none;
549
738
  }
550
739
 
551
740
  .rt-ShellResizer[data-orientation='vertical'][data-edge='end'] {
@@ -557,6 +746,10 @@
557
746
  transform: translateX(50%);
558
747
  }
559
748
 
749
+ .rt-ShellResizer[data-orientation='vertical'][data-edge='end']:dir(rtl) {
750
+ transform: translateX(-50%);
751
+ }
752
+
560
753
  .rt-ShellResizer[data-orientation='vertical'][data-edge='start'] {
561
754
  inset-block: 0;
562
755
  inset-inline-start: 0;
@@ -566,6 +759,10 @@
566
759
  transform: translateX(-50%);
567
760
  }
568
761
 
762
+ .rt-ShellResizer[data-orientation='vertical'][data-edge='start']:dir(rtl) {
763
+ transform: translateX(50%);
764
+ }
765
+
569
766
  .rt-ShellResizer[data-orientation='horizontal'][data-edge='start'] {
570
767
  inset-inline: 0;
571
768
  inset-block-start: 0;
@@ -581,100 +778,44 @@
581
778
  }
582
779
  }
583
780
 
584
- /* --- Peek overlays (override after pane rules) --- */
585
- .rt-ShellRail[data-peek],
586
- .rt-ShellPanel[data-peek],
587
- .rt-ShellSidebar[data-peek],
588
- .rt-ShellInspector[data-peek],
589
- .rt-ShellBottom[data-peek] {
781
+ /*
782
+ * The boundary as a line on the pane's edge: shown on hover, on keyboard
783
+ * focus and while dragging, so the handle is visible when it matters and the
784
+ * frame carries no rule otherwise.
785
+ */
786
+ .rt-ShellResizer::before {
787
+ content: '';
590
788
  position: absolute;
591
- z-index: 40;
592
- }
593
-
594
- /* Directional shadows for peeks */
595
- .rt-ShellRail[data-peek],
596
- .rt-ShellPanel[data-peek],
597
- .rt-ShellSidebar[data-peek] {
598
- box-shadow: 4px 0 8px -4px rgba(0, 0, 0, 0.15);
599
- }
600
-
601
- .rt-ShellInspector[data-peek] {
602
- box-shadow: -4px 0 8px -4px rgba(0, 0, 0, 0.15);
603
- }
604
-
605
- .rt-ShellBottom[data-peek] {
606
- box-shadow: 0 -4px 8px -4px rgba(0, 0, 0, 0.15);
607
- }
608
-
609
- /* Peek: expand container first, then fade content in */
610
- .rt-ShellRail[data-peek] .rt-ShellRailContent,
611
- .rt-ShellPanel[data-peek] .rt-ShellPanelContent,
612
- .rt-ShellSidebar[data-peek] .rt-ShellSidebarContent,
613
- .rt-ShellInspector[data-peek] .rt-ShellInspectorContent,
614
- .rt-ShellBottom[data-peek] .rt-ShellBottomContent {
615
- opacity: 1;
616
- transition-delay: var(--motion-duration-small);
617
- }
618
-
619
- /* Rail peek: left edge */
620
- .rt-ShellRail[data-peek] {
621
- inset-block: 0;
622
- inset-inline-start: 0;
623
- width: var(--rail-size, 64px);
789
+ background-color: transparent;
790
+ pointer-events: none;
624
791
  }
625
792
 
626
- /* Panel peek: offset by rail width; override hidden width */
627
- .rt-ShellPanel[data-peek] {
793
+ .rt-ShellResizer[data-orientation='vertical']::before {
628
794
  inset-block: 0;
629
- inset-inline-start: var(--peek-rail-width, var(--rail-size, 64px));
630
- width: var(--panel-size, 288px);
795
+ inset-inline-start: calc(50% - 1px);
796
+ inline-size: 2px;
631
797
  }
632
798
 
633
- /* Sidebar peek: left edge; preview next width (thin or expanded) */
634
- .rt-ShellSidebar[data-peek] {
635
- inset-block: 0;
636
- inset-inline-start: 0;
637
- width: var(--peek-sidebar-width, var(--sidebar-size, 288px));
799
+ .rt-ShellResizer[data-orientation='horizontal']::before {
800
+ inset-inline: 0;
801
+ inset-block-start: calc(50% - 1px);
802
+ block-size: 2px;
638
803
  }
639
804
 
640
- /* Inspector peek: right edge; ensure width even when collapsed */
641
- .rt-ShellInspector[data-peek] {
642
- inset-block: 0;
643
- inset-inline-end: 0;
644
- width: var(--inspector-size, 320px);
645
- }
646
- .rt-ShellInspector[data-peek][data-mode='collapsed'] {
647
- width: var(--inspector-size, 320px);
805
+ .rt-ShellResizer:hover::before,
806
+ .rt-ShellResizer[data-dragging]::before {
807
+ background-color: var(--gray-a6);
648
808
  }
649
809
 
650
- /* Bottom peek: bottom edge; ensure height when collapsed */
651
- .rt-ShellBottom[data-peek] {
652
- inset-inline: 0;
653
- inset-block-end: 0;
654
- height: var(--bottom-size, 200px);
655
- }
656
- .rt-ShellBottom[data-peek][data-mode='collapsed'] {
657
- height: var(--bottom-size, 200px);
810
+ .rt-ShellResizer:focus-visible {
811
+ outline: none;
658
812
  }
659
813
 
660
- /* --- Inset mode: floating panes with gray backdrop --- */
661
-
662
- /* Shell body gets gray backdrop when any pane has inset */
663
- .rt-ShellBody[data-has-inset] {
664
- background: var(--gray-2);
814
+ .rt-ShellResizer:focus-visible::before {
815
+ background-color: var(--focus-8);
665
816
  }
666
817
 
667
- /* Inset pane shared styles */
668
- .rt-ShellLeft[data-inset],
669
- .rt-ShellSidebar[data-inset],
670
- .rt-ShellContent[data-inset],
671
- .rt-ShellInspector[data-inset],
672
- .rt-ShellBottom[data-inset] {
673
- --shell-inset-gap: var(--space-2);
674
- margin: var(--shell-inset-gap);
675
- border-radius: var(--radius-surface-3);
676
- background: var(--color-background);
677
- box-shadow: var(--shadow-2);
678
- /* Override height: 100% so margin doesn't overflow */
679
- height: auto;
818
+ /* Hide the handle while its pane is a thin sidebar. */
819
+ .rt-ShellSidebar[data-thin] .rt-ShellResizer {
820
+ display: none;
680
821
  }