@fungi.computer/tourtois 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 (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +127 -2
  3. package/dist/AgentMcpServers.d.ts +34 -0
  4. package/dist/AgentMcpServers.js +124 -0
  5. package/dist/AppAccessConsent.d.ts +23 -0
  6. package/dist/AppAccessConsent.js +122 -0
  7. package/dist/AppCallPermissions.d.ts +9 -0
  8. package/dist/AppCallPermissions.js +21 -0
  9. package/dist/AppDesktopSettings.d.ts +11 -0
  10. package/dist/AppDesktopSettings.js +102 -0
  11. package/dist/AppPane.d.ts +37 -0
  12. package/dist/AppPane.js +219 -0
  13. package/dist/AppWorkbench.d.ts +44 -0
  14. package/dist/AppWorkbench.js +575 -0
  15. package/dist/AvatarPicker.d.ts +7 -0
  16. package/dist/AvatarPicker.js +78 -0
  17. package/dist/AvatarPreview.d.ts +10 -0
  18. package/dist/AvatarPreview.js +6 -0
  19. package/dist/DesktopMenuBar.d.ts +18 -0
  20. package/dist/DesktopMenuBar.js +23 -0
  21. package/dist/FocusedAppMenus.d.ts +2 -0
  22. package/dist/FocusedAppMenus.js +10 -0
  23. package/dist/Keys.d.ts +131 -0
  24. package/dist/Keys.js +201 -0
  25. package/dist/MushroomMark.d.ts +2 -0
  26. package/dist/MushroomMark.js +5 -0
  27. package/dist/SettingsHome.d.ts +18 -0
  28. package/dist/SettingsHome.js +48 -0
  29. package/dist/SettingsNavigation.d.ts +17 -0
  30. package/dist/SettingsNavigation.js +153 -0
  31. package/dist/SystemSettings.d.ts +24 -0
  32. package/dist/SystemSettings.js +177 -0
  33. package/dist/TeamDesktop.d.ts +36 -0
  34. package/dist/TeamDesktop.js +39 -0
  35. package/dist/WorkbenchAppBar.d.ts +5 -0
  36. package/dist/WorkbenchAppBar.js +12 -0
  37. package/dist/app-authority.d.ts +150 -0
  38. package/dist/app-authority.js +41 -0
  39. package/dist/app-directory-reconciliation.d.ts +14 -0
  40. package/dist/app-directory-reconciliation.js +72 -0
  41. package/dist/app-directory.d.ts +206 -0
  42. package/dist/app-directory.js +21 -0
  43. package/dist/app-icon.d.ts +9 -0
  44. package/dist/app-icon.js +27 -0
  45. package/dist/app-launch.d.ts +53 -0
  46. package/dist/app-launch.js +204 -0
  47. package/dist/app-menus.d.ts +6 -0
  48. package/dist/app-menus.js +81 -0
  49. package/dist/app-open-url.d.ts +8 -0
  50. package/dist/app-open-url.js +63 -0
  51. package/dist/app-surface.d.ts +62 -0
  52. package/dist/app-surface.js +10 -0
  53. package/dist/app-windows.d.ts +134 -0
  54. package/dist/app-windows.js +21 -0
  55. package/dist/chrome.css +153 -0
  56. package/dist/command-dialogs.d.ts +42 -0
  57. package/dist/command-dialogs.js +194 -0
  58. package/dist/desktop/Desktop.d.ts +34 -0
  59. package/dist/desktop/Desktop.js +275 -0
  60. package/dist/desktop/consent.d.ts +4 -0
  61. package/dist/desktop/consent.js +64 -0
  62. package/dist/desktop/gill-frame.d.ts +14 -0
  63. package/dist/desktop/gill-frame.js +41 -0
  64. package/dist/desktop/gill-param-picker.d.ts +15 -0
  65. package/dist/desktop/gill-param-picker.js +145 -0
  66. package/dist/desktop/launcher-gill.d.ts +20 -0
  67. package/dist/desktop/launcher-gill.js +49 -0
  68. package/dist/desktop/own-launchers.d.ts +9 -0
  69. package/dist/desktop/own-launchers.js +9 -0
  70. package/dist/desktop/row-gill.d.ts +24 -0
  71. package/dist/desktop/row-gill.js +136 -0
  72. package/dist/desktop-api.d.ts +63 -0
  73. package/dist/desktop-api.js +31 -0
  74. package/dist/desktop-client.d.ts +19 -0
  75. package/dist/desktop-client.js +127 -0
  76. package/dist/desktop-layout.d.ts +117 -0
  77. package/dist/desktop-layout.js +305 -0
  78. package/dist/desktop-visibility.d.ts +8 -0
  79. package/dist/desktop-visibility.js +5 -0
  80. package/dist/layers.d.ts +5 -0
  81. package/dist/layers.js +31 -0
  82. package/dist/main.d.ts +2 -0
  83. package/dist/main.js +17 -0
  84. package/dist/member-avatar-cache.d.ts +15 -0
  85. package/dist/member-avatar-cache.js +69 -0
  86. package/dist/member-avatar.d.ts +39 -0
  87. package/dist/member-avatar.js +88 -0
  88. package/dist/menu-bar.d.ts +5 -0
  89. package/dist/menu-bar.js +5 -0
  90. package/dist/model.d.ts +6 -0
  91. package/dist/model.js +13 -0
  92. package/dist/oyster-platform-controls.d.ts +4 -0
  93. package/dist/oyster-platform-controls.js +107 -0
  94. package/dist/platform-controls.d.ts +84 -0
  95. package/dist/platform-controls.js +266 -0
  96. package/dist/queries.d.ts +7 -0
  97. package/dist/queries.js +7 -0
  98. package/dist/session-registry.d.ts +16 -0
  99. package/dist/session-registry.js +69 -0
  100. package/dist/session-selection.d.ts +6 -0
  101. package/dist/session-selection.js +22 -0
  102. package/dist/settings-leave-guard.d.ts +5 -0
  103. package/dist/settings-leave-guard.js +9 -0
  104. package/dist/settings-navigation.css +129 -0
  105. package/dist/settings-routes.d.ts +118 -0
  106. package/dist/settings-routes.js +216 -0
  107. package/dist/settings-sections.d.ts +74 -0
  108. package/dist/settings-sections.js +17 -0
  109. package/dist/shell-commands.d.ts +15 -0
  110. package/dist/shell-commands.js +95 -0
  111. package/dist/shell-host.d.ts +52 -0
  112. package/dist/shell-host.js +288 -0
  113. package/dist/shell-module.d.ts +12 -0
  114. package/dist/shell-module.js +17 -0
  115. package/dist/shell-release.d.ts +3 -0
  116. package/dist/shell-release.js +4 -0
  117. package/dist/shell.css +858 -0
  118. package/dist/shell.d.ts +6 -0
  119. package/dist/shell.js +83 -0
  120. package/dist/spa.css +11 -0
  121. package/dist/status-bar.d.ts +9 -0
  122. package/dist/status-bar.js +51 -0
  123. package/dist/team-directory.d.ts +3 -0
  124. package/dist/team-directory.js +6 -0
  125. package/dist/use-window-motion.d.ts +3 -0
  126. package/dist/use-window-motion.js +37 -0
  127. package/dist/useAppOpenUrlHandoff.d.ts +11 -0
  128. package/dist/useAppOpenUrlHandoff.js +62 -0
  129. package/dist/useAppWindowManager.d.ts +351 -0
  130. package/dist/useAppWindowManager.js +47 -0
  131. package/dist/useDirectoryCommands.d.ts +12 -0
  132. package/dist/useDirectoryCommands.js +80 -0
  133. package/dist/workbench.d.ts +3 -0
  134. package/dist/workbench.js +2 -0
  135. package/package.json +222 -3
package/dist/shell.css ADDED
@@ -0,0 +1,858 @@
1
+ @import "./chrome.css";
2
+ @import "./spa.css";
3
+ @import "./settings-navigation.css";
4
+
5
+ /* SH-1: a 32px desktop menu bar on desktop widths, matching the window
6
+ title bar and footer so the three chrome bars read as one system.
7
+ chrome.css keeps its documented 48px/40px-mascot base (Caps' own
8
+ `.caps-app-bar-launcher-button` default) for every other caller; this
9
+ override lives only here, scoped to the Tourtois desktop shell, and never
10
+ touches packages/caps. Phone keeps the existing 48px bar and its
11
+ touch-target launcher sizing below, untouched. */
12
+ @media (min-width: 541px) {
13
+ .tourtois-desktop-menu {
14
+ flex: 0 0 var(--spacing-2xl);
15
+ height: var(--spacing-2xl);
16
+ min-height: var(--spacing-2xl);
17
+ }
18
+ .tourtois-desktop-menu .caps-app-bar-launcher-button {
19
+ width: var(--spacing-xl);
20
+ height: var(--spacing-xl);
21
+ padding: var(--spacing-2xs);
22
+ }
23
+ }
24
+
25
+ .tourtois-shell {
26
+ position: relative;
27
+ isolation: isolate;
28
+ background: var(--color-base-100);
29
+ display: flex;
30
+ flex-direction: column;
31
+ height: 100%;
32
+ min-width: 0;
33
+ overflow: hidden;
34
+ }
35
+
36
+ .tourtois-team-desktop {
37
+ min-height: 100%;
38
+ }
39
+
40
+ .tourtois-workbench {
41
+ box-sizing: border-box;
42
+ flex: 1;
43
+ min-height: 0;
44
+ overflow: clip;
45
+ padding: 0;
46
+ position: relative;
47
+ }
48
+
49
+ .tourtois-workbench-layout {
50
+ display: flex;
51
+ flex-direction: column;
52
+ height: 100%;
53
+ min-height: 0;
54
+ position: relative;
55
+ }
56
+
57
+ .tourtois-system-menu-trigger {
58
+ width: auto;
59
+ min-width: var(--spacing-2xl);
60
+ gap: var(--spacing-xs);
61
+ padding: 0;
62
+ display: inline-flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ }
66
+ .tourtois-system-menu-trigger svg {
67
+ flex: none;
68
+ width: 16px;
69
+ height: 16px;
70
+ }
71
+
72
+ .tourtois-team-name {
73
+ min-width: 0;
74
+ max-width: min(10rem, 28vw);
75
+ /* Keep the final glyph clear of the truncation edge when the name fits. */
76
+ padding-inline-end: var(--spacing-2xs);
77
+ }
78
+
79
+ .tourtois-system-settings {
80
+ width: min(58rem, calc(100vw - var(--spacing-lg)));
81
+ height: 85dvh;
82
+ max-height: calc(100dvh - var(--spacing-lg));
83
+ display: flex;
84
+ flex-direction: column;
85
+ max-width: none;
86
+ padding: 0;
87
+ overflow: hidden;
88
+ }
89
+
90
+ .tourtois-app-consent {
91
+ width: min(28rem, calc(100vw - var(--spacing-lg)));
92
+ max-width: none;
93
+ padding: 0;
94
+ overflow: hidden;
95
+ }
96
+
97
+ .tourtois-app-consent-body {
98
+ display: flex;
99
+ flex-direction: column;
100
+ gap: var(--spacing-sm);
101
+ padding: var(--spacing-md);
102
+ }
103
+
104
+ .tourtois-settings-layout {
105
+ display: grid;
106
+ grid-template-columns: 9rem minmax(0, 1fr);
107
+ flex: 1;
108
+ min-height: 0;
109
+ }
110
+
111
+ .tourtois-settings-nav {
112
+ overflow: auto;
113
+ display: flex;
114
+ flex-direction: column;
115
+ gap: var(--spacing-xs);
116
+ padding: var(--spacing-sm);
117
+ border-right: var(--border) solid var(--stipe-hairline);
118
+ }
119
+
120
+ .tourtois-settings-nav .btn {
121
+ justify-content: flex-start;
122
+ }
123
+
124
+ .tourtois-settings-nav-item-label {
125
+ min-width: 0;
126
+ flex: 1;
127
+ overflow: hidden;
128
+ text-align: left;
129
+ text-overflow: ellipsis;
130
+ white-space: nowrap;
131
+ }
132
+
133
+ .tourtois-settings-nav :is(svg, .caps-monogram) {
134
+ width: 1.5rem;
135
+ height: 1.5rem;
136
+ flex-shrink: 0;
137
+ }
138
+
139
+ .tourtois-settings-nav-label {
140
+ margin: var(--spacing-md) var(--spacing-sm) var(--spacing-xs);
141
+ }
142
+
143
+ .tourtois-settings-content {
144
+ display: flex;
145
+ flex-direction: column;
146
+ min-width: 0;
147
+ overflow: auto;
148
+ padding: var(--spacing-md);
149
+ }
150
+ .tourtois-settings-app-header {
151
+ flex-shrink: 0;
152
+ }
153
+ .tourtois-settings-content[hidden] {
154
+ display: none;
155
+ }
156
+
157
+ .tourtois-settings-nav-sprite {
158
+ width: 1.5rem;
159
+ height: 1.5rem;
160
+ flex-shrink: 0;
161
+ }
162
+
163
+ /* Every settings page opens the same way: one heading, one muted lede. */
164
+ .tourtois-settings-lede {
165
+ max-width: 60ch;
166
+ margin: 0 0 var(--spacing-md);
167
+ font-size: var(--text-sm);
168
+ color: var(--stipe-fg-muted);
169
+ }
170
+
171
+ .tourtois-sprite-styles {
172
+ display: grid;
173
+ grid-template-columns: repeat(auto-fill, minmax(7.5rem, 1fr));
174
+ gap: var(--spacing-sm);
175
+ margin: 0;
176
+ padding: 0;
177
+ border: 0;
178
+ }
179
+
180
+ .tourtois-sprite-styles .caps-choice-card,
181
+ .tourtois-avatar-characters .caps-choice-card {
182
+ display: grid;
183
+ grid-template-columns: auto minmax(0, 1fr);
184
+ gap: var(--spacing-xs);
185
+ padding: var(--spacing-sm);
186
+ }
187
+ .tourtois-sprite-styles .caps-choice-card-copy,
188
+ .tourtois-avatar-characters .caps-choice-card-copy {
189
+ display: contents;
190
+ }
191
+ .tourtois-sprite-styles .caps-choice-card-description,
192
+ .tourtois-avatar-characters .caps-choice-card-description {
193
+ grid-column: 1 / -1;
194
+ grid-row: 1;
195
+ }
196
+ .tourtois-sprite-styles .caps-radio,
197
+ .tourtois-avatar-characters .caps-radio {
198
+ grid-column: 1;
199
+ grid-row: 2;
200
+ }
201
+ .tourtois-sprite-styles .caps-choice-card-title,
202
+ .tourtois-avatar-characters .caps-choice-card-title {
203
+ grid-column: 2;
204
+ grid-row: 2;
205
+ }
206
+
207
+ .tourtois-sprite-style-preview {
208
+ width: 100%;
209
+ aspect-ratio: 1;
210
+ }
211
+
212
+ .tourtois-settings-app-content:not([hidden]),
213
+ .tourtois-settings-permissions:not([hidden]),
214
+ .tourtois-permissions-form,
215
+ .tourtois-app-permissions-list,
216
+ .tourtois-permission-page:not([hidden]) {
217
+ display: flex;
218
+ flex-direction: column;
219
+ flex: 1;
220
+ min-height: 0;
221
+ }
222
+ .tourtois-settings-advanced:not([hidden]) {
223
+ display: grid;
224
+ align-content: start;
225
+ gap: var(--spacing-xl);
226
+ }
227
+
228
+ /* An App's Advanced page: titled sections, each a muted line and its keys. */
229
+ .tourtois-settings-advanced > section {
230
+ display: grid;
231
+ justify-items: start;
232
+ gap: var(--spacing-sm);
233
+ }
234
+ .tourtois-settings-advanced > section > * {
235
+ justify-self: stretch;
236
+ }
237
+ .tourtois-settings-advanced > section > .btn {
238
+ justify-self: start;
239
+ }
240
+ .tourtois-settings-description {
241
+ margin: 0;
242
+ color: var(--stipe-fg-muted);
243
+ }
244
+
245
+ .tourtois-settings-actions {
246
+ display: flex;
247
+ justify-content: flex-end;
248
+ flex-wrap: wrap;
249
+ gap: var(--spacing-sm);
250
+ }
251
+
252
+ .tourtois-settings-app-tabs {
253
+ display: flex;
254
+ flex-wrap: wrap;
255
+ gap: var(--spacing-xs);
256
+ margin-left: auto;
257
+ }
258
+
259
+ .tourtois-settings-app-header {
260
+ display: flex;
261
+ align-items: center;
262
+ flex-wrap: wrap;
263
+ gap: var(--spacing-sm);
264
+ margin-bottom: var(--spacing-md);
265
+ }
266
+
267
+ .tourtois-settings-app-header h2 {
268
+ margin: 0;
269
+ }
270
+
271
+ .tourtois-settings-app-heading {
272
+ display: flex;
273
+ align-items: center;
274
+ gap: var(--spacing-sm);
275
+ }
276
+
277
+ .tourtois-settings-app-heading :is(svg, .caps-monogram) {
278
+ width: 2rem;
279
+ height: 2rem;
280
+ }
281
+
282
+ .tourtois-app-permission-entry {
283
+ display: flex;
284
+ flex-direction: column;
285
+ flex: 1;
286
+ min-height: 0;
287
+ gap: var(--spacing-md);
288
+ min-width: 0;
289
+ border: 0;
290
+ padding: 0;
291
+ margin: 0;
292
+ }
293
+
294
+ .tourtois-permission-display {
295
+ display: flex;
296
+ flex: 1;
297
+ min-height: 16rem;
298
+ }
299
+
300
+ .tourtois-permission-display .caps-display-gasket {
301
+ display: flex;
302
+ flex: 1;
303
+ min-width: 0;
304
+ min-height: 0;
305
+ }
306
+ .tourtois-permission-display .caps-screen {
307
+ display: flex;
308
+ flex-direction: column;
309
+ flex: 1;
310
+ min-width: 0;
311
+ min-height: 0;
312
+ padding: var(--spacing-sm) var(--spacing-md);
313
+ }
314
+ .tourtois-permission-screen-footer {
315
+ flex-shrink: 0;
316
+ }
317
+ .tourtois-permission-legend-heading {
318
+ display: flex;
319
+ margin-bottom: var(--spacing-xs);
320
+ }
321
+ .tourtois-permission-legend-divider {
322
+ --divider-color: var(--stipe-hairline);
323
+ flex: 1;
324
+ min-width: 0;
325
+ margin: 0;
326
+ height: auto;
327
+ min-height: 1rem;
328
+ font-size: 0.625rem;
329
+ gap: var(--spacing-sm);
330
+ }
331
+ .tourtois-permission-legend-divider::before,
332
+ .tourtois-permission-legend-divider::after {
333
+ width: auto;
334
+ min-width: var(--spacing-sm);
335
+ height: 1px;
336
+ }
337
+ .tourtois-permission-legend-divider:first-child::before,
338
+ .tourtois-permission-legend-divider:last-child::after {
339
+ flex: 0 0 var(--spacing-sm);
340
+ }
341
+ .tourtois-permission-legend-divider:last-child {
342
+ flex: 0 1 auto;
343
+ }
344
+ .tourtois-permission-legend-divider .tourtois-permission-help {
345
+ white-space: normal;
346
+ text-align: right;
347
+ }
348
+
349
+ .tourtois-permission-display-heading {
350
+ display: flex;
351
+ justify-content: space-between;
352
+ gap: var(--spacing-sm);
353
+ }
354
+
355
+ .tourtois-permission-selectors {
356
+ flex-shrink: 0;
357
+ display: grid;
358
+ grid-template-columns: repeat(2, minmax(0, 1fr));
359
+ gap: var(--spacing-md);
360
+ }
361
+ .tourtois-permission-selectors .caps-field {
362
+ min-width: 0;
363
+ }
364
+ .tourtois-permission-legend {
365
+ display: flex;
366
+ flex-wrap: wrap;
367
+ gap: var(--spacing-md);
368
+ font-size: 0.75rem;
369
+ margin: 0;
370
+ }
371
+ .tourtois-permission-legend > div {
372
+ display: flex;
373
+ align-items: center;
374
+ gap: var(--spacing-xs);
375
+ flex: 1 1 max-content;
376
+ min-width: 0;
377
+ }
378
+ .tourtois-permission-legend dt {
379
+ display: flex;
380
+ flex-shrink: 0;
381
+ align-items: center;
382
+ gap: var(--spacing-xs);
383
+ }
384
+ .tourtois-permission-legend svg {
385
+ width: 1rem;
386
+ height: 1rem;
387
+ }
388
+ .tourtois-permission-legend dd {
389
+ min-width: 0;
390
+ margin: 0;
391
+ color: var(--color-base-content);
392
+ }
393
+ .tourtois-permission-help {
394
+ font-size: 0.75rem;
395
+ margin: 0;
396
+ color: var(--color-base-content);
397
+ }
398
+ @media (max-width: 680px) {
399
+ .tourtois-permission-selectors {
400
+ grid-template-columns: minmax(0, 1fr);
401
+ }
402
+ }
403
+
404
+ .tourtois-settings-discard {
405
+ padding: var(--spacing-md);
406
+ border-top: var(--border) solid var(--stipe-hairline);
407
+ }
408
+
409
+ /* The <=480px settings layout (hide the nav, show the mobile <select>) is
410
+ owned entirely by settings-navigation.css, @imported above; this file no
411
+ longer duplicates that breakpoint's rules. */
412
+
413
+ .tourtois-focused-controls {
414
+ display: flex;
415
+ align-items: center;
416
+ gap: var(--spacing-xs);
417
+ margin-inline-start: auto;
418
+ }
419
+ @media (max-width: 540px) {
420
+ .tourtois-app-permission-entry .tourtois-permission-selectors {
421
+ grid-template-columns: repeat(2, minmax(0, 1fr));
422
+ }
423
+ .tourtois-desktop-menu .tourtois-team-name {
424
+ display: none;
425
+ }
426
+ /* The running-App menu and mascot each occupy one phone touch slot. */
427
+ .tourtois-desktop-menu > .caps-app-bar {
428
+ min-inline-size: calc(var(--caps-touch-target) + var(--spacing-sm));
429
+ }
430
+ .tourtois-desktop-menu .caps-app-bar-launcher-button {
431
+ width: var(--caps-touch-target);
432
+ height: var(--caps-touch-target);
433
+ padding: var(--spacing-xs);
434
+ }
435
+ .tourtois-desktop-menu > .tourtois-system-menu-trigger {
436
+ flex-shrink: 0;
437
+ min-inline-size: var(--caps-touch-target);
438
+ }
439
+ }
440
+
441
+ .tourtois-app-settings-facts {
442
+ display: grid;
443
+ gap: var(--spacing-sm, 0.5rem);
444
+ margin: var(--spacing-md, 0.75rem) 0;
445
+ }
446
+
447
+ .tourtois-app-settings-facts div {
448
+ display: grid;
449
+ gap: var(--spacing-xs, 0.25rem);
450
+ grid-template-columns: 9rem minmax(0, 1fr);
451
+ }
452
+
453
+ .tourtois-app-settings-facts dt {
454
+ color: var(--stipe-fg-muted, var(--color-base-content));
455
+ font-size: 0.8rem;
456
+ }
457
+
458
+ .tourtois-app-settings-facts dd {
459
+ margin: 0;
460
+ overflow-wrap: anywhere;
461
+ }
462
+
463
+ .tourtois-pane-layer {
464
+ flex: 1;
465
+ min-height: 0;
466
+ position: relative;
467
+ width: 100%;
468
+ }
469
+
470
+ .tourtois-pane {
471
+ pointer-events: auto;
472
+ position: absolute;
473
+ top: 0;
474
+ left: 0;
475
+ }
476
+
477
+ .tourtois-pane-body {
478
+ display: flex;
479
+ flex: 1 1 auto;
480
+ flex-direction: column;
481
+ min-height: 0;
482
+ min-width: 0;
483
+ overflow: hidden;
484
+ position: relative;
485
+ }
486
+
487
+ .tourtois-app-pane .tourtois-pane-body > div {
488
+ /* The window's stable App slot; the host mounts the App frame inside it. */
489
+ display: flex;
490
+ flex: 1 1 auto;
491
+ min-height: 0;
492
+ min-width: 0;
493
+ width: 100%;
494
+ }
495
+
496
+ .tourtois-app-pane .tourtois-pane-body iframe {
497
+ border: 0;
498
+ display: block;
499
+ flex: 1 1 auto;
500
+ height: 100%;
501
+ min-height: 0;
502
+ min-width: 0;
503
+ width: 100%;
504
+ }
505
+ .tourtois-window-status {
506
+ padding: var(--spacing-xs) var(--spacing-md);
507
+ font-size: 12px;
508
+ color: var(--stipe-fg-muted);
509
+ }
510
+ .tourtois-app-loading {
511
+ align-items: center;
512
+ background: var(--color-base-100);
513
+ color: var(--color-base-content);
514
+ display: flex;
515
+ gap: var(--spacing-md);
516
+ inset: 0;
517
+ justify-content: center;
518
+ padding: var(--spacing-lg);
519
+ position: absolute;
520
+ z-index: 1;
521
+ }
522
+ .tourtois-app-loading > :is(svg, .caps-monogram) {
523
+ flex: none;
524
+ height: 2rem;
525
+ width: 2rem;
526
+ }
527
+ .tourtois-app-loading > div {
528
+ display: grid;
529
+ gap: var(--spacing-xs);
530
+ }
531
+ .tourtois-app-loading span {
532
+ color: var(--stipe-fg-muted);
533
+ font-size: var(--text-sm);
534
+ }
535
+ .tourtois-divider {
536
+ position: absolute;
537
+ top: 0;
538
+ bottom: 0;
539
+ width: 8px;
540
+ pointer-events: auto;
541
+ cursor: col-resize;
542
+ touch-action: none;
543
+ }
544
+
545
+ .tourtois-team-git {
546
+ display: flex;
547
+ flex-direction: column;
548
+ gap: var(--spacing-lg);
549
+ overflow-y: auto;
550
+ }
551
+ .tourtois-team-git > h2,
552
+ .tourtois-team-git > .tourtois-settings-lede {
553
+ margin: 0;
554
+ }
555
+ .tourtois-team-git > h2 + .tourtois-settings-lede {
556
+ margin-top: calc(var(--spacing-xs) - var(--spacing-lg));
557
+ }
558
+
559
+ /* The tracker is one settings row; its details, notes and action sit under
560
+ the label, past the row's Sigil. */
561
+ .tourtois-tracker-repository {
562
+ --tourtois-tracker-inset: calc(1.75rem + var(--spacing-sm));
563
+ display: flex;
564
+ flex-direction: column;
565
+ gap: var(--spacing-xs);
566
+ }
567
+
568
+ .tourtois-tracker-repository-row {
569
+ grid-template-columns: minmax(0, 6rem) minmax(0, 1fr);
570
+ align-items: baseline;
571
+ padding-inline-start: var(--tourtois-tracker-inset);
572
+ font-size: var(--text-sm);
573
+ }
574
+
575
+ .tourtois-tracker-repository-value {
576
+ min-width: 0;
577
+ white-space: normal;
578
+ overflow-wrap: anywhere;
579
+ }
580
+
581
+ .tourtois-tracker-repository-note {
582
+ margin: 0;
583
+ font-size: var(--text-xs);
584
+ color: var(--stipe-fg-muted);
585
+ }
586
+ .tourtois-tracker-repository-note[data-tone="error"] {
587
+ color: var(--color-error);
588
+ }
589
+ .tourtois-tracker-repository > .tourtois-tracker-repository-note {
590
+ padding-inline-start: var(--tourtois-tracker-inset);
591
+ }
592
+
593
+ .tourtois-tracker-repository-action {
594
+ display: flex;
595
+ flex-wrap: wrap;
596
+ align-items: center;
597
+ justify-content: space-between;
598
+ gap: var(--spacing-sm);
599
+ padding-inline-start: var(--tourtois-tracker-inset);
600
+ }
601
+ .tourtois-tracker-repository-action > :first-child {
602
+ flex: 1 1 16rem;
603
+ }
604
+ .tourtois-tracker-repository-action > .btn {
605
+ margin-inline-start: auto;
606
+ }
607
+
608
+ .tourtois-team-git-sigil {
609
+ display: inline-flex;
610
+ flex-shrink: 0;
611
+ }
612
+
613
+ /* The App screen scrolls as one instrument, leaving its header and Save visible. */
614
+ .tourtois-app-permission-entry .tourtois-permission-display {
615
+ min-height: 0;
616
+ }
617
+ .tourtois-permission-screen-body {
618
+ flex: 1;
619
+ min-height: 0;
620
+ overflow: auto;
621
+ padding: var(--spacing-xs);
622
+ }
623
+ .tourtois-permission-section-heading {
624
+ margin: var(--spacing-sm) 0 2px;
625
+ padding-bottom: 2px;
626
+ border-bottom: var(--border) solid var(--stipe-hairline);
627
+ }
628
+ .tourtois-permission-screen-body
629
+ section:first-child
630
+ .tourtois-permission-section-heading {
631
+ margin-top: var(--spacing-xs);
632
+ }
633
+ .tourtois-permission-shortcuts {
634
+ display: flex;
635
+ flex-wrap: wrap;
636
+ align-items: center;
637
+ gap: var(--spacing-sm);
638
+ font-size: 0.75rem;
639
+ }
640
+ .tourtois-permission-shortcuts label,
641
+ .tourtois-permission-all-rights {
642
+ display: flex;
643
+ align-items: center;
644
+ gap: var(--spacing-xs);
645
+ }
646
+ .tourtois-permission-shortcuts > span {
647
+ flex-basis: 100%;
648
+ }
649
+ @media (max-width: 540px) {
650
+ .tourtois-permission-selectors > div:empty {
651
+ display: none;
652
+ }
653
+ }
654
+
655
+ /* Layer roots stay transparent; composed portal content receives input. */
656
+ .tourtois-shell [data-maosaico-layer] > * {
657
+ pointer-events: auto;
658
+ }
659
+
660
+ .tourtois-launcher-preference {
661
+ grid-column: 1 / -1;
662
+ display: grid;
663
+ grid-template-columns: var(--spacing-xl) minmax(0, 1fr) 7rem;
664
+ align-items: center;
665
+ gap: var(--spacing-sm);
666
+ width: 100%;
667
+ min-width: 0;
668
+ }
669
+ .tourtois-launcher-preference-identity {
670
+ display: grid;
671
+ gap: var(--spacing-2xs);
672
+ min-width: 0;
673
+ overflow-wrap: anywhere;
674
+ }
675
+
676
+ /* Bento geometry belongs to Maosaico; these boxes only host and scroll its Gills. */
677
+ .tourtois-desktop {
678
+ height: 100%;
679
+ overflow: auto;
680
+ padding: 16px;
681
+ }
682
+ .tourtois-desktop-controls {
683
+ display: flex;
684
+ flex-wrap: wrap;
685
+ align-items: center;
686
+ gap: 8px;
687
+ }
688
+ .tourtois-desktop-controls {
689
+ margin-bottom: 16px;
690
+ }
691
+ .tourtois-desktop-add-gill {
692
+ width: 11rem;
693
+ flex: 0 0 auto;
694
+ }
695
+ .tourtois-gill-controls {
696
+ display: flex;
697
+ flex-wrap: nowrap;
698
+ align-items: center;
699
+ gap: 4px;
700
+ }
701
+ .tourtois-gill-sizes {
702
+ display: inline-flex;
703
+ flex: 0 0 auto;
704
+ }
705
+ .tourtois-desktop-stage {
706
+ position: relative;
707
+ }
708
+ .tourtois-desktop-tile {
709
+ position: absolute;
710
+ min-width: 0;
711
+ }
712
+ .tourtois-gill-frame {
713
+ height: 100%;
714
+ display: flex;
715
+ flex-direction: column;
716
+ overflow: hidden;
717
+ }
718
+ .tourtois-gill-frame > :last-child {
719
+ min-height: 0;
720
+ flex: 1;
721
+ display: flex;
722
+ flex-direction: column;
723
+ }
724
+ .tourtois-gill-body {
725
+ min-height: 0;
726
+ flex: 1;
727
+ overflow: auto;
728
+ }
729
+ .tourtois-gill-text-row {
730
+ display: flex;
731
+ flex-direction: column;
732
+ padding: 8px;
733
+ }
734
+
735
+ /* Touch controls share the title row; reserve their height before arranging so
736
+ entering edit mode leaves the Gill content's viewport unchanged. */
737
+ @media (max-width: 640px), (any-pointer: coarse) {
738
+ .tourtois-gill-frame .caps-section-card-heading-row {
739
+ min-height: 44px;
740
+ }
741
+ .tourtois-gill-frame .caps-card-title {
742
+ white-space: nowrap;
743
+ overflow: hidden;
744
+ text-overflow: ellipsis;
745
+ }
746
+ }
747
+
748
+ /* Measure the natural Gill body without margins collapsing out of its box. */
749
+ .tourtois-gill-content {
750
+ display: flow-root;
751
+ }
752
+
753
+ @media (max-width: 640px), (any-pointer: coarse) {
754
+ .tourtois-gill-sizes {
755
+ gap: 20px;
756
+ }
757
+ /* Reset Caps join composition when its expanded touch targets apply. */
758
+ .tourtois-gill-sizes > .join-item {
759
+ --join-ss: initial;
760
+ --join-se: initial;
761
+ --join-es: initial;
762
+ --join-ee: initial;
763
+ margin-inline-start: 0;
764
+ }
765
+ }
766
+
767
+ /* Keep the maintained Caps modal and scrim; phone placement is a bottom sheet. */
768
+ @media (max-width: 540px) {
769
+ .tourtois-gill-param-dialog {
770
+ top: auto;
771
+ bottom: 0;
772
+ translate: -50% 0;
773
+ }
774
+ }
775
+
776
+ .tourtois-avatar-picker {
777
+ display: grid;
778
+ grid-template-columns: minmax(9rem, 0.7fr) minmax(0, 2fr);
779
+ align-items: start;
780
+ gap: var(--spacing-lg);
781
+ }
782
+ .tourtois-avatar-preview {
783
+ display: grid;
784
+ justify-items: center;
785
+ text-align: center;
786
+ padding: var(--spacing-md);
787
+ }
788
+ .tourtois-avatar-preview p {
789
+ font-size: var(--text-sm);
790
+ }
791
+ .tourtois-avatar-large {
792
+ display: block;
793
+ width: 10rem;
794
+ height: 10rem;
795
+ max-width: 100%;
796
+ }
797
+ .tourtois-avatar-controls {
798
+ display: grid;
799
+ gap: var(--spacing-lg);
800
+ min-width: 0;
801
+ padding: 0;
802
+ border: 0;
803
+ }
804
+ .tourtois-avatar-characters {
805
+ display: grid;
806
+ grid-template-columns: repeat(3, minmax(0, 1fr));
807
+ gap: var(--spacing-sm);
808
+ }
809
+ .tourtois-avatar-character-preview {
810
+ display: block;
811
+ height: 4.5rem;
812
+ width: 100%;
813
+ }
814
+ .tourtois-avatar-swatches,
815
+ .tourtois-avatar-faces {
816
+ display: flex;
817
+ flex-wrap: wrap;
818
+ gap: var(--spacing-sm);
819
+ }
820
+ .tourtois-avatar-swatch {
821
+ display: grid;
822
+ place-items: center;
823
+ width: 2.75rem;
824
+ height: 2.75rem;
825
+ border: 1px solid var(--color-base-300);
826
+ border-radius: 50%;
827
+ cursor: pointer;
828
+ }
829
+ .tourtois-avatar-custom-colours {
830
+ display: grid;
831
+ grid-template-columns: repeat(2, minmax(0, 1fr));
832
+ gap: var(--spacing-md);
833
+ margin-top: var(--spacing-md);
834
+ }
835
+ .tourtois-avatar-custom-colours input {
836
+ min-height: 2.75rem;
837
+ padding: 0.25rem;
838
+ }
839
+ .tourtois-avatar-agents {
840
+ display: grid;
841
+ grid-template-columns: repeat(5, minmax(0, 1fr));
842
+ text-align: center;
843
+ font-size: var(--text-xs);
844
+ }
845
+ .tourtois-avatar-agent-preview {
846
+ display: block;
847
+ width: 100%;
848
+ height: 3rem;
849
+ }
850
+ @media (max-width: 700px) {
851
+ .tourtois-avatar-picker {
852
+ grid-template-columns: minmax(0, 1fr);
853
+ }
854
+ .tourtois-avatar-large {
855
+ width: 7rem;
856
+ height: 7rem;
857
+ }
858
+ }