@gjermundgaraba/pixel-paper 0.0.0-stage → 0.1.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 (387) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -2
  3. package/dist/_virtual/_rolldown/runtime.js +13 -0
  4. package/dist/announcer/announcer.d.ts +35 -0
  5. package/dist/announcer/announcer.js +121 -0
  6. package/dist/announcer/index.d.ts +5 -0
  7. package/dist/announcer/index.js +11 -0
  8. package/dist/attributes/attributes.d.ts +4 -0
  9. package/dist/banner/banner.d.ts +20 -0
  10. package/dist/banner/banner.js +18 -0
  11. package/dist/banner/index.d.ts +5 -0
  12. package/dist/banner/index.js +6 -0
  13. package/dist/bench/bench.d.ts +16 -0
  14. package/dist/bench/bench.js +12 -0
  15. package/dist/bench/index.d.ts +5 -0
  16. package/dist/bench/index.js +6 -0
  17. package/dist/board/board.d.ts +1151 -0
  18. package/dist/board/board.js +449 -0
  19. package/dist/board/index.d.ts +6 -0
  20. package/dist/board/index.js +21 -0
  21. package/dist/button/button.d.ts +54 -0
  22. package/dist/button/button.js +50 -0
  23. package/dist/button/index.d.ts +5 -0
  24. package/dist/button/index.js +9 -0
  25. package/dist/card/card.d.ts +66 -0
  26. package/dist/card/card.js +70 -0
  27. package/dist/card/index.d.ts +5 -0
  28. package/dist/card/index.js +10 -0
  29. package/dist/chip/chip.d.ts +27 -0
  30. package/dist/chip/chip.js +34 -0
  31. package/dist/chip/index.d.ts +5 -0
  32. package/dist/chip/index.js +9 -0
  33. package/dist/choice/choice.d.ts +16 -0
  34. package/dist/choice/choice.js +17 -0
  35. package/dist/choice/index.d.ts +5 -0
  36. package/dist/choice/index.js +6 -0
  37. package/dist/code-editor/code-editor.d.ts +15 -0
  38. package/dist/code-editor/code-editor.js +22 -0
  39. package/dist/code-editor/index.d.ts +5 -0
  40. package/dist/code-editor/index.js +6 -0
  41. package/dist/code-surface/code-surface.d.ts +12 -0
  42. package/dist/code-surface/code-surface.js +12 -0
  43. package/dist/code-surface/index.d.ts +5 -0
  44. package/dist/code-surface/index.js +6 -0
  45. package/dist/command-palette/command-palette.d.ts +579 -0
  46. package/dist/command-palette/command-palette.js +600 -0
  47. package/dist/command-palette/index.d.ts +9 -0
  48. package/dist/command-palette/index.js +32 -0
  49. package/dist/command-palette/keys.d.ts +13 -0
  50. package/dist/command-palette/keys.js +71 -0
  51. package/dist/command-palette/match.d.ts +43 -0
  52. package/dist/command-palette/match.js +45 -0
  53. package/dist/command-palette/message.d.ts +94 -0
  54. package/dist/command-palette/message.js +46 -0
  55. package/dist/confirm-dialog/confirm-dialog.d.ts +287 -0
  56. package/dist/confirm-dialog/confirm-dialog.js +115 -0
  57. package/dist/confirm-dialog/index.d.ts +5 -0
  58. package/dist/confirm-dialog/index.js +17 -0
  59. package/dist/copy-button/copy-button.d.ts +99 -0
  60. package/dist/copy-button/copy-button.js +96 -0
  61. package/dist/copy-button/index.d.ts +5 -0
  62. package/dist/copy-button/index.js +13 -0
  63. package/dist/crumbs/crumbs.d.ts +15 -0
  64. package/dist/crumbs/crumbs.js +11 -0
  65. package/dist/crumbs/index.d.ts +5 -0
  66. package/dist/crumbs/index.js +6 -0
  67. package/dist/deck/deck.d.ts +9 -0
  68. package/dist/deck/deck.js +9 -0
  69. package/dist/deck/index.d.ts +5 -0
  70. package/dist/deck/index.js +6 -0
  71. package/dist/dialog/dialog.d.ts +278 -0
  72. package/dist/dialog/dialog.js +145 -0
  73. package/dist/dialog/fold.d.ts +58 -0
  74. package/dist/dialog/fold.js +63 -0
  75. package/dist/dialog/index.d.ts +6 -0
  76. package/dist/dialog/index.js +21 -0
  77. package/dist/disclosure/disclosure.d.ts +24 -0
  78. package/dist/disclosure/disclosure.js +25 -0
  79. package/dist/disclosure/index.d.ts +5 -0
  80. package/dist/disclosure/index.js +6 -0
  81. package/dist/dom/html-element.js +8 -0
  82. package/dist/drag/drag.d.ts +15 -0
  83. package/dist/drag/drag.js +123 -0
  84. package/dist/drop-zone/drop-zone.d.ts +119 -0
  85. package/dist/drop-zone/drop-zone.js +64 -0
  86. package/dist/drop-zone/index.d.ts +5 -0
  87. package/dist/drop-zone/index.js +14 -0
  88. package/dist/empty-state/empty-state.d.ts +18 -0
  89. package/dist/empty-state/empty-state.js +16 -0
  90. package/dist/empty-state/index.d.ts +5 -0
  91. package/dist/empty-state/index.js +6 -0
  92. package/dist/error-summary/error-summary.d.ts +34 -0
  93. package/dist/error-summary/error-summary.js +33 -0
  94. package/dist/error-summary/index.d.ts +5 -0
  95. package/dist/error-summary/index.js +6 -0
  96. package/dist/field/field.d.ts +35 -0
  97. package/dist/field/field.js +34 -0
  98. package/dist/field/index.d.ts +5 -0
  99. package/dist/field/index.js +6 -0
  100. package/dist/field-grid/field-grid.d.ts +8 -0
  101. package/dist/field-grid/field-grid.js +8 -0
  102. package/dist/field-grid/index.d.ts +5 -0
  103. package/dist/field-grid/index.js +6 -0
  104. package/dist/fields/fields.js +9 -0
  105. package/dist/fieldset/fieldset.d.ts +13 -0
  106. package/dist/fieldset/fieldset.js +13 -0
  107. package/dist/fieldset/index.d.ts +5 -0
  108. package/dist/fieldset/index.js +6 -0
  109. package/dist/filter-chip/filter-chip.d.ts +21 -0
  110. package/dist/filter-chip/filter-chip.js +28 -0
  111. package/dist/filter-chip/index.d.ts +5 -0
  112. package/dist/filter-chip/index.js +6 -0
  113. package/dist/filter-strip/filter-strip.d.ts +12 -0
  114. package/dist/filter-strip/filter-strip.js +13 -0
  115. package/dist/filter-strip/index.d.ts +5 -0
  116. package/dist/filter-strip/index.js +6 -0
  117. package/dist/flash-word/flash-word.d.ts +31 -0
  118. package/dist/flash-word/flash-word.js +31 -0
  119. package/dist/flash-word/index.d.ts +5 -0
  120. package/dist/flash-word/index.js +9 -0
  121. package/dist/focus/focus.d.ts +15 -0
  122. package/dist/focus/focus.js +17 -0
  123. package/dist/focus/index.d.ts +5 -0
  124. package/dist/focus/index.js +9 -0
  125. package/dist/format/format.js +52 -0
  126. package/dist/format/index.d.ts +5 -0
  127. package/dist/format/index.js +6 -0
  128. package/dist/glyph/glyph.d.ts +9 -0
  129. package/dist/glyph/glyph.js +25 -0
  130. package/dist/glyph/glyphs.d.ts +381 -0
  131. package/dist/glyph/glyphs.js +2603 -0
  132. package/dist/glyph/index.d.ts +5 -0
  133. package/dist/glyph/index.js +6 -0
  134. package/dist/group/group.d.ts +8 -0
  135. package/dist/group/group.js +9 -0
  136. package/dist/group/index.d.ts +5 -0
  137. package/dist/group/index.js +6 -0
  138. package/dist/history/history.d.ts +34 -0
  139. package/dist/history/history.js +15 -0
  140. package/dist/history/index.d.ts +5 -0
  141. package/dist/history/index.js +6 -0
  142. package/dist/icon-button/icon-button.d.ts +23 -0
  143. package/dist/icon-button/icon-button.js +23 -0
  144. package/dist/icon-button/index.d.ts +5 -0
  145. package/dist/icon-button/index.js +6 -0
  146. package/dist/identity/identity.d.ts +15 -0
  147. package/dist/identity/identity.js +15 -0
  148. package/dist/identity/index.d.ts +5 -0
  149. package/dist/identity/index.js +6 -0
  150. package/dist/index.d.ts +85 -0
  151. package/dist/index.js +85 -0
  152. package/dist/inline-input/index.d.ts +5 -0
  153. package/dist/inline-input/index.js +20 -0
  154. package/dist/inline-input/inline-input.d.ts +196 -0
  155. package/dist/inline-input/inline-input.js +212 -0
  156. package/dist/key-help/index.d.ts +5 -0
  157. package/dist/key-help/index.js +18 -0
  158. package/dist/key-help/key-help.d.ts +255 -0
  159. package/dist/key-help/key-help.js +137 -0
  160. package/dist/key-hint/index.d.ts +6 -0
  161. package/dist/key-hint/index.js +12 -0
  162. package/dist/key-hint/key-hint.d.ts +13 -0
  163. package/dist/key-hint/key-hint.js +7 -0
  164. package/dist/key-hint/key-label.d.ts +18 -0
  165. package/dist/key-hint/key-label.js +77 -0
  166. package/dist/keymap/keymap.d.ts +11 -0
  167. package/dist/keymap/keymap.js +9 -0
  168. package/dist/keys/keys.js +4 -0
  169. package/dist/line-diff/diff.d.ts +2 -0
  170. package/dist/line-diff/diff.js +73 -0
  171. package/dist/line-diff/index.d.ts +6 -0
  172. package/dist/line-diff/index.js +10 -0
  173. package/dist/line-diff/line-diff.d.ts +21 -0
  174. package/dist/line-diff/line-diff.js +75 -0
  175. package/dist/line-diff/patch.d.ts +15 -0
  176. package/dist/line-diff/patch.js +120 -0
  177. package/dist/link-button/index.d.ts +5 -0
  178. package/dist/link-button/index.js +6 -0
  179. package/dist/link-button/link-button.d.ts +11 -0
  180. package/dist/link-button/link-button.js +10 -0
  181. package/dist/link-state/index.d.ts +5 -0
  182. package/dist/link-state/index.js +6 -0
  183. package/dist/link-state/link-state.d.ts +15 -0
  184. package/dist/link-state/link-state.js +17 -0
  185. package/dist/live-region/index.d.ts +5 -0
  186. package/dist/live-region/index.js +9 -0
  187. package/dist/live-region/live-region.d.ts +39 -0
  188. package/dist/live-region/live-region.js +33 -0
  189. package/dist/loading/index.d.ts +5 -0
  190. package/dist/loading/index.js +6 -0
  191. package/dist/loading/loading.d.ts +19 -0
  192. package/dist/loading/loading.js +16 -0
  193. package/dist/locale/locale.d.ts +3 -0
  194. package/dist/locale/locale.js +5 -0
  195. package/dist/mark/index.d.ts +5 -0
  196. package/dist/mark/index.js +6 -0
  197. package/dist/mark/mark.d.ts +15 -0
  198. package/dist/mark/mark.js +30 -0
  199. package/dist/menu/index.d.ts +7 -0
  200. package/dist/menu/index.js +25 -0
  201. package/dist/menu/item.d.ts +236 -0
  202. package/dist/menu/item.js +19 -0
  203. package/dist/menu/menu.d.ts +206 -0
  204. package/dist/menu/menu.js +208 -0
  205. package/dist/menu/slip.js +163 -0
  206. package/dist/meter/index.d.ts +5 -0
  207. package/dist/meter/index.js +6 -0
  208. package/dist/meter/meter.d.ts +38 -0
  209. package/dist/meter/meter.js +69 -0
  210. package/dist/monogram/monogram.js +33 -0
  211. package/dist/nav-strip/index.d.ts +5 -0
  212. package/dist/nav-strip/index.js +6 -0
  213. package/dist/nav-strip/nav-strip.d.ts +19 -0
  214. package/dist/nav-strip/nav-strip.js +21 -0
  215. package/dist/notice/index.d.ts +5 -0
  216. package/dist/notice/index.js +6 -0
  217. package/dist/notice/notice.d.ts +23 -0
  218. package/dist/notice/notice.js +35 -0
  219. package/dist/outcome/index.d.ts +5 -0
  220. package/dist/outcome/index.js +6 -0
  221. package/dist/outcome/outcome.d.ts +19 -0
  222. package/dist/outcome/outcome.js +14 -0
  223. package/dist/page-head/index.d.ts +5 -0
  224. package/dist/page-head/index.js +6 -0
  225. package/dist/page-head/page-head.d.ts +13 -0
  226. package/dist/page-head/page-head.js +10 -0
  227. package/dist/panel/index.d.ts +5 -0
  228. package/dist/panel/index.js +6 -0
  229. package/dist/panel/panel.d.ts +35 -0
  230. package/dist/panel/panel.js +25 -0
  231. package/dist/password-field/index.d.ts +5 -0
  232. package/dist/password-field/index.js +6 -0
  233. package/dist/password-field/password-field.d.ts +33 -0
  234. package/dist/password-field/password-field.js +39 -0
  235. package/dist/places/index.d.ts +5 -0
  236. package/dist/places/index.js +6 -0
  237. package/dist/places/places.d.ts +32 -0
  238. package/dist/places/places.js +22 -0
  239. package/dist/props-list/index.d.ts +5 -0
  240. package/dist/props-list/index.js +6 -0
  241. package/dist/props-list/props-list.d.ts +18 -0
  242. package/dist/props-list/props-list.js +12 -0
  243. package/dist/prose/index.d.ts +5 -0
  244. package/dist/prose/index.js +6 -0
  245. package/dist/prose/prose.d.ts +14 -0
  246. package/dist/prose/prose.js +6 -0
  247. package/dist/query-chip/index.d.ts +5 -0
  248. package/dist/query-chip/index.js +6 -0
  249. package/dist/query-chip/query-chip.d.ts +18 -0
  250. package/dist/query-chip/query-chip.js +17 -0
  251. package/dist/radio-choices/index.d.ts +5 -0
  252. package/dist/radio-choices/index.js +12 -0
  253. package/dist/radio-choices/radio-choices.d.ts +105 -0
  254. package/dist/radio-choices/radio-choices.js +56 -0
  255. package/dist/rail/index.d.ts +5 -0
  256. package/dist/rail/index.js +22 -0
  257. package/dist/rail/rail.d.ts +403 -0
  258. package/dist/rail/rail.js +355 -0
  259. package/dist/reel/index.d.ts +6 -0
  260. package/dist/reel/index.js +26 -0
  261. package/dist/reel/layout.d.ts +58 -0
  262. package/dist/reel/layout.js +378 -0
  263. package/dist/reel/reel.d.ts +1070 -0
  264. package/dist/reel/reel.js +1019 -0
  265. package/dist/remote/index.d.ts +5 -0
  266. package/dist/remote/index.js +6 -0
  267. package/dist/remote/remote.d.ts +28 -0
  268. package/dist/remote/remote.js +41 -0
  269. package/dist/rows/index.d.ts +5 -0
  270. package/dist/rows/index.js +12 -0
  271. package/dist/rows/rows.d.ts +116 -0
  272. package/dist/rows/rows.js +67 -0
  273. package/dist/scheme/index.d.ts +6 -0
  274. package/dist/scheme/index.js +10 -0
  275. package/dist/scheme/scheme-switch.d.ts +98 -0
  276. package/dist/scheme/scheme-switch.js +118 -0
  277. package/dist/scheme/scheme.d.ts +5 -0
  278. package/dist/scheme/scheme.js +16 -0
  279. package/dist/scheme/script.d.ts +8 -0
  280. package/dist/scheme/script.js +10 -0
  281. package/dist/secret/index.d.ts +5 -0
  282. package/dist/secret/index.js +6 -0
  283. package/dist/secret/secret.d.ts +13 -0
  284. package/dist/secret/secret.js +9 -0
  285. package/dist/segmented/index.d.ts +5 -0
  286. package/dist/segmented/index.js +6 -0
  287. package/dist/segmented/segmented.d.ts +17 -0
  288. package/dist/segmented/segmented.js +17 -0
  289. package/dist/select-field/index.d.ts +5 -0
  290. package/dist/select-field/index.js +6 -0
  291. package/dist/select-field/select-field.d.ts +38 -0
  292. package/dist/select-field/select-field.js +29 -0
  293. package/dist/sheet/index.d.ts +5 -0
  294. package/dist/sheet/index.js +6 -0
  295. package/dist/sheet/sheet.d.ts +16 -0
  296. package/dist/sheet/sheet.js +15 -0
  297. package/dist/skip-link/index.d.ts +5 -0
  298. package/dist/skip-link/index.js +9 -0
  299. package/dist/skip-link/skip-link.d.ts +23 -0
  300. package/dist/skip-link/skip-link.js +36 -0
  301. package/dist/slot/slot.js +8 -0
  302. package/dist/sortable/index.d.ts +5 -0
  303. package/dist/sortable/index.js +16 -0
  304. package/dist/sortable/sortable.d.ts +1125 -0
  305. package/dist/sortable/sortable.js +431 -0
  306. package/dist/stack/index.d.ts +5 -0
  307. package/dist/stack/index.js +6 -0
  308. package/dist/stack/stack.d.ts +15 -0
  309. package/dist/stack/stack.js +12 -0
  310. package/dist/stage/index.d.ts +5 -0
  311. package/dist/stage/index.js +6 -0
  312. package/dist/stage/stage.d.ts +14 -0
  313. package/dist/stage/stage.js +11 -0
  314. package/dist/stat/index.d.ts +5 -0
  315. package/dist/stat/index.js +6 -0
  316. package/dist/stat/stat.d.ts +18 -0
  317. package/dist/stat/stat.js +13 -0
  318. package/dist/status-bar/index.d.ts +6 -0
  319. package/dist/status-bar/index.js +11 -0
  320. package/dist/status-bar/status-bar.d.ts +28 -0
  321. package/dist/status-bar/status-bar.js +19 -0
  322. package/dist/subscription/prefix-keys.js +12 -0
  323. package/dist/table/index.d.ts +5 -0
  324. package/dist/table/index.js +6 -0
  325. package/dist/table/table.d.ts +26 -0
  326. package/dist/table/table.js +18 -0
  327. package/dist/tabs/index.d.ts +5 -0
  328. package/dist/tabs/index.js +14 -0
  329. package/dist/tabs/tabs.d.ts +125 -0
  330. package/dist/tabs/tabs.js +57 -0
  331. package/dist/tag/index.d.ts +5 -0
  332. package/dist/tag/index.js +6 -0
  333. package/dist/tag/tag.d.ts +16 -0
  334. package/dist/tag/tag.js +25 -0
  335. package/dist/text-button/index.d.ts +5 -0
  336. package/dist/text-button/index.js +6 -0
  337. package/dist/text-button/text-button.d.ts +8 -0
  338. package/dist/text-button/text-button.js +12 -0
  339. package/dist/textarea-field/index.d.ts +5 -0
  340. package/dist/textarea-field/index.js +6 -0
  341. package/dist/textarea-field/textarea-field.d.ts +28 -0
  342. package/dist/textarea-field/textarea-field.js +30 -0
  343. package/dist/time/index.d.ts +5 -0
  344. package/dist/time/index.js +9 -0
  345. package/dist/time/time.d.ts +38 -0
  346. package/dist/time/time.js +63 -0
  347. package/dist/tips/index.d.ts +5 -0
  348. package/dist/tips/index.js +14 -0
  349. package/dist/tips/tips.d.ts +339 -0
  350. package/dist/tips/tips.js +308 -0
  351. package/dist/toast/index.d.ts +5 -0
  352. package/dist/toast/index.js +17 -0
  353. package/dist/toast/stack.d.ts +7 -0
  354. package/dist/toast/stack.js +23 -0
  355. package/dist/toast/toast.d.ts +559 -0
  356. package/dist/toast/toast.js +269 -0
  357. package/dist/toc/index.d.ts +5 -0
  358. package/dist/toc/index.js +9 -0
  359. package/dist/toc/toc.d.ts +42 -0
  360. package/dist/toc/toc.js +35 -0
  361. package/dist/top-bar/bar-height.d.ts +26 -0
  362. package/dist/top-bar/bar-height.js +43 -0
  363. package/dist/top-bar/index.d.ts +6 -0
  364. package/dist/top-bar/index.js +12 -0
  365. package/dist/top-bar/top-bar.d.ts +19 -0
  366. package/dist/top-bar/top-bar.js +18 -0
  367. package/dist/wall/index.d.ts +5 -0
  368. package/dist/wall/index.js +9 -0
  369. package/dist/wall/wall.d.ts +16 -0
  370. package/dist/wall/wall.js +15 -0
  371. package/dist/window/index.d.ts +5 -0
  372. package/dist/window/index.js +6 -0
  373. package/dist/window/window.d.ts +28 -0
  374. package/dist/window/window.js +29 -0
  375. package/dist/wordmark/index.d.ts +5 -0
  376. package/dist/wordmark/index.js +6 -0
  377. package/dist/wordmark/wordmark.d.ts +10 -0
  378. package/dist/wordmark/wordmark.js +10 -0
  379. package/dist/wrap/index.d.ts +5 -0
  380. package/dist/wrap/index.js +6 -0
  381. package/dist/wrap/wrap.d.ts +12 -0
  382. package/dist/wrap/wrap.js +9 -0
  383. package/fonts/DepartureMono-Regular.woff2 +0 -0
  384. package/fonts/LICENSE.txt +2 -0
  385. package/package.json +57 -3
  386. package/src/pixel-paper.css +4611 -0
  387. package/src/tokens.css +151 -0
@@ -0,0 +1,4611 @@
1
+ @import "./tokens.css";
2
+
3
+ * {
4
+ margin: 0;
5
+ padding: 0;
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ :root {
10
+ --topbar-h: 48px;
11
+ --statusbar-h: 0px;
12
+ }
13
+
14
+ html {
15
+ height: 100%;
16
+ scroll-padding-top: calc(var(--topbar-h) + 16px);
17
+ scroll-padding-bottom: var(--statusbar-h);
18
+ }
19
+
20
+ :root:has(footer.statusbar) {
21
+ --statusbar-h: 25px;
22
+ }
23
+
24
+ body {
25
+ min-height: 100%;
26
+ padding-bottom: var(--statusbar-h);
27
+ font-family: var(--font-body);
28
+ font-size: var(--type-body);
29
+ line-height: 1.45;
30
+ color: var(--ink);
31
+ caret-color: var(--ink);
32
+ background: var(--dither);
33
+ }
34
+
35
+ fieldset {
36
+ border: 0;
37
+ min-width: 0;
38
+ }
39
+
40
+ ::selection {
41
+ background: var(--ink);
42
+ color: var(--paper);
43
+ }
44
+
45
+ ::placeholder {
46
+ color: var(--muted);
47
+ opacity: 1;
48
+ }
49
+
50
+ :focus-visible {
51
+ outline: var(--line) solid var(--ink);
52
+ outline-offset: 2px;
53
+ }
54
+
55
+ ::-webkit-scrollbar {
56
+ width: 10px;
57
+ height: 10px;
58
+ }
59
+ ::-webkit-scrollbar-track {
60
+ background: var(--ground);
61
+ }
62
+ ::-webkit-scrollbar-thumb {
63
+ background: var(--ink);
64
+ border: 2px solid var(--ground);
65
+ }
66
+
67
+ a {
68
+ color: var(--ink);
69
+ }
70
+
71
+ code,
72
+ kbd {
73
+ font-family: var(--font-code);
74
+ font-size: var(--type-control);
75
+ }
76
+
77
+ .px-icon {
78
+ display: inline-block;
79
+ vertical-align: -1px;
80
+ flex: none;
81
+ shape-rendering: crispedges;
82
+ }
83
+
84
+ .sr-only {
85
+ position: absolute;
86
+ width: 1px;
87
+ height: 1px;
88
+ margin: -1px;
89
+ overflow: hidden;
90
+ clip-path: inset(50%);
91
+ white-space: nowrap;
92
+ border: 0;
93
+ }
94
+
95
+ .skip {
96
+ position: fixed;
97
+ top: -100px;
98
+ left: 12px;
99
+ z-index: 300;
100
+ background: var(--ink);
101
+ color: var(--paper);
102
+ font-family: var(--font-px);
103
+ font-size: var(--type-control);
104
+ text-transform: uppercase;
105
+ padding: 6px 14px;
106
+ text-decoration: none;
107
+ }
108
+
109
+ .skip:focus {
110
+ top: 8px;
111
+ }
112
+
113
+ [hidden] {
114
+ display: none !important;
115
+ }
116
+
117
+ :is(
118
+ .nav.tabs button,
119
+ :is(button, label).fchip,
120
+ button.glyph,
121
+ button.mark,
122
+ button.tag:has(> span),
123
+ .textbtn,
124
+ .crumbs a,
125
+ .error-summary a
126
+ ) {
127
+ position: relative;
128
+ }
129
+
130
+ :is(
131
+ .nav.tabs button,
132
+ :is(button, label).fchip,
133
+ button.glyph,
134
+ button.mark,
135
+ button.tag:has(> span),
136
+ .textbtn,
137
+ .crumbs a,
138
+ .error-summary a
139
+ )::after {
140
+ content: "";
141
+ position: absolute;
142
+ top: 50%;
143
+ left: 50%;
144
+ width: max(100%, 24px);
145
+ height: max(100%, 24px);
146
+ translate: -50% -50%;
147
+ }
148
+
149
+ .iconbtn {
150
+ flex: none;
151
+ }
152
+
153
+ .board-card .meta-row .tag {
154
+ flex-shrink: 1;
155
+ min-width: 0;
156
+ }
157
+
158
+ button.tag:has(> span) {
159
+ overflow: visible;
160
+ }
161
+
162
+ button.tag > span {
163
+ display: block;
164
+ overflow: hidden;
165
+ text-overflow: ellipsis;
166
+ }
167
+
168
+ .label {
169
+ font-family: var(--font-px);
170
+ font-size: var(--type-label);
171
+ text-transform: uppercase;
172
+ letter-spacing: var(--tracking-label);
173
+ color: var(--muted);
174
+ }
175
+
176
+ .meta {
177
+ font-family: var(--font-px);
178
+ font-size: var(--type-label);
179
+ color: var(--muted);
180
+ }
181
+
182
+ .age {
183
+ font-family: var(--font-px);
184
+ font-size: var(--type-state);
185
+ color: var(--muted);
186
+ flex: none;
187
+ }
188
+
189
+ .age.stale {
190
+ color: var(--red);
191
+ }
192
+
193
+ .tnum {
194
+ font-variant-numeric: tabular-nums;
195
+ }
196
+
197
+ .done-title {
198
+ color: var(--muted);
199
+ text-decoration: line-through;
200
+ }
201
+
202
+ .note-line {
203
+ font: var(--type-control)/1.45 var(--font-body);
204
+ color: var(--muted);
205
+ max-width: 46ch;
206
+ }
207
+
208
+ .stack {
209
+ display: grid;
210
+ align-content: start;
211
+ gap: var(--space-m);
212
+ min-width: 0;
213
+ }
214
+
215
+ .group {
216
+ display: flex;
217
+ align-items: center;
218
+ gap: var(--space-s);
219
+ min-width: 0;
220
+ }
221
+
222
+ .wrap {
223
+ display: flex;
224
+ flex-wrap: wrap;
225
+ align-items: center;
226
+ gap: var(--space-s);
227
+ min-width: 0;
228
+ }
229
+
230
+ .stack > *,
231
+ .group > * {
232
+ min-width: 0;
233
+ }
234
+
235
+ :is(.stack, .group, .wrap).gap-s {
236
+ gap: var(--space-s);
237
+ }
238
+
239
+ :is(.stack, .group, .wrap).gap-m {
240
+ gap: var(--space-m);
241
+ }
242
+
243
+ :is(.stack, .group, .wrap).gap-l {
244
+ gap: var(--space-l);
245
+ }
246
+
247
+ .page-head {
248
+ display: flex;
249
+ flex-wrap: wrap;
250
+ align-items: flex-end;
251
+ justify-content: space-between;
252
+ gap: var(--space-m) var(--gap);
253
+ }
254
+
255
+ .page-name {
256
+ display: flex;
257
+ flex-wrap: wrap;
258
+ align-items: baseline;
259
+ gap: 4px 12px;
260
+ min-width: 0;
261
+ }
262
+
263
+ .page-title {
264
+ font-family: var(--font-body);
265
+ font-size: var(--type-page);
266
+ font-weight: 600;
267
+ line-height: 1.2;
268
+ letter-spacing: -0.01em;
269
+ text-wrap: balance;
270
+ overflow-wrap: anywhere;
271
+ }
272
+
273
+ .page-head .meta {
274
+ font-size: var(--type-state);
275
+ color: var(--ink);
276
+ }
277
+
278
+ .page-acts {
279
+ display: flex;
280
+ flex-wrap: wrap;
281
+ align-items: center;
282
+ gap: var(--space-s);
283
+ }
284
+
285
+ @media (max-width: 600px) {
286
+ .page-title {
287
+ font-size: var(--type-page-narrow);
288
+ }
289
+ }
290
+
291
+ .topbar {
292
+ anchor-name: --topbar;
293
+ position: sticky;
294
+ top: 0;
295
+ z-index: 40;
296
+ display: flex;
297
+ align-items: center;
298
+ flex-wrap: wrap;
299
+ gap: 10px 16px;
300
+ padding: 8px 20px;
301
+ background: var(--paper);
302
+ border-bottom: var(--line) solid var(--ink);
303
+ user-select: none;
304
+ }
305
+
306
+ .wordmark {
307
+ font-family: var(--font-px);
308
+ font-size: var(--type-wordmark);
309
+ font-weight: 400;
310
+ letter-spacing: -0.02em;
311
+ color: inherit;
312
+ text-decoration: none;
313
+ white-space: nowrap;
314
+ }
315
+
316
+ .cursor {
317
+ display: inline-block;
318
+ width: 6px;
319
+ height: 11px;
320
+ vertical-align: -1px;
321
+ background: currentColor;
322
+ animation: blink var(--motion-blink) steps(1) infinite;
323
+ }
324
+
325
+ @keyframes blink {
326
+ 50% {
327
+ opacity: 0;
328
+ }
329
+ }
330
+
331
+ .wordmark .cursor {
332
+ width: 8px;
333
+ height: 15px;
334
+ margin-left: 3px;
335
+ vertical-align: -2px;
336
+ background: var(--ink);
337
+ animation-iteration-count: 4;
338
+ }
339
+
340
+ .topbar .spacer,
341
+ .strip .spacer {
342
+ flex: 1;
343
+ }
344
+
345
+ .topbar-tools {
346
+ display: flex;
347
+ flex-wrap: wrap;
348
+ justify-content: flex-end;
349
+ align-items: center;
350
+ gap: 8px 16px;
351
+ min-width: 0;
352
+ margin-left: auto;
353
+ }
354
+
355
+ @media (max-width: 600px) {
356
+ .topbar-tools {
357
+ gap: 8px 12px;
358
+ }
359
+
360
+ .topbar-tools .btn {
361
+ padding: 5px 10px;
362
+ }
363
+ }
364
+
365
+ .link-state {
366
+ font-family: var(--font-px);
367
+ font-size: var(--type-state);
368
+ letter-spacing: var(--tracking-head);
369
+ text-transform: uppercase;
370
+ }
371
+
372
+ .link-state.offline {
373
+ padding: 2px 6px;
374
+ color: var(--on-red);
375
+ background: var(--red);
376
+ }
377
+
378
+ .link-state.connecting {
379
+ color: var(--muted);
380
+ }
381
+
382
+ .link-state.reconnecting {
383
+ padding: 2px 6px;
384
+ color: var(--on-status);
385
+ background: var(--amber);
386
+ }
387
+
388
+ .textbtn {
389
+ font-family: var(--font-px);
390
+ font-size: var(--type-control);
391
+ text-transform: uppercase;
392
+ letter-spacing: var(--tracking-caps);
393
+ background: none;
394
+ border: 0;
395
+ color: var(--ink);
396
+ cursor: pointer;
397
+ padding: 2px 0;
398
+ border-bottom: 1px dotted transparent;
399
+ }
400
+
401
+ a.textbtn {
402
+ text-decoration: none;
403
+ }
404
+
405
+ .textbtn:hover {
406
+ border-bottom-color: var(--ink);
407
+ }
408
+
409
+ .nav {
410
+ display: flex;
411
+ gap: 0;
412
+ width: fit-content;
413
+ max-width: 100%;
414
+ border: var(--line) solid var(--ink);
415
+ }
416
+
417
+ .panel > .tabbed > .nav.tabs {
418
+ margin: var(--pad) var(--pad) 0;
419
+ }
420
+
421
+ .nav a,
422
+ .nav button {
423
+ font-family: var(--font-px);
424
+ font-size: var(--type-control);
425
+ text-transform: uppercase;
426
+ letter-spacing: var(--tracking-caps);
427
+ background: var(--paper);
428
+ color: var(--ink);
429
+ border: none;
430
+ padding: 5px 14px;
431
+ cursor: pointer;
432
+ text-decoration: none;
433
+ white-space: nowrap;
434
+ }
435
+
436
+ .nav > :is(a, button) + :is(a, button) {
437
+ border-left: var(--line) solid var(--ink);
438
+ }
439
+
440
+ .nav [aria-current="page"],
441
+ .nav [aria-selected="true"],
442
+ .nav [aria-pressed="true"] {
443
+ background: var(--ink);
444
+ color: var(--paper);
445
+ }
446
+
447
+ .nav .navnum {
448
+ display: inline-block;
449
+ margin-left: 8px;
450
+ padding: 0 5px;
451
+ font-size: var(--type-state);
452
+ background: var(--head);
453
+ color: var(--on-head);
454
+ }
455
+
456
+ .nav.tabs button {
457
+ padding: 4px 12px;
458
+ font-size: var(--type-state);
459
+ }
460
+
461
+ @media (max-width: 600px) {
462
+ .nav a,
463
+ .nav button {
464
+ padding: 5px 8px;
465
+ font-size: var(--type-state);
466
+ }
467
+
468
+ .nav .navnum {
469
+ margin-left: 5px;
470
+ }
471
+
472
+ .topbar {
473
+ gap: 8px 12px;
474
+ padding: 8px 12px;
475
+ }
476
+
477
+ .topbar > .nav {
478
+ order: 1;
479
+ flex-basis: 100%;
480
+ width: auto;
481
+ }
482
+
483
+ .topbar > .nav > * {
484
+ flex: 1;
485
+ text-align: center;
486
+ }
487
+
488
+ .deck {
489
+ padding: 20px 12px 64px;
490
+ }
491
+ }
492
+
493
+ .places ul {
494
+ list-style: none;
495
+ }
496
+
497
+ .places li {
498
+ display: flex;
499
+ align-items: center;
500
+ border-bottom: var(--hair) solid var(--rule);
501
+ }
502
+
503
+ .places li:last-child {
504
+ border-bottom: 0;
505
+ }
506
+
507
+ .places li:not(:has(> [aria-current])):hover {
508
+ background-color: var(--head);
509
+ }
510
+
511
+ .places li > :is(a, button) {
512
+ flex: 1;
513
+ min-width: 0;
514
+ min-height: var(--row);
515
+ display: flex;
516
+ align-items: baseline;
517
+ gap: var(--space-s);
518
+ padding: 8px 12px;
519
+ font: inherit;
520
+ color: inherit;
521
+ text-align: left;
522
+ text-decoration: none;
523
+ background: none;
524
+ border: 0;
525
+ cursor: pointer;
526
+ }
527
+
528
+ .places li > :is(a, button):focus-visible {
529
+ outline-offset: -4px;
530
+ }
531
+
532
+ .place-name {
533
+ flex: 1;
534
+ min-width: 0;
535
+ overflow-wrap: anywhere;
536
+ }
537
+
538
+ .places li:has(> [aria-current]) {
539
+ background-color: var(--ink);
540
+ color: var(--paper);
541
+ }
542
+
543
+ .places li:has(> [aria-current]) .iconbtn.quiet {
544
+ color: inherit;
545
+ opacity: var(--fade-on-ink);
546
+ }
547
+
548
+ .places li:has(> [aria-current]) :focus-visible {
549
+ outline-color: var(--paper);
550
+ }
551
+
552
+ .btn {
553
+ font-family: var(--font-px);
554
+ font-size: var(--type-control);
555
+ text-transform: uppercase;
556
+ letter-spacing: var(--tracking-caps);
557
+ display: inline-flex;
558
+ align-items: center;
559
+ gap: 6px;
560
+ background: var(--paper);
561
+ color: var(--ink);
562
+ border: var(--line) solid var(--ink);
563
+ padding: 5px 14px;
564
+ cursor: pointer;
565
+ box-shadow: var(--shadow-button);
566
+ text-decoration: none;
567
+ white-space: nowrap;
568
+ }
569
+
570
+ /* aria-disabled is the held state (busy or unavailable): unavailable like :disabled,
571
+ but focusable, so a click can still match :active and must not depress a button that
572
+ ignores it */
573
+ .btn:not([aria-disabled="true"]):active {
574
+ transform: translate(2px, 2px);
575
+ box-shadow: var(--shadow-pressed);
576
+ }
577
+
578
+ .btn:disabled,
579
+ .btn[aria-disabled="true"] {
580
+ color: var(--muted);
581
+ border-color: var(--muted);
582
+ box-shadow: none;
583
+ cursor: default;
584
+ }
585
+
586
+ .btn:disabled:active {
587
+ transform: none;
588
+ }
589
+
590
+ .btn.primary {
591
+ background: var(--ink);
592
+ color: var(--paper);
593
+ }
594
+
595
+ .btn.primary:disabled,
596
+ .btn.primary[aria-disabled="true"] {
597
+ background: var(--paper);
598
+ color: var(--muted);
599
+ }
600
+
601
+ .btn.default-ring {
602
+ box-shadow:
603
+ 0 0 0 2px var(--paper),
604
+ 0 0 0 4px var(--ink);
605
+ margin: 4px;
606
+ }
607
+
608
+ .btn.default-ring:not([aria-disabled="true"]):active {
609
+ transform: none;
610
+ background: var(--ink);
611
+ color: var(--paper);
612
+ }
613
+
614
+ .card-actions:focus-within .btn.default-ring:not(:focus) {
615
+ box-shadow: var(--shadow-button);
616
+ }
617
+
618
+ .btn.default-ring[aria-disabled="true"]:not(:focus),
619
+ .card-actions:focus-within .btn.default-ring[aria-disabled="true"]:not(:focus) {
620
+ box-shadow: none;
621
+ }
622
+
623
+ .btn.small {
624
+ font-size: var(--type-state);
625
+ padding: 3px 10px;
626
+ box-shadow: var(--shadow-button-small);
627
+ }
628
+
629
+ .btn.small:disabled,
630
+ .btn.small[aria-disabled="true"] {
631
+ box-shadow: none;
632
+ }
633
+
634
+ .btn.danger {
635
+ color: var(--red);
636
+ border-color: var(--red);
637
+ box-shadow: var(--shadow-danger);
638
+ }
639
+
640
+ .btn.danger:focus-visible {
641
+ outline-color: var(--red);
642
+ }
643
+
644
+ .iconbtn {
645
+ display: inline-flex;
646
+ align-items: center;
647
+ justify-content: center;
648
+ width: 24px;
649
+ height: 24px;
650
+ background: transparent;
651
+ color: inherit;
652
+ border: none;
653
+ cursor: pointer;
654
+ padding: 0;
655
+ }
656
+
657
+ .iconbtn.quiet {
658
+ color: var(--muted);
659
+ }
660
+
661
+ .iconbtn.quiet:hover {
662
+ color: var(--ink);
663
+ }
664
+
665
+ .btn .key-hint {
666
+ margin-left: var(--space-s);
667
+ font-family: var(--font-px);
668
+ font-size: var(--type-label);
669
+ text-transform: none;
670
+ letter-spacing: 0;
671
+ opacity: 0.65;
672
+ }
673
+
674
+ .btn {
675
+ position: relative;
676
+ }
677
+
678
+ .btn > .cursor {
679
+ position: absolute;
680
+ top: 50%;
681
+ right: 4px;
682
+ translate: 0 -50%;
683
+ }
684
+
685
+ .btn.small > .cursor {
686
+ right: 3px;
687
+ width: 5px;
688
+ height: 9px;
689
+ }
690
+
691
+ /* hung under its toggle by @foldkit/ui's Anchor, which positions it and flips it near the
692
+ window edge, in the page's top layer (inside the open dialog when there is one). Anchor
693
+ writes left and top for an absolute box (fixed it sets itself, under a fixed toggle), so
694
+ the slip is absolute: in the page's flow it would ignore them. It paints over the sticky
695
+ bars (40) and a banner (150), under the skip link (300) */
696
+ .menu {
697
+ position: absolute;
698
+ z-index: 200;
699
+ min-width: 148px;
700
+ max-width: calc(100vw - 24px);
701
+ color: var(--ink);
702
+ background: var(--paper);
703
+ border: var(--line) solid var(--ink);
704
+ box-shadow: var(--shadow-card);
705
+ }
706
+
707
+ .menu-wrap {
708
+ display: inline-flex;
709
+ position: relative;
710
+ }
711
+
712
+ .menu [role^="menuitem"] {
713
+ display: flex;
714
+ width: 100%;
715
+ align-items: center;
716
+ gap: 10px;
717
+ font-family: var(--font-px);
718
+ font-size: var(--type-control);
719
+ text-transform: uppercase;
720
+ letter-spacing: var(--tracking-caps);
721
+ text-align: left;
722
+ background: var(--paper);
723
+ color: var(--ink);
724
+ border: 0;
725
+ border-bottom: var(--hair) solid var(--rule);
726
+ padding: 7px 12px;
727
+ cursor: pointer;
728
+ white-space: nowrap;
729
+ text-decoration: none;
730
+ }
731
+
732
+ .menu > [role^="menuitem"]:last-child,
733
+ .menu > [role="group"]:last-child > [role^="menuitem"]:last-child {
734
+ border-bottom: 0;
735
+ }
736
+
737
+ .menu [role^="menuitem"]:not([aria-disabled="true"]):hover {
738
+ background: var(--head);
739
+ }
740
+
741
+ .menu [role^="menuitem"][aria-disabled="true"] {
742
+ color: var(--muted);
743
+ cursor: default;
744
+ }
745
+
746
+ .menu [role="menuitemradio"][aria-checked="true"] {
747
+ background: var(--ink);
748
+ color: var(--paper);
749
+ }
750
+
751
+ .menu .menu-label {
752
+ flex: 1;
753
+ overflow: hidden;
754
+ text-overflow: ellipsis;
755
+ }
756
+
757
+ .menu .key-hint {
758
+ font-family: inherit;
759
+ font-size: var(--type-state);
760
+ text-transform: none;
761
+ color: var(--muted);
762
+ }
763
+
764
+ .menu [role="menuitemradio"][aria-checked="true"] .key-hint {
765
+ color: inherit;
766
+ opacity: var(--fade-on-ink);
767
+ }
768
+
769
+ .menu .menu-check {
770
+ width: 14px;
771
+ height: 14px;
772
+ border: var(--line) solid var(--ink);
773
+ display: inline-grid;
774
+ place-content: center;
775
+ flex: none;
776
+ }
777
+
778
+ .menu .menu-check::before {
779
+ content: "";
780
+ width: 6px;
781
+ height: 6px;
782
+ }
783
+
784
+ .menu [aria-checked="true"] .menu-check::before {
785
+ background: var(--ink);
786
+ }
787
+
788
+ .menu .menu-note {
789
+ display: block;
790
+ padding: 7px 12px;
791
+ font: var(--type-control)/1.45 var(--font-body);
792
+ text-transform: none;
793
+ letter-spacing: normal;
794
+ white-space: nowrap;
795
+ color: var(--muted);
796
+ border-bottom: var(--hair) solid var(--rule);
797
+ }
798
+
799
+ .deck {
800
+ max-width: var(--deck);
801
+ margin: 0 auto;
802
+ padding: var(--gap) 20px 80px;
803
+ display: grid;
804
+ gap: var(--gap);
805
+ }
806
+
807
+ .deck > * {
808
+ min-width: 0;
809
+ }
810
+
811
+ .panel,
812
+ .sheet {
813
+ background: var(--paper);
814
+ border: var(--line) solid var(--ink);
815
+ box-shadow: var(--shadow-panel);
816
+ min-width: 0;
817
+ }
818
+
819
+ .panel-tb {
820
+ display: flex;
821
+ align-items: baseline;
822
+ gap: 10px;
823
+ background: var(--ink);
824
+ color: var(--paper);
825
+ padding: 6px 12px;
826
+ font-family: var(--font-px);
827
+ }
828
+
829
+ .panel-tb h2 {
830
+ font-size: var(--type-body);
831
+ font-weight: 400;
832
+ text-transform: uppercase;
833
+ letter-spacing: var(--tracking-title);
834
+ }
835
+
836
+ .panel-tb .meta {
837
+ margin-left: auto;
838
+ font-size: var(--type-state);
839
+ color: inherit;
840
+ opacity: var(--fade-on-ink);
841
+ }
842
+
843
+ .panel-body {
844
+ padding: var(--pad);
845
+ display: grid;
846
+ gap: var(--space-m);
847
+ }
848
+
849
+ .panel-body > * {
850
+ min-width: 0;
851
+ }
852
+
853
+ .panel-foot {
854
+ padding: 10px 12px;
855
+ border-top: var(--hair) solid var(--rule);
856
+ display: flex;
857
+ align-items: center;
858
+ gap: 12px;
859
+ flex-wrap: wrap;
860
+ }
861
+
862
+ .panel-foot .push {
863
+ margin-left: auto;
864
+ }
865
+
866
+ .panel-foot > .notice {
867
+ flex: 1 1 100%;
868
+ }
869
+
870
+ .panel-shelf {
871
+ padding: 10px 12px 12px;
872
+ background: var(--head);
873
+ border-bottom: var(--hair) solid var(--rule);
874
+ }
875
+
876
+ .panel-shelf :is(.field > label:not(.choice), .field-label) {
877
+ color: var(--on-head);
878
+ }
879
+
880
+ .panel-tb:has(> :is(.panel-lead, .panel-acts)) {
881
+ align-items: center;
882
+ padding-block: 3px;
883
+ min-height: 31px;
884
+ }
885
+
886
+ .panel-tb:has(> .panel-lead) {
887
+ padding-left: 3px;
888
+ }
889
+
890
+ .panel-tb:has(> .panel-acts) {
891
+ padding-right: 3px;
892
+ }
893
+
894
+ .panel-tb:has(> :is(.panel-lead, .panel-acts)) h2 {
895
+ flex: 1;
896
+ min-width: 0;
897
+ overflow-wrap: anywhere;
898
+ }
899
+
900
+ .panel-lead,
901
+ .panel-acts {
902
+ display: inline-flex;
903
+ align-items: center;
904
+ gap: 6px;
905
+ flex: none;
906
+ }
907
+
908
+ .panel-tb:has(> .panel-acts) > .meta {
909
+ margin-left: 0;
910
+ }
911
+
912
+ .panel-lead .btn,
913
+ .panel-acts .btn {
914
+ color: var(--paper);
915
+ background: var(--ink);
916
+ border-color: var(--paper);
917
+ box-shadow: none;
918
+ }
919
+
920
+ .panel-acts .btn.primary {
921
+ color: var(--ink);
922
+ background: var(--paper);
923
+ }
924
+
925
+ .panel-lead .btn:not([aria-disabled="true"]):active,
926
+ .panel-acts .btn:not([aria-disabled="true"]):active {
927
+ transform: translate(1px, 1px);
928
+ box-shadow: none;
929
+ }
930
+
931
+ .panel-acts .btn:is(:disabled, [aria-disabled="true"]) {
932
+ color: var(--paper);
933
+ background: var(--ink);
934
+ border-color: var(--paper);
935
+ opacity: var(--fade-held);
936
+ }
937
+
938
+ .panel-lead .iconbtn.quiet,
939
+ .panel-acts .iconbtn.quiet {
940
+ color: inherit;
941
+ }
942
+
943
+ .panel-lead .btn:focus-visible,
944
+ .panel-acts .btn:focus-visible {
945
+ outline-color: currentColor;
946
+ outline-offset: -4px;
947
+ }
948
+
949
+ .strip {
950
+ display: flex;
951
+ align-items: center;
952
+ gap: 8px;
953
+ flex-wrap: wrap;
954
+ font-family: var(--font-px);
955
+ font-size: var(--type-state);
956
+ text-transform: uppercase;
957
+ background: var(--paper);
958
+ border: var(--line) solid var(--ink);
959
+ box-shadow: var(--shadow-button);
960
+ padding: 8px 12px;
961
+ }
962
+
963
+ .fchip {
964
+ display: inline-flex;
965
+ align-items: center;
966
+ gap: 6px;
967
+ min-height: 22px;
968
+ font-family: var(--font-px);
969
+ font-size: var(--type-state);
970
+ text-transform: uppercase;
971
+ letter-spacing: var(--tracking-state);
972
+ border: var(--line) solid var(--ink);
973
+ background: var(--paper);
974
+ color: var(--ink);
975
+ padding: 2px 7px;
976
+ flex: none;
977
+ cursor: default;
978
+ }
979
+
980
+ button.fchip {
981
+ cursor: pointer;
982
+ }
983
+
984
+ button.fchip:not([aria-pressed="true"]):hover {
985
+ background: var(--head);
986
+ }
987
+
988
+ button.fchip:active {
989
+ transform: translate(1px, 1px);
990
+ }
991
+
992
+ .fchip .fchip-name {
993
+ color: var(--muted);
994
+ }
995
+
996
+ .fchip.pinned,
997
+ .fchip[aria-pressed="true"] {
998
+ background: var(--ink);
999
+ color: var(--paper);
1000
+ }
1001
+
1002
+ .fchip.pinned .fchip-name,
1003
+ .fchip[aria-pressed="true"] .fchip-name {
1004
+ color: inherit;
1005
+ }
1006
+
1007
+ .fchip.query {
1008
+ cursor: text;
1009
+ isolation: isolate;
1010
+ }
1011
+
1012
+ .fchip.query.live {
1013
+ background: var(--head);
1014
+ }
1015
+
1016
+ .fchip.query input {
1017
+ position: relative;
1018
+ z-index: 1;
1019
+ font: var(--type-control) var(--font-body);
1020
+ color: var(--ink);
1021
+ background: none;
1022
+ border: 0;
1023
+ padding: 0;
1024
+ width: 12ch;
1025
+ field-sizing: content;
1026
+ min-width: 8ch;
1027
+ max-width: 32ch;
1028
+ }
1029
+
1030
+ .fchip.query input::-webkit-search-cancel-button {
1031
+ display: none;
1032
+ }
1033
+
1034
+ .fchip.query input:focus-visible {
1035
+ outline: none;
1036
+ }
1037
+
1038
+ .fchip.query:focus-within {
1039
+ outline: var(--line) solid var(--ink);
1040
+ outline-offset: 2px;
1041
+ }
1042
+
1043
+ .fchip.reset {
1044
+ color: var(--muted);
1045
+ border-color: var(--muted);
1046
+ }
1047
+
1048
+ .fchip.reset:hover {
1049
+ color: var(--ink);
1050
+ border-color: var(--ink);
1051
+ }
1052
+
1053
+ .chip {
1054
+ font-family: var(--font-px);
1055
+ font-size: var(--type-state);
1056
+ text-transform: uppercase;
1057
+ letter-spacing: var(--tracking-state);
1058
+ border: var(--line) solid var(--ink);
1059
+ background: var(--paper);
1060
+ color: var(--ink);
1061
+ padding: 1px 6px;
1062
+ flex: none;
1063
+ white-space: nowrap;
1064
+ }
1065
+
1066
+ .chip.go {
1067
+ background: var(--green);
1068
+ color: var(--on-status);
1069
+ }
1070
+
1071
+ .chip.warn {
1072
+ background: var(--amber);
1073
+ color: var(--on-status);
1074
+ }
1075
+
1076
+ .chip.blocked {
1077
+ color: var(--red);
1078
+ border-color: var(--red);
1079
+ }
1080
+
1081
+ .chip.done {
1082
+ background: var(--head);
1083
+ color: var(--on-head);
1084
+ border-color: var(--muted);
1085
+ }
1086
+
1087
+ .chip-dot {
1088
+ display: inline-block;
1089
+ flex: none;
1090
+ width: 10px;
1091
+ height: 10px;
1092
+ border: var(--line) solid var(--ink);
1093
+ background: transparent;
1094
+ }
1095
+
1096
+ .chip-dot.go {
1097
+ background: var(--green);
1098
+ }
1099
+
1100
+ .chip-dot.warn {
1101
+ background: var(--amber);
1102
+ }
1103
+
1104
+ .chip-dot.blocked {
1105
+ background: var(--red);
1106
+ border-color: var(--red);
1107
+ }
1108
+
1109
+ .chip-dot.done {
1110
+ background: var(--muted);
1111
+ border-color: var(--muted);
1112
+ }
1113
+
1114
+ .row > .chip-dot,
1115
+ .row > .cell > .chip-dot {
1116
+ margin-inline: 4px;
1117
+ }
1118
+
1119
+ .mark {
1120
+ display: inline-flex;
1121
+ align-items: center;
1122
+ justify-content: center;
1123
+ flex: none;
1124
+ padding: 2px;
1125
+ background: var(--amber);
1126
+ color: var(--on-status);
1127
+ border: 0;
1128
+ }
1129
+
1130
+ button.mark {
1131
+ cursor: pointer;
1132
+ }
1133
+
1134
+ .mark.plain {
1135
+ background: none;
1136
+ color: var(--muted);
1137
+ }
1138
+
1139
+ .tag {
1140
+ font-family: var(--font-px);
1141
+ font-size: var(--type-state);
1142
+ color: var(--muted);
1143
+ border: var(--hair) solid var(--rule);
1144
+ padding: 0 5px;
1145
+ flex: none;
1146
+ max-width: 18ch;
1147
+ overflow: hidden;
1148
+ text-overflow: ellipsis;
1149
+ white-space: nowrap;
1150
+ background: none;
1151
+ text-transform: none;
1152
+ letter-spacing: normal;
1153
+ }
1154
+
1155
+ button.tag {
1156
+ cursor: pointer;
1157
+ }
1158
+
1159
+ button.tag:hover {
1160
+ color: var(--ink);
1161
+ border-color: var(--muted);
1162
+ }
1163
+
1164
+ .rows {
1165
+ list-style: none;
1166
+ }
1167
+
1168
+ .tree {
1169
+ padding: 8px 0 14px;
1170
+ }
1171
+
1172
+ .tree ul.rows {
1173
+ position: relative;
1174
+ padding-left: 26px;
1175
+ }
1176
+
1177
+ .tree ul.rows::before {
1178
+ content: "";
1179
+ position: absolute;
1180
+ left: 20px;
1181
+ top: 0;
1182
+ bottom: 4px;
1183
+ width: 1px;
1184
+ background: var(--rule);
1185
+ }
1186
+
1187
+ .row {
1188
+ position: relative;
1189
+ display: flex;
1190
+ align-items: center;
1191
+ gap: 8px;
1192
+ padding: 5px 12px;
1193
+ min-height: var(--row);
1194
+ }
1195
+
1196
+ .row:hover,
1197
+ .row:focus-within {
1198
+ background-color: var(--head);
1199
+ }
1200
+
1201
+ .row .glyph {
1202
+ width: 18px;
1203
+ height: 18px;
1204
+ display: inline-flex;
1205
+ align-items: center;
1206
+ justify-content: center;
1207
+ background: none;
1208
+ border: none;
1209
+ color: var(--muted);
1210
+ padding: 0;
1211
+ flex: none;
1212
+ }
1213
+
1214
+ button.glyph {
1215
+ cursor: pointer;
1216
+ }
1217
+
1218
+ .row:hover button.glyph {
1219
+ color: var(--ink);
1220
+ }
1221
+
1222
+ .row .grow {
1223
+ flex: 1;
1224
+ min-width: 0;
1225
+ overflow: hidden;
1226
+ white-space: nowrap;
1227
+ text-overflow: ellipsis;
1228
+ padding: 4px;
1229
+ margin: -4px;
1230
+ }
1231
+
1232
+ .row .title {
1233
+ font: inherit;
1234
+ background: none;
1235
+ border: none;
1236
+ color: inherit;
1237
+ cursor: pointer;
1238
+ padding: 0;
1239
+ text-align: left;
1240
+ max-width: 100%;
1241
+ overflow: hidden;
1242
+ text-overflow: ellipsis;
1243
+ white-space: nowrap;
1244
+ }
1245
+
1246
+ .row .title:hover {
1247
+ text-decoration: underline;
1248
+ text-underline-offset: 3px;
1249
+ }
1250
+
1251
+ .board-card .title[aria-disabled="true"] {
1252
+ cursor: default;
1253
+ }
1254
+
1255
+ .row .tools {
1256
+ display: inline-flex;
1257
+ align-items: center;
1258
+ gap: 6px;
1259
+ opacity: 0.55;
1260
+ }
1261
+
1262
+ .row:hover .tools,
1263
+ .row:focus-within .tools {
1264
+ opacity: 1;
1265
+ }
1266
+
1267
+ .row > .cell {
1268
+ display: inline-flex;
1269
+ align-items: center;
1270
+ gap: 8px;
1271
+ flex: none;
1272
+ }
1273
+
1274
+ .row > .grow-cell {
1275
+ flex: 1;
1276
+ min-width: 0;
1277
+ }
1278
+
1279
+ .row .slot {
1280
+ min-width: 58px;
1281
+ flex: none;
1282
+ display: inline-flex;
1283
+ align-items: center;
1284
+ justify-content: flex-end;
1285
+ gap: 6px;
1286
+ }
1287
+
1288
+ .row.linked .grow a {
1289
+ color: inherit;
1290
+ text-decoration: none;
1291
+ }
1292
+
1293
+ .row.linked .grow a::after {
1294
+ content: "";
1295
+ position: absolute;
1296
+ inset: 0;
1297
+ }
1298
+
1299
+ .row.linked :is(button, input, select, textarea, [data-tip], .row-check) {
1300
+ position: relative;
1301
+ z-index: 1;
1302
+ }
1303
+
1304
+ .row.linked:not(:has(.grow a[aria-current])):hover .grow a {
1305
+ text-decoration: underline;
1306
+ text-underline-offset: 3px;
1307
+ }
1308
+
1309
+ .row.linked .grow a:focus-visible {
1310
+ outline: 0;
1311
+ }
1312
+
1313
+ .row.linked:has(.grow a:focus-visible) {
1314
+ outline: var(--line) solid var(--ink);
1315
+ outline-offset: -4px;
1316
+ }
1317
+
1318
+ /* each selector is written out, not joined in :is(), so each keeps its own specificity */
1319
+ .row.linked:has(.grow a[aria-current]),
1320
+ .board-card[aria-current="true"] {
1321
+ background-color: var(--ink);
1322
+ color: var(--paper);
1323
+ }
1324
+
1325
+ .row.linked:has(.grow a[aria-current]) .chip-dot {
1326
+ border-color: var(--paper);
1327
+ }
1328
+
1329
+ .row.linked:has(.grow a[aria-current])
1330
+ :is(.glyph, .age, .due, .tag, .done-title, .iconbtn.quiet),
1331
+ .board-card[aria-current="true"]
1332
+ :is(.glyph, .age, .due, .tag, .done-title, .iconbtn.quiet) {
1333
+ color: inherit;
1334
+ opacity: var(--fade-on-ink);
1335
+ }
1336
+
1337
+ .row.linked:has(.grow a[aria-current]) .tag,
1338
+ .board-card[aria-current="true"] .tag {
1339
+ border-color: currentColor;
1340
+ }
1341
+
1342
+ .row.linked:has(.grow a[aria-current]) :is(.due.late, .age.stale),
1343
+ .board-card[aria-current="true"] :is(.due.late, .age.stale) {
1344
+ opacity: 1;
1345
+ background: var(--red);
1346
+ color: var(--on-red);
1347
+ box-shadow: 0 0 0 3px var(--red);
1348
+ }
1349
+
1350
+ .row.linked:has(.grow a[aria-current]) :focus-visible,
1351
+ .row.linked:has(.grow a[aria-current]:focus-visible),
1352
+ .board-card[aria-current="true"] :focus-visible {
1353
+ outline-color: var(--paper);
1354
+ }
1355
+
1356
+ .row[aria-current="true"] {
1357
+ outline: 1px solid var(--muted);
1358
+ outline-offset: -4px;
1359
+ background-color: transparent;
1360
+ }
1361
+
1362
+ .row:focus-visible {
1363
+ outline: var(--line) solid var(--muted);
1364
+ outline-offset: -4px;
1365
+ }
1366
+
1367
+ .row[aria-current="true"] .tools {
1368
+ opacity: 1;
1369
+ }
1370
+
1371
+ @media (max-width: 600px) {
1372
+ .row .tools {
1373
+ display: none;
1374
+ }
1375
+
1376
+ .row .grow,
1377
+ .row .title {
1378
+ white-space: normal;
1379
+ overflow-wrap: anywhere;
1380
+ }
1381
+
1382
+ .row .title {
1383
+ display: -webkit-box;
1384
+ -webkit-line-clamp: 2;
1385
+ -webkit-box-orient: vertical;
1386
+ }
1387
+
1388
+ .row .slot {
1389
+ min-width: 0;
1390
+ }
1391
+ }
1392
+
1393
+ .row-check {
1394
+ position: relative;
1395
+ align-self: stretch;
1396
+ display: flex;
1397
+ align-items: center;
1398
+ flex: none;
1399
+ margin: -5px 0 -5px -12px;
1400
+ padding: 0 10px;
1401
+ }
1402
+
1403
+ .row-check > [role="checkbox"] {
1404
+ appearance: none;
1405
+ width: 14px;
1406
+ height: 14px;
1407
+ padding: 0;
1408
+ border: var(--line) solid var(--ink);
1409
+ background: var(--paper);
1410
+ cursor: pointer;
1411
+ flex: none;
1412
+ display: inline-grid;
1413
+ place-content: center;
1414
+ border-radius: 0;
1415
+ }
1416
+
1417
+ .row-check > [role="checkbox"]::before {
1418
+ content: "";
1419
+ width: 6px;
1420
+ height: 6px;
1421
+ }
1422
+
1423
+ .row-check > [role="checkbox"]::after {
1424
+ content: "";
1425
+ position: absolute;
1426
+ inset: 0;
1427
+ }
1428
+
1429
+ .row label.grow {
1430
+ cursor: pointer;
1431
+ }
1432
+
1433
+ .row-check:has(> [aria-checked="true"]) {
1434
+ background: var(--ink);
1435
+ }
1436
+
1437
+ .row-check > [aria-checked="true"] {
1438
+ border-color: var(--paper);
1439
+ background: var(--ink);
1440
+ }
1441
+
1442
+ .row-check > [aria-checked="true"]::before {
1443
+ background: var(--paper);
1444
+ }
1445
+
1446
+ .row-check > [aria-checked="true"]:focus-visible {
1447
+ outline-color: var(--paper);
1448
+ }
1449
+
1450
+ .row-check > [aria-disabled="true"] {
1451
+ border-color: var(--muted);
1452
+ cursor: default;
1453
+ }
1454
+
1455
+ .row-check > [aria-checked="mixed"]::before {
1456
+ height: 2px;
1457
+ background: var(--ink);
1458
+ }
1459
+
1460
+ input.inline-input {
1461
+ font: inherit;
1462
+ color: inherit;
1463
+ background: var(--paper);
1464
+ border: none;
1465
+ border-bottom: 1px solid var(--ink);
1466
+ padding: 0;
1467
+ width: 100%;
1468
+ height: calc(1lh + 1px);
1469
+ }
1470
+
1471
+ input.inline-input[aria-busy="true"] {
1472
+ color: var(--muted);
1473
+ cursor: progress;
1474
+ }
1475
+
1476
+ input.inline-input[aria-invalid="true"] {
1477
+ border-bottom-color: var(--red);
1478
+ }
1479
+
1480
+ .row .grow input.inline-input:focus-visible {
1481
+ outline: none;
1482
+ box-shadow: inset 0 -1px 0 var(--ink);
1483
+ }
1484
+
1485
+ .row .grow input.inline-input[aria-invalid="true"]:focus-visible {
1486
+ box-shadow: inset 0 -1px 0 var(--red);
1487
+ }
1488
+
1489
+ .flash-word {
1490
+ font-family: var(--font-px);
1491
+ font-size: var(--type-state);
1492
+ text-transform: uppercase;
1493
+ letter-spacing: var(--tracking-title);
1494
+ color: var(--ink);
1495
+ min-width: 6ch;
1496
+ }
1497
+
1498
+ .flash-word:empty {
1499
+ display: none;
1500
+ }
1501
+
1502
+ select,
1503
+ select::picker(select) {
1504
+ appearance: none;
1505
+ appearance: base-select;
1506
+ }
1507
+
1508
+ select {
1509
+ width: 100%;
1510
+ min-height: 30px;
1511
+ padding: 5px 28px 3px 8px;
1512
+ color: var(--ink);
1513
+ background-color: var(--paper);
1514
+ background-image:
1515
+ linear-gradient(45deg, transparent 50%, var(--ink) 50%),
1516
+ linear-gradient(135deg, var(--ink) 50%, transparent 50%);
1517
+ background-position:
1518
+ calc(100% - 9px) 50%,
1519
+ calc(100% - 5px) 50%;
1520
+ background-repeat: no-repeat;
1521
+ background-size: 4px 4px;
1522
+ border: var(--line) solid var(--ink);
1523
+ border-radius: 0;
1524
+ cursor: pointer;
1525
+ font-family: var(--font-px);
1526
+ font-size: var(--type-state);
1527
+ text-transform: none;
1528
+ }
1529
+
1530
+ select::picker-icon {
1531
+ display: none;
1532
+ }
1533
+
1534
+ select::picker(select) {
1535
+ padding: 0;
1536
+ color: var(--ink);
1537
+ background: var(--paper);
1538
+ border: var(--line) solid var(--ink);
1539
+ box-shadow: var(--shadow-panel);
1540
+ }
1541
+
1542
+ select option {
1543
+ padding: 5px 8px 7px;
1544
+ font-family: var(--font-px);
1545
+ font-size: var(--type-state);
1546
+ cursor: pointer;
1547
+ }
1548
+
1549
+ .field :is(input, textarea):disabled,
1550
+ .field.boxed :is(input, textarea):disabled,
1551
+ select:disabled {
1552
+ color: var(--muted);
1553
+ border-color: var(--muted);
1554
+ cursor: default;
1555
+ }
1556
+
1557
+ .field:not(.boxed) :is(input, textarea):disabled {
1558
+ border-bottom-color: transparent;
1559
+ }
1560
+
1561
+ select:disabled {
1562
+ background-image:
1563
+ linear-gradient(45deg, transparent 50%, var(--muted) 50%),
1564
+ linear-gradient(135deg, var(--muted) 50%, transparent 50%);
1565
+ }
1566
+
1567
+ .choice {
1568
+ display: flex;
1569
+ align-items: flex-start;
1570
+ gap: 10px;
1571
+ padding: 6px 0;
1572
+ cursor: pointer;
1573
+ }
1574
+
1575
+ button.choice {
1576
+ appearance: none;
1577
+ font: inherit;
1578
+ color: inherit;
1579
+ text-align: left;
1580
+ background: none;
1581
+ border: 0;
1582
+ }
1583
+
1584
+ .choice .choice-name {
1585
+ font-family: var(--font-px);
1586
+ font-size: var(--type-state);
1587
+ text-transform: uppercase;
1588
+ letter-spacing: var(--tracking-state);
1589
+ }
1590
+
1591
+ .choice .choice-note {
1592
+ display: block;
1593
+ color: var(--muted);
1594
+ font: var(--type-control)/1.45 var(--font-body);
1595
+ }
1596
+
1597
+ .choices {
1598
+ display: grid;
1599
+ gap: 2px;
1600
+ }
1601
+
1602
+ .choice-box {
1603
+ appearance: none;
1604
+ width: 14px;
1605
+ height: 14px;
1606
+ margin-top: 2px;
1607
+ padding: 0;
1608
+ border: var(--line) solid var(--ink);
1609
+ background: var(--paper);
1610
+ cursor: pointer;
1611
+ flex: none;
1612
+ display: inline-grid;
1613
+ place-content: center;
1614
+ border-radius: 0;
1615
+ }
1616
+
1617
+ .choice-box::before {
1618
+ content: "";
1619
+ width: 6px;
1620
+ height: 6px;
1621
+ }
1622
+
1623
+ .choice[role="radio"] > .choice-box::before {
1624
+ clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
1625
+ width: 8px;
1626
+ height: 8px;
1627
+ }
1628
+
1629
+ .choice-box[aria-checked="true"]::before,
1630
+ .choice[role="radio"][aria-checked="true"] > .choice-box::before {
1631
+ background: var(--ink);
1632
+ }
1633
+
1634
+ .choice-box[aria-disabled="true"],
1635
+ .choice[role="radio"][aria-disabled="true"] > .choice-box {
1636
+ border-color: var(--muted);
1637
+ cursor: default;
1638
+ }
1639
+
1640
+ .choice:has(> .choice-box[aria-disabled="true"]),
1641
+ .choice[role="radio"][aria-disabled="true"] {
1642
+ color: var(--muted);
1643
+ cursor: default;
1644
+ }
1645
+
1646
+ .field > label:not(.choice),
1647
+ .field-label {
1648
+ display: block;
1649
+ font-family: var(--font-px);
1650
+ font-size: var(--type-label);
1651
+ text-transform: uppercase;
1652
+ letter-spacing: var(--tracking-label);
1653
+ color: var(--muted);
1654
+ margin-bottom: 4px;
1655
+ }
1656
+
1657
+ .field input,
1658
+ .field textarea {
1659
+ width: 100%;
1660
+ font: inherit;
1661
+ color: var(--ink);
1662
+ background: var(--paper);
1663
+ border: none;
1664
+ border-bottom: 1px dotted var(--muted);
1665
+ padding: 2px 0;
1666
+ border-radius: 0;
1667
+ }
1668
+
1669
+ .field textarea {
1670
+ resize: vertical;
1671
+ field-sizing: content;
1672
+ min-height: 96px;
1673
+ font: var(--type-body)/1.5 var(--font-body);
1674
+ }
1675
+
1676
+ textarea::-webkit-resizer {
1677
+ background: linear-gradient(135deg, transparent 0 50%, var(--ink) 50% 100%);
1678
+ }
1679
+
1680
+ .field input:focus-visible,
1681
+ .field textarea:focus-visible {
1682
+ outline: none;
1683
+ border-bottom: var(--line) solid var(--ink);
1684
+ padding-bottom: 1px;
1685
+ }
1686
+
1687
+ .field input[aria-invalid="true"],
1688
+ .field textarea[aria-invalid="true"] {
1689
+ border-bottom: 2px solid var(--red);
1690
+ padding-bottom: 1px;
1691
+ }
1692
+
1693
+ .field:has([aria-invalid="true"]) > label {
1694
+ color: var(--red);
1695
+ }
1696
+
1697
+ .field .field-help,
1698
+ .field .field-error {
1699
+ margin-top: 4px;
1700
+ font: var(--type-control)/1.45 var(--font-body);
1701
+ color: var(--muted);
1702
+ }
1703
+
1704
+ .field .field-error {
1705
+ color: var(--red);
1706
+ }
1707
+
1708
+ .field-grid {
1709
+ display: grid;
1710
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1711
+ gap: 12px 16px;
1712
+ }
1713
+
1714
+ .field.boxed input,
1715
+ .field.boxed textarea {
1716
+ border: var(--line) solid var(--ink);
1717
+ padding: 5px 8px;
1718
+ }
1719
+
1720
+ .field.boxed input:focus-visible,
1721
+ .field.boxed textarea:focus-visible {
1722
+ outline: var(--line) solid var(--ink);
1723
+ outline-offset: 2px;
1724
+ border-bottom: var(--line) solid var(--ink);
1725
+ padding-bottom: 5px;
1726
+ }
1727
+
1728
+ .field.boxed :is(input, textarea)[aria-invalid="true"] {
1729
+ border-color: var(--red);
1730
+ padding-bottom: 5px;
1731
+ }
1732
+
1733
+ .password {
1734
+ display: grid;
1735
+ }
1736
+
1737
+ .password > * {
1738
+ grid-area: 1 / 1;
1739
+ }
1740
+
1741
+ .password > .iconbtn {
1742
+ justify-self: end;
1743
+ align-self: center;
1744
+ margin-right: 4px;
1745
+ }
1746
+
1747
+ .field.boxed .password > input {
1748
+ padding-right: 32px;
1749
+ }
1750
+
1751
+ .field.boxed input[type="date"] {
1752
+ min-height: 30px;
1753
+ padding: 3px 8px;
1754
+ font-family: var(--font-px);
1755
+ font-size: var(--type-state);
1756
+ }
1757
+
1758
+ .field.mono input,
1759
+ .field.mono textarea {
1760
+ font-family: var(--font-code);
1761
+ font-size: var(--type-control);
1762
+ }
1763
+
1764
+ .notice {
1765
+ white-space: normal;
1766
+ overflow-wrap: anywhere;
1767
+ display: flex;
1768
+ align-items: flex-start;
1769
+ gap: 10px;
1770
+ padding: 8px 10px;
1771
+ border: var(--line) solid var(--ink);
1772
+ background: var(--paper);
1773
+ font: var(--type-control)/1.45 var(--font-body);
1774
+ }
1775
+
1776
+ .notice > div {
1777
+ flex: 1;
1778
+ min-width: 0;
1779
+ }
1780
+
1781
+ .notice.error {
1782
+ border-color: var(--red);
1783
+ }
1784
+
1785
+ .notice.quiet {
1786
+ border-color: var(--rule);
1787
+ color: var(--muted);
1788
+ }
1789
+
1790
+ .notice strong {
1791
+ font-family: var(--font-px);
1792
+ font-size: var(--type-state);
1793
+ text-transform: uppercase;
1794
+ letter-spacing: var(--tracking-head);
1795
+ font-weight: 400;
1796
+ display: block;
1797
+ }
1798
+
1799
+ :is(.notice, .outcome, .banner) > .glyph {
1800
+ flex: none;
1801
+ width: 20px;
1802
+ height: 20px;
1803
+ border: var(--line) solid var(--ink);
1804
+ display: grid;
1805
+ place-items: center;
1806
+ background: var(--amber);
1807
+ color: var(--on-status);
1808
+ }
1809
+
1810
+ :is(.notice, .outcome, .banner) > .glyph.error {
1811
+ background: var(--red);
1812
+ color: var(--on-red);
1813
+ border-color: var(--red);
1814
+ }
1815
+
1816
+ :is(.notice, .outcome, .banner) > .glyph.ok {
1817
+ background: var(--ink);
1818
+ color: var(--paper);
1819
+ }
1820
+
1821
+ :is(.notice, .outcome, .banner) > .glyph.quiet {
1822
+ background: var(--head);
1823
+ color: var(--on-head);
1824
+ border-color: var(--rule);
1825
+ }
1826
+
1827
+ select[aria-invalid="true"] {
1828
+ border-color: var(--red);
1829
+ }
1830
+
1831
+ .field:has([aria-invalid="true"]) > legend {
1832
+ color: var(--red);
1833
+ }
1834
+
1835
+ .error-summary ul {
1836
+ list-style: none;
1837
+ margin-top: 4px;
1838
+ display: grid;
1839
+ gap: 7px;
1840
+ }
1841
+
1842
+ .error-summary a {
1843
+ color: var(--ink);
1844
+ text-decoration: underline;
1845
+ text-decoration-thickness: 1px;
1846
+ text-underline-offset: 3px;
1847
+ }
1848
+
1849
+ .error-summary a:hover {
1850
+ text-decoration-thickness: 2px;
1851
+ }
1852
+
1853
+ .table-wrap {
1854
+ overflow-x: auto;
1855
+ }
1856
+
1857
+ .table {
1858
+ width: 100%;
1859
+ border-collapse: collapse;
1860
+ font-size: var(--type-body);
1861
+ }
1862
+
1863
+ .table th {
1864
+ font-family: var(--font-px);
1865
+ font-size: var(--type-label);
1866
+ font-weight: 400;
1867
+ text-transform: uppercase;
1868
+ letter-spacing: var(--tracking-label);
1869
+ color: var(--on-head);
1870
+ background: var(--head);
1871
+ text-align: left;
1872
+ padding: 6px 12px;
1873
+ border-bottom: var(--hair) solid var(--rule);
1874
+ white-space: nowrap;
1875
+ }
1876
+
1877
+ .table td {
1878
+ padding: 8px 12px;
1879
+ border-bottom: var(--hair) solid var(--rule);
1880
+ vertical-align: middle;
1881
+ }
1882
+
1883
+ .table tbody tr:last-child td {
1884
+ border-bottom: 0;
1885
+ }
1886
+
1887
+ .table tbody tr:hover {
1888
+ background: var(--head);
1889
+ }
1890
+
1891
+ .table td.acts {
1892
+ text-align: right;
1893
+ white-space: nowrap;
1894
+ }
1895
+
1896
+ .table td.acts,
1897
+ .table:has(td.acts) th:last-child {
1898
+ position: sticky;
1899
+ right: 0;
1900
+ background: var(--paper);
1901
+ }
1902
+
1903
+ .table:has(td.acts) th:last-child {
1904
+ background: var(--head);
1905
+ }
1906
+
1907
+ .table tbody tr:hover td.acts {
1908
+ background: var(--head);
1909
+ }
1910
+
1911
+ @media (max-width: 600px) {
1912
+ /* a box-shadow, not a border: collapsed table borders paint with the table and stay
1913
+ behind when the cell sticks; the inset shadow travels with the cell */
1914
+ .table td.acts,
1915
+ .table:has(td.acts) th:last-child {
1916
+ box-shadow: inset 2px 0 0 var(--ink);
1917
+ padding-left: 10px;
1918
+ }
1919
+ }
1920
+
1921
+ .table td.acts .btn + .btn {
1922
+ margin-left: 8px;
1923
+ }
1924
+
1925
+ @media (max-width: 600px) {
1926
+ .table thead {
1927
+ display: none;
1928
+ }
1929
+
1930
+ .table,
1931
+ .table tbody,
1932
+ .table tr,
1933
+ .table td {
1934
+ display: block;
1935
+ width: 100%;
1936
+ }
1937
+
1938
+ .table tr {
1939
+ padding: 10px 12px;
1940
+ border-bottom: var(--hair) solid var(--rule);
1941
+ }
1942
+
1943
+ .table tbody tr:last-child {
1944
+ border-bottom: 0;
1945
+ }
1946
+
1947
+ .table td,
1948
+ .table td.acts {
1949
+ position: static;
1950
+ box-shadow: none;
1951
+ background: none;
1952
+ border: 0;
1953
+ padding: 2px 0;
1954
+ text-align: left;
1955
+ white-space: normal;
1956
+ overflow-wrap: anywhere;
1957
+ }
1958
+
1959
+ .table td[data-label]::before {
1960
+ content: attr(data-label);
1961
+ display: block;
1962
+ font-family: var(--font-px);
1963
+ font-size: var(--type-label);
1964
+ text-transform: uppercase;
1965
+ letter-spacing: var(--tracking-label);
1966
+ color: var(--muted);
1967
+ }
1968
+
1969
+ .table td.acts {
1970
+ padding-top: 8px;
1971
+ }
1972
+ }
1973
+
1974
+ .props {
1975
+ display: grid;
1976
+ grid-template-columns: max-content minmax(0, max-content) minmax(
1977
+ max-content,
1978
+ 1fr
1979
+ );
1980
+ align-items: stretch;
1981
+ }
1982
+
1983
+ .props > div {
1984
+ display: contents;
1985
+ }
1986
+
1987
+ .props dt,
1988
+ .props dd {
1989
+ padding: 7px 0;
1990
+ border-bottom: var(--hair) solid var(--rule);
1991
+ min-height: var(--row);
1992
+ display: flex;
1993
+ align-items: center;
1994
+ }
1995
+
1996
+ .props dt {
1997
+ padding-right: 16px;
1998
+ }
1999
+
2000
+ .props dd.acts {
2001
+ padding-left: 16px;
2002
+ }
2003
+
2004
+ .props > div:last-child dt,
2005
+ .props > div:last-child dd {
2006
+ border-bottom: 0;
2007
+ }
2008
+
2009
+ .props dt {
2010
+ font-family: var(--font-px);
2011
+ font-size: var(--type-label);
2012
+ text-transform: uppercase;
2013
+ letter-spacing: var(--tracking-label);
2014
+ color: var(--muted);
2015
+ }
2016
+
2017
+ .props dd {
2018
+ min-width: 0;
2019
+ overflow: hidden;
2020
+ }
2021
+
2022
+ @media (max-width: 600px) {
2023
+ .props {
2024
+ grid-template-columns: minmax(0, 1fr) auto;
2025
+ }
2026
+
2027
+ .props dt {
2028
+ grid-column: 1 / -1;
2029
+ min-height: 0;
2030
+ padding: 8px 0 0;
2031
+ border-bottom: 0;
2032
+ }
2033
+ }
2034
+
2035
+ .props dd code {
2036
+ overflow: hidden;
2037
+ text-overflow: ellipsis;
2038
+ white-space: nowrap;
2039
+ background: var(--head);
2040
+ padding: 1px 6px;
2041
+ }
2042
+
2043
+ .code-surface {
2044
+ display: block;
2045
+ width: 100%;
2046
+ font: var(--type-control)/1.6 var(--font-code);
2047
+ color: var(--ink);
2048
+ background: var(--head);
2049
+ border: var(--line) solid var(--ink);
2050
+ padding: 10px 12px;
2051
+ resize: vertical;
2052
+ min-height: 220px;
2053
+ tab-size: 2;
2054
+ white-space: pre;
2055
+ overflow: auto;
2056
+ }
2057
+
2058
+ textarea.code-surface {
2059
+ field-sizing: content;
2060
+ max-height: 60vh;
2061
+ }
2062
+
2063
+ @media (max-width: 600px) {
2064
+ textarea.code-surface {
2065
+ white-space: pre-wrap;
2066
+ overflow-wrap: anywhere;
2067
+ }
2068
+ }
2069
+
2070
+ pre.code-surface {
2071
+ min-height: 0;
2072
+ margin: 0;
2073
+ resize: none;
2074
+ white-space: pre-wrap;
2075
+ overflow-wrap: anywhere;
2076
+ }
2077
+
2078
+ /* syntax: the tok-* classes a highlighter prints (Lezer's classHighlighter names them so),
2079
+ coloured from the content inks. Anything unnamed stays ink. */
2080
+ .tok-keyword {
2081
+ color: var(--code-keyword);
2082
+ }
2083
+
2084
+ .tok-string,
2085
+ .tok-string2,
2086
+ .tok-url {
2087
+ color: var(--code-string);
2088
+ }
2089
+
2090
+ .tok-number,
2091
+ .tok-bool,
2092
+ .tok-atom,
2093
+ .tok-literal {
2094
+ color: var(--code-number);
2095
+ }
2096
+
2097
+ .tok-definition,
2098
+ .tok-variableName2,
2099
+ .tok-macroName,
2100
+ .tok-link {
2101
+ color: var(--code-function);
2102
+ }
2103
+
2104
+ .tok-typeName,
2105
+ .tok-className,
2106
+ .tok-namespace {
2107
+ color: var(--code-type);
2108
+ }
2109
+
2110
+ .tok-comment,
2111
+ .tok-meta,
2112
+ .tok-punctuation {
2113
+ color: var(--code-comment);
2114
+ }
2115
+
2116
+ .tok-heading,
2117
+ .tok-strong {
2118
+ font-weight: 700;
2119
+ }
2120
+
2121
+ .tok-emphasis {
2122
+ font-style: italic;
2123
+ }
2124
+
2125
+ .tok-link {
2126
+ text-decoration: underline;
2127
+ text-underline-offset: 3px;
2128
+ }
2129
+
2130
+ .tok-inserted {
2131
+ color: var(--term-green);
2132
+ }
2133
+
2134
+ .tok-deleted,
2135
+ .tok-invalid {
2136
+ color: var(--term-red);
2137
+ }
2138
+
2139
+ .tok-invalid {
2140
+ text-decoration: underline dotted;
2141
+ }
2142
+
2143
+ .secret {
2144
+ display: flex;
2145
+ align-items: center;
2146
+ gap: 10px;
2147
+ border: var(--line) solid var(--ink);
2148
+ background: var(--head);
2149
+ padding: 6px 6px 6px 12px;
2150
+ }
2151
+
2152
+ .secret code {
2153
+ flex: 1;
2154
+ min-width: 0;
2155
+ overflow-x: auto;
2156
+ white-space: nowrap;
2157
+ font-size: var(--type-control);
2158
+ letter-spacing: 0.02em;
2159
+ }
2160
+
2161
+ @media (max-width: 600px) {
2162
+ .secret code {
2163
+ white-space: normal;
2164
+ overflow-wrap: anywhere;
2165
+ }
2166
+ }
2167
+
2168
+ .history-list {
2169
+ list-style: none;
2170
+ border-top: var(--hair) solid var(--rule);
2171
+ }
2172
+
2173
+ .history-list li {
2174
+ display: flex;
2175
+ align-items: center;
2176
+ gap: 12px;
2177
+ padding: 8px 0;
2178
+ border-bottom: var(--hair) solid var(--rule);
2179
+ }
2180
+
2181
+ .history-list li:last-child {
2182
+ border-bottom: 0;
2183
+ }
2184
+
2185
+ .history-list .v {
2186
+ font-family: var(--font-px);
2187
+ font-size: var(--type-state);
2188
+ width: calc(4ch + 8px);
2189
+ padding: 0 4px;
2190
+ flex: none;
2191
+ }
2192
+
2193
+ .history-list .who {
2194
+ font-family: var(--font-px);
2195
+ font-size: var(--type-label);
2196
+ color: var(--muted);
2197
+ flex: none;
2198
+ width: 10ch;
2199
+ max-width: 16ch;
2200
+ overflow: hidden;
2201
+ text-overflow: ellipsis;
2202
+ white-space: nowrap;
2203
+ }
2204
+
2205
+ .history-list .what {
2206
+ flex: 1;
2207
+ min-width: 0;
2208
+ overflow: hidden;
2209
+ text-overflow: ellipsis;
2210
+ white-space: nowrap;
2211
+ }
2212
+
2213
+ .history-list li.current .v {
2214
+ background: var(--ink);
2215
+ color: var(--paper);
2216
+ }
2217
+
2218
+ .history-list li.current .v .age {
2219
+ color: inherit;
2220
+ }
2221
+
2222
+ .save-row {
2223
+ display: flex;
2224
+ align-items: center;
2225
+ gap: 12px;
2226
+ flex-wrap: wrap;
2227
+ }
2228
+
2229
+ .save-row .push {
2230
+ margin-left: auto;
2231
+ display: inline-flex;
2232
+ align-items: center;
2233
+ gap: 12px;
2234
+ }
2235
+
2236
+ .diff-wrap {
2237
+ overflow-x: auto;
2238
+ border: var(--line) solid var(--ink);
2239
+ background: var(--paper);
2240
+ padding: 4px 0;
2241
+ }
2242
+
2243
+ .diff {
2244
+ width: 100%;
2245
+ border-collapse: collapse;
2246
+ font: var(--type-control)/1.6 var(--font-code);
2247
+ }
2248
+
2249
+ .diff td {
2250
+ padding: 0 8px;
2251
+ vertical-align: top;
2252
+ white-space: nowrap;
2253
+ }
2254
+
2255
+ .diff td.line {
2256
+ white-space: pre;
2257
+ }
2258
+
2259
+ .diff td.ln {
2260
+ width: 1%;
2261
+ text-align: right;
2262
+ font-family: var(--font-px);
2263
+ font-size: var(--type-label);
2264
+ line-height: 19px;
2265
+ color: var(--muted);
2266
+ border-right: var(--hair) solid var(--rule);
2267
+ user-select: none;
2268
+ }
2269
+
2270
+ .diff td.sign {
2271
+ width: 1%;
2272
+ padding: 0 4px 0 8px;
2273
+ font-family: var(--font-px);
2274
+ user-select: none;
2275
+ }
2276
+
2277
+ .diff tr.add {
2278
+ background: var(--head);
2279
+ }
2280
+
2281
+ .diff tr.add td.sign {
2282
+ color: var(--ink);
2283
+ }
2284
+
2285
+ .diff tr.add td.ln {
2286
+ color: var(--on-head);
2287
+ }
2288
+
2289
+ .diff tr.del td.line {
2290
+ color: var(--muted);
2291
+ }
2292
+
2293
+ .diff tr.del td.sign {
2294
+ color: var(--red);
2295
+ }
2296
+
2297
+ .diff tr.fold td {
2298
+ font-family: var(--font-px);
2299
+ font-size: var(--type-label);
2300
+ text-transform: uppercase;
2301
+ letter-spacing: var(--tracking-title);
2302
+ color: var(--on-head);
2303
+ background: var(--head);
2304
+ border-top: var(--hair) solid var(--rule);
2305
+ border-bottom: var(--hair) solid var(--rule);
2306
+ padding: 2px 12px;
2307
+ }
2308
+
2309
+ @media (max-width: 600px) {
2310
+ .diff td.line {
2311
+ white-space: pre-wrap;
2312
+ overflow-wrap: anywhere;
2313
+ }
2314
+ }
2315
+
2316
+ /* A dialog opens with show(), in place: Foldkit's Dialog makes the page around it inert and
2317
+ hidden from screen readers, and sets its fixed, full-viewport box inline. The veil is an
2318
+ element of its own (.veil-backdrop) under the pad; the pad lets a press through to it
2319
+ everywhere but on the card it holds, and a press on the veil closes the dialog. */
2320
+ dialog.veil {
2321
+ color: inherit;
2322
+ overflow-y: auto;
2323
+ }
2324
+
2325
+ dialog.veil:focus {
2326
+ outline: none;
2327
+ }
2328
+
2329
+ /* out of the top layer, a dialog's z-index counts inside its nearest stacking context, and a
2330
+ fixed frame is one: while a bench or a stage holds an open dialog the frame itself is lifted,
2331
+ over the bars (40), the rail and its splitter, a banner (150) and a slip (200), as a dialog
2332
+ in the page's flow already prints over them. Lifted only then: at rest the rail's splitter
2333
+ lies over the frame's edge and a slip from its head prints over it */
2334
+ :is(.bench, .stage):has(dialog.veil[open]) {
2335
+ z-index: 250;
2336
+ }
2337
+
2338
+ .veil-pad {
2339
+ position: relative;
2340
+ min-height: 100%;
2341
+ display: grid;
2342
+ place-items: center;
2343
+ padding: 24px;
2344
+ pointer-events: none;
2345
+ }
2346
+
2347
+ .veil-pad > * {
2348
+ pointer-events: auto;
2349
+ }
2350
+
2351
+ .veil-pad.top {
2352
+ align-items: start;
2353
+ padding-top: 18vh;
2354
+ }
2355
+
2356
+ .veil-backdrop {
2357
+ position: fixed;
2358
+ inset: 0;
2359
+ background: var(--veil-grain), var(--veil);
2360
+ animation: veilIn var(--motion-veil) steps(3, end);
2361
+ }
2362
+
2363
+ @keyframes veilIn {
2364
+ from {
2365
+ opacity: 0;
2366
+ }
2367
+ }
2368
+
2369
+ .card {
2370
+ background: var(--paper);
2371
+ border: var(--line) solid var(--ink);
2372
+ box-shadow: var(--shadow-card);
2373
+ width: min(680px, 100%);
2374
+ animation: cardIn var(--motion-card) steps(3, end);
2375
+ max-height: calc(100vh - 48px);
2376
+ display: flex;
2377
+ flex-direction: column;
2378
+ }
2379
+
2380
+ .card.narrow {
2381
+ width: min(440px, 100%);
2382
+ }
2383
+
2384
+ @keyframes cardIn {
2385
+ from {
2386
+ transform: scale(0.97);
2387
+ opacity: 0;
2388
+ }
2389
+ }
2390
+
2391
+ .card-tb {
2392
+ display: flex;
2393
+ align-items: center;
2394
+ gap: 10px;
2395
+ background: var(--ink);
2396
+ color: var(--paper);
2397
+ padding: 6px 8px 6px 12px;
2398
+ font-family: var(--font-px);
2399
+ flex: none;
2400
+ }
2401
+
2402
+ .card-tb h2 {
2403
+ font-size: var(--type-body);
2404
+ font-weight: 400;
2405
+ text-transform: uppercase;
2406
+ letter-spacing: var(--tracking-head);
2407
+ flex: 1;
2408
+ overflow: hidden;
2409
+ text-overflow: ellipsis;
2410
+ white-space: nowrap;
2411
+ }
2412
+
2413
+ .card-tb .meta {
2414
+ font-size: var(--type-state);
2415
+ color: inherit;
2416
+ opacity: var(--fade-on-ink);
2417
+ }
2418
+
2419
+ :is(.card-tb, .panel-tb) .iconbtn[aria-disabled="true"] {
2420
+ opacity: var(--fade-held);
2421
+ cursor: default;
2422
+ }
2423
+
2424
+ :is(.panel-tb, .card-tb) :focus-visible {
2425
+ outline-color: var(--paper);
2426
+ outline-offset: -2px;
2427
+ }
2428
+
2429
+ .card-body {
2430
+ overflow-wrap: break-word;
2431
+ padding: var(--pad);
2432
+ display: grid;
2433
+ gap: var(--space-m);
2434
+ overflow-y: auto;
2435
+ }
2436
+
2437
+ .card-body > * {
2438
+ min-width: 0;
2439
+ }
2440
+
2441
+ .card-actions {
2442
+ display: flex;
2443
+ align-items: center;
2444
+ gap: 12px;
2445
+ padding: 12px 16px;
2446
+ border-top: var(--line) solid var(--ink);
2447
+ flex: none;
2448
+ flex-wrap: wrap;
2449
+ }
2450
+
2451
+ .card-acts {
2452
+ display: flex;
2453
+ flex-wrap: wrap;
2454
+ justify-content: flex-end;
2455
+ align-items: center;
2456
+ gap: 12px;
2457
+ margin-left: auto;
2458
+ }
2459
+
2460
+ .outcome {
2461
+ display: flex;
2462
+ gap: 14px;
2463
+ align-items: flex-start;
2464
+ }
2465
+
2466
+ .outcome > .glyph {
2467
+ width: 34px;
2468
+ height: 34px;
2469
+ }
2470
+
2471
+ .outcome-body {
2472
+ display: grid;
2473
+ grid-template-columns: minmax(0, 1fr);
2474
+ gap: 4px;
2475
+ min-width: 0;
2476
+ }
2477
+
2478
+ .outcome-body > strong {
2479
+ overflow-wrap: anywhere;
2480
+ font-family: var(--font-px);
2481
+ font-size: var(--type-control);
2482
+ text-transform: uppercase;
2483
+ letter-spacing: var(--tracking-head);
2484
+ font-weight: 400;
2485
+ }
2486
+
2487
+ .outcome-body > p {
2488
+ max-width: 52ch;
2489
+ overflow-wrap: anywhere;
2490
+ }
2491
+
2492
+ .outcome-body > p + * {
2493
+ margin-top: 8px;
2494
+ }
2495
+
2496
+ .keymap {
2497
+ display: grid;
2498
+ gap: 14px;
2499
+ }
2500
+
2501
+ .keymap h3 {
2502
+ font-family: var(--font-px);
2503
+ font-size: var(--type-label);
2504
+ font-weight: 400;
2505
+ text-transform: uppercase;
2506
+ letter-spacing: var(--tracking-label);
2507
+ color: var(--muted);
2508
+ margin: 0 0 4px;
2509
+ }
2510
+
2511
+ .keymap-row {
2512
+ display: flex;
2513
+ align-items: baseline;
2514
+ gap: 16px;
2515
+ padding: 4px 0;
2516
+ border-bottom: var(--hair) solid var(--rule);
2517
+ }
2518
+
2519
+ .keymap-row:last-child {
2520
+ border-bottom: 0;
2521
+ }
2522
+
2523
+ .keymap-row kbd {
2524
+ font-family: var(--font-px);
2525
+ font-size: var(--type-state);
2526
+ flex: none;
2527
+ width: 12ch;
2528
+ }
2529
+
2530
+ .keymap-row span {
2531
+ font-family: var(--font-px);
2532
+ font-size: var(--type-state);
2533
+ color: var(--muted);
2534
+ }
2535
+
2536
+ .palette-q {
2537
+ display: flex;
2538
+ flex-wrap: wrap;
2539
+ align-items: center;
2540
+ gap: 8px;
2541
+ padding: 12px 16px 8px;
2542
+ flex: none;
2543
+ }
2544
+
2545
+ .palette-q input {
2546
+ flex: 1 1 14ch;
2547
+ width: auto;
2548
+ min-width: 0;
2549
+ }
2550
+
2551
+ .palette-scope {
2552
+ font-family: var(--font-px);
2553
+ font-size: var(--type-label);
2554
+ color: var(--muted);
2555
+ border: var(--hair) solid var(--rule);
2556
+ padding: 1px 5px;
2557
+ flex: 0 1 auto;
2558
+ min-width: 0;
2559
+ overflow-wrap: anywhere;
2560
+ }
2561
+
2562
+ .palette-title {
2563
+ font-family: var(--font-px);
2564
+ font-size: var(--type-label);
2565
+ text-transform: uppercase;
2566
+ letter-spacing: var(--tracking-label);
2567
+ flex: none;
2568
+ }
2569
+
2570
+ .palette-list {
2571
+ overflow-y: auto;
2572
+ padding: 4px 0 8px;
2573
+ max-height: min(50vh, 420px);
2574
+ }
2575
+
2576
+ .palette-group {
2577
+ padding: 8px 16px 2px;
2578
+ font-family: var(--font-px);
2579
+ font-size: var(--type-label);
2580
+ text-transform: uppercase;
2581
+ letter-spacing: var(--tracking-label);
2582
+ color: var(--muted);
2583
+ }
2584
+
2585
+ .palette-row {
2586
+ display: flex;
2587
+ align-items: center;
2588
+ gap: 10px;
2589
+ width: 100%;
2590
+ padding: 8px 16px 8px
2591
+ calc(16px + min((var(--palette-level, 1) - 1) * 20px, 33%));
2592
+ font-family: var(--font-px);
2593
+ font-size: var(--type-control);
2594
+ text-transform: uppercase;
2595
+ letter-spacing: var(--tracking-caps);
2596
+ cursor: pointer;
2597
+ background: none;
2598
+ border: 0;
2599
+ color: inherit;
2600
+ text-align: left;
2601
+ }
2602
+
2603
+ .palette-row[aria-disabled="true"] {
2604
+ color: var(--muted);
2605
+ cursor: default;
2606
+ }
2607
+
2608
+ .palette-row[aria-selected="true"] {
2609
+ background: var(--ink);
2610
+ color: var(--paper);
2611
+ }
2612
+
2613
+ .palette-row:hover:not([aria-selected="true"]) {
2614
+ background-color: var(--head);
2615
+ }
2616
+
2617
+ .palette-row.context:not([aria-selected="true"]) {
2618
+ color: var(--muted);
2619
+ }
2620
+
2621
+ .palette-row .hint {
2622
+ margin-left: auto;
2623
+ font-size: var(--type-state);
2624
+ text-transform: none;
2625
+ color: var(--muted);
2626
+ flex: 0 1 auto;
2627
+ min-width: 0;
2628
+ max-width: 50%;
2629
+ white-space: normal;
2630
+ overflow-wrap: anywhere;
2631
+ }
2632
+
2633
+ .palette-label {
2634
+ flex: 1;
2635
+ min-width: 0;
2636
+ white-space: normal;
2637
+ overflow-wrap: anywhere;
2638
+ }
2639
+
2640
+ .palette-row[aria-selected="true"] .hint,
2641
+ .palette-row[aria-selected="true"] .tag {
2642
+ color: inherit;
2643
+ opacity: var(--fade-on-ink);
2644
+ }
2645
+
2646
+ .palette-row[aria-selected="true"] .tag {
2647
+ border-color: currentColor;
2648
+ }
2649
+
2650
+ .palette-row.authored {
2651
+ font-family: var(--font-body);
2652
+ font-size: var(--type-body);
2653
+ text-transform: none;
2654
+ letter-spacing: normal;
2655
+ }
2656
+
2657
+ .palette-row.authored .glyph {
2658
+ color: var(--muted);
2659
+ display: inline-flex;
2660
+ }
2661
+
2662
+ .palette-row[aria-selected="true"] .glyph {
2663
+ color: inherit;
2664
+ }
2665
+
2666
+ .palette-row .glyph.opens {
2667
+ display: inline-flex;
2668
+ color: var(--muted);
2669
+ }
2670
+
2671
+ .palette-row:has(.hint) .glyph.opens {
2672
+ margin-left: -4px;
2673
+ }
2674
+
2675
+ .palette-row:not(:has(.hint)) .glyph.opens {
2676
+ margin-left: auto;
2677
+ }
2678
+
2679
+ .palette-detail {
2680
+ display: grid;
2681
+ gap: 8px;
2682
+ padding: 4px 16px 4px;
2683
+ }
2684
+
2685
+ .palette-more {
2686
+ flex: none;
2687
+ border-top: var(--hair) solid var(--rule);
2688
+ padding: 4px 16px 8px;
2689
+ font-family: var(--font-px);
2690
+ font-size: var(--type-state);
2691
+ color: var(--muted);
2692
+ }
2693
+
2694
+ .empty {
2695
+ padding: 26px 16px;
2696
+ text-align: center;
2697
+ display: grid;
2698
+ gap: 6px;
2699
+ justify-items: center;
2700
+ }
2701
+
2702
+ .empty-title {
2703
+ font-family: var(--font-px);
2704
+ font-size: var(--type-control);
2705
+ text-transform: uppercase;
2706
+ letter-spacing: var(--tracking-title);
2707
+ font-weight: 400;
2708
+ }
2709
+
2710
+ .empty p {
2711
+ color: var(--muted);
2712
+ max-width: 46ch;
2713
+ }
2714
+
2715
+ .empty .btn {
2716
+ margin-top: 6px;
2717
+ }
2718
+
2719
+ .banner {
2720
+ position: fixed;
2721
+ bottom: calc(var(--statusbar-h) + 16px);
2722
+ left: 50%;
2723
+ transform: translateX(-50%);
2724
+ z-index: 150;
2725
+ display: flex;
2726
+ align-items: center;
2727
+ gap: 14px;
2728
+ background: var(--paper);
2729
+ border: var(--line) solid var(--ink);
2730
+ box-shadow: var(--shadow-button);
2731
+ padding: 8px 14px;
2732
+ max-width: min(680px, calc(100vw - 32px));
2733
+ }
2734
+
2735
+ .banner > .glyph {
2736
+ width: 26px;
2737
+ height: 26px;
2738
+ }
2739
+
2740
+ .wall {
2741
+ min-height: 100vh;
2742
+ display: grid;
2743
+ place-items: center;
2744
+ padding: 24px;
2745
+ }
2746
+
2747
+ .wall .card {
2748
+ animation: none;
2749
+ }
2750
+
2751
+ .wall-mark {
2752
+ display: flex;
2753
+ align-items: center;
2754
+ gap: 12px;
2755
+ }
2756
+
2757
+ .wall-mark .wordmark {
2758
+ font-size: var(--type-wordmark-wall);
2759
+ }
2760
+
2761
+ .wall-mark .glyph {
2762
+ width: 30px;
2763
+ height: 30px;
2764
+ border: var(--line) solid var(--ink);
2765
+ display: grid;
2766
+ place-items: center;
2767
+ background: var(--paper);
2768
+ color: var(--ink);
2769
+ }
2770
+
2771
+ .card-body > .rows {
2772
+ margin-inline: calc(-1 * var(--pad));
2773
+ border-block: var(--hair) solid var(--rule);
2774
+ }
2775
+
2776
+ .row .grow > .identity {
2777
+ white-space: normal;
2778
+ }
2779
+
2780
+ .group-name {
2781
+ font-family: var(--font-px);
2782
+ font-size: var(--type-name);
2783
+ text-transform: uppercase;
2784
+ letter-spacing: var(--tracking-caps);
2785
+ }
2786
+
2787
+ .row.context .title,
2788
+ .row.context .group-name,
2789
+ .row.context:hover button.glyph {
2790
+ color: var(--muted);
2791
+ }
2792
+
2793
+ @media (max-width: 600px) {
2794
+ .tree .row {
2795
+ flex-wrap: wrap;
2796
+ justify-content: flex-end;
2797
+ row-gap: 4px;
2798
+ }
2799
+
2800
+ .tree .row .grow {
2801
+ flex: 1 1 calc(100% - 30px);
2802
+ }
2803
+
2804
+ .tree .row .title {
2805
+ -webkit-line-clamp: 3;
2806
+ }
2807
+
2808
+ .tree .row:has(.group-name) {
2809
+ flex-wrap: nowrap;
2810
+ }
2811
+
2812
+ .tree .row:has(.group-name) .grow {
2813
+ flex: 1;
2814
+ }
2815
+ }
2816
+
2817
+ .due {
2818
+ font-family: var(--font-px);
2819
+ font-size: var(--type-state);
2820
+ color: var(--muted);
2821
+ white-space: nowrap;
2822
+ }
2823
+
2824
+ .due.late {
2825
+ color: var(--red);
2826
+ }
2827
+
2828
+ .board {
2829
+ display: grid;
2830
+ grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr));
2831
+ gap: var(--gap);
2832
+ align-items: start;
2833
+ }
2834
+
2835
+ .board-col {
2836
+ min-width: 0;
2837
+ }
2838
+
2839
+ @media (min-width: 901px) {
2840
+ .board {
2841
+ align-items: stretch;
2842
+ }
2843
+
2844
+ .board-col .panel {
2845
+ display: flex;
2846
+ flex-direction: column;
2847
+ height: 100%;
2848
+ max-height: calc(100vh - 150px);
2849
+ }
2850
+
2851
+ .board-col .board-cards {
2852
+ overflow-y: auto;
2853
+ }
2854
+ }
2855
+
2856
+ @media (max-width: 900px) {
2857
+ .board {
2858
+ grid-template-columns: 1fr;
2859
+ }
2860
+ }
2861
+
2862
+ .board-col.drop-target .panel {
2863
+ outline: var(--line) dashed var(--ink);
2864
+ outline-offset: 4px;
2865
+ }
2866
+
2867
+ .board-col.drop-target .board-cards,
2868
+ .board-col.drop-target .empty {
2869
+ background: var(--head);
2870
+ }
2871
+
2872
+ .board-cards {
2873
+ list-style: none;
2874
+ padding: 12px;
2875
+ display: grid;
2876
+ grid-template-columns: minmax(0, 1fr);
2877
+ gap: 12px;
2878
+ }
2879
+
2880
+ .board-card {
2881
+ position: relative;
2882
+ border: var(--line) solid var(--ink);
2883
+ background: var(--paper);
2884
+ box-shadow: var(--shadow-button);
2885
+ padding: 9px 11px;
2886
+ display: grid;
2887
+ grid-template-columns: minmax(0, 1fr);
2888
+ gap: 7px;
2889
+ }
2890
+
2891
+ .board-card.movable {
2892
+ cursor: grab;
2893
+ }
2894
+
2895
+ .board-card [data-board-grip] {
2896
+ margin-right: -6px;
2897
+ cursor: grab;
2898
+ touch-action: none;
2899
+ }
2900
+
2901
+ .board-card.lifted {
2902
+ cursor: grabbing;
2903
+ background: var(--head);
2904
+ box-shadow: var(--shadow-card);
2905
+ }
2906
+
2907
+ .board-lift {
2908
+ width: var(--lift-width, 240px);
2909
+ translate: var(--lift-x, 0) var(--lift-y, 0);
2910
+ }
2911
+
2912
+ .board-lift-slot {
2913
+ list-style: none;
2914
+ }
2915
+
2916
+ .board-card:hover {
2917
+ background: var(--head);
2918
+ }
2919
+
2920
+ .board-card.drag-dim {
2921
+ opacity: var(--fade-dragged);
2922
+ }
2923
+
2924
+ .board-card:focus-within {
2925
+ outline: var(--line) solid var(--ink);
2926
+ outline-offset: 2px;
2927
+ background: var(--head);
2928
+ }
2929
+
2930
+ .board-card .title:focus-visible {
2931
+ outline: none;
2932
+ }
2933
+
2934
+ .board-card[aria-current="true"]:is(:hover, :focus-within) {
2935
+ background-color: var(--ink);
2936
+ }
2937
+
2938
+ .board-card .title {
2939
+ font: inherit;
2940
+ background: none;
2941
+ border: none;
2942
+ color: inherit;
2943
+ cursor: pointer;
2944
+ padding: 0;
2945
+ text-align: left;
2946
+ display: -webkit-box;
2947
+ -webkit-line-clamp: 2;
2948
+ -webkit-box-orient: vertical;
2949
+ overflow: hidden;
2950
+ overflow-wrap: anywhere;
2951
+ }
2952
+
2953
+ .board-card input.inline-input {
2954
+ color: var(--ink);
2955
+ }
2956
+
2957
+ .board-card input.inline-input:focus-visible {
2958
+ outline: none;
2959
+ }
2960
+
2961
+ .board-card .meta-row {
2962
+ display: flex;
2963
+ align-items: center;
2964
+ gap: 8px;
2965
+ min-height: 14px;
2966
+ }
2967
+
2968
+ .board-card .meta-row .gap {
2969
+ flex: 1;
2970
+ }
2971
+
2972
+ .sortable-items {
2973
+ list-style: none;
2974
+ }
2975
+
2976
+ .sortable-item {
2977
+ display: flex;
2978
+ align-items: center;
2979
+ gap: 10px;
2980
+ min-width: 0;
2981
+ padding: 8px var(--pad) 8px 10px;
2982
+ position: relative;
2983
+ background: var(--paper);
2984
+ border-bottom: var(--hair) solid var(--rule);
2985
+ }
2986
+
2987
+ .sortable-items > .sortable-item:last-child {
2988
+ border-bottom: 0;
2989
+ }
2990
+
2991
+ .sortable-body {
2992
+ flex: 1;
2993
+ min-width: 0;
2994
+ }
2995
+
2996
+ .sortable-item [data-sortable-grip] {
2997
+ flex: none;
2998
+ }
2999
+
3000
+ .sortable-item.movable [data-sortable-grip] {
3001
+ cursor: grab;
3002
+ touch-action: none;
3003
+ }
3004
+
3005
+ .sortable-item.drag-dim {
3006
+ opacity: var(--fade-dragged);
3007
+ }
3008
+
3009
+ .sortable-item:is(.drop-before, .drop-after)::before {
3010
+ content: "";
3011
+ position: absolute;
3012
+ left: 0;
3013
+ right: 0;
3014
+ border-top: var(--line) dashed var(--ink);
3015
+ pointer-events: none;
3016
+ }
3017
+
3018
+ .sortable-item.drop-before::before {
3019
+ top: -1px;
3020
+ }
3021
+
3022
+ .sortable-item.drop-after::before {
3023
+ bottom: -1px;
3024
+ }
3025
+
3026
+ .sortable:is(.grid, .panels)
3027
+ .sortable-item:is(.drop-before, .drop-after)::before {
3028
+ top: -2px;
3029
+ bottom: -2px;
3030
+ left: auto;
3031
+ right: auto;
3032
+ border-top: 0;
3033
+ border-left: var(--line) dashed var(--ink);
3034
+ }
3035
+
3036
+ .sortable.grid .sortable-item.drop-before::before {
3037
+ left: -9px;
3038
+ }
3039
+
3040
+ .sortable.grid .sortable-item.drop-after::before {
3041
+ right: -9px;
3042
+ }
3043
+
3044
+ .sortable-item.lifted {
3045
+ border: var(--line) solid var(--ink);
3046
+ background: var(--head);
3047
+ box-shadow: var(--shadow-card);
3048
+ cursor: grabbing;
3049
+ }
3050
+
3051
+ .sortable-slot {
3052
+ list-style: none;
3053
+ padding: 6px;
3054
+ }
3055
+
3056
+ .sortable-lift,
3057
+ .reel-lift {
3058
+ width: var(--lift-width, 320px);
3059
+ translate: var(--lift-x, 0) var(--lift-y, 0);
3060
+ }
3061
+
3062
+ .sortable.grid .sortable-items {
3063
+ display: grid;
3064
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
3065
+ gap: 12px;
3066
+ padding: 12px;
3067
+ }
3068
+
3069
+ .sortable.grid .sortable-item {
3070
+ align-items: flex-start;
3071
+ height: 100%;
3072
+ padding: 9px 11px 9px 6px;
3073
+ border: var(--line) solid var(--ink);
3074
+ box-shadow: var(--shadow-button);
3075
+ }
3076
+
3077
+ .sortable.grid .sortable-item.lifted {
3078
+ box-shadow: var(--shadow-card);
3079
+ }
3080
+
3081
+ .sortable.grid .sortable-slot {
3082
+ padding: 0;
3083
+ }
3084
+
3085
+ .sortable.panels .sortable-items {
3086
+ display: grid;
3087
+ grid-template-columns: repeat(
3088
+ auto-fill,
3089
+ minmax(min(100%, max(300px, (100% - 2 * var(--gap)) / 3)), 1fr)
3090
+ );
3091
+ gap: var(--gap);
3092
+ }
3093
+
3094
+ .sortable.panels .sortable-item {
3095
+ display: block;
3096
+ padding: 0;
3097
+ border-bottom: 0;
3098
+ background: none;
3099
+ }
3100
+
3101
+ .sortable.panels .sortable-body {
3102
+ height: 100%;
3103
+ }
3104
+
3105
+ .sortable.panels .sortable-body > .panel {
3106
+ display: flex;
3107
+ flex-direction: column;
3108
+ height: 100%;
3109
+ }
3110
+
3111
+ .sortable.panels .sortable-body > .panel > .panel-foot {
3112
+ margin-top: auto;
3113
+ }
3114
+
3115
+ .sortable.panels .sortable-item.drop-before::before {
3116
+ left: calc(var(--gap) / -2 - 1px);
3117
+ }
3118
+
3119
+ .sortable.panels .sortable-item.drop-after::before {
3120
+ right: calc(var(--gap) / -2 - 1px);
3121
+ }
3122
+
3123
+ .sortable.panels .sortable-item.lifted {
3124
+ border: 0;
3125
+ box-shadow: none;
3126
+ }
3127
+
3128
+ .sortable.panels .lifted .panel {
3129
+ background: var(--head);
3130
+ box-shadow: var(--shadow-card);
3131
+ }
3132
+
3133
+ .sortable.panels .sortable-slot {
3134
+ padding: 0;
3135
+ }
3136
+
3137
+ :root[data-pixel-paper-dragging] {
3138
+ user-select: none;
3139
+ }
3140
+
3141
+ :root[data-pixel-paper-dragging] * {
3142
+ cursor: grabbing !important;
3143
+ }
3144
+
3145
+ .cells {
3146
+ display: inline-flex;
3147
+ gap: 2px;
3148
+ padding: 2px;
3149
+ border: var(--line) solid var(--ink);
3150
+ background: var(--paper);
3151
+ flex: none;
3152
+ }
3153
+
3154
+ .cells .cell {
3155
+ width: 10px;
3156
+ height: 14px;
3157
+ background: var(--head);
3158
+ }
3159
+
3160
+ .cells .cell.on {
3161
+ background: var(--ink);
3162
+ }
3163
+
3164
+ @media (max-width: 600px) {
3165
+ .cells:not(.meters *) .cell {
3166
+ width: 8px;
3167
+ }
3168
+ }
3169
+
3170
+ .meters {
3171
+ container: meters / inline-size;
3172
+ list-style: none;
3173
+ }
3174
+
3175
+ .meter-row {
3176
+ display: grid;
3177
+ grid-template-columns: minmax(180px, 240px) minmax(0, 1fr);
3178
+ gap: 6px var(--gap);
3179
+ padding: 14px var(--pad);
3180
+ border-bottom: var(--hair) solid var(--rule);
3181
+ }
3182
+
3183
+ .meter-row:last-child {
3184
+ border-bottom: 0;
3185
+ }
3186
+
3187
+ .meter-head {
3188
+ grid-row: span 2;
3189
+ display: flex;
3190
+ flex-direction: column;
3191
+ align-items: flex-start;
3192
+ gap: 2px;
3193
+ }
3194
+
3195
+ .meter-row .notice {
3196
+ grid-column: 1 / -1;
3197
+ align-items: center;
3198
+ }
3199
+
3200
+ @container meters (width < 560px) {
3201
+ .meter-row {
3202
+ grid-template-columns: minmax(0, 1fr);
3203
+ }
3204
+
3205
+ .meter-head {
3206
+ grid-row: auto;
3207
+ flex-direction: row;
3208
+ flex-wrap: wrap;
3209
+ align-items: baseline;
3210
+ gap: 2px 12px;
3211
+ }
3212
+
3213
+ .meter-num {
3214
+ width: 100%;
3215
+ }
3216
+ }
3217
+
3218
+ @container meters (width < 280px) {
3219
+ .meters .cells .cell {
3220
+ width: 8px;
3221
+ }
3222
+ }
3223
+
3224
+ @container meters (width < 240px) {
3225
+ .meters .cells .cell {
3226
+ width: 6px;
3227
+ }
3228
+ }
3229
+
3230
+ @container meters (width < 200px) {
3231
+ .meters .cells .cell {
3232
+ width: 4px;
3233
+ }
3234
+ }
3235
+
3236
+ .meter-name {
3237
+ overflow-wrap: anywhere;
3238
+ font-family: var(--font-px);
3239
+ font-size: var(--type-name);
3240
+ text-transform: uppercase;
3241
+ letter-spacing: var(--tracking-caps);
3242
+ }
3243
+
3244
+ .meter-line {
3245
+ display: flex;
3246
+ align-items: center;
3247
+ gap: 12px;
3248
+ flex-wrap: wrap;
3249
+ }
3250
+
3251
+ .meter-row.toned.high:not(.stale) .cells .cell.on {
3252
+ background: var(--amber);
3253
+ }
3254
+
3255
+ .meter-row.toned.full:not(.stale) .cells .cell.on {
3256
+ background: var(--red);
3257
+ }
3258
+
3259
+ .meter-row.stale .cells .cell.on {
3260
+ background: var(--muted);
3261
+ }
3262
+
3263
+ .meter-line .pct {
3264
+ font-family: var(--font-px);
3265
+ font-size: var(--type-control);
3266
+ min-width: 4ch;
3267
+ }
3268
+
3269
+ .mark.reading {
3270
+ font-family: var(--font-px);
3271
+ font-size: var(--type-state);
3272
+ padding: 1px 6px;
3273
+ }
3274
+
3275
+ .meter-num {
3276
+ font-family: var(--font-px);
3277
+ font-size: var(--type-state);
3278
+ color: var(--muted);
3279
+ }
3280
+
3281
+ .meter-foot {
3282
+ display: flex;
3283
+ gap: 16px;
3284
+ flex-wrap: wrap;
3285
+ font-family: var(--font-px);
3286
+ font-size: var(--type-state);
3287
+ color: var(--muted);
3288
+ }
3289
+
3290
+ .meter-foot .late {
3291
+ color: var(--red);
3292
+ }
3293
+
3294
+ .history-list.checks {
3295
+ border-top: 0;
3296
+ }
3297
+
3298
+ .history-list.checks .who {
3299
+ width: 20ch;
3300
+ max-width: none;
3301
+ }
3302
+
3303
+ @media (max-width: 600px) {
3304
+ .history-list.checks .who {
3305
+ width: 12ch;
3306
+ }
3307
+ }
3308
+
3309
+ .history-list.wrapped {
3310
+ border-top: 0;
3311
+ }
3312
+
3313
+ .history-list.wrapped li {
3314
+ flex-wrap: wrap;
3315
+ row-gap: 2px;
3316
+ padding: 6px 0;
3317
+ }
3318
+
3319
+ .history-list.wrapped li:first-child {
3320
+ padding-top: 0;
3321
+ }
3322
+
3323
+ .history-list.wrapped li:last-child {
3324
+ padding-bottom: 0;
3325
+ }
3326
+
3327
+ .history-list.wrapped .v {
3328
+ width: auto;
3329
+ padding: 0;
3330
+ color: var(--muted);
3331
+ }
3332
+
3333
+ .history-list.wrapped li.current .v {
3334
+ padding: 0 4px;
3335
+ }
3336
+
3337
+ .history-list.wrapped .who {
3338
+ flex: 1;
3339
+ width: auto;
3340
+ max-width: none;
3341
+ white-space: normal;
3342
+ overflow-wrap: anywhere;
3343
+ }
3344
+
3345
+ .history-list.wrapped li > :not(.v, .who, .what) {
3346
+ margin-left: auto;
3347
+ }
3348
+
3349
+ .history-list.wrapped .what {
3350
+ order: 1;
3351
+ flex-basis: 100%;
3352
+ font-size: var(--type-control);
3353
+ line-height: 1.45;
3354
+ white-space: normal;
3355
+ overflow-wrap: anywhere;
3356
+ }
3357
+
3358
+ .crumbs ol {
3359
+ list-style: none;
3360
+ display: flex;
3361
+ align-items: center;
3362
+ flex-wrap: wrap;
3363
+ gap: 2px 0;
3364
+ font-family: var(--font-px);
3365
+ font-size: var(--type-state);
3366
+ letter-spacing: var(--tracking-caps);
3367
+ }
3368
+
3369
+ .crumbs li + li::before {
3370
+ content: "/";
3371
+ margin: 0 8px;
3372
+ color: var(--muted);
3373
+ }
3374
+
3375
+ .crumbs a {
3376
+ color: var(--muted);
3377
+ text-decoration: none;
3378
+ border-bottom: var(--hair) dotted transparent;
3379
+ }
3380
+
3381
+ .crumbs a:hover {
3382
+ color: var(--ink);
3383
+ border-bottom-color: var(--ink);
3384
+ }
3385
+
3386
+ .crumbs [aria-current="page"] {
3387
+ color: var(--ink);
3388
+ }
3389
+
3390
+ .file {
3391
+ display: flex;
3392
+ align-items: center;
3393
+ gap: 8px;
3394
+ width: 100%;
3395
+ padding: 5px 10px;
3396
+ font-family: var(--font-code);
3397
+ font-size: var(--type-control);
3398
+ color: var(--ink);
3399
+ background: none;
3400
+ border: 0;
3401
+ text-align: left;
3402
+ text-decoration: none;
3403
+ cursor: pointer;
3404
+ }
3405
+
3406
+ .file:hover {
3407
+ background: var(--head);
3408
+ }
3409
+
3410
+ .file[aria-current="true"] {
3411
+ background: var(--ink);
3412
+ color: var(--paper);
3413
+ }
3414
+
3415
+ .file .glyph {
3416
+ display: inline-flex;
3417
+ color: var(--muted);
3418
+ flex: none;
3419
+ }
3420
+
3421
+ .file[aria-current="true"] .glyph,
3422
+ .file[aria-current="true"] .tag {
3423
+ color: inherit;
3424
+ border-color: currentColor;
3425
+ }
3426
+
3427
+ .file .name {
3428
+ flex: 1;
3429
+ min-width: 0;
3430
+ overflow: hidden;
3431
+ text-overflow: ellipsis;
3432
+ white-space: nowrap;
3433
+ }
3434
+
3435
+ .drop-zone {
3436
+ display: grid;
3437
+ justify-items: center;
3438
+ gap: 10px;
3439
+ padding: 28px var(--pad);
3440
+ text-align: center;
3441
+ border: var(--line) dashed var(--ink);
3442
+ }
3443
+
3444
+ .drop-zone[data-drag-over] {
3445
+ border-style: solid;
3446
+ background: var(--head);
3447
+ }
3448
+
3449
+ .drop-zone-glyph {
3450
+ width: 34px;
3451
+ height: 34px;
3452
+ display: grid;
3453
+ place-items: center;
3454
+ border: var(--line) solid var(--ink);
3455
+ background: var(--paper);
3456
+ }
3457
+
3458
+ .drop-zone p {
3459
+ color: var(--muted);
3460
+ max-width: 44ch;
3461
+ }
3462
+
3463
+ .drop-zone p strong {
3464
+ display: block;
3465
+ margin-bottom: 2px;
3466
+ font-family: var(--font-px);
3467
+ font-size: var(--type-control);
3468
+ font-weight: 400;
3469
+ text-transform: uppercase;
3470
+ letter-spacing: var(--tracking-title);
3471
+ color: var(--ink);
3472
+ }
3473
+
3474
+ .drop-zone .btn:focus-within {
3475
+ outline: var(--line) solid var(--ink);
3476
+ outline-offset: 2px;
3477
+ }
3478
+
3479
+ .sheet {
3480
+ padding: 28px 32px 36px;
3481
+ }
3482
+
3483
+ .sheet-head {
3484
+ display: flex;
3485
+ align-items: flex-start;
3486
+ gap: 16px;
3487
+ flex-wrap: wrap;
3488
+ }
3489
+
3490
+ .sheet-title {
3491
+ flex: 1 1 20ch;
3492
+ font: var(--read-weight) var(--read-title) / 1.15 var(--font-body);
3493
+ letter-spacing: -0.01em;
3494
+ text-wrap: balance;
3495
+ max-width: var(--read-measure);
3496
+ }
3497
+
3498
+ .sheet-title:focus {
3499
+ outline: none;
3500
+ }
3501
+
3502
+ .sheet-acts {
3503
+ display: flex;
3504
+ gap: 10px;
3505
+ padding-top: 4px;
3506
+ }
3507
+
3508
+ .byline {
3509
+ margin: 10px 0 var(--gap);
3510
+ padding-bottom: 14px;
3511
+ border-bottom: var(--hair) solid var(--rule);
3512
+ font-family: var(--font-px);
3513
+ font-size: var(--type-label);
3514
+ letter-spacing: var(--tracking-caps);
3515
+ color: var(--muted);
3516
+ }
3517
+
3518
+ .sheet > .notice {
3519
+ margin-bottom: 20px;
3520
+ max-width: var(--read-measure);
3521
+ }
3522
+
3523
+ @media (max-width: 600px) {
3524
+ .sheet {
3525
+ padding: 20px var(--pad) 28px;
3526
+ }
3527
+
3528
+ .sheet-title {
3529
+ font-size: 25px;
3530
+ }
3531
+
3532
+ .sheet-acts {
3533
+ padding-top: 0;
3534
+ }
3535
+ }
3536
+
3537
+ .prose {
3538
+ font: var(--read-body) / 1.65 var(--font-body);
3539
+ color: var(--ink);
3540
+ }
3541
+
3542
+ .prose > p,
3543
+ .prose > ul,
3544
+ .prose > ol,
3545
+ .prose > :is(h1, h2, h3, h4, h5, h6),
3546
+ .prose > blockquote,
3547
+ .prose > .notice {
3548
+ max-width: var(--read-measure);
3549
+ }
3550
+
3551
+ .prose > * + * {
3552
+ margin-top: 1em;
3553
+ }
3554
+
3555
+ .prose :is(h1, h2) {
3556
+ font: var(--read-weight) var(--read-h2) / 1.3 var(--font-body);
3557
+ letter-spacing: -0.005em;
3558
+ margin-top: 2em;
3559
+ text-wrap: balance;
3560
+ }
3561
+
3562
+ .prose h3 {
3563
+ font: var(--read-weight) var(--read-h3) / 1.4 var(--font-body);
3564
+ margin-top: 1.6em;
3565
+ }
3566
+
3567
+ .prose :is(h4, h5, h6) {
3568
+ margin-top: calc(1.6 * var(--read-body));
3569
+ }
3570
+
3571
+ .prose h4 {
3572
+ font: var(--type-control) / 1.4 var(--font-px);
3573
+ text-transform: uppercase;
3574
+ letter-spacing: var(--tracking-label);
3575
+ }
3576
+
3577
+ .prose h5 {
3578
+ font: var(--read-weight) var(--type-body) / 1.45 var(--font-body);
3579
+ }
3580
+
3581
+ .prose h6 {
3582
+ font: var(--type-label) / 1.4 var(--font-px);
3583
+ text-transform: uppercase;
3584
+ letter-spacing: var(--tracking-label);
3585
+ color: var(--muted);
3586
+ }
3587
+
3588
+ .prose :is(h1, h2, h3, h4, h5, h6) + * {
3589
+ margin-top: 0.5em;
3590
+ }
3591
+
3592
+ .prose > :first-child {
3593
+ margin-top: 0;
3594
+ }
3595
+
3596
+ .prose :is(h1, h2, h3, h4, h5, h6):focus {
3597
+ outline: none;
3598
+ }
3599
+
3600
+ .prose ul,
3601
+ .prose ol {
3602
+ padding-left: 1.4em;
3603
+ }
3604
+
3605
+ .prose li + li {
3606
+ margin-top: 0.35em;
3607
+ }
3608
+
3609
+ .prose ul {
3610
+ list-style: square;
3611
+ }
3612
+
3613
+ .prose li::marker {
3614
+ color: var(--muted);
3615
+ }
3616
+
3617
+ .prose ol li::marker {
3618
+ font-family: var(--font-px);
3619
+ font-size: var(--type-control);
3620
+ }
3621
+
3622
+ .prose strong {
3623
+ font-weight: var(--read-weight);
3624
+ }
3625
+
3626
+ .prose :not(pre) > code {
3627
+ background: var(--head);
3628
+ padding: 1px 5px;
3629
+ font-size: 0.85em;
3630
+ }
3631
+
3632
+ .prose pre.code-surface {
3633
+ font-size: 12.5px;
3634
+ }
3635
+
3636
+ .prose .table-wrap {
3637
+ border: var(--line) solid var(--ink);
3638
+ }
3639
+
3640
+ .prose .table {
3641
+ font-size: var(--type-name);
3642
+ }
3643
+
3644
+ .prose .table td {
3645
+ vertical-align: top;
3646
+ }
3647
+
3648
+ .prose blockquote {
3649
+ padding-left: 16px;
3650
+ border-left: var(--hair) solid var(--ink);
3651
+ color: var(--muted);
3652
+ }
3653
+
3654
+ .prose hr {
3655
+ border: 0;
3656
+ border-top: var(--hair) solid var(--rule);
3657
+ margin: 2em 0;
3658
+ }
3659
+
3660
+ .prose .notice {
3661
+ font: var(--type-name) / 1.55 var(--font-body);
3662
+ }
3663
+
3664
+ .prose a {
3665
+ color: var(--ink);
3666
+ text-decoration: underline;
3667
+ text-decoration-thickness: 1px;
3668
+ text-underline-offset: 3px;
3669
+ }
3670
+
3671
+ .prose a:hover {
3672
+ text-decoration-thickness: 2px;
3673
+ }
3674
+
3675
+ .prose a.missing {
3676
+ color: var(--red);
3677
+ text-decoration-style: dotted;
3678
+ text-decoration-color: var(--red);
3679
+ }
3680
+
3681
+ .toc {
3682
+ list-style: none;
3683
+ padding: 6px 0;
3684
+ }
3685
+
3686
+ .toc a {
3687
+ display: flex;
3688
+ align-items: baseline;
3689
+ gap: 8px;
3690
+ padding: 5px 12px;
3691
+ font: var(--type-body) / 1.35 var(--font-body);
3692
+ color: var(--ink);
3693
+ text-decoration: none;
3694
+ }
3695
+
3696
+ .toc .l3 a {
3697
+ padding-left: 28px;
3698
+ font-size: var(--type-control);
3699
+ color: var(--muted);
3700
+ }
3701
+
3702
+ .toc a::before {
3703
+ content: "";
3704
+ flex: none;
3705
+ width: 6px;
3706
+ height: 6px;
3707
+ transform: translateY(-1px);
3708
+ }
3709
+
3710
+ .toc a[aria-current="true"]::before {
3711
+ background: var(--ink);
3712
+ }
3713
+
3714
+ .toc a[aria-current="true"] {
3715
+ color: var(--ink);
3716
+ }
3717
+
3718
+ .toc a:hover {
3719
+ background: var(--head);
3720
+ }
3721
+
3722
+ .chip .cursor,
3723
+ .link-state .cursor {
3724
+ width: 5px;
3725
+ height: 9px;
3726
+ margin-left: 4px;
3727
+ }
3728
+
3729
+ .loading .cursor {
3730
+ margin-left: 6px;
3731
+ }
3732
+
3733
+ .loading {
3734
+ padding: 26px 16px;
3735
+ text-align: center;
3736
+ font-family: var(--font-px);
3737
+ font-size: var(--type-control);
3738
+ text-transform: uppercase;
3739
+ letter-spacing: var(--tracking-title);
3740
+ color: var(--muted);
3741
+ }
3742
+
3743
+ /* done: the status stays in the page, empty, for the next wait, but out of the flow, so it
3744
+ takes no room and no gap in a panel's or a card's grid, a stack or a row. Not
3745
+ display: none, which would take the live region out of the accessibility tree */
3746
+ .loading-idle {
3747
+ position: absolute;
3748
+ }
3749
+
3750
+ .monogram {
3751
+ display: inline-grid;
3752
+ place-items: center;
3753
+ flex: none;
3754
+ width: 22px;
3755
+ height: 22px;
3756
+ border: var(--line) solid var(--ink);
3757
+ background: var(--paper);
3758
+ color: var(--ink);
3759
+ font-family: var(--font-px);
3760
+ font-size: var(--type-state);
3761
+ line-height: 1;
3762
+ text-transform: uppercase;
3763
+ user-select: none;
3764
+ }
3765
+
3766
+ .monogram.large {
3767
+ width: 34px;
3768
+ height: 34px;
3769
+ font-size: var(--type-name);
3770
+ }
3771
+
3772
+ .monogram.drawn {
3773
+ border: 0;
3774
+ background: none;
3775
+ }
3776
+
3777
+ .identity {
3778
+ display: flex;
3779
+ align-items: center;
3780
+ gap: 10px;
3781
+ min-width: 0;
3782
+ }
3783
+
3784
+ .identity-text {
3785
+ display: grid;
3786
+ gap: 2px;
3787
+ min-width: 0;
3788
+ }
3789
+
3790
+ .identity-text strong {
3791
+ font-weight: 600;
3792
+ overflow-wrap: anywhere;
3793
+ }
3794
+
3795
+ .identity-text .meta {
3796
+ display: flex;
3797
+ align-items: center;
3798
+ gap: 8px;
3799
+ flex-wrap: wrap;
3800
+ }
3801
+
3802
+ .identity.large {
3803
+ gap: 12px;
3804
+ }
3805
+
3806
+ .identity.large strong {
3807
+ font-size: var(--type-title);
3808
+ }
3809
+
3810
+ .stats {
3811
+ display: grid;
3812
+ grid-template-columns: repeat(var(--cols, 4), minmax(0, 1fr));
3813
+ overflow: clip;
3814
+ }
3815
+
3816
+ .stat {
3817
+ display: grid;
3818
+ align-content: start;
3819
+ justify-items: start;
3820
+ gap: 6px;
3821
+ min-width: 0;
3822
+ padding: 14px var(--pad);
3823
+ margin: 0 calc(-1 * var(--hair)) calc(-1 * var(--hair)) 0;
3824
+ border-right: var(--hair) solid var(--rule);
3825
+ border-bottom: var(--hair) solid var(--rule);
3826
+ }
3827
+
3828
+ .stat > * {
3829
+ max-width: 100%;
3830
+ overflow-wrap: anywhere;
3831
+ }
3832
+
3833
+ .stat-value {
3834
+ font-family: var(--font-px);
3835
+ font-size: var(--type-figure);
3836
+ line-height: 1.1;
3837
+ font-variant-numeric: tabular-nums;
3838
+ color: var(--ink);
3839
+ }
3840
+
3841
+ .stat-value.unknown {
3842
+ color: var(--muted);
3843
+ }
3844
+
3845
+ .stat:last-child {
3846
+ border-right: 0;
3847
+ }
3848
+
3849
+ @media (max-width: 900px) {
3850
+ .stat-value {
3851
+ font-size: var(--type-figure-narrow);
3852
+ }
3853
+ }
3854
+
3855
+ @media (max-width: 600px) {
3856
+ .stats {
3857
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3858
+ }
3859
+
3860
+ .stat {
3861
+ padding: 12px;
3862
+ }
3863
+ }
3864
+
3865
+ .tip[popover] {
3866
+ position-anchor: auto;
3867
+ inset: auto;
3868
+ margin: 0 0 6px;
3869
+ position-area: top;
3870
+ position-try-fallbacks:
3871
+ top span-left,
3872
+ top span-right,
3873
+ flip-block,
3874
+ bottom span-left,
3875
+ bottom span-right;
3876
+ max-width: min(36ch, calc(100vw - 24px));
3877
+ padding: 3px 7px;
3878
+ border: 0;
3879
+ outline: var(--line) solid var(--paper);
3880
+ background: var(--ink);
3881
+ color: var(--paper);
3882
+ font-family: var(--font-px);
3883
+ font-size: var(--type-state);
3884
+ line-height: 1.35;
3885
+ text-transform: uppercase;
3886
+ letter-spacing: var(--tracking-state);
3887
+ overflow: visible;
3888
+ }
3889
+
3890
+ .tip .key-hint {
3891
+ margin-left: 6px;
3892
+ font-family: var(--font-px);
3893
+ font-size: var(--type-label);
3894
+ text-transform: none;
3895
+ letter-spacing: 0;
3896
+ opacity: var(--fade-on-ink);
3897
+ }
3898
+
3899
+ .tip[popover][data-side="right"] {
3900
+ margin: 0 0 0 6px;
3901
+ position-area: right;
3902
+ position-try-fallbacks: flip-inline;
3903
+ }
3904
+
3905
+ .disclosure > :is(summary, .disclosure-summary) {
3906
+ display: flex;
3907
+ align-items: center;
3908
+ gap: 8px;
3909
+ width: 100%;
3910
+ padding: 3px 0;
3911
+ border: 0;
3912
+ background: none;
3913
+ color: inherit;
3914
+ text-align: left;
3915
+ list-style: none;
3916
+ cursor: pointer;
3917
+ user-select: none;
3918
+ font-family: var(--font-px);
3919
+ font-size: var(--type-control);
3920
+ text-transform: uppercase;
3921
+ letter-spacing: var(--tracking-caps);
3922
+ }
3923
+
3924
+ .disclosure > summary::-webkit-details-marker {
3925
+ display: none;
3926
+ }
3927
+
3928
+ .disclosure[open] > summary .px-icon,
3929
+ .disclosure > .disclosure-summary[aria-expanded="true"] .px-icon {
3930
+ transform: rotate(90deg);
3931
+ }
3932
+
3933
+ .disclosure-label {
3934
+ border-bottom: 1px dotted transparent;
3935
+ }
3936
+
3937
+ .disclosure > :is(summary, .disclosure-summary):hover .disclosure-label {
3938
+ border-bottom-color: var(--ink);
3939
+ }
3940
+
3941
+ .disclosure > .disclosure-summary[aria-disabled="true"] {
3942
+ color: var(--muted);
3943
+ cursor: default;
3944
+ }
3945
+
3946
+ .disclosure
3947
+ > .disclosure-summary[aria-disabled="true"]:hover
3948
+ .disclosure-label {
3949
+ border-bottom-color: transparent;
3950
+ }
3951
+
3952
+ .disclosure-body {
3953
+ display: grid;
3954
+ gap: var(--space-m);
3955
+ margin: 6px 0 2px 5px;
3956
+ padding: 4px 0 4px 14px;
3957
+ border-left: var(--hair) solid var(--rule);
3958
+ }
3959
+
3960
+ .disclosure-body > * {
3961
+ min-width: 0;
3962
+ }
3963
+
3964
+ .statusbar {
3965
+ position: fixed;
3966
+ right: 0;
3967
+ bottom: 0;
3968
+ left: 0;
3969
+ z-index: 40;
3970
+ display: flex;
3971
+ flex-wrap: wrap;
3972
+ align-items: center;
3973
+ justify-content: space-between;
3974
+ gap: 4px 16px;
3975
+ padding: 4px 20px;
3976
+ background: var(--paper);
3977
+ border-top: var(--hair) solid var(--rule);
3978
+ font-family: var(--font-px);
3979
+ font-size: var(--type-state);
3980
+ color: var(--muted);
3981
+ }
3982
+
3983
+ .statusbar-state {
3984
+ display: flex;
3985
+ flex-wrap: wrap;
3986
+ align-items: center;
3987
+ gap: 4px 12px;
3988
+ min-width: 0;
3989
+ }
3990
+
3991
+ .statusbar-keys {
3992
+ display: flex;
3993
+ flex-wrap: wrap;
3994
+ gap: 4px 12px;
3995
+ }
3996
+
3997
+ .statusbar-keys .key-hint {
3998
+ font: inherit;
3999
+ color: var(--ink);
4000
+ }
4001
+
4002
+ @property --railed-width {
4003
+ syntax: "*";
4004
+ inherits: false;
4005
+ }
4006
+
4007
+ .railed {
4008
+ padding-left: var(--railed-width, var(--rail));
4009
+ }
4010
+
4011
+ .railed > :is(.rail, .rail-resize, .bench) {
4012
+ --railed-width: inherit;
4013
+ }
4014
+
4015
+ .rail[popover] {
4016
+ position: fixed;
4017
+ inset: auto;
4018
+ top: anchor(--topbar bottom, 0px);
4019
+ bottom: var(--statusbar-h);
4020
+ left: 0;
4021
+ display: flex;
4022
+ flex-direction: column;
4023
+ gap: var(--gap);
4024
+ width: var(--railed-width, var(--rail));
4025
+ height: auto;
4026
+ padding: var(--gap) 10px var(--gap) 20px;
4027
+ border: 0;
4028
+ background: none;
4029
+ color: inherit;
4030
+ overflow-y: auto;
4031
+ }
4032
+
4033
+ .rail > * {
4034
+ flex: none;
4035
+ min-width: 0;
4036
+ }
4037
+
4038
+ .rail > .panel:last-child {
4039
+ display: flex;
4040
+ flex-direction: column;
4041
+ flex: 0 1 auto;
4042
+ min-height: 0;
4043
+ }
4044
+
4045
+ .rail > .panel:last-child > :is(.panel-tb, .panel-shelf, .panel-foot) {
4046
+ flex: none;
4047
+ }
4048
+
4049
+ .rail > .panel:last-child > :not(.panel-tb, .panel-shelf, .panel-foot) {
4050
+ flex: 0 1 auto;
4051
+ min-height: 0;
4052
+ overflow-y: auto;
4053
+ }
4054
+
4055
+ .rail .panel-tb h2 {
4056
+ min-width: 0;
4057
+ overflow: hidden;
4058
+ overflow-wrap: normal;
4059
+ white-space: nowrap;
4060
+ text-overflow: ellipsis;
4061
+ }
4062
+
4063
+ .rail-toggle {
4064
+ display: contents;
4065
+ }
4066
+
4067
+ .rail-resize {
4068
+ position: fixed;
4069
+ top: anchor(--topbar bottom, 0px);
4070
+ bottom: var(--statusbar-h);
4071
+ left: var(--railed-width, var(--rail));
4072
+ z-index: 1;
4073
+ width: 12px;
4074
+ cursor: col-resize;
4075
+ touch-action: none;
4076
+ }
4077
+
4078
+ .rail-resize::after {
4079
+ content: "";
4080
+ position: absolute;
4081
+ top: 0;
4082
+ bottom: 0;
4083
+ left: 0;
4084
+ width: var(--line);
4085
+ background: var(--ink);
4086
+ opacity: 0;
4087
+ pointer-events: none;
4088
+ }
4089
+
4090
+ .rail-resize:is(:hover, :focus-visible)::after {
4091
+ opacity: 1;
4092
+ }
4093
+
4094
+ .rail-resize:focus-visible {
4095
+ outline-offset: -2px;
4096
+ }
4097
+
4098
+ .rail-head,
4099
+ .rail-open {
4100
+ display: none;
4101
+ }
4102
+
4103
+ @media not (max-width: 900px) {
4104
+ .railed.folded {
4105
+ --railed-width: var(--rail-folded);
4106
+ }
4107
+
4108
+ .railed.folded > .rail > :not(.rail-head + .panel),
4109
+ .railed.folded > .rail > .rail-head + .panel > :not(.panel-tb),
4110
+ .railed.folded > .rail > .rail-head + .panel > .panel-tb > .panel-acts {
4111
+ display: none;
4112
+ }
4113
+
4114
+ .railed.folded > .rail > .rail-head + .panel {
4115
+ align-self: flex-start;
4116
+ }
4117
+
4118
+ .railed.folded > .rail > .rail-head + .panel > .panel-tb {
4119
+ writing-mode: vertical-rl;
4120
+ min-width: 31px;
4121
+ min-height: 0;
4122
+ padding: 3px 3px 12px;
4123
+ }
4124
+
4125
+ .railed.folded > .rail > .rail-head + .panel > .panel-tb > .meta {
4126
+ margin: 0;
4127
+ }
4128
+
4129
+ .railed,
4130
+ .railed > :is(.rail, .bench) {
4131
+ transition: var(--motion-card) steps(3, end);
4132
+ transition-property: padding-left, width, left;
4133
+ }
4134
+
4135
+ :root[data-pixel-paper-dragging]
4136
+ :is(.railed, .railed > .rail, .railed > .bench) {
4137
+ transition: none;
4138
+ }
4139
+ }
4140
+
4141
+ @media (max-width: 900px) {
4142
+ .railed {
4143
+ padding-left: 0;
4144
+ }
4145
+
4146
+ .rail[popover]:not(:popover-open),
4147
+ .rail-resize {
4148
+ display: none;
4149
+ }
4150
+
4151
+ .rail[popover]:popover-open {
4152
+ inset: 0 auto 0 0;
4153
+ width: min(var(--rail-drawer), calc(100vw - 40px));
4154
+ height: 100dvh;
4155
+ max-height: none;
4156
+ padding: 12px 16px var(--gap) 12px;
4157
+ background: var(--dither);
4158
+ border-right: var(--line) solid var(--ink);
4159
+ box-shadow: var(--shadow-card);
4160
+ animation: railIn var(--motion-card) steps(3, end);
4161
+ }
4162
+
4163
+ .rail[popover]::backdrop {
4164
+ background: var(--veil-grain), var(--veil);
4165
+ }
4166
+
4167
+ .rail-head {
4168
+ display: flex;
4169
+ align-items: center;
4170
+ justify-content: space-between;
4171
+ gap: 12px;
4172
+ }
4173
+
4174
+ .rail-open {
4175
+ display: inline-flex;
4176
+ justify-self: start;
4177
+ }
4178
+
4179
+ .panel-lead:has(> .rail-toggle) {
4180
+ display: none;
4181
+ }
4182
+
4183
+ .panel-tb:has(> .panel-lead > .rail-toggle) {
4184
+ padding-left: 12px;
4185
+ }
4186
+ }
4187
+
4188
+ @keyframes railIn {
4189
+ from {
4190
+ translate: -100% 0;
4191
+ }
4192
+ }
4193
+
4194
+ .bench {
4195
+ position: fixed;
4196
+ top: anchor(--topbar bottom, 0px);
4197
+ right: 0;
4198
+ bottom: var(--statusbar-h);
4199
+ left: 0;
4200
+ display: grid;
4201
+ grid-template-rows: minmax(0, max-content) minmax(
4202
+ min(var(--bench-work-min), 100% - var(--bench-head-min)),
4203
+ 1fr
4204
+ );
4205
+ }
4206
+
4207
+ .railed > .bench {
4208
+ left: var(--railed-width, var(--rail));
4209
+ }
4210
+
4211
+ .bench-head {
4212
+ display: grid;
4213
+ align-content: start;
4214
+ gap: var(--gap);
4215
+ margin-bottom: -6px;
4216
+ padding: var(--gap) var(--reel-gutter) 6px;
4217
+ overflow-y: auto;
4218
+ }
4219
+
4220
+ .bench-head > *,
4221
+ .bench-work {
4222
+ min-width: 0;
4223
+ }
4224
+
4225
+ .bench-work {
4226
+ min-height: 0;
4227
+ }
4228
+
4229
+ @media (max-width: 900px) {
4230
+ .railed > .bench {
4231
+ left: 0;
4232
+ }
4233
+ }
4234
+
4235
+ .stage {
4236
+ position: fixed;
4237
+ top: anchor(--topbar bottom, 0px);
4238
+ right: 0;
4239
+ bottom: var(--statusbar-h);
4240
+ left: 0;
4241
+ overflow: hidden;
4242
+ }
4243
+
4244
+ .stage-work,
4245
+ .stage-canvas {
4246
+ position: absolute;
4247
+ inset: 0;
4248
+ }
4249
+
4250
+ .stage-paused {
4251
+ position: absolute;
4252
+ inset: 0;
4253
+ z-index: 20;
4254
+ display: grid;
4255
+ place-items: center;
4256
+ padding: 24px;
4257
+ background: var(--veil-grain), var(--veil);
4258
+ }
4259
+
4260
+ .stage-paused > .notice {
4261
+ width: min(460px, 100%);
4262
+ box-shadow: var(--shadow-button);
4263
+ }
4264
+
4265
+ .window {
4266
+ display: flex;
4267
+ flex-direction: column;
4268
+ height: 100%;
4269
+ min-height: 0;
4270
+ }
4271
+
4272
+ .window > .panel-tb {
4273
+ align-items: center;
4274
+ gap: 8px;
4275
+ min-height: 30px;
4276
+ padding: 3px 3px 3px 10px;
4277
+ user-select: none;
4278
+ }
4279
+
4280
+ .window > .panel-tb:has(> .panel-lead) {
4281
+ padding-left: 3px;
4282
+ }
4283
+
4284
+ .window > .panel-tb h2 {
4285
+ flex: 1;
4286
+ min-width: 0;
4287
+ overflow: hidden;
4288
+ text-overflow: ellipsis;
4289
+ white-space: nowrap;
4290
+ }
4291
+
4292
+ .window > .panel-tb .chip {
4293
+ border-color: var(--paper);
4294
+ }
4295
+
4296
+ .window > .panel-tb .iconbtn {
4297
+ color: inherit;
4298
+ }
4299
+
4300
+ .window-tools {
4301
+ display: contents;
4302
+ }
4303
+
4304
+ .window-body {
4305
+ flex: 1;
4306
+ min-height: 0;
4307
+ overflow: auto;
4308
+ display: grid;
4309
+ align-content: start;
4310
+ gap: var(--space-m);
4311
+ padding: var(--pad);
4312
+ }
4313
+
4314
+ .window.flush .window-body {
4315
+ display: block;
4316
+ padding: 0;
4317
+ }
4318
+
4319
+ .window.flush .window-body > :is(.code-surface, .diff-wrap) {
4320
+ min-height: 100%;
4321
+ border: 0;
4322
+ }
4323
+
4324
+ .window-body > * {
4325
+ min-width: 0;
4326
+ }
4327
+
4328
+ /* the reel takes its height from whatever holds it; the held copy hangs from it, outside the
4329
+ scroller, whose containment would hold a fixed copy inside it */
4330
+ .reel {
4331
+ height: 100%;
4332
+ min-height: 0;
4333
+ }
4334
+
4335
+ .reel-view {
4336
+ height: 100%;
4337
+ overflow: auto;
4338
+ overscroll-behavior: contain;
4339
+ container-type: size;
4340
+ }
4341
+
4342
+ .reel-track {
4343
+ position: relative;
4344
+ display: flex;
4345
+ align-items: flex-start;
4346
+ width: max-content;
4347
+ min-width: 100%;
4348
+ min-height: 100%;
4349
+ padding-block: var(--reel-gutter);
4350
+ }
4351
+
4352
+ .reel-gap {
4353
+ position: relative;
4354
+ flex: none;
4355
+ align-self: stretch;
4356
+ width: var(--reel-gutter);
4357
+ }
4358
+
4359
+ .reel-column {
4360
+ display: flex;
4361
+ flex: none;
4362
+ flex-direction: column;
4363
+ width: max(
4364
+ var(--reel-column-min),
4365
+ var(--reel-width) * (100cqw - var(--reel-gutter)) - var(--reel-gutter)
4366
+ );
4367
+ min-height: calc(100cqh - 2 * var(--reel-gutter));
4368
+ }
4369
+
4370
+ .reel-slot {
4371
+ position: relative;
4372
+ flex: var(--reel-weight, 1) 1 0;
4373
+ min-height: var(--reel-pane-min);
4374
+ anchor-name: var(--reel-anchor);
4375
+ }
4376
+
4377
+ .reel-split {
4378
+ position: relative;
4379
+ flex: none;
4380
+ height: var(--reel-gutter);
4381
+ cursor: row-resize;
4382
+ touch-action: none;
4383
+ }
4384
+
4385
+ .reel-resize {
4386
+ cursor: col-resize;
4387
+ touch-action: none;
4388
+ }
4389
+
4390
+ .reel-resize::after,
4391
+ .reel-split::after {
4392
+ content: "";
4393
+ position: absolute;
4394
+ background: var(--ink);
4395
+ opacity: 0;
4396
+ pointer-events: none;
4397
+ }
4398
+
4399
+ .reel-resize::after {
4400
+ top: 0;
4401
+ bottom: 0;
4402
+ left: calc(50% - 1px);
4403
+ width: var(--line);
4404
+ }
4405
+
4406
+ .reel-split::after {
4407
+ left: 0;
4408
+ right: 0;
4409
+ top: calc(50% - 1px);
4410
+ height: var(--line);
4411
+ }
4412
+
4413
+ .reel-resize:is(:hover, :focus-visible)::after,
4414
+ .reel-split:is(:hover, :focus-visible)::after {
4415
+ opacity: 1;
4416
+ }
4417
+
4418
+ .reel-resize:focus-visible,
4419
+ .reel-split:focus-visible {
4420
+ outline-offset: -2px;
4421
+ }
4422
+
4423
+ .reel-gap.drop-here::before {
4424
+ content: "";
4425
+ position: absolute;
4426
+ top: 0;
4427
+ bottom: 0;
4428
+ left: calc(50% - 1px);
4429
+ border-left: var(--line) dashed var(--ink);
4430
+ pointer-events: none;
4431
+ }
4432
+
4433
+ .reel-slot:is(.drop-before, .drop-after)::before {
4434
+ content: "";
4435
+ position: absolute;
4436
+ left: 0;
4437
+ right: 0;
4438
+ border-top: var(--line) dashed var(--ink);
4439
+ pointer-events: none;
4440
+ }
4441
+
4442
+ .reel-slot.drop-before::before {
4443
+ top: calc(var(--reel-gutter) / -2 - 1px);
4444
+ }
4445
+
4446
+ .reel-slot.drop-after::before {
4447
+ bottom: calc(var(--reel-gutter) / -2 - 1px);
4448
+ }
4449
+
4450
+ .reel-panes {
4451
+ display: contents;
4452
+ }
4453
+
4454
+ .reel-pane,
4455
+ .reel-column {
4456
+ scroll-margin: var(--reel-gutter);
4457
+ }
4458
+
4459
+ .reel-pane {
4460
+ position: absolute;
4461
+ position-anchor: var(--reel-anchor);
4462
+ top: anchor(top);
4463
+ right: anchor(right);
4464
+ bottom: anchor(bottom);
4465
+ left: anchor(left);
4466
+ min-width: 0;
4467
+ }
4468
+
4469
+ .reel-pane.focused > .window {
4470
+ box-shadow: var(--shadow-card);
4471
+ }
4472
+
4473
+ .reel-pane:focus-visible {
4474
+ outline: 0;
4475
+ }
4476
+
4477
+ .reel-pane:focus-visible > .window {
4478
+ outline: var(--line) solid var(--ink);
4479
+ outline-offset: 2px;
4480
+ }
4481
+
4482
+ .reel-pane.drag-dim {
4483
+ opacity: var(--fade-dragged);
4484
+ }
4485
+
4486
+ .reel.tabbed {
4487
+ display: flex;
4488
+ flex-direction: column;
4489
+ }
4490
+
4491
+ .reel.tabbed > .reel-view {
4492
+ flex: 1 1 0;
4493
+ height: auto;
4494
+ min-height: 0;
4495
+ }
4496
+
4497
+ .reel-tabs {
4498
+ flex: none;
4499
+ max-width: calc(100% - 2 * var(--reel-gutter));
4500
+ margin: var(--reel-gutter) var(--reel-gutter) 0;
4501
+ }
4502
+
4503
+ .reel-tabs button {
4504
+ display: inline-flex;
4505
+ align-items: center;
4506
+ gap: 6px;
4507
+ min-width: 0;
4508
+ }
4509
+
4510
+ .reel-tab-words {
4511
+ min-width: 0;
4512
+ overflow: hidden;
4513
+ text-overflow: ellipsis;
4514
+ }
4515
+
4516
+ .reel-stage {
4517
+ flex: 1 1 0;
4518
+ height: calc(100cqh - 2 * var(--reel-gutter));
4519
+ min-height: 0;
4520
+ margin-inline: var(--reel-gutter);
4521
+ }
4522
+
4523
+ .reel-pane.behind {
4524
+ visibility: hidden;
4525
+ }
4526
+
4527
+ [data-reel-grip] {
4528
+ cursor: grab;
4529
+ touch-action: none;
4530
+ }
4531
+
4532
+ .reel-lift {
4533
+ position: fixed;
4534
+ top: 0;
4535
+ left: 0;
4536
+ z-index: 9999;
4537
+ pointer-events: none;
4538
+ }
4539
+
4540
+ .reel-lift .window {
4541
+ height: auto;
4542
+ background: var(--head);
4543
+ box-shadow: var(--shadow-card);
4544
+ }
4545
+
4546
+ /* the page's stack: @foldkit/ui's Toast container, fixed at the bottom right above the page
4547
+ and inside the open dialog when Toaster is rendered there. Its placement is inline (16px
4548
+ padding from the corner), so the stylesheet raises it clear of a banner, its anchor when one
4549
+ is showing, or of a status bar, and sets the gap. A phone spans it across the bottom */
4550
+ .toasts .toast-stack {
4551
+ bottom: calc(
4552
+ anchor(--banner top, calc(var(--statusbar-h) + 4px)) - 4px
4553
+ ) !important;
4554
+ gap: 10px !important;
4555
+ width: min(392px, 100vw);
4556
+ }
4557
+
4558
+ .banner {
4559
+ anchor-name: --banner;
4560
+ }
4561
+
4562
+ .toast {
4563
+ box-shadow: var(--shadow-button);
4564
+ }
4565
+
4566
+ .toast.quiet {
4567
+ border-color: var(--ink);
4568
+ color: var(--ink);
4569
+ }
4570
+
4571
+ .toast > div {
4572
+ overflow-wrap: anywhere;
4573
+ }
4574
+
4575
+ .toast > .iconbtn {
4576
+ flex: none;
4577
+ margin: -2px -4px -2px 0;
4578
+ }
4579
+
4580
+ .toasts .toast {
4581
+ animation: toastIn var(--motion-card) steps(3, end);
4582
+ }
4583
+
4584
+ @keyframes toastIn {
4585
+ from {
4586
+ transform: translateY(8px);
4587
+ opacity: 0;
4588
+ }
4589
+ }
4590
+
4591
+ @media (max-width: 600px) {
4592
+ .toasts .toast-stack {
4593
+ left: 0 !important;
4594
+ width: auto;
4595
+ }
4596
+ }
4597
+
4598
+ @media (prefers-reduced-motion: reduce) {
4599
+ .cursor,
4600
+ .veil-backdrop,
4601
+ .card,
4602
+ .rail[popover]:popover-open,
4603
+ .toasts .toast {
4604
+ animation: none;
4605
+ }
4606
+
4607
+ .railed,
4608
+ .railed > :is(.rail, .bench) {
4609
+ transition: none;
4610
+ }
4611
+ }