@staix/agent-console 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.
@@ -0,0 +1,534 @@
1
+ /* Public tokens: all --acon-* declarations below. Public classes are listed in README's
2
+ Public styling contract. All other selectors, including shell layout/state classes,
3
+ are PRIVATE and may change. Panels must not depend on them. */
4
+ :root {
5
+ color-scheme: light;
6
+ --acon-bg: #F5F6F8;
7
+ --acon-surface: #FFFFFF;
8
+ --acon-surface-2: #EEF0F3;
9
+ --acon-line: #E2E5EA;
10
+ --acon-line-2: #D5D9E0;
11
+ --acon-text: #14181F;
12
+ --acon-text-2: #5B6472;
13
+ --acon-accent: #2B50C8;
14
+ --acon-accent-soft: #E7ECFA;
15
+ --acon-accent-text: #1E3A96;
16
+ --acon-on-accent: #FFFFFF;
17
+ --acon-ok: #17663F;
18
+ --acon-ok-soft: #E6F4EC;
19
+ --acon-warn: #8A4500;
20
+ --acon-warn-soft: #FFF1E0;
21
+ --acon-err: #A3261F;
22
+ --acon-err-soft: #FDECEC;
23
+ --acon-focus: #2B50C8;
24
+ --acon-shadow: 0 12px 32px rgb(20 24 31 / 0.14);
25
+ --acon-space-1: 4px;
26
+ --acon-space-2: 8px;
27
+ --acon-space-3: 12px;
28
+ --acon-space-4: 16px;
29
+ --acon-space-5: 24px;
30
+ --acon-space-6: 32px;
31
+ --acon-radius-1: 6px;
32
+ --acon-radius-2: 8px;
33
+ --acon-radius-3: 12px;
34
+ --acon-font-ui: -apple-system, BlinkMacSystemFont, "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", system-ui, sans-serif;
35
+ --acon-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
36
+ --acon-text-2xs: 0.6875rem;
37
+ --acon-text-xs: 0.75rem;
38
+ --acon-text-sm: 0.8125rem;
39
+ --acon-text-md: 0.875rem;
40
+ --acon-text-base: 0.9375rem;
41
+ --acon-text-lg: 1rem;
42
+ --acon-text-xl: 1.0625rem;
43
+ --acon-text-2xl: 1.375rem;
44
+ --acon-ease: 160ms cubic-bezier(0.2, 0, 0, 1);
45
+ }
46
+ :root[data-theme="dark"] {
47
+ color-scheme: dark;
48
+ --acon-bg: #0E1116;
49
+ --acon-surface: #161A21;
50
+ --acon-surface-2: #1E232C;
51
+ --acon-line: #262C36;
52
+ --acon-line-2: #364050;
53
+ --acon-text: #E8EBF0;
54
+ --acon-text-2: #A9B1BE;
55
+ --acon-accent: #7EA2FF;
56
+ --acon-accent-soft: #1C2A4F;
57
+ --acon-accent-text: #A8C0FF;
58
+ --acon-on-accent: #0E1116;
59
+ --acon-ok: #7FD3A2;
60
+ --acon-ok-soft: #10291C;
61
+ --acon-warn: #F2B66B;
62
+ --acon-warn-soft: #33240F;
63
+ --acon-err: #F29A93;
64
+ --acon-err-soft: #3A1715;
65
+ --acon-focus: #7EA2FF;
66
+ --acon-shadow: 0 12px 32px rgb(0 0 0 / 0.5);
67
+ }
68
+ @media (prefers-color-scheme: dark) {
69
+ :root:not([data-theme="light"]) {
70
+ color-scheme: dark;
71
+ --acon-bg: #0E1116;
72
+ --acon-surface: #161A21;
73
+ --acon-surface-2: #1E232C;
74
+ --acon-line: #262C36;
75
+ --acon-line-2: #364050;
76
+ --acon-text: #E8EBF0;
77
+ --acon-text-2: #A9B1BE;
78
+ --acon-accent: #7EA2FF;
79
+ --acon-accent-soft: #1C2A4F;
80
+ --acon-accent-text: #A8C0FF;
81
+ --acon-on-accent: #0E1116;
82
+ --acon-ok: #7FD3A2;
83
+ --acon-ok-soft: #10291C;
84
+ --acon-warn: #F2B66B;
85
+ --acon-warn-soft: #33240F;
86
+ --acon-err: #F29A93;
87
+ --acon-err-soft: #3A1715;
88
+ --acon-focus: #7EA2FF;
89
+ --acon-shadow: 0 12px 32px rgb(0 0 0 / 0.5);
90
+ }
91
+ }
92
+
93
+ * { box-sizing: border-box; }
94
+ html { -webkit-text-size-adjust: 100%; }
95
+ body {
96
+ margin: 0;
97
+ background: var(--acon-bg);
98
+ color: var(--acon-text);
99
+ font: var(--acon-text-md)/1.5 var(--acon-font-ui);
100
+ word-break: keep-all;
101
+ overflow-wrap: anywhere;
102
+ }
103
+ a { color: var(--acon-accent-text); }
104
+ button, input { font: inherit; color: inherit; }
105
+ kbd, code, .mono { font-family: var(--acon-font-mono); font-size: var(--acon-text-xs); }
106
+ kbd { padding: 0 5px; border: 1px solid var(--acon-line-2); border-radius: 4px; background: var(--acon-surface); color: var(--acon-text-2); }
107
+ :focus-visible { outline: 3px solid var(--acon-focus); outline-offset: 2px; }
108
+ [hidden] { display: none !important; }
109
+ .skip { position: absolute; left: 8px; top: 8px; transform: translateY(calc(-100% - 16px)); padding: 8px 12px; background: var(--acon-surface); border-radius: var(--acon-radius-2); z-index: 10; }
110
+ .skip:focus { transform: none; }
111
+ .ic { width: 18px; height: 18px; flex: none; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
112
+
113
+ /* Layout */
114
+ .app { display: grid; grid-template-columns: 216px minmax(0, 1fr); min-height: 100vh; min-height: 100dvh; }
115
+ .rail { position: sticky; top: 0; height: 100vh; height: 100dvh; display: flex; flex-direction: column; gap: var(--acon-space-1); padding: var(--acon-space-3) var(--acon-space-2); background: var(--acon-surface); border-right: 1px solid var(--acon-line); }
116
+ .brand .ic { width: 22px; height: 22px; color: var(--acon-accent); }
117
+ .brand { display: flex; align-items: center; gap: var(--acon-space-2); padding: 6px 10px 14px; color: var(--acon-text); font-weight: 650; font-size: var(--acon-text-base); text-decoration: none; }
118
+ .areas { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
119
+ .areas a { display: flex; align-items: center; gap: 10px; min-height: 36px; padding: 0 10px; border-radius: var(--acon-radius-2); color: var(--acon-text-2); text-decoration: none; }
120
+ .areas a:hover { background: var(--acon-surface-2); color: var(--acon-text); }
121
+ .areas a[aria-current="page"] { background: var(--acon-accent-soft); color: var(--acon-accent-text); font-weight: 600; }
122
+ .areas .label { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
123
+ .badge { min-width: 20px; padding: 0 6px; border-radius: 10px; background: var(--acon-surface-2); color: var(--acon-text); font-size: var(--acon-text-xs); font-weight: 600; text-align: center; }
124
+ .badge.warn { background: var(--acon-warn-soft); color: var(--acon-warn); }
125
+ .column { min-width: 0; display: flex; flex-direction: column; }
126
+ .top { display: flex; flex-shrink: 0; flex-wrap: wrap; align-items: center; gap: var(--acon-space-3); min-height: 56px; padding: 0 var(--acon-space-5); background: var(--acon-surface); border-bottom: 1px solid var(--acon-line); }
127
+ .crumbs { display: flex; align-items: center; gap: var(--acon-space-2); min-width: 0; font-weight: 600; }
128
+ .crumbs > :first-child, .crumbs .sep { flex-shrink: 0; }
129
+ .crumbs .sep { color: var(--acon-text-2); font-weight: 400; }
130
+ .crumbs .sub { color: var(--acon-text-2); font-weight: 400; }
131
+ .search-open { display: flex; align-items: center; gap: var(--acon-space-2); flex: 0 1 360px; min-width: 0; margin-left: auto; min-height: 34px; padding: 0 10px; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-bg); color: var(--acon-text-2); cursor: pointer; text-align: left; }
132
+ .search-open .search-label { flex: 1; min-width: 0; white-space: normal; overflow-wrap: anywhere; }
133
+ .live { display: flex; align-items: center; gap: 6px; color: var(--acon-text-2); font-size: var(--acon-text-sm); white-space: nowrap; }
134
+ .live .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--acon-ok); }
135
+ .live.stale .dot { background: var(--acon-warn); border-radius: 2px; }
136
+ .live.offline .dot { background: var(--acon-err); border-radius: 0; transform: rotate(45deg); }
137
+ .tabs { display: flex; flex-shrink: 0; gap: 4px; padding: 0 var(--acon-space-5); background: var(--acon-surface); border-bottom: 1px solid var(--acon-line); overflow-x: auto; scrollbar-width: none; scroll-snap-type: x proximity; }
138
+ .tabs::before, .tabs::after { content: ""; position: sticky; z-index: 1; flex: 0 0 20px; pointer-events: none; opacity: 0; }
139
+ .tabs::before { left: 0; margin-right: -24px; background: linear-gradient(to right, var(--acon-surface), transparent); }
140
+ .tabs::after { right: 0; margin-left: -24px; background: linear-gradient(to left, var(--acon-surface), transparent); }
141
+ .tabs.more-before::before, .tabs.more-after::after { opacity: 1; }
142
+ .tab { flex: 0 0 auto; max-width: 100%; min-height: 40px; padding: 8px 12px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--acon-text-2); cursor: pointer; white-space: normal; overflow-wrap: anywhere; scroll-snap-align: start; }
143
+ .tab[aria-selected="true"] { border-bottom-color: var(--acon-accent); color: var(--acon-accent-text); font-weight: 600; }
144
+ main { flex: 1; min-width: 0; padding: var(--acon-space-5); }
145
+ #main:focus { outline: none; }
146
+ .view { max-width: 1040px; }
147
+ .panel-mount { min-width: 0; }
148
+ @media (min-width: 1240px) { .app.peeking .column { padding-right: 420px; } }
149
+
150
+ /* Text */
151
+ h1.lead { margin: 0; font-size: var(--acon-text-2xl); font-weight: 650; line-height: 1.3; }
152
+ p.sub { margin: var(--acon-space-1) 0 0; color: var(--acon-text-2); }
153
+ .notice { display: flex; align-items: center; gap: var(--acon-space-2); margin: var(--acon-space-3) 0; padding: var(--acon-space-2) var(--acon-space-3); border-radius: var(--acon-radius-2); background: var(--acon-warn-soft); color: var(--acon-warn); font-size: var(--acon-text-sm); }
154
+ .notice a, .notice button.link { color: inherit; }
155
+ button.link { padding: 0; border: 0; background: none; text-decoration: underline; cursor: pointer; }
156
+
157
+ /* Buttons and chips */
158
+ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 32px; max-width: 100%; padding: 0 12px; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-surface); color: var(--acon-text); cursor: pointer; white-space: normal; overflow-wrap: anywhere; transition: background-color var(--acon-ease), border-color var(--acon-ease); }
159
+ .btn:hover { background: var(--acon-surface-2); }
160
+ .btn.primary { border-color: var(--acon-accent); background: var(--acon-accent); color: var(--acon-on-accent); font-weight: 600; }
161
+ .btn.primary:hover { filter: brightness(1.08); }
162
+ .btn.danger { border-color: var(--acon-err); color: var(--acon-err); }
163
+ .btn.danger.primary { background: var(--acon-err); color: var(--acon-on-accent); }
164
+ .btn:disabled { opacity: 0.55; cursor: not-allowed; filter: none; }
165
+ .btn kbd { border: 0; background: transparent; color: inherit; opacity: 0.8; padding: 0; }
166
+ .icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border: 0; border-radius: var(--acon-radius-2); background: transparent; color: var(--acon-text-2); cursor: pointer; }
167
+ .icon-btn:hover { background: var(--acon-surface-2); color: var(--acon-text); }
168
+ .chip { display: inline-block; max-width: 100%; padding: 1px 8px; border-radius: var(--acon-radius-1); background: var(--acon-surface-2); color: var(--acon-text-2); font-size: var(--acon-text-xs); font-weight: 600; overflow-wrap: anywhere; }
169
+ .chip.ok { background: var(--acon-ok-soft); color: var(--acon-ok); }
170
+ .chip.warn { background: var(--acon-warn-soft); color: var(--acon-warn); }
171
+ .chip.err { background: var(--acon-err-soft); color: var(--acon-err); }
172
+ .chip.accent { background: var(--acon-accent-soft); color: var(--acon-accent-text); }
173
+
174
+ /* Inbox */
175
+ .group { margin-top: var(--acon-space-5); }
176
+ .group h2 { display: flex; align-items: center; gap: var(--acon-space-2); margin: 0 0 var(--acon-space-2); font-size: var(--acon-text-xs); font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--acon-text-2); }
177
+ .rows { list-style: none; margin: 0; padding: 0; background: var(--acon-surface); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-3); overflow: hidden; }
178
+ .row { display: flex; align-items: center; gap: var(--acon-space-3); min-height: 52px; padding: 6px var(--acon-space-3) 6px var(--acon-space-2); border-top: 1px solid var(--acon-line); }
179
+ .row:first-child { border-top: 0; }
180
+ .row.selected { background: var(--acon-surface-2); }
181
+ .row-main { display: flex; align-items: center; gap: var(--acon-space-3); flex: 1; min-width: 0; min-height: 40px; padding: 4px 6px; border: 0; border-radius: var(--acon-radius-2); background: transparent; text-align: left; cursor: pointer; }
182
+ .whose { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; flex: none; background: var(--acon-surface-2); color: var(--acon-text-2); }
183
+ .whose.you { background: var(--acon-warn-soft); color: var(--acon-warn); }
184
+ .whose.alert { background: var(--acon-err-soft); color: var(--acon-err); }
185
+ .row-text { min-width: 0; display: flex; flex-direction: column; }
186
+ .row-title { font-weight: 600; }
187
+ .row-sub { color: var(--acon-text-2); font-size: var(--acon-text-sm); white-space: normal; }
188
+ .row-verbs { display: flex; flex-wrap: wrap; gap: var(--acon-space-2); flex: none; max-width: 100%; }
189
+ .row:not(.selected) .btn.primary:not(.danger) { border-color: var(--acon-line-2); background: var(--acon-surface); color: var(--acon-accent-text); }
190
+ .empty { margin-top: var(--acon-space-5); padding: var(--acon-space-5); border: 1px dashed var(--acon-line-2); border-radius: var(--acon-radius-3); color: var(--acon-text-2); }
191
+ .empty strong { display: block; color: var(--acon-text); margin-bottom: var(--acon-space-1); }
192
+
193
+ /* PUBLIC panel kit detail/form classes; shared public rows/buttons/chips are above. */
194
+ .ui-rows .row-main { min-height: 44px; }
195
+ .ui-rows .row-main:focus-visible { outline-offset: -3px; }
196
+ .ui-rows .row-sub { white-space: normal; }
197
+ .ui-notice { background: var(--acon-surface-2); color: var(--acon-text-2); }
198
+ .ui-notice.ok { background: var(--acon-ok-soft); color: var(--acon-ok); }
199
+ .ui-notice.warn { background: var(--acon-warn-soft); color: var(--acon-warn); }
200
+ .ui-notice.err { background: var(--acon-err-soft); color: var(--acon-err); }
201
+ .ui-table-wrap { max-width: 100%; overflow-x: auto; border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); }
202
+ .ui-table-wrap:focus-visible { outline: 2px solid var(--acon-accent); outline-offset: 2px; }
203
+ .ui-table { width: 100%; border-collapse: collapse; font-size: var(--acon-text-sm); font-variant-numeric: tabular-nums; }
204
+ .ui-table caption { padding: var(--acon-space-2) var(--acon-space-3); caption-side: top; text-align: start; font-weight: 600; }
205
+ .ui-table th, .ui-table td { padding: var(--acon-space-2) var(--acon-space-3); border-top: 1px solid var(--acon-line); text-align: start; vertical-align: top; overflow-wrap: anywhere; }
206
+ .ui-table thead th { background: var(--acon-surface-2); color: var(--acon-text-2); font-weight: 600; white-space: nowrap; }
207
+ .ui-table tbody th { font-weight: 500; }
208
+ .ui-table .end { text-align: end; }
209
+ .ui-sort { display: inline-flex; align-items: center; min-height: 44px; padding: 0; border: 0; background: none; color: inherit; font: inherit; cursor: pointer; }
210
+ .ui-sort:focus-visible { outline: 2px solid var(--acon-accent); outline-offset: 2px; }
211
+ .ui-chart { margin: var(--acon-space-3) 0; min-width: 0; }
212
+ .ui-chart figcaption { display: flex; flex-wrap: wrap; gap: var(--acon-space-2); justify-content: space-between; margin-bottom: var(--acon-space-2); font-weight: 600; }
213
+ .ui-bars { display: grid; grid-template-columns: minmax(6rem, max-content) minmax(4rem, 1fr) max-content; gap: var(--acon-space-2) var(--acon-space-3); align-items: center; margin: 0; padding: 0; list-style: none; font-size: var(--acon-text-sm); }
214
+ .ui-bar { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; align-items: center; }
215
+ .ui-bar-label { overflow-wrap: anywhere; }
216
+ .ui-bar-value { color: var(--acon-text-2); font-variant-numeric: tabular-nums; text-align: end; }
217
+ .ui-bar-svg { display: block; width: 100%; height: 12px; }
218
+ .ui-bar-track { fill: var(--acon-surface-2); }
219
+ .ui-bar-fill { fill: var(--acon-accent); }
220
+ .ui-bar-target { stroke: var(--acon-text); stroke-width: 2px; }
221
+ .ui-spark-summary { color: var(--acon-text-2); font-size: var(--acon-text-sm); font-weight: 400; }
222
+ .ui-spark-svg { display: block; width: 100%; height: 40px; }
223
+ .ui-spark-line { fill: none; stroke: var(--acon-accent); stroke-width: 2px; stroke-linejoin: round; }
224
+ .ui-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
225
+ @media (max-width: 600px) {
226
+ .ui-bars { grid-template-columns: 1fr max-content; }
227
+ .ui-bar-svg { grid-column: 1 / -1; }
228
+ }
229
+ .ui-img { display: block; max-width: 100%; height: auto; border-radius: var(--acon-radius-2); }
230
+ .ui-frame { display: block; width: 100%; height: min(80vh, 900px); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); background: var(--acon-surface); }
231
+ .ui-link { color: var(--acon-accent-text); text-decoration: underline; text-underline-offset: 2px; }
232
+ .ui-link:focus-visible { outline: 2px solid var(--acon-accent); outline-offset: 2px; }
233
+ .ui-review { display: flex; flex-direction: column; gap: var(--acon-space-3); min-width: 0; }
234
+ .ui-review-doc { border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); background: var(--acon-surface); overflow-x: auto; }
235
+ .ui-review-unit { display: grid; grid-template-columns: 4.5rem minmax(0, 1fr) auto; align-items: start; border-left: 3px solid transparent; }
236
+ .ui-review-gutter, .ui-review-gutter-pad { min-height: 24px; padding: 2px var(--acon-space-2); border: 0; background: var(--acon-surface-2); color: var(--acon-text-2); font: inherit; font-family: var(--acon-font-mono); font-size: var(--acon-text-xs); text-align: end; cursor: pointer; align-self: stretch; }
237
+ .ui-review-gutter:focus-visible { outline: 2px solid var(--acon-accent); outline-offset: -2px; }
238
+ .ui-review-text { padding: 2px var(--acon-space-3); min-width: 0; }
239
+ .ui-review-src { display: block; min-height: 1.4em; white-space: pre; font-family: var(--acon-font-mono); font-size: var(--acon-text-sm); }
240
+ .ui-review-prose .ui-review-unit { padding: var(--acon-space-2) 0; }
241
+ .ui-review-prose .ui-review-src { white-space: pre-wrap; overflow-wrap: anywhere; font-family: inherit; font-size: var(--acon-text-md, 1rem); line-height: 1.6; }
242
+ .ui-review-add { background: var(--acon-ok-soft); }
243
+ .ui-review-del { background: var(--acon-err-soft); }
244
+ .ui-review-hunk, .ui-review-meta { color: var(--acon-text-2); background: var(--acon-surface-2); }
245
+ .ui-review-has-thread { border-left-color: var(--acon-warn); }
246
+ .ui-review-selected { border-left-color: var(--acon-accent); background: var(--acon-accent-soft); }
247
+ .ui-review-mark { margin: 2px var(--acon-space-2); min-height: 24px; padding: 0 var(--acon-space-2); border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-warn-soft); color: var(--acon-warn); font: inherit; font-size: var(--acon-text-xs); cursor: pointer; }
248
+ .ui-review-mark:focus-visible { outline: 2px solid var(--acon-accent); outline-offset: 2px; }
249
+ .ui-review-strip { padding: var(--acon-space-3); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); background: var(--acon-warn-soft); }
250
+ .ui-review-strip h3 { margin: 0 0 var(--acon-space-2); font-size: var(--acon-text-sm); }
251
+ .ui-review-strip ul { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--acon-space-2); }
252
+ .ui-review-quote { margin: var(--acon-space-1) 0; padding-left: var(--acon-space-2); border-left: 3px solid var(--acon-line-2); white-space: pre-wrap; overflow-wrap: anywhere; font-family: var(--acon-font-mono); font-size: var(--acon-text-xs); }
253
+ .ui-review-thread-body { margin: var(--acon-space-1) 0 0; white-space: pre-wrap; overflow-wrap: anywhere; }
254
+ .ui-review-thread { padding: var(--acon-space-3) 0; border-top: 1px solid var(--acon-line); }
255
+ .ui-review-status { margin: 0; min-height: 1.4em; color: var(--acon-text-2); font-size: var(--acon-text-sm); }
256
+ .ui-review-box { display: flex; flex-direction: column; gap: var(--acon-space-2); padding: var(--acon-space-3); border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-surface); }
257
+ .ui-review-box[hidden] { display: none; }
258
+ .ui-review-target { margin: 0; font-weight: 600; }
259
+ .ui-review-input { width: 100%; min-height: 88px; padding: 6px 10px; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-bg); color: var(--acon-text); font: inherit; resize: vertical; }
260
+ .ui-review-box-actions { display: flex; gap: var(--acon-space-2); }
261
+ .ui-review-box-actions .btn { min-height: 44px; }
262
+ @media (max-width: 600px) { .ui-review-unit { grid-template-columns: 3rem minmax(0, 1fr); } .ui-review-mark { grid-column: 2; justify-self: start; } }
263
+ .ui-visual { margin: var(--acon-space-3) 0; min-width: 0; }
264
+ .ui-visual > figcaption { margin-bottom: var(--acon-space-2); font-weight: 600; }
265
+ .ui-visual-frame { display: block; width: 100%; border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); background: var(--acon-surface); color-scheme: normal; }
266
+ .ui-visual-loading { visibility: hidden; height: 0; }
267
+ .ui-visual-status { margin: 0; color: var(--acon-text-2); font-size: var(--acon-text-sm); }
268
+ .ui-visual-source, .ui-visual-text { margin: 0; padding: var(--acon-space-3); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); background: var(--acon-surface-2); white-space: pre-wrap; overflow-wrap: anywhere; font-family: var(--acon-font-mono); font-size: var(--acon-text-sm); }
269
+ .ui-visual-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: var(--acon-space-3); margin: 0; padding: 0; list-style: none; }
270
+ .ui-visual-option { display: flex; flex-direction: column; gap: var(--acon-space-2); padding: var(--acon-space-3); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-3); background: var(--acon-surface); }
271
+ .ui-visual-option.recommended { border: 2px solid var(--acon-ok); border-style: double; border-width: 3px; }
272
+ .ui-visual-option-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--acon-space-2); }
273
+ .ui-visual-option h3 { margin: 0; flex: 1 1 auto; font-size: var(--acon-text-lg, 1.125rem); }
274
+ .ui-visual-option p { margin: 0; }
275
+ .ui-visual-points ul { margin: var(--acon-space-1) 0 0; padding-left: 1.25rem; }
276
+ .ui-visual-points.pros strong { color: var(--acon-ok); }
277
+ .ui-visual-points.cons strong { color: var(--acon-err); }
278
+ .ui-visual-pair { display: grid; grid-template-columns: 1fr 1fr; gap: var(--acon-space-3); }
279
+ .ui-visual-side { min-width: 0; }
280
+ .ui-visual-side h3 { margin: 0 0 var(--acon-space-2); font-size: var(--acon-text-sm); color: var(--acon-text-2); }
281
+ @media (max-width: 767px) { .ui-visual-pair { grid-template-columns: 1fr; } }
282
+ .ui-form { display: flex; flex-direction: column; align-items: stretch; gap: var(--acon-space-3); }
283
+ .ui-form .btn { align-self: flex-start; min-height: 44px; }
284
+ .ui-field { display: flex; flex-direction: column; gap: var(--acon-space-1); min-width: 0; }
285
+ .ui-field input { width: 100%; min-width: 0; min-height: 44px; padding: 6px 10px; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-bg); }
286
+ .ui-detail { display: flex; flex-direction: column; gap: var(--acon-space-4); min-width: 0; }
287
+ .ui-detail-head { display: flex; align-items: baseline; flex-wrap: wrap; gap: var(--acon-space-2); }
288
+ .ui-detail-head h2 { flex: 1 0 100%; margin: 0; font-size: var(--acon-text-2xl); font-weight: 650; line-height: 1.3; text-wrap: balance; }
289
+ .ui-detail-kind { color: var(--acon-text-2); font-size: var(--acon-text-xs); font-weight: 600; }
290
+ .ui-detail-move { color: var(--acon-text-2); font-size: var(--acon-text-sm); }
291
+ .ui-detail-actions { display: flex; flex-wrap: wrap; gap: var(--acon-space-2); }
292
+ .ui-detail-actions .btn { min-height: 44px; white-space: normal; }
293
+ .ui-detail-summary { margin: 0; white-space: pre-wrap; }
294
+ .ui-provenance { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 3fr); gap: var(--acon-space-2); margin: 0; padding: var(--acon-space-3); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); background: var(--acon-surface-2); font-size: var(--acon-text-sm); }
295
+ .ui-provenance dt { color: var(--acon-text-2); }
296
+ .ui-provenance dd { min-width: 0; margin: 0; }
297
+ .ui-provenance time { display: block; color: var(--acon-text-2); font-variant-numeric: tabular-nums; }
298
+ .ui-detail-section { border-top: 1px solid var(--acon-line); }
299
+ .ui-detail-section > summary { display: list-item; min-height: 44px; padding: var(--acon-space-3) 0; cursor: pointer; font-weight: 600; }
300
+ .ui-detail-body { padding-bottom: var(--acon-space-3); white-space: pre-wrap; }
301
+ .ui-detail-footer { padding-top: var(--acon-space-3); border-top: 1px solid var(--acon-line); color: var(--acon-text-2); overflow-wrap: anywhere; }
302
+ /* PRIVATE shell surfaces resume. Public .card remains available to panel authors. */
303
+
304
+ /* Cards (System) */
305
+ .cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--acon-space-4); margin-top: var(--acon-space-5); }
306
+ .card { min-width: 0; padding: var(--acon-space-4); background: var(--acon-surface); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-3); }
307
+ .card h2 { margin: 0 0 var(--acon-space-3); font-size: var(--acon-text-base); }
308
+ .card.wide { grid-column: 1 / -1; }
309
+ .kv { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 6px var(--acon-space-4); margin: 0; font-size: var(--acon-text-sm); }
310
+ .kv dt { color: var(--acon-text-2); }
311
+ .kv dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
312
+ .list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--acon-space-2); font-size: var(--acon-text-sm); }
313
+ .list li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px var(--acon-space-2); padding-bottom: var(--acon-space-2); border-bottom: 1px solid var(--acon-line); }
314
+ .list li:last-child { border-bottom: 0; padding-bottom: 0; }
315
+ .list .meta { color: var(--acon-text-2); }
316
+ .segmented { display: inline-flex; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); overflow: hidden; }
317
+ .segmented button { min-height: 32px; padding: 0 12px; border: 0; border-left: 1px solid var(--acon-line-2); background: var(--acon-surface); cursor: pointer; }
318
+ .segmented button:first-child { border-left: 0; }
319
+ .segmented button[aria-pressed="true"] { background: var(--acon-accent-soft); color: var(--acon-accent-text); font-weight: 600; }
320
+
321
+ /* Sheet (peek) */
322
+ .sheet { position: fixed; z-index: 20; top: 0; right: 0; bottom: 0; width: min(420px, 100vw); display: flex; flex-direction: column; background: var(--acon-surface); border-left: 1px solid var(--acon-line); box-shadow: var(--acon-shadow); }
323
+ .sheet-head { display: flex; align-items: center; gap: var(--acon-space-2); min-height: 56px; padding: 0 var(--acon-space-2) 0 var(--acon-space-4); border-bottom: 1px solid var(--acon-line); }
324
+ .sheet-head h2 { flex: 1; min-width: 0; margin: 0; padding: 8px 0; font-size: var(--acon-text-xl); font-weight: 650; }
325
+ .sheet-body { flex: 1; overflow-y: auto; padding: var(--acon-space-4); display: flex; flex-direction: column; gap: var(--acon-space-4); }
326
+ .sheet-body .detail { margin: 0; white-space: pre-wrap; }
327
+ /* Inbox answers and results (#27) */
328
+ .answer-form { display: flex; flex-direction: column; gap: var(--acon-space-3); }
329
+ .answer-q { margin: 0; padding: var(--acon-space-3); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); min-width: 0; }
330
+ .answer-q legend { display: flex; flex-direction: column; gap: var(--acon-space-1); float: left; width: 100%; margin-bottom: var(--acon-space-2); padding: 0; }
331
+ .answer-q legend + * { clear: both; }
332
+ .answer-q legend small, .answer-label small { color: var(--acon-text-2); font-size: var(--acon-text-sm); }
333
+ .answer-opt { display: flex; align-items: flex-start; gap: var(--acon-space-2); min-height: 44px; padding: var(--acon-space-1) 0; cursor: pointer; }
334
+ .answer-opt input[type="radio"], .answer-opt input[type="checkbox"] { flex: none; width: 1.1rem; height: 1.1rem; margin: 0.15rem 0 0; accent-color: var(--acon-accent); }
335
+ .answer-opt input:focus-visible { outline: 2px solid var(--acon-focus); outline-offset: 2px; }
336
+ .answer-label { display: flex; flex-direction: column; min-width: 0; overflow-wrap: anywhere; }
337
+ .answer-other { flex-direction: column; align-items: stretch; cursor: default; }
338
+ .answer-other-text { min-height: 44px; padding: 0 var(--acon-space-2); border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-surface); color: var(--acon-text); font: inherit; }
339
+ .answer-error { margin: 0; color: var(--acon-err); }
340
+ .answer-error:empty { display: none; }
341
+ .answer-review h3 { margin: 0; font-size: var(--acon-text-md); }
342
+ .group h2 .group-command { margin-inline-start: auto; min-height: 32px; font-size: var(--acon-text-sm); font-weight: 500; letter-spacing: normal; text-transform: none; color: var(--acon-text); }
343
+ .seen-end { display: block; height: 1px; }
344
+ .sheet-verbs { display: flex; flex-wrap: wrap; gap: var(--acon-space-2); }
345
+ .reason-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--acon-space-2); flex: 1 0 100%; }
346
+ .row:has(> .reason-row) { flex-wrap: wrap; }
347
+ .row > .reason-row { padding: 0 0 4px 46px; }
348
+ .reason-row input { flex: 1 1 200px; min-width: 0; min-height: 36px; padding: 0 10px; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-bg); }
349
+ .reason-row input[aria-invalid="true"] { border-color: var(--acon-err); }
350
+ .reason-error { flex: 1 0 100%; color: var(--acon-err); font-size: var(--acon-text-sm); }
351
+ .reason-error:empty { display: none; }
352
+
353
+ /* Dialogs */
354
+ dialog { padding: 0; border: 1px solid var(--acon-line); border-radius: var(--acon-radius-3); background: var(--acon-surface); color: var(--acon-text); box-shadow: var(--acon-shadow); width: min(560px, calc(100vw - 32px)); max-height: calc(100dvh - 32px); }
355
+ dialog::backdrop { background: rgb(14 17 22 / 0.4); }
356
+ .dialog-body { padding: var(--acon-space-5); display: flex; flex-direction: column; gap: var(--acon-space-3); overflow-y: auto; }
357
+ .dialog-body h2 { margin: 0; font-size: var(--acon-text-xl); }
358
+ .dialog-body h3 { margin: var(--acon-space-2) 0 0; font-size: var(--acon-text-sm); color: var(--acon-text-2); font-weight: 600; }
359
+ .dialog-foot { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--acon-space-2); padding: var(--acon-space-3) var(--acon-space-5); border-top: 1px solid var(--acon-line); }
360
+ .changes { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
361
+ .changes li { display: flex; align-items: baseline; gap: var(--acon-space-2); min-width: 0; }
362
+ .changes .sub { color: var(--acon-text-2); font-size: var(--acon-text-sm); }
363
+ .changes .target { font-family: var(--acon-font-mono); font-size: var(--acon-text-xs); overflow-wrap: anywhere; }
364
+ .warnings { margin: 0; padding: var(--acon-space-2) var(--acon-space-3) var(--acon-space-2) 28px; border-radius: var(--acon-radius-2); background: var(--acon-warn-soft); color: var(--acon-warn); font-size: var(--acon-text-sm); }
365
+ details.preview summary { cursor: pointer; color: var(--acon-text-2); font-size: var(--acon-text-sm); }
366
+ details.preview pre { max-height: 240px; overflow: auto; margin: var(--acon-space-2) 0 0; padding: var(--acon-space-3); border-radius: var(--acon-radius-2); background: var(--acon-bg); font-family: var(--acon-font-mono); font-size: var(--acon-text-xs); white-space: pre-wrap; }
367
+ .validity { margin: 0; color: var(--acon-text-2); font-size: var(--acon-text-sm); }
368
+ .validity.expired { color: var(--acon-err); }
369
+ .typed input { width: 100%; min-height: 36px; margin-top: 6px; padding: 0 10px; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background: var(--acon-bg); }
370
+ .palette { margin-top: 12vh; width: min(640px, calc(100vw - 32px)); }
371
+ .palette-field { padding: var(--acon-space-3); border-bottom: 1px solid var(--acon-line); }
372
+ .palette-field input { width: 100%; min-height: 40px; padding: 0 var(--acon-space-3); border: 0; background: transparent; font-size: var(--acon-text-lg); outline: none; }
373
+ #palette-list { list-style: none; margin: 0; padding: var(--acon-space-2); max-height: 52vh; overflow-y: auto; }
374
+ #palette-list .heading { padding: var(--acon-space-2) var(--acon-space-2) 4px; font-size: var(--acon-text-xs); font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--acon-text-2); }
375
+ #palette-list [role="option"] { display: flex; align-items: center; gap: var(--acon-space-3); min-height: 40px; padding: 4px var(--acon-space-2); border-radius: var(--acon-radius-2); cursor: pointer; }
376
+ #palette-list [role="option"][aria-selected="true"] { background: var(--acon-accent-soft); color: var(--acon-accent-text); }
377
+ #palette-list .opt-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
378
+ #palette-list .opt-title { white-space: normal; }
379
+ #palette-list .opt-sub { font-size: var(--acon-text-xs); color: var(--acon-text-2); white-space: normal; }
380
+ #palette-list .none { padding: var(--acon-space-3); color: var(--acon-text-2); }
381
+ .palette-hint { margin: 0; padding: var(--acon-space-2) var(--acon-space-4); border-top: 1px solid var(--acon-line); color: var(--acon-text-2); font-size: var(--acon-text-xs); }
382
+ .keys table { width: 100%; border-collapse: collapse; font-size: var(--acon-text-sm); }
383
+ .keys td { padding: 6px 0; border-bottom: 1px solid var(--acon-line); }
384
+ .keys td:first-child { width: 40%; }
385
+
386
+ /* Toasts */
387
+ .toasts { position: fixed; z-index: 40; left: 50%; bottom: var(--acon-space-5); transform: translateX(-50%); display: flex; flex-direction: column; gap: var(--acon-space-2); width: min(480px, calc(100vw - 32px)); pointer-events: none; }
388
+ .toast { display: flex; align-items: center; gap: var(--acon-space-3); padding: 10px var(--acon-space-3) 10px var(--acon-space-4); border-radius: var(--acon-radius-2); background: var(--acon-text); color: var(--acon-bg); box-shadow: var(--acon-shadow); pointer-events: auto; }
389
+ .toast span { flex: 1; }
390
+ .toast.err { background: var(--acon-err-soft); color: var(--acon-err); border: 1px solid var(--acon-err); }
391
+ .toast .btn { min-height: 28px; border-color: currentColor; background: transparent; color: inherit; }
392
+
393
+ .ended { max-width: 520px; margin: 12vh auto 0; text-align: center; }
394
+
395
+ /* Phone: bottom tabs, bottom sheet, 44 px targets */
396
+ /* Pet and Mini. Sheets are Codex v2: 8x11 cells of 192x208; rows 0 idle, 5 failed, 6 waiting, 8 review. */
397
+ .pet { display: inline-flex; align-items: center; gap: 2px; min-height: 40px; padding: 0 4px; border: 0; border-radius: var(--acon-radius-2); background: transparent; color: var(--acon-text); cursor: pointer; }
398
+ .pet:hover { background: var(--acon-surface-2); }
399
+ .pet-sprite { --cell-w: 36px; --cell-h: 39px; --row: 0; flex: none; width: var(--cell-w); height: var(--cell-h); background-image: var(--pet-sheet); background-repeat: no-repeat; background-size: calc(var(--cell-w) * 8) calc(var(--cell-h) * 11); background-position: 0 calc(var(--cell-h) * var(--row) * -1); }
400
+ .pet-sprite.large { --cell-w: 96px; --cell-h: 104px; }
401
+ .pet-sprite[data-pose="failed"] { --row: 5; animation: pet-8 1.2s steps(8) infinite; }
402
+ .pet-sprite[data-pose="waiting"] { --row: 6; animation: pet-6 0.9s steps(6) infinite; }
403
+ .pet-sprite[data-pose="review"] { --row: 8; animation: pet-6 0.9s steps(6) infinite; }
404
+ @keyframes pet-6 { to { background-position-x: calc(var(--cell-w) * -6); } }
405
+ @keyframes pet-8 { to { background-position-x: calc(var(--cell-w) * -8); } }
406
+ .card-sub { margin: var(--acon-space-4) 0 var(--acon-space-2); font-size: var(--acon-text-sm); font-weight: 600; }
407
+ .segmented { flex-wrap: wrap; max-width: 100%; }
408
+ .app.mini-mode { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; }
409
+ .app.mini-mode .rail, .app.mini-mode .top, .app.mini-mode .tabs { display: none; }
410
+ .app.mini-mode main, body.pip { padding: var(--acon-space-4); }
411
+ body.pip { margin: 0; overflow-y: auto; }
412
+ .mini { max-width: 480px; }
413
+ .mini-head { display: flex; align-items: center; gap: var(--acon-space-3); }
414
+ .mini-head h1.lead { font-size: var(--acon-text-xl); }
415
+ .mini-list { display: flex; flex-direction: column; gap: var(--acon-space-2); margin: var(--acon-space-4) 0 0; padding: 0; list-style: none; }
416
+ .mini-item { display: flex; flex-wrap: wrap; align-items: center; gap: var(--acon-space-2); padding: var(--acon-space-2) var(--acon-space-3); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); background: var(--acon-surface); }
417
+ .mini-item .row-text { display: flex; flex-direction: column; flex: 1 1 14ch; min-width: 0; }
418
+ .mini-item .row-title { overflow-wrap: anywhere; }
419
+ .mini-item .row-sub { color: var(--acon-text-2); font-size: var(--acon-text-sm); }
420
+ .mini-verbs { display: flex; flex-wrap: wrap; gap: var(--acon-space-2); }
421
+ .mini-foot { display: flex; flex-wrap: wrap; gap: var(--acon-space-2); margin-top: var(--acon-space-4); }
422
+ .mini .btn { min-height: 40px; }
423
+
424
+ /* PRIVATE Space scene. Public facts only; the roster remains the text equivalent. */
425
+ .space-content { display: flex; flex-direction: column; gap: var(--acon-space-4); margin-top: var(--acon-space-4); min-width: 0; }
426
+ .space-scroll { overflow: auto; max-width: 100%; max-height: 70vh; border: 1px solid var(--acon-line); border-radius: var(--acon-radius-3); background: var(--acon-bg); }
427
+ .space-plane { position: relative; width: 100%; min-width: 1000px; min-height: 240px; background-color: var(--acon-bg); background-image: var(--space-floor, none), linear-gradient(135deg, var(--acon-line) 1px, transparent 1px); background-size: 64px 32px; }
428
+ .space-wall { position: absolute; inset: 0 0 auto; height: 20px; background-color: var(--acon-surface-2); background-image: var(--space-wall, none); background-size: contain; }
429
+ .space-actor { position: absolute; left: 0; top: 0; z-index: 2; display: flex; flex-direction: column; align-items: center; gap: var(--acon-space-1); width: 180px; min-height: 44px; padding: var(--acon-space-2); font: inherit; color: var(--acon-text); background: var(--acon-surface); border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); cursor: pointer; overflow-wrap: anywhere; }
430
+ .space-actor strong { max-width: 100%; font-weight: 600; }
431
+ .space-actor .row-sub { width: 100%; }
432
+ .space-actor[data-state="waiting"] { border-color: var(--acon-warn); }
433
+ .space-actor[data-state="blocked"] { border-color: var(--acon-err); }
434
+ .space-actor[data-state="away"], .space-actor[data-stale="true"] { border-style: dashed; }
435
+ .space-actor:focus-visible, .space-card:focus-visible { outline-offset: -3px; }
436
+ .space-visual { display: flex; flex-direction: column; align-items: center; width: 112px; min-height: 176px; padding: var(--acon-space-2); border: 1px solid var(--acon-line); border-radius: var(--acon-radius-2); background: var(--acon-surface-2); }
437
+ .space-visual .pet-sprite { --cell-w: 72px; --cell-h: 78px; }
438
+ /* Artwork remains legible on a light tile when the surrounding UI is dark. */
439
+ :root[data-theme="dark"] .space-visual { background: var(--acon-text); }
440
+ @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .space-visual { background: var(--acon-text); } }
441
+ .space-desk { display: block; width: 64px; height: 82px; background-image: var(--space-desk, none); background-position: center bottom; background-size: contain; background-repeat: no-repeat; border-bottom: 2px solid var(--acon-line-2); }
442
+ .space-plane[data-pack="fallback"] .space-desk { background-color: var(--acon-surface-2); border: 1px solid var(--acon-line-2); }
443
+ .space-token { display: inline-flex; align-items: center; justify-content: center; width: 72px; height: 78px; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); color: var(--acon-accent-text); background: var(--acon-accent-soft); font-weight: 600; }
444
+ .space-marks { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--acon-space-1); max-width: 100%; }
445
+ .space-zone { position: absolute; left: 0; top: 0; width: 234px; border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-2); background-color: var(--acon-surface-2); background-image: var(--space-furniture, none); background-position: right 8px top 8px; background-size: 36px 36px; background-repeat: no-repeat; }
446
+ .space-zone h2 { margin: 0; padding: var(--acon-space-2) 48px var(--acon-space-2) var(--acon-space-2); font-size: var(--acon-text-sm); overflow-wrap: anywhere; }
447
+ .space-card { position: absolute; left: 0; top: 0; z-index: 2; width: 214px; min-height: 44px; padding: var(--acon-space-2); border: 1px solid var(--acon-line-2); border-radius: var(--acon-radius-1); background: var(--acon-surface); color: var(--acon-text); font: inherit; text-align: left; overflow-wrap: anywhere; cursor: pointer; transition: transform 0.8s ease; }
448
+ .space-card[data-tone="warn"] { border-color: var(--acon-warn); }
449
+ .space-card[data-tone="err"] { border-color: var(--acon-err); }
450
+ .space-plane[data-settle="true"] .space-card { transition: none; }
451
+ .space-roster { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); align-items: start; gap: var(--acon-space-2); min-width: 0; }
452
+ .space-roster-actor.btn { min-height: 44px; justify-content: flex-start; text-align: left; }
453
+ .space-roster-zone { margin: 0; font-size: var(--acon-text-sm); color: var(--acon-text-2); }
454
+ .space-link { position: absolute; left: 0; top: 0; z-index: 1; border-top: 2px dashed var(--acon-accent); transform-origin: left center; pointer-events: none; }
455
+ /* The full relationship label is in the roster, never obscured behind scene actors. */
456
+ .space-link-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
457
+ .space-roster-link { grid-column: 1 / -1; margin: 0; font-size: var(--acon-text-sm); color: var(--acon-text-2); overflow-wrap: anywhere; }
458
+ .space-roster-link[data-kind="message"] { animation: space-message 10s linear both; }
459
+ .space-link[data-kind="conflict"] { border-color: var(--acon-err); }
460
+ .space-link[data-kind="message"] { opacity: 0; animation: space-message 10s linear both; }
461
+ .pet-sprite[data-pose="working"] { --row: 7; animation: pet-6 0.9s steps(6) infinite; }
462
+ @keyframes space-message { 0%, 85% { opacity: 1; visibility: visible; } 100% { opacity: 0; visibility: hidden; } }
463
+
464
+ /* Tablet: icon rail */
465
+ @media (min-width: 721px) and (max-width: 1023px) {
466
+ .app { grid-template-columns: 64px minmax(0, 1fr); }
467
+ .brand { justify-content: center; padding: 6px 0 14px; }
468
+ .brand span, .areas .label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
469
+ .areas a { justify-content: center; min-height: 44px; padding: 0; position: relative; }
470
+ .areas .badge { position: absolute; top: 2px; right: 2px; min-width: 18px; padding: 0 4px; font-size: var(--acon-text-2xs); }
471
+ .top, .tabs { padding-left: var(--acon-space-4); padding-right: var(--acon-space-4); }
472
+ main { padding: var(--acon-space-4); }
473
+ }
474
+ @media (max-width: 720px) {
475
+ .space-roster { order: -1; grid-template-columns: minmax(0, 1fr); }
476
+ body { font-size: var(--acon-text-lg); }
477
+ .app { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) auto; height: 100dvh; }
478
+ .column { grid-row: 1; min-height: 0; overflow-y: auto; }
479
+ .rail { position: static; grid-row: 2; z-index: 15; height: auto; flex-direction: row; padding: 4px 4px calc(4px + env(safe-area-inset-bottom)); border-right: 0; border-top: 1px solid var(--acon-line); }
480
+ .brand { display: none; }
481
+ .areas { flex-direction: row; flex: 1; gap: 0; overflow-x: auto; }
482
+ .areas li { flex: 1 0 64px; }
483
+ .areas a { flex-direction: column; justify-content: center; gap: 2px; min-height: 52px; padding: 2px 4px; font-size: var(--acon-text-2xs); position: relative; }
484
+ .areas .label { flex: none; max-width: 100%; }
485
+ .areas .badge { position: absolute; top: 2px; left: calc(50% + 6px); min-width: 18px; padding: 0 4px; font-size: var(--acon-text-2xs); }
486
+ .top { padding: 6px var(--acon-space-4); padding-top: calc(6px + env(safe-area-inset-top)); gap: var(--acon-space-2); }
487
+ .search-open { flex: 0 0 44px; width: 44px; min-height: 44px; justify-content: center; padding: 0; }
488
+ .search-open .search-label, .search-open kbd { display: none; }
489
+ #mini-open { width: 44px; height: 44px; }
490
+ .pet { min-height: 44px; }
491
+ .tabs { padding: 0 var(--acon-space-2); }
492
+ .tab { min-height: 44px; }
493
+ main { padding: var(--acon-space-4); }
494
+ .row { flex-wrap: wrap; padding: var(--acon-space-2) var(--acon-space-3); }
495
+ .row-main { flex: 1 0 100%; flex-wrap: wrap; min-height: 44px; }
496
+ .row-main > .row-text { flex: 1 1 calc(100% - 52px); }
497
+ .row-main > .chip { flex: none; margin-left: 40px; }
498
+ .row-verbs { width: 100%; padding-left: 46px; }
499
+ .row:not(:has(.row-verbs button)) > .row-main { flex: 1; }
500
+ .row-verbs:not(:has(button)) { width: auto; padding-left: 0; }
501
+ .row-verbs .btn, .sheet-verbs .btn, .dialog-foot .btn { flex: 1 1 8ch; min-height: 44px; }
502
+ .reason-row input { min-height: 44px; }
503
+ .btn kbd { display: none; }
504
+ .sheet { top: auto; left: 0; width: 100%; max-height: 85dvh; border-left: 0; border-top: 1px solid var(--acon-line); border-radius: var(--acon-radius-3) var(--acon-radius-3) 0 0; padding-bottom: env(safe-area-inset-bottom); }
505
+ .toasts { bottom: calc(80px + env(safe-area-inset-bottom)); }
506
+ .palette { margin-top: 8px; }
507
+ }
508
+
509
+ @media (prefers-reduced-motion: reduce) {
510
+ *, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
511
+ }
512
+
513
+ /* Private shell Space cameras. Room uses a real transform hierarchy, without WebGL. */
514
+ .space-view-bar, .space-view-choices, .space-camera { display: flex; flex-wrap: wrap; align-items: center; gap: var(--acon-space-2); }
515
+ .space-view-bar { gap: var(--acon-space-4); margin-top: var(--acon-space-3); }
516
+ .space-view-choices .btn[aria-pressed="true"] { color: var(--acon-accent-text); background: var(--acon-accent-soft); border-color: var(--acon-accent); }
517
+ .space-stage { position: relative; min-width: 100%; }
518
+ [data-space-view="room"] .space-scroll { perspective: 4000px; perspective-origin: center 240px; }
519
+ [data-space-view="room"] .space-stage, [data-space-view="room"] .space-plane { transform-style: preserve-3d; }
520
+ [data-space-view="room"] .space-plane { position: absolute; top: 0; left: 0; transform-origin: 0 0; transition: transform .3s ease; }
521
+ [data-space-view="room"] .space-wall { height: 80px; transform: rotateX(-90deg); transform-origin: top; backface-visibility: visible; }
522
+ [data-space-view="room"] .space-plane::after { content: ""; position: absolute; left: 0; top: 0; width: 80px; height: 100%; background: var(--acon-surface-2); border: 1px solid var(--acon-line); transform: rotateY(90deg); transform-origin: left; }
523
+ [data-space-view="room"] .space-actor, [data-space-view="room"] .space-card { z-index: auto; transform-origin: 0 0; transition: none; backface-visibility: visible; }
524
+ [data-space-view="room"] .space-desk { box-shadow: 4px 4px 0 var(--acon-line-2); }
525
+ .space-webgl { position: absolute; inset: 0; }
526
+ .space-webgl canvas { display: block; width: 100%; height: 100%; touch-action: none; }
527
+ [data-space-view="3d"] .space-plane { background: transparent; min-height: 0; pointer-events: none; }
528
+ [data-space-view="3d"] .space-scroll { overflow: hidden; perspective: none; }
529
+ [data-space-view="3d"]:not([data-space-measuring]) .space-wall, [data-space-view="3d"]:not([data-space-measuring]) .space-zone, [data-space-view="3d"]:not([data-space-measuring]) .space-link { display: none; }
530
+ [data-space-view="3d"]:not([data-space-measuring]) .space-actor, [data-space-view="3d"]:not([data-space-measuring]) .space-card { pointer-events: auto; transition: none; width: 44px; height: 44px; min-height: 44px; padding: 0; color: transparent; background: transparent; border: 1px dashed var(--acon-line-2); opacity: 1; }
531
+ [data-space-view="3d"]:not([data-space-measuring]) .space-actor > * { visibility: hidden; }
532
+ .space-selection { overflow-wrap: anywhere; }
533
+ [data-space-view="3d"]:not([data-space-measuring]) .space-card-label { visibility: hidden; }
534
+ @media (prefers-reduced-motion: reduce) { [data-space-view="room"] .space-plane { transition: none; } }