livedesk 0.1.151 → 0.1.152
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/README.md +1 -1
- package/hub/src/mode4-atlas-worker.js +73 -20
- package/hub/src/mode4-atlas.js +33 -2
- package/hub/src/server.js +6 -2
- package/package.json +1 -1
- package/web/dist/assets/index-Ciy01vvN.css +1 -0
- package/web/dist/assets/index-CyDjd_HL.js +10 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-359HTh4H.css +0 -1
- package/web/dist/assets/index-C5qiAnWV.js +0 -10
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ automatically after reboot.
|
|
|
29
29
|
- Mode 2: independent 320x180 RGB565+LZO tiles for large, stable walls.
|
|
30
30
|
- Mode 3: direct hardware H.264 for focused remote control up to 4K.
|
|
31
31
|
- Mode 4: client Mode 2 inputs composited by an isolated Hub worker into one
|
|
32
|
-
|
|
32
|
+
bounded H.264 Atlas stream, then split by UV into the normal browser slots.
|
|
33
33
|
|
|
34
34
|
## Plans
|
|
35
35
|
|
|
@@ -9,7 +9,18 @@ const DEFAULT_WIDTH = 1920;
|
|
|
9
9
|
const DEFAULT_HEIGHT = 1080;
|
|
10
10
|
const DEFAULT_FPS = 20;
|
|
11
11
|
const MAX_DEVICES = 100;
|
|
12
|
-
const FRAME_POOL_SIZE =
|
|
12
|
+
const FRAME_POOL_SIZE = 8;
|
|
13
|
+
const MAX_TILE_WIDTH = 320;
|
|
14
|
+
const MAX_TILE_HEIGHT = 180;
|
|
15
|
+
|
|
16
|
+
const rgb565Red = new Uint8Array(65_536);
|
|
17
|
+
const rgb565Green = new Uint8Array(65_536);
|
|
18
|
+
const rgb565Blue = new Uint8Array(65_536);
|
|
19
|
+
for (let pixel = 0; pixel < 65_536; pixel += 1) {
|
|
20
|
+
rgb565Red[pixel] = (((pixel >> 11) & 0x1f) * 255 / 31) | 0;
|
|
21
|
+
rgb565Green[pixel] = (((pixel >> 5) & 0x3f) * 255 / 63) | 0;
|
|
22
|
+
rgb565Blue[pixel] = ((pixel & 0x1f) * 255 / 31) | 0;
|
|
23
|
+
}
|
|
13
24
|
|
|
14
25
|
let config = normalizeConfig({});
|
|
15
26
|
let layoutVersion = 0;
|
|
@@ -25,7 +36,10 @@ let encoderStartupTimer = null;
|
|
|
25
36
|
let outputBuffer = Buffer.alloc(0);
|
|
26
37
|
let frameSeq = 0;
|
|
27
38
|
let tickTimer = null;
|
|
39
|
+
let nextTickAt = 0;
|
|
28
40
|
let closed = false;
|
|
41
|
+
let lastComposeMs = 0;
|
|
42
|
+
let poolStarved = 0;
|
|
29
43
|
|
|
30
44
|
function clamp(value, min, max, fallback) {
|
|
31
45
|
const number = Number(value);
|
|
@@ -35,10 +49,23 @@ function clamp(value, min, max, fallback) {
|
|
|
35
49
|
function normalizeConfig(value) {
|
|
36
50
|
const deviceIds = [...new Set((Array.isArray(value?.deviceIds) ? value.deviceIds : [])
|
|
37
51
|
.map(item => String(item || '').trim()).filter(Boolean))].slice(0, MAX_DEVICES);
|
|
52
|
+
const maxWidth = clamp(value?.width, 640, 3840, DEFAULT_WIDTH);
|
|
53
|
+
const maxHeight = clamp(value?.height, 360, 2160, DEFAULT_HEIGHT);
|
|
54
|
+
const count = Math.max(1, deviceIds.length);
|
|
55
|
+
const columns = Math.max(1, Math.ceil(Math.sqrt(count)));
|
|
56
|
+
const rows = Math.max(1, Math.ceil(count / columns));
|
|
57
|
+
const tileWidth = Math.max(2, Math.min(MAX_TILE_WIDTH, Math.floor(maxWidth / columns))) & ~1;
|
|
58
|
+
const tileHeight = Math.max(2, Math.min(MAX_TILE_HEIGHT, Math.floor(maxHeight / rows))) & ~1;
|
|
38
59
|
return {
|
|
39
60
|
deviceIds,
|
|
40
|
-
|
|
41
|
-
|
|
61
|
+
maxWidth,
|
|
62
|
+
maxHeight,
|
|
63
|
+
width: tileWidth * columns,
|
|
64
|
+
height: tileHeight * rows,
|
|
65
|
+
columns,
|
|
66
|
+
rows,
|
|
67
|
+
tileWidth,
|
|
68
|
+
tileHeight,
|
|
42
69
|
fps: clamp(value?.fps, 1, 30, DEFAULT_FPS)
|
|
43
70
|
};
|
|
44
71
|
}
|
|
@@ -193,27 +220,25 @@ function emitEncodedUnit(payload) {
|
|
|
193
220
|
isKeyFrame,
|
|
194
221
|
chunkType: isKeyFrame ? 'key' : 'delta',
|
|
195
222
|
hardwareEncoder: encoder?.candidate?.name || '',
|
|
196
|
-
layoutVersion
|
|
223
|
+
layoutVersion,
|
|
224
|
+
composeMs: lastComposeMs,
|
|
225
|
+
poolStarved
|
|
197
226
|
}
|
|
198
227
|
});
|
|
199
228
|
}
|
|
200
229
|
|
|
201
230
|
function rebuildLayout() {
|
|
202
|
-
const
|
|
203
|
-
const columns = Math.max(1, Math.ceil(Math.sqrt(count)));
|
|
204
|
-
const rows = Math.max(1, Math.ceil(count / columns));
|
|
205
|
-
const cellWidth = Math.floor(config.width / columns);
|
|
206
|
-
const cellHeight = Math.floor(config.height / rows);
|
|
231
|
+
const { columns, rows, tileWidth, tileHeight } = config;
|
|
207
232
|
layoutVersion += 1;
|
|
208
233
|
layout = config.deviceIds.map((deviceId, index) => ({
|
|
209
234
|
deviceId,
|
|
210
235
|
index,
|
|
211
236
|
column: index % columns,
|
|
212
237
|
row: Math.floor(index / columns),
|
|
213
|
-
x: (index % columns) *
|
|
214
|
-
y: Math.floor(index / columns) *
|
|
215
|
-
width:
|
|
216
|
-
height:
|
|
238
|
+
x: (index % columns) * tileWidth,
|
|
239
|
+
y: Math.floor(index / columns) * tileHeight,
|
|
240
|
+
width: tileWidth,
|
|
241
|
+
height: tileHeight
|
|
217
242
|
}));
|
|
218
243
|
for (const tile of latestTiles.values()) tile.rendered = null;
|
|
219
244
|
framePool = Array.from({ length: FRAME_POOL_SIZE }, () => Buffer.alloc(config.width * config.height * 3));
|
|
@@ -228,17 +253,26 @@ function renderTile(tileState, tileLayout) {
|
|
|
228
253
|
const height = Math.max(1, Math.floor(sourceHeight * scale));
|
|
229
254
|
const pixels = Buffer.allocUnsafe(width * height * 3);
|
|
230
255
|
let target = 0;
|
|
256
|
+
if (width === sourceWidth && height === sourceHeight) {
|
|
257
|
+
for (let source = 0; source < tileState.rgb565.length; source += 2) {
|
|
258
|
+
const pixel = tileState.rgb565[source] | (tileState.rgb565[source + 1] << 8);
|
|
259
|
+
pixels[target++] = rgb565Red[pixel];
|
|
260
|
+
pixels[target++] = rgb565Green[pixel];
|
|
261
|
+
pixels[target++] = rgb565Blue[pixel];
|
|
262
|
+
}
|
|
263
|
+
} else {
|
|
231
264
|
for (let y = 0; y < height; y += 1) {
|
|
232
265
|
const sourceY = Math.min(sourceHeight - 1, Math.floor((y + 0.5) * sourceHeight / height));
|
|
233
266
|
for (let x = 0; x < width; x += 1) {
|
|
234
267
|
const sourceX = Math.min(sourceWidth - 1, Math.floor((x + 0.5) * sourceWidth / width));
|
|
235
268
|
const source = (sourceY * sourceWidth + sourceX) * 2;
|
|
236
269
|
const pixel = tileState.rgb565[source] | (tileState.rgb565[source + 1] << 8);
|
|
237
|
-
pixels[target++] =
|
|
238
|
-
pixels[target++] =
|
|
239
|
-
pixels[target++] =
|
|
270
|
+
pixels[target++] = rgb565Red[pixel];
|
|
271
|
+
pixels[target++] = rgb565Green[pixel];
|
|
272
|
+
pixels[target++] = rgb565Blue[pixel];
|
|
240
273
|
}
|
|
241
274
|
}
|
|
275
|
+
}
|
|
242
276
|
tileState.rendered = {
|
|
243
277
|
pixels,
|
|
244
278
|
width,
|
|
@@ -269,9 +303,13 @@ function ingestFrame(message) {
|
|
|
269
303
|
}
|
|
270
304
|
|
|
271
305
|
function writeAtlasFrame() {
|
|
306
|
+
const composeStartedAt = performance.now();
|
|
272
307
|
const target = framePool.pop();
|
|
273
308
|
const stdin = encoder?.child?.stdin;
|
|
274
|
-
if (!target || !stdin || stdin.destroyed || !stdin.writable)
|
|
309
|
+
if (!target || !stdin || stdin.destroyed || !stdin.writable) {
|
|
310
|
+
if (!target) poolStarved += 1;
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
275
313
|
target.fill(0);
|
|
276
314
|
for (const tileLayout of layout) {
|
|
277
315
|
const tileState = latestTiles.get(tileLayout.deviceId);
|
|
@@ -284,6 +322,7 @@ function writeAtlasFrame() {
|
|
|
284
322
|
rendered.pixels.copy(target, targetStart, sourceStart, sourceStart + rendered.width * 3);
|
|
285
323
|
}
|
|
286
324
|
}
|
|
325
|
+
lastComposeMs = Math.max(0, performance.now() - composeStartedAt);
|
|
287
326
|
try {
|
|
288
327
|
stdin.write(target, error => {
|
|
289
328
|
framePool.push(target);
|
|
@@ -295,6 +334,21 @@ function writeAtlasFrame() {
|
|
|
295
334
|
}
|
|
296
335
|
}
|
|
297
336
|
|
|
337
|
+
function startComposeClock() {
|
|
338
|
+
clearTimeout(tickTimer);
|
|
339
|
+
const intervalMs = 1000 / config.fps;
|
|
340
|
+
nextTickAt = performance.now() + intervalMs;
|
|
341
|
+
const tick = () => {
|
|
342
|
+
if (closed) return;
|
|
343
|
+
writeAtlasFrame();
|
|
344
|
+
const now = performance.now();
|
|
345
|
+
nextTickAt += intervalMs;
|
|
346
|
+
if (nextTickAt < now - intervalMs) nextTickAt = now + intervalMs;
|
|
347
|
+
tickTimer = setTimeout(tick, Math.max(0, nextTickAt - performance.now()));
|
|
348
|
+
};
|
|
349
|
+
tickTimer = setTimeout(tick, intervalMs);
|
|
350
|
+
}
|
|
351
|
+
|
|
298
352
|
function configure(value) {
|
|
299
353
|
const next = normalizeConfig(value);
|
|
300
354
|
const encoderChanged = next.width !== config.width || next.height !== config.height || next.fps !== config.fps;
|
|
@@ -307,8 +361,7 @@ function configure(value) {
|
|
|
307
361
|
encoderCandidateIndex = 0;
|
|
308
362
|
startEncoder();
|
|
309
363
|
}
|
|
310
|
-
|
|
311
|
-
tickTimer = setInterval(writeAtlasFrame, Math.max(1, Math.round(1000 / config.fps)));
|
|
364
|
+
startComposeClock();
|
|
312
365
|
}
|
|
313
366
|
|
|
314
367
|
process.on('message', message => {
|
|
@@ -320,7 +373,7 @@ process.on('message', message => {
|
|
|
320
373
|
function shutdown() {
|
|
321
374
|
if (closed) return;
|
|
322
375
|
closed = true;
|
|
323
|
-
|
|
376
|
+
clearTimeout(tickTimer);
|
|
324
377
|
stopEncoder();
|
|
325
378
|
setTimeout(() => process.exit(0), 50).unref?.();
|
|
326
379
|
}
|
package/hub/src/mode4-atlas.js
CHANGED
|
@@ -14,6 +14,8 @@ export class Mode4AtlasSession {
|
|
|
14
14
|
this.closed = false;
|
|
15
15
|
this.worker = null;
|
|
16
16
|
this.restartTimer = null;
|
|
17
|
+
this.pendingFrames = new Map();
|
|
18
|
+
this.frameSendsInFlight = new Set();
|
|
17
19
|
this.startWorker();
|
|
18
20
|
}
|
|
19
21
|
|
|
@@ -37,6 +39,7 @@ export class Mode4AtlasSession {
|
|
|
37
39
|
});
|
|
38
40
|
worker.on('exit', code => {
|
|
39
41
|
if (this.worker === worker) this.worker = null;
|
|
42
|
+
this.frameSendsInFlight.clear();
|
|
40
43
|
if (this.closed) return;
|
|
41
44
|
this.onStatus({ type: 'status', state: 'worker-restart', code });
|
|
42
45
|
clearTimeout(this.restartTimer);
|
|
@@ -46,13 +49,18 @@ export class Mode4AtlasSession {
|
|
|
46
49
|
}, 750);
|
|
47
50
|
});
|
|
48
51
|
worker.on('error', error => this.onStatus({ type: 'status', state: 'worker-error', error: error.message }));
|
|
49
|
-
if (this.config)
|
|
52
|
+
if (this.config) {
|
|
53
|
+
worker.send({ type: 'configure', ...this.config }, () => {
|
|
54
|
+
for (const deviceId of this.pendingFrames.keys()) this.pumpDeviceFrame(deviceId);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
50
57
|
}
|
|
51
58
|
|
|
52
59
|
configure(options = {}) {
|
|
53
60
|
this.deviceIds = [...new Set((Array.isArray(options.deviceIds) ? options.deviceIds : [])
|
|
54
61
|
.map(value => String(value || '').trim()).filter(Boolean))].slice(0, 100);
|
|
55
62
|
this.deviceSet = new Set(this.deviceIds);
|
|
63
|
+
this.pendingFrames = new Map([...this.pendingFrames].filter(([deviceId]) => this.deviceSet.has(deviceId)));
|
|
56
64
|
this.config = {
|
|
57
65
|
deviceIds: this.deviceIds,
|
|
58
66
|
width: Number(options.width || 1920),
|
|
@@ -62,13 +70,33 @@ export class Mode4AtlasSession {
|
|
|
62
70
|
this.worker?.send({ type: 'configure', ...this.config });
|
|
63
71
|
}
|
|
64
72
|
|
|
73
|
+
pumpDeviceFrame(deviceId) {
|
|
74
|
+
if (this.closed || !this.worker || this.frameSendsInFlight.has(deviceId)) return;
|
|
75
|
+
const message = this.pendingFrames.get(deviceId);
|
|
76
|
+
if (!message) return;
|
|
77
|
+
this.pendingFrames.delete(deviceId);
|
|
78
|
+
this.frameSendsInFlight.add(deviceId);
|
|
79
|
+
try {
|
|
80
|
+
this.worker.send(message, error => {
|
|
81
|
+
this.frameSendsInFlight.delete(deviceId);
|
|
82
|
+
if (error && !this.closed) {
|
|
83
|
+
this.onStatus({ type: 'log', level: 'warn', message: `Mode 4 input ${deviceId}: ${error.message}` });
|
|
84
|
+
}
|
|
85
|
+
this.pumpDeviceFrame(deviceId);
|
|
86
|
+
});
|
|
87
|
+
} catch (error) {
|
|
88
|
+
this.frameSendsInFlight.delete(deviceId);
|
|
89
|
+
this.onStatus({ type: 'log', level: 'warn', message: `Mode 4 input ${deviceId}: ${error.message}` });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
65
93
|
ingest(frameEvent) {
|
|
66
94
|
if (this.closed || !this.worker) return;
|
|
67
95
|
const frame = frameEvent?.frame || {};
|
|
68
96
|
const deviceId = String(frameEvent?.deviceId || frame.deviceId || '').trim();
|
|
69
97
|
const mode = String(frame.frameMode || frame.mode || '').toLowerCase();
|
|
70
98
|
if (!this.deviceSet.has(deviceId) || mode !== 'mode2-lzo' || !Buffer.isBuffer(frameEvent?.payload)) return;
|
|
71
|
-
this.
|
|
99
|
+
this.pendingFrames.set(deviceId, {
|
|
72
100
|
type: 'frame',
|
|
73
101
|
deviceId,
|
|
74
102
|
frameSeq: Number(frame.frameSeq || 0),
|
|
@@ -77,12 +105,15 @@ export class Mode4AtlasSession {
|
|
|
77
105
|
uncompressedByteLength: Number(frame.uncompressedByteLength || 0),
|
|
78
106
|
payload: frameEvent.payload
|
|
79
107
|
});
|
|
108
|
+
this.pumpDeviceFrame(deviceId);
|
|
80
109
|
}
|
|
81
110
|
|
|
82
111
|
close() {
|
|
83
112
|
if (this.closed) return;
|
|
84
113
|
this.closed = true;
|
|
85
114
|
clearTimeout(this.restartTimer);
|
|
115
|
+
this.pendingFrames.clear();
|
|
116
|
+
this.frameSendsInFlight.clear();
|
|
86
117
|
const worker = this.worker;
|
|
87
118
|
this.worker = null;
|
|
88
119
|
try { worker?.send({ type: 'close' }); } catch {}
|
package/hub/src/server.js
CHANGED
|
@@ -773,7 +773,9 @@ function buildRemoteFrameBinaryPacket(frameEvent, diagnostics = {}) {
|
|
|
773
773
|
convertMs: Number(frame.convertMs || 0) || 0,
|
|
774
774
|
compressMs: Number(frame.compressMs || 0) || 0,
|
|
775
775
|
sameContentStreak: Number(frame.sameContentStreak || 0) || 0,
|
|
776
|
-
layoutVersion: Number(frame.layoutVersion || 0) || 0
|
|
776
|
+
layoutVersion: Number(frame.layoutVersion || 0) || 0,
|
|
777
|
+
atlasComposeMs: Number(frame.atlasComposeMs || 0) || 0,
|
|
778
|
+
atlasPoolStarved: Number(frame.atlasPoolStarved || 0) || 0
|
|
777
779
|
};
|
|
778
780
|
const metaBuffer = Buffer.from(JSON.stringify(metadata), 'utf8');
|
|
779
781
|
const header = Buffer.allocUnsafe(4);
|
|
@@ -913,7 +915,9 @@ function sendMode4AtlasFrame(ws, output) {
|
|
|
913
915
|
receivedAt: new Date().toISOString(),
|
|
914
916
|
hardwareEncoder: String(metadata.hardwareEncoder || ''),
|
|
915
917
|
platformProfile: 'mode4-hub-atlas-worker',
|
|
916
|
-
layoutVersion: Number(metadata.layoutVersion || 0)
|
|
918
|
+
layoutVersion: Number(metadata.layoutVersion || 0),
|
|
919
|
+
atlasComposeMs: Number(metadata.composeMs || 0),
|
|
920
|
+
atlasPoolStarved: Number(metadata.poolStarved || 0)
|
|
917
921
|
}
|
|
918
922
|
};
|
|
919
923
|
const lane = ensureFrameClientSendLane(ws);
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{color-scheme:dark;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:#0b0c0e;color:#f7f7f4;letter-spacing:0;font-synthesis:none;text-rendering:geometricPrecision;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body,#root{width:100%;min-width:320px;min-height:100%;margin:0}body{background:linear-gradient(135deg,#2a303a8a,#0b0c0e00 34%),linear-gradient(180deg,#17191d,#0b0c0e 46%,#08090a)}button,textarea,code{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.48}h1,h2,p{margin:0}.app-shell{min-height:100vh;display:grid;grid-template-columns:72px minmax(0,1fr);color:#f7f7f4}.tool-rail{position:sticky;top:0;height:100vh;min-height:100vh;max-height:100vh;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:18px;padding:10px 8px;border-right:1px solid rgba(255,255,255,.08);background:#121417e6;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);z-index:1300}.rail-brand{width:40px;height:40px;margin:0 auto;display:grid;place-items:center;border-radius:8px;background:#f7f7f4;color:#111214;box-shadow:0 14px 32px #0000006b}.rail-tools,.rail-footer{display:flex;flex-direction:column;align-items:center;gap:8px}.rail-footer{position:relative}.rail-tools{scrollbar-width:none}.rail-tools::-webkit-scrollbar{display:none}.rail-tool{width:56px;min-height:56px;display:grid;place-items:center;gap:4px;border:1px solid transparent;border-radius:8px;background:transparent;color:#a9adb5;padding:7px 4px;transition:background .16s ease,color .16s ease,border-color .16s ease,transform .16s ease}.rail-tool:hover{color:#fff;background:#ffffff14}.rail-tool.active{color:#fff;background:#ffffff1f;border-color:#ffffff24;transform:translateY(-1px)}.rail-tool span{max-width:52px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:1;font-weight:700}.rail-tool.accent-mint.active svg{color:#5eead4}.rail-tool.accent-blue.active svg{color:#60a5fa}.rail-tool.accent-red.active svg{color:#fb7185}.rail-tool.accent-violet.active svg{color:#a78bfa}.rail-tool.accent-amber.active svg{color:#fbbf24}.rail-tool.accent-green.active svg{color:#34d399}.rail-tool.compact{min-height:48px}.rail-tool.sync-server span{white-space:normal;line-height:1.05}.rail-account{width:56px;min-height:60px;display:grid;place-items:center;gap:5px;border:1px solid rgba(255,255,255,.12);border-radius:8px;background:#ffffff14;color:#f7f7f4;padding:6px 4px;transition:background .16s ease,border-color .16s ease,transform .16s ease}.rail-account:hover{background:#ffffff21;border-color:#fff3;transform:translateY(-1px)}.rail-account img,.avatar-fallback{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;overflow:hidden}.rail-account img{object-fit:cover;background:#0b0c0e;box-shadow:0 0 0 2px #2dd4bf7a}.avatar-fallback{background:linear-gradient(145deg,#2dd4bf,#60a5fa);color:#061012;font-size:14px;font-weight:900}.rail-account span:last-child{max-width:52px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:1;font-weight:800}.rail-account.signed-in{background:#2dd4bf17;border-color:#2dd4bf33}.account-popover{position:fixed;left:78px;bottom:14px;z-index:1400;width:min(304px,calc(100vw - 92px));padding:14px;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:#121417f5;color:#f7f7f4;box-shadow:0 22px 50px #0000006b}.account-popover-head{display:grid;grid-template-columns:42px minmax(0,1fr);gap:10px;align-items:center;margin-bottom:12px}.account-popover-avatar{width:42px;height:42px;display:grid;place-items:center;overflow:hidden;border-radius:50%;background:linear-gradient(145deg,#2dd4bf,#60a5fa);color:#061012;font-weight:900}.account-popover-avatar img{width:100%;height:100%;object-fit:cover}.account-popover-head strong{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:900}.account-popover-head p{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#a9adb5;font-size:12px;font-weight:700}.account-popover-facts{display:grid;grid-template-columns:auto minmax(0,1fr);gap:7px 12px;margin:0 0 13px;padding:11px 0 12px;border-top:1px solid rgba(255,255,255,.1);border-bottom:1px solid rgba(255,255,255,.1);font-size:12px}.account-popover-facts dt{color:#a9adb5;font-weight:800}.account-popover-facts dd{margin:0;min-width:0;overflow-wrap:anywhere;color:#fff;font-weight:900;text-align:right}.account-popover-action{width:100%;min-height:40px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:#fff;color:#111827;font-size:12px;font-weight:900;box-shadow:0 12px 26px #00000038}.local-settings-popover{position:fixed;left:78px;bottom:86px;z-index:1400;width:min(328px,calc(100vw - 92px));max-height:min(640px,calc(100vh - 28px));overflow:auto;display:grid;gap:12px;padding:14px;border:1px solid rgba(148,163,184,.28);border-radius:8px;background:linear-gradient(180deg,#fffffff7,#f9fafbf0),#fff;color:#111827;box-shadow:0 24px 58px #0f172a29,0 3px 9px #0f172a14,0 1px #fffffffa inset}.local-settings-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px}.local-settings-head strong{display:block;font-size:14px;font-weight:900}.local-settings-head p{color:#667085;font-size:12px;font-weight:700}.local-setting-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.local-setting-row{display:grid;gap:6px;min-width:0}.local-setting-row span,.local-setting-toggle span{color:#667085;font-size:11px;line-height:1.15;font-weight:900;text-transform:uppercase}.local-setting-row select{width:100%;min-width:0;height:38px;border:1px solid rgba(148,163,184,.32);border-radius:8px;background:#f8fafc;color:#111827;padding:0 10px;font-size:12px;font-weight:800}.local-setting-row select:focus{outline:none;border-color:#60a5fab8;box-shadow:0 0 0 3px #60a5fa24}.local-setting-toggle{min-height:38px;display:grid;grid-template-columns:18px minmax(0,1fr);align-items:center;gap:8px;padding:8px 10px;border:1px solid rgba(148,163,184,.24);border-radius:8px;background:#f8fafc}.local-setting-toggle input{width:16px;height:16px;margin:0;accent-color:#60a5fa}.local-settings-summary{display:grid;gap:4px;padding:10px;border:1px solid rgba(96,165,250,.22);border-radius:8px;background:#eff6ffeb}.local-settings-summary span{color:#2563eb;font-size:11px;line-height:1.1;font-weight:900;text-transform:uppercase}.local-settings-summary strong{min-width:0;overflow-wrap:anywhere;color:#111827;font-size:13px;font-weight:900}.local-settings-reset{min-height:36px;border:1px solid rgba(148,163,184,.28);border-radius:8px;background:#fff;color:#111827;font-size:12px;font-weight:900}.local-settings-reset:hover{background:#f8fafc;border-color:#60a5fa5c}.desk-stage{min-width:0;display:flex;flex-direction:column;gap:14px;padding:18px 22px 24px}.topbar{min-height:50px;display:grid;grid-template-columns:minmax(180px,1fr) auto;align-items:center;gap:16px;transition:padding-right .18s ease}.desk-stage.dock-open .topbar{padding-right:calc(var(--dock-width) + 18px)}.brand,.top-actions,.status-item,.deck-actions,.panel-title{display:flex;align-items:center}.brand{gap:10px;min-width:0}.brand-mark{width:36px;height:36px;display:grid;place-items:center;border-radius:8px;background:linear-gradient(145deg,#2dd4bf,#60a5fa);color:#061012;box-shadow:0 16px 34px #2dd4bf2e;flex:0 0 auto}h1{color:#fff;font-size:18px;line-height:1.08;font-weight:800}.brand p{color:#8d939d;font-size:12px;font-weight:700}.top-actions{min-width:0;gap:8px;justify-content:flex-end;justify-self:end}.top-actions .segmented-control{flex:0 0 auto}.icon-button,.text-button{height:36px;border:1px solid rgba(255,255,255,.13);background:#ffffff14;color:#f7f7f4;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;gap:8px;box-shadow:none;transition:background .16s ease,border-color .16s ease,transform .16s ease}.icon-button:hover,.text-button:hover{background:#ffffff21;border-color:#fff3;transform:translateY(-1px)}.icon-button{width:36px;padding:0}.text-button{padding:0 12px;white-space:nowrap;font-size:12px;font-weight:800}.text-button.full{width:100%}.text-button.primary{background:#f7f7f4;border-color:#f7f7f4;color:#0c0d0f}.text-button.primary:hover{background:#fff;border-color:#fff}.text-button.ghost{background:#ffffff0a;border-color:#ffffff1a}.text-button.compact{height:32px;padding:0 10px;font-size:11px}.text-button.active{background:#60a5fa2e;border-color:#60a5fa8c;color:#bfdbfe}.text-button.buy{background:#14b8a6;border-color:#14b8a6;color:#02120f}.notice-band{border:1px solid rgba(251,191,36,.35);background:#fbbf241f;color:#fde68a;border-radius:8px;padding:10px 12px;font-size:13px;font-weight:700}.notice-band.compact{display:grid;gap:8px;padding:9px 10px;font-size:12px}.transfer-bar{position:fixed;left:50%;right:auto;bottom:12px;transform:translate(-50%);z-index:1200;display:grid;grid-template-columns:minmax(120px,1fr) auto;align-items:center;gap:8px;width:min(420px,calc(100vw - 32px));padding:0;border:0;background:transparent;color:#475569;box-shadow:none;pointer-events:none}.transfer-bar-track{position:relative;height:2px;overflow:hidden;border-radius:999px;background:#94a3b847}.transfer-bar-track span{position:absolute;inset:0 auto 0 0;width:0;border-radius:inherit;background:linear-gradient(90deg,#2563eb,#14b8a6);transition:width .18s ease}.transfer-bar p{margin:0;max-width:min(180px,38vw);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:inherit;font-size:11px;font-weight:650}.transfer-bar.state-failed{color:#b91c1c}.transfer-bar.state-failed .transfer-bar-track span{background:#ef4444}.pricing-page{min-width:0;width:60%;margin:0 auto;display:grid;gap:14px}.pricing-hero{min-width:0;display:grid;grid-template-columns:1fr;gap:14px;align-items:stretch}.pricing-hero-copy,.license-card,.ltd-card,.pricing-panel{min-width:0;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:linear-gradient(180deg,#ffffff0f,#ffffff05),#080a0dbd;box-shadow:inset 0 1px #ffffff12,0 18px 38px #0000003d}.pricing-hero-copy{display:grid;gap:10px;padding:24px;align-content:center;background:linear-gradient(135deg,#14b8a62e,#60a5fa14 52%,#ffffff05),#080a0dc7}.pricing-eyebrow,.plan-badge{width:fit-content;display:inline-flex;align-items:center;gap:7px;color:#5eead4;font-size:11px;font-weight:900;text-transform:uppercase}.pricing-hero-copy h2{color:#fff;font-size:clamp(28px,4vw,52px);line-height:.98;font-weight:950}.pricing-hero-copy p{max-width:680px;color:#aeb5c0;font-size:15px;line-height:1.5;font-weight:700}.license-card{display:grid;gap:8px;padding:18px;align-content:center}.license-card.active{border-color:#2dd4bf70;background:linear-gradient(135deg,#14b8a62e,#ffffff09),#080a0dcc}.license-card span{color:#8d939d;font-size:11px;font-weight:900;text-transform:uppercase}.license-card strong{color:#fff;font-size:24px;font-weight:950}.license-card p{color:#8d939d;font-size:12px;line-height:1.45;font-weight:700}.pricing-grid{min-width:0;display:grid;grid-template-columns:1fr;gap:14px;align-items:stretch}.ltd-card,.pricing-panel{padding:16px}.ltd-card{display:grid;gap:16px;align-content:start;border-color:#14b8a642}.ltd-card.active{border-color:#2dd4bf94}.ltd-card-head{display:grid;gap:7px}.ltd-card-head strong{color:#fff;font-size:58px;line-height:.94;font-weight:950}.ltd-card-head p,.ltd-title span{color:#8d939d;font-size:12px;font-weight:800}.ltd-title{display:grid;gap:5px}.ltd-title h3{margin:0;color:#fff;font-size:19px;line-height:1.1;font-weight:950}.pricing-cta{width:100%;height:44px}.pricing-panel{display:grid;gap:12px;align-content:start}.feature-list{display:grid;gap:10px;margin:0;padding:0;list-style:none}.feature-list li{min-width:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start;padding:10px;border:1px solid rgba(255,255,255,.08);border-radius:8px;background:#ffffff0b}.feature-list svg{color:#5eead4;margin-top:2px}.feature-list span,.feature-list strong,.feature-list small{min-width:0;display:block}.feature-list strong{color:#fff;font-size:13px;font-weight:900}.feature-list small{margin-top:2px;color:#8d939d;font-size:12px;line-height:1.38;font-weight:700}.pricing-facts{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px 14px;margin:0;font-size:12px}.pricing-facts.compact{padding-top:2px}.pricing-facts dt{color:#8d939d;font-weight:900}.pricing-facts dd{margin:0;min-width:0;overflow-wrap:anywhere;color:#f7f7f4;font-weight:850}.doc-page{min-width:0;width:60%;margin:0 auto;display:grid;gap:14px}.doc-hero{min-width:0;display:grid;grid-template-columns:1fr;gap:14px;align-items:stretch}.doc-hero-copy,.doc-language-picker,.doc-card,.doc-sync,.doc-firewall,.doc-command-panel{min-width:0;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:linear-gradient(180deg,#ffffff0f,#ffffff05),#080a0dbd;box-shadow:inset 0 1px #ffffff12,0 18px 38px #0000003d}.doc-hero-copy{display:grid;gap:10px;padding:24px;align-content:center;background:linear-gradient(135deg,#14b8a62e,#60a5fa14 52%,#ffffff05),#080a0dc7}.doc-hero-copy h2{color:#fff;font-size:clamp(28px,4vw,52px);line-height:.98;font-weight:950}.doc-hero-copy p,.doc-card p,.doc-sync p,.doc-firewall p,.doc-command-head p{color:#aeb5c0;line-height:1.5;font-weight:700}.doc-hero-copy p{max-width:720px;font-size:15px}.doc-language-picker{display:grid;gap:10px;padding:18px;align-content:center}.doc-language-picker span{display:inline-flex;align-items:center;gap:8px;color:#8d939d;font-size:12px;font-weight:900;text-transform:uppercase}.doc-language-picker select{width:100%;min-width:0;height:42px;border:1px solid rgba(255,255,255,.13);border-radius:8px;background:#00000038;color:#f7f7f4;padding:0 12px;font-size:14px;font-weight:850;outline:0}.doc-grid{min-width:0;display:grid;grid-template-columns:1fr;gap:14px}.doc-card{display:grid;grid-template-columns:auto minmax(0,1fr);gap:13px;padding:16px}.doc-card-icon{width:38px;height:38px;display:grid;place-items:center;border-radius:8px;background:#14b8a61f;color:#5eead4}.doc-card h3,.doc-sync h3,.doc-firewall h3,.doc-command-panel h3{color:#fff;font-size:16px;line-height:1.2;font-weight:950}.doc-card p,.doc-sync p,.doc-firewall p,.doc-command-head p{margin-top:6px;font-size:13px}.doc-card ul,.doc-sync ul,.doc-firewall ul{display:grid;gap:7px;margin:12px 0 0;padding-left:18px;color:#8d939d;font-size:12px;line-height:1.45;font-weight:750}.doc-page[dir=rtl] .doc-card ul,.doc-page[dir=rtl] .doc-sync ul,.doc-page[dir=rtl] .doc-firewall ul{padding-left:0;padding-right:18px}.doc-firewall,.doc-sync,.doc-command-panel{display:grid;gap:14px;padding:16px}.doc-firewall{border-color:#f59e0b4d}.doc-sync{border-color:#60a5fa4d}.doc-firewall-head,.doc-sync-head,.doc-command-head{display:grid;grid-template-columns:auto minmax(0,1fr);gap:11px;align-items:start}.doc-firewall-head svg{color:#f59e0b;margin-top:1px}.doc-sync-head svg{color:#93c5fd;margin-top:1px}.doc-command-head svg{color:#5eead4;margin-top:1px}.doc-command-list{display:grid;gap:9px}.doc-command-row{min-width:0;display:grid;grid-template-columns:1fr;gap:10px;align-items:stretch;padding:10px;border:1px solid rgba(255,255,255,.08);border-radius:8px;background:#ffffff0b}.doc-command-row span{color:#8d939d;font-size:12px;font-weight:900}.doc-command-row code{min-width:0;overflow-x:auto;color:#5eead4;font-size:12px;font-weight:800;white-space:nowrap}.monitor-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:14px;align-items:start;min-width:0;transition:grid-template-columns .18s ease}.monitor-layout.dock-collapsed{grid-template-columns:minmax(0,1fr) 44px}.right-dock{position:sticky;top:18px;min-width:0;display:flex;flex-direction:column;gap:12px;transition:transform .18s ease,opacity .18s ease}.right-dock.collapsed{width:44px}.dock-toggle{width:36px;height:36px;margin-left:auto;display:grid;place-items:center;border:1px solid rgba(255,255,255,.13);border-radius:8px;background:#ffffff14;color:#c8d0db;transition:background .16s ease,border-color .16s ease,color .16s ease,transform .16s ease}.dock-toggle:hover{color:#fff;background:#ffffff21;border-color:#fff3;transform:translateY(-1px)}.right-dock.collapsed .dock-toggle{width:44px;height:76px;margin-left:0}.action-dock{min-width:0;display:grid;gap:12px}.action-context{min-width:0;display:grid;gap:4px;padding:13px 14px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:linear-gradient(135deg,#2dd4bf1f,#ffffff09 48%),#ffffff0e;box-shadow:inset 0 1px #ffffff12}.action-context span{color:#8d939d;font-size:11px;font-weight:900;text-transform:uppercase}.action-context strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:16px;font-weight:900}.action-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.action-tile{min-width:0;min-height:76px;display:grid;place-items:center;align-content:center;gap:8px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:#ffffff0f;color:#c8d0db;box-shadow:inset 0 1px #fff1;transition:background .16s ease,border-color .16s ease,color .16s ease,transform .16s ease}.action-tile:hover:not(:disabled){transform:translateY(-1px);color:#fff;background:#ffffff1a;border-color:#ffffff2e}.action-tile.primary{background:#2dd4bf24;border-color:#2dd4bf47;color:#a7f3d0}.action-tile.active{background:#60a5fa2e;border-color:#60a5fa7a;color:#bfdbfe}.action-tile span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:900}.command-deck{display:grid;grid-template-columns:minmax(320px,1fr) auto;gap:12px;align-items:center}.setup-card{min-width:0;display:grid;gap:10px;border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:12px;background:#fff1;box-shadow:inset 0 1px #ffffff12}.settings-card{min-width:0;display:grid;gap:9px;border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:12px;background:#fff1;box-shadow:inset 0 1px #ffffff12}.field-row{min-width:0;display:grid;gap:7px}.field-row span{color:#8d939d;font-size:12px;font-weight:900}.field-row input{width:100%;height:38px;border:1px solid rgba(255,255,255,.12);border-radius:8px;padding:0 10px;background:#00000038;color:#f7f7f4;outline:0;font-size:12px;font-weight:800}.field-row input:focus{border-color:#2dd4bfb3;box-shadow:0 0 0 2px #2dd4bf24}.hidden-file-input{display:none}.setup-head{min-width:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center}.setup-icon{width:36px;height:36px;display:grid;place-items:center;border-radius:8px;background:#2dd4bf24;color:#5eead4}.setup-head strong,.setup-head span{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.setup-head strong{color:#fff;font-size:14px;font-weight:900}.setup-head span{margin-top:2px;color:#8d939d;font-size:12px;font-weight:700}.setup-pin-row{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:9px 10px;background:#00000029}.setup-pin-row div{min-width:0}.setup-pin-row span,.setup-pin-row strong{display:block}.setup-pin-row span{color:#8d939d;font-size:10px;font-weight:950;letter-spacing:.04em;text-transform:uppercase}.setup-pin-row strong{margin-top:2px;color:#fff;font-family:Cascadia Code,SFMono-Regular,Consolas,monospace;font-size:18px;letter-spacing:.08em;line-height:1}.setup-disclosure{height:30px;display:inline-flex;align-items:center;justify-content:center;gap:7px;border:0;border-radius:8px;background:transparent;color:#8d939d;font-size:12px;font-weight:800}.setup-disclosure:hover{background:#ffffff14;color:#fff}.setup-code-row{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:8px;background:#0003}.setup-code-row code{min-width:0;overflow-wrap:anywhere;color:#9fe6d7;font-family:Cascadia Code,SFMono-Regular,Consolas,monospace;font-size:11px;line-height:1.45}.deck-actions{gap:8px;justify-content:flex-end}.right-dock .command-deck{grid-template-columns:1fr;gap:10px}.right-dock .deck-actions{display:grid;grid-template-columns:1fr;gap:8px}.right-dock .deck-actions .text-button{width:100%}.status-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.status-item{min-width:0;gap:9px;min-height:58px;padding:11px 12px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:#fff1;box-shadow:inset 0 1px #ffffff12}.status-item svg{color:#9ca3af}.status-item span{min-width:0;color:#8d939d;font-size:12px;font-weight:800}.status-item strong{margin-left:auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:13px;font-weight:900}.status-item.state-online svg,.dot.green{color:#34d399}.right-dock .status-strip{grid-template-columns:1fr;gap:8px}.right-dock .status-item{min-height:50px}.screen-wall-panel{position:relative;min-width:0;display:flex;flex-direction:column;gap:12px}.screen-wall-panel.drop-active:after{content:"";position:absolute;inset:-6px 12px 6px -6px;border:2px solid rgba(45,212,191,.58);border-radius:12px;pointer-events:none;box-shadow:0 0 0 4px #2dd4bf14}.control-focus{min-width:0;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;min-height:calc(100vh - 82px)}.control-focus-head{min-width:0;display:flex;align-items:center;justify-content:space-between;gap:12px}.control-focus-title{min-width:0;display:grid;gap:3px}.control-focus-title>span{color:#8d939d;font-size:11px;font-weight:900;text-transform:uppercase}.control-focus-title small{min-width:0;overflow:hidden;color:#64748b;font-size:12px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.control-focus-head strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:18px;font-weight:900}.control-monitor-tabs{min-width:0;max-width:min(58vw,760px);display:flex;justify-content:flex-end;gap:6px;overflow-x:auto;padding:4px}.control-monitor-tabs button{min-width:116px;height:42px;display:grid;align-content:center;gap:2px;border:1px solid rgba(148,163,184,.28);border-radius:8px;background:#ffffffb8;color:#1f2937;box-shadow:0 10px 22px #0f172a14,0 1px #ffffffe6 inset;cursor:pointer}.control-monitor-tabs button.active{border-color:#0f172ae0;background:#111827;color:#fff}.control-monitor-tabs span,.control-monitor-tabs small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.control-monitor-tabs span{font-size:12px;font-weight:850}.control-monitor-tabs small{color:currentColor;font-size:10px;font-weight:650;opacity:.68}.control-wall{--control-screen-height: calc(100vh - 128px) ;display:flex;align-items:center;justify-content:center;min-width:0;min-height:0;height:100%;padding:0}.control-wall .device-tile{width:min(100%,calc(var(--control-screen-height) * var(--screen-aspect, 1.77778)));max-width:100%}.segmented-control{min-width:0;display:inline-flex;gap:4px;padding:4px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:#ffffff0e}.segmented-control button{height:30px;min-width:62px;border:0;border-radius:6px;background:transparent;color:#8d939d;padding:0 10px;font-size:12px;font-weight:900}.segmented-control button:hover{color:#fff;background:#ffffff14}.segmented-control button.active{background:#f7f7f4;color:#0c0d0f}.screen-wall{display:grid;grid-template-columns:repeat(auto-fill,minmax(440px,1fr));gap:14px;align-items:start;min-width:0}.atlas-source-canvas{position:fixed;left:-10000px;top:0;width:1px;height:1px;opacity:0;pointer-events:none}.atlas-slot-wall .remote-canvas.has-frame{image-rendering:auto}.atlas-wall{position:relative;width:100%;max-height:calc(100vh - 96px);overflow:hidden;border:1px solid rgba(15,23,42,.14);border-radius:8px;background:#05070a;box-shadow:0 16px 36px #0f172a2e}.atlas-canvas,.atlas-hit-grid{position:absolute;inset:0;width:100%;height:100%}.atlas-canvas{display:block;object-fit:contain;background:#000}.atlas-hit-grid{display:grid}.atlas-hit-tile{position:relative;min-width:0;min-height:0;overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:0;background:transparent;color:#fff;cursor:pointer;outline:none;box-shadow:none}.atlas-hit-tile:hover{border-color:#ffffff9e;background:#ffffff06}.atlas-hit-tile.selected{z-index:2;border-color:#14b8a6;box-shadow:inset 0 0 0 2px #14b8a6db}.atlas-tile-label{position:absolute;left:8px;bottom:8px;display:grid;justify-items:start;gap:1px;max-width:calc(100% - 16px);padding:4px 7px;border-radius:5px;background:#030712bd;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);pointer-events:none}.atlas-tile-label strong,.atlas-tile-label small{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:0}.atlas-tile-label strong{font-size:11px;font-weight:750}.atlas-tile-label small{color:#5eead4;font-size:9px;font-weight:650}.atlas-monitor-cycle{position:absolute;top:7px;left:50%;display:flex;align-items:center;gap:3px;min-height:24px;padding:2px 4px;border-radius:12px;background:#ffffffe6;color:#111827;opacity:0;transform:translate(-50%);transition:opacity .12s ease}.atlas-hit-tile:hover .atlas-monitor-cycle,.atlas-hit-tile:focus-visible .atlas-monitor-cycle{opacity:1}.atlas-monitor-cycle>button{width:20px;height:20px;display:grid;place-items:center;padding:0;border:0;border-radius:50%;background:transparent;color:inherit}.atlas-monitor-cycle>button:hover{background:#0f172a1a}.atlas-monitor-cycle b{min-width:22px;font-size:9px;font-weight:800}.screen-wall .device-tile{align-self:start}.screen-wall.size-large{grid-template-columns:repeat(auto-fill,minmax(400px,1fr));gap:12px}.screen-wall.size-medium{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}.screen-wall.size-small{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.device-tile{position:relative;min-width:0;overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:#ffffff0f;box-shadow:inset 0 1px #ffffff12,0 18px 38px #0000003d}.device-tile.selected{border-color:#2dd4bfc7;box-shadow:inset 0 1px #ffffff1a,0 0 0 2px #2dd4bf2e,0 18px 44px #00000061}.device-tile.selected:before{display:none}.device-tile.selected:after{content:none;display:none}.tile-screen{position:relative;width:100%;aspect-ratio:16 / 9;display:block;border:0;padding:1px;overflow:hidden;background:linear-gradient(135deg,#ffffff14,#fff0 44%),#111317;line-height:0}.tile-screen.has-frame{background:#000}.screen-content{position:absolute;inset:1px;z-index:1;display:block;overflow:hidden;border-radius:6px;background:#000}.screen-wall .screen-content{inset:50% auto auto 50%;width:var(--screen-content-width, 100%);height:var(--screen-content-height, 100%);transform:translate(-50%,-50%)}.screen-content.is-empty{opacity:0;pointer-events:none}.control-wall .tile-screen{aspect-ratio:var(--screen-aspect, 16 / 9)}.control-wall .screen-content{inset:1px;width:auto;height:auto;transform:none}.tile-screen:after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;border:1px solid rgba(255,255,255,.08);box-shadow:inset 0 0 40px #00000080}.device-tile.selected .tile-screen:before{content:none;display:none}.tile-health-pill{position:absolute;top:10px;left:10px;z-index:3;display:inline-flex;align-items:center;min-height:24px;padding:0 9px;border:1px solid rgba(255,255,255,.12);border-radius:999px;background:#080a0da8;color:#f7f7f4;font-size:11px;line-height:1;font-weight:950;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:none}.tile-health-pill.state-online,.machine-health.state-online{color:#6ee7b7}.tile-health-pill.state-busy,.machine-health.state-busy{color:#93c5fd}.tile-health-pill.state-warn,.machine-health.state-warn{color:#fbbf24}.tile-health-pill.state-critical,.machine-health.state-critical{color:#fb7185}.tile-health-pill.state-stale,.machine-health.state-stale,.tile-health-pill.state-offline,.machine-health.state-offline{color:#cbd5e1}.tile-workload{position:absolute;left:10px;right:10px;bottom:10px;z-index:3;min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px 9px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:#080a0d9e;color:#f7f7f4;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:none}.tile-workload span,.tile-workload strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tile-workload span{color:#cbd5e1;font-size:11px;font-weight:800}.tile-workload strong{justify-self:end;max-width:45%;color:#fff;font-size:11px;font-weight:950}.remote-canvas{position:relative;z-index:1;width:100%;height:100%;display:block;object-fit:contain;object-position:center;background:#000;border-radius:6px;outline:0}.remote-canvas.is-empty{opacity:0}.monitor-cycle{position:absolute;inset:0;z-index:6;opacity:0;pointer-events:none;transition:opacity .14s ease}.tile-screen:hover .monitor-cycle,.tile-screen:focus-within .monitor-cycle{opacity:1}.monitor-cycle-button{position:absolute;top:50%;width:32px;height:32px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.2);border-radius:50%;background:#080a0db8;color:#fff;box-shadow:0 8px 18px #00000042;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);cursor:pointer;pointer-events:auto;transform:translateY(-50%)}.monitor-cycle-button svg{width:16px;height:16px;stroke-width:2.5}.monitor-cycle-button:hover{background:#080a0de0}.monitor-cycle-button.previous{left:10px}.monitor-cycle-button.next{right:10px}.monitor-cycle-count{position:absolute;top:10px;left:50%;min-height:24px;display:inline-flex;align-items:center;padding:0 10px;border:1px solid rgba(255,255,255,.16);border-radius:999px;background:#080a0dad;color:#fff;font-size:11px;line-height:1;font-weight:900;white-space:nowrap;box-shadow:0 10px 22px #00000038;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:none;transform:translate(-50%)}.slot-grid{position:absolute;inset:1px;border-radius:6px;background-image:linear-gradient(rgba(255,255,255,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.055) 1px,transparent 1px);background-size:34px 34px;-webkit-mask-image:linear-gradient(180deg,#000000d9,#00000040);mask-image:linear-gradient(180deg,#000000d9,#00000040)}.empty-screen{position:absolute;inset:1px;display:grid;place-items:center;align-content:center;gap:6px;color:#7c828d;text-align:center;z-index:1}.empty-screen strong{color:#f7f7f4;font-size:13px;font-weight:900}.tile-meta{min-height:54px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding:10px 11px}.tile-metrics{position:absolute;left:10px;right:10px;bottom:10px;z-index:3;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;line-height:1;pointer-events:none}.tile-metric{position:relative;min-width:0;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px;align-items:center;min-height:25px;padding:4px 7px;border:1px solid rgba(255,255,255,.08);border-radius:7px;background:#080a0d9e;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.tile-metric b,.tile-metric em{position:relative;z-index:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal}.tile-metric b{color:#8d939d;font-size:10px;line-height:1;font-weight:950}.tile-metric em{color:#f7f7f4;font-size:11px;line-height:1;font-weight:950}.tile-metric i{position:absolute;left:0;bottom:0;height:2px;max-width:100%;border-radius:999px;background:#34d399}.tile-metric.state-warn i{background:#f59e0b}.tile-metric.state-critical i{background:#f43f5e}.tile-metric.state-unknown i{display:none}.screen-wall.size-small .tile-meta{min-height:40px;padding:7px 8px}.screen-wall.size-small .tile-meta strong{font-size:11px}.screen-wall.size-small .tile-meta span{font-size:10px}.screen-wall.size-small .empty-screen strong{font-size:11px}.screen-wall.size-small .tile-workload{display:none}.screen-wall.size-small .tile-health-pill{top:6px;left:6px;min-height:19px;padding:0 6px;font-size:9px}.screen-wall.size-small .tile-metrics{left:6px;right:6px;bottom:6px;gap:4px}.screen-wall.size-small .tile-metric{min-height:20px;padding:3px 4px;grid-template-columns:1fr;gap:1px}.screen-wall.size-small .tile-metric b,.screen-wall.size-small .tile-metric em{text-align:center;font-size:8px}.side-panel{min-width:0;padding:12px 14px;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:linear-gradient(180deg,#ffffff0b,#ffffff04),#060709b8;box-shadow:inset 0 1px #fff1}.side-panel.selected-panel,.side-panel.account-panel{display:flex;flex-direction:column}.side-panel.selected-panel .text-button{width:100%;align-self:stretch}.machine-detail-head{display:flex;justify-content:space-between;gap:10px;align-items:center}.machine-detail-head .panel-title{margin-bottom:0}.machine-health{display:inline-flex;align-items:center;min-height:26px;padding:0 10px;border:1px solid rgba(255,255,255,.1);border-radius:999px;background:#ffffff0f;color:#f7f7f4;font-size:11px;font-weight:950}.machine-title{display:grid;gap:3px;margin:7px 0 11px}.machine-title strong,.machine-title span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.machine-title strong{color:#fff;font-size:18px;font-weight:950}.machine-title span{color:#8d939d;font-size:12px;font-weight:850}.machine-metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:12px}.machine-metric{min-width:0;display:grid;gap:5px;padding:10px;border:1px solid rgba(255,255,255,.09);border-radius:8px;background:#ffffff0b}.machine-metric span,.machine-metric strong,.machine-metric small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.machine-metric span{color:#8d939d;font-size:10px;font-weight:950}.machine-metric strong{color:#fff;font-size:19px;font-weight:950}.machine-metric small{color:#8d939d;font-size:11px;font-weight:750}.machine-metric i{position:relative;height:3px;overflow:hidden;border-radius:999px;background:#94a3b82e}.machine-metric i b{position:absolute;inset:0 auto 0 0;display:block;max-width:100%;border-radius:inherit;background:#34d399}.machine-metric.state-warn i b{background:#f59e0b}.machine-metric.state-critical i b{background:#f43f5e}.machine-section{display:grid;gap:8px;padding-top:10px;margin-top:10px;border-top:1px solid rgba(255,255,255,.08)}.machine-section-title{display:flex;gap:7px;align-items:center;color:#8d939d;font-size:11px;font-weight:950;text-transform:uppercase}.tool-probe-list{display:grid;gap:7px}.tool-probe{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;min-height:30px;padding:7px 9px;border:1px solid rgba(255,255,255,.08);border-radius:7px;background:#ffffff0a}.tool-probe b,.tool-probe em{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-probe b{color:#f7f7f4;font-size:12px;font-weight:900}.tool-probe em{color:#8d939d;font-size:11px;font-style:normal;font-weight:800}.tool-probe.state-online em,.tool-probe.state-busy em{color:#6ee7b7}.tool-probe.state-offline em{color:#cbd5e1}.workload-card{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 8px;padding:9px;border:1px solid rgba(255,255,255,.08);border-radius:7px;background:#ffffff0a}.workload-card strong,.workload-card span,.workload-card p{min-width:0;overflow:hidden;text-overflow:ellipsis}.workload-card strong{white-space:nowrap;color:#f7f7f4;font-size:12px;font-weight:950}.workload-card span{justify-self:end;color:#8d939d;font-size:11px;font-weight:950}.workload-card p{grid-column:1 / -1;color:#8d939d;font-size:11px;line-height:1.35;font-weight:750}.facts.compact{margin-bottom:0;gap:5px 10px}.panel-warning{margin-top:10px;color:#fb7185;font-size:12px;font-weight:800}.tile-meta strong,.tile-meta span{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tile-meta strong{color:#fff;font-size:13px;font-weight:900}.tile-meta span{color:#8d939d;font-size:12px;font-weight:700}.placeholder-tile{border-style:dashed;background:#ffffff0a}.dot{width:9px;height:9px;border-radius:50%;background:#69707b;box-shadow:0 0 0 4px #69707b1f}.dot.green{background:#34d399;box-shadow:0 0 0 4px #34d39924}.dot.gray{background:#69707b}.operator-console{display:grid;grid-template-columns:minmax(220px,.82fr) minmax(360px,1.35fr) minmax(280px,.92fr);gap:0;align-items:stretch;overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:8px;background:linear-gradient(180deg,#ffffff0b,#ffffff04),#060709b8;box-shadow:inset 0 1px #fff1,0 16px 34px #0003}.console-panel{min-width:0;min-height:118px;padding:12px 14px;border-right:1px solid rgba(255,255,255,.09);background:transparent}.console-panel:last-child{border-right:0}.panel-title{gap:7px;margin-bottom:9px;color:#8d939d}.panel-title h2{color:#c6cad2;font-size:11px;font-weight:900;text-transform:uppercase}.selected-panel,.account-panel{display:flex;flex-direction:column}.selected-panel .text-button{margin-top:auto;width:auto;min-width:142px;align-self:flex-start}.facts{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 12px;margin:0 0 10px;font-size:12px}.facts dt{color:#8d939d;font-weight:800}.facts dd{margin:0;min-width:0;overflow-wrap:anywhere;color:#f7f7f4;font-weight:800}.task-panel{display:grid;grid-template-columns:minmax(0,1fr) 160px;grid-template-rows:auto minmax(58px,1fr);gap:9px 10px;align-items:stretch}.task-panel .panel-title{grid-column:1 / -1;margin-bottom:0}.task-panel .text-button{height:auto;min-height:58px;align-self:stretch}.side-panel.task-panel{grid-template-columns:1fr;grid-template-rows:auto minmax(74px,1fr) auto}.side-panel.task-panel .text-button{grid-column:1;min-height:42px}.plan-summary{display:grid;gap:4px;margin-bottom:0}.plan-summary strong{color:#fff;font-size:14px;font-weight:900}.plan-summary span{color:#5eead4;font-weight:900;font-size:13px}.plan-summary p{color:#8d939d;font-size:12px;line-height:1.45;font-weight:700}textarea{width:100%;resize:none;min-height:58px;border:1px solid rgba(255,255,255,.12);border-radius:8px;padding:9px 10px;background:#00000038;color:#f7f7f4;margin-bottom:0;outline:0}textarea:focus{border-color:#2dd4bfb3;box-shadow:0 0 0 2px #2dd4bf24}textarea::placeholder{color:#6f7681}.muted{color:#8d939d;font-size:12px;font-weight:700}@media(max-width:1180px){.topbar{grid-template-columns:1fr auto}.pricing-hero,.pricing-grid,.doc-hero,.doc-grid{grid-template-columns:1fr}.pricing-page,.doc-page{width:100%}.monitor-layout,.operator-console{grid-template-columns:1fr}.operator-console{grid-template-columns:repeat(2,minmax(0,1fr))}.console-panel{border-right:1px solid rgba(255,255,255,.09);border-bottom:1px solid rgba(255,255,255,.09)}.console-panel:nth-child(2n){border-right:0}.console-panel:nth-child(n+3){border-bottom:0}.right-dock{position:static;display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,300px);align-items:start}.right-dock.actions-mode{grid-template-columns:1fr}.right-dock .action-dock{grid-column:1 / -1}.right-dock .notice-band,.right-dock .command-deck{grid-column:1}.right-dock .status-strip{grid-column:2;grid-row:1 / span 2}.deck-actions{justify-content:flex-start;flex-wrap:wrap}}@media(max-width:760px){.app-shell{grid-template-columns:1fr}.tool-rail{position:sticky;top:0;height:auto;min-height:auto;max-height:none;grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto;align-items:center;gap:10px;padding:8px;border-right:0;border-bottom:1px solid rgba(255,255,255,.08)}.rail-tools,.rail-footer{flex-direction:row;overflow-x:auto;justify-content:flex-start}.rail-tool,.rail-account{width:54px;min-height:48px;flex:0 0 auto}.rail-account img,.avatar-fallback{width:26px;height:26px}.account-popover{inset:74px 8px auto auto;width:min(320px,calc(100vw - 16px))}.desk-stage{padding:14px 12px 18px}.pricing-hero-copy,.license-card,.ltd-card,.pricing-panel,.doc-hero-copy,.doc-language-picker,.doc-card,.doc-firewall,.doc-command-panel{padding:14px}.ltd-card-head strong{font-size:46px}.topbar{grid-template-columns:minmax(0,1fr) auto}.status-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.right-dock{display:flex}.action-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.operator-console{grid-template-columns:1fr}.console-panel,.console-panel:nth-child(2n),.console-panel:nth-child(n+3){border-right:0;border-bottom:1px solid rgba(255,255,255,.09)}.console-panel:last-child{border-bottom:0}.task-panel{grid-template-columns:1fr}.task-panel .text-button{grid-column:1;grid-row:auto;min-width:0}.right-dock .status-strip{grid-template-columns:1fr}.free-ad-banner{grid-template-columns:1fr;gap:6px;min-height:64px;padding:10px 12px}.free-ad-banner .ad-label{writing-mode:horizontal-tb;transform:none}.command-deck{gap:10px}}@media(max-width:480px){.topbar{gap:10px}.topbar .segmented-control button{min-width:54px;padding:0 8px}.status-strip{grid-template-columns:1fr}.deck-actions .text-button,.top-actions .text-button{flex:1 1 auto}.action-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.action-tile{min-height:68px}.facts,.doc-card,.doc-sync-head,.doc-firewall-head,.doc-command-head,.doc-command-row{grid-template-columns:1fr}.doc-command-row .icon-button{width:100%}}:root{color-scheme:light;background:#f3f6fb;color:#172033}body{background:radial-gradient(circle at 18% 0%,#cbd5e138,#cbd5e100 28%),linear-gradient(180deg,#f8fafc,#eef3f9 46%,#e9eef6)}.app-shell{color:#172033}.tool-rail{background:#ffffffdb;border-right-color:#94a3b847;box-shadow:10px 0 28px #0f172a14}.rail-brand{background:#111827;color:#fff;box-shadow:0 14px 28px #0f172a2e}.rail-tool{color:#667085}.rail-tool:hover,.rail-tool.active{color:#111827;background:#fff;border-color:#94a3b852;box-shadow:0 10px 22px #0f172a1a}.rail-account{background:#fff;color:#111827;border-color:#94a3b857;box-shadow:0 12px 24px #0f172a1a}.rail-account.signed-in{background:#ecfdf5;border-color:#14b8a652}.account-popover{background:#fffffffa;color:#111827;border-color:#94a3b847;box-shadow:0 22px 46px #0f172a2e}.account-popover-head p,.account-popover-facts dt{color:#667085}.account-popover-facts{border-top-color:#94a3b833;border-bottom-color:#94a3b833}.account-popover-facts dd{color:#111827}.account-popover-action{background:#111827;color:#fff;border-color:#0f172a29;box-shadow:0 14px 28px #0f172a29}.account-popover-action.primary{background:#111827;color:#fff}.desk-stage{--dock-width: 360px;--dock-gutter: 0px;--dock-tab-size: 54px;--dock-tab-half: 27px}h1,.action-context strong,.control-focus-head strong,.setup-head strong,.tile-meta strong,.empty-screen strong,.panel-title h2,.facts dd,.pricing-hero-copy h2,.doc-hero-copy h2,.doc-card h3,.doc-sync h3,.doc-firewall h3,.doc-command-panel h3,.license-card strong,.ltd-card-head strong,.ltd-title h3,.feature-list strong,.pricing-facts dd,.plan-summary strong,.status-item strong{color:#111827}.brand p,.action-context span,.control-focus-title>span,.setup-head span,.field-row span,.setup-disclosure,.tile-meta span,.panel-title,.facts dt,.muted,.license-card span,.license-card p,.ltd-card-head p,.ltd-title span,.feature-list small,.pricing-facts dt,.doc-hero-copy p,.doc-card p,.doc-sync p,.doc-firewall p,.doc-command-head p,.doc-language-picker span,.doc-card ul,.doc-sync ul,.doc-firewall ul,.doc-command-row span,.plan-summary p,.status-item span{color:#667085}.brand-mark,.avatar-fallback{background:linear-gradient(145deg,#10b981,#3b82f6);color:#fff;box-shadow:0 14px 30px #2563eb33}.icon-button,.text-button,.dock-toggle{background:#fff;border-color:#94a3b857;color:#1f2937;box-shadow:0 9px 22px #0f172a1a,0 1px #ffffffe6 inset}.icon-button:hover,.text-button:hover,.dock-toggle:hover{background:#fff;border-color:#47556952;box-shadow:0 14px 30px #0f172a24,0 1px #ffffffeb inset}.text-button.primary,.segmented-control button.active{background:#111827;border-color:#111827;color:#fff}.text-button.buy{background:#10b981;border-color:#10b981;color:#fff;box-shadow:0 14px 28px #10b9813d}.notice-band{background:#fff7ed;border-color:#f59e0b61;color:#9a3412;box-shadow:0 12px 24px #f59e0b1c}.monitor-layout{position:relative;grid-template-columns:minmax(0,1fr) var(--dock-width);gap:0}.screen-wall-panel{position:relative;padding-right:18px}.free-ad-banner{position:sticky;bottom:14px;z-index:40;width:min(760px,calc(100% - 32px));min-height:74px;margin:18px auto 0;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:14px;padding:10px 14px;border:1px solid rgba(148,163,184,.28);border-radius:8px;background:#ffffffeb;color:#111827;box-shadow:0 18px 40px #0f172a24,0 1px #ffffffe6 inset;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.free-ad-banner .ad-label{align-self:start;color:#98a2b3;font-size:10px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;writing-mode:vertical-rl;transform:rotate(180deg)}.livedesk-ad-unit{min-width:0;width:100%;min-height:54px}.house-ad-copy{min-width:0;display:grid;gap:4px}.house-ad-copy strong{color:#111827;font-size:13px;font-weight:900}.house-ad-copy span{color:#475467;font-size:12px;line-height:1.35;font-weight:760}.free-ad-banner.adsense-ready{min-height:90px}.monitor-layout.dock-collapsed{grid-template-columns:minmax(0,1fr) 0;gap:0}.monitor-layout.dock-collapsed .screen-wall-panel{padding-right:0}.right-dock{position:fixed;top:0;right:0;bottom:0;width:var(--dock-width);min-width:0;overflow:visible;overflow-y:auto;z-index:900;height:100vh;min-height:100vh;padding:18px 12px 18px 24px;border-left:1px solid rgba(203,213,225,.72);border-radius:0;background:linear-gradient(180deg,#fffffffa,#f9fafbf2),#fff;box-shadow:-12px 0 22px #0f172a21,-3px 0 8px #0f172a14,1px 0 #fffffff2 inset;isolation:isolate}.right-dock.collapsed{width:0;min-width:0;height:0;min-height:0;bottom:auto;padding:0;border-left-width:0;border-left-color:transparent;border-radius:0;background:transparent;box-shadow:none;pointer-events:none}.dock-toggle{position:fixed;top:50vh;right:var(--dock-width);z-index:1000;pointer-events:auto;width:var(--dock-tab-half);height:var(--dock-tab-size);margin:0;border-radius:999px 0 0 999px;color:#475467;transform:translateY(-50%);overflow:hidden;background:#fff;border-color:#cbd5e1eb;border-right-color:#fff0;box-shadow:-8px 0 16px #0f172a29,-2px 0 5px #0f172a1a,0 1px #fffffffa inset}.dock-toggle:after{display:none}.dock-toggle svg{position:relative;z-index:2;transform:translate(1px)}.dock-toggle:hover{color:#475467;background:#fff;border-color:#cbd5e1eb;box-shadow:-8px 0 16px #0f172a29,-2px 0 5px #0f172a1a,0 1px #fffffffa inset;transform:translateY(-50%) scale(1.03)}.dock-toggle:focus-visible{outline:0;color:#475467;box-shadow:-8px 0 16px #0f172a29,-2px 0 5px #0f172a1a,0 0 0 3px #4755692e}.right-dock.collapsed .dock-toggle{right:0;width:var(--dock-tab-half);height:var(--dock-tab-size);pointer-events:auto;border-radius:999px 0 0 999px;box-shadow:-8px 0 18px #0f172a2e,-2px 0 6px #0f172a1a,0 1px #fffffff5 inset}.right-dock.collapsed .dock-toggle:hover{box-shadow:-8px 0 18px #0f172a2e,-2px 0 6px #0f172a1a,0 1px #fffffff5 inset}.right-dock.collapsed .dock-toggle:focus-visible{box-shadow:-8px 0 18px #0f172a2e,-2px 0 6px #0f172a1a,0 0 0 3px #4755692e}.action-context,.setup-card,.settings-card,.status-item,.side-panel,.pricing-hero-copy,.license-card,.ltd-card,.pricing-panel,.doc-hero-copy,.doc-language-picker,.doc-card,.doc-sync,.doc-firewall,.doc-command-panel{background:linear-gradient(180deg,#fffffff5,#f9fafbeb),#fff;border-color:#94a3b847;box-shadow:0 18px 38px #0f172a1c,0 2px 6px #0f172a0f,0 1px #fffffffa inset}.segmented-control{background:#ffffffdb;border-color:#94a3b852;box-shadow:0 12px 26px #0f172a1a,0 1px #ffffffe6 inset}.segmented-control button{color:#667085}.segmented-control button:hover{color:#111827;background:#0f172a0d}.doc-language-picker select{background:#f8fafc;border-color:#94a3b852;color:#111827}.doc-card-icon{background:#ecfdf5;color:#10b981}.doc-firewall{border-color:#f59e0b57}.doc-firewall-head svg{color:#d97706}.doc-command-head svg,.doc-command-row code{color:#047857}.doc-command-row{background:#f8fafc;border-color:#94a3b83d}.device-tile{background:#fff;border-color:#94a3b83d;box-shadow:0 20px 42px #0f172a24,0 3px 9px #0f172a0f,0 1px #fffffff5 inset}.device-tile.selected{border-color:#14b8a6b8;box-shadow:0 0 0 3px #14b8a624,0 24px 48px #0f172a2e,0 3px 9px #0f172a14}.device-tile.selected:before{border-color:#0d9488eb;box-shadow:0 0 0 2px #ffffffdb,0 0 18px #0d948833}.tile-screen{background:linear-gradient(rgba(17,24,39,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(17,24,39,.045) 1px,transparent 1px),linear-gradient(180deg,#fff,#f8fafc);background-size:34px 34px,34px 34px,auto}.tile-screen.has-frame{background:#000;background-size:auto}.tile-screen:after{border-color:#94a3b847;box-shadow:inset 0 0 0 1px #ffffffa3,inset 0 -24px 40px #0f172a09}.monitor-cycle-button{border-color:#94a3b85c;background:#ffffffe6;color:#111827;box-shadow:0 8px 18px #0f172a29,0 1px #ffffffe6 inset}.monitor-cycle-button:hover{background:#fff}.monitor-cycle-count{border-color:#94a3b847;background:#ffffffe0;color:#111827;box-shadow:0 10px 24px #0f172a1f,0 1px #ffffffe6 inset}.slot-grid{background-image:linear-gradient(rgba(17,24,39,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(17,24,39,.045) 1px,transparent 1px)}.placeholder-tile{border-style:solid;background:#fff}.empty-screen{color:#98a2b3}.dot.gray{background:#cbd5e1}.dot.green{background:#10b981;box-shadow:0 0 0 4px #10b98124}.machine-metric,.tool-probe,.workload-card{background:#f8fafc;border-color:#94a3b83d}.tile-metric{background:#ffffffd1;border-color:#94a3b857;box-shadow:0 8px 18px #0f172a1f}.tile-metric b,.machine-metric span,.machine-metric small,.machine-section-title,.tool-probe em,.workload-card span,.workload-card p,.machine-title span{color:#667085}.tile-metric em,.machine-metric strong,.machine-title strong,.tool-probe b,.workload-card strong{color:#111827}.machine-health{background:#fff;border-color:#94a3b847;color:#111827}.machine-section{border-top-color:#94a3b838}.machine-metric i{background:#94a3b838}.setup-icon{background:#ecfdf5;color:#10b981}.field-row input,.setup-code-row,textarea{background:#f8fafc;border-color:#94a3b852;color:#111827}.setup-code-row code{color:#047857}.field-row input:focus,textarea:focus{border-color:#10b981b8;box-shadow:0 0 0 3px #10b98121}textarea::placeholder{color:#98a2b3}.feature-list li{background:#f8fafc;border-color:#94a3b83d}.feature-list svg,.pricing-eyebrow,.plan-badge,.plan-summary span{color:#10b981}.action-tile{background:#fff;border-color:#94a3b847;color:#475467;box-shadow:0 14px 28px #0f172a1a,0 1px #fffffff5 inset}.action-tile:hover:not(:disabled){color:#111827;background:#fff;border-color:#4755694d;box-shadow:0 18px 34px #0f172a24,0 1px #fffffff5 inset}.action-tile.primary{background:#ecfdf5;border-color:#10b98147;color:#047857}.action-tile.active{background:#eff6ff;border-color:#3b82f65c;color:#1d4ed8}.transfer-bar{color:#475569}.transfer-bar-track{background:#94a3b83d}.transfer-bar.state-failed{color:#991b1b}.pricing-page{width:min(620px,calc(100vw - 130px));min-height:calc(100vh - 112px);place-items:center}.pricing-offer{position:relative;width:100%;min-width:0;display:grid;gap:16px;padding:26px;overflow:hidden;border:1px solid rgba(148,163,184,.28);border-radius:10px;background:radial-gradient(circle at 58% 9%,#ffffff1a,#fff0 16%),linear-gradient(180deg,#1f2937fa,#111827fa 45%,#030712fc);color:#f8fafc;box-shadow:0 30px 70px #0f172a38,0 0 0 1px #ffffff0a inset,0 22px 48px #0f172a38}.pricing-close{position:absolute;top:18px;right:18px;z-index:2;display:grid;place-items:center;width:34px;height:34px;border:1px solid rgba(255,255,255,.18);border-radius:8px;background:#ffffff14;color:#ffffffdb;box-shadow:none}.pricing-close:hover{background:#ffffff24;color:#fff}.pricing-offer-head{display:grid;gap:10px;padding-right:42px}.pricing-offer .pricing-eyebrow{color:#d1d5db;letter-spacing:.08em}.deal-price-line{min-width:0;display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center}.deal-price-line strong,.deal-original{color:#fff;font-size:clamp(42px,8vw,64px);line-height:.9;font-weight:950}.deal-original{opacity:.9;text-decoration:line-through;text-decoration-thickness:3px;text-decoration-color:#d1d5dbb8}.deal-arrow{color:#ffffffdb;font-size:clamp(30px,5vw,44px);line-height:1;font-weight:900}.deal-badge{display:inline-flex;align-items:center;gap:7px;padding:8px 12px;border-radius:8px;background:#e5e7eb;color:#111827;font-size:12px;font-weight:950;box-shadow:0 14px 28px #0f172a38}.pricing-offer-head p{max-width:520px;margin:0;color:#e5e7ebb8;font-size:15px;line-height:1.5;font-weight:750}.deal-table,.deal-module,.deal-open-price{border:1px solid rgba(255,255,255,.14);border-radius:10px;background:#02061747;box-shadow:0 1px #ffffff14 inset}.deal-table{overflow:hidden}.deal-row{display:grid;grid-template-columns:minmax(130px,1fr) minmax(160px,1.3fr) minmax(76px,auto);gap:12px;align-items:center;padding:12px 16px;border-top:1px solid rgba(255,255,255,.09);color:#f3f4f6e0;font-size:13px;font-weight:800}.deal-row:first-child{border-top:0}.deal-row-head{padding-block:10px;background:#ffffff14;color:#d1d5db94;font-size:11px;text-transform:uppercase;letter-spacing:.04em}.deal-row-highlight{background:linear-gradient(90deg,#4b55638f,#11182729)}.deal-row strong{color:#fff;font-size:14px;font-weight:950}.deal-row s{color:#ffffff7a;font-weight:950}.deal-row>:last-child{justify-self:end;color:#f9fafb}.deal-card-grid{display:grid;grid-template-columns:1fr;gap:10px}.deal-plan-card{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 14px;align-items:center;padding:14px;border:1px solid rgba(255,255,255,.12);border-radius:10px;background:#02061738;box-shadow:0 1px #ffffff14 inset}.deal-plan-card.featured{border-color:#d1d5db57;background:linear-gradient(90deg,#4b556375,#11182738),#02061742}.deal-plan-card span{grid-column:1 / -1;color:#d1d5db9e;font-size:11px;font-weight:950;text-transform:uppercase;letter-spacing:.04em}.deal-plan-card h3{margin:0;color:#fff;font-size:22px;line-height:1;font-weight:950}.deal-plan-card strong{justify-self:end;color:#fff;font-size:18px;line-height:1;font-weight:950}.deal-plan-card p{grid-column:1 / -1;margin:0;color:#e5e7ebb8;font-size:12px;line-height:1.45;font-weight:800}.deal-plan-card ul{grid-column:1 / -1;display:grid;gap:4px;margin:2px 0 0;padding:0;list-style:none;color:#f3f4f6d6;font-size:12px;font-weight:850}.deal-plan-card li:before{content:"";display:inline-block;width:5px;height:5px;margin-right:8px;border-radius:999px;background:#d1d5db;vertical-align:2px}.deal-card-button{grid-column:1 / -1;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;border:0;border-radius:8px;background:#f9fafb;color:#111827;font-size:13px;font-weight:950;box-shadow:0 14px 28px #0f172a38,0 1px #ffffffbf inset}.deal-card-button:disabled{cursor:not-allowed;opacity:.58}.deal-module{display:grid;gap:12px;padding:14px}.deal-module-title{display:flex;justify-content:space-between;gap:12px;align-items:center}.deal-module-title strong{color:#fff;font-size:13px;font-weight:950;text-transform:uppercase;letter-spacing:.04em}.deal-module-title span{color:#d1d5db;font-size:12px;font-weight:900}.deal-feature-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.deal-feature-list li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:9px;align-items:center;color:#f3f4f6e0;font-size:13px;font-weight:850}.deal-feature-list svg{color:#d1d5db}.deal-feature-list b{padding:4px 8px;border:1px solid rgba(209,213,219,.28);border-radius:999px;color:#e5e7eb;font-size:11px}.deal-open-price{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px 16px;align-items:center;padding:16px;border-color:#94a3b83d;background:#1118277a}.deal-open-price>span{color:#d1d5dba8;font-size:12px;font-weight:950;text-transform:uppercase}.deal-open-price strong{justify-self:end;color:#fff;font-size:24px;line-height:1;font-weight:950}.deal-open-price small{grid-column:1 / -1;color:#d1d5db9e;font-size:12px;line-height:1.45;font-weight:800}.deal-note{display:inline-flex;justify-content:center;gap:8px;align-items:center;margin:2px 0 0;color:#d1d5dbb8;font-size:12px;line-height:1.4;font-weight:850;text-align:center}.deal-note svg{color:#d1d5db;flex:0 0 auto}.deal-cta{display:inline-flex;justify-content:center;align-items:center;gap:9px;width:100%;min-height:58px;border:0;border-radius:10px;background:linear-gradient(90deg,#111827,#374151);color:#fff;font-size:16px;font-weight:950;box-shadow:0 18px 40px #0f172a52,0 1px #ffffff57 inset}.deal-cta:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 24px 48px #0f172a61,0 1px #fff6 inset}.deal-cta:disabled{cursor:not-allowed;opacity:.68}.deal-later{justify-self:center;border:0;background:transparent;color:#d1d5db8f;font-size:13px;font-weight:900}.deal-later:hover{color:#fff}@media(max-width:1180px){.dock-toggle{right:var(--dock-width);top:50vh;bottom:auto}.right-dock.collapsed .dock-toggle{right:0;top:50vh;bottom:auto}.monitor-layout.dock-collapsed{grid-template-columns:1fr}}@media(max-width:760px){.pricing-page{width:min(100%,calc(100vw - 84px));min-height:auto;align-items:start}.pricing-offer{padding:20px;gap:13px}.deal-price-line strong,.deal-original{font-size:42px}.deal-badge{width:fit-content}.deal-row{grid-template-columns:1fr auto;gap:7px 10px}.deal-row span:nth-child(2){grid-column:1 / -1;order:3}.deal-open-price{grid-template-columns:1fr}.deal-open-price strong{justify-self:start}.transfer-bar{left:50%;right:auto;width:min(320px,calc(100vw - 32px));grid-template-columns:minmax(100px,1fr) auto;gap:6px}.transfer-bar p{max-width:120px}.desk-stage{--dock-width: min(360px, calc(100vw - 24px) )}.desk-stage.dock-open .topbar{padding-right:0}.monitor-layout:not(.dock-collapsed){grid-template-columns:1fr}}.desk-stage.control-stage{height:100vh;min-height:100vh;overflow:hidden;gap:0;padding:0}.desk-stage.control-stage .topbar{display:none}.desk-stage.control-stage .monitor-layout{height:100vh;min-height:0;align-items:stretch;overflow:hidden}.desk-stage.control-stage .screen-wall-panel{height:100vh;min-height:0;overflow:hidden;padding:0}.desk-stage.control-stage .control-focus{min-height:0;height:100vh;display:block}.desk-stage.control-stage .control-wall{--control-screen-height: calc(100vh - 8px) ;position:relative;width:100%;height:100vh;min-height:0;box-sizing:border-box;display:flex;align-items:center;justify-content:center;overflow:hidden;padding:4px 8px}.desk-stage.control-stage .control-wall .device-tile{flex:0 1 auto;align-self:center;width:min(100%,calc(var(--control-screen-height) * var(--screen-aspect, 1.77778)));max-width:100%;height:auto;line-height:0}.desk-stage.control-stage .control-monitor-tabs{position:absolute;top:8px;left:50%;z-index:24;max-width:min(72vw,760px);min-height:30px;display:flex;align-items:center;justify-content:center;gap:4px;overflow-x:auto;padding:3px;border:1px solid rgba(148,163,184,.24);border-radius:999px;background:#ffffffc7;box-shadow:0 10px 24px #0f172a1f,0 1px #ffffffe0 inset;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);transform:translate(-50%)}.desk-stage.control-stage .control-monitor-tabs button{min-width:0;width:auto;height:24px;display:inline-flex;align-items:center;gap:5px;padding:0 10px;border:0;border-radius:999px;background:transparent;color:#475569;box-shadow:none;font-size:10px;line-height:1}.desk-stage.control-stage .control-monitor-tabs button.active{background:#111827;color:#fff}.desk-stage.control-stage .control-monitor-tabs span{max-width:120px;font-size:10px;font-weight:850}.desk-stage.control-stage .control-monitor-tabs small{font-size:8px;font-weight:700;opacity:.72}.desk-stage.control-stage .monitor-cycle{display:none}.share-files-page{width:min(1100px,64vw);min-width:0;margin:0 auto;padding:8px 0 48px;display:grid;gap:18px;color:#172033}.share-files-header,.share-section-heading,.share-files-header-actions,.share-destination-row,.share-folder-row,.share-auto-sync,.share-direct-actions button{display:flex;align-items:center}.share-files-header{justify-content:space-between;gap:22px;padding-bottom:18px;border-bottom:1px solid rgba(148,163,184,.28)}.share-files-header>div:first-child{display:grid;gap:5px}.share-files-eyebrow{display:inline-flex;align-items:center;gap:7px;color:#64748b;font-size:11px;font-weight:800;letter-spacing:0;text-transform:uppercase}.share-files-header h2{color:#111827;font-size:25px;line-height:1.15;font-weight:760}.share-files-header p{color:#667085;font-size:13px;font-weight:550}.share-files-header-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px}.share-target-panel,.share-sync-section,.share-direct-section{min-width:0;display:grid;gap:14px;padding:18px;border:1px solid rgba(148,163,184,.28);border-radius:8px;background:#ffffffe0;box-shadow:0 16px 36px #0f172a17,0 1px #fffffff5 inset}.share-section-heading{justify-content:space-between;gap:16px}.share-section-heading>div:first-child{display:grid;gap:2px}.share-section-heading span{color:#667085;font-size:10px;font-weight:800;letter-spacing:0;text-transform:uppercase}.share-section-heading strong{color:#111827;font-size:16px;font-weight:760}.share-section-heading .segmented-control{width:auto;flex:0 0 auto}.share-section-heading .segmented-control button{display:inline-flex;align-items:center;gap:6px;min-width:118px}.share-destination-row{gap:12px;padding:12px 0;border-top:1px solid rgba(148,163,184,.18);border-bottom:1px solid rgba(148,163,184,.18)}.share-directory-field{min-width:0;flex:1 1 auto;display:grid;grid-template-columns:auto minmax(160px,1fr);align-items:center;gap:10px}.share-directory-field>span,.share-directory-hint{color:#667085;font-size:11px;font-weight:700}.share-directory-field input{width:100%;height:38px;box-sizing:border-box;border:1px solid rgba(148,163,184,.34);border-radius:7px;background:#f8fafc;color:#111827;padding:0 11px;outline:none}.share-directory-field input:focus{border-color:#3b82f68f;box-shadow:0 0 0 3px #3b82f61c}.share-device-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.share-device-option{min-width:0;min-height:52px;display:grid;grid-template-columns:auto auto minmax(0,1fr);align-items:center;gap:9px;padding:8px 10px;border:1px solid rgba(148,163,184,.24);border-radius:7px;background:#f8fafc;color:#64748b;cursor:pointer}.share-device-option.selected{border-color:#3b82f652;background:#eff6ff;color:#2563eb}.share-device-option input{width:16px;height:16px;margin:0;accent-color:#2563eb}.share-device-option span{min-width:0;display:grid;gap:2px}.share-device-option strong,.share-device-option small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.share-device-option strong{color:#111827;font-size:12px}.share-device-option small{color:#7c8799;font-size:10px}.share-folder-list{display:grid;gap:8px}.share-folder-row{min-width:0;gap:12px;padding:11px 12px;border:1px solid rgba(148,163,184,.24);border-radius:7px;background:#f8fafc}.share-folder-row.state-syncing,.share-folder-row.state-scanning{border-color:#3b82f661;background:#eff6ff}.share-folder-row.state-blocked,.share-folder-row.state-error{border-color:#f59e0b5c;background:#fff7ed}.share-folder-icon{width:36px;height:36px;flex:0 0 auto;display:grid;place-items:center;border-radius:7px;background:#fff;color:#475569;box-shadow:0 7px 16px #0f172a14}.share-folder-info{min-width:0;flex:1 1 auto;display:grid;gap:2px}.share-folder-info strong,.share-folder-info span,.share-folder-info small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.share-folder-info strong{color:#111827;font-size:13px}.share-folder-info span,.share-folder-info small{color:#667085;font-size:10px}.share-auto-sync{gap:6px;color:#64748b;font-size:11px;font-weight:750}.share-auto-sync input{width:16px;height:16px;accent-color:#2563eb}.share-remove{flex:0 0 auto;color:#64748b;box-shadow:none}.share-remove:hover{color:#b91c1c}.share-empty-state,.share-empty-inline{color:#7c8799;font-size:12px;text-align:center}.share-empty-state{min-height:112px;display:grid;place-items:center;align-content:center;gap:5px;border:1px dashed rgba(148,163,184,.4);border-radius:7px;background:#f8fafc}.share-empty-state.interactive{width:100%;color:#64748b;cursor:pointer}.share-empty-state.interactive:hover{border-color:#3b82f66b;background:#eff6ff;color:#2563eb}.share-empty-state strong{color:#111827;font-size:13px}.share-empty-state span{max-width:420px;font-size:11px}.share-empty-inline{grid-column:1 / -1;padding:18px}.share-direct-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.share-direct-actions button{min-width:0;min-height:62px;gap:12px;padding:10px 14px;border:1px solid rgba(148,163,184,.26);border-radius:7px;background:#f8fafc;color:#475569;text-align:left}.share-direct-actions button:hover:not(:disabled){border-color:#3b82f657;background:#eff6ff;color:#2563eb}.share-direct-actions button span{min-width:0;display:grid;gap:2px}.share-direct-actions button strong{color:#111827;font-size:12px}.share-direct-actions button small{color:#7c8799;font-size:10px}@media(max-width:1180px){.share-files-page{width:min(820px,calc(100vw - 116px))}}@media(max-width:760px){.share-files-page{width:calc(100vw - 92px);gap:12px}.share-files-header,.share-section-heading,.share-destination-row{align-items:stretch;flex-direction:column}.share-files-header-actions{justify-content:flex-start}.share-section-heading .segmented-control{width:100%}.share-section-heading .segmented-control button{min-width:0}.share-directory-field,.share-device-list,.share-direct-actions{grid-template-columns:1fr}.share-folder-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto}.share-auto-sync{grid-column:2}}
|