@viberaven/cli 1.4.4 → 1.5.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,442 @@
1
+ /* VibeRaven Studio: the Stack cockpit.
2
+ Charcoal surfaces, restrained gold, a stack-first workspace. */
3
+
4
+ :root {
5
+ --bg: #101011;
6
+ --panel: #151515;
7
+ --panel-2: #1e1e1e;
8
+ --line: #262626;
9
+ --line-2: #363636;
10
+ --text: #ffffff;
11
+ --text-2: #d6d6d6;
12
+ --text-3: #a3a3a3;
13
+ --blue: #7cc4ff;
14
+ --acid: #dfbd6e;
15
+ --acid-2: #ebcd8a;
16
+ --on-acid: #120d00;
17
+ --green: #7cf29a;
18
+ --amber: #ffd166;
19
+ --red: #ff7a7a;
20
+ --font: "Geist", system-ui, -apple-system, "Segoe UI", sans-serif;
21
+ --mono: "JetBrains Mono", ui-monospace, Consolas, monospace;
22
+ --side: 370px;
23
+ --top: 68px;
24
+ --r: 8px;
25
+ --r-lg: 14px;
26
+ }
27
+
28
+ * { box-sizing: border-box; margin: 0; padding: 0; }
29
+ html, body { min-height: 100%; background: var(--bg); color: var(--text); font-family: var(--font); font-size: 14px; line-height: 1.5; -webkit-font-smoothing: antialiased; }
30
+ button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
31
+ button:disabled { cursor: default; opacity: 0.7; }
32
+ a { color: inherit; }
33
+ code, pre { font-family: var(--mono); font-size: 12.5px; }
34
+ ::selection { background: rgba(255,255,255,0.22); }
35
+ :focus-visible { outline: 2px solid var(--acid); outline-offset: 2px; }
36
+ ::-webkit-scrollbar { width: 10px; height: 10px; }
37
+ ::-webkit-scrollbar-thumb { background: #3a3a3a; border-radius: 10px; border: 3px solid transparent; background-clip: padding-box; }
38
+ ::-webkit-scrollbar-thumb:hover { background: #4a4a4a; background-clip: padding-box; }
39
+
40
+ .app { position: relative; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto 1fr; gap: 24px 32px; padding: 0 40px 48px; max-width: 1500px; margin: auto; min-height: 100vh; }
41
+ .app.agent-open { grid-template-columns: minmax(0, 1fr) var(--side); }
42
+ .top, .stage, .side { position: relative; }
43
+
44
+ /* ---------- top bar ---------- */
45
+ .top { grid-column: 1 / -1; position: sticky; top: 0; z-index: 30; height: var(--top); display: flex; align-items: center; gap: 14px; padding: 0 4px; background: var(--bg); border-bottom: 1px solid var(--line); }
46
+ .top .brand { display: flex; align-items: center; gap: 10px; }
47
+ .top .brand img { width: 26px; height: 26px; border-radius: 6px; }
48
+ .top .name { font-weight: 700; font-size: 15px; letter-spacing: -0.02em; }
49
+ .top .sep { width: 1px; height: 18px; background: var(--line-2); }
50
+ .top .meta { color: var(--text-3); font-size: 12.5px; }
51
+ .top .spacer { margin-left: auto; }
52
+
53
+ .pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 6px; font-size: 12px; font-weight: 600; line-height: 16px; white-space: nowrap; background: var(--panel-2); color: var(--text); }
54
+ .pill.amber { color: var(--amber); }
55
+ .pill.green { color: var(--green); }
56
+ .pill.red { color: var(--red); }
57
+ .pill i { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
58
+
59
+ .tag { display: inline-flex; align-items: center; height: 24px; padding: 0 9px; border-radius: 5px; font-size: 11.5px; font-weight: 600; letter-spacing: 0.02em; background: rgba(255,255,255,0.1); color: #fff; white-space: nowrap; }
60
+ .tag.acid { background: var(--green); color: #052e16; }
61
+
62
+ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; height: 38px; padding: 0 16px; border-radius: var(--r); border: 1px solid var(--line-2); background: var(--panel); color: var(--text); font-size: 13.5px; font-weight: 600; white-space: nowrap; transition: background 0.1s, border-color 0.1s, transform 0.06s; }
63
+ .btn:hover:not(:disabled) { background: var(--panel-2); border-color: #4a4a4a; }
64
+ .btn:active:not(:disabled) { transform: translateY(1px); }
65
+ .btn.primary, .btn.acid { background: var(--acid); color: var(--on-acid); border-color: var(--acid); }
66
+ .btn.primary:hover:not(:disabled), .btn.acid:hover:not(:disabled) { background: var(--acid-2); border-color: var(--acid-2); }
67
+ .btn.white { background: #fff; color: #0a0a0a; border-color: #fff; }
68
+ .btn.white:hover:not(:disabled) { background: #e9e9e9; border-color: #e9e9e9; }
69
+ .btn.ghost { background: transparent; border-color: transparent; color: var(--text-2); font-weight: 500; }
70
+ .btn.ghost:hover:not(:disabled) { color: var(--text); background: var(--panel); border-color: transparent; }
71
+ .btn.ghost.on { color: var(--text); background: var(--panel-2); }
72
+ .btn.sm { height: 32px; padding: 0 12px; font-size: 13px; }
73
+ .btn.lg { height: 44px; padding: 0 20px; font-size: 14.5px; border-radius: 10px; }
74
+ .btn .spin { width: 12px; height: 12px; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: spin 0.7s linear infinite; }
75
+ @keyframes spin { to { transform: rotate(360deg); } }
76
+
77
+ /* ---------- stage ---------- */
78
+ .stage { position: relative; min-width: 0; padding: 20px 0 40px; min-height: calc(100vh - var(--top) - 80px); }
79
+ .stage > * { position: relative; }
80
+ h2 { font-weight: 600; font-size: 18px; letter-spacing: -0.025em; line-height: 1.3; }
81
+ .sub { color: var(--text-3); margin-top: 5px; font-size: 13px; }
82
+
83
+ /* App setup is the primary workflow. */
84
+ .eyebrow { display: block; color: var(--text-3); font-size: 12px; margin-bottom: 10px; }
85
+ .workspace-heading { display: flex; align-items: center; justify-content: space-between; gap: 20px; }
86
+ .workspace-heading h1 { font-size: clamp(32px, 3.4vw, 48px); font-weight: 600; letter-spacing: -0.045em; line-height: 1.2; }
87
+ .workspace-heading p { margin-top: 10px; font-size: 14px; color: var(--text-3); }
88
+ .workspace-heading .btn { border-radius: 8px; flex-shrink: 0; }
89
+ .workspace-tabs { display: flex; gap: 30px; border-bottom: 1px solid var(--line); margin: 36px 0 30px; }
90
+ .workspace-tabs button { display: flex; gap: 9px; align-items: center; padding: 0 0 16px; border-bottom: 2px solid transparent; color: var(--text-3); font-size: 13px; }
91
+ .workspace-tabs button[aria-selected="true"] { color: var(--text); border-bottom-color: var(--acid); }
92
+ .workspace-tabs button span { color: var(--text-3); font-size: 11px; background: #1b1b1b; border-radius: 4px; min-width: 21px; padding: 1px 5px; }
93
+ .workspace-panel { min-width: 0; }
94
+ .browse-services { display: inline-flex; margin-top: 24px; padding: 8px 0; color: var(--text-2); font-size: 13px; gap: 12px; }
95
+ .browse-services:hover { color: var(--acid); }
96
+ .agent-toggle.on { border-color: #66552d; color: var(--acid); }
97
+ .stack-setup { margin: 24px 0 32px; border: 1px solid #55482c; background: #151517; border-radius: 16px; overflow: hidden; }
98
+ .setup-heading { display: flex; align-items: start; gap: 14px; justify-content: space-between; padding: 24px; }
99
+ .setup-heading .eyebrow { color: var(--acid); margin-bottom: 7px; }
100
+ .setup-heading h2 { font-size: 23px; }
101
+ .setup-heading p, .setup-footer p { font-size: 12px; color: var(--text-3); margin-top: 7px; }
102
+ .setup-steps { list-style: none; display: flex; flex-wrap: wrap; gap: 8px 18px; margin-top: 12px; }
103
+ .setup-steps li { display: inline-flex; align-items: center; gap: 8px; color: var(--text-3); font-size: 12.5px; }
104
+ .setup-steps li.done { color: var(--text-2); }
105
+ .setup-steps i { display: grid; place-items: center; width: 20px; height: 20px; border: 1px solid var(--line-2); border-radius: 50%; font-size: 11px; font-style: normal; font-weight: 600; }
106
+ .setup-steps li.done i { border-color: #2f5d3f; background: #14301f; color: var(--green); }
107
+ .setup-services { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; padding: 0 24px 24px; }
108
+ .setup-service { display: flex; align-items: center; gap: 10px; padding: 12px; border: 1px solid var(--line); border-radius: 9px; text-align: left; background: #111113; min-width: 0; }
109
+ .setup-service:hover:not(:disabled) { border-color: #777; }
110
+ .setup-service.selected { border-color: #70603b; background: #242117; }
111
+ .setup-service img { width: 24px; height: 24px; object-fit: contain; flex-shrink: 0; }
112
+ .setup-service-copy { min-width: 0; }
113
+ .setup-service strong { display: block; font-size: 12px; font-weight: 600; }
114
+ .setup-service small { display: block; font-size: 10px; color: var(--text-3); margin-top: 2px; }
115
+ .setup-check { color: var(--text-3); margin-left: auto; font-size: 14px; }
116
+ .selected .setup-check { color: var(--acid); }
117
+ .setup-footer { display: flex; align-items: center; gap: 20px; padding: 20px 24px; background: #19191b; border-top: 1px solid var(--line); }
118
+ .setup-footer strong { font-size: 12px; font-weight: 500; }
119
+ .setup-footer .btn { margin-left: auto; flex-shrink: 0; }
120
+ .setup-progress { list-style: none; display: grid; gap: 10px; padding: 20px 24px; color: var(--text-2); font-size: 12px; }
121
+ .setup-progress li { display: flex; align-items: center; gap: 10px; }
122
+ .progress-dot { width: 6px; height: 6px; background: var(--text-3); border-radius: 50%; }
123
+ .configured .progress-dot, .review .progress-dot { background: var(--acid); }
124
+ .spin { display: inline-block; width: 12px; height: 12px; border: 2px solid var(--acid); border-right-color: transparent; border-radius: 50%; animation: spin .8s linear infinite; }
125
+ .setup-error { margin: 0 24px 24px; padding: 12px; color: var(--red); border: 1px solid #653b3b; border-radius: 8px; font-size: 13px; }
126
+ .setup-note, .services-empty { color: var(--text-3); padding: 20px 0; }
127
+ .setup-note { padding: 0 24px 24px; }
128
+
129
+ /* Large service cards, one quiet surface per provider. */
130
+ .rail-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; flex-wrap: wrap; }
131
+ .rail { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 18px; margin-top: 24px; }
132
+ .slab { display: flex; flex-direction: column; position: relative; min-width: 0; padding: 24px; border: 1px solid #2d2d2d; border-radius: 12px; background: #151515; transition: border-color .15s; }
133
+ .slab:hover { border-color: #484848; }
134
+ .slab.scanning { border-color: #8d7131; }
135
+ .face { display: flex; flex-direction: column; align-items: flex-start; min-height: 180px; }
136
+ .face-top { align-self: stretch; display: flex; justify-content: flex-end; min-height: 24px; }
137
+ .face-top .tag { background: none; padding: 0; color: var(--text-3); font-size: 11px; font-weight: 500; }
138
+ .face-top .tag.acid { color: var(--green); }
139
+ .face-logo { display: flex; width: 48px; height: 48px; margin: 14px 0 20px; align-items: center; justify-content: center; }
140
+ .face-logo img { width: 100%; height: 100%; object-fit: contain; }
141
+ .face-name { font-size: 21px; font-weight: 600; letter-spacing: -.035em; line-height: 1.2; }
142
+ .face-area { color: var(--text-3); font-size: 12px; margin-top: 5px; }
143
+ .slab-status { display: grid; grid-template-columns: 6px 1fr; gap: 7px; color: var(--text-3); font-size: 12px; min-height: 64px; line-height: 1.6; margin: 20px 0; }
144
+ .slab-status i { width: 6px; height: 6px; margin-top: 7px; border-radius: 50%; background: var(--line-2); }
145
+ .slab-status i.g { background: var(--green); } .slab-status i.a { background: var(--amber); }
146
+ .slab-status .fixlink { grid-column: 2; justify-self: start; color: var(--text-2); text-decoration: underline; text-underline-offset: 4px; }
147
+ .slab-status .fixlink:hover { color: var(--acid); }
148
+ .slab-act { display: flex; margin-top: auto; }
149
+ .slab-act .btn { width: 100%; font-size: 12px; background: #1b1b1b; border-color: #363636; color: var(--text-2); }
150
+ .slab-act .btn:hover { background: #252525; }
151
+ .available .slab-act { margin-top: 26px; }
152
+ .tag.dim { color: var(--text-3); }
153
+ .tag.red { background: #2d1919; color: var(--red); }
154
+ .tag.amber { background: #2b2518; color: var(--amber); }
155
+
156
+ /* findings: full-width rows, real evidence, one clear next action */
157
+ .fixgrid { display: grid; gap: 14px; margin-top: 24px; }
158
+ .fix { display: grid; grid-template-columns: minmax(0,1fr) 250px; gap: 26px; padding: 24px 26px; border: 1px solid var(--line); border-left: 3px solid var(--line-2); border-radius: 12px; background: #141416; }
159
+ .fix.r { border-left-color: var(--red); }
160
+ .fix.a { border-left-color: var(--amber); }
161
+ .fix:hover { border-color: #3a3a3a; }
162
+ .fix-main { min-width: 0; }
163
+ .fix-top { display: flex; align-items: center; flex-wrap: wrap; gap: 9px 14px; }
164
+ .fix-owner { display: inline-flex; align-items: center; gap: 7px; color: var(--text-2); font-size: 13px; font-weight: 600; }
165
+ .fix-owner img { width: 16px; height: 16px; object-fit: contain; }
166
+ .fix-owner .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--line-2); }
167
+ .fix-owner .dot.a { background: var(--amber); } .fix-owner .dot.r { background: var(--red); }
168
+ .fix-meta { color: var(--text-3); font-size: 12.5px; }
169
+ .fix-title { margin-top: 14px; font-size: 18px; font-weight: 600; letter-spacing: -0.02em; line-height: 1.35; }
170
+ .fix-detail { margin-top: 9px; max-width: 74ch; color: var(--text-2); font-size: 14px; line-height: 1.65; }
171
+ .fix-evidence { display: grid; gap: 13px; margin-top: 18px; padding: 16px 18px; border-radius: 10px; background: #191919; }
172
+ .fix-evidence > div { display: grid; grid-template-columns: 150px minmax(0,1fr); gap: 5px 18px; }
173
+ .fix-evidence dt { color: var(--text-3); font-size: 12.5px; font-weight: 600; }
174
+ .fix-evidence dd { color: var(--text-2); font-size: 13.5px; line-height: 1.6; }
175
+ .fix-files { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
176
+ .fix-files-label { color: var(--text-3); font-size: 12.5px; }
177
+ .fix-files code { padding: 4px 8px; border: 1px solid var(--line); border-radius: 6px; background: #191919; color: var(--text-2); font-size: 12px; word-break: break-all; }
178
+ .fix-act { display: flex; flex-direction: column; gap: 10px; }
179
+ .fix-act .btn { width: 100%; height: 40px; font-size: 13px; }
180
+ .fix-who { color: var(--text-3); font-size: 12px; line-height: 1.55; }
181
+
182
+ .section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; }
183
+ .empty { margin-top: 24px; padding: 36px; border: 1px dashed var(--line-2); border-radius: 12px; color: var(--text-2); }
184
+
185
+ /* ---------- agent panel ---------- */
186
+ .side { display: flex; flex-direction: column; min-width: 0; min-height: 0; position: sticky; top: calc(var(--top) + 16px); height: calc(100vh - var(--top) - 36px); border-radius: 12px; background: #121212; border: 1px solid var(--line); overflow: hidden; }
187
+ .side-head { display: flex; align-items: center; gap: 8px; height: 56px; padding: 0 14px; border-bottom: 1px solid var(--line); }
188
+ .side-head.tools { height: auto; flex: 0 0 auto; display: grid; padding: 14px; gap: 10px; }
189
+ .model-field { display: grid; grid-template-columns: 45px minmax(0,1fr); align-items: center; gap: 10px; font-size: 12px; color: var(--text-3); }
190
+ .model-field .sel { width: 100%; }
191
+ .model-note { font-size: 11px; line-height: 1.5; color: var(--text-3); }
192
+ .agent-connection { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-width: 0; }
193
+ .agent-connection .pill { min-width: 0; white-space: normal; }
194
+ .agent-connection .pill i { flex-shrink: 0; }
195
+ .connection-action { flex-shrink: 0; color: var(--text-2); font-size: 11px; text-decoration: underline; text-underline-offset: 3px; padding: 4px; }
196
+ .side-head:not(.tools) { flex-shrink: 0; height: auto; min-height: 56px; flex-wrap: wrap; padding-block: 10px; }
197
+ .side-head.tools .sel { flex: 1 1 130px; min-width: 0; max-width: 100%; }
198
+ .side-head.tools .spacer { display: none; }
199
+ .side-head.tools .pill { font-size: 11px; padding: 2px 0; background: none; }
200
+ .side-head .who { font-weight: 700; font-size: 14px; }
201
+ .seg { display: inline-flex; border: 1px solid var(--line-2); border-radius: var(--r); overflow: hidden; background: var(--panel); }
202
+ .seg button { display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 11px; font-size: 12.5px; font-weight: 500; color: var(--text-2); border-right: 1px solid var(--line); }
203
+ .seg button:last-child { border-right: 0; }
204
+ .seg button.on { background: var(--acid); color: var(--on-acid); }
205
+ .seg i { width: 6px; height: 6px; border-radius: 50%; background: var(--line-2); }
206
+ .seg i.g { background: var(--green); } .seg i.a { background: var(--amber); }
207
+ .seg button.on i.g { background: #0f5132; }
208
+ select.sel, input.sel { height: 32px; padding: 0 10px; border-radius: 7px; border: 1px solid var(--line-2); background: var(--panel); color: var(--text); font: inherit; font-size: 12.5px; font-weight: 500; }
209
+
210
+ .thread { flex: 1; min-height: 0; overflow: auto; padding: 14px 14px 18px; }
211
+ .welcome { padding: 18px 6px 6px; }
212
+ .welcome h3 { font-size: 20px; font-weight: 600; letter-spacing: -0.03em; line-height: 1.3; }
213
+ .welcome p { color: #e6e6e6; margin-top: 8px; font-size: 14px; }
214
+ .suggest { display: flex; flex-direction: column; gap: 8px; margin-top: 18px; }
215
+ .suggest-chip { position: relative; overflow: hidden; padding: 13px 14px 13px 16px; border-radius: 12px; background: #181818; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08); color: #fff; font-size: 14px; font-weight: 600; text-align: left; transition: transform 0.14s ease, box-shadow 0.14s ease; }
216
+ .suggest-chip::before { content: none; }
217
+ .suggest-chip:hover:not(:disabled) { transform: translateY(-1px); box-shadow: inset 0 0 0 1px rgba(240,194,75,0.5); }
218
+ .suggest-chip:hover:not(:disabled)::before { opacity: 1; }
219
+
220
+ .msg { padding: 8px 0; }
221
+ .msg .who { font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--acid); margin: 0 0 8px 4px; display: flex; gap: 8px; align-items: center; font-weight: 700; }
222
+ .msg .who .t { color: #9a9a9a; text-transform: none; letter-spacing: 0; font-weight: 500; }
223
+ .msg .body { color: #fff; line-height: 1.6; word-break: break-word; font-size: 14px; padding: 14px 16px; border-radius: 14px; background: #181818; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08); }
224
+ .msg.me .who { display: none; }
225
+ .msg.me .body { display: inline-block; background: var(--acid); color: var(--on-acid); border-radius: 14px 14px 4px 14px; padding: 11px 14px; margin-left: 48px; float: right; font-weight: 600; box-shadow: 0 10px 30px -14px rgba(240,194,75,0.6); }
226
+ .msg.me::after { content: ""; display: block; clear: both; }
227
+ .msg.err .who { color: var(--red); }
228
+ .msg.err .body { color: #ffd9d9; box-shadow: inset 0 0 0 1px rgba(255,122,122,0.35); background: #1c1113; }
229
+ .msg .body p + p, .msg .body ul, .msg .body ol, .msg .body pre, .msg .body h4 { margin-top: 8px; }
230
+ .msg .body ul, .msg .body ol { padding-left: 20px; }
231
+ .msg .body li + li { margin-top: 4px; }
232
+ .msg .body h4 { font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.04em; color: var(--acid); }
233
+ .msg .body pre { padding: 10px 12px; background: rgba(0,0,0,0.45); border-radius: 10px; overflow: auto; white-space: pre-wrap; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.06); }
234
+ .msg .body code { background: rgba(255,255,255,0.1); padding: 1px 6px; border-radius: 5px; color: #fff; }
235
+ .msg .card { margin-top: 12px; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 12px; border-radius: 10px; background: rgba(0,0,0,0.35); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08); font-weight: 600; }
236
+ .msg .card img { width: 16px; height: 16px; vertical-align: -3px; margin-right: 8px; }
237
+ .working { display: flex; align-items: center; gap: 10px; padding: 10px 4px; color: #fff; font-weight: 600; }
238
+ .working .spin { width: 14px; height: 14px; border: 2px solid var(--acid); border-right-color: transparent; border-radius: 50%; animation: spin 0.7s linear infinite; }
239
+
240
+ .composer { margin: 0 14px 14px; border-radius: 10px; background: #191919; padding: 14px 16px 12px; border: 1px solid var(--line-2); }
241
+ .composer:focus-within { border-color: #8a713b; }
242
+ .composer textarea { width: 100%; min-height: 48px; max-height: 180px; resize: none; background: transparent; border: 0; color: #fff; font: inherit; font-size: 15px; line-height: 1.5; outline: 0; caret-color: var(--acid); }
243
+ .composer textarea::placeholder { color: #9a9a9a; }
244
+ .composer .row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
245
+ .composer .row > .chip { max-width: 100%; }
246
+ .composer select.mode { color: var(--text-2); font-size: 12px; font-weight: 500; max-width: 190px; min-width: 0; cursor: pointer; }
247
+ .composer { flex-shrink: 0; }
248
+ .chip { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border-radius: 999px; background: rgba(255,255,255,0.08); color: #fff; font-size: 12.5px; font-weight: 500; }
249
+ .chip img { width: 13px; height: 13px; }
250
+ .chip button { display: inline-flex; color: #b8b8b8; }
251
+ .chip button:hover { color: #fff; }
252
+ .composer .send { margin-left: auto; width: 40px; height: 40px; padding: 0; border-radius: 50%; background: var(--acid); border-color: var(--acid); color: var(--on-acid); box-shadow: 0 10px 24px -10px rgba(240,194,75,0.7); }
253
+ .composer .send:hover:not(:disabled) { background: var(--acid-2); border-color: var(--acid-2); }
254
+ .composer .send.stop { background: #fff; border-color: #fff; box-shadow: none; }
255
+ .working .stop { margin-left: auto; height: 30px; }
256
+ .working .stop .sq { width: 9px; height: 9px; border-radius: 2px; background: currentColor; display: inline-block; }
257
+ .hint { padding: 0 16px 10px; color: var(--text-2); font-size: 12.5px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
258
+ .hint b { color: var(--text); font-weight: 600; }
259
+ .slow-run { padding: 12px 0; line-height: 1.6; }
260
+ .slow-run[hidden] { display: none; }
261
+
262
+ /* ---------- drawer: a real workspace, not a popover ---------- */
263
+ .drawer { position: fixed; top: calc(var(--top) + 12px); left: 50%; transform: translateX(-50%); bottom: 20px; width: min(1040px, calc(100vw - 40px)); background: #111111; border: 1px solid var(--line-2); border-radius: 14px; box-shadow: 0 50px 120px rgba(0, 0, 0, 0.7); display: flex; flex-direction: column; z-index: 40; overflow: hidden; animation: rise 0.18s ease-out; }
264
+ .drawer[data-drawer="releases"] { width: min(1180px, calc(100vw - 40px)); }
265
+ .drawer-veil { position: fixed; inset: 0; background: rgba(0,0,0,0.55); backdrop-filter: blur(4px); z-index: 35; }
266
+ @keyframes rise { from { transform: translate(-50%, 10px); opacity: 0; } to { transform: translate(-50%, 0); opacity: 1; } }
267
+ .drawer-head { display: flex; align-items: flex-start; gap: 16px; padding: 20px 22px; border-bottom: 1px solid var(--line); }
268
+ .drawer-head h3 { font-size: 19px; font-weight: 600; letter-spacing: -0.02em; }
269
+ .drawer-title p { margin-top: 6px; max-width: 78ch; color: var(--text-3); font-size: 13px; line-height: 1.6; }
270
+ .drawer-head .btn { flex-shrink: 0; }
271
+ .drawer-body { flex: 1; min-height: 0; overflow: auto; padding: 22px; }
272
+ .drawer pre.out { padding: 14px 16px; background: var(--panel); border: 1px solid var(--line); color: #e6e6e6; border-radius: var(--r); min-height: 130px; max-height: 46vh; overflow: auto; white-space: pre-wrap; line-height: 1.6; }
273
+ .drawer .row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
274
+ .drawer .row + .row { margin-top: 10px; }
275
+ .drawer .block { padding: 22px; border-radius: 12px; background: var(--panel); border: 1px solid var(--line); }
276
+ .drawer .block + .block { margin-top: 14px; }
277
+ .block-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }
278
+ .block-head h4 { font-size: 16px; font-weight: 700; letter-spacing: -0.02em; }
279
+ .block-meta { color: var(--text-3); font-size: 12.5px; }
280
+ .drawer-empty { color: var(--text-3); font-size: 13px; line-height: 1.65; }
281
+
282
+ /* connection steps: installed is not connected */
283
+ .steps { list-style: none; display: block; }
284
+ .step { display: grid; grid-template-columns: 26px minmax(0,1fr); gap: 16px; padding: 16px 0; border-top: 1px solid var(--line); }
285
+ .step:first-child { border-top: 0; padding-top: 0; }
286
+ .step-n { display: grid; place-items: center; width: 26px; height: 26px; border: 1px solid var(--line-2); border-radius: 50%; color: var(--text-3); font-size: 12.5px; font-weight: 700; }
287
+ .step.done .step-n { border-color: #2f5d3f; background: #14301f; color: var(--green); }
288
+ .step-title { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 14.5px; font-weight: 600; }
289
+ .step-state { padding: 2px 8px; border-radius: 5px; background: var(--panel-2); color: var(--text-3); font-size: 11.5px; font-weight: 600; }
290
+ .step-state.ok { color: var(--green); }
291
+ .step-body p { margin-top: 7px; max-width: 78ch; color: var(--text-2); font-size: 13.5px; line-height: 1.65; word-break: break-word; }
292
+ .step-row { margin-top: 13px; }
293
+
294
+ /* releases */
295
+ .rel-list { list-style: none; display: grid; gap: 10px; }
296
+ .rel { display: flex; align-items: center; gap: 20px; padding: 16px 18px; border-radius: 10px; background: var(--panel-2); }
297
+ .rel-main { flex: 1; min-width: 0; }
298
+ .rel-line { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
299
+ .rel .lbl { font-size: 15px; font-weight: 700; }
300
+ .rel-sum { margin-top: 6px; color: var(--text-2); font-size: 13px; line-height: 1.55; }
301
+ .rel-meta { margin-top: 4px; color: var(--text-3); font-size: 12px; }
302
+ .rel .btn { flex-shrink: 0; }
303
+ .compare-fields { align-items: flex-end; gap: 14px; }
304
+ .compare-fields label { display: grid; gap: 8px; color: var(--text-3); font-size: 12.5px; flex: 1 1 210px; }
305
+ .compare-fields input { width: 100%; height: 42px; font-size: 13.5px; }
306
+ .compare-actions { display: flex; gap: 8px; flex-shrink: 0; }
307
+ .compare-actions .btn { height: 42px; }
308
+ .compare-error { margin-top: 14px; padding: 12px 14px; border: 1px solid #653b3b; border-radius: 8px; color: var(--red); font-size: 13px; }
309
+ .diff-result { margin-top: 18px; }
310
+ .diff-stats { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 16px; padding-bottom: 12px; color: var(--text-3); font-size: 13px; }
311
+ .diff-stats .diff-range { color: var(--text); font-weight: 600; }
312
+ .diff-stats .add { color: var(--green); } .diff-stats .del { color: var(--red); }
313
+ .diff { font-family: var(--mono); font-size: 12.5px; line-height: 1.55; white-space: pre; overflow: auto; }
314
+ .diff .add { color: var(--green); } .diff .del { color: var(--red); } .diff .hd { color: var(--text-3); }
315
+
316
+ /* ---------- toasts ---------- */
317
+ .toasts { position: fixed; left: 50%; bottom: 20px; transform: translateX(-50%); display: flex; flex-direction: column; gap: 8px; z-index: 40; }
318
+ .toast { padding: 10px 14px; border-radius: var(--r); background: #fff; color: #0a0a0a; font-size: 13px; font-weight: 600; box-shadow: 0 12px 30px rgba(0, 0, 0, 0.5); animation: pop 0.16s ease-out; max-width: 560px; }
319
+ .toast.err { background: #3b1111; color: #ffb4b4; }
320
+ @keyframes pop { from { transform: translateY(8px); opacity: 0; } to { transform: none; opacity: 1; } }
321
+
322
+ .scanbar { display: flex; align-items: center; gap: 12px; padding: 12px 16px; margin-bottom: 18px; border-radius: 12px; background: var(--panel); border: 1px solid var(--line); color: var(--text-2); font-weight: 500; }
323
+ .scanbar .spin { width: 13px; height: 13px; border: 2px solid var(--acid); border-right-color: transparent; border-radius: 50%; animation: spin 0.7s linear infinite; }
324
+
325
+ @media (max-width: 1200px) {
326
+ .app { gap: 20px; padding: 0 24px 32px; }
327
+ .app.agent-open { grid-template-columns: minmax(0,1fr) 330px; }
328
+ .setup-services { grid-template-columns: repeat(2,minmax(0,1fr)); }
329
+ }
330
+ @media (max-width: 900px) {
331
+ .app.agent-open { grid-template-columns: minmax(0,1fr); }
332
+ .side { position: static; height: 660px; }
333
+ .top { flex-wrap: wrap; height: auto; min-height: var(--top); padding-block: 12px; gap: 8px; }
334
+ .top .meta, .top .sep, .top > .pill { display: none; }
335
+ .rail { grid-template-columns: repeat(auto-fit,minmax(210px,1fr)); }
336
+ .fix { grid-template-columns: minmax(0,1fr); gap: 18px; }
337
+ .fix-act { flex-direction: row; align-items: center; flex-wrap: wrap; gap: 8px 16px; }
338
+ .fix-act .btn { width: auto; min-width: 190px; }
339
+ .fix-who { flex: 1 1 220px; }
340
+ }
341
+ @media (max-width: 560px) {
342
+ .app { padding: 0 16px 24px; gap: 12px; }
343
+ .top .brand { width: 100%; padding-right: 110px; }
344
+ .top .spacer { display: none; }
345
+ .top .agent-toggle { position: absolute; top: 13px; right: 0; }
346
+ .top .btn { font-size: 12px; padding: 0 10px; }
347
+ .workspace-heading { align-items: start; flex-direction: column; gap: 22px; }
348
+ .workspace-heading .btn { width: 100%; }
349
+ .workspace-tabs { gap: 24px; margin-top: 30px; }
350
+ .workspace-tabs button { font-size: 12px; gap: 6px; }
351
+ .rail { grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; }
352
+ .slab { padding: 16px 12px; }
353
+ .face { min-height: 165px; }
354
+ .face-name { font-size: 19px; }
355
+ .slab-status { min-height: 96px; }
356
+ .slab-act .btn { font-size: 11px; padding: 0 5px; }
357
+ .section-head { align-items: start; flex-direction: column; }
358
+ .fix { padding: 18px 16px; gap: 16px; }
359
+ .fix-title { font-size: 16.5px; }
360
+ .fix-evidence { padding: 14px; }
361
+ .fix-evidence > div { grid-template-columns: minmax(0,1fr); gap: 3px; }
362
+ .fix-act { flex-direction: column; align-items: stretch; }
363
+ .fix-act .btn { width: 100%; min-width: 0; }
364
+ .setup-heading { padding: 20px 16px; }
365
+ .setup-heading h2 { font-size: 20px; }
366
+ .setup-services { grid-template-columns: repeat(2,minmax(0,1fr)); padding: 0 16px 20px; }
367
+ .setup-service { padding: 10px 8px; gap: 7px; }
368
+ .setup-service img { width: 20px; height: 20px; }
369
+ .setup-service small { font-size: 9px; }
370
+ .setup-footer { flex-direction: column; align-items: stretch; padding: 20px 16px; gap: 15px; }
371
+ .setup-footer .btn { margin: 0; }
372
+ .drawer, .drawer[data-drawer="releases"] { width: calc(100vw - 20px); border-radius: 12px; top: 10px; bottom: 10px; }
373
+ .drawer-head { padding: 16px; gap: 10px; }
374
+ .drawer-head h3 { font-size: 17px; }
375
+ .drawer-body { padding: 14px; }
376
+ .drawer .block { padding: 16px; }
377
+ .step { grid-template-columns: 22px minmax(0,1fr); gap: 12px; }
378
+ .step-n { width: 22px; height: 22px; font-size: 11.5px; }
379
+ .step-row .btn { width: 100%; }
380
+ .rel { flex-direction: column; align-items: stretch; gap: 12px; padding: 14px; }
381
+ .rel .btn { width: 100%; }
382
+ .compare-actions { width: 100%; }
383
+ .compare-actions .btn { flex: 1; }
384
+ .drawer pre.out { max-height: 40vh; }
385
+ .toast { max-width: calc(100vw - 32px); width: max-content; }
386
+ }
387
+ @media (prefers-reduced-motion: reduce) {
388
+ *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
389
+ }
390
+ /* ---------- hosted full check ---------- */
391
+ .fc-veil { position: fixed; inset: 0; z-index: 60; background: rgba(0,0,0,0.62); }
392
+ .fc-sheet { position: fixed; z-index: 61; top: 5vh; left: 50%; transform: translateX(-50%); width: min(880px, calc(100vw - 32px)); max-height: 90vh; display: flex; flex-direction: column; background: var(--panel); border: 1px solid var(--line-2); border-radius: var(--r-lg); box-shadow: 0 30px 80px rgba(0,0,0,0.55); }
393
+ .fc-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px 24px; border-bottom: 1px solid var(--line); }
394
+ .fc-head h2 { font-size: 17px; letter-spacing: -0.01em; }
395
+ .fc-body { overflow: auto; padding: 22px 24px 24px; display: flex; flex-direction: column; gap: 16px; }
396
+ .fc-lead { color: var(--text-2); font-size: 14px; }
397
+ .fc-notice { padding: 10px 14px; border-radius: var(--r); background: #2b2518; color: var(--amber); font-size: 13px; }
398
+ .fc-error { padding: 12px 14px; border-radius: var(--r); background: #2d1919; color: var(--red); }
399
+ .fc-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
400
+ .fc-actions a.btn { text-decoration: none; }
401
+ .fc-wait { display: inline-flex; align-items: center; gap: 9px; color: var(--text-3); font-size: 13px; }
402
+ .fc-code { display: flex; align-items: baseline; gap: 14px; padding: 16px 18px; border: 1px dashed var(--line-2); border-radius: var(--r); background: var(--bg); width: fit-content; }
403
+ .fc-code-label { color: var(--text-3); font-size: 12.5px; }
404
+ .fc-code strong { font-family: var(--mono); font-size: 26px; letter-spacing: 0.18em; color: var(--acid); }
405
+ .fc-account { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; color: var(--text-3); font-size: 12.5px; }
406
+ .fc-account .fc-dot::before { content: "·"; margin-right: 12px; color: var(--line-2); }
407
+ .fc-link { color: var(--text-2); text-decoration: underline; text-underline-offset: 3px; font-size: 12.5px; }
408
+ .fc-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
409
+ .fc-facts > div { padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--r); background: var(--bg); min-width: 0; }
410
+ .fc-facts dt { color: var(--text-3); font-size: 11.5px; text-transform: uppercase; letter-spacing: 0.05em; }
411
+ .fc-facts dd { margin-top: 2px; overflow-wrap: anywhere; }
412
+ .fc-filegrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; }
413
+ .fc-files { border: 1px solid var(--line); border-radius: var(--r); padding: 12px; background: var(--bg); min-width: 0; }
414
+ .fc-files h4 { font-size: 12.5px; color: var(--text-2); margin-bottom: 8px; }
415
+ .fc-files ul { list-style: none; max-height: 180px; overflow: auto; display: flex; flex-direction: column; gap: 4px; }
416
+ .fc-files li { display: flex; justify-content: space-between; gap: 10px; font-size: 12px; }
417
+ .fc-files li code { overflow-wrap: anywhere; color: var(--text); }
418
+ .fc-files li span { color: var(--text-3); white-space: nowrap; }
419
+ .fc-raw summary { cursor: pointer; color: var(--text-2); font-size: 13px; }
420
+ .fc-raw pre { margin-top: 10px; max-height: 280px; overflow: auto; padding: 12px; border-radius: var(--r); background: var(--bg); border: 1px solid var(--line); white-space: pre-wrap; overflow-wrap: anywhere; color: var(--text-2); }
421
+ .fc-score { display: flex; gap: 18px; align-items: center; }
422
+ .fc-score-num { flex: none; width: 72px; height: 72px; display: grid; place-items: center; border-radius: 50%; border: 3px solid var(--acid); font-size: 26px; font-weight: 700; }
423
+ .fc-score-label { display: flex; align-items: center; gap: 10px; font-size: 16px; font-weight: 700; margin-bottom: 4px; }
424
+ .fc-score p { color: var(--text-2); }
425
+ .fc-next { padding: 16px 18px; border: 1px solid var(--line); border-left: 3px solid var(--acid); border-radius: 12px; background: #141416; display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
426
+ .fc-next h3 { font-size: 16px; }
427
+ .fc-next p { color: var(--text-2); }
428
+ .fc-eyebrow { color: var(--acid); font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; }
429
+ .fc-h4 { font-size: 13px; color: var(--text-2); }
430
+ .fc-areas { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; }
431
+ .fc-area { padding: 12px 14px; border: 1px solid var(--line); border-radius: var(--r); background: var(--bg); display: flex; flex-direction: column; gap: 8px; }
432
+ .fc-area.locked { opacity: 0.72; border-style: dashed; }
433
+ .fc-area-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
434
+ .fc-area h5 { font-size: 13.5px; }
435
+ .fc-count { min-width: 24px; height: 22px; padding: 0 7px; display: grid; place-items: center; border-radius: 11px; background: var(--panel-2); color: var(--text-3); font-size: 12px; font-weight: 700; }
436
+ .fc-count.on { background: #2b2518; color: var(--amber); }
437
+ .fc-area ul { list-style: none; display: flex; flex-direction: column; gap: 6px; }
438
+ .fc-area li { display: flex; align-items: flex-start; gap: 8px; font-size: 12.5px; }
439
+ .fc-area li .tag { height: 20px; font-size: 10.5px; flex: none; }
440
+ .fc-upsell { color: var(--text-2); font-size: 13px; }
441
+ .fc-upsell a { color: var(--acid); }
442
+ .fc-limit { font-size: 18px; line-height: 1.35; }