@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.
- package/CHANGELOG.md +41 -0
- package/LICENSE +21 -0
- package/README.md +321 -2
- package/bin/acon.js +8 -0
- package/package.json +38 -4
- package/shell/icon.svg +1 -0
- package/shell/index.html +52 -0
- package/shell/shell.css +534 -0
- package/shell/shell.js +2106 -0
- package/shell/space-view.js +164 -0
- package/shell/space.js +241 -0
- package/shell/space3d.js +364 -0
- package/shell/vendor/BufferGeometryUtils.js +1523 -0
- package/shell/vendor/GLTFLoader.js +5006 -0
- package/shell/vendor/NOTICE +30 -0
- package/shell/vendor/SkeletonUtils.js +496 -0
- package/shell/vendor/manifest.json +42 -0
- package/shell/vendor/mermaid/NOTICE +25 -0
- package/shell/vendor/mermaid/manifest.json +19 -0
- package/shell/vendor/mermaid/mermaid.js +3580 -0
- package/shell/vendor/three.core.js +61162 -0
- package/shell/vendor/three.module.js +19537 -0
- package/shell/visual-frame.css +5 -0
- package/shell/visual-frame.html +14 -0
- package/shell/visual-frame.js +54 -0
- package/src/assets.ts +200 -0
- package/src/canonical.ts +16 -0
- package/src/cli.ts +155 -0
- package/src/conformance.ts +299 -0
- package/src/contract.ts +276 -0
- package/src/install.ts +248 -0
- package/src/pets.ts +63 -0
- package/src/plugins.ts +357 -0
- package/src/serve.ts +175 -0
- package/src/server.ts +429 -0
- package/src/space.ts +106 -0
- package/test/fixtures/review/cases.json +726 -0
package/shell/shell.css
ADDED
|
@@ -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; } }
|