livedesk 0.1.29 → 0.1.31

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.
@@ -474,6 +474,10 @@ function normalizeSlotNumber(value) {
474
474
  return Number.isInteger(number) && number >= 1 && number <= 999 ? number : 0;
475
475
  }
476
476
 
477
+ function normalizeMonitorIndex(value) {
478
+ return clampNumber(value, 0, 63, 0);
479
+ }
480
+
477
481
  function parseManagerEndpoint(value) {
478
482
  const endpoint = safeString(value, 256);
479
483
  const match = endpoint.match(/^(\[[^\]]+\]|[^:\s]+):(\d{1,5})$/);
@@ -1636,6 +1640,8 @@ export function createRemoteHub(options = {}) {
1636
1640
  contentHash: SYNTHETIC_FRAME_HASH,
1637
1641
  captureMs: 0,
1638
1642
  sameContentStreak: 0,
1643
+ monitorIndex: normalizeMonitorIndex(options.monitorIndex ?? 0),
1644
+ monitorCount: clampNumber(options.monitorCount, 1, 64, 1),
1639
1645
  dataUrl: SYNTHETIC_FRAME_DATA_URL,
1640
1646
  payload: SYNTHETIC_FRAME_PAYLOAD,
1641
1647
  accessToken: createFrameAccessToken()
@@ -1676,6 +1682,8 @@ export function createRemoteHub(options = {}) {
1676
1682
  commandId: options.commandId || device.activeLiveStream.commandId,
1677
1683
  width: options.maxWidth || 960,
1678
1684
  height: options.maxHeight || 540,
1685
+ monitorIndex: options.monitorIndex ?? device.activeLiveStream.monitorIndex ?? 0,
1686
+ monitorCount: options.monitorCount ?? device.activeLiveStream.monitorCount ?? 1,
1679
1687
  fps: options.fps || device.activeLiveStream.fps
1680
1688
  });
1681
1689
  device.latestLiveFrame = frame;
@@ -2667,6 +2675,8 @@ export function createRemoteHub(options = {}) {
2667
2675
  handshake: transfer.handshake,
2668
2676
  width: Number.isFinite(Number(message.width)) ? Number(message.width) : Number(device.activeLiveStream.width || 0),
2669
2677
  height: Number.isFinite(Number(message.height)) ? Number(message.height) : Number(device.activeLiveStream.height || 0),
2678
+ monitorIndex: Number.isFinite(Number(message.monitorIndex)) ? normalizeMonitorIndex(message.monitorIndex) : Number(device.activeLiveStream.monitorIndex || 0),
2679
+ monitorCount: Number.isFinite(Number(message.monitorCount)) ? clampNumber(message.monitorCount, 1, 64, 1) : Number(device.activeLiveStream.monitorCount || 1),
2670
2680
  openedFrameSeq: Number.isFinite(Number(message.frameSeq)) ? Number(message.frameSeq) : Number(device.activeLiveStream.openedFrameSeq || 0)
2671
2681
  };
2672
2682
  emitRemoteEvent('RemoteLiveStreamOpened', device, {
@@ -2756,6 +2766,8 @@ export function createRemoteHub(options = {}) {
2756
2766
  durationUs: Number.isFinite(Number(message.durationUs)) ? Number(message.durationUs) : 0,
2757
2767
  hardwareEncoder: safeString(message.hardwareEncoder, 80),
2758
2768
  platformProfile: safeString(message.platformProfile, 80),
2769
+ monitorIndex: Number.isFinite(Number(message.monitorIndex)) ? normalizeMonitorIndex(message.monitorIndex) : Number(device.activeLiveStream.monitorIndex || 0),
2770
+ monitorCount: Number.isFinite(Number(message.monitorCount)) ? clampNumber(message.monitorCount, 1, 64, 1) : Number(device.activeLiveStream.monitorCount || 1),
2759
2771
  transferProtocol: transfer.transferProtocol,
2760
2772
  transferProtocolVersion: transfer.transferProtocolVersion,
2761
2773
  handshake: transfer.handshake,
@@ -2791,6 +2803,8 @@ export function createRemoteHub(options = {}) {
2791
2803
  device.activeLiveStream.transferProtocol = transfer.transferProtocol;
2792
2804
  device.activeLiveStream.transferProtocolVersion = transfer.transferProtocolVersion;
2793
2805
  device.activeLiveStream.handshake = transfer.handshake;
2806
+ device.activeLiveStream.monitorIndex = device.latestLiveFrame.monitorIndex;
2807
+ device.activeLiveStream.monitorCount = device.latestLiveFrame.monitorCount;
2794
2808
  device.counters.liveFramesReceived += 1;
2795
2809
  emitRemoteEvent('RemoteFrameReceived', device, {
2796
2810
  streamId,
@@ -3655,6 +3669,7 @@ export function createRemoteHub(options = {}) {
3655
3669
  const now = new Date().toISOString();
3656
3670
  const streamId = safeString(options.streamId, 128) || `live-${Date.now()}`;
3657
3671
  const fps = clampNumber(options.fps, 1, 24, 2);
3672
+ const monitorIndex = normalizeMonitorIndex(options.monitorIndex ?? options.screenIndex ?? options.displayIndex);
3658
3673
  const commandId = safeString(options.commandId, 128) || crypto.randomUUID();
3659
3674
  const transfer = buildRemoteFrameTransferDescriptor(options.mode || DEFAULT_REMOTE_FRAME_MODE);
3660
3675
  device.counters.commandsSent += 1;
@@ -3675,6 +3690,8 @@ export function createRemoteHub(options = {}) {
3675
3690
  transferProtocolVersion: transfer.transferProtocolVersion,
3676
3691
  handshake: transfer.handshake,
3677
3692
  fps,
3693
+ monitorIndex,
3694
+ monitorCount: 1,
3678
3695
  startedAt: now,
3679
3696
  stoppedAt: '',
3680
3697
  stopReason: '',
@@ -3687,6 +3704,7 @@ export function createRemoteHub(options = {}) {
3687
3704
  commandId,
3688
3705
  maxWidth: options.maxWidth,
3689
3706
  maxHeight: options.maxHeight,
3707
+ monitorIndex,
3690
3708
  fps
3691
3709
  });
3692
3710
  emitRemoteEvent('RemoteLiveStreamStarted', device, {
@@ -3696,7 +3714,7 @@ export function createRemoteHub(options = {}) {
3696
3714
  mode: transfer.mode,
3697
3715
  synthetic: true
3698
3716
  });
3699
- return { ok: true, commandId, streamId, fps, mode: transfer.mode, frameMode: transfer.frameMode, synthetic: true };
3717
+ return { ok: true, commandId, streamId, fps, mode: transfer.mode, frameMode: transfer.frameMode, monitorIndex, synthetic: true };
3700
3718
  }
3701
3719
 
3702
3720
  if (!device?.socket || device.socket.destroyed || !device.connected) {
@@ -3709,6 +3727,7 @@ export function createRemoteHub(options = {}) {
3709
3727
  const now = new Date().toISOString();
3710
3728
  const streamId = safeString(options.streamId, 128) || `live-${Date.now()}`;
3711
3729
  const fps = clampNumber(options.fps, 1, 24, 8);
3730
+ const monitorIndex = normalizeMonitorIndex(options.monitorIndex ?? options.screenIndex ?? options.displayIndex);
3712
3731
  const commandId = safeString(options.commandId, 128) || crypto.randomUUID();
3713
3732
  const transfer = buildRemoteFrameTransferDescriptor(options.mode || DEFAULT_REMOTE_FRAME_MODE);
3714
3733
  const result = sendCommand(deviceId, {
@@ -3729,6 +3748,7 @@ export function createRemoteHub(options = {}) {
3729
3748
  maxWidth: clampNumber(options.maxWidth, 320, 2560, 640),
3730
3749
  maxHeight: clampNumber(options.maxHeight, 180, 1440, 360),
3731
3750
  quality: clampNumber(options.quality, 20, 95, 45),
3751
+ monitorIndex,
3732
3752
  requestedAt: now
3733
3753
  }
3734
3754
  });
@@ -3754,6 +3774,8 @@ export function createRemoteHub(options = {}) {
3754
3774
  transferProtocolVersion: transfer.transferProtocolVersion,
3755
3775
  handshake: transfer.handshake,
3756
3776
  fps,
3777
+ monitorIndex,
3778
+ monitorCount: 1,
3757
3779
  startedAt: now,
3758
3780
  stoppedAt: '',
3759
3781
  stopReason: '',
@@ -3767,10 +3789,11 @@ export function createRemoteHub(options = {}) {
3767
3789
  commandId,
3768
3790
  fps,
3769
3791
  mode: transfer.mode,
3770
- frameMode: transfer.frameMode
3792
+ frameMode: transfer.frameMode,
3793
+ monitorIndex
3771
3794
  });
3772
3795
 
3773
- return { ok: true, commandId, streamId, fps, mode: transfer.mode, frameMode: transfer.frameMode };
3796
+ return { ok: true, commandId, streamId, fps, mode: transfer.mode, frameMode: transfer.frameMode, monitorIndex };
3774
3797
  }
3775
3798
 
3776
3799
  function stopLiveStream(deviceId, options = {}) {
package/hub/src/server.js CHANGED
@@ -79,6 +79,24 @@ function clampNumber(value, min, max, fallback) {
79
79
  return Math.max(min, Math.min(max, Math.round(number)));
80
80
  }
81
81
 
82
+ function normalizeMonitorIndex(value, fallback = 0) {
83
+ return clampNumber(value, 0, 63, fallback);
84
+ }
85
+
86
+ function normalizeMonitorSelections(value) {
87
+ const result = {};
88
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
89
+ return result;
90
+ }
91
+ for (const [deviceId, monitorIndex] of Object.entries(value)) {
92
+ const id = String(deviceId || '').trim();
93
+ if (id) {
94
+ result[id] = normalizeMonitorIndex(monitorIndex);
95
+ }
96
+ }
97
+ return result;
98
+ }
99
+
82
100
  function normalizeDeviceIds(value) {
83
101
  const raw = Array.isArray(value)
84
102
  ? value
@@ -140,6 +158,8 @@ function normalizeLiveOptions(payload = {}) {
140
158
  maxWidth: clampNumber(payload.maxWidth, 320, 2560, 640),
141
159
  maxHeight: clampNumber(payload.maxHeight, 180, 1440, 360),
142
160
  quality: clampNumber(payload.quality, 20, 95, 45),
161
+ monitorIndex: normalizeMonitorIndex(payload.monitorIndex ?? payload.screenIndex ?? payload.displayIndex),
162
+ monitorSelections: normalizeMonitorSelections(payload.monitorSelections),
143
163
  mode,
144
164
  frameMode: mode
145
165
  };
@@ -180,8 +200,12 @@ function updateFrameSubscription(ws, payload = {}) {
180
200
  skipped.push({ deviceId, reason: device?.connected ? 'live-unavailable' : 'not-connected' });
181
201
  continue;
182
202
  }
203
+ const monitorIndex = Object.prototype.hasOwnProperty.call(ws.liveDeskLiveOptions.monitorSelections || {}, deviceId)
204
+ ? ws.liveDeskLiveOptions.monitorSelections[deviceId]
205
+ : ws.liveDeskLiveOptions.monitorIndex;
183
206
  const result = remoteHub.startLiveStream(deviceId, {
184
207
  ...ws.liveDeskLiveOptions,
208
+ monitorIndex,
185
209
  streamId: `livedesk-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`
186
210
  });
187
211
  if (result?.ok) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livedesk",
3
- "version": "0.1.29",
3
+ "version": "0.1.31",
4
4
  "description": "LiveDesk Hub and client launcher",
5
5
  "type": "module",
6
6
  "bin": {
@@ -30,7 +30,7 @@
30
30
  "node": ">=20"
31
31
  },
32
32
  "dependencies": {
33
- "@livedesk/client": "0.1.32",
33
+ "@livedesk/client": "0.1.33",
34
34
  "cors": "^2.8.5",
35
35
  "express": "^4.21.2",
36
36
  "ws": "^8.18.3"
@@ -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:4}.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:40;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:42;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.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-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 - 92px)}.control-focus-head{min-width:0;display:flex;align-items:center;justify-content:space-between;gap:12px}.control-focus-head div{min-width:0;display:grid;gap:3px}.control-focus-head span{color:#8d939d;font-size:11px;font-weight:900;text-transform:uppercase}.control-focus-head strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:18px;font-weight:900}.control-wall{--control-screen-height: calc(100vh - 170px) ;min-height:0;height:100%;grid-template-columns:minmax(0,min(100%,calc(var(--control-screen-height) * 16 / 9)));align-content:center;justify-content:center;place-items:center}.control-wall .device-tile{width:min(100%,calc(var(--control-screen-height) * 16 / 9));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(300px,1fr));gap:12px;min-width:0}.screen-wall.size-large{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.screen-wall.size-medium{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.screen-wall.size-small{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.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:"";position:absolute;top:12px;right:12px;z-index:5;display:grid;place-items:center;width:24px;height:24px;border-radius:999px;background:#14b8a6;color:#fff;font-size:15px;font-weight:900;box-shadow:0 8px 18px #0f172a3d;pointer-events: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: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:"";position:absolute;inset:5px;z-index:8;pointer-events:none;border:2px solid rgba(20,184,166,.92);border-radius:7px;box-shadow:0 0 0 2px #ffffff57,0 0 22px #14b8a642}.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;border-radius:6px;outline: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:38px;height:58px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.2);border-radius:999px;background:#080a0db8;color:#fff;box-shadow:0 10px 26px #00000047;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);cursor:pointer;pointer-events:auto;transform:translateY(-50%)}.monitor-cycle-button:hover{background:#080a0de0}.monitor-cycle-button.previous{left:8px}.monitor-cycle-button.next{right:8px}.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}.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-head 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{padding-right:18px}.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}.device-tile.selected:after{background:#0d9488;color:#fff}.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: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 12px 28px #0f172a2e,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-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}}