@xenon-device-management/xenon 1.1.21 → 1.1.23
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/lib/package.json +1 -1
- package/lib/public/assets/{Layouts-7IT8aFLI.js → Layouts-DyOOhYtz.js} +1 -1
- package/lib/public/assets/{ai-settings-BbnfgdEx.js → ai-settings-UTOAls44.js} +1 -1
- package/lib/public/assets/{apps-CRMrI4_p.js → apps-iWYKDaHG.js} +1 -1
- package/lib/public/assets/{badge-CSvl5xIU.js → badge-DPsMqugr.js} +1 -1
- package/lib/public/assets/{button-CvLaGFYj.js → button-C2nVUsus.js} +1 -1
- package/lib/public/assets/{calendar-6w-D6Oaw.js → calendar-ufCcAAd0.js} +1 -1
- package/lib/public/assets/{clock-DcdeWBPr.js → clock-D9Y3wV_k.js} +1 -1
- package/lib/public/assets/{cpu-DiSoXT9n.js → cpu-HdPsjamK.js} +1 -1
- package/lib/public/assets/device-explorer-QINnmim7.js +195 -0
- package/lib/public/assets/{device-explorer-CxdUAoTL.css → device-explorer-vr8x2iik.css} +1 -1
- package/lib/public/assets/{index-ByQwMN5T.js → index-W_MoQvsw.js} +2 -2
- package/lib/public/assets/{lock-B23ibZmo.js → lock-CJ90SvYX.js} +1 -1
- package/lib/public/assets/{maintenance-settings-CirzA6yG.js → maintenance-settings-CLGqmciU.js} +1 -1
- package/lib/public/assets/{mouse-pointer-2-Cz76SHFb.js → mouse-pointer-2-HkRMqHAy.js} +1 -1
- package/lib/public/assets/{plus-BBwlIevt.js → plus-8iOMg9nw.js} +1 -1
- package/lib/public/assets/{session-dashboard-HPDtwPOZ.js → session-dashboard-FUCdTLJc.js} +1 -1
- package/lib/public/assets/{settings-DrZsZwdc.js → settings-DsABv9a7.js} +1 -1
- package/lib/public/assets/{trash-2-DQpvzJec.js → trash-2-g4zyDinF.js} +1 -1
- package/lib/public/assets/{useSocket-Dxsqae2a.js → useSocket-9D3E9Hwl.js} +1 -1
- package/lib/public/assets/{webhook-settings-Cp-B4Nrw.js → webhook-settings-DiEIokQy.js} +1 -1
- package/lib/public/assets/{zap-DovP6iow.js → zap-Dr4fY5UZ.js} +1 -1
- package/lib/public/index.html +1 -1
- package/lib/src/device-managers/ios/WDAClient.js +148 -94
- package/package.json +1 -1
- package/lib/public/assets/device-explorer-CajM63OJ.js +0 -193
|
@@ -1 +1 @@
|
|
|
1
|
-
@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap";.device-info-card-container{background:var(--bg-card);min-height:180px;width:100%;display:flex;flex-direction:column;padding:12px;border-radius:8px;position:relative;box-shadow:0 4px 20px #0006;border:1px solid var(--border-visible);transition:all .2s cubic-bezier(.4,0,.2,1);overflow:hidden;background-image:radial-gradient(circle at 50% 50%,rgba(255,255,255,.02) 0%,transparent 100%)}.device-info-card-container:hover{border-color:#0f86;box-shadow:0 0 25px #00ff8814;transform:translateY(-2px);background:var(--bg-card-hover)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.header-left{display:flex;align-items:center;gap:8px}.platform-icon-wrapper{padding:4px;border-radius:4px;background:#ffffff08;color:var(--text-dim);display:flex;align-items:center;justify-content:center}.platform-icon-wrapper.ios{color:#88a}.platform-icon-wrapper.android{color:#3ddc84}.device-id-mono{font-family:JetBrains Mono,monospace;font-size:10px;color:var(--text-muted);background:#0000004d;padding:2px 6px;border-radius:4px;border:1px solid var(--border-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-status-badge{font-family:JetBrains Mono,monospace;font-size:var(--fs-xs);font-weight:700;text-transform:uppercase;padding:2px 8px;border-radius:4px;border:1px solid transparent}.device-status-badge.ready{color:var(--color-primary);background:#00ff880d;border-color:#0f83}.device-status-badge.busy{color:var(--color-amber);background:#ffb8000d;border-color:#ffb80033}.device-status-badge.maintenance{color:#fb923c;background:#fb923c0d;border-color:#fb923c33}.device-status-badge.offline{color:var(--text-dim);background:#ffffff08;border-color:var(--border-visible)}.device-info-main{margin-bottom:12px}.device-name{font-family:Outfit,sans-serif;font-size:14px;font-weight:700;color:var(--text-bright);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-subtext{font-size:10px;color:var(--text-dim);margin-top:2px;font-weight:500}.device-tags-inline{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;min-height:16px}.inline-tag{background:#00ff880d;color:var(--color-primary);border:1px solid rgba(0,255,136,.2);padding:2px 6px;border-radius:4px;font-size:8px;font-weight:800;font-family:JetBrains Mono,monospace;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;max-width:80px;overflow:hidden;text-overflow:ellipsis}.inline-tag-overflow{background:#ffffff0d;color:var(--text-dim);border:1px dashed var(--border-visible);padding:2px 6px;border-radius:4px;font-size:8px;font-weight:800;font-family:JetBrains Mono,monospace;display:flex;align-items:center;justify-content:center}.metrics-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:12px}.metric-item{display:flex;align-items:center;gap:4px;font-size:9px;color:var(--text-muted);font-family:JetBrains Mono,monospace;background:#0003;padding:4px;border-radius:4px;white-space:nowrap;overflow:hidden}.metric-item span.truncate{overflow:hidden;text-overflow:ellipsis}.metric-item.health.healthy{color:var(--color-primary)}.metric-item.health.unhealthy{color:var(--color-red)}.health-dot{width:4px;height:4px;border-radius:50%;background:currentColor}.heal-badge{margin-left:auto;font-size:8px;background:#ffffff1a;padding:0 4px;border-radius:2px;display:flex;align-items:center;gap:2px}.mini-battery{width:14px;height:8px;border:1px solid rgba(255,255,255,.2);border-radius:1px;padding:1px;position:relative}.mini-battery:after{content:"";position:absolute;right:-2px;top:2px;width:1.5px;height:2px;background:#fff3}.battery-fill{height:100%;background:var(--color-primary);border-radius:.5px}.mini-battery.low .battery-fill{background:var(--color-red)}.dynamic-data-layer{margin-top:auto;margin-bottom:10px;height:18px}.reservation-micro-banner,.session-micro-banner,.utilization-micro-info{font-size:9px;font-weight:700;display:flex;align-items:center;gap:6px;padding:2px 8px;border-radius:4px}.reservation-micro-banner{color:var(--color-sky);background:#38bdf81a;border-left:2px solid var(--color-sky)}.session-micro-banner{color:var(--color-amber);background:#ffb8001a;border-left:2px solid var(--color-amber)}.utilization-micro-info{color:var(--text-muted)}.action-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:6px;border-top:1px solid var(--border-subtle);padding-top:10px;width:100%}.tactical-btn{flex:1;min-width:0;height:30px;padding:0;display:flex;align-items:center;justify-content:center;gap:6px;border-radius:4px;background:#ffffff08;border:1px solid var(--border-visible);color:var(--text-muted);cursor:pointer;transition:all .2s ease;overflow:hidden}.tactical-btn:hover{background:#ffffff1a;color:var(--text-bright)}.tactical-btn.maintenance{border-color:#fbbf2433;background:#fbbf240d}.tactical-btn.maintenance:hover{background:#fbbf2426;border-color:#fbbf24}.tactical-btn.reserve{border-color:#38bdf833;background:#38bdf80d}.tactical-btn.reserve:hover,.tactical-btn.reserved:hover{background:#38bdf826;border-color:#38bdf8}.tactical-btn.exit-maintenance{color:var(--color-red);background:#ff44441a;border-color:var(--color-red)}.tactical-btn.control-btn{background:#00ff8814;border-color:var(--color-primary);color:var(--color-primary)}.tactical-btn.control-btn:hover:not(:disabled){background:var(--color-primary);color:#000;box-shadow:0 0 15px #00ff884d}.tactical-btn.control-btn:disabled{opacity:.3;cursor:not-allowed;filter:grayscale(1)}.device-info-card__body_block-device,.device-info-card__body_unblock-device{width:auto!important;height:28px!important;min-width:28px!important;padding:0 4px!important}.device-info-card__body_block-device-icon{margin:0!important}.reservation-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#020617f2;display:flex;justify-content:center;align-items:center;z-index:100000;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.reservation-modal{background-color:var(--bg-surface);border:1px solid var(--border-visible);border-radius:6px;width:450px;max-width:90%;box-shadow:0 20px 50px #00000080;animation:modal-enter .3s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden}@keyframes modal-enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.reservation-modal-header{padding:24px;display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid var(--border-visible);background:#0006}.reservation-modal-title{display:flex;align-items:center;gap:12px;font-size:1.25rem;font-weight:800;color:var(--text-bright);text-transform:uppercase;font-family:Outfit,sans-serif;letter-spacing:-.01em}.reservation-modal-body{padding:24px;display:flex;flex-direction:column;gap:20px}.device-id-badge{display:inline-flex;align-items:center;gap:8px;background:#0006;padding:8px 16px;border-radius:6px;border:1px solid var(--border-visible);font-family:JetBrains Mono,monospace;font-size:11px;width:fit-content;margin-bottom:12px}.reservation-modal p{color:var(--text-dim);font-size:13px;line-height:1.6;margin:0}.reservation-form-group{margin-bottom:0}.reservation-form-group label{display:block;color:var(--text-dim);font-size:var(--fs-xs);font-weight:800;margin-bottom:8px;text-transform:uppercase;letter-spacing:.1em;font-family:JetBrains Mono,monospace}.reservation-input{width:100%;background-color:#0000004d;border:1px solid var(--border-visible);border-radius:6px;padding:12px 16px;color:var(--text-bright);font-size:13px;box-sizing:border-box;transition:all .2s;font-family:JetBrains Mono,monospace}.reservation-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 10px #00ff881a}.duration-selector{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:8px}.duration-option{background-color:#0000004d;border:1px solid var(--border-visible);color:var(--text-dim);padding:10px;border-radius:6px;font-size:11px;cursor:pointer;text-align:center;transition:all .2s;font-weight:800;font-family:JetBrains Mono,monospace}.duration-option:hover{border-color:var(--text-muted);background-color:#ffffff05}.duration-option.active{background-color:#00ff880d;border-color:var(--color-primary);color:var(--color-primary);box-shadow:0 0 10px #00ff881a}.reservation-actions{padding:24px;display:flex;justify-content:flex-end;gap:12px;background:#0006;border-top:2px solid var(--border-visible)}.btn-cancel{background:transparent;border:1px solid var(--border-visible);color:var(--text-dim);padding:10px 24px;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;transition:all .2s;text-transform:uppercase;font-family:JetBrains Mono,monospace}.btn-reserve{background:var(--color-primary);color:var(--bg-page);border:none;padding:10px 24px;border-radius:6px;font-size:12px;font-weight:800;cursor:pointer;transition:all .2s;text-transform:uppercase;font-family:JetBrains Mono,monospace;box-shadow:0 0 15px #0f83}.btn-reserve:hover:not(:disabled){background:#00e67a;box-shadow:0 0 25px #0f86}.btn-reserve:disabled{background-color:var(--border-visible);color:var(--text-dim);cursor:not-allowed;box-shadow:none;filter:grayscale(1);opacity:.5}.error-message{color:#ff4d4d;font-size:11px;margin-top:12px;background-color:#ff4d4d0d;padding:8px 12px;border-radius:6px;border:1px solid rgba(255,77,77,.2);font-family:JetBrains Mono,monospace}.tag-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#020617f2;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);display:flex;align-items:center;justify-content:center;z-index:100000}.tag-modal-container{background:var(--bg-surface);width:100%;max-width:450px;border-radius:6px;border:1px solid var(--border-visible);box-shadow:0 20px 50px #00000080;overflow:hidden;animation:slideUp .3s cubic-bezier(.16,1,.3,1);position:relative}@keyframes slideUp{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}.tag-modal-header{padding:24px;display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid var(--border-visible);background:#0006}.tag-modal-title{display:flex;align-items:center;gap:12px;font-size:1.25rem;font-weight:800;color:var(--text-bright);text-transform:uppercase;font-family:Outfit,sans-serif;letter-spacing:-.01em}.title-icon{color:var(--color-primary)}.close-btn{background:transparent;border:none;color:var(--text-dim);cursor:pointer;padding:4px;border-radius:6px;transition:all .2s;display:flex;align-items:center;justify-content:center}.close-btn:hover{background:#ffffff0d;color:var(--text-bright)}.tag-modal-body{padding:24px;display:flex;flex-direction:column;gap:20px}.device-id-badge{display:inline-flex;align-items:center;gap:8px;background:#0006;padding:8px 16px;border-radius:6px;border:1px solid var(--border-visible);font-family:JetBrains Mono,monospace;font-size:11px}.device-id-badge .label{color:var(--text-dim);text-transform:uppercase;font-weight:800;font-size:10px}.device-id-badge .value{color:var(--color-primary);font-weight:800}.tag-input-section label,.tags-display-section label{display:block;font-size:var(--fs-xs);font-weight:800;color:var(--text-dim);text-transform:uppercase;letter-spacing:.1em;margin-bottom:8px;font-family:JetBrains Mono,monospace}.tag-input-section input{flex:1;background:#0000004d;border:1px solid var(--border-visible);border-radius:6px;padding:10px 14px;color:var(--text-bright);font-size:13px;transition:all .2s;font-family:JetBrains Mono,monospace}.tag-input-section input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 15px #0f83}.add-inline-btn{background:var(--color-primary);color:var(--bg-page);border:none;border-radius:6px;width:40px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.add-inline-btn:hover:not(:disabled){background:#00e67a;box-shadow:0 0 15px #00ff884d}.add-inline-btn:disabled{background:var(--border-visible);color:var(--text-dim);cursor:not-allowed;filter:grayscale(1);opacity:.5}.tags-list{display:flex;flex-wrap:wrap;gap:8px;min-height:48px;padding:12px;background:#0006;border-radius:6px;border:1px dashed var(--border-visible)}.tag-pill-editable{display:flex;align-items:center;gap:6px;background:#00ff880d;color:var(--color-primary);padding:6px 12px;border-radius:6px;font-size:11px;font-weight:800;border:1px solid rgba(0,255,136,.3);font-family:JetBrains Mono,monospace;text-transform:uppercase;letter-spacing:.05em;box-shadow:0 0 10px #00ff880d}.remove-tag{background:transparent;border:none;color:var(--color-primary);cursor:pointer;padding:2px;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:all .2s;opacity:.7}.remove-tag:hover{background:#0f83;opacity:1}.tag-modal-footer{padding:24px;display:flex;gap:12px;justify-content:flex-end;background:#0006;border-top:2px solid var(--border-visible)}.btn-cancel{padding:10px 24px;border-radius:6px;background:transparent;border:1px solid var(--border-visible);color:var(--text-dim);font-weight:700;cursor:pointer;transition:all .2s;text-transform:uppercase;font-size:12px;font-family:JetBrains Mono,monospace}.btn-cancel:hover{color:var(--text-bright);border-color:var(--text-muted)}.btn-save{padding:10px 24px;border-radius:6px;background:var(--color-primary);border:none;color:var(--bg-page);font-weight:800;cursor:pointer;transition:all .2s;box-shadow:0 0 15px #0f83;text-transform:uppercase;font-size:12px;font-family:JetBrains Mono,monospace}.btn-save:hover:not(:disabled){background:#00e67a;box-shadow:0 0 25px #0f86}.btn-save:disabled{background-color:var(--border-visible);color:var(--text-dim);cursor:not-allowed;box-shadow:none;filter:grayscale(1);opacity:.5}.device-explorer-card-container{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;padding:16px;flex:1}.device-explorer-card-container::-webkit-scrollbar{width:6px}.device-explorer-card-container::-webkit-scrollbar-thumb{background:var(--border-medium);border-radius:8px}.device-explorer-container{display:flex;flex-direction:column;width:100%;gap:var(--space-md)}.device-explorer-header-container{display:flex;align-items:center;justify-content:space-between;padding:4px 24px;background:#0f0f1ae6;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:2px solid var(--border-visible);position:sticky;top:0;z-index:1002;gap:var(--space-xl);flex-wrap:nowrap;box-shadow:0 10px 30px #0006}.device-explorer-header-left-container{display:flex;align-items:center;gap:24px;flex:1;min-width:0}.device-explorer-header-entry{display:flex;flex-direction:column;gap:4px;min-width:0}.device-explorer-header-entry-header{font-size:var(--fs-xs);font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.1em;font-family:JetBrains Mono,monospace}.device-explorer-header-value{display:flex;align-items:center;gap:8px}.device-explorer-header__platform-btn,.device-explorer-header__device-state{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:6px;background:#0006;border:1px solid var(--border-visible);color:var(--text-muted);font-size:var(--fs-sm);font-weight:600;text-transform:uppercase;letter-spacing:.05em;cursor:pointer;transition:all .2s ease}.device-explorer-header__platform-btn:hover,.device-explorer-header__device-state:hover{background:#ffffff08;color:var(--text-bright);border-color:var(--border-subtle)}.device-explorer-header__platform-btn.selected,.device-explorer-header__device-state.selected{background:#00ff880d;color:var(--color-primary);border-color:#00ff884d;box-shadow:0 0 10px #00ff881a}.device-explorer-header__device-state.ready.selected{border-color:var(--color-primary);box-shadow:0 0 15px #0f83}.device-explorer-header__device-state.busy.selected{background:#ffb8000d;color:var(--color-amber);border-color:#ffb8004d;box-shadow:0 0 15px #ffb8001a}.device-explorer-header__device-state.offline.selected{background:#4a4a6a1a;color:var(--text-dim);border-color:var(--text-dim)}.device-explorer-search-wrapper{position:relative;width:320px}.device-explorer-search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);pointer-events:none;opacity:.5}.device-explorer-header-text-filter{width:100%;height:32px;padding:0 12px 0 36px;border-radius:6px;border:1px solid var(--border-visible);background:#0006;font-family:JetBrains Mono,monospace;font-size:var(--fs-sm);color:var(--text-bright);transition:all .2s ease}.device-explorer-header-text-filter:focus{outline:none;border-color:var(--color-primary);background:#0009;box-shadow:0 0 15px #00ff881a}.device-explorer-header-text-filter::placeholder{color:var(--text-dim);text-transform:uppercase;font-size:var(--fs-xs);letter-spacing:.1em}.device-explorer-header-right-container{display:flex;align-items:center;gap:12px}.device-explorer-header-filter-count{display:flex;align-items:center;gap:8px;padding-right:16px;border-right:1px solid var(--border-subtle)}@media (max-width: 1024px){.device-explorer-header-container{flex-direction:column;align-items:stretch;gap:var(--space-md);padding:var(--space-md)}.device-explorer-header-left-container{flex-wrap:wrap;gap:var(--space-md)}.device-explorer-header-entry{flex:1;min-width:120px}.device-explorer-search-wrapper{width:100%}.device-explorer-header-right-container{justify-content:space-between;width:100%}}@media (max-width: 640px){.device-explorer-header-left-container{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}.device-explorer-header-right-container{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.device-explorer-header-filter-count{justify-content:space-between;padding-right:0}}.device-explorer-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 40px;background:#0f0f1a66;border:1px dashed var(--border-visible);border-radius:var(--radius-md);text-align:center;margin:60px auto 40px;max-width:600px;gap:var(--space-md)}.device-explorer-empty-icon{width:64px;height:64px;background:#00ff880d;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--color-primary);margin-bottom:8px;border:1px solid rgba(0,255,136,.1)}.device-explorer-empty h3{font-size:1.5rem;font-weight:700;color:var(--text-bright);margin:0;font-family:Outfit,sans-serif}.device-explorer-empty p{color:var(--text-muted);font-size:14px;max-width:400px;line-height:1.6;margin:0}.device-explorer-empty .Button{margin-top:8px}.device-control-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--bg-app);z-index:6000;display:flex;flex-direction:column;padding:0;margin:0;animation:modal-fade-in .25s ease-out}.device-control-modal{flex:1;width:100%;height:100%;overflow:hidden;display:flex;flex-direction:column;background:var(--bg-app)}@keyframes modal-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.device-control-view{display:flex;flex-direction:column;height:100%;width:100%;background:var(--bg-app);color:var(--text-main);overflow:hidden;font-family:Inter,sans-serif}*{scrollbar-width:thin;scrollbar-color:var(--border-medium) transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-medium);border-radius:8px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.control-view-top-bar{display:flex;align-items:center;padding:0 24px;height:64px;background:var(--bg-surface);border-bottom:2px solid var(--border-visible);gap:24px;z-index:100;position:relative}.device-info-mini{display:flex;align-items:center;gap:16px}.device-pill{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;padding:2px 10px;border-radius:6px;letter-spacing:.1em;font-family:JetBrains Mono,monospace}.platform-pill{background:#00ff880d;color:var(--color-primary);border:1px solid rgba(0,255,136,.2)}.version-pill{background:#ffb8000d;color:var(--color-amber);border:1px solid rgba(255,184,0,.2)}.reserved-pill{background:#38bdf81a;color:#38bdf8;border:1px solid rgba(56,189,248,.3);animation:pulse-reserved-pill 2s infinite ease-in-out}.device-name-text{font-family:Outfit,sans-serif;font-weight:800;font-size:var(--fs-md);color:var(--text-bright);letter-spacing:.02em;text-transform:uppercase}.code-font{font-family:JetBrains Mono,monospace;font-size:var(--fs-xs);color:var(--text-dim);background:#0006;padding:4px 10px;border-radius:6px;border:1px solid var(--border-visible)}.back-to-devices-btn{background:#0006;color:var(--text-dim);border:1px solid var(--border-visible);padding:8px 16px;border-radius:6px;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;display:flex;align-items:center;gap:8px;transition:all .2s;cursor:pointer}.back-to-devices-btn:hover{background:#ffffff08;border-color:var(--color-primary);color:var(--color-primary)}.control-view-main{display:flex;flex-direction:row;flex:1;overflow:hidden;padding:24px;gap:32px;background:var(--bg-page);justify-content:center;align-items:stretch;min-height:0}.control-view-main.is-landscape{align-items:flex-start}.control-view-main.omni-mode .device-preview-column{display:none}.control-view-main.omni-mode .interaction-tabs{margin-bottom:var(--space-md);border-radius:var(--radius-sm)}.control-view-main.omni-mode .device-interactions-column{max-width:100%;padding:0 0 var(--space-md) 0}.device-preview-column{display:flex;flex-direction:column;align-items:center;gap:24px;flex-shrink:0;min-width:400px}.device-screen-wrapper{position:relative;padding:12px;background:#000;border-radius:48px;box-shadow:0 0 0 2px #334155,0 20px 50px #0009,0 0 80px #10b9810d;border:1px solid rgba(255,255,255,.1);transition:all .5s cubic-bezier(.16,1,.3,1)}.device-screen-wrapper:hover{transform:translateY(-4px) scale(1.005);box-shadow:0 0 0 2px var(--primary),0 30px 60px #000c,0 0 100px #10b9811a}.device-stream-canvas{position:relative;background:#000;border-radius:28px;overflow:hidden;cursor:crosshair;transition:box-shadow .3s ease,border-color .3s ease;outline:none;border:2px solid transparent}.device-stream-canvas.focused{border-color:var(--primary);box-shadow:0 0 20px var(--primary-glow)}.device-stream-image{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.device-stream-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;width:100%;color:var(--text-muted);gap:16px;background:radial-gradient(circle at center,#0f172a,#020617)}.device-footer-actions{display:flex;width:100%;background:#0f172acc;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:16px;border:1px solid rgba(255,255,255,.08);padding:6px;gap:6px;box-shadow:0 10px 25px -5px #0006,0 0 15px #10b9810d}.footer-action-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:12px;color:var(--text-muted);font-size:11px;text-transform:uppercase;font-weight:700;letter-spacing:.05em;border:none;background:transparent;border-radius:var(--radius-sm);transition:all .2s ease}.footer-action-btn:hover{background:#ffffff0d;color:var(--text-main)}.footer-action-btn.active{background:var(--primary);color:var(--text-inverse);box-shadow:0 0 10px var(--primary-glow)}.footer-divider{width:1px;height:24px;background:var(--border-medium);margin:auto 4px}.hint-text{font-size:var(--fs-xs);color:var(--text-muted);font-style:italic;margin-top:4px}.device-interactions-column{flex:1;display:flex;flex-direction:column;gap:0;min-width:450px;max-width:1200px;height:100%;overflow:hidden;min-height:0}.interaction-tabs{display:flex;gap:4px;background:var(--bg-surface);padding:4px;border-radius:6px;border:1px solid var(--border-visible);margin-bottom:16px;flex-shrink:0}.tab-btn{flex:1;padding:8px 12px;background:transparent;border:none;font-size:var(--fs-xs);font-weight:800;color:var(--text-dim);text-transform:uppercase;letter-spacing:.1em;border-radius:4px;cursor:pointer;transition:all .2s;font-family:JetBrains Mono,monospace}.tab-btn:hover{color:var(--text-bright);background:#ffffff05}.tab-btn.active{color:var(--bg-page);background:var(--color-primary);box-shadow:0 0 15px #00ff884d}.interactions-scroll-area{flex:1;overflow-y:auto;overflow-x:hidden;padding-right:8px;display:flex;flex-direction:column}.action-card{background:#0003;border-radius:6px;padding:20px;border:1px solid var(--border-visible);transition:all .2s;display:flex;flex-direction:column;gap:16px}.action-card:hover{background:#ffffff03;border-color:var(--color-primary);box-shadow:0 4px 20px #0006}.action-card-title{font-family:Outfit,sans-serif;font-size:13px;font-weight:800;color:var(--text-bright);display:flex;align-items:center;gap:12px;text-transform:uppercase;letter-spacing:.1em;opacity:.9}.compact-label{font-size:11px;color:var(--text-muted);font-weight:600;text-transform:uppercase;letter-spacing:.05em}.btn-sm{padding:8px 16px;font-size:11px}.type-input-field.compact,.app-select-dropdown.compact{padding:10px;font-size:13px}.file-select-box.compact{padding:var(--space-md);margin-bottom:8px}.clipboard-display.compact{min-height:48px;max-height:80px;overflow-y:auto;padding:8px;font-size:11px;background:#0006}.actions-row{display:flex;gap:var(--space-xl)}.install-app-section,.uninstall-app-section{flex:1;display:flex;flex-direction:column;gap:12px;min-width:0}.file-select-box{background:#ffffff08;border:2px dashed var(--border-medium);border-radius:var(--radius-md);padding:var(--space-xl);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);transition:all .3s ease}.file-select-box:hover{background:#10b9810d;border-color:var(--primary)}.btn-premium,.btn-secondary{padding:10px 20px;border-radius:var(--radius-sm);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.05em;cursor:pointer;transition:all .2s cubic-bezier(.16,1,.3,1);display:flex;align-items:center;justify-content:center;gap:8px;border:none}.btn-premium{background:var(--primary);color:#000}.btn-premium:hover:not(:disabled){background:var(--primary-hover);transform:translateY(-1px);box-shadow:0 4px 12px var(--primary-glow)}.btn-secondary{background:#ffffff0d;color:var(--text-secondary);border:1px solid var(--border-medium)}.btn-secondary:hover:not(:disabled){background:#ffffff1a;color:var(--text-main);border-color:var(--text-muted)}.btn-secondary.active{background:var(--primary-soft);color:var(--primary);border-color:var(--primary)}.btn-sm{padding:6px 12px!important;font-size:var(--fs-xs)!important}.type-input-field,.app-select-dropdown{width:100%;padding:10px 14px;border-radius:var(--radius-sm);border:1px solid var(--border-medium);background:#0003;font-size:13px;color:var(--text-main);transition:all .2s ease}.type-input-field:focus{outline:none;border-color:var(--primary);background:#0006;box-shadow:0 0 0 3px var(--primary-soft)}.clipboard-display{background:var(--bg-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:var(--radius-md);border:1px solid var(--border-medium);padding:var(--space-md);margin-top:var(--space-md);font-family:Fira Code,monospace;font-size:12px;color:#38bdf8;min-height:80px;box-shadow:inset 0 2px 10px #00000080}.log-display-area{flex:1;min-height:0;overflow-y:auto;font-family:Fira Code,monospace;font-size:11px;line-height:1.5;background:var(--bg-glass);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);padding:16px;border-radius:0 0 var(--radius-md) var(--radius-md);color:var(--text-muted);box-shadow:inset 0 2px 20px #00000080;border:1px solid var(--border-medium);border-top:none;scrollbar-width:thin;scrollbar-color:var(--primary) transparent}.log-line{display:flex;gap:8px;margin-bottom:2px;white-space:pre-wrap;word-break:break-all;border-left:2px solid transparent;padding-left:8px;transition:background .2s ease}.log-line:hover{background:#ffffff08}.log-index{color:var(--text-muted);opacity:.3;-webkit-user-select:none;user-select:none;min-width:32px;text-align:right;font-size:var(--fs-xs)}.log-content{flex:1}.log-notice{border-left-color:#38bdf8;color:#e2e8f0}.log-error{border-left-color:#f43f5e;color:#fecdd3;background:#f43f5e0d}.log-warn{border-left-color:#fbbf24;color:#fef3c7}.log-debug{border-left-color:transparent;color:var(--text-muted)}.log-toolbar{display:flex;justify-content:space-between;align-items:center;background:#0f172a99;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:8px 16px;border-radius:var(--radius-md) var(--radius-md) 0 0;border:1px solid var(--border-medium);border-bottom:none}.log-filter-group,.log-actions-group{display:flex;gap:8px;align-items:center}.log-search-box{position:relative;display:flex;align-items:center}.search-icon-inline{position:absolute;left:8px;color:var(--text-muted);pointer-events:none;opacity:.6}.log-search-box .type-input-field.tiny{padding-left:28px!important;width:140px;background:#0003;border-color:var(--border-subtle)}.log-stat-pill{font-size:var(--fs-xs);background:#10b9811a;color:var(--primary);padding:3px 8px;border-radius:4px;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.animate-pulse{animation:pulse-op 1.5s infinite}@keyframes pulse-op{0%,to{opacity:1}50%{opacity:.4}}.tab-content{animation:slideUpFade .4s cubic-bezier(.16,1,.3,1);display:flex;flex-direction:column;flex:1;min-height:0}@keyframes slideUpFade{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.gestures-grid-container{display:flex;flex-direction:column;align-items:center;gap:12px}.gestures-dpad{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:8px;width:140px;height:140px;padding:12px;background:#0003;border-radius:50%;border:1px solid rgba(255,255,255,.05)}.dpad-btn{display:flex;align-items:center;justify-content:center;background:#ffffff08;border:1px solid rgba(255,255,255,.05);border-radius:8px;color:var(--text-muted);cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1)}.dpad-btn:hover{background:var(--primary);border-color:var(--primary);color:#fff;transform:scale(1.1);box-shadow:0 0 20px var(--primary-glow);z-index:2}.dpad-btn:active{transform:scale(.95)}.dpad-center{background:radial-gradient(circle,var(--primary-glow) 0%,transparent 70%);border-radius:50%;opacity:.2}.app-mgmt-content{display:flex;flex-direction:row;gap:var(--space-xl);align-items:flex-start}.upload-box-row,.uninstall-controls-row{display:flex;gap:12px;align-items:center;margin-top:8px}.file-upload-launcher{flex:1;display:flex;align-items:center;gap:12px;padding:10px 16px;background:#ffffff08;border:1px dashed var(--border-medium);border-radius:var(--radius-md);cursor:pointer;font-size:13px;color:var(--text-muted);transition:all .2s ease}.file-upload-launcher:hover{background:#10b9810d;border-color:var(--primary);color:var(--text-main)}.divider-v{width:1px;align-self:stretch;background:linear-gradient(180deg,transparent,var(--border-medium),transparent)}.select-wrapper{flex:1;position:relative;display:flex;align-items:center}.select-loader{position:absolute;right:32px;color:var(--primary)}.btn-destructive{background:#ef444433;color:#ef4444;border:1px solid rgba(239,68,68,.3);padding:10px 20px;border-radius:var(--radius-md);font-weight:700;font-size:12px;display:flex;align-items:center;gap:8px;transition:all .3s ease}.btn-destructive:hover:not(:disabled){background:var(--color-red);color:#fff;box-shadow:0 4px 15px #ef444466}.manual-input-box{margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.05)}.type-input-field.tiny{padding:8px 12px;font-size:12px;opacity:.6}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.action-card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.screenshot-workspace{display:flex;gap:20px;flex:1;min-height:0;overflow:hidden}.screenshot-gallery-sidebar{width:180px;display:flex;flex-direction:column;gap:16px;flex-shrink:0;min-height:0}.take-screenshot-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%}.screenshot-thumbnails-list{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding-right:4px;min-height:0}.screenshot-thumb-item{position:relative;border-radius:8px;overflow:hidden;aspect-ratio:9/16;background:#0006;border:2px solid transparent;cursor:pointer;transition:all .2s ease;flex-shrink:0}.screenshot-thumb-item:hover{border-color:#10b98166}.screenshot-thumb-item.active{border-color:var(--primary);box-shadow:0 0 12px var(--primary-glow)}.screenshot-thumb-item img{width:100%;height:100%;object-fit:cover;opacity:.7;transition:opacity .2s ease}.screenshot-thumb-item:hover img,.screenshot-thumb-item.active img{opacity:1}.thumb-time{position:absolute;bottom:0;left:0;right:0;background:#000000b3;color:#fff;font-size:var(--fs-xs);padding:2px 4px;text-align:center;font-family:JetBrains Mono,monospace}.thumb-delete-btn{position:absolute;top:4px;right:4px;width:20px;height:20px;border-radius:4px;background:#ef4444cc;color:#fff;border:none;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.screenshot-thumb-item:hover .thumb-delete-btn{opacity:1}.thumb-delete-btn:hover{background:var(--color-red)}.screenshot-main-preview{flex:1;background:#0000004d;border-radius:8px;display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative;border:1px solid rgba(255,255,255,.05);min-height:0}.preview-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.preview-image-wrapper{flex:1;position:relative;min-height:0}.preview-image-wrapper img{position:absolute;top:20px;bottom:20px;left:20px;right:20px;max-width:calc(100% - 40px);max-height:calc(100% - 40px);object-fit:contain;margin:auto;border-radius:4px;box-shadow:0 10px 40px #00000080}.preview-footer{padding:16px 24px;background:#0006;border-top:1px solid rgba(255,255,255,.05);display:flex;justify-content:space-between;align-items:center}.preview-meta{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text-muted)}.meta-label{text-transform:uppercase;font-weight:700;opacity:.5}.meta-divider{opacity:.2}.preview-actions{display:flex;gap:12px}.btn-text-only{background:transparent;border:none;color:var(--text-muted);font-size:var(--fs-xs);font-weight:700;letter-spacing:.05em;cursor:pointer;padding:4px 8px;border-radius:4px}.btn-text-only:hover{color:#ef4444;background:#ef44440d}.preview-empty-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--text-muted);font-size:13px;opacity:.6}.empty-gallery-state{display:flex;align-items:center;justify-content:center;height:100px;color:var(--text-muted);font-size:11px;font-style:italic;opacity:.5}.interactions-scroll-area.terminal-mode{overflow:hidden;padding:0;display:flex;flex-direction:column;height:100%;min-height:0}.interactions-scroll-area.terminal-mode .action-card.full-height{height:100%;min-height:0;border-radius:0;border:none}.interactions-scroll-area.screenshot-mode{overflow:hidden;height:100%;min-height:0;display:flex;flex-direction:column;padding:0}.interactions-scroll-area.screenshot-mode .tab-content{display:flex;flex-direction:column;flex:1 1 0%;min-height:0;padding:0}.interactions-scroll-area.screenshot-mode .action-card.screenshot-card{display:flex;flex-direction:column;flex:1;min-height:0;margin-bottom:0;border-radius:0;border:none;padding:0;overflow:hidden}.terminal-container{display:flex;flex-direction:column;background-color:var(--bg-page);color:var(--text-bright);font-family:JetBrains Mono,monospace;border-radius:6px;overflow:hidden;height:100%;max-height:100%;width:100%;min-height:0;border:1px solid var(--border-visible);box-shadow:0 20px 50px #00000080;position:relative}.terminal-header{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;background-color:#0006;border-bottom:2px solid var(--border-visible)}.terminal-controls{display:flex;gap:8px;width:60px}.dot{width:8px;height:8px;border-radius:4px;border:1px solid rgba(255,255,255,.1)}.dot.red{background-color:#ff4d4d}.dot.yellow{background-color:#fc0}.dot.green{background-color:var(--color-primary)}.terminal-title{font-size:var(--fs-xs);font-weight:800;color:var(--text-dim);text-transform:uppercase;letter-spacing:.15em;font-family:JetBrains Mono,monospace}.terminal-actions{display:flex;justify-content:flex-end;width:60px}.terminal-action-btn{background:transparent;border:1px solid var(--border-visible);color:var(--text-dim);font-size:var(--fs-xs);font-weight:800;padding:4px 10px;border-radius:6px;cursor:pointer;transition:all .2s;text-transform:uppercase;font-family:JetBrains Mono,monospace}.terminal-action-btn:hover{color:var(--text-bright);background:#ffffff0d;border-color:var(--text-muted)}.terminal-history{flex:1;overflow-y:auto;overflow-x:hidden;padding:20px;font-size:12px;line-height:1.6;scrollbar-width:thin;scrollbar-color:var(--color-primary) var(--bg-page);min-height:0}.terminal-history::-webkit-scrollbar{width:6px}.terminal-history::-webkit-scrollbar-track{background:transparent}.terminal-history::-webkit-scrollbar-thumb{background-color:var(--border-visible);border-radius:4px}.terminal-history::-webkit-scrollbar-thumb:hover{background-color:var(--color-primary)}.terminal-line{margin-bottom:6px;white-space:pre-wrap;word-break:normal;overflow-wrap:anywhere}.terminal-line.command{color:var(--color-primary);font-weight:600}.terminal-line.output{color:var(--text-body)}.terminal-line.error{color:#ff4d4d}.terminal-line.system{color:var(--text-dim);font-style:italic;border-bottom:1px dashed var(--border-visible);padding-bottom:6px;margin-bottom:12px}.terminal-input-area{display:flex;align-items:center;padding:16px 20px;background-color:#0006;border-top:2px solid var(--border-visible)}.terminal-prompt{color:var(--color-primary);margin-right:12px;font-weight:800;-webkit-user-select:none;user-select:none}.terminal-input{flex:1;background:transparent;border:none;color:var(--text-bright);font-family:inherit;font-size:13px;outline:none;font-weight:500}.terminal-input::placeholder{color:#ffffff1a}.terminal-loading-indicator{display:inline-block;width:8px;height:16px;background-color:var(--color-primary);animation:blink 1s step-end infinite;vertical-align:middle;margin-left:8px;border-radius:4px}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.omni-inspector-container{display:flex;flex-direction:column;height:100%;background:var(--bg-page);color:var(--text-main);font-family:Inter,sans-serif;overflow:hidden;position:relative}.omni-main-content{flex:1;display:flex;gap:16px;padding:16px;overflow:hidden;height:100%}.omni-screenshot-panel{width:380px;min-width:320px;flex-shrink:0;display:flex;flex-direction:column;background:var(--bg-surface);border-radius:6px;border:1px solid var(--border-visible);overflow:hidden}.omni-screenshot-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#0006;border-bottom:2px solid var(--border-visible)}.omni-screenshot-title{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--text-bright);opacity:.9;font-family:JetBrains Mono,monospace}.omni-mode-toggle{display:flex;background:#0000004d;padding:2px;border-radius:6px;border:1px solid var(--border-visible)}.omni-mode-btn{display:flex;align-items:center;gap:6px;padding:4px 10px;background:transparent;border:none;border-radius:4px;color:var(--text-dim);font-size:var(--fs-xs);font-weight:800;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.05em;font-family:JetBrains Mono,monospace}.omni-mode-btn.active{background:var(--color-primary);color:var(--bg-page);box-shadow:0 0 10px #00ff884d}.omni-refresh-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;background:var(--color-primary);color:var(--bg-page);border:none;border-radius:6px;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;cursor:pointer;transition:all .2s;font-family:JetBrains Mono,monospace}.omni-refresh-btn:hover:not(:disabled){background:#00e67a;box-shadow:0 0 15px #0f86}.omni-refresh-btn:disabled{opacity:.5;cursor:not-allowed}.omni-screenshot-container{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:12px;background:var(--bg-glass);position:relative;overflow:hidden}.omni-screenshot-wrapper{position:relative;max-width:100%;max-height:100%;height:100%;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}.omni-screenshot-wrapper.interactable{cursor:crosshair}.omni-screenshot-img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:4px;display:block}.omni-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.omni-overlay>*{pointer-events:auto}.omni-hit-area{position:absolute;cursor:pointer;background:transparent;transition:background .15s ease}.omni-hit-area:hover{background:#10b98133}.omni-frame-hover{position:absolute;border:2px solid var(--primary);background:#10b9811a;pointer-events:none;border-radius:6px}.omni-frame-select{position:absolute;border:2px solid var(--primary);background:#10b98133;pointer-events:none;box-shadow:0 0 20px var(--primary-glow);border-radius:6px}.omni-loading-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#000c;color:var(--text-muted);font-size:11px}.omni-spinner{width:24px;height:24px;border:2px solid var(--border-medium);border-top-color:var(--primary);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.omni-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--text-muted);text-align:center;padding:32px;font-size:12px}.omni-empty-state svg{opacity:.3}.omni-empty-state.small{padding:24px;font-size:11px}.omni-tree-panel{flex:1;min-width:0;display:flex;flex-direction:column;background:#0003;border-radius:6px;border:1px solid var(--border-visible);overflow:hidden;min-height:0}.omni-tree-content{flex:1;min-height:0;overflow-y:auto;padding:8px;scrollbar-width:thin;scrollbar-color:var(--border-medium) transparent}.omni-tree-header{display:flex;align-items:center;justify-content:space-between;padding:12px;background:#0006;border-bottom:2px solid var(--border-visible)}.omni-tree-title{display:flex;align-items:center;gap:8px;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--text-bright);opacity:.9;font-family:JetBrains Mono,monospace}.omni-count-badge{font-size:var(--fs-xs);background:#00ff880d;color:var(--color-primary);padding:2px 8px;border-radius:6px;font-weight:800;text-transform:uppercase;font-family:JetBrains Mono,monospace}.omni-action-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:#ffffff05;border:1px solid var(--border-visible);border-radius:6px;color:var(--text-dim);cursor:pointer;transition:all .2s}.omni-action-btn:hover{background:#ffffff0d;color:var(--color-primary);border-color:var(--color-primary)}.omni-tree-search{display:flex;align-items:center;gap:8px;margin:12px;padding:8px 12px;background:#0006;border:1px solid var(--border-visible);border-radius:6px;transition:all .2s}.omni-tree-search:focus-within{border-color:var(--color-primary);box-shadow:0 0 10px #00ff881a}.omni-tree-search input{flex:1;background:transparent;border:none;color:var(--text-bright);font-size:11px;outline:none;font-family:JetBrains Mono,monospace}.tree-item{display:flex;align-items:center;gap:8px;padding:8px 12px;margin-bottom:2px;border-radius:4px;cursor:pointer;font-size:12px;color:var(--text-dim);transition:all .15s;border:1px solid transparent;min-height:36px;background:#0000001a}.tree-item:hover{background:#ffffff05;color:var(--text-bright)}.tree-item.selected{background:#00ff8814;color:var(--color-primary);border-color:#0f86;box-shadow:inset 0 0 0 1px #0f83}.tree-item.hovered:not(.selected){background:#ffffff0a;border-color:#ffffff1a;color:var(--text-bright)}.tree-node{display:flex;flex-direction:column}.tree-children{margin-left:0}.tree-toggle{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;background:transparent;color:var(--text-muted);cursor:pointer;border-radius:3px;flex-shrink:0;padding:0;transition:color .15s,background .15s}.tree-toggle:hover{color:var(--color-primary);background:#00ff881a}.tree-toggle-spacer{display:inline-block;width:18px;flex-shrink:0}.tree-item-indent{flex-shrink:0}.tree-icon{color:var(--text-muted);flex-shrink:0;opacity:.6}.tree-label{flex:1;font-size:12px;font-family:JetBrains Mono,Fira Code,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-badge{font-size:10px;font-weight:700;background:#ffffff0f;color:var(--text-muted);padding:1px 5px;border-radius:4px;flex-shrink:0;font-family:JetBrains Mono,monospace}.omni-details-panel{flex:1;min-width:280px;max-width:360px;display:flex;flex-direction:column;background:var(--bg-surface);border-radius:6px;border:1px solid var(--border-visible);overflow:hidden;min-height:0}.omni-details-content{flex:1;min-height:0;overflow-y:auto;padding:16px;scrollbar-width:thin;scrollbar-color:var(--border-medium) transparent}.omni-header-left{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.omni-tree-actions{display:flex;gap:6px;align-items:center}.omni-clear-btn{background:transparent;border:none;color:var(--text-muted);cursor:pointer;font-size:16px;padding:0 4px;line-height:1;border-radius:3px}.omni-clear-btn:hover{color:var(--text-bright);background:#ffffff14}.omni-info-table,.omni-locators-list{display:flex;flex-direction:column;gap:6px}.omni-details-header{display:flex;align-items:center;gap:8px;padding:12px 16px;background:#0006;border-bottom:2px solid var(--border-visible);font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--text-bright);opacity:.9;font-family:JetBrains Mono,monospace}.omni-section{margin-bottom:24px}.omni-section-header{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--text-dim);margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border-visible);font-family:JetBrains Mono,monospace}.omni-info-row{display:flex;gap:16px;padding:12px 16px;background:#0006;border-radius:6px;border:1px solid var(--border-visible);min-height:44px;align-items:center}.omni-info-key{width:60px;flex-shrink:0;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;color:var(--text-dim);font-family:JetBrains Mono,monospace}.omni-info-value{flex:1;font-size:11px;color:var(--text-bright);word-break:break-all}.omni-layout-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.omni-layout-item{display:flex;flex-direction:column;gap:6px;padding:12px 8px;background:#0006;border-radius:6px;border:1px solid var(--border-visible);text-align:center;min-height:60px;justify-content:center}.omni-layout-label{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;color:var(--text-dim);font-family:JetBrains Mono,monospace}.omni-layout-value{font-size:12px;font-weight:800;color:var(--color-primary);font-family:JetBrains Mono,monospace}.omni-locator-row{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#0009;border-radius:6px;border:1px solid var(--border-visible);border-left:3px solid var(--color-primary);transition:all .2s;min-height:48px}.omni-locator-strategy{flex-shrink:0;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;background:#00ff880d;color:var(--color-primary);padding:2px 6px;border-radius:6px;letter-spacing:.05em;font-family:JetBrains Mono,monospace}.omni-locator-value{flex:1;font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-muted);word-break:break-all;line-height:1.5}.omni-copy-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:#ffffff08;border:1px solid var(--border-medium);border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;transition:all .2s ease}.omni-copy-btn:hover,.omni-copy-btn.copied{background:var(--primary);border-color:var(--primary);color:#000}.omni-attributes-table{display:flex;flex-direction:column;gap:4px;background:var(--bg-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:var(--radius-sm);border:1px solid var(--border-medium);padding:8px;max-height:200px;overflow-y:auto}.omni-attr-row{display:flex;gap:8px;padding:6px 8px;border-radius:4px;transition:background .2s ease}.omni-attr-row:hover{background:#ffffff08}.omni-attr-key{width:120px;flex-shrink:0;font-size:var(--fs-xs);font-weight:600;color:var(--text-muted);font-family:Fira Code,monospace}.omni-attr-value{flex:1;font-size:11px;color:#e2e8f0;font-family:Fira Code,monospace;word-break:break-all}.omni-tree-content::-webkit-scrollbar,.omni-details-content::-webkit-scrollbar,.omni-attributes-table::-webkit-scrollbar{width:6px}.omni-tree-content::-webkit-scrollbar-track,.omni-details-content::-webkit-scrollbar-track,.omni-attributes-table::-webkit-scrollbar-track{background:transparent}.omni-tree-content::-webkit-scrollbar-thumb,.omni-details-content::-webkit-scrollbar-thumb,.omni-attributes-table::-webkit-scrollbar-thumb{background:var(--border-medium);border-radius:8px}.omni-tree-content::-webkit-scrollbar-thumb:hover,.omni-details-content::-webkit-scrollbar-thumb:hover,.omni-attributes-table::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.omni-quick-actions{display:flex;flex-direction:column;gap:16px}.omni-input-group{display:flex;flex-direction:column;gap:8px}.omni-input-field{width:100%;background:#0000004d;border:1px solid var(--border-medium);border-radius:var(--radius-sm);padding:8px 12px;color:var(--text-main);font-size:12px;outline:none;transition:all .2s ease}.omni-input-field:focus{border-color:var(--primary);background:#00000080}.omni-gestures-container{display:flex;flex-direction:column;align-items:center;gap:12px;padding:16px;background:#0003;border-radius:var(--radius-md);border:1px solid var(--border-subtle)}.omni-dpad{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:8px;width:120px;height:120px}.omni-dpad-btn{display:flex;align-items:center;justify-content:center;background:#ffffff08;border:1px solid rgba(255,255,255,.05);border-radius:8px;color:var(--text-muted);cursor:pointer;transition:all .2s ease}.omni-dpad-btn:hover{background:var(--primary);color:#000;transform:scale(1.1)}.omni-clipboard-box{display:flex;gap:8px;align-items:center}.omni-clipboard-val{flex:1;background:var(--bg-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border-medium);border-radius:4px;padding:8px;font-family:Fira Code,monospace;font-size:11px;color:#38bdf8;min-height:32px;overflow-x:auto;white-space:nowrap}.omni-details-tabs{display:flex;background:#00000080;border-bottom:1px solid var(--border-visible);flex-shrink:0}.omni-details-tab{display:flex;align-items:center;gap:5px;flex:1;padding:10px 8px;border:none;background:transparent;color:var(--text-muted);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;cursor:pointer;border-bottom:2px solid transparent;transition:all .15s ease;font-family:JetBrains Mono,monospace;justify-content:center}.omni-details-tab:hover:not(:disabled){color:var(--text-bright);background:#ffffff08}.omni-details-tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary);background:#00ff880a}.omni-details-tab:disabled{opacity:.3;cursor:not-allowed}.omni-locator-row{display:flex;align-items:flex-start;gap:10px;padding:10px 14px;background:#0006;border-radius:6px;border:1px solid var(--border-visible);border-left:3px solid var(--color-primary);transition:all .15s;cursor:pointer}.omni-locator-row:hover{background:#ffffff05;border-color:var(--color-primary)}.omni-locator-row.selected-for-code{border-color:var(--color-primary);background:#00ff880f;box-shadow:0 0 12px #00ff8814}.omni-locator-left{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.omni-locator-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.omni-stability-badge{display:inline-flex;align-items:center;gap:3px;font-size:9px;font-weight:800;padding:2px 6px;border-radius:4px;text-transform:uppercase;letter-spacing:.05em;font-family:JetBrains Mono,monospace}.omni-stability-badge.stable{background:#10b9811f;color:#10b981;border:1px solid rgba(16,185,129,.25)}.omni-stability-badge.moderate{background:#fbbf241a;color:#fbbf24;border:1px solid rgba(251,191,36,.25)}.omni-stability-badge.fragile{background:#f43f5e1a;color:#f43f5e;border:1px solid rgba(244,63,94,.25)}.omni-stability-reason{font-size:10px;color:var(--text-muted);font-style:italic;line-height:1.3}.omni-section-badge{font-size:9px;font-weight:600;background:#00ff8814;color:var(--color-primary);padding:2px 6px;border-radius:4px;margin-left:6px;vertical-align:middle;text-transform:uppercase;letter-spacing:.05em}.tree-text-preview{font-size:10px;color:var(--text-muted);font-style:italic;max-width:80px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:0}.omni-search-hint{display:flex;align-items:center;gap:5px;padding:4px 14px;font-size:10px;color:var(--color-primary);opacity:.7;font-style:italic;background:#00ff8808;border-bottom:1px solid rgba(0,255,136,.08)}.omni-insight-panel{display:flex;flex-direction:column;gap:16px}.omni-insight-role{display:flex;align-items:center;gap:14px;padding:16px;background:#00ff880a;border-radius:8px;border:1px solid rgba(0,255,136,.12)}.omni-insight-emoji{font-size:28px;line-height:1}.omni-insight-role-name{font-size:14px;font-weight:700;color:var(--text-bright);font-family:JetBrains Mono,monospace}.omni-insight-interactable{margin-top:4px;display:flex;gap:6px}.omni-badge-green{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;color:#10b981;background:#10b9811a;padding:2px 8px;border-radius:4px;border:1px solid rgba(16,185,129,.2)}.omni-badge-gray{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;color:var(--text-muted);background:#ffffff0a;padding:2px 8px;border-radius:4px;border:1px solid var(--border-medium)}.omni-insight-warning{padding:10px 12px;background:#fbbf240f;border:1px solid rgba(251,191,36,.2);border-radius:6px;font-size:11px;color:#fbbf24}.omni-insight-description{display:flex;gap:10px;align-items:flex-start;padding:12px;background:#0000004d;border-radius:6px;border:1px solid var(--border-visible)}.omni-insight-icon{color:var(--color-primary);flex-shrink:0;margin-top:2px}.omni-insight-description p{font-size:12px;color:var(--text-main);line-height:1.6;margin:0}.omni-insight-best-locator,.omni-insight-attributes{display:flex;flex-direction:column;gap:8px}.omni-quick-facts{display:flex;flex-direction:column;gap:4px}.omni-quick-fact-row{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;border-radius:4px;background:#0003}.omni-quick-fact-label{font-size:11px;color:var(--text-muted);font-weight:600}.omni-quick-fact-value{font-size:11px;color:var(--text-main);font-family:JetBrains Mono,monospace}.omni-quick-fact-value.true{color:#10b981;font-weight:700}.omni-codegen-panel{display:flex;flex-direction:column;gap:12px}.omni-codegen-frameworks{display:flex;gap:4px;flex-wrap:wrap}.omni-fw-btn{flex:1;padding:6px 4px;background:#ffffff08;border:1px solid var(--border-visible);border-radius:6px;color:var(--text-muted);font-size:10px;font-weight:700;cursor:pointer;transition:all .15s;white-space:nowrap}.omni-fw-btn:hover{background:#ffffff0f;color:var(--text-bright)}.omni-fw-btn.active{background:#00ff8814;border-color:#0f86;color:var(--color-primary)}.omni-codegen-locator-selector{display:flex;align-items:center;gap:8px}.omni-codegen-label{font-size:10px;font-weight:700;text-transform:uppercase;color:var(--text-muted);white-space:nowrap;letter-spacing:.05em}.omni-fw-select{flex:1;padding:6px 8px;background:#0000004d;border:1px solid var(--border-visible);border-radius:6px;color:var(--text-bright);font-size:11px;outline:none;cursor:pointer}.omni-fw-select:focus{border-color:var(--color-primary)}.omni-codegen-output{display:flex;flex-direction:column;border-radius:8px;border:1px solid var(--border-visible);overflow:hidden}.omni-codegen-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:#00000080;border-bottom:1px solid var(--border-visible)}.omni-codegen-lang{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--color-primary);font-family:JetBrains Mono,monospace}.omni-codegen-pre{margin:0;padding:14px;background:var(--bg-glass);color:#e2e8f0;font-family:Fira Code,JetBrains Mono,monospace;font-size:11px;line-height:1.6;overflow-x:auto;white-space:pre}.omni-codegen-pre code{font-family:inherit;font-size:inherit;color:inherit}
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap";.device-info-card-container{background:var(--bg-card);min-height:180px;width:100%;display:flex;flex-direction:column;padding:12px;border-radius:8px;position:relative;box-shadow:0 4px 20px #0006;border:1px solid var(--border-visible);transition:all .2s cubic-bezier(.4,0,.2,1);overflow:hidden;background-image:radial-gradient(circle at 50% 50%,rgba(255,255,255,.02) 0%,transparent 100%)}.device-info-card-container:hover{border-color:#0f86;box-shadow:0 0 25px #00ff8814;transform:translateY(-2px);background:var(--bg-card-hover)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.header-left{display:flex;align-items:center;gap:8px}.platform-icon-wrapper{padding:4px;border-radius:4px;background:#ffffff08;color:var(--text-dim);display:flex;align-items:center;justify-content:center}.platform-icon-wrapper.ios{color:#88a}.platform-icon-wrapper.android{color:#3ddc84}.device-id-mono{font-family:JetBrains Mono,monospace;font-size:10px;color:var(--text-muted);background:#0000004d;padding:2px 6px;border-radius:4px;border:1px solid var(--border-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-status-badge{font-family:JetBrains Mono,monospace;font-size:var(--fs-xs);font-weight:700;text-transform:uppercase;padding:2px 8px;border-radius:4px;border:1px solid transparent}.device-status-badge.ready{color:var(--color-primary);background:#00ff880d;border-color:#0f83}.device-status-badge.busy{color:var(--color-amber);background:#ffb8000d;border-color:#ffb80033}.device-status-badge.maintenance{color:#fb923c;background:#fb923c0d;border-color:#fb923c33}.device-status-badge.offline{color:var(--text-dim);background:#ffffff08;border-color:var(--border-visible)}.device-info-main{margin-bottom:12px}.device-name{font-family:Outfit,sans-serif;font-size:14px;font-weight:700;color:var(--text-bright);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-subtext{font-size:10px;color:var(--text-dim);margin-top:2px;font-weight:500}.device-tags-inline{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;min-height:16px}.inline-tag{background:#00ff880d;color:var(--color-primary);border:1px solid rgba(0,255,136,.2);padding:2px 6px;border-radius:4px;font-size:8px;font-weight:800;font-family:JetBrains Mono,monospace;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;max-width:80px;overflow:hidden;text-overflow:ellipsis}.inline-tag-overflow{background:#ffffff0d;color:var(--text-dim);border:1px dashed var(--border-visible);padding:2px 6px;border-radius:4px;font-size:8px;font-weight:800;font-family:JetBrains Mono,monospace;display:flex;align-items:center;justify-content:center}.metrics-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:12px}.metric-item{display:flex;align-items:center;gap:4px;font-size:9px;color:var(--text-muted);font-family:JetBrains Mono,monospace;background:#0003;padding:4px;border-radius:4px;white-space:nowrap;overflow:hidden}.metric-item span.truncate{overflow:hidden;text-overflow:ellipsis}.metric-item.health.healthy{color:var(--color-primary)}.metric-item.health.unhealthy{color:var(--color-red)}.health-dot{width:4px;height:4px;border-radius:50%;background:currentColor}.heal-badge{margin-left:auto;font-size:8px;background:#ffffff1a;padding:0 4px;border-radius:2px;display:flex;align-items:center;gap:2px}.mini-battery{width:14px;height:8px;border:1px solid rgba(255,255,255,.2);border-radius:1px;padding:1px;position:relative}.mini-battery:after{content:"";position:absolute;right:-2px;top:2px;width:1.5px;height:2px;background:#fff3}.battery-fill{height:100%;background:var(--color-primary);border-radius:.5px}.mini-battery.low .battery-fill{background:var(--color-red)}.dynamic-data-layer{margin-top:auto;margin-bottom:10px;height:18px}.reservation-micro-banner,.session-micro-banner,.utilization-micro-info{font-size:9px;font-weight:700;display:flex;align-items:center;gap:6px;padding:2px 8px;border-radius:4px}.reservation-micro-banner{color:var(--color-sky);background:#38bdf81a;border-left:2px solid var(--color-sky)}.session-micro-banner{color:var(--color-amber);background:#ffb8001a;border-left:2px solid var(--color-amber)}.utilization-micro-info{color:var(--text-muted)}.action-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:6px;border-top:1px solid var(--border-subtle);padding-top:10px;width:100%}.tactical-btn{flex:1;min-width:0;height:30px;padding:0;display:flex;align-items:center;justify-content:center;gap:6px;border-radius:4px;background:#ffffff08;border:1px solid var(--border-visible);color:var(--text-muted);cursor:pointer;transition:all .2s ease;overflow:hidden}.tactical-btn:hover{background:#ffffff1a;color:var(--text-bright)}.tactical-btn.maintenance{border-color:#fbbf2433;background:#fbbf240d}.tactical-btn.maintenance:hover{background:#fbbf2426;border-color:#fbbf24}.tactical-btn.reserve{border-color:#38bdf833;background:#38bdf80d}.tactical-btn.reserve:hover,.tactical-btn.reserved:hover{background:#38bdf826;border-color:#38bdf8}.tactical-btn.exit-maintenance{color:var(--color-red);background:#ff44441a;border-color:var(--color-red)}.tactical-btn.control-btn{background:#00ff8814;border-color:var(--color-primary);color:var(--color-primary)}.tactical-btn.control-btn:hover:not(:disabled){background:var(--color-primary);color:#000;box-shadow:0 0 15px #00ff884d}.tactical-btn.control-btn:disabled{opacity:.3;cursor:not-allowed;filter:grayscale(1)}.device-info-card__body_block-device,.device-info-card__body_unblock-device{width:auto!important;height:28px!important;min-width:28px!important;padding:0 4px!important}.device-info-card__body_block-device-icon{margin:0!important}.reservation-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#020617f2;display:flex;justify-content:center;align-items:center;z-index:100000;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.reservation-modal{background-color:var(--bg-surface);border:1px solid var(--border-visible);border-radius:6px;width:450px;max-width:90%;box-shadow:0 20px 50px #00000080;animation:modal-enter .3s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden}@keyframes modal-enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.reservation-modal-header{padding:24px;display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid var(--border-visible);background:#0006}.reservation-modal-title{display:flex;align-items:center;gap:12px;font-size:1.25rem;font-weight:800;color:var(--text-bright);text-transform:uppercase;font-family:Outfit,sans-serif;letter-spacing:-.01em}.reservation-modal-body{padding:24px;display:flex;flex-direction:column;gap:20px}.device-id-badge{display:inline-flex;align-items:center;gap:8px;background:#0006;padding:8px 16px;border-radius:6px;border:1px solid var(--border-visible);font-family:JetBrains Mono,monospace;font-size:11px;width:fit-content;margin-bottom:12px}.reservation-modal p{color:var(--text-dim);font-size:13px;line-height:1.6;margin:0}.reservation-form-group{margin-bottom:0}.reservation-form-group label{display:block;color:var(--text-dim);font-size:var(--fs-xs);font-weight:800;margin-bottom:8px;text-transform:uppercase;letter-spacing:.1em;font-family:JetBrains Mono,monospace}.reservation-input{width:100%;background-color:#0000004d;border:1px solid var(--border-visible);border-radius:6px;padding:12px 16px;color:var(--text-bright);font-size:13px;box-sizing:border-box;transition:all .2s;font-family:JetBrains Mono,monospace}.reservation-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 10px #00ff881a}.duration-selector{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:8px}.duration-option{background-color:#0000004d;border:1px solid var(--border-visible);color:var(--text-dim);padding:10px;border-radius:6px;font-size:11px;cursor:pointer;text-align:center;transition:all .2s;font-weight:800;font-family:JetBrains Mono,monospace}.duration-option:hover{border-color:var(--text-muted);background-color:#ffffff05}.duration-option.active{background-color:#00ff880d;border-color:var(--color-primary);color:var(--color-primary);box-shadow:0 0 10px #00ff881a}.reservation-actions{padding:24px;display:flex;justify-content:flex-end;gap:12px;background:#0006;border-top:2px solid var(--border-visible)}.btn-cancel{background:transparent;border:1px solid var(--border-visible);color:var(--text-dim);padding:10px 24px;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;transition:all .2s;text-transform:uppercase;font-family:JetBrains Mono,monospace}.btn-reserve{background:var(--color-primary);color:var(--bg-page);border:none;padding:10px 24px;border-radius:6px;font-size:12px;font-weight:800;cursor:pointer;transition:all .2s;text-transform:uppercase;font-family:JetBrains Mono,monospace;box-shadow:0 0 15px #0f83}.btn-reserve:hover:not(:disabled){background:#00e67a;box-shadow:0 0 25px #0f86}.btn-reserve:disabled{background-color:var(--border-visible);color:var(--text-dim);cursor:not-allowed;box-shadow:none;filter:grayscale(1);opacity:.5}.error-message{color:#ff4d4d;font-size:11px;margin-top:12px;background-color:#ff4d4d0d;padding:8px 12px;border-radius:6px;border:1px solid rgba(255,77,77,.2);font-family:JetBrains Mono,monospace}.tag-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#020617f2;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);display:flex;align-items:center;justify-content:center;z-index:100000}.tag-modal-container{background:var(--bg-surface);width:100%;max-width:450px;border-radius:6px;border:1px solid var(--border-visible);box-shadow:0 20px 50px #00000080;overflow:hidden;animation:slideUp .3s cubic-bezier(.16,1,.3,1);position:relative}@keyframes slideUp{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}.tag-modal-header{padding:24px;display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid var(--border-visible);background:#0006}.tag-modal-title{display:flex;align-items:center;gap:12px;font-size:1.25rem;font-weight:800;color:var(--text-bright);text-transform:uppercase;font-family:Outfit,sans-serif;letter-spacing:-.01em}.title-icon{color:var(--color-primary)}.close-btn{background:transparent;border:none;color:var(--text-dim);cursor:pointer;padding:4px;border-radius:6px;transition:all .2s;display:flex;align-items:center;justify-content:center}.close-btn:hover{background:#ffffff0d;color:var(--text-bright)}.tag-modal-body{padding:24px;display:flex;flex-direction:column;gap:20px}.device-id-badge{display:inline-flex;align-items:center;gap:8px;background:#0006;padding:8px 16px;border-radius:6px;border:1px solid var(--border-visible);font-family:JetBrains Mono,monospace;font-size:11px}.device-id-badge .label{color:var(--text-dim);text-transform:uppercase;font-weight:800;font-size:10px}.device-id-badge .value{color:var(--color-primary);font-weight:800}.tag-input-section label,.tags-display-section label{display:block;font-size:var(--fs-xs);font-weight:800;color:var(--text-dim);text-transform:uppercase;letter-spacing:.1em;margin-bottom:8px;font-family:JetBrains Mono,monospace}.tag-input-section input{flex:1;background:#0000004d;border:1px solid var(--border-visible);border-radius:6px;padding:10px 14px;color:var(--text-bright);font-size:13px;transition:all .2s;font-family:JetBrains Mono,monospace}.tag-input-section input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 15px #0f83}.add-inline-btn{background:var(--color-primary);color:var(--bg-page);border:none;border-radius:6px;width:40px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}.add-inline-btn:hover:not(:disabled){background:#00e67a;box-shadow:0 0 15px #00ff884d}.add-inline-btn:disabled{background:var(--border-visible);color:var(--text-dim);cursor:not-allowed;filter:grayscale(1);opacity:.5}.tags-list{display:flex;flex-wrap:wrap;gap:8px;min-height:48px;padding:12px;background:#0006;border-radius:6px;border:1px dashed var(--border-visible)}.tag-pill-editable{display:flex;align-items:center;gap:6px;background:#00ff880d;color:var(--color-primary);padding:6px 12px;border-radius:6px;font-size:11px;font-weight:800;border:1px solid rgba(0,255,136,.3);font-family:JetBrains Mono,monospace;text-transform:uppercase;letter-spacing:.05em;box-shadow:0 0 10px #00ff880d}.remove-tag{background:transparent;border:none;color:var(--color-primary);cursor:pointer;padding:2px;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:all .2s;opacity:.7}.remove-tag:hover{background:#0f83;opacity:1}.tag-modal-footer{padding:24px;display:flex;gap:12px;justify-content:flex-end;background:#0006;border-top:2px solid var(--border-visible)}.btn-cancel{padding:10px 24px;border-radius:6px;background:transparent;border:1px solid var(--border-visible);color:var(--text-dim);font-weight:700;cursor:pointer;transition:all .2s;text-transform:uppercase;font-size:12px;font-family:JetBrains Mono,monospace}.btn-cancel:hover{color:var(--text-bright);border-color:var(--text-muted)}.btn-save{padding:10px 24px;border-radius:6px;background:var(--color-primary);border:none;color:var(--bg-page);font-weight:800;cursor:pointer;transition:all .2s;box-shadow:0 0 15px #0f83;text-transform:uppercase;font-size:12px;font-family:JetBrains Mono,monospace}.btn-save:hover:not(:disabled){background:#00e67a;box-shadow:0 0 25px #0f86}.btn-save:disabled{background-color:var(--border-visible);color:var(--text-dim);cursor:not-allowed;box-shadow:none;filter:grayscale(1);opacity:.5}.device-explorer-card-container{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;padding:16px;flex:1}.device-explorer-card-container::-webkit-scrollbar{width:6px}.device-explorer-card-container::-webkit-scrollbar-thumb{background:var(--border-medium);border-radius:8px}.device-explorer-container{display:flex;flex-direction:column;width:100%;gap:var(--space-md)}.device-explorer-header-container{display:flex;align-items:center;justify-content:space-between;padding:4px 24px;background:#0f0f1ae6;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:2px solid var(--border-visible);position:sticky;top:0;z-index:1002;gap:var(--space-xl);flex-wrap:nowrap;box-shadow:0 10px 30px #0006}.device-explorer-header-left-container{display:flex;align-items:center;gap:24px;flex:1;min-width:0}.device-explorer-header-entry{display:flex;flex-direction:column;gap:4px;min-width:0}.device-explorer-header-entry-header{font-size:var(--fs-xs);font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.1em;font-family:JetBrains Mono,monospace}.device-explorer-header-value{display:flex;align-items:center;gap:8px}.device-explorer-header__platform-btn,.device-explorer-header__device-state{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:6px;background:#0006;border:1px solid var(--border-visible);color:var(--text-muted);font-size:var(--fs-sm);font-weight:600;text-transform:uppercase;letter-spacing:.05em;cursor:pointer;transition:all .2s ease}.device-explorer-header__platform-btn:hover,.device-explorer-header__device-state:hover{background:#ffffff08;color:var(--text-bright);border-color:var(--border-subtle)}.device-explorer-header__platform-btn.selected,.device-explorer-header__device-state.selected{background:#00ff880d;color:var(--color-primary);border-color:#00ff884d;box-shadow:0 0 10px #00ff881a}.device-explorer-header__device-state.ready.selected{border-color:var(--color-primary);box-shadow:0 0 15px #0f83}.device-explorer-header__device-state.busy.selected{background:#ffb8000d;color:var(--color-amber);border-color:#ffb8004d;box-shadow:0 0 15px #ffb8001a}.device-explorer-header__device-state.offline.selected{background:#4a4a6a1a;color:var(--text-dim);border-color:var(--text-dim)}.device-explorer-search-wrapper{position:relative;width:320px}.device-explorer-search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);pointer-events:none;opacity:.5}.device-explorer-header-text-filter{width:100%;height:32px;padding:0 12px 0 36px;border-radius:6px;border:1px solid var(--border-visible);background:#0006;font-family:JetBrains Mono,monospace;font-size:var(--fs-sm);color:var(--text-bright);transition:all .2s ease}.device-explorer-header-text-filter:focus{outline:none;border-color:var(--color-primary);background:#0009;box-shadow:0 0 15px #00ff881a}.device-explorer-header-text-filter::placeholder{color:var(--text-dim);text-transform:uppercase;font-size:var(--fs-xs);letter-spacing:.1em}.device-explorer-header-right-container{display:flex;align-items:center;gap:12px}.device-explorer-header-filter-count{display:flex;align-items:center;gap:8px;padding-right:16px;border-right:1px solid var(--border-subtle)}@media (max-width: 1024px){.device-explorer-header-container{flex-direction:column;align-items:stretch;gap:var(--space-md);padding:var(--space-md)}.device-explorer-header-left-container{flex-wrap:wrap;gap:var(--space-md)}.device-explorer-header-entry{flex:1;min-width:120px}.device-explorer-search-wrapper{width:100%}.device-explorer-header-right-container{justify-content:space-between;width:100%}}@media (max-width: 640px){.device-explorer-header-left-container{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}.device-explorer-header-right-container{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.device-explorer-header-filter-count{justify-content:space-between;padding-right:0}}.device-explorer-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 40px;background:#0f0f1a66;border:1px dashed var(--border-visible);border-radius:var(--radius-md);text-align:center;margin:60px auto 40px;max-width:600px;gap:var(--space-md)}.device-explorer-empty-icon{width:64px;height:64px;background:#00ff880d;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--color-primary);margin-bottom:8px;border:1px solid rgba(0,255,136,.1)}.device-explorer-empty h3{font-size:1.5rem;font-weight:700;color:var(--text-bright);margin:0;font-family:Outfit,sans-serif}.device-explorer-empty p{color:var(--text-muted);font-size:14px;max-width:400px;line-height:1.6;margin:0}.device-explorer-empty .Button{margin-top:8px}.device-control-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--bg-app);z-index:6000;display:flex;flex-direction:column;padding:0;margin:0;animation:modal-fade-in .25s ease-out}.device-control-modal{flex:1;width:100%;height:100%;overflow:hidden;display:flex;flex-direction:column;background:var(--bg-app)}@keyframes modal-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.device-control-view{display:flex;flex-direction:column;height:100%;width:100%;background:var(--bg-app);color:var(--text-main);overflow:hidden;font-family:Inter,sans-serif}*{scrollbar-width:thin;scrollbar-color:var(--border-medium) transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-medium);border-radius:8px;transition:background .2s}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.control-view-top-bar{display:flex;align-items:center;padding:0 24px;height:64px;background:var(--bg-surface);border-bottom:2px solid var(--border-visible);gap:24px;z-index:100;position:relative}.device-info-mini{display:flex;align-items:center;gap:16px}.device-pill{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;padding:2px 10px;border-radius:6px;letter-spacing:.1em;font-family:JetBrains Mono,monospace}.platform-pill{background:#00ff880d;color:var(--color-primary);border:1px solid rgba(0,255,136,.2)}.version-pill{background:#ffb8000d;color:var(--color-amber);border:1px solid rgba(255,184,0,.2)}.reserved-pill{background:#38bdf81a;color:#38bdf8;border:1px solid rgba(56,189,248,.3);animation:pulse-reserved-pill 2s infinite ease-in-out}.device-name-text{font-family:Outfit,sans-serif;font-weight:800;font-size:var(--fs-md);color:var(--text-bright);letter-spacing:.02em;text-transform:uppercase}.code-font{font-family:JetBrains Mono,monospace;font-size:var(--fs-xs);color:var(--text-dim);background:#0006;padding:4px 10px;border-radius:6px;border:1px solid var(--border-visible)}.back-to-devices-btn{background:#0006;color:var(--text-dim);border:1px solid var(--border-visible);padding:8px 16px;border-radius:6px;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;display:flex;align-items:center;gap:8px;transition:all .2s;cursor:pointer}.back-to-devices-btn:hover{background:#ffffff08;border-color:var(--color-primary);color:var(--color-primary)}.control-view-main{display:flex;flex-direction:row;flex:1;overflow:hidden;padding:24px;gap:32px;background:var(--bg-page);justify-content:center;align-items:stretch;min-height:0}.control-view-main.is-landscape{align-items:flex-start}.control-view-main.omni-mode .device-preview-column{display:none}.control-view-main.omni-mode .interaction-tabs{margin-bottom:var(--space-md);border-radius:var(--radius-sm)}.control-view-main.omni-mode .device-interactions-column{max-width:100%;padding:0 0 var(--space-md) 0}.device-preview-column{display:flex;flex-direction:column;align-items:center;gap:24px;flex-shrink:0;min-width:400px}.device-screen-wrapper{position:relative;padding:12px;background:#000;border-radius:48px;box-shadow:0 0 0 2px #334155,0 20px 50px #0009,0 0 80px #10b9810d;border:1px solid rgba(255,255,255,.1);transition:all .5s cubic-bezier(.16,1,.3,1)}.device-screen-wrapper:hover{transform:translateY(-4px) scale(1.005);box-shadow:0 0 0 2px var(--primary),0 30px 60px #000c,0 0 100px #10b9811a}.device-stream-canvas{position:relative;background:#000;border-radius:28px;overflow:hidden;cursor:crosshair;transition:box-shadow .3s ease,border-color .3s ease;outline:none;border:2px solid transparent}.device-stream-canvas.focused{border-color:var(--primary);box-shadow:0 0 20px var(--primary-glow)}.device-stream-image{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.device-stream-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;width:100%;color:var(--text-muted);gap:16px;background:radial-gradient(circle at center,#0f172a,#020617)}.device-footer-actions{display:flex;width:100%;background:#0f172acc;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:16px;border:1px solid rgba(255,255,255,.08);padding:6px;gap:6px;box-shadow:0 10px 25px -5px #0006,0 0 15px #10b9810d}.footer-action-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:12px;color:var(--text-muted);font-size:11px;text-transform:uppercase;font-weight:700;letter-spacing:.05em;border:none;background:transparent;border-radius:var(--radius-sm);transition:all .2s ease}.footer-action-btn:hover{background:#ffffff0d;color:var(--text-main)}.footer-action-btn.active{background:var(--primary);color:var(--text-inverse);box-shadow:0 0 10px var(--primary-glow)}.footer-divider{width:1px;height:24px;background:var(--border-medium);margin:auto 4px}.hint-text{font-size:var(--fs-xs);color:var(--text-muted);font-style:italic;margin-top:4px}.device-interactions-column{flex:1;display:flex;flex-direction:column;gap:0;min-width:450px;max-width:1200px;height:100%;overflow:hidden;min-height:0}.interaction-tabs{display:flex;gap:4px;background:var(--bg-surface);padding:4px;border-radius:6px;border:1px solid var(--border-visible);margin-bottom:16px;flex-shrink:0}.tab-btn{flex:1;padding:8px 12px;background:transparent;border:none;font-size:var(--fs-xs);font-weight:800;color:var(--text-dim);text-transform:uppercase;letter-spacing:.1em;border-radius:4px;cursor:pointer;transition:all .2s;font-family:JetBrains Mono,monospace}.tab-btn:hover{color:var(--text-bright);background:#ffffff05}.tab-btn.active{color:var(--bg-page);background:var(--color-primary);box-shadow:0 0 15px #00ff884d}.interactions-scroll-area{flex:1;overflow-y:auto;overflow-x:hidden;padding-right:8px;display:flex;flex-direction:column}.action-card{background:#0003;border-radius:6px;padding:20px;border:1px solid var(--border-visible);transition:all .2s;display:flex;flex-direction:column;gap:16px}.action-card:hover{background:#ffffff03;border-color:var(--color-primary);box-shadow:0 4px 20px #0006}.action-card-title{font-family:Outfit,sans-serif;font-size:13px;font-weight:800;color:var(--text-bright);display:flex;align-items:center;gap:12px;text-transform:uppercase;letter-spacing:.1em;opacity:.9}.compact-label{font-size:11px;color:var(--text-muted);font-weight:600;text-transform:uppercase;letter-spacing:.05em}.btn-sm{padding:8px 16px;font-size:11px}.type-input-field.compact,.app-select-dropdown.compact{padding:10px;font-size:13px}.file-select-box.compact{padding:var(--space-md);margin-bottom:8px}.clipboard-display.compact{min-height:48px;max-height:80px;overflow-y:auto;padding:8px;font-size:11px;background:#0006}.actions-row{display:flex;gap:var(--space-xl)}.install-app-section,.uninstall-app-section{flex:1;display:flex;flex-direction:column;gap:12px;min-width:0}.file-select-box{background:#ffffff08;border:2px dashed var(--border-medium);border-radius:var(--radius-md);padding:var(--space-xl);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);transition:all .3s ease}.file-select-box:hover{background:#10b9810d;border-color:var(--primary)}.btn-premium,.btn-secondary{padding:10px 20px;border-radius:var(--radius-sm);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.05em;cursor:pointer;transition:all .2s cubic-bezier(.16,1,.3,1);display:flex;align-items:center;justify-content:center;gap:8px;border:none}.btn-premium{background:var(--primary);color:#000}.btn-premium:hover:not(:disabled){background:var(--primary-hover);transform:translateY(-1px);box-shadow:0 4px 12px var(--primary-glow)}.btn-secondary{background:#ffffff0d;color:var(--text-secondary);border:1px solid var(--border-medium)}.btn-secondary:hover:not(:disabled){background:#ffffff1a;color:var(--text-main);border-color:var(--text-muted)}.btn-secondary.active{background:var(--primary-soft);color:var(--primary);border-color:var(--primary)}.btn-sm{padding:6px 12px!important;font-size:var(--fs-xs)!important}.type-input-field,.app-select-dropdown{width:100%;padding:10px 14px;border-radius:var(--radius-sm);border:1px solid var(--border-medium);background:#0003;font-size:13px;color:var(--text-main);transition:all .2s ease}.type-input-field:focus{outline:none;border-color:var(--primary);background:#0006;box-shadow:0 0 0 3px var(--primary-soft)}.clipboard-display{background:var(--bg-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:var(--radius-md);border:1px solid var(--border-medium);padding:var(--space-md);margin-top:var(--space-md);font-family:Fira Code,monospace;font-size:12px;color:#38bdf8;min-height:80px;box-shadow:inset 0 2px 10px #00000080}.log-display-area{flex:1;min-height:0;overflow-y:auto;font-family:Fira Code,monospace;font-size:11px;line-height:1.5;background:var(--bg-glass);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);padding:16px;border-radius:0 0 var(--radius-md) var(--radius-md);color:var(--text-muted);box-shadow:inset 0 2px 20px #00000080;border:1px solid var(--border-medium);border-top:none;scrollbar-width:thin;scrollbar-color:var(--primary) transparent}.log-line{display:flex;gap:8px;margin-bottom:2px;white-space:pre-wrap;word-break:break-all;border-left:2px solid transparent;padding-left:8px;transition:background .2s ease}.log-line:hover{background:#ffffff08}.log-index{color:var(--text-muted);opacity:.3;-webkit-user-select:none;user-select:none;min-width:32px;text-align:right;font-size:var(--fs-xs)}.log-content{flex:1}.log-notice{border-left-color:#38bdf8;color:#e2e8f0}.log-error{border-left-color:#f43f5e;color:#fecdd3;background:#f43f5e0d}.log-warn{border-left-color:#fbbf24;color:#fef3c7}.log-debug{border-left-color:transparent;color:var(--text-muted)}.log-toolbar{display:flex;justify-content:space-between;align-items:center;background:#0f172a99;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:8px 16px;border-radius:var(--radius-md) var(--radius-md) 0 0;border:1px solid var(--border-medium);border-bottom:none}.log-filter-group,.log-actions-group{display:flex;gap:8px;align-items:center}.log-search-box{position:relative;display:flex;align-items:center}.search-icon-inline{position:absolute;left:8px;color:var(--text-muted);pointer-events:none;opacity:.6}.log-search-box .type-input-field.tiny{padding-left:28px!important;width:140px;background:#0003;border-color:var(--border-subtle)}.log-stat-pill{font-size:var(--fs-xs);background:#10b9811a;color:var(--primary);padding:3px 8px;border-radius:4px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;gap:6px}.log-live-dot{width:8px;height:8px;border-radius:50%;background:var(--text-muted);flex-shrink:0;transition:background .3s ease}.log-live-dot.active{background:#22c55e;box-shadow:0 0 8px #22c55e99;animation:pulse-dot 2s infinite}@keyframes pulse-dot{0%,to{opacity:1;box-shadow:0 0 8px #22c55e99}50%{opacity:.6;box-shadow:0 0 16px #22c55e66}}.log-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;min-height:200px}.log-empty-title{font-family:Outfit,sans-serif;font-size:14px;font-weight:700;color:var(--text-main);margin:0 0 6px;letter-spacing:.02em}.log-empty-subtitle{font-size:12px;color:var(--text-muted);max-width:300px;margin:0;line-height:1.5}.animate-pulse{animation:pulse-op 1.5s infinite}@keyframes pulse-op{0%,to{opacity:1}50%{opacity:.4}}.tab-content{animation:slideUpFade .4s cubic-bezier(.16,1,.3,1);display:flex;flex-direction:column;flex:1;min-height:0}@keyframes slideUpFade{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.gestures-grid-container{display:flex;flex-direction:column;align-items:center;gap:12px}.gestures-dpad{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:8px;width:140px;height:140px;padding:12px;background:#0003;border-radius:50%;border:1px solid rgba(255,255,255,.05)}.dpad-btn{display:flex;align-items:center;justify-content:center;background:#ffffff08;border:1px solid rgba(255,255,255,.05);border-radius:8px;color:var(--text-muted);cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1)}.dpad-btn:hover{background:var(--primary);border-color:var(--primary);color:#fff;transform:scale(1.1);box-shadow:0 0 20px var(--primary-glow);z-index:2}.dpad-btn:active{transform:scale(.95)}.dpad-center{background:radial-gradient(circle,var(--primary-glow) 0%,transparent 70%);border-radius:50%;opacity:.2}.app-mgmt-content{display:flex;flex-direction:row;gap:var(--space-xl);align-items:flex-start}.upload-box-row,.uninstall-controls-row{display:flex;gap:12px;align-items:center;margin-top:8px}.file-upload-launcher{flex:1;display:flex;align-items:center;gap:12px;padding:10px 16px;background:#ffffff08;border:1px dashed var(--border-medium);border-radius:var(--radius-md);cursor:pointer;font-size:13px;color:var(--text-muted);transition:all .2s ease}.file-upload-launcher:hover{background:#10b9810d;border-color:var(--primary);color:var(--text-main)}.divider-v{width:1px;align-self:stretch;background:linear-gradient(180deg,transparent,var(--border-medium),transparent)}.select-wrapper{flex:1;position:relative;display:flex;align-items:center}.select-loader{position:absolute;right:32px;color:var(--primary)}.btn-destructive{background:#ef444433;color:#ef4444;border:1px solid rgba(239,68,68,.3);padding:10px 20px;border-radius:var(--radius-md);font-weight:700;font-size:12px;display:flex;align-items:center;gap:8px;transition:all .3s ease}.btn-destructive:hover:not(:disabled){background:var(--color-red);color:#fff;box-shadow:0 4px 15px #ef444466}.manual-input-box{margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.05)}.type-input-field.tiny{padding:8px 12px;font-size:12px;opacity:.6}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.action-card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.screenshot-workspace{display:flex;gap:20px;flex:1;min-height:0;overflow:hidden}.screenshot-gallery-sidebar{width:180px;display:flex;flex-direction:column;gap:16px;flex-shrink:0;min-height:0}.take-screenshot-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%}.screenshot-thumbnails-list{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding-right:4px;min-height:0}.screenshot-thumb-item{position:relative;border-radius:8px;overflow:hidden;aspect-ratio:9/16;background:#0006;border:2px solid transparent;cursor:pointer;transition:all .2s ease;flex-shrink:0}.screenshot-thumb-item:hover{border-color:#10b98166}.screenshot-thumb-item.active{border-color:var(--primary);box-shadow:0 0 12px var(--primary-glow)}.screenshot-thumb-item img{width:100%;height:100%;object-fit:cover;opacity:.7;transition:opacity .2s ease}.screenshot-thumb-item:hover img,.screenshot-thumb-item.active img{opacity:1}.thumb-time{position:absolute;bottom:0;left:0;right:0;background:#000000b3;color:#fff;font-size:var(--fs-xs);padding:2px 4px;text-align:center;font-family:JetBrains Mono,monospace}.thumb-delete-btn{position:absolute;top:4px;right:4px;width:20px;height:20px;border-radius:4px;background:#ef4444cc;color:#fff;border:none;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.screenshot-thumb-item:hover .thumb-delete-btn{opacity:1}.thumb-delete-btn:hover{background:var(--color-red)}.screenshot-main-preview{flex:1;background:#0000004d;border-radius:8px;display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative;border:1px solid rgba(255,255,255,.05);min-height:0}.preview-container{display:flex;flex-direction:column;width:100%;height:100%;position:relative}.preview-image-wrapper{flex:1;position:relative;min-height:0}.preview-image-wrapper img{position:absolute;top:20px;bottom:20px;left:20px;right:20px;max-width:calc(100% - 40px);max-height:calc(100% - 40px);object-fit:contain;margin:auto;border-radius:4px;box-shadow:0 10px 40px #00000080}.preview-footer{padding:16px 24px;background:#0006;border-top:1px solid rgba(255,255,255,.05);display:flex;justify-content:space-between;align-items:center}.preview-meta{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text-muted)}.meta-label{text-transform:uppercase;font-weight:700;opacity:.5}.meta-divider{opacity:.2}.preview-actions{display:flex;gap:12px}.btn-text-only{background:transparent;border:none;color:var(--text-muted);font-size:var(--fs-xs);font-weight:700;letter-spacing:.05em;cursor:pointer;padding:4px 8px;border-radius:4px}.btn-text-only:hover{color:#ef4444;background:#ef44440d}.preview-empty-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--text-muted);font-size:13px;opacity:.6}.empty-gallery-state{display:flex;align-items:center;justify-content:center;height:100px;color:var(--text-muted);font-size:11px;font-style:italic;opacity:.5}.interactions-scroll-area.terminal-mode{overflow:hidden;padding:0;display:flex;flex-direction:column;height:100%;min-height:0}.interactions-scroll-area.terminal-mode .action-card.full-height{height:100%;min-height:0;border-radius:0;border:none}.interactions-scroll-area.screenshot-mode{overflow:hidden;height:100%;min-height:0;display:flex;flex-direction:column;padding:0}.interactions-scroll-area.screenshot-mode .tab-content{display:flex;flex-direction:column;flex:1 1 0%;min-height:0;padding:0}.interactions-scroll-area.screenshot-mode .action-card.screenshot-card{display:flex;flex-direction:column;flex:1;min-height:0;margin-bottom:0;border-radius:0;border:none;padding:0;overflow:hidden}.terminal-container{display:flex;flex-direction:column;background-color:var(--bg-page);color:var(--text-bright);font-family:JetBrains Mono,monospace;border-radius:6px;overflow:hidden;height:100%;max-height:100%;width:100%;min-height:0;border:1px solid var(--border-visible);box-shadow:0 20px 50px #00000080;position:relative}.terminal-header{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;background-color:#0006;border-bottom:2px solid var(--border-visible)}.terminal-controls{display:flex;gap:8px;width:60px}.dot{width:8px;height:8px;border-radius:4px;border:1px solid rgba(255,255,255,.1)}.dot.red{background-color:#ff4d4d}.dot.yellow{background-color:#fc0}.dot.green{background-color:var(--color-primary)}.terminal-title{font-size:var(--fs-xs);font-weight:800;color:var(--text-dim);text-transform:uppercase;letter-spacing:.15em;font-family:JetBrains Mono,monospace}.terminal-actions{display:flex;justify-content:flex-end;width:60px}.terminal-action-btn{background:transparent;border:1px solid var(--border-visible);color:var(--text-dim);font-size:var(--fs-xs);font-weight:800;padding:4px 10px;border-radius:6px;cursor:pointer;transition:all .2s;text-transform:uppercase;font-family:JetBrains Mono,monospace}.terminal-action-btn:hover{color:var(--text-bright);background:#ffffff0d;border-color:var(--text-muted)}.terminal-history{flex:1;overflow-y:auto;overflow-x:hidden;padding:20px;font-size:12px;line-height:1.6;scrollbar-width:thin;scrollbar-color:var(--color-primary) var(--bg-page);min-height:0}.terminal-history::-webkit-scrollbar{width:6px}.terminal-history::-webkit-scrollbar-track{background:transparent}.terminal-history::-webkit-scrollbar-thumb{background-color:var(--border-visible);border-radius:4px}.terminal-history::-webkit-scrollbar-thumb:hover{background-color:var(--color-primary)}.terminal-line{margin-bottom:6px;white-space:pre-wrap;word-break:normal;overflow-wrap:anywhere}.terminal-line.command{color:var(--color-primary);font-weight:600}.terminal-line.output{color:var(--text-body)}.terminal-line.error{color:#ff4d4d}.terminal-line.system{color:var(--text-dim);font-style:italic;border-bottom:1px dashed var(--border-visible);padding-bottom:6px;margin-bottom:12px}.terminal-input-area{display:flex;align-items:center;padding:16px 20px;background-color:#0006;border-top:2px solid var(--border-visible)}.terminal-prompt{color:var(--color-primary);margin-right:12px;font-weight:800;-webkit-user-select:none;user-select:none}.terminal-input{flex:1;background:transparent;border:none;color:var(--text-bright);font-family:inherit;font-size:13px;outline:none;font-weight:500}.terminal-input::placeholder{color:#ffffff1a}.terminal-loading-indicator{display:inline-block;width:8px;height:16px;background-color:var(--color-primary);animation:blink 1s step-end infinite;vertical-align:middle;margin-left:8px;border-radius:4px}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.omni-inspector-container{display:flex;flex-direction:column;height:100%;background:var(--bg-page);color:var(--text-main);font-family:Inter,sans-serif;overflow:hidden;position:relative}.omni-main-content{flex:1;display:flex;gap:16px;padding:16px;overflow:hidden;height:100%}.omni-screenshot-panel{width:380px;min-width:320px;flex-shrink:0;display:flex;flex-direction:column;background:var(--bg-surface);border-radius:6px;border:1px solid var(--border-visible);overflow:hidden}.omni-screenshot-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#0006;border-bottom:2px solid var(--border-visible)}.omni-screenshot-title{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--text-bright);opacity:.9;font-family:JetBrains Mono,monospace}.omni-mode-toggle{display:flex;background:#0000004d;padding:2px;border-radius:6px;border:1px solid var(--border-visible)}.omni-mode-btn{display:flex;align-items:center;gap:6px;padding:4px 10px;background:transparent;border:none;border-radius:4px;color:var(--text-dim);font-size:var(--fs-xs);font-weight:800;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.05em;font-family:JetBrains Mono,monospace}.omni-mode-btn.active{background:var(--color-primary);color:var(--bg-page);box-shadow:0 0 10px #00ff884d}.omni-refresh-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;background:var(--color-primary);color:var(--bg-page);border:none;border-radius:6px;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;cursor:pointer;transition:all .2s;font-family:JetBrains Mono,monospace}.omni-refresh-btn:hover:not(:disabled){background:#00e67a;box-shadow:0 0 15px #0f86}.omni-refresh-btn:disabled{opacity:.5;cursor:not-allowed}.omni-screenshot-container{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:12px;background:var(--bg-glass);position:relative;overflow:hidden}.omni-screenshot-wrapper{position:relative;max-width:100%;max-height:100%;height:100%;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}.omni-screenshot-wrapper.interactable{cursor:crosshair}.omni-screenshot-img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:4px;display:block}.omni-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.omni-overlay>*{pointer-events:auto}.omni-hit-area{position:absolute;cursor:pointer;background:transparent;transition:background .15s ease}.omni-hit-area:hover{background:#10b98133}.omni-frame-hover{position:absolute;border:2px solid var(--primary);background:#10b9811a;pointer-events:none;border-radius:6px}.omni-frame-select{position:absolute;border:2px solid var(--primary);background:#10b98133;pointer-events:none;box-shadow:0 0 20px var(--primary-glow);border-radius:6px}.omni-loading-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#000c;color:var(--text-muted);font-size:11px}.omni-spinner{width:24px;height:24px;border:2px solid var(--border-medium);border-top-color:var(--primary);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.omni-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--text-muted);text-align:center;padding:32px;font-size:12px}.omni-empty-state svg{opacity:.3}.omni-empty-state.small{padding:24px;font-size:11px}.omni-tree-panel{flex:1;min-width:0;display:flex;flex-direction:column;background:#0003;border-radius:6px;border:1px solid var(--border-visible);overflow:hidden;min-height:0}.omni-tree-content{flex:1;min-height:0;overflow-y:auto;padding:8px;scrollbar-width:thin;scrollbar-color:var(--border-medium) transparent}.omni-tree-header{display:flex;align-items:center;justify-content:space-between;padding:12px;background:#0006;border-bottom:2px solid var(--border-visible)}.omni-tree-title{display:flex;align-items:center;gap:8px;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--text-bright);opacity:.9;font-family:JetBrains Mono,monospace}.omni-count-badge{font-size:var(--fs-xs);background:#00ff880d;color:var(--color-primary);padding:2px 8px;border-radius:6px;font-weight:800;text-transform:uppercase;font-family:JetBrains Mono,monospace}.omni-action-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:#ffffff05;border:1px solid var(--border-visible);border-radius:6px;color:var(--text-dim);cursor:pointer;transition:all .2s}.omni-action-btn:hover{background:#ffffff0d;color:var(--color-primary);border-color:var(--color-primary)}.omni-tree-search{display:flex;align-items:center;gap:8px;margin:12px;padding:8px 12px;background:#0006;border:1px solid var(--border-visible);border-radius:6px;transition:all .2s}.omni-tree-search:focus-within{border-color:var(--color-primary);box-shadow:0 0 10px #00ff881a}.omni-tree-search input{flex:1;background:transparent;border:none;color:var(--text-bright);font-size:11px;outline:none;font-family:JetBrains Mono,monospace}.tree-item{display:flex;align-items:center;gap:8px;padding:8px 12px;margin-bottom:2px;border-radius:4px;cursor:pointer;font-size:12px;color:var(--text-dim);transition:all .15s;border:1px solid transparent;min-height:36px;background:#0000001a}.tree-item:hover{background:#ffffff05;color:var(--text-bright)}.tree-item.selected{background:#00ff8814;color:var(--color-primary);border-color:#0f86;box-shadow:inset 0 0 0 1px #0f83}.tree-item.hovered:not(.selected){background:#ffffff0a;border-color:#ffffff1a;color:var(--text-bright)}.tree-node{display:flex;flex-direction:column}.tree-children{margin-left:0}.tree-toggle{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:none;background:transparent;color:var(--text-muted);cursor:pointer;border-radius:3px;flex-shrink:0;padding:0;transition:color .15s,background .15s}.tree-toggle:hover{color:var(--color-primary);background:#00ff881a}.tree-toggle-spacer{display:inline-block;width:18px;flex-shrink:0}.tree-item-indent{flex-shrink:0}.tree-icon{color:var(--text-muted);flex-shrink:0;opacity:.6}.tree-label{flex:1;font-size:12px;font-family:JetBrains Mono,Fira Code,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-badge{font-size:10px;font-weight:700;background:#ffffff0f;color:var(--text-muted);padding:1px 5px;border-radius:4px;flex-shrink:0;font-family:JetBrains Mono,monospace}.omni-details-panel{flex:1;min-width:280px;max-width:360px;display:flex;flex-direction:column;background:var(--bg-surface);border-radius:6px;border:1px solid var(--border-visible);overflow:hidden;min-height:0}.omni-details-content{flex:1;min-height:0;overflow-y:auto;padding:16px;scrollbar-width:thin;scrollbar-color:var(--border-medium) transparent}.omni-header-left{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.omni-tree-actions{display:flex;gap:6px;align-items:center}.omni-clear-btn{background:transparent;border:none;color:var(--text-muted);cursor:pointer;font-size:16px;padding:0 4px;line-height:1;border-radius:3px}.omni-clear-btn:hover{color:var(--text-bright);background:#ffffff14}.omni-info-table,.omni-locators-list{display:flex;flex-direction:column;gap:6px}.omni-details-header{display:flex;align-items:center;gap:8px;padding:12px 16px;background:#0006;border-bottom:2px solid var(--border-visible);font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--text-bright);opacity:.9;font-family:JetBrains Mono,monospace}.omni-section{margin-bottom:24px}.omni-section-header{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--text-dim);margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border-visible);font-family:JetBrains Mono,monospace}.omni-info-row{display:flex;gap:16px;padding:12px 16px;background:#0006;border-radius:6px;border:1px solid var(--border-visible);min-height:44px;align-items:center}.omni-info-key{width:60px;flex-shrink:0;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;color:var(--text-dim);font-family:JetBrains Mono,monospace}.omni-info-value{flex:1;font-size:11px;color:var(--text-bright);word-break:break-all}.omni-layout-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.omni-layout-item{display:flex;flex-direction:column;gap:6px;padding:12px 8px;background:#0006;border-radius:6px;border:1px solid var(--border-visible);text-align:center;min-height:60px;justify-content:center}.omni-layout-label{font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;color:var(--text-dim);font-family:JetBrains Mono,monospace}.omni-layout-value{font-size:12px;font-weight:800;color:var(--color-primary);font-family:JetBrains Mono,monospace}.omni-locator-row{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#0009;border-radius:6px;border:1px solid var(--border-visible);border-left:3px solid var(--color-primary);transition:all .2s;min-height:48px}.omni-locator-strategy{flex-shrink:0;font-size:var(--fs-xs);font-weight:800;text-transform:uppercase;background:#00ff880d;color:var(--color-primary);padding:2px 6px;border-radius:6px;letter-spacing:.05em;font-family:JetBrains Mono,monospace}.omni-locator-value{flex:1;font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-muted);word-break:break-all;line-height:1.5}.omni-copy-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:#ffffff08;border:1px solid var(--border-medium);border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;transition:all .2s ease}.omni-copy-btn:hover,.omni-copy-btn.copied{background:var(--primary);border-color:var(--primary);color:#000}.omni-attributes-table{display:flex;flex-direction:column;gap:4px;background:var(--bg-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:var(--radius-sm);border:1px solid var(--border-medium);padding:8px;max-height:200px;overflow-y:auto}.omni-attr-row{display:flex;gap:8px;padding:6px 8px;border-radius:4px;transition:background .2s ease}.omni-attr-row:hover{background:#ffffff08}.omni-attr-key{width:120px;flex-shrink:0;font-size:var(--fs-xs);font-weight:600;color:var(--text-muted);font-family:Fira Code,monospace}.omni-attr-value{flex:1;font-size:11px;color:#e2e8f0;font-family:Fira Code,monospace;word-break:break-all}.omni-tree-content::-webkit-scrollbar,.omni-details-content::-webkit-scrollbar,.omni-attributes-table::-webkit-scrollbar{width:6px}.omni-tree-content::-webkit-scrollbar-track,.omni-details-content::-webkit-scrollbar-track,.omni-attributes-table::-webkit-scrollbar-track{background:transparent}.omni-tree-content::-webkit-scrollbar-thumb,.omni-details-content::-webkit-scrollbar-thumb,.omni-attributes-table::-webkit-scrollbar-thumb{background:var(--border-medium);border-radius:8px}.omni-tree-content::-webkit-scrollbar-thumb:hover,.omni-details-content::-webkit-scrollbar-thumb:hover,.omni-attributes-table::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.omni-quick-actions{display:flex;flex-direction:column;gap:16px}.omni-input-group{display:flex;flex-direction:column;gap:8px}.omni-input-field{width:100%;background:#0000004d;border:1px solid var(--border-medium);border-radius:var(--radius-sm);padding:8px 12px;color:var(--text-main);font-size:12px;outline:none;transition:all .2s ease}.omni-input-field:focus{border-color:var(--primary);background:#00000080}.omni-gestures-container{display:flex;flex-direction:column;align-items:center;gap:12px;padding:16px;background:#0003;border-radius:var(--radius-md);border:1px solid var(--border-subtle)}.omni-dpad{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:8px;width:120px;height:120px}.omni-dpad-btn{display:flex;align-items:center;justify-content:center;background:#ffffff08;border:1px solid rgba(255,255,255,.05);border-radius:8px;color:var(--text-muted);cursor:pointer;transition:all .2s ease}.omni-dpad-btn:hover{background:var(--primary);color:#000;transform:scale(1.1)}.omni-clipboard-box{display:flex;gap:8px;align-items:center}.omni-clipboard-val{flex:1;background:var(--bg-glass);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border-medium);border-radius:4px;padding:8px;font-family:Fira Code,monospace;font-size:11px;color:#38bdf8;min-height:32px;overflow-x:auto;white-space:nowrap}.omni-details-tabs{display:flex;background:#00000080;border-bottom:1px solid var(--border-visible);flex-shrink:0}.omni-details-tab{display:flex;align-items:center;gap:5px;flex:1;padding:10px 8px;border:none;background:transparent;color:var(--text-muted);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;cursor:pointer;border-bottom:2px solid transparent;transition:all .15s ease;font-family:JetBrains Mono,monospace;justify-content:center}.omni-details-tab:hover:not(:disabled){color:var(--text-bright);background:#ffffff08}.omni-details-tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary);background:#00ff880a}.omni-details-tab:disabled{opacity:.3;cursor:not-allowed}.omni-locator-row{display:flex;align-items:flex-start;gap:10px;padding:10px 14px;background:#0006;border-radius:6px;border:1px solid var(--border-visible);border-left:3px solid var(--color-primary);transition:all .15s;cursor:pointer}.omni-locator-row:hover{background:#ffffff05;border-color:var(--color-primary)}.omni-locator-row.selected-for-code{border-color:var(--color-primary);background:#00ff880f;box-shadow:0 0 12px #00ff8814}.omni-locator-left{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.omni-locator-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.omni-stability-badge{display:inline-flex;align-items:center;gap:3px;font-size:9px;font-weight:800;padding:2px 6px;border-radius:4px;text-transform:uppercase;letter-spacing:.05em;font-family:JetBrains Mono,monospace}.omni-stability-badge.stable{background:#10b9811f;color:#10b981;border:1px solid rgba(16,185,129,.25)}.omni-stability-badge.moderate{background:#fbbf241a;color:#fbbf24;border:1px solid rgba(251,191,36,.25)}.omni-stability-badge.fragile{background:#f43f5e1a;color:#f43f5e;border:1px solid rgba(244,63,94,.25)}.omni-stability-reason{font-size:10px;color:var(--text-muted);font-style:italic;line-height:1.3}.omni-section-badge{font-size:9px;font-weight:600;background:#00ff8814;color:var(--color-primary);padding:2px 6px;border-radius:4px;margin-left:6px;vertical-align:middle;text-transform:uppercase;letter-spacing:.05em}.tree-text-preview{font-size:10px;color:var(--text-muted);font-style:italic;max-width:80px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:0}.omni-search-hint{display:flex;align-items:center;gap:5px;padding:4px 14px;font-size:10px;color:var(--color-primary);opacity:.7;font-style:italic;background:#00ff8808;border-bottom:1px solid rgba(0,255,136,.08)}.omni-insight-panel{display:flex;flex-direction:column;gap:16px}.omni-insight-role{display:flex;align-items:center;gap:14px;padding:16px;background:#00ff880a;border-radius:8px;border:1px solid rgba(0,255,136,.12)}.omni-insight-emoji{font-size:28px;line-height:1}.omni-insight-role-name{font-size:14px;font-weight:700;color:var(--text-bright);font-family:JetBrains Mono,monospace}.omni-insight-interactable{margin-top:4px;display:flex;gap:6px}.omni-badge-green{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;color:#10b981;background:#10b9811a;padding:2px 8px;border-radius:4px;border:1px solid rgba(16,185,129,.2)}.omni-badge-gray{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;color:var(--text-muted);background:#ffffff0a;padding:2px 8px;border-radius:4px;border:1px solid var(--border-medium)}.omni-insight-warning{padding:10px 12px;background:#fbbf240f;border:1px solid rgba(251,191,36,.2);border-radius:6px;font-size:11px;color:#fbbf24}.omni-insight-description{display:flex;gap:10px;align-items:flex-start;padding:12px;background:#0000004d;border-radius:6px;border:1px solid var(--border-visible)}.omni-insight-icon{color:var(--color-primary);flex-shrink:0;margin-top:2px}.omni-insight-description p{font-size:12px;color:var(--text-main);line-height:1.6;margin:0}.omni-insight-best-locator,.omni-insight-attributes{display:flex;flex-direction:column;gap:8px}.omni-quick-facts{display:flex;flex-direction:column;gap:4px}.omni-quick-fact-row{display:flex;justify-content:space-between;align-items:center;padding:6px 10px;border-radius:4px;background:#0003}.omni-quick-fact-label{font-size:11px;color:var(--text-muted);font-weight:600}.omni-quick-fact-value{font-size:11px;color:var(--text-main);font-family:JetBrains Mono,monospace}.omni-quick-fact-value.true{color:#10b981;font-weight:700}.omni-codegen-panel{display:flex;flex-direction:column;gap:12px}.omni-codegen-frameworks{display:flex;gap:4px;flex-wrap:wrap}.omni-fw-btn{flex:1;padding:6px 4px;background:#ffffff08;border:1px solid var(--border-visible);border-radius:6px;color:var(--text-muted);font-size:10px;font-weight:700;cursor:pointer;transition:all .15s;white-space:nowrap}.omni-fw-btn:hover{background:#ffffff0f;color:var(--text-bright)}.omni-fw-btn.active{background:#00ff8814;border-color:#0f86;color:var(--color-primary)}.omni-codegen-locator-selector{display:flex;align-items:center;gap:8px}.omni-codegen-label{font-size:10px;font-weight:700;text-transform:uppercase;color:var(--text-muted);white-space:nowrap;letter-spacing:.05em}.omni-fw-select{flex:1;padding:6px 8px;background:#0000004d;border:1px solid var(--border-visible);border-radius:6px;color:var(--text-bright);font-size:11px;outline:none;cursor:pointer}.omni-fw-select:focus{border-color:var(--color-primary)}.omni-codegen-output{display:flex;flex-direction:column;border-radius:8px;border:1px solid var(--border-visible);overflow:hidden}.omni-codegen-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:#00000080;border-bottom:1px solid var(--border-visible)}.omni-codegen-lang{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--color-primary);font-family:JetBrains Mono,monospace}.omni-codegen-pre{margin:0;padding:14px;background:var(--bg-glass);color:#e2e8f0;font-family:Fira Code,JetBrains Mono,monospace;font-size:11px;line-height:1.6;overflow-x:auto;white-space:pre}.omni-codegen-pre code{font-family:inherit;font-size:inherit;color:inherit}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/device-explorer-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/device-explorer-QINnmim7.js","assets/useSocket-9D3E9Hwl.js","assets/index-C1DBaoSh.js","assets/clock-D9Y3wV_k.js","assets/plus-8iOMg9nw.js","assets/button-C2nVUsus.js","assets/badge-DPsMqugr.js","assets/badge-B1nKs8zj.css","assets/button-CJlKn4PZ.css","assets/mouse-pointer-2-HkRMqHAy.js","assets/zap-Dr4fY5UZ.js","assets/lock-CJ90SvYX.js","assets/trash-2-g4zyDinF.js","assets/device-explorer-vr8x2iik.css","assets/session-dashboard-FUCdTLJc.js","assets/cpu-HdPsjamK.js","assets/session-dashboard-C2k7FFv_.css","assets/apps-iWYKDaHG.js","assets/apps-CcM77dgg.css","assets/webhook-settings-DiEIokQy.js","assets/webhook-settings-CDPgsgkb.css","assets/settings-DsABv9a7.js","assets/Layouts-DyOOhYtz.js","assets/Layouts-DPMls9vh.css","assets/calendar-ufCcAAd0.js","assets/ai-settings-UTOAls44.js","assets/maintenance-settings-CLGqmciU.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
function Ec(e,t){for(var n=0;n<t.length;n++){const r=t[n];if(typeof r!="string"&&!Array.isArray(r)){for(const l in r)if(l!=="default"&&!(l in e)){const o=Object.getOwnPropertyDescriptor(r,l);o&&Object.defineProperty(e,l,o.get?o:{enumerable:!0,get:()=>r[l]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();function kc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ss={exports:{}},Zn={};/*
|
|
3
3
|
object-assign
|
|
4
4
|
(c) Sindre Sorhus
|
|
@@ -171,4 +171,4 @@ Add a <Suspense fallback=...> component higher in the tree to provide a loading
|
|
|
171
171
|
*
|
|
172
172
|
* This source code is licensed under the ISC license.
|
|
173
173
|
* See the LICENSE file in the root directory of this source tree.
|
|
174
|
-
*/const ch=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],fh=q("x",ch),dh=[{id:"devices",label:"Devices",icon:v.jsx(uh,{size:18,color:"currentColor"}),path:"/devices",enabled:!0},{id:"builds",label:"Builds",icon:v.jsx(Zp,{size:18,color:"currentColor"}),path:"/builds",enabled:!0},{id:"apps",label:"Apps",icon:v.jsx(Dp,{size:18,color:"currentColor"}),path:"/apps",enabled:!0},{id:"notifications",label:"Notifications",icon:v.jsx(Up,{size:18,color:"currentColor"}),path:"/notifications",enabled:!0},{id:"settings",label:"Settings",icon:v.jsx(yc,{size:18,color:"currentColor"}),path:"/settings",enabled:!1}],gc=()=>dh.filter(e=>e.enabled),ph=()=>{const e=Ti();or(),gc();const[t,n]=x.useState(!1),r=x.useRef(null);return x.useEffect(()=>{const l=o=>{r.current&&!r.current.contains(o.target)&&n(!1)};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[]),v.jsxs("div",{className:"header-container",children:[v.jsx("div",{className:"header-left",children:v.jsx("div",{className:"header-logo-container",onClick:()=>e("/"),children:v.jsx("img",{src:"logo.svg",alt:"Xenon Logo",className:"header-logo-image"})})}),v.jsxs("div",{className:"header-right",children:[v.jsx("div",{className:"header-actions",children:v.jsxs("div",{className:"header-status-pill",children:[v.jsx("div",{className:"status-dot"}),v.jsx("span",{children:"System Online"})]})}),v.jsxs("div",{className:"profile-dropdown-container",ref:r,children:[v.jsxs("button",{className:`profile-trigger ${t?"open":""}`,onClick:()=>n(!t),children:[v.jsx("div",{className:"avatar-preview",children:v.jsx(oh,{size:16})}),v.jsxs("div",{className:"profile-info-compact",children:[v.jsx("span",{className:"profile-name",children:"Administrator"}),v.jsx("span",{className:"profile-role",children:"Root Node"})]}),v.jsx(Hp,{size:14,className:`chevron-icon ${t?"rotate":""}`})]}),t&&v.jsxs("div",{className:"profile-dropdown animate-slide-up",children:[v.jsxs("div",{className:"dropdown-group",children:[v.jsxs("div",{className:"dropdown-section-header",children:[v.jsx(mc,{size:12}),v.jsx("span",{children:"Workspace Context"})]}),v.jsxs("div",{className:"dropdown-context-item",children:[v.jsx("p",{className:"context-label",children:"Current Registry"}),v.jsx("p",{className:"context-value",children:"Xenon Default Registry"})]}),v.jsxs("div",{className:"dropdown-context-item",children:[v.jsx("p",{className:"context-label",children:"Active Node"}),v.jsx("p",{className:"context-value",children:"Root Node • Primary"})]})]}),v.jsx("div",{className:"dropdown-divider"}),v.jsxs("div",{className:"dropdown-system-info",children:[v.jsxs("div",{className:"status-indicator",children:[v.jsx("div",{className:"status-dot online"}),v.jsx("span",{children:"Node: Stable"})]}),v.jsx("span",{className:"version-label",children:"v1.2.4-stable"})]})]})]})]})]})},hh="modulepreload",mh=function(e){return"/xenon/"+e},is={},kt=function(t,n,r){let l=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),u=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));l=Promise.allSettled(n.map(s=>{if(s=mh(s),s in is)return;is[s]=!0;const f=s.endsWith(".css"),m=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${m}`))return;const g=document.createElement("link");if(g.rel=f?"stylesheet":hh,f||(g.as="script"),g.crossOrigin="",g.href=s,u&&g.setAttribute("nonce",u),document.head.appendChild(g),f)return new Promise((p,E)=>{g.addEventListener("load",p),g.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${s}`)))})}))}function o(i){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=i,window.dispatchEvent(u),!u.defaultPrevented)throw i}return l.then(i=>{for(const u of i||[])u.status==="rejected"&&o(u.reason);return t().catch(o)})};class vh extends x.Component{constructor(){super(...arguments),this.state={hasError:!1},this.handleReset=()=>{this.setState({hasError:!1}),window.location.reload()}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("Uncaught error:",t,n)}render(){return this.state.hasError?this.props.fallback||v.jsxs("div",{className:"error-boundary-container",style:{padding:"4rem 2rem",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",gap:"1.5rem",color:"var(--text-main)",background:"var(--bg-main)",minHeight:"100vh"},children:[v.jsx("div",{style:{color:"var(--accent-red)",filter:"drop-shadow(0 0 10px rgba(239, 68, 68, 0.3))"},children:v.jsx(ah,{size:64})}),v.jsx("h2",{style:{fontSize:"2rem",fontWeight:700,margin:0},children:"Component Exception Detected"}),v.jsx("p",{style:{color:"var(--text-muted)",maxWidth:"500px",lineHeight:1.6},children:"An unexpected error occurred while rendering this section. Xenon's isolation engine has contained the fault to prevent a total system crash."}),this.state.error&&v.jsx("pre",{style:{background:"rgba(0,0,0,0.3)",padding:"1rem",borderRadius:"8px",fontSize:"0.8rem",color:"var(--accent-red)",maxWidth:"80%",overflowX:"auto"},children:this.state.error.message}),v.jsxs("button",{onClick:this.handleReset,style:{background:"var(--primary)",color:"var(--secondary)",border:"none",padding:"0.75rem 2rem",borderRadius:"8px",fontWeight:700,cursor:"pointer",display:"flex",alignItems:"center",gap:"0.5rem",transition:"all 0.2s"},onMouseOver:t=>t.currentTarget.style.transform="translateY(-2px)",onMouseOut:t=>t.currentTarget.style.transform="translateY(0)",children:[v.jsx(vc,{size:18}),"Reload Application"]})]}):this.props.children}}const us=x.lazy(()=>kt(()=>import("./device-explorer-CajM63OJ.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]))),yh=x.lazy(()=>kt(()=>import("./session-dashboard-HPDtwPOZ.js"),__vite__mapDeps([14,1,2,6,7,3,15,16]))),gh=x.lazy(()=>kt(()=>import("./apps-CRMrI4_p.js"),__vite__mapDeps([17,2,6,7,5,8,10,12,18]))),wh=x.lazy(()=>kt(()=>import("./webhook-settings-Cp-B4Nrw.js"),__vite__mapDeps([19,2,12,10,4,20])).then(e=>({default:e.WebhookSettings}))),xh=x.lazy(()=>kt(()=>import("./settings-DrZsZwdc.js"),__vite__mapDeps([21,2,22,23,3,24,9])).then(e=>({default:e.Settings}))),Eh=x.lazy(()=>kt(()=>import("./ai-settings-BbnfgdEx.js"),__vite__mapDeps([25,2,22,23,15,11])).then(e=>({default:e.AISettings}))),kh=x.lazy(()=>kt(()=>import("./maintenance-settings-CirzA6yG.js"),__vite__mapDeps([26,2,22,23,12,24])).then(e=>({default:e.MaintenanceSettings}))),Sh=()=>v.jsxs("div",{className:"settings-loading",style:{height:"calc(100vh - 72px)"},children:[v.jsx(vc,{className:"animate-spin",size:32}),v.jsx("span",{children:"Hydrating View..."})]}),_h=()=>v.jsx(vh,{children:v.jsx(x.Suspense,{fallback:v.jsx(Sh,{}),children:v.jsxs(Np,{children:[v.jsx(xe,{path:"/",element:v.jsx(ts,{to:"/devices",replace:!0})}),v.jsx(xe,{path:"/devices",element:v.jsx("div",{className:"app-body-container devices-view",children:v.jsx(us,{})})}),v.jsx(xe,{path:"/devices/:udid/control/:tab?",element:v.jsx("div",{className:"app-body-container devices-view",children:v.jsx(us,{})})}),v.jsx(xe,{path:"/apps",element:v.jsx("div",{className:"app-body-container apps-view",children:v.jsx(gh,{})})}),v.jsx(xe,{path:"/builds",element:v.jsx("div",{className:"app-body-container sessions-view",children:v.jsx(yh,{})})}),v.jsx(xe,{path:"/notifications",element:v.jsx("div",{className:"app-body-container settings-view",style:{height:"calc(100vh - 72px)",overflow:"hidden",display:"flex",flexDirection:"column"},children:v.jsx(wh,{})})}),v.jsx(xe,{path:"/settings",element:v.jsx("div",{className:"app-body-container settings-view",children:v.jsx(xh,{})})}),v.jsx(xe,{path:"/ai-settings",element:v.jsx("div",{className:"app-body-container settings-view",children:v.jsx(Eh,{})})}),v.jsx(xe,{path:"/maintenance",element:v.jsx("div",{className:"app-body-container settings-view",children:v.jsx(kh,{})})}),v.jsx(xe,{path:"*",element:v.jsx(ts,{to:"/devices",replace:!0})})]})})}),wc=x.createContext(void 0),Lh=()=>{const e=x.useContext(wc);if(!e)throw new Error("useToast must be used within a ToastProvider");return e},Ch=({children:e})=>{const[t,n]=x.useState([]),r=x.useCallback(o=>{n(i=>i.filter(u=>u.id!==o))},[]),l=x.useCallback((o,i="info",u=4e3)=>{const s=Math.random().toString(36).substring(2,9);return n(f=>[...f,{id:s,message:o,type:i,duration:u}]),i!=="loading"&&u>0&&setTimeout(()=>{r(s)},u),s},[r]);return v.jsxs(wc.Provider,{value:{toast:l,removeToast:r},children:[e,v.jsx("div",{className:"toast-container","aria-live":"polite","aria-atomic":"true",role:"status",children:t.map(o=>v.jsxs("div",{className:`toast-item toast-${o.type} animate-slide-in`,children:[v.jsxs("div",{className:"toast-icon",children:[o.type==="success"&&v.jsx(Kp,{size:18}),o.type==="error"&&v.jsx(Yp,{size:18}),o.type==="info"&&v.jsx(mc,{size:18}),o.type==="loading"&&v.jsx(bp,{size:18,className:"animate-spin"})]}),v.jsx("div",{className:"toast-message",children:o.message}),v.jsx("button",{className:"toast-close",onClick:()=>r(o.id),"aria-label":`Close ${o.type} notification`,children:v.jsx(fh,{size:14})})]},o.id))})]})},vn=({icon:e,label:t,path:n,active:r,onClick:l})=>v.jsxs("div",{className:"sidebar-item-wrapper group",onClick:l,children:[r&&v.jsx("div",{className:"sidebar-active-indicator"}),v.jsx("div",{className:`sidebar-icon-container ${r?"active":""}`,children:e}),v.jsx("div",{className:"sidebar-tooltip",children:t})]}),Nh=()=>{const e=Ti(),t=or(),n=gc(),r=l=>t.pathname===l;return v.jsxs("aside",{className:"app-sidebar",children:[v.jsx("div",{className:"sidebar-nav",children:n.map(l=>v.jsx(vn,{icon:l.icon,label:l.label,path:l.path,active:r(l.path),onClick:()=>e(l.path)},l.id))}),v.jsxs("div",{className:"sidebar-footer",children:[v.jsx(vn,{icon:v.jsx(yc,{size:18}),label:"Settings",path:"/settings",active:r("/settings"),onClick:()=>e("/settings")}),v.jsx(vn,{icon:v.jsx(Vp,{size:18}),label:"AI Engine",path:"/ai-settings",active:r("/ai-settings"),onClick:()=>e("/ai-settings")}),v.jsx(vn,{icon:v.jsx(rh,{size:18}),label:"Maintenance",path:"/maintenance",active:r("/maintenance"),onClick:()=>e("/maintenance")}),v.jsx(vn,{icon:v.jsx(Bp,{size:18}),label:"API Docs",path:"/xenon/api-docs",active:!1,onClick:()=>window.open(window.location.origin+"/xenon/api-docs","_blank")})]})]})};function Ph(){return v.jsx(Ch,{children:v.jsx(Lp,{basename:"/xenon",children:v.jsxs("div",{className:"app-layout",children:[v.jsx(ph,{}),v.jsxs("div",{className:"app-main-container",children:[v.jsx(Nh,{}),v.jsx("main",{className:"app-content",children:v.jsx(_h,{})})]})]})})})}Id.render(v.jsx(x.StrictMode,{children:v.jsx(Ph,{})}),document.getElementById("root"));export{Vp as B,Yp as C,mc as I,bp as L,Oc as R,uh as S,ah as T,fh as X,Id as a,Ti as b,q as c,rh as d,Hp as e,jh as f,vc as g,kc as h,Kp as i,v as j,Up as k,oh as l,x as r,Lh as u};
|
|
174
|
+
*/const ch=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],fh=q("x",ch),dh=[{id:"devices",label:"Devices",icon:v.jsx(uh,{size:18,color:"currentColor"}),path:"/devices",enabled:!0},{id:"builds",label:"Builds",icon:v.jsx(Zp,{size:18,color:"currentColor"}),path:"/builds",enabled:!0},{id:"apps",label:"Apps",icon:v.jsx(Dp,{size:18,color:"currentColor"}),path:"/apps",enabled:!0},{id:"notifications",label:"Notifications",icon:v.jsx(Up,{size:18,color:"currentColor"}),path:"/notifications",enabled:!0},{id:"settings",label:"Settings",icon:v.jsx(yc,{size:18,color:"currentColor"}),path:"/settings",enabled:!1}],gc=()=>dh.filter(e=>e.enabled),ph=()=>{const e=Ti();or(),gc();const[t,n]=x.useState(!1),r=x.useRef(null);return x.useEffect(()=>{const l=o=>{r.current&&!r.current.contains(o.target)&&n(!1)};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[]),v.jsxs("div",{className:"header-container",children:[v.jsx("div",{className:"header-left",children:v.jsx("div",{className:"header-logo-container",onClick:()=>e("/"),children:v.jsx("img",{src:"logo.svg",alt:"Xenon Logo",className:"header-logo-image"})})}),v.jsxs("div",{className:"header-right",children:[v.jsx("div",{className:"header-actions",children:v.jsxs("div",{className:"header-status-pill",children:[v.jsx("div",{className:"status-dot"}),v.jsx("span",{children:"System Online"})]})}),v.jsxs("div",{className:"profile-dropdown-container",ref:r,children:[v.jsxs("button",{className:`profile-trigger ${t?"open":""}`,onClick:()=>n(!t),children:[v.jsx("div",{className:"avatar-preview",children:v.jsx(oh,{size:16})}),v.jsxs("div",{className:"profile-info-compact",children:[v.jsx("span",{className:"profile-name",children:"Administrator"}),v.jsx("span",{className:"profile-role",children:"Root Node"})]}),v.jsx(Hp,{size:14,className:`chevron-icon ${t?"rotate":""}`})]}),t&&v.jsxs("div",{className:"profile-dropdown animate-slide-up",children:[v.jsxs("div",{className:"dropdown-group",children:[v.jsxs("div",{className:"dropdown-section-header",children:[v.jsx(mc,{size:12}),v.jsx("span",{children:"Workspace Context"})]}),v.jsxs("div",{className:"dropdown-context-item",children:[v.jsx("p",{className:"context-label",children:"Current Registry"}),v.jsx("p",{className:"context-value",children:"Xenon Default Registry"})]}),v.jsxs("div",{className:"dropdown-context-item",children:[v.jsx("p",{className:"context-label",children:"Active Node"}),v.jsx("p",{className:"context-value",children:"Root Node • Primary"})]})]}),v.jsx("div",{className:"dropdown-divider"}),v.jsxs("div",{className:"dropdown-system-info",children:[v.jsxs("div",{className:"status-indicator",children:[v.jsx("div",{className:"status-dot online"}),v.jsx("span",{children:"Node: Stable"})]}),v.jsx("span",{className:"version-label",children:"v1.2.4-stable"})]})]})]})]})]})},hh="modulepreload",mh=function(e){return"/xenon/"+e},is={},kt=function(t,n,r){let l=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),u=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));l=Promise.allSettled(n.map(s=>{if(s=mh(s),s in is)return;is[s]=!0;const f=s.endsWith(".css"),m=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${m}`))return;const g=document.createElement("link");if(g.rel=f?"stylesheet":hh,f||(g.as="script"),g.crossOrigin="",g.href=s,u&&g.setAttribute("nonce",u),document.head.appendChild(g),f)return new Promise((p,E)=>{g.addEventListener("load",p),g.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${s}`)))})}))}function o(i){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=i,window.dispatchEvent(u),!u.defaultPrevented)throw i}return l.then(i=>{for(const u of i||[])u.status==="rejected"&&o(u.reason);return t().catch(o)})};class vh extends x.Component{constructor(){super(...arguments),this.state={hasError:!1},this.handleReset=()=>{this.setState({hasError:!1}),window.location.reload()}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("Uncaught error:",t,n)}render(){return this.state.hasError?this.props.fallback||v.jsxs("div",{className:"error-boundary-container",style:{padding:"4rem 2rem",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",gap:"1.5rem",color:"var(--text-main)",background:"var(--bg-main)",minHeight:"100vh"},children:[v.jsx("div",{style:{color:"var(--accent-red)",filter:"drop-shadow(0 0 10px rgba(239, 68, 68, 0.3))"},children:v.jsx(ah,{size:64})}),v.jsx("h2",{style:{fontSize:"2rem",fontWeight:700,margin:0},children:"Component Exception Detected"}),v.jsx("p",{style:{color:"var(--text-muted)",maxWidth:"500px",lineHeight:1.6},children:"An unexpected error occurred while rendering this section. Xenon's isolation engine has contained the fault to prevent a total system crash."}),this.state.error&&v.jsx("pre",{style:{background:"rgba(0,0,0,0.3)",padding:"1rem",borderRadius:"8px",fontSize:"0.8rem",color:"var(--accent-red)",maxWidth:"80%",overflowX:"auto"},children:this.state.error.message}),v.jsxs("button",{onClick:this.handleReset,style:{background:"var(--primary)",color:"var(--secondary)",border:"none",padding:"0.75rem 2rem",borderRadius:"8px",fontWeight:700,cursor:"pointer",display:"flex",alignItems:"center",gap:"0.5rem",transition:"all 0.2s"},onMouseOver:t=>t.currentTarget.style.transform="translateY(-2px)",onMouseOut:t=>t.currentTarget.style.transform="translateY(0)",children:[v.jsx(vc,{size:18}),"Reload Application"]})]}):this.props.children}}const us=x.lazy(()=>kt(()=>import("./device-explorer-QINnmim7.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]))),yh=x.lazy(()=>kt(()=>import("./session-dashboard-FUCdTLJc.js"),__vite__mapDeps([14,1,2,6,7,3,15,16]))),gh=x.lazy(()=>kt(()=>import("./apps-iWYKDaHG.js"),__vite__mapDeps([17,2,6,7,5,8,10,12,18]))),wh=x.lazy(()=>kt(()=>import("./webhook-settings-DiEIokQy.js"),__vite__mapDeps([19,2,12,10,4,20])).then(e=>({default:e.WebhookSettings}))),xh=x.lazy(()=>kt(()=>import("./settings-DsABv9a7.js"),__vite__mapDeps([21,2,22,23,3,24,9])).then(e=>({default:e.Settings}))),Eh=x.lazy(()=>kt(()=>import("./ai-settings-UTOAls44.js"),__vite__mapDeps([25,2,22,23,15,11])).then(e=>({default:e.AISettings}))),kh=x.lazy(()=>kt(()=>import("./maintenance-settings-CLGqmciU.js"),__vite__mapDeps([26,2,22,23,12,24])).then(e=>({default:e.MaintenanceSettings}))),Sh=()=>v.jsxs("div",{className:"settings-loading",style:{height:"calc(100vh - 72px)"},children:[v.jsx(vc,{className:"animate-spin",size:32}),v.jsx("span",{children:"Hydrating View..."})]}),_h=()=>v.jsx(vh,{children:v.jsx(x.Suspense,{fallback:v.jsx(Sh,{}),children:v.jsxs(Np,{children:[v.jsx(xe,{path:"/",element:v.jsx(ts,{to:"/devices",replace:!0})}),v.jsx(xe,{path:"/devices",element:v.jsx("div",{className:"app-body-container devices-view",children:v.jsx(us,{})})}),v.jsx(xe,{path:"/devices/:udid/control/:tab?",element:v.jsx("div",{className:"app-body-container devices-view",children:v.jsx(us,{})})}),v.jsx(xe,{path:"/apps",element:v.jsx("div",{className:"app-body-container apps-view",children:v.jsx(gh,{})})}),v.jsx(xe,{path:"/builds",element:v.jsx("div",{className:"app-body-container sessions-view",children:v.jsx(yh,{})})}),v.jsx(xe,{path:"/notifications",element:v.jsx("div",{className:"app-body-container settings-view",style:{height:"calc(100vh - 72px)",overflow:"hidden",display:"flex",flexDirection:"column"},children:v.jsx(wh,{})})}),v.jsx(xe,{path:"/settings",element:v.jsx("div",{className:"app-body-container settings-view",children:v.jsx(xh,{})})}),v.jsx(xe,{path:"/ai-settings",element:v.jsx("div",{className:"app-body-container settings-view",children:v.jsx(Eh,{})})}),v.jsx(xe,{path:"/maintenance",element:v.jsx("div",{className:"app-body-container settings-view",children:v.jsx(kh,{})})}),v.jsx(xe,{path:"*",element:v.jsx(ts,{to:"/devices",replace:!0})})]})})}),wc=x.createContext(void 0),Lh=()=>{const e=x.useContext(wc);if(!e)throw new Error("useToast must be used within a ToastProvider");return e},Ch=({children:e})=>{const[t,n]=x.useState([]),r=x.useCallback(o=>{n(i=>i.filter(u=>u.id!==o))},[]),l=x.useCallback((o,i="info",u=4e3)=>{const s=Math.random().toString(36).substring(2,9);return n(f=>[...f,{id:s,message:o,type:i,duration:u}]),i!=="loading"&&u>0&&setTimeout(()=>{r(s)},u),s},[r]);return v.jsxs(wc.Provider,{value:{toast:l,removeToast:r},children:[e,v.jsx("div",{className:"toast-container","aria-live":"polite","aria-atomic":"true",role:"status",children:t.map(o=>v.jsxs("div",{className:`toast-item toast-${o.type} animate-slide-in`,children:[v.jsxs("div",{className:"toast-icon",children:[o.type==="success"&&v.jsx(Kp,{size:18}),o.type==="error"&&v.jsx(Yp,{size:18}),o.type==="info"&&v.jsx(mc,{size:18}),o.type==="loading"&&v.jsx(bp,{size:18,className:"animate-spin"})]}),v.jsx("div",{className:"toast-message",children:o.message}),v.jsx("button",{className:"toast-close",onClick:()=>r(o.id),"aria-label":`Close ${o.type} notification`,children:v.jsx(fh,{size:14})})]},o.id))})]})},vn=({icon:e,label:t,path:n,active:r,onClick:l})=>v.jsxs("div",{className:"sidebar-item-wrapper group",onClick:l,children:[r&&v.jsx("div",{className:"sidebar-active-indicator"}),v.jsx("div",{className:`sidebar-icon-container ${r?"active":""}`,children:e}),v.jsx("div",{className:"sidebar-tooltip",children:t})]}),Nh=()=>{const e=Ti(),t=or(),n=gc(),r=l=>t.pathname===l;return v.jsxs("aside",{className:"app-sidebar",children:[v.jsx("div",{className:"sidebar-nav",children:n.map(l=>v.jsx(vn,{icon:l.icon,label:l.label,path:l.path,active:r(l.path),onClick:()=>e(l.path)},l.id))}),v.jsxs("div",{className:"sidebar-footer",children:[v.jsx(vn,{icon:v.jsx(yc,{size:18}),label:"Settings",path:"/settings",active:r("/settings"),onClick:()=>e("/settings")}),v.jsx(vn,{icon:v.jsx(Vp,{size:18}),label:"AI Engine",path:"/ai-settings",active:r("/ai-settings"),onClick:()=>e("/ai-settings")}),v.jsx(vn,{icon:v.jsx(rh,{size:18}),label:"Maintenance",path:"/maintenance",active:r("/maintenance"),onClick:()=>e("/maintenance")}),v.jsx(vn,{icon:v.jsx(Bp,{size:18}),label:"API Docs",path:"/xenon/api-docs",active:!1,onClick:()=>window.open(window.location.origin+"/xenon/api-docs","_blank")})]})]})};function Ph(){return v.jsx(Ch,{children:v.jsx(Lp,{basename:"/xenon",children:v.jsxs("div",{className:"app-layout",children:[v.jsx(ph,{}),v.jsxs("div",{className:"app-main-container",children:[v.jsx(Nh,{}),v.jsx("main",{className:"app-content",children:v.jsx(_h,{})})]})]})})})}Id.render(v.jsx(x.StrictMode,{children:v.jsx(Ph,{})}),document.getElementById("root"));export{Vp as B,Yp as C,mc as I,bp as L,Oc as R,uh as S,ah as T,fh as X,Id as a,Ti as b,q as c,rh as d,Hp as e,jh as f,vc as g,kc as h,Kp as i,v as j,Up as k,oh as l,x as r,Lh as u};
|
package/lib/public/assets/{maintenance-settings-CirzA6yG.js → maintenance-settings-CLGqmciU.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as x,r as n,j as e,g as j,l as v,d as b,I as y,i as C,T as f}from"./index-
|
|
1
|
+
import{c as x,r as n,j as e,g as j,l as v,d as b,I as y,i as C,T as f}from"./index-W_MoQvsw.js";import{X as u}from"./index-C1DBaoSh.js";import{A as N}from"./Layouts-DyOOhYtz.js";import{T as S}from"./trash-2-g4zyDinF.js";import{C as M}from"./calendar-ufCcAAd0.js";/**
|
|
2
2
|
* @license lucide-react v0.555.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as Me,h as tn,R as U,r as ve,j as s,i as qr,C as Wr,e as Xr,B as ut,S as Qr}from"./index-
|
|
1
|
+
import{c as Me,h as tn,R as U,r as ve,j as s,i as qr,C as Wr,e as Xr,B as ut,S as Qr}from"./index-W_MoQvsw.js";import{H as Kr,a as Yr,p as er,u as Gr,C as nr}from"./useSocket-9D3E9Hwl.js";import{X as ce}from"./index-C1DBaoSh.js";import{c as Jr,D as tr,S as ct,B as De}from"./badge-DPsMqugr.js";import{C as Gn}from"./clock-D9Y3wV_k.js";import{C as Zr}from"./cpu-HdPsjamK.js";/**
|
|
2
2
|
* @license lucide-react v0.555.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as i,j as e,g as j,l as S,B as C,i as y,T as N}from"./index-
|
|
1
|
+
import{r as i,j as e,g as j,l as S,B as C,i as y,T as N}from"./index-W_MoQvsw.js";import{X as c}from"./index-C1DBaoSh.js";import{A as b}from"./Layouts-DyOOhYtz.js";import{C as k}from"./clock-D9Y3wV_k.js";import{C as I}from"./calendar-ufCcAAd0.js";import{M}from"./mouse-pointer-2-HkRMqHAy.js";const B=()=>{const[a,t]=i.useState({healthCheckIntervalMs:3e4,healthCheckSchedule:"",enableSelfHealing:!0}),[g,d]=i.useState(!0),[m,h]=i.useState(!1),[l,n]=i.useState(null);i.useEffect(()=>{o()},[]);const o=async()=>{d(!0);try{const s=await c.getGlobalConfig();t({healthCheckIntervalMs:s.healthCheckIntervalMs||3e4,healthCheckSchedule:s.healthCheckSchedule||"",enableSelfHealing:s.enableSelfHealing!==void 0?s.enableSelfHealing:!0})}catch(s){console.error("Failed to load settings",s),n({type:"error",message:"Failed to access infrastructure parameters."})}finally{d(!1)}},u=async(s=a)=>{h(!0),n(null);try{await c.updateGlobalConfig(s),n({type:"success",message:"Infrastructure parameters synchronized across fleet."}),setTimeout(()=>n(null),5e3)}catch(r){console.error("Failed to save settings",r),n({type:"error",message:"Synchronization failed. Check network integrity."})}finally{h(!1)}},v=async()=>{const s={healthCheckIntervalMs:3e4,healthCheckSchedule:"",enableSelfHealing:!0};t(s),await u(s);try{await c.resetMetrics()}catch(r){console.error("Failed to reset metrics",r)}},p=[{label:"Battery Saver (2 AM)",value:"0 2 * * *"},{label:"Standard (Hourly)",value:"0 * * * *"},{label:"Operational Coverage (30m)",value:"*/30 * * * *"},{label:"High Performance (10m)",value:"*/10 * * * *"},{label:"Disable Schedule",value:""}],f=s=>s?s.split(" ").filter(x=>x!=="").length!==5?"Invalid Cron format (needs 5 parts)":s==="0 2 * * *"?"Quiet hours: Daily at 2:00 AM":s==="0 * * * *"?"Standard rotation: Start of every hour":s==="*/30 * * * *"?"Balanced: Every 30 minutes":s==="*/10 * * * *"?"Intensive: Every 10 minutes":`Custom orchestration: ${s}`:"Using Idle Health Frequency (Continuous/Passive mode).";return g?e.jsxs("div",{className:"settings-loading",children:[e.jsx(j,{className:"animate-spin",size:32}),e.jsx("span",{children:"Synchronizing Global Infrastructure..."})]}):e.jsxs("div",{className:"settings-container mesh-gradient-infra",children:[e.jsx("div",{className:"scanline",style:{position:"absolute",inset:0,pointerEvents:"none",opacity:.05,zIndex:1001}}),e.jsxs("div",{className:"settings-header",children:[e.jsxs("div",{className:"settings-title-group",children:[e.jsx(S,{className:"settings-icon infra-icon",size:28}),e.jsx("h2",{children:"Infrastructure Control"})]}),e.jsx("p",{className:"settings-subtitle",children:"Manage core farm parameters, heartbeat frequency, and maintenance orchestrations across the global registry."})]}),e.jsxs("div",{className:"settings-content",children:[e.jsxs("div",{className:"settings-grid",children:[e.jsxs("div",{className:"setting-card stagger-1",children:[e.jsxs("div",{className:"setting-card-header",children:[e.jsx(k,{size:16}),e.jsx("h4",{children:"Idle Health Frequency"})]}),e.jsx("p",{className:"section-description-dense",children:"Frequency of passive health pings when the system is in idle state."}),e.jsx("div",{className:"setting-field",children:e.jsxs("div",{className:"input-group",children:[e.jsx("input",{type:"number",value:a.healthCheckIntervalMs,onChange:s=>t({...a,healthCheckIntervalMs:parseInt(s.target.value)}),min:5e3,step:5e3}),e.jsx("span",{className:"code-font",children:"MS"})]})}),e.jsx("div",{className:"setting-hint-clean",children:"Minimum safe value: 5000ms. Note: This frequency is overridden when a schedule is active."})]}),e.jsxs("div",{className:"setting-card stagger-2",children:[e.jsxs("div",{className:"setting-card-header",children:[e.jsx(I,{size:16}),e.jsx("h4",{children:"Deep Diagnostic Schedule"})]}),e.jsx("p",{className:"section-description-dense",children:"Execute intensive reliability bursts (WDA restarts, Cache purges) using standardized Cron syntax."}),e.jsx("div",{className:"setting-field",children:e.jsx("div",{className:"setting-input-wrapper",children:e.jsx("input",{type:"text",placeholder:"e.g. 0 * * * * (At internal min 0)",value:a.healthCheckSchedule,onChange:s=>t({...a,healthCheckSchedule:s.target.value})})})}),e.jsxs("div",{className:"cron-preview",children:[e.jsx("span",{className:"preview-label",children:"Active Logic:"}),e.jsx("span",{className:"preview-value",children:f(a.healthCheckSchedule)})]}),e.jsxs("div",{className:"cron-presets",children:[e.jsxs("div",{className:"presets-label",children:[e.jsx(M,{size:12}),e.jsx("span",{children:"Intent-Based Presets:"})]}),e.jsx("div",{className:"presets-grid",children:p.map(s=>e.jsx("button",{className:`preset-chip ${a.healthCheckSchedule===s.value?"active":""}`,onClick:()=>t({...a,healthCheckSchedule:s.value}),children:s.label},s.label))})]})]}),e.jsxs("div",{className:"setting-card stagger-3",children:[e.jsxs("div",{className:"setting-card-header",children:[e.jsx(C,{size:16}),e.jsx("h4",{children:"AI Self-Healing"})]}),e.jsx("p",{className:"section-description-dense",children:"Automatically intercept and recover from failing locators using Xenon's 5-tier strategy."}),e.jsxs("div",{className:"toggle-group",children:[e.jsxs("label",{className:"switch",children:[e.jsx("input",{type:"checkbox",checked:a.enableSelfHealing,onChange:s=>t({...a,enableSelfHealing:s.target.checked})}),e.jsx("span",{className:"slider round"})]}),e.jsx("span",{className:"toggle-label",children:a.enableSelfHealing?"ENABLED":"DISABLED"})]}),e.jsx("div",{className:"setting-hint-clean",children:"When enabled, Xenon will attempt to find elements via Fuzzy XML, OCR, Visual AI, and LLM before failing a test."})]})]}),l&&e.jsxs("div",{className:`status-banner ${l.type}`,children:[l.type==="success"?e.jsx(y,{size:18}):e.jsx(N,{size:18}),e.jsx("span",{children:l.message})]})]}),e.jsx(b,{onSave:u,onDiscard:o,onRestoreDefaults:v,isSaving:m,saveLabel:"Save Configuration"})]})};export{B as Settings};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as i,j as e,k,i as A,C as _}from"./index-
|
|
1
|
+
import{r as i,j as e,k,i as A,C as _}from"./index-W_MoQvsw.js";import{X as n}from"./index-C1DBaoSh.js";import{T as g}from"./trash-2-g4zyDinF.js";import{Z as W}from"./zap-Dr4fY5UZ.js";import{P as O}from"./plus-8iOMg9nw.js";const v=[{id:"device_offline",label:"Device Offline",icon:e.jsx(_,{size:14,className:"text-red-400"})},{id:"device_new",label:"New Device",icon:e.jsx(O,{size:14,className:"text-green-400"})},{id:"session_failed",label:"Session Failed",icon:e.jsx(g,{size:14,className:"text-orange-400"})}],J=()=>{const[x,w]=i.useState([]),[t,p]=i.useState(""),[r,j]=i.useState(["device_offline","session_failed"]),[N,u]=i.useState(!1),[d,o]=i.useState("idle"),[c,b]=i.useState(!1),[f,h]=i.useState("");i.useEffect(()=>{m()},[]);const m=async()=>{try{const s=await n.getWebhookConfigs();w(s||[])}catch(s){console.error("Failed to load webhook configs",s)}},y=async()=>{if(t){u(!0);try{await n.addWebhookConfig(t,r,"slack",f||void 0),p(""),h(""),b(!1),j(["device_offline","session_failed"]),await m()}catch(s){console.error("Failed to add webhook",s)}finally{u(!1)}}},S=async s=>{try{await n.deleteWebhookConfig(s),await m()}catch(a){console.error("Failed to delete webhook",a)}},C=async()=>{if(t){o("idle");try{await n.testWebhook(t,"slack"),o("success"),setTimeout(()=>o("idle"),3e3)}catch{o("error"),setTimeout(()=>o("idle"),3e3)}}},T=s=>{j(a=>a.includes(s)?a.filter(l=>l!==s):[...a,s])},E=s=>{h(a=>a+`{{${s}}} `)};return e.jsxs("div",{className:"webhook-settings-container",children:[e.jsx("div",{className:"scanline",style:{position:"absolute",inset:0,pointerEvents:"none",opacity:.05,zIndex:1001}}),e.jsxs("div",{className:"webhook-header",children:[e.jsxs("div",{className:"webhook-title",children:[e.jsx(k,{className:"webhook-icon",size:20}),e.jsx("h2",{children:"Notification Webhooks"})]}),e.jsx("p",{className:"webhook-subtitle",children:"Configure Slack or generic webhooks to receive alerts for critical infrastructure events."})]}),e.jsxs("div",{className:"webhook-list",children:[x.map(s=>e.jsxs("div",{className:"webhook-card",children:[e.jsxs("div",{className:"webhook-card-header",children:[e.jsxs("div",{className:"webhook-url-display",children:[e.jsx("span",{className:"platform-tag",children:s.payloadTemplate?"CUSTOM":"SLACK"}),e.jsx("span",{className:"url-text",children:s.url})]}),e.jsx("button",{className:"delete-btn",onClick:()=>S(s.id),children:e.jsx(g,{size:16})})]}),e.jsx("div",{className:"webhook-events-list",children:JSON.parse(s.events).map(a=>{const l=v.find(z=>z.id===a);return e.jsxs("span",{className:"event-pill",children:[l==null?void 0:l.icon,(l==null?void 0:l.label)||a]},a)})})]},s.id)),x.length===0&&e.jsxs("div",{className:"empty-webhook-state",children:[e.jsx(k,{size:48,className:"empty-icon"}),e.jsx("p",{children:"No webhooks configured yet."})]})]}),e.jsxs("div",{className:"add-webhook-form",children:[e.jsxs("div",{className:"form-scrollable-content",children:[e.jsx("h3",{children:"Add New Webhook"}),e.jsx("div",{className:"form-group",children:e.jsx("input",{type:"text",className:"webhook-input",placeholder:"https://hooks.slack.com/services/...",value:t,onChange:s=>p(s.target.value)})}),e.jsxs("div",{className:"events-selection",children:[e.jsx("label",{children:"Trigger Events:"}),e.jsx("div",{className:"events-grid",children:v.map(s=>e.jsxs("div",{className:`event-checkbox ${r.includes(s.id)?"selected":""}`,onClick:()=>T(s.id),children:[s.icon,e.jsx("span",{children:s.label}),r.includes(s.id)&&e.jsx(A,{size:14,className:"check-icon"})]},s.id))})]}),e.jsxs("div",{className:"template-section",children:[e.jsxs("div",{className:"template-header",onClick:()=>b(!c),children:[e.jsxs("div",{className:"template-toggle",children:[e.jsx(W,{size:16,className:c?"text-yellow-400":"text-gray-400"}),e.jsx("span",{children:"Use Custom Payload (Optional)"})]}),e.jsx("span",{className:"toggle-indicator",children:c?"−":"+"})]}),c&&e.jsxs("div",{className:"template-editor",children:[e.jsxs("p",{className:"template-hint",children:["Define a JSON or text template. Use variables like ",e.jsx("code",{children:"{{udid}}"})," to insert dynamic data."]}),e.jsx("div",{className:"variable-chips",children:["udid","host","name","sessionId","failureReason","eventType","platform"].map(s=>e.jsx("span",{className:"variable-chip",onClick:()=>E(s),children:s},s))}),e.jsx("textarea",{className:"template-textarea",placeholder:'Example JSON: { "text": "Alert: Device {{udid}} is offline!" }',value:f,onChange:s=>h(s.target.value),rows:3})]})]})]}),e.jsxs("div",{className:"form-actions",children:[e.jsx("button",{className:`test-btn ${d}`,onClick:C,disabled:!t,children:d==="success"?"Sent!":d==="error"?"Failed":"Test Payload"}),e.jsx("button",{className:"add-btn",onClick:y,disabled:!t||N,children:N?"Saving...":"Save Configuration"})]})]})]})};export{J as WebhookSettings};
|
package/lib/public/index.html
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
Learn how to configure a non-root public URL by running `npm run build`.
|
|
25
25
|
-->
|
|
26
26
|
<title>Xenon</title>
|
|
27
|
-
<script type="module" crossorigin src="/xenon/assets/index-
|
|
27
|
+
<script type="module" crossorigin src="/xenon/assets/index-W_MoQvsw.js"></script>
|
|
28
28
|
<link rel="stylesheet" crossorigin href="/xenon/assets/index-qzCez_kk.css">
|
|
29
29
|
</head>
|
|
30
30
|
|