:root{--bg:#f4f3ef;--panel:#fff;--ink:#171717;--muted:#777;--line:#dedbd3;--soft:#f7f6f2;--green:#34c759;--red:#b33b3b;--blue:#2563eb;--radius:16px;--sidebar:224px}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",Arial,sans-serif;color:var(--ink);background:var(--bg)}button,input,select{font:inherit}button{cursor:pointer}.hidden{display:none!important}.app-shell{min-height:100vh;display:grid;grid-template-columns:var(--sidebar) minmax(0,1fr)}.sidebar{position:sticky;top:0;height:100vh;padding:24px 16px;background:#171717;color:#fff;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:11px;padding:0 8px 24px}.brand-mark{width:39px;height:39px;border-radius:11px;background:#fff;display:grid;place-items:center;overflow:hidden}.brand-mark img{width:31px;height:31px;object-fit:contain}.brand strong{display:block;font-size:16px}.brand a{display:block;margin-top:2px;color:#a8a8a8;font-size:10px;text-decoration:none}.nav-list{display:grid;gap:5px}.nav-item{border:0;background:transparent;color:#bdbdbd;text-align:left;padding:12px 12px;border-radius:11px;font-weight:700;display:flex;gap:10px;align-items:center}.nav-item span{width:22px;color:#666;font:10px ui-monospace,monospace}.nav-item.active,.nav-item:hover{background:#2a2a2a;color:#fff}.main-content{min-width:0}.topbar{min-height:76px;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:14px 24px;border-bottom:1px solid var(--line);background:rgba(244,243,239,.92);backdrop-filter:blur(14px);position:sticky;top:0;z-index:30}.eyebrow{margin:0 0 3px;color:#8b8b8b;font-size:9px;font-weight:800;letter-spacing:.14em}.topbar h1{margin:0;font-size:23px}.top-actions{display:flex;align-items:center;gap:10px}.download-slot{display:flex;align-items:center;gap:12px;padding:8px 14px;border:1px solid #d9d6cf;border-radius:13px;background:#fff;text-decoration:none;color:#171717;min-width:166px;transition:.15s}.download-slot:hover{transform:translateY(-1px);box-shadow:0 5px 18px rgba(0,0,0,.07)}.download-slot strong,.download-slot small{display:block}.download-slot strong{font-size:12px}.download-slot small{margin-top:2px;color:#949494;font-size:9px}.download-slot b{margin-left:auto;font-size:18px}.icon-btn,.button{border:1px solid #d9d6cf;border-radius:10px;background:#fff;color:#222;font-weight:750}.icon-btn{width:38px;height:38px}.button{padding:9px 13px}.button.primary{background:#171717;color:#fff;border-color:#171717}.button.secondary{background:#f7f7f5}.button.danger{color:var(--red)}.page{display:none;padding:22px 24px 80px}.page.active{display:block}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:0 4px 16px rgba(0,0,0,.025)}.panel+.panel{margin-top:14px}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:14px}.panel-head h2{margin:0 0 4px;font-size:17px}.panel-head p,.muted{margin:0;color:var(--muted);font-size:11px;line-height:1.55}.source-actions{display:flex;gap:8px;flex-wrap:wrap}.manual-add{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;margin-top:12px}.manual-add input,.field input,.field select{width:100%;min-height:40px;padding:8px 10px;border:1px solid #d8d8d8;border-radius:10px;background:#fff}.device-grid{display:grid;grid-template-columns:repeat(3,minmax(220px,1fr));gap:11px}.device-card{border:1px solid #ddd;border-radius:14px;padding:14px;background:#fff;text-align:left}.device-card.active{border-color:#171717;box-shadow:inset 0 0 0 1px #171717}.device-top{display:flex;justify-content:space-between;gap:10px}.device-title{min-width:0}.device-title strong,.device-title small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-title small{margin-top:4px;color:#8b8b8b;font:9px ui-monospace,monospace}.status-pill{padding:4px 8px;border-radius:99px;background:#f0f0f0;color:#666;font-size:9px;font-weight:800;height:fit-content}.status-pill.local{background:#edf8f1;color:#247047}.status-pill.cloud{background:#eef4ff;color:#315eaa}.status-pill.offline{background:#f3f3f3;color:#999}.device-meta{margin-top:10px;color:#777;font-size:10px;line-height:1.5}.empty{padding:34px;text-align:center;color:#888}.control-grid{display:grid;grid-template-columns:320px minmax(0,1fr);gap:14px}.device-picker{display:grid;gap:8px;max-height:calc(100vh - 160px);overflow:auto}.picker-item{padding:11px;border:1px solid #ddd;border-radius:11px;background:#fff;text-align:left}.picker-item.active{border-color:#171717;background:#fafafa}.control-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.field{display:grid;gap:6px;margin-top:12px}.field label{font-size:10px;color:#777;font-weight:750}.range-row{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center}.composer-grid{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:14px}.canvas-panel{padding:16px}.canvas-wrap{padding:12px;background:#171717;border-radius:13px;display:grid;place-items:center;overflow:auto}.canvas-shell{width:min(100%,1024px);aspect-ratio:1024/600}.canvas-shell canvas{display:block;width:100%;height:100%;background:#fff;border-radius:5px}.tools{display:grid;gap:14px}.tools h3{margin:0 0 8px;font-size:13px}.tool-section{padding-bottom:14px;border-bottom:1px solid #e8e6e0}.tool-section:last-child{border:0;padding-bottom:0}.row{display:grid;grid-template-columns:1fr 1fr;gap:8px}.progress{min-height:18px;margin-top:8px;color:#777;font-size:10px}.batch-device-list{display:grid;grid-template-columns:repeat(3,minmax(200px,1fr));gap:8px}.batch-device{display:flex;align-items:center;gap:9px;padding:11px;border:1px solid #ddd;border-radius:11px}.batch-device input{width:16px;height:16px}.privacy-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.privacy-card{padding:15px;border:1px solid #ddd;border-radius:13px;background:#fafafa}.privacy-card strong{display:block;margin-bottom:6px}.login-overlay{position:fixed;inset:0;z-index:100;background:rgba(244,243,239,.97);display:grid;place-items:center;padding:20px}.login-card{width:min(460px,100%);background:#fff;border:1px solid var(--line);border-radius:20px;padding:28px;text-align:center;box-shadow:0 18px 70px rgba(0,0,0,.12)}.login-card h1{margin:0 0 8px}.login-card p{color:#777;font-size:12px;line-height:1.55}.qrbox{width:240px;height:240px;margin:16px auto;padding:10px;border:1px solid #ddd;border-radius:15px}.qrbox canvas{width:100%;height:100%}.toast{position:fixed;right:20px;bottom:20px;z-index:150;max-width:420px;padding:11px 14px;border-radius:11px;background:#171717;color:#fff;font-size:11px;box-shadow:0 10px 32px rgba(0,0,0,.18)}.toast.good{background:#246342}.toast.bad{background:#923d3d}.modal{position:fixed;inset:0;z-index:120;background:rgba(0,0,0,.3);display:grid;place-items:center;padding:20px}.modal-card{width:min(620px,100%);background:#fff;border-radius:18px;padding:20px;box-shadow:0 20px 70px rgba(0,0,0,.2)}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.modal-head h2{margin:0 0 4px}.ble-status-box{padding:12px;margin:13px 0;border:1px solid #ddd;border-radius:11px;background:#f7f7f7;color:#666;font-size:11px}.ios-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:13px}.ios-switch{position:relative;display:inline-flex}.ios-switch input{position:absolute;opacity:0}.ios-track{width:46px;height:27px;border-radius:99px;background:#d1d1d6;position:relative;transition:.2s}.ios-track i{position:absolute;left:2px;top:2px;width:23px;height:23px;border-radius:50%;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.25);transition:.2s}.ios-switch input:checked+.ios-track{background:#34c759}.ios-switch input:checked+.ios-track i{transform:translateX(19px)}@media(max-width:1050px){.device-grid,.batch-device-list{grid-template-columns:repeat(2,minmax(200px,1fr))}.composer-grid,.control-grid{grid-template-columns:1fr}.device-picker{max-height:none}}@media(max-width:760px){:root{--sidebar:74px}.brand>div:last-child,.nav-item{font-size:0}.nav-item span{font-size:10px}.brand{padding-left:0;padding-right:0;justify-content:center}.sidebar{padding:18px 9px}.nav-item{justify-content:center}.topbar{padding:12px}.download-slot{min-width:0;padding:8px 10px}.download-slot .download-copy{display:none}.page{padding:14px 12px 70px}.device-grid,.batch-device-list,.privacy-grid{grid-template-columns:1fr}.manual-add,.row{grid-template-columns:1fr}.topbar h1{font-size:19px}}





/* =========================================================

   Lybom unified mini-program visual skin

   Mirrors Mini Program v58 design tokens:

   green #07c160, bg #f2f4f6, white cards, quiet borders,

   large rounded surfaces and one obvious primary action.

   ========================================================= */

:root{

  --mp-primary:#07c160;

  --mp-primary-2:#0fa34e;

  --mp-bg:#f2f4f6;

  --mp-surface:#ffffff;

  --mp-text-1:#1a1a1a;

  --mp-text-2:#555555;

  --mp-text-3:#9aa0a6;

  --mp-border:#ebebeb;

  --mp-blue:#4e9bff;

  --mp-danger:#fa5151;

  --mp-shadow:0 4px 20px rgba(0,0,0,.06);

  --mp-shadow-green:0 8px 24px rgba(7,193,96,.18);

  --mp-radius:18px;

}

html,body{background:var(--mp-bg)!important;color:var(--mp-text-1)!important}

.sidebar{

  background:var(--mp-surface)!important;

  color:var(--mp-text-1)!important;

  border-right:1px solid var(--mp-border)!important;

  box-shadow:none!important;

}

.brand-mark{background:#eefaf3!important;box-shadow:none!important;border:1px solid #def3e7!important}

.brand strong{color:var(--mp-text-1)!important}

.brand a,.brand-site,.brand span{color:var(--mp-text-3)!important}

.nav-item{color:#777!important;background:transparent!important;box-shadow:none!important}

.nav-item span{color:#b2b2b2!important}

.nav-item:hover{color:var(--mp-primary)!important;background:#f4fbf7!important}

.nav-item.active{color:var(--mp-primary)!important;background:#e8f9ef!important;box-shadow:none!important;font-weight:800!important}

.nav-item.active span{color:var(--mp-primary)!important}

.privacy-card{background:#f7fcf9!important;border-color:#dceee3!important;color:var(--mp-text-1)!important}

.privacy-card span{color:#7b838c!important}

.privacy-dot{background:var(--mp-primary)!important;box-shadow:0 0 0 5px rgba(7,193,96,.12)!important}

.main-content{background:var(--mp-bg)!important}

.topbar{

  background:rgba(255,255,255,.96)!important;

  border-bottom:1px solid var(--mp-border)!important;

  box-shadow:0 4px 18px rgba(0,0,0,.025)!important;

  backdrop-filter:blur(16px)!important;

  -webkit-backdrop-filter:blur(16px)!important;

}

.eyebrow,.panel-kicker{color:#9aa0a6!important;letter-spacing:.12em!important}

.topbar h1{color:var(--mp-text-1)!important}

.panel,.device-card,.stat-card,.privacy-card,.mode-card,.modal-card,.login-card{

  background:var(--mp-surface)!important;

  border-color:var(--mp-border)!important;

  border-radius:var(--mp-radius)!important;

  box-shadow:var(--mp-shadow)!important;

}

.panel h2,.panel h3,.section-toolbar h2{color:var(--mp-text-1)!important}

.panel-head p:not(.panel-kicker),.section-toolbar p,.settings-copy,.muted{color:#8b929a!important}

.button{border-radius:14px!important;min-height:42px!important;box-shadow:none!important}

.button.primary{

  background:linear-gradient(135deg,var(--mp-primary),var(--mp-primary-2))!important;

  border-color:var(--mp-primary)!important;

  color:#fff!important;

  box-shadow:var(--mp-shadow-green)!important;

}

.button.primary:hover{background:var(--mp-primary-2)!important}

.button.secondary{background:var(--mp-blue)!important;border-color:var(--mp-blue)!important;color:#fff!important}

.button.ghost{background:#fff!important;border-color:var(--mp-border)!important;color:#555!important}

.button.danger{background:#fff!important;border-color:#ffd7d7!important;color:var(--mp-danger)!important}

.button.danger.subtle{background:#fff6f6!important;color:var(--mp-danger)!important;border-color:#ffd7d7!important}

.text-link{color:var(--mp-primary)!important}

input,select{

  background:#fafafa!important;

  border-color:#e8e8e8!important;

  border-radius:12px!important;

  color:var(--mp-text-1)!important;

}

input:focus,select:focus{border-color:var(--mp-primary)!important;box-shadow:0 0 0 3px rgba(7,193,96,.11)!important}

input[type="range"]{accent-color:var(--mp-primary)!important;background:transparent!important}

.device-card:hover{box-shadow:0 7px 24px rgba(0,0,0,.08)!important}

.device-card.selected,.device-card.active{border-color:rgba(7,193,96,.65)!important;box-shadow:0 0 0 2px rgba(7,193,96,.10)!important}

.device-footer{border-top-color:var(--mp-border)!important}

.device-footer button{color:var(--mp-primary)!important}

.metric,.target-summary,.file-summary,.ble-status-box{background:#f7f8f9!important}

.status-badge.online,.status-pill.local{color:var(--mp-primary)!important;background:#e8f9f0!important}

.status-pill.cloud{color:#397ad7!important;background:#eef4ff!important}

.segmented{background:#f4f5f6!important;border-color:var(--mp-border)!important}

.segmented button.active{color:var(--mp-primary)!important;background:#fff!important}

.template-chip.active,.text-layer.active{background:var(--mp-primary)!important;border-color:var(--mp-primary)!important;color:#fff!important}

.progress-rail i{background:linear-gradient(90deg,var(--mp-primary),#22cf73)!important}

.scan-progress{color:var(--mp-primary)!important}

.scan-progress i{border-top-color:var(--mp-primary)!important}

.empty-state,.empty{background:rgba(255,255,255,.62)!important;border-color:#d8dde5!important}

.empty-orbit{border-color:#cfe8d9!important;box-shadow:0 0 0 9px rgba(7,193,96,.06)!important}

.empty-orbit span{color:var(--mp-primary)!important}

.runtime-slot,.download-slot,.connection-state,.icon-btn{

  background:#fff!important;

  border-color:var(--mp-border)!important;

  box-shadow:none!important;

}

.download-slot:hover{border-color:#cdebd8!important;box-shadow:0 7px 22px rgba(7,193,96,.10)!important}

.download-slot strong{color:var(--mp-text-1)!important}

.download-slot small{color:#9aa0a6!important}

.download-slot b{color:var(--mp-primary)!important}

.runtime-copy strong{color:var(--mp-text-1)!important}

.runtime-copy small{color:#8d949c!important}

.ios-switch-track,.ios-track{background:#d1d1d6!important}

.ios-switch input:checked+.ios-switch-track,.ios-switch input:checked+.ios-track{background:var(--mp-primary)!important}

body.local-isolated .runtime-slot{background:#fffaf0!important;border-color:#f2d39b!important}

body.local-isolated .runtime-copy strong{color:#9a5b00!important}

.canvas-wrap{border-color:#dfe3e6!important;background:#e9ecef!important}

.upload-drop{background:#fafafa!important;border-color:#ccd2d8!important}

.drawer-backdrop{background:rgba(0,0,0,.30)!important}

.device-drawer{border-left:1px solid var(--mp-border)!important;box-shadow:-18px 0 54px rgba(0,0,0,.12)!important}

.toast{border-left-color:var(--mp-primary)!important}

.toast.success,.toast.good{background:#167a45!important;color:#fff!important;border-color:#167a45!important}

.toast.error,.toast.bad{background:#a83d3d!important;color:#fff!important;border-color:#a83d3d!important}



/* Make the first action obvious, like the mini program. */

.source-compact-button:first-child{background:linear-gradient(135deg,var(--mp-primary),var(--mp-primary-2))!important;color:#fff!important;border-color:var(--mp-primary)!important;box-shadow:var(--mp-shadow-green)!important}



@media(max-width:820px){

  .sidebar{background:rgba(255,255,255,.98)!important;border-right:0!important;border-top:1px solid var(--mp-border)!important}

  .nav-item.active{box-shadow:inset 0 -3px var(--mp-primary)!important}

}



/* Web-console specific mini-program skin */

:root{--bg:#f2f4f6!important;--panel:#fff!important;--ink:#1a1a1a!important;--muted:#8b929a!important;--line:#ebebeb!important;--soft:#fafafa!important;--green:#07c160!important;--blue:#4e9bff!important;--red:#fa5151!important;--radius:18px!important}

.page{padding-top:24px!important}

.panel{padding:22px!important}

.panel-head h2{font-size:18px!important}

.manual-add{background:#fafafa;border:1px solid var(--mp-border);border-radius:16px;padding:12px}

.device-card{padding:16px!important;text-align:left!important}

.device-title strong{font-size:15px!important}.device-title small{color:#9aa0a6!important}

.picker-item{border-color:var(--mp-border)!important;border-radius:14px!important}

.picker-item.active{border-color:rgba(7,193,96,.65)!important;background:#f0fbf5!important}

.canvas-wrap{background:#202225!important;padding:14px!important;border-radius:16px!important}

.tools{gap:16px!important}.tool-section{border-bottom-color:var(--mp-border)!important}

.login-overlay{background:rgba(242,244,246,.97)!important}

.login-card{max-width:440px!important}

.login-card h1{font-size:24px!important}.login-card p{font-size:13px!important}

.qrbox{border-color:var(--mp-border)!important;border-radius:18px!important}

.ble-status-box{background:#f7fcf9!important;border-color:#dceee3!important}

.privacy-card{background:#f7fcf9!important}

@media(max-width:760px){.topbar{background:#fff!important}.page{padding-top:14px!important}}



/* Login: explicit offline path below WeChat QR */

.login-or{display:flex;align-items:center;gap:12px;margin:18px 0 12px;color:#b0b5bb;font-size:12px}

.login-or::before,.login-or::after{content:"";height:1px;background:#eceeef;flex:1}

.login-or span{white-space:nowrap}

.login-download{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:58px;border:1px solid #e5e8eb;border-radius:14px;background:#fff;color:#1a1a1a;text-decoration:none;transition:.15s}

.login-download:hover{border-color:#cdebd8;background:#f8fdf9;box-shadow:0 7px 22px rgba(7,193,96,.08);transform:translateY(-1px)}

.login-download strong{font-size:15px;line-height:1.25}

.login-download small{margin-top:4px;color:#9aa0a6;font-size:11px;line-height:1.2}



/* Unified connection availability */

.button:disabled,.icon-btn:disabled,input:disabled,select:disabled{opacity:.42!important;cursor:not-allowed!important;box-shadow:none!important;filter:grayscale(.35)}

.control-disabled{opacity:.48;filter:grayscale(.25)}

.control-disabled .button,.control-disabled input,.control-disabled select{pointer-events:none}

.connection-note{margin:2px 0 14px;padding:10px 12px;border-radius:12px;background:#f7f8f9;border:1px solid #eceff1;color:#7d858d;font-size:12px;line-height:1.45}

.connection-note.connected{background:#f1fbf5;border-color:#d7f1e1;color:#25804e}

.connection-note.offline{background:#f6f6f6;border-color:#e9e9e9;color:#9ca1a7}

.status-pill.ble{color:#3477d1!important;background:#eef5ff!important}

.status-pill.local{color:#078b49!important;background:#e8f9ef!important}

.status-pill.cloud{color:#397ad7!important;background:#eef4ff!important}

.batch-device.offline{opacity:.46}

.batch-device.offline input{pointer-events:none}

.ble-wifi-details{margin-top:14px;border-top:1px solid var(--mp-border);padding-top:12px}

.ble-wifi-details summary{cursor:pointer;font-weight:750;color:#555;list-style:none}

.ble-wifi-details summary::-webkit-details-marker{display:none}

.ble-wifi-details summary:after{content:'⌄';float:right;color:#9aa0a6}

.source-actions{display:flex;gap:10px;flex-wrap:wrap}

/* v1.2.010 unified editor/control refinement */

.top-action-card,.icon-btn{height:52px;border:1px solid #d9d6cf;border-radius:14px;background:#fff;color:#171717;display:flex;align-items:center;justify-content:center;text-decoration:none;transition:.15s}.top-action-card{padding:0 15px;font-weight:800}.top-action-card:hover,.icon-btn:hover{transform:translateY(-1px);box-shadow:0 5px 18px rgba(0,0,0,.07)}.icon-btn{width:52px;padding:0}.download-slot{min-width:164px;gap:12px}.language-wrap{position:relative}.language-btn{min-width:112px}.language-menu{position:absolute;right:0;top:60px;width:150px;padding:7px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 14px 38px rgba(0,0,0,.12);z-index:80}.language-menu button{display:block;width:100%;border:0;background:transparent;text-align:left;padding:10px 12px;border-radius:9px}.language-menu button:hover{background:var(--soft)}

.add-device-panel .panel-head{align-items:center}.source-actions{display:flex;gap:9px;flex-wrap:wrap}.button.ghost{background:transparent;border-color:transparent;color:#777}.button.danger{background:#fff;color:#a33;border-color:#e6c8c8}.button.full-button{width:100%;margin-top:10px}.mini-button{border:1px solid #d9d6cf;background:#fff;color:#222;border-radius:10px;padding:7px 10px;font-weight:750;cursor:pointer}.mini-button:hover{background:#f7f6f2}.mini-button.primary-file{background:#07c160;color:#fff;border-color:#07c160}.mini-button.danger-text{color:#a33}.mini-label{font-size:11px;color:#8a8a8a;font-weight:750}

.refined-control-grid{grid-template-columns:340px minmax(0,1fr);align-items:start}.control-device-picker-panel{min-height:560px}.control-main-panel{min-height:560px}.control-block-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:14px}.control-block{border:1px solid var(--line);background:#fbfbf9;border-radius:15px;padding:16px;min-width:0}.control-block h3{margin:0 0 13px;font-size:15px}.danger-block{background:#fffafa}.action-grid{display:grid;gap:9px}.action-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.action-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.compact-field{margin-top:14px}.display-current{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 12px;background:#fff;border:1px solid var(--line);border-radius:11px;margin-bottom:10px}.display-current span{font-size:12px;color:#888}.saved-slot-wrap{margin-top:12px}.slot-chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px}.slot-chip{border:1px solid var(--line);background:#fff;border-radius:999px;padding:5px 9px;font-size:11px;font-weight:750;cursor:pointer}.slot-chip.active{border-color:#07c160;color:#078a49;background:#ecfff5}.info-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.info-grid>div{padding:11px;background:#fff;border:1px solid var(--line);border-radius:11px;min-width:0}.info-grid span,.info-grid strong{display:block}.info-grid span{font-size:10px;color:#888;margin-bottom:5px}.info-grid strong{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.control-disabled .control-block{opacity:.46}.control-disabled [data-device-action]{cursor:not-allowed}

.advanced-editor{grid-template-columns:minmax(0,1fr) 430px;align-items:start}.editor-canvas-panel{position:sticky;top:96px}.canvas-status{display:flex;justify-content:space-between;gap:10px;color:#8a8a8a;font-size:11px;margin-top:9px}.advanced-tools{max-height:calc(100vh - 116px);overflow:auto}.tool-title-row{display:flex;justify-content:space-between;align-items:center;gap:9px}.tool-title-row h3{margin:0}.tool-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.editor-slider{margin-top:12px}.editor-slider label{display:flex;justify-content:space-between;font-size:12px;color:#777;font-weight:750;margin-bottom:5px}.editor-slider input[type=range]{width:100%}.toggle-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:11px;font-size:12px}.toggle-row label{display:flex;gap:6px;align-items:center}.text-layer-list{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}.text-layer-chip{border:1px solid var(--line);background:#fff;border-radius:999px;padding:6px 10px;font-size:11px;max-width:145px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.text-layer-chip.active{border-color:#07c160;background:#ecfff5;color:#067b42}.text-editor{border-top:1px solid var(--line);padding-top:4px}.field input[type=color]{height:43px;padding:5px}.canvas-shell canvas{touch-action:none;cursor:grab}.canvas-shell canvas:active{cursor:grabbing}.send-panel{margin-top:14px;padding:16px 18px}.send-device-line{display:flex;justify-content:space-between;gap:18px;align-items:center}.send-device-line strong,.send-device-line small{display:block}.send-device-line small{font-size:11px;color:#888;margin-top:4px}.big-send{min-width:190px;min-height:48px;font-size:15px}.progress{margin-top:7px}.batch-target-panel{margin-top:14px}.refined-batch-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.batch-device{position:relative}.batch-device>span{min-width:0}.batch-device strong{display:block;font-size:15px}.batch-device .muted{display:block;margin-top:3px;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.batch-route{position:absolute;right:12px;top:10px}.batch-device-status{font-size:10px;margin-top:5px;color:#888}.batch-footer{display:flex;gap:15px;align-items:center;margin-top:15px}.settings-compact{padding:2px 22px}.settings-row{display:flex;justify-content:space-between;gap:18px;align-items:center;padding:20px 0;border-bottom:1px solid var(--line)}.settings-row:last-child{border-bottom:0}.settings-row h2{font-size:16px;margin:0}.settings-row p{font-size:11px;color:#888;margin:4px 0 0}.segmented{display:flex;padding:3px;border:1px solid var(--line);border-radius:12px;background:#f7f6f2}.segmented button{border:0;background:transparent;border-radius:9px;padding:7px 10px;font-size:11px}.segmented button.active{background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.08)}.login-language{display:flex;justify-content:flex-end;margin-bottom:4px}.login-language select{border:1px solid var(--line);border-radius:9px;padding:6px 8px;background:#fff}

@media(max-width:1180px){.advanced-editor{grid-template-columns:1fr}.editor-canvas-panel{position:static}.advanced-tools{max-height:none}.refined-control-grid{grid-template-columns:300px minmax(0,1fr)}.refined-batch-list{grid-template-columns:repeat(2,minmax(0,1fr))}}

@media(max-width:900px){.refined-control-grid{grid-template-columns:1fr}.control-block-grid{grid-template-columns:1fr}.refined-batch-list{grid-template-columns:1fr}.top-actions{gap:6px}.language-btn{min-width:auto}.download-slot{min-width:130px}.send-device-line{align-items:stretch;flex-direction:column}.big-send{width:100%}}



/* Unified product UI, 1.2.011 */

:root{--bg:#f5f7f6;--soft:#f6f8f7;--ink:#1f2924;--muted:#65716b;--line:#e4e9e6;--green:#07a957;--radius:16px;--sidebar:208px}

body,input,button,select,textarea{font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:14px;letter-spacing:0}body{background:var(--bg)}button,a,input,select{outline-offset:4px}button:focus-visible,a:focus-visible{outline:2px solid var(--green)}

.sidebar{background:#fff;border-right:1px solid var(--line);padding:28px 16px}.brand{gap:12px;padding:0 12px 30px}.brand-mark{background:transparent!important;border:0!important;box-shadow:none!important;border-radius:0!important;width:36px;height:36px;padding:0}.brand-mark img{width:100%;height:100%;object-fit:contain}.brand strong{font-size:24px;letter-spacing:-.6px}.nav-list{gap:8px}.nav-item{height:48px;gap:14px;font-size:15px;font-weight:550;border-radius:12px;padding:0 16px}.nav-item.active{background:#e9f7ef;color:#068547}.ui-icon{width:20px;height:20px;flex:none}.main-content{padding:28px 32px;max-width:1800px}.topbar{gap:20px;align-items:center;margin-bottom:28px}.topbar h1{font-size:26px;font-weight:650;line-height:1.3;letter-spacing:-.5px;margin:0}.top-actions{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr));gap:8px}.top-actions .top-action-card{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;height:44px;min-height:44px;min-width:0;margin:0;padding:0 14px;background:#fff;border:1px solid var(--line);border-radius:12px;color:var(--ink);font-size:14px;font-weight:550;white-space:nowrap;text-decoration:none;box-shadow:none}.top-actions .top-action-card:hover{background:#edf5ef;border-color:#c6dccf}.language-wrap{min-width:0}.language-menu{z-index:60;right:0;min-width:150px}.panel{border:1px solid var(--line);box-shadow:0 2px 6px #15362203;border-radius:16px;padding:24px}.panel h2{font-size:18px;font-weight:600}.panel h3{font-size:15px;font-weight:600}.source-actions{gap:10px;flex-wrap:wrap}.button{min-height:42px;border-radius:10px;font-size:14px;font-weight:550;padding:10px 16px}.button.primary{background:var(--green);border-color:var(--green);color:white}.button.secondary{background:#fff;border:1px solid var(--line)}.button.ghost{color:var(--muted)}.connection-guide{font-size:13px;color:var(--muted);line-height:1.6;margin:0 0 16px}.connection-guide:empty{display:none}.add-device-panel .panel-head{align-items:center}.device-card{border:1px solid var(--line);background:white;border-radius:14px;padding:20px}.device-card.active{border-color:#59bb86;box-shadow:0 0 0 1px #59bb86}.device-title strong{font-size:16px}.device-title small{font-size:12px}.device-meta{font-size:12px}.empty{padding:48px 20px;font-size:14px}.status-pill{font-size:12px;font-weight:550}.advanced-editor{grid-template-columns:minmax(0,1fr) 360px;gap:20px;align-items:start}.editor-canvas-panel{position:sticky;top:20px;padding:20px;min-width:0;order:0}.editor-canvas-panel .canvas-wrap{padding:24px 0;min-height:0;background:transparent}.canvas-shell{box-shadow:0 6px 30px #16382412;border:1px solid var(--line);border-radius:6px;overflow:hidden}.canvas-shell canvas{width:100%;height:auto;display:block;touch-action:none}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px}.canvas-status{font-size:12px;color:var(--muted);gap:12px;flex-wrap:wrap}.advanced-tools{padding:0;max-height:none;overflow:visible}.tool-section{padding:20px;border-bottom:1px solid var(--line)}.tool-section:last-child{border:0}.tool-section h3{margin:0 0 14px}.tool-title-row{align-items:center;gap:10px;flex-wrap:wrap}.tool-actions{gap:6px;flex-wrap:wrap}.mini-button{min-height:34px;padding:7px 10px;font-size:12px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}.field label,.editor-slider label{font-size:12px;color:var(--muted)}.field input,.field select{min-width:0;height:38px;border:1px solid var(--line);border-radius:8px;font-size:13px;background:#fff}.text-layer-list{gap:6px}.text-layer-chip{border-radius:8px;font-size:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis}.template-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px}.template-card{border:1px solid var(--line);border-radius:10px;background:var(--soft);padding:8px 4px;color:var(--ink);font-size:12px;cursor:pointer;display:grid;gap:7px;place-items:center}.template-card:hover,.template-card.active{border-color:#57b782;background:#ecf8f1}.template-card svg{width:70px;height:42px}.component-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.component-choice{display:flex;align-items:center;gap:8px;background:var(--soft);padding:10px;border-radius:8px;font-size:13px}.component-choice input{accent-color:var(--green)}.component-settings{border:1px solid var(--line);padding:12px;border-radius:10px;margin-top:10px}.component-settings summary{cursor:pointer;font-size:13px}.component-settings .row{margin-top:10px}.saved-templates{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.send-panel{margin-top:20px}.big-send{min-height:44px;font-size:14px}.login-card{border-radius:20px;padding:32px;box-shadow:0 16px 80px #17342612}.login-card h1{font-size:23px}.login-overlay{background:#f4f7f5f5}.login-card #localModeBtn{margin-top:16px;width:100%}.control-block{border:1px solid var(--line);border-radius:12px;box-shadow:none}.control-block-grid{gap:16px}.control-block .button{font-size:13px}.manual-add{gap:10px;flex-wrap:wrap}.manual-add input{min-height:42px;border:1px solid var(--line);border-radius:10px;padding:10px}.batch-device{padding:16px;border:1px solid var(--line);border-radius:12px}.batch-device.offline{opacity:.55}.toast{max-width:min(90vw,500px);font-size:14px;line-height:1.5}

@media(max-width:1250px){.main-content{padding:24px}.topbar{align-items:flex-start;flex-direction:column}.top-actions{grid-template-columns:repeat(4,1fr)}.advanced-editor{grid-template-columns:minmax(0,1fr) 320px}.source-actions{justify-content:flex-start}}

@media(max-width:900px){.advanced-editor{grid-template-columns:1fr}.editor-canvas-panel{position:static}.advanced-tools{display:grid;grid-template-columns:1fr 1fr}.tool-section{border:1px solid var(--line)}.panel-head{align-items:flex-start;gap:16px;flex-direction:column}.main-content{padding:20px}.top-actions{width:100%;grid-template-columns:repeat(4,1fr)}.top-actions .top-action-card{padding:0 10px}.sidebar{padding:20px 10px}}

@media(max-width:620px){.sidebar{padding:14px 12px}.brand{padding:0 6px 14px}.nav-list{gap:4px;display:grid;grid-template-columns:repeat(5,1fr)}.nav-item{height:58px;padding:7px 2px;gap:5px;display:flex;flex-direction:column;font-size:11px}.nav-item .ui-icon{width:18px;height:18px}.main-content{padding:18px 12px}.topbar h1{font-size:23px}.top-actions{grid-template-columns:repeat(2,1fr)}.top-actions .top-action-card{height:42px}.advanced-tools{display:block}.panel{padding:18px}.advanced-tools{padding:0}.tool-section{padding:18px}.canvas-status{font-size:11px}.source-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}.source-actions .button{padding:10px 8px;font-size:12px}.manual-add input{width:100%}.refined-control-grid{grid-template-columns:1fr}.control-block-grid{grid-template-columns:1fr}.send-device-line{gap:16px;flex-wrap:wrap}.template-grid{grid-template-columns:repeat(3,1fr)}}



.topbar{background:transparent!important;box-shadow:none!important;padding:0!important}.send-panel{position:sticky;bottom:12px;z-index:12;box-shadow:0 6px 24px #12372216}.image-adjustments summary{cursor:pointer;font-size:13px;color:var(--muted);padding-top:10px}.image-adjustments[open] summary{padding-bottom:12px}#sendDevicePicker{margin-top:8px;max-width:100%;border:1px solid var(--line);border-radius:8px;padding:8px;background:white}.toggle-row{flex-wrap:wrap}.editor-canvas-panel{margin-top:0!important}.advanced-tools{margin-top:0!important}

.send-panel{padding:16px 20px!important}.send-device-line>div{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.send-device-line #sendDeviceName,.send-device-line #sendDeviceRoute{display:none}#sendDevicePicker{margin:0;min-width:160px;max-width:320px}.send-device-line{min-height:44px}.send-panel .progress:empty{display:none}.batch-target-panel{margin-top:20px}.component-settings select{margin-top:12px;width:100%;padding:8px;border:1px solid var(--line);border-radius:8px;background:white}@media(max-width:620px){.send-panel{padding:12px!important}.send-device-line{gap:10px}.send-device-line>div{width:100%;justify-content:space-between}#sendDevicePicker{max-width:70%}.big-send{width:100%}}



/* Neutral navigation and controls, with full-color content, 1.2.013. */
:root{--bg:#f5f5f5;--panel:#fff;--soft:#f7f7f7;--ink:#171717;--muted:#646464;--line:#e2e2e2;--green:#171717;--blue:#171717;--mp-primary:#171717;--mp-primary-2:#343434;--mp-shadow-green:0 8px 24px #00000017}
html,body{background:var(--bg);color:var(--ink)}
button,input,select{accent-color:#171717}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid #171717;outline-offset:2px}
.sidebar{background:#fff;border-color:var(--line)}
.nav-item.active,.nav-item:hover{background:#171717!important;color:#fff!important}
.nav-item.active span,.nav-item:hover span,.nav-item.active .ui-icon,.nav-item:hover .ui-icon{color:#fff!important}
.top-actions .top-action-card:hover,.mini-button:hover,.button.secondary:hover{background:#f2f2f2;border-color:#bdbdbd;color:#171717}
.button.primary,.mini-button.primary-file{background:#171717!important;border-color:#171717!important;color:#fff!important;box-shadow:0 8px 24px #00000014!important}
.button.primary:hover,.mini-button.primary-file:hover{background:#333;border-color:#333;color:#fff}
.device-card.active,.template-card.active,.text-layer-chip.active,.slot-chip.active{border-color:#171717;background:#f3f3f3;color:#171717;box-shadow:none}
.status-pill,.connection-note,.component-choice{color:#292929}
.login-overlay{background:#f5f5f5ef}.login-card{box-shadow:0 16px 60px #00000014}
.canvas-shell{box-shadow:0 8px 30px #00000012}
.send-panel{box-shadow:0 8px 24px #00000012}
.advanced-editor{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(300px,.85fr);grid-template-areas:"preview templates" "controls controls";gap:18px;align-items:start}
.editor-canvas-panel{grid-area:preview;position:static;min-width:0;align-self:stretch}
.editor-canvas-panel .canvas-wrap{padding:18px 0 8px}
.template-panel{grid-area:templates;min-width:0;align-self:stretch;padding:20px}
.template-panel h3{margin:0 0 16px;font-size:16px;font-weight:650}
.template-panel .template-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.template-card{min-height:82px;background:#fafafa;border-color:var(--line);color:#252525;transition:background .18s,border-color .18s,transform .18s}
.template-card:hover{background:#f2f2f2;border-color:#999;transform:translateY(-1px)}
.template-card.active{background:#f1f1f1;border:2px solid #171717;transform:none}
.template-panel .tool-actions{justify-content:flex-start}
.advanced-tools{grid-area:controls;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));padding:0;max-height:none;overflow:visible}
.advanced-tools>.tool-section{min-width:0;border:0;border-bottom:1px solid var(--line);padding:22px}
.advanced-tools>.tool-section:nth-child(odd){border-right:1px solid var(--line)}
.advanced-tools>.tool-section:nth-last-child(-n+2){border-bottom:0}
.advanced-tools .component-choice{background:#f7f7f7}
.advanced-tools .text-layer-chip.active{background:#eee}
.page.active{animation:lybom-panel-in .24s cubic-bezier(.2,.7,.2,1) both}
html[data-panel-direction="back"]{--lybom-panel-offset:-22px}
html{--lybom-panel-offset:22px}
@keyframes lybom-panel-in{from{opacity:.65;transform:translateX(var(--lybom-panel-offset))}to{opacity:1;transform:translateX(0)}}
@view-transition{navigation:auto}
::view-transition-old(root){animation:.24s ease both lybom-page-out}
::view-transition-new(root){animation:.3s ease both lybom-page-in}
@keyframes lybom-page-out{to{opacity:.5;transform:translateX(-22px)}}
@keyframes lybom-page-in{from{opacity:.55;transform:translateX(22px)}}
@media(max-width:1050px){.advanced-editor{grid-template-columns:minmax(0,1.4fr) minmax(260px,.9fr)}.template-panel .template-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:820px){.advanced-editor{grid-template-columns:1fr;grid-template-areas:"preview" "templates" "controls"}.template-panel .template-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.advanced-tools{grid-template-columns:1fr}.advanced-tools>.tool-section{border-right:0!important;border-bottom:1px solid var(--line)!important}.advanced-tools>.tool-section:last-child{border-bottom:0!important}}
@media(max-width:540px){.template-panel .template-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.template-panel,.advanced-tools>.tool-section{padding:16px}}
@media(max-width:620px){.app-shell{display:block}.sidebar{position:relative;top:auto;width:100%;height:auto;min-height:0;padding:12px 12px 8px;display:block;border-right:0;border-bottom:1px solid var(--line)}.brand{padding:0 6px 12px}.brand strong{font-size:19px}.brand-mark{width:28px;height:28px}.nav-list{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px}.nav-item{min-width:0;min-height:56px;height:auto;padding:6px 2px;gap:4px;display:flex;flex-direction:column;text-align:center;justify-content:center;font-size:11px;line-height:1.15;white-space:normal}.nav-item .ui-icon{width:17px;height:17px}.main-content{width:100%;min-width:0;padding:16px 12px}.topbar{position:relative;top:auto;margin-bottom:16px}.top-actions{width:100%;grid-template-columns:repeat(2,minmax(0,1fr))}.page{padding:0 0 80px}.panel{min-width:0}.source-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.manual-add{grid-template-columns:1fr}.canvas-status{font-size:11px}}
@media(max-width:620px){.send-panel{position:static;bottom:auto;box-shadow:none}}
@media(prefers-reduced-motion:reduce){.page.active,::view-transition-old(root),::view-transition-new(root){animation:none!important}.template-card{transition:none}}


/* The QR is usable only while the current session is active. */
.qrbox{position:relative;overflow:hidden}
.login-scan-method{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:17px auto 0;padding:4px;max-width:270px;border:1px solid #dedede;border-radius:12px;background:#f5f5f5}
.login-scan-method button{border:0;border-radius:9px;background:transparent;color:#555;padding:8px 6px;font-size:12px;font-weight:650}
.login-scan-method button.active{background:#fff;color:#111;box-shadow:0 1px 5px #00000014}
.qrbox img{display:block;width:100%;height:100%;object-fit:contain;background:#fff}
.qrbox img[hidden],.qrbox canvas[hidden]{display:none}
.qr-cover{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;background:#fffef8ee}
.qr-ready .qr-cover{display:none}
.qr-loading canvas,.qr-expired canvas,.qr-error canvas,.qr-loading img,.qr-expired img,.qr-error img{visibility:hidden}
.qr-refresh{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:108px;height:108px;border:1px solid #222;border-radius:50%;background:#fff;color:#111;font:inherit;font-size:13px;cursor:pointer;box-shadow:0 6px 24px #0002}
.qr-refresh[hidden],.qr-spinner[hidden]{display:none!important}
.qr-refresh:hover{background:#f4f4f4}
.qr-spinner{width:38px;height:38px;border:3px solid #ddd;border-top-color:#111;border-radius:50%;animation:qr-spin .75s linear infinite}
@keyframes qr-spin{to{transform:rotate(360deg)}}
.unified-targets{margin:0 0 18px}
.unified-targets .batch-device-list{max-height:300px;overflow:auto}
.unified-targets .batch-footer{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
@media(max-width:620px){.nav-list{grid-template-columns:repeat(4,minmax(0,1fr))}}

.last-scene-button{margin-left:auto;display:flex;align-items:center;gap:7px;padding:5px 9px;border:1px solid #ddd;border-radius:9px;background:#fff;color:#222;font:inherit;font-size:12px;cursor:pointer;white-space:nowrap}
.last-scene-button:hover{border-color:#222;background:#f7f7f7}
.last-scene-button img{width:48px;height:28px;object-fit:cover;border:1px solid #eee;border-radius:3px}
.last-scene-button img[hidden]{display:none}

.account-card{display:flex;align-items:center;gap:11px;width:100%;margin-top:auto;padding:12px;border:1px solid #dedede;border-radius:12px;background:#fff;color:#171717;text-align:left;cursor:pointer;font:inherit}
.account-card>span:last-child{min-width:0;display:flex;flex-direction:column;gap:3px}
.account-card strong{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.account-card small{font-size:11px;color:#707070}
.account-avatar{display:grid;place-items:center;flex:none;width:33px;height:33px;border-radius:50%;background:#eee;color:#333;font-size:17px}
.account-card.connected .account-avatar{background:#222;color:#fff}
.cloud-scene-choice{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:16px;font-size:13px;cursor:pointer}
.cloud-scene-choice input{accent-color:#111}
.cloud-scene-choice small{width:100%;padding-left:23px;color:#777}
@media(max-width:620px){.account-card{margin-top:10px;padding:8px 10px}}

.last-scene-button[hidden]{display:none}
.unified-targets .button.secondary,.unified-targets .button.ghost{background:#fff;border:1px solid #d7d7d7;color:#222}
.unified-targets .button.secondary:hover,.unified-targets .button.ghost:hover{background:#f2f2f2;border-color:#888}
.unified-targets .button.primary{background:#191919;border-color:#191919;color:#fff}
.button.primary{background:#191919!important;border-color:#191919!important;color:#fff!important}
.button.secondary{background:#fff!important;border-color:#d7d7d7!important;color:#222!important}
.button.secondary:hover{background:#f2f2f2!important;border-color:#888!important}
.mini-button.primary-file{background:#191919!important;border-color:#191919!important;color:#fff!important}
.component-choice input,.cloud-scene-choice input{accent-color:#191919!important}
.ios-switch input:checked+.ios-track{background:#191919!important}
.qr-refresh span{display:none}

/* Composer: one compact canvas, background/template rail, and three-column editor cards. */
.advanced-editor{grid-template-columns:minmax(0,1.7fr) minmax(300px,.82fr);gap:14px;grid-template-areas:"preview templates" "controls controls"}
.editor-canvas-panel{padding:16px;align-self:start}
.editor-canvas-panel .canvas-wrap{padding:8px 0 6px;min-height:0}
.editor-canvas-panel .canvas-toolbar{margin-top:8px}
.template-panel{padding:16px;align-self:start}
.template-panel h3{margin:0 0 12px}
.background-actions{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:16px}
.background-actions .mini-button{min-height:33px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 9px;font-size:12px}
.background-actions .color-pick input{width:22px;height:22px;border:0;padding:0;background:transparent;cursor:pointer}
.template-section-title{font-size:12px;font-weight:750;color:#444;margin:12px 0 8px}
.template-panel .template-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:0}
.template-panel .template-card{min-height:65px;padding:6px 4px;gap:3px}
.template-panel .template-card svg{width:60px;height:36px}
.template-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.template-actions .mini-button{font-size:11px;padding:7px 9px}
.component-select-title{margin-top:16px}
.template-panel .component-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.template-panel .component-choice{min-width:0;padding:7px 6px;font-size:11px;gap:4px;border:1px solid #e7e7e7;border-radius:9px;white-space:nowrap}
.template-panel .component-choice input{margin:0;flex:none}
.advanced-tools{display:block;padding:0;max-height:none}
.advanced-tools>.tool-section{border:0;border-bottom:1px solid var(--line);padding:16px 20px}
.advanced-tools>.tool-section:nth-child(odd){border-right:0}
.advanced-tools>.tool-section:last-child{border-bottom:0}
.advanced-tools h3{font-size:15px;margin:0}
.image-tools .image-adjustments{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;align-items:end;margin-top:12px}
.image-tools .image-adjustments>.row,.image-tools .image-adjustments>.editor-slider,.image-tools .image-adjustments>.toggle-row{min-width:0;margin:0}
.image-tools .image-adjustments .row{gap:7px}
.component-editor-section .tool-title-row{align-items:center;gap:10px;margin-bottom:12px}
.component-editor-section .tool-title-row .muted{font-size:11px}
.component-editor-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.component-edit-card,.component-add-card{position:relative;min-width:0;min-height:142px;border:1px solid #dedede;border-radius:17px;background:#fff;padding:13px;box-shadow:0 3px 12px #00000008}
.component-edit-card.active{border-color:#222;background:#fafafa}
.component-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
.component-card-head strong{font-size:13px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.component-remove{flex:none;width:24px;height:24px;border:0;border-radius:50%;background:#fff0f0;color:#d92b2b;font-size:19px;line-height:22px;cursor:pointer}
.component-remove:hover{background:#d92b2b;color:#fff}
.component-card-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.component-card-fields label{display:flex;flex-direction:column;gap:3px;font-size:10px;color:#666}
.component-card-fields input{min-width:0;width:100%;height:29px;padding:4px 6px;border:1px solid #ddd;border-radius:7px;background:#fff;font-size:12px;color:#222}
.component-card-fields input[type=color]{padding:2px 4px;cursor:pointer}
.component-font{width:100%;margin-top:8px;padding:5px 7px;border:1px solid #ddd;border-radius:7px;background:#fff;font-size:11px}
.text-component-select{display:flex;flex-direction:column;align-items:flex-start;gap:7px;width:100%;border:0;background:none;padding:1px 0;text-align:left;color:#222;cursor:pointer}
.text-component-select span{max-width:100%;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.text-component-select small{font-size:11px;color:#777}
.component-add-card{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:1.5px dashed #b9b9b9;background:#fbfbfb;color:#333;cursor:pointer}
.component-add-card:hover{border-color:#333;background:#f4f4f4}
.component-add-card span{font-size:31px;line-height:1}
.component-add-card small{font-size:11px}
.component-add-menu{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px;padding:10px;border:1px solid #e4e4e4;border-radius:12px;background:#fafafa}
.component-add-menu.hidden{display:none}
.component-editor-section .text-editor{margin-top:12px;padding:12px;border:1px solid #e1e1e1;border-radius:12px;background:#fafafa}
.send-settings .row{max-width:520px}
.send-settings .editor-slider{max-width:520px}
.unified-targets{margin:14px 0 0;padding:18px}
.unified-targets .batch-device-list{max-height:225px}
.unified-targets .cloud-scene-choice{margin:10px 0 14px}
.unified-targets .batch-footer{padding-top:12px;border-top:1px solid #eee}
.unified-targets .big-send{min-width:200px}
@media(max-width:1100px){.advanced-editor{grid-template-columns:minmax(0,1.3fr) minmax(280px,.9fr)}.image-tools .image-adjustments{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:820px){.advanced-editor{grid-template-columns:1fr;grid-template-areas:"preview" "templates" "controls"}.component-editor-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.template-panel .component-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:560px){.component-editor-grid,.image-tools .image-adjustments{grid-template-columns:1fr}.component-edit-card,.component-add-card{min-height:124px}.template-panel .component-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.advanced-tools>.tool-section{padding:14px}.unified-targets .big-send{width:100%}}
.component-edit-card,.component-add-card{min-height:92px;padding:11px;border-radius:14px}
.component-edit-card{cursor:pointer}
.component-card-head{margin-bottom:4px}
.component-card-open{display:flex;flex-direction:column;gap:4px;width:100%;padding:5px 0;border:0;background:transparent;text-align:left;color:#444;cursor:pointer;font-size:12px}
.component-card-open small{color:#777;font-size:10px}
.text-component-select{gap:4px}
.component-popover{position:fixed;z-index:90;top:clamp(90px,15vh,160px);right:clamp(14px,4vw,70px);width:min(410px,calc(100vw - 28px));max-height:calc(100vh - 120px);overflow:auto;padding:17px;border:1px solid #d6d6d6;border-radius:18px;background:#fff;box-shadow:0 18px 60px #0003}
.component-popover.hidden{display:none}
.component-popover-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}
.component-popover-head strong{font-size:16px}
.component-popover-head button{width:29px;height:29px;border:0;border-radius:50%;background:#f1f1f1;color:#333;font-size:21px;cursor:pointer}
.component-popover .component-add-menu{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));margin:0;padding:0;border:0;background:transparent}
.component-popover .component-add-menu.hidden,.component-popover .dynamic-component-editor.hidden,.component-popover .text-editor.hidden{display:none}
.component-popover .component-add-menu .mini-button{min-height:38px}
.component-popover .component-card-fields{gap:11px}
.component-popover .component-card-fields label{font-size:12px}
.component-popover .component-card-fields input{height:35px;font-size:13px}
.component-popover .text-editor{margin:0;padding:0;border:0;background:transparent}
.component-popover .text-editor .row{gap:7px}
.unified-targets .batch-footer{display:flex;align-items:center;flex-wrap:wrap;gap:10px}
.unified-targets .send-settings{display:flex;align-items:end;flex-wrap:wrap;gap:9px;min-width:0}
.send-setting-field{display:flex;flex-direction:column;gap:4px;color:#666;font-size:11px}
.send-setting-field select,.send-setting-field input{height:37px;max-width:175px;padding:5px 9px;border:1px solid #d8d8d8;border-radius:9px;background:#fff;color:#222;font-size:13px}
.send-setting-field input{max-width:76px}
.jpeg-quality-wrap{position:relative}
.jpeg-quality-wrap .mini-button{height:37px}
.jpeg-quality-popover{position:absolute;z-index:80;bottom:calc(100% + 8px);left:0;width:230px;padding:13px;border:1px solid #ddd;border-radius:12px;background:#fff;box-shadow:0 12px 32px #0002}
.jpeg-quality-popover.hidden{display:none}
.jpeg-quality-popover label{display:flex;justify-content:space-between;gap:8px;font-size:12px;margin-bottom:8px}
.jpeg-quality-popover input{width:100%}
.unified-targets .batch-footer .progress{flex-basis:100%}
.unified-targets .batch-device-list .empty{padding:18px 12px}
@media(max-width:560px){.component-editor-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.component-edit-card,.component-add-card{min-height:88px;padding:7px}.component-card-head strong{font-size:11px}.component-remove{width:20px;height:20px;font-size:16px}.component-popover{top:auto;bottom:12px;right:12px;max-height:72vh}.unified-targets .big-send{width:100%}.unified-targets .send-settings{width:100%}}
.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.advanced-editor{align-items:stretch}
.editor-canvas-panel,.template-panel{align-self:stretch}
.advanced-editor>.template-panel{margin-top:0!important}
.editor-canvas-panel{display:flex;flex-direction:column}
.editor-canvas-panel .canvas-wrap{padding:0 0 6px}
.template-panel{display:flex;flex-direction:column;gap:10px;padding:14px 16px}
.template-group+.template-group{padding-top:9px;border-top:1px solid #ededed}
.template-panel .template-group h3{margin:0 0 7px;font-size:13px;font-weight:750}
.template-panel .background-actions{gap:6px;margin:0}
.template-panel .background-actions .mini-button{min-height:31px;font-size:11px}
.template-panel .template-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}
.template-panel .template-card{min-height:58px;padding:4px 2px;gap:1px;font-size:10px}
.template-panel .template-card svg{width:48px;height:27px}
.template-panel .template-actions{margin-top:7px;gap:5px;flex-wrap:nowrap}
.template-panel .template-actions .mini-button{flex:1;min-width:0;min-height:31px;padding:5px 3px;font-size:10px;text-align:center}
.template-panel .component-grid{gap:5px}
.template-panel .component-choice{padding:6px 5px;font-size:10px}
.components-group{margin-top:auto}
.unified-targets .batch-footer{gap:10px;align-items:center}
.unified-targets .batch-footer .big-send,.unified-targets .send-setting-field select,.unified-targets .send-setting-field input,.unified-targets .jpeg-quality-wrap .mini-button{height:48px;min-height:48px;border-radius:13px;font-size:14px;line-height:1.2}
.unified-targets .batch-footer .big-send{width:220px;min-width:220px;margin:0;padding:0 14px;font-weight:750}
.unified-targets .send-settings{gap:10px;align-items:center}
.unified-targets .send-setting-field{display:flex;justify-content:center;margin:0}
.unified-targets .send-setting-field select{width:190px;max-width:190px;padding:0 14px}
.unified-targets .send-setting-field input{width:76px;max-width:76px;text-align:center}
.unified-targets .jpeg-quality-wrap .mini-button{width:122px;padding:0 12px;border:1px solid #dedede;background:#fff;font-weight:700}
@media(max-width:820px){.editor-canvas-panel,.template-panel{align-self:auto}.template-panel .template-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:560px){.unified-targets .batch-footer .big-send{width:100%;min-width:0}.unified-targets .send-settings{display:grid;grid-template-columns:minmax(0,1fr) 122px}.unified-targets .send-setting-field select{width:100%;max-width:none}.unified-targets .send-setting-field input{width:100%;max-width:none}.unified-targets .send-settings:has(#slotInputWrap:not(.hidden)){grid-template-columns:minmax(0,1fr) 76px 122px}.template-panel .template-actions{flex-wrap:wrap}.template-panel .template-actions .mini-button{min-width:30%}}
.editor-canvas-panel .canvas-toolbar{margin-top:auto;padding-top:10px}
#canvasSizeInfo{font-size:12px;color:#777;font-weight:600;letter-spacing:.02em}
.editor-canvas-panel .canvas-wrap{padding:5px!important}
.template-panel .background-actions{flex-wrap:nowrap;gap:5px}
.template-panel .background-actions .mini-button{min-width:0;padding:5px 6px;white-space:nowrap}
.template-panel .background-actions .primary-file,.template-panel .background-actions .color-pick{flex:1}
.template-panel .background-actions .color-pick input{width:18px;height:18px}
.component-editor-section:has(#componentOptions>.component-add-card:only-child){display:flex;align-items:center;gap:18px}
.component-editor-section:has(#componentOptions>.component-add-card:only-child) .tool-title-row{margin:0;max-width:340px}
.component-editor-section:has(#componentOptions>.component-add-card:only-child) #componentOptions{display:flex;flex:none}
.component-editor-section:has(#componentOptions>.component-add-card:only-child) .component-add-card{width:175px;min-height:62px;padding:7px}
.component-editor-section:has(#componentOptions>.component-add-card:only-child) .component-add-card span{font-size:24px}
.unified-targets .batch-footer .progress:empty{display:none}
@media(max-width:620px){.component-editor-section:has(#componentOptions>.component-add-card:only-child){flex-direction:column;align-items:stretch;gap:10px}.component-editor-section:has(#componentOptions>.component-add-card:only-child) #componentOptions{width:100%}}
.template-panel .template-grid{grid-template-columns:repeat(2,minmax(0,1fr));max-height:260px;overflow:auto;padding:2px;align-content:start}
.template-panel .template-card{min-height:83px;grid-template-rows:1fr auto;padding:5px;gap:4px;font-size:11px}
.template-panel .template-card img{display:block;width:100%;height:auto;aspect-ratio:1024/600;object-fit:contain;border:1px solid #dedede;border-radius:4px;background:#fff}
.template-panel .template-card span{line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.send-options{display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin:10px 0 14px}
.send-toggle,.send-options .cloud-scene-choice{display:flex;align-items:center;gap:7px;margin:0;font-size:13px;font-weight:650;cursor:pointer}
.send-toggle input{accent-color:#171717;width:16px;height:16px}
.send-options .cloud-scene-choice small{width:auto;padding:0;font-size:11px;font-weight:400}
.unified-targets .send-setting-field.hidden{display:none}
.unified-targets .send-setting-field select{width:118px;max-width:118px}
.unified-targets .jpeg-quality-wrap .mini-button{width:126px}
.ble-wifi-details{margin-top:18px;padding-top:14px;border-top:1px solid #e6e6e6}
.ble-wifi-details h3{margin:0 0 4px;font-size:15px}
.ble-wifi-details>.muted{margin:0;font-size:12px}
@media(max-width:560px){.send-options{gap:8px 16px}.send-options .cloud-scene-choice{flex-wrap:wrap}.send-options .cloud-scene-choice small{width:100%;padding-left:23px}.unified-targets .send-setting-field select{max-width:none;width:100%}}
.editor-canvas-panel{align-self:start;display:block}
.editor-canvas-panel .canvas-toolbar{margin-top:8px;padding-top:0}
@media(max-width:820px){.template-panel .template-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.advanced-editor{grid-template-columns:minmax(0,1fr) 282px;grid-template-areas:"preview controls" "templates controls";grid-template-rows:auto auto;align-items:stretch}
.advanced-editor>.editor-canvas-panel{grid-area:preview;position:static;align-self:start}
.advanced-editor>.template-panel{grid-area:templates;align-self:stretch}
.advanced-editor>.advanced-tools{grid-area:controls;display:flex;flex-direction:column;align-self:stretch;min-height:0}
.advanced-tools>.component-editor-section{display:flex;flex-direction:column;flex:1;min-height:0}
.advanced-tools #componentOptions{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;max-height:none;overflow:auto}
.advanced-tools .component-edit-card,.advanced-tools .component-add-card{width:100%!important;min-height:82px;max-height:145px;flex:1;padding:10px 12px}
.advanced-tools .component-add-card{max-height:100px}
.advanced-tools .component-editor-section:has(#componentOptions>.component-add-card:only-child){display:flex;flex-direction:column;align-items:stretch;gap:10px}
.advanced-tools .component-editor-section:has(#componentOptions>.component-add-card:only-child) #componentOptions{display:flex;flex:1;width:100%}
.template-panel .template-grid{grid-template-columns:repeat(4,minmax(0,1fr));max-height:255px}
.template-panel .template-card{min-height:83px}
.save-controls{display:flex;align-items:center;gap:7px;min-height:48px;padding:3px 7px;border:1px solid #dedede;border-radius:13px;background:#fff}
.save-controls .send-toggle{margin:0 4px 0 2px;white-space:nowrap;font-size:14px;line-height:1.2}
.unified-targets .save-controls .send-setting-field select,.unified-targets .save-controls .send-setting-field input{height:38px;min-height:38px;border-radius:9px}
.unified-targets .jpeg-quality-wrap .mini-button{width:154px}
.device-card{display:flex;align-items:flex-start;gap:8px;position:relative}
.device-card-select{border:0;background:transparent;padding:0;text-align:left;min-width:0;flex:1;color:inherit}
.device-card-select .device-title strong,.device-card-select .device-title small{display:block}
.device-status-button{display:grid;gap:3px;flex:none;border:1px solid #e3e3e3;border-radius:9px;background:#fafafa;padding:5px 7px;color:#555;font-size:10px;line-height:1.1;white-space:nowrap;text-align:left}
.device-status-button span{display:flex;align-items:center;gap:5px}
.device-status-button:hover{border-color:#777;background:#f3f3f3}
.status-light{display:inline-block;flex:none;width:8px;height:8px;border-radius:50%;background:#c4c4c4;box-shadow:inset 0 0 0 1px #00000012}
.status-light.online{background:#29b765;box-shadow:0 0 0 2px #29b76520}
.status-light.bluetooth{background:#357fe9;box-shadow:0 0 0 2px #357fe920}
.status-light.lan{background:#e6aa26;box-shadow:0 0 0 2px #e6aa2626}
.picker-item-wrap{position:relative}
.picker-item-wrap .picker-item{width:100%;padding-right:76px}
.picker-item-wrap .device-status-button{position:absolute;right:8px;top:50%;transform:translateY(-50%)}
.batch-device .device-status-button{position:absolute;right:10px;top:9px}
.batch-device.offline{opacity:1}
.batch-device.offline>span:not(.device-status-button){opacity:.55}
.device-connection-popover{position:fixed;z-index:170;width:min(300px,calc(100vw - 24px));padding:14px;border:1px solid #d9d9d9;border-radius:15px;background:#fff;box-shadow:0 14px 45px #0002}
.device-connection-popover .component-popover-head{margin-bottom:10px}
.connection-detail-row{display:flex;align-items:center;gap:8px;padding:8px 2px;font-size:12px}
.connection-detail-row strong{margin-left:auto;font-size:12px}
.connection-detail-sub{padding:0 0 6px 18px;color:#777;font-size:11px;line-height:1.7}
.device-connection-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
.device-connection-actions .mini-button{flex:1;min-width:83px;font-size:11px;padding:6px}
@media(max-width:1000px){.advanced-editor{grid-template-columns:minmax(0,1fr) 245px}.template-panel .template-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:820px){.advanced-editor{grid-template-columns:1fr;grid-template-areas:"preview" "templates" "controls"}.advanced-editor>.advanced-tools{grid-area:controls}.advanced-tools #componentOptions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));max-height:none}.advanced-tools .component-edit-card,.advanced-tools .component-add-card{max-height:none;min-height:88px}.template-panel .template-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){.unified-targets .send-settings{display:flex;flex-wrap:wrap}.save-controls{width:100%;justify-content:space-between}.advanced-tools #componentOptions{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* v1.2.047 unified personal/team cloud workspace */
.workspace-picker-wrap{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.workspace-picker-wrap label{font-size:12px;color:var(--muted)}.workspace-picker-wrap select{height:36px;min-width:150px;padding:0 28px 0 10px;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink)}#workspaceSyncState{font-size:11px;color:#7b8794}.saved-template-head{display:flex;align-items:center;justify-content:space-between;margin-top:10px;font-size:11px;color:var(--muted)}.saved-template-head small{font-size:10px}.template-cloud-mark{margin-left:5px;color:#64748b;font-size:12px}.device-rename-btn{border:0;background:transparent;color:#888;padding:3px 5px;border-radius:6px;font-size:12px}.device-rename-btn:hover{background:#f1f3f2;color:#222}

.current-display-preview{margin:12px 0 14px;padding:10px;border:1px solid var(--border,#e5e7eb);border-radius:14px;background:#fafafa;display:flex;align-items:center;gap:12px}.current-display-preview.hidden{display:none}.current-display-preview img{width:128px;aspect-ratio:256/150;object-fit:cover;border-radius:9px;background:#eee}.current-display-preview small{color:#6b7280;line-height:1.4}

/* v1.2.052 team workspace UI */
.team-page-grid{display:grid;grid-template-columns:minmax(0,760px);gap:16px}.team-web-main{padding:22px}.team-web-current{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:58px;padding:0 18px;border:1px solid #e1e4e8;border-radius:14px;background:#f8fafc;margin-bottom:10px;box-sizing:border-box}.team-web-current strong{display:block;font-size:18px}.team-web-current small{display:block;margin-bottom:3px;color:#818894}.team-web-fold{border:1px solid #e3e6ea;border-radius:14px;background:#fff;margin-top:10px;overflow:hidden}.team-web-fold summary{list-style:none;cursor:pointer;min-height:58px;padding:0 16px;font-weight:750;color:#253040;display:flex;justify-content:space-between;align-items:center;box-sizing:border-box}.team-web-fold summary::-webkit-details-marker{display:none}.team-web-fold summary::after{content:'⌄';color:#9aa2ad;transition:.15s}.team-web-fold[open] summary::after{transform:rotate(180deg)}.team-web-fold-body{padding:0 14px 14px}.team-web-fold-body select,.team-web-fold-body input{width:100%;min-height:42px;padding:8px 10px;border:1px solid #d8dde4;border-radius:10px;background:#fff}.team-web-code-row{display:flex;align-items:center;justify-content:space-between;gap:18px;min-height:72px;margin-top:10px;padding:0 16px;border:1px solid #e3e6ea;border-radius:14px;box-sizing:border-box}.team-web-code-row span{display:block;color:#89919d;font-size:11px}.team-web-code-row strong{display:block;margin-top:3px;font-size:21px;letter-spacing:.16em}.team-web-qr-toggle{min-height:38px;padding:0 14px}.team-web-qr-panel{margin-top:10px;padding:16px;border:1px solid #e3e6ea;border-radius:14px;background:#fff;text-align:center}.team-web-qr{width:220px;height:220px;border:1px solid #eceff2;border-radius:10px;background:#fff}.team-web-members{padding:0 14px 8px}.team-web-member{display:flex;align-items:center;gap:10px;padding:11px 0;border-top:1px solid #eef0f2}.team-web-member:first-child{border-top:0}.team-web-member img,.team-web-member-avatar{width:38px;height:38px;border-radius:50%;background:#f0f2f5;object-fit:cover;display:grid;place-items:center}.team-web-member-info{min-width:0;flex:1}.team-web-member-info strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.team-web-danger{margin-top:10px;width:100%;min-height:58px;border-color:#f0d4d1;background:#fff8f8;border-radius:14px}.team-web-inline{display:flex;gap:8px}.team-web-inline input{flex:1}.team-web-inline .button{flex:0 0 auto}@media(max-width:700px){.team-web-inline{flex-direction:column}.team-web-qr{width:180px;height:180px}}
.advanced-tools #componentOptions{flex:0 0 auto;overflow:visible}
.advanced-tools .component-edit-card,.advanced-tools .component-add-card{flex:0 0 88px;min-height:88px;max-height:88px;padding:10px 12px}
.advanced-tools .component-card-head{margin-bottom:5px}
.advanced-tools .text-component-select{gap:3px}
.template-panel .background-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.template-panel .background-actions .mini-button{width:100%;min-width:0;min-height:42px;border-radius:13px;padding:7px 5px;text-align:center;white-space:normal;line-height:1.2;font-size:11px}
.template-panel .background-actions .color-pick input{flex:none;width:18px;height:18px}
@media(max-width:820px){.advanced-tools #componentOptions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){.template-panel .background-actions{gap:5px}.template-panel .background-actions .mini-button{font-size:10px;padding:6px 3px}}

/* v1.2.053 devices page: mini-program-like discovery + compact workspace controls */
.device-discovery-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:14px;
  margin-bottom:8px;
}
.nearby-device-panel{
  min-width:0;
  padding:18px 20px;
  border-radius:16px;
}
.nearby-device-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  min-height:36px;
}
.nearby-device-head h2{margin:0;font-size:17px;font-weight:650}
.nearby-refresh-btn{
  min-height:34px;
  height:34px;
  padding:0 12px;
  border-radius:9px;
  font-size:12px;
  flex:none;
}
.nearby-device-list{margin-top:8px}
.nearby-device-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  min-height:58px;
  padding:8px 0;
  border-top:1px solid #edf0f2;
}
.nearby-device-row:first-child{border-top:0}
.nearby-device-main{display:flex;align-items:center;gap:10px;min-width:0;flex:1}
.nearby-device-main>div{min-width:0}
.nearby-device-main strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--ink)}
.nearby-device-main small{display:block;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--muted)}
.nearby-device-dot{width:9px;height:9px;border-radius:50%;background:#cfd6df;flex:none}
.nearby-device-dot.ble{background:#4d8fe8;box-shadow:0 0 0 3px #4d8fe814}
.nearby-device-dot.lan{background:#37b970;box-shadow:0 0 0 3px #37b97014}
.nearby-add-btn{
  flex:none;
  min-height:32px;
  padding:0 11px;
  border:1px solid #cfd7df;
  border-radius:9px;
  background:#fff;
  color:#27313d;
  font-size:12px;
  cursor:pointer;
}
.nearby-add-btn:hover:not(:disabled){border-color:#57b782;background:#f2fbf6}
.nearby-add-btn.added,.nearby-add-btn:disabled{background:#f5f6f7;color:#9aa2ad;border-color:#e5e8eb;cursor:default}
.nearby-device-empty{
  min-height:46px;
  display:flex;
  align-items:center;
  color:#8a939f;
  font-size:12px;
  line-height:1.4;
}
.device-discovery-status{
  margin:0 2px 10px;
  color:#77818e;
  font-size:12px;
  line-height:1.45;
}
.device-discovery-status:empty{display:none}
.my-devices-panel{padding:22px 24px}
.device-list-head{align-items:flex-start;gap:18px}
.device-head-tools{display:flex;flex-direction:column;align-items:flex-end;gap:8px;margin-left:auto}
.device-list-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px}
.workspace-picker-wrap{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:nowrap}
.workspace-picker-wrap label{font-size:12px;color:#7b8490;white-space:nowrap}
.workspace-picker-wrap select{height:36px;min-width:140px;max-width:220px;padding:0 28px 0 10px;border-radius:9px}
.workspace-sync-hidden{display:none!important}
.compact-action{min-height:36px;height:36px;padding:0 12px;border-radius:9px;font-size:12px;white-space:nowrap}
.dashboard-team-join,
.my-devices-panel .manual-add{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:8px;
  margin:12px 0 14px;
  padding:10px 12px;
  border:1px solid #e5e9ed;
  border-radius:12px;
  background:#fafbfc;
}
.dashboard-team-join.hidden,
.my-devices-panel .manual-add.hidden{display:none}
.dashboard-team-join input,
.my-devices-panel .manual-add input{
  min-width:0;
  height:38px;
  padding:0 10px;
  border:1px solid #d7dde3;
  border-radius:9px;
  background:#fff;
  font-size:13px;
}
.dashboard-team-join input{width:min(280px,100%)}
.my-devices-panel .manual-add input{flex:1}
.my-devices-panel .manual-add .button,
.dashboard-team-join .button{min-height:38px;height:38px;padding:0 13px;font-size:12px;flex:none}
.my-devices-panel .device-grid{margin-top:14px}
.my-devices-panel .empty{padding:32px 16px}
@media(max-width:900px){
  .device-discovery-grid{grid-template-columns:1fr}
  .device-list-head{align-items:stretch}
  .device-head-tools{width:100%;align-items:stretch;margin-left:0}
  .workspace-picker-wrap,.device-list-actions{justify-content:flex-start;flex-wrap:wrap}
}
@media(max-width:620px){
  .nearby-device-panel{padding:15px 16px}
  .nearby-device-head h2{font-size:15px}
  .my-devices-panel{padding:18px}
  .workspace-picker-wrap{display:grid;grid-template-columns:auto minmax(0,1fr) auto;width:100%}
  .workspace-picker-wrap select{min-width:0;max-width:none;width:100%}
  .device-list-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}
  .device-list-actions .button{width:100%}
  .dashboard-team-join,.my-devices-panel .manual-add{align-items:stretch;flex-direction:column}
  .dashboard-team-join input,.my-devices-panel .manual-add input,.dashboard-team-join .button,.my-devices-panel .manual-add .button{width:100%}
}

/* v1.2.054 dashboard alignment */
.device-discovery-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:stretch;gap:16px}
.device-discovery-grid>.nearby-device-panel{width:100%;min-height:154px;height:100%;padding:20px 22px;box-sizing:border-box;display:flex;flex-direction:column}
.nearby-device-head{width:100%;min-height:40px;align-items:center}
.nearby-device-head h2{margin:0;font-size:17px;line-height:24px;font-weight:650}
.nearby-refresh-btn,#bleAddBtn,#lanScanBtn{width:112px;min-width:112px;height:40px;min-height:40px;padding:0 14px;box-sizing:border-box;border:1px solid #d8dde3;border-radius:11px;background:#fff;color:#27313d;font-size:13px;line-height:38px;font-weight:600;text-align:center}
.nearby-device-list{width:100%;margin-top:10px}
.nearby-device-empty{flex:1;min-height:44px;padding-top:8px;box-sizing:border-box;align-items:flex-start}
.my-devices-panel{padding:22px 24px}
.device-list-head{display:flex;align-items:center;justify-content:space-between;gap:22px}
.device-list-head>div:first-child{flex:0 0 auto}
.device-head-tools{min-width:0;margin-left:auto;display:flex;flex-direction:row;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:nowrap}
.workspace-picker-wrap,.device-list-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:nowrap}
.workspace-picker-wrap label{height:40px;display:flex;align-items:center;color:#6f7884;font-size:13px;line-height:1;font-weight:500;white-space:nowrap}
.workspace-picker-wrap select{width:170px;min-width:170px;max-width:170px;height:40px;min-height:40px;padding:0 32px 0 12px;box-sizing:border-box;border:1px solid #d8dde3;border-radius:11px;background:#fff;color:#27313d;font-size:13px;line-height:38px;font-weight:600}
.device-head-tools .button,.device-head-tools .compact-action,#teamJoinToggleBtn,#deviceRefreshBtn,#manualAddToggleBtn{height:40px;min-height:40px;padding:0 14px;box-sizing:border-box;border:1px solid #d8dde3;border-radius:11px;background:#fff;color:#27313d;font-size:13px;line-height:38px;font-weight:600;white-space:nowrap;box-shadow:none}
#teamJoinToggleBtn{min-width:92px}#deviceRefreshBtn{min-width:116px}#manualAddToggleBtn{min-width:104px}
.device-head-tools .button:hover{border-color:#c6cdd5;background:#f8fafb;color:#1f2937}
@media(max-width:1180px){.device-list-head{align-items:flex-start;flex-direction:column}.device-head-tools{width:100%;margin-left:0;justify-content:flex-start;overflow-x:auto;padding-bottom:2px}}
@media(max-width:900px){.device-discovery-grid{grid-template-columns:1fr}.device-discovery-grid>.nearby-device-panel{min-height:142px}}
@media(max-width:620px){.device-head-tools{gap:7px}.workspace-picker-wrap,.device-list-actions{gap:7px}.workspace-picker-wrap select{width:150px;min-width:150px;max-width:150px}.nearby-refresh-btn,#bleAddBtn,#lanScanBtn{width:104px;min-width:104px}}

/* v1.2.055 dashboard geometry + team manager */
.device-discovery-grid{
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:16px;
  align-items:stretch;
  margin-bottom:16px;
}
.device-discovery-grid > .panel,
.device-discovery-grid > .panel + .panel,
.device-discovery-grid > .nearby-device-panel{
  margin-top:0!important;
  width:100%;
  min-width:0;
  min-height:176px;
  height:auto;
  align-self:stretch;
  padding:20px 22px;
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
}
.nearby-device-head{
  min-height:42px;
  height:42px;
  display:grid;
  grid-template-columns:minmax(0,1fr) 118px;
  gap:16px;
  align-items:center;
}
.nearby-device-head h2{margin:0;font-size:17px;line-height:22px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nearby-refresh-btn,#bleAddBtn,#lanScanBtn{
  width:118px;min-width:118px;max-width:118px;height:42px;min-height:42px;
  padding:0 12px;box-sizing:border-box;border:1px solid #d8dde3;border-radius:11px;
  background:#fff;color:#27313d;font-size:13px;line-height:40px;font-weight:650;text-align:center;
}
.nearby-device-list{width:100%;margin-top:10px}
.nearby-device-empty{flex:1;min-height:54px;padding-top:12px;display:flex;align-items:flex-start;box-sizing:border-box}
.device-discovery-status{margin:-6px 2px 12px}

.my-devices-panel{padding:22px 24px}
.device-list-head{display:grid;grid-template-columns:minmax(180px,1fr) auto;align-items:center;gap:24px;margin-bottom:14px}
.device-list-head>div:first-child{min-width:0}
.device-head-tools{
  margin:0;min-width:0;display:grid;
  grid-template-columns:auto 180px auto auto auto;
  align-items:center;justify-content:end;gap:8px;
}
.workspace-picker-wrap,.device-list-actions{display:contents}
.workspace-picker-wrap label{
  height:42px;display:flex;align-items:center;color:#6f7884;font-size:13px;line-height:1;font-weight:500;white-space:nowrap
}
.workspace-picker-wrap select{
  width:180px;min-width:180px;max-width:180px;height:42px;min-height:42px;
  padding:0 34px 0 12px;box-sizing:border-box;border:1px solid #d8dde3;border-radius:11px;
  background:#fff;color:#27313d;font-size:13px;line-height:40px;font-weight:650
}
.device-head-tools .button,.device-head-tools .compact-action,#teamJoinToggleBtn,#deviceRefreshBtn,#manualAddToggleBtn{
  height:42px;min-height:42px;padding:0 14px;box-sizing:border-box;border:1px solid #d8dde3;border-radius:11px;
  background:#fff;color:#27313d;font-size:13px;line-height:40px;font-weight:650;white-space:nowrap;box-shadow:none
}
#teamJoinToggleBtn{min-width:94px}#deviceRefreshBtn{min-width:120px}#manualAddToggleBtn{min-width:112px}
.device-head-tools .button:hover{border-color:#c6cdd5;background:#f8fafb;color:#1f2937}
.my-devices-panel .manual-add{margin-top:10px;margin-bottom:14px}

.team-manager-card{width:min(620px,calc(100vw - 32px));max-height:min(780px,calc(100vh - 40px));overflow:auto;padding:22px}
.team-manager-head{align-items:center;margin-bottom:14px}
.team-manager-head h2{margin:0;font-size:20px}
.team-manager-close{width:40px;height:40px;min-width:40px}
.team-manager-card .team-web-current{margin-bottom:10px}
.team-manager-card .team-web-fold{margin-top:10px}
.team-manager-card .team-web-fold-body{padding:0 14px 14px}
.team-manager-card .team-web-fold-body select{width:100%;height:42px;padding:0 34px 0 12px;border:1px solid #d8dde4;border-radius:10px;background:#fff}
.team-manager-card .team-web-inline{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.team-manager-card .team-web-inline input{height:42px;min-height:42px}
.team-manager-card .team-web-inline .button{height:42px;min-height:42px;padding:0 16px}
.team-web-code-copy-zone{display:flex;align-items:center;gap:10px;min-width:0;cursor:pointer}
.team-web-code-copy-zone span{flex:none}
.team-web-code-copy-zone strong{margin:0!important;letter-spacing:.12em!important;white-space:nowrap}
.team-web-code-copy-zone small{flex:none;padding:4px 7px;border:1px solid #dfe4ea;border-radius:7px;background:#f7f9fb;color:#66717d;font-size:10px;font-weight:650;letter-spacing:0}
.team-web-code-copy-zone:active small{background:#edf1f5}
.team-web-code-row{min-height:64px}
.team-web-danger{margin-top:12px}
#teamManagerModal{z-index:125}

@media(max-width:1280px){
  .device-list-head{grid-template-columns:1fr;align-items:start}
  .device-head-tools{justify-content:start;grid-template-columns:auto 180px auto auto auto;width:100%;overflow-x:auto;padding-bottom:2px}
}
@media(max-width:900px){
  .device-discovery-grid{grid-template-columns:1fr}
  .device-discovery-grid > .panel + .panel{margin-top:0!important}
  .device-discovery-grid > .nearby-device-panel{min-height:150px}
}
@media(max-width:700px){
  .device-head-tools{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;overflow:visible}
  .workspace-picker-wrap,.device-list-actions{display:contents}
  .workspace-picker-wrap select{width:100%;min-width:0;max-width:none}
  #teamJoinToggleBtn,#deviceRefreshBtn,#manualAddToggleBtn{width:100%;min-width:0}
  .device-head-tools #teamJoinToggleBtn{grid-column:1 / -1}
  .device-head-tools #deviceRefreshBtn,.device-head-tools #manualAddToggleBtn{min-width:0}
  .team-manager-card .team-web-inline{grid-template-columns:1fr}
  .team-manager-card .team-web-inline .button{width:100%}
}
@media(max-width:620px){.nav-list{grid-template-columns:repeat(4,minmax(0,1fr))}}


/* v1.2.056: My Devices header stays one horizontal row on desktop. */
@media (min-width: 901px){
  .my-devices-panel .device-list-head{
    display:flex !important;
    flex-direction:row !important;
    align-items:flex-start !important;
    justify-content:space-between !important;
    gap:20px !important;
    margin-bottom:14px !important;
  }
  .my-devices-panel .device-list-head > div:first-child{
    flex:1 1 auto !important;
    min-width:150px !important;
  }
  .my-devices-panel .device-head-tools{
    flex:0 0 auto !important;
    width:auto !important;
    margin:0 0 0 auto !important;
    padding:0 !important;
    display:flex !important;
    flex-direction:row !important;
    align-items:center !important;
    justify-content:flex-end !important;
    gap:8px !important;
    flex-wrap:nowrap !important;
    overflow:visible !important;
  }
  .my-devices-panel .workspace-picker-wrap,
  .my-devices-panel .device-list-actions{
    display:flex !important;
    flex-direction:row !important;
    align-items:center !important;
    gap:8px !important;
    flex-wrap:nowrap !important;
  }
  .my-devices-panel .workspace-picker-wrap label{
    margin:0 !important;
    height:42px !important;
    display:flex !important;
    align-items:center !important;
  }
}


/* v1.2.059 — 团队管理直接对齐小程序布局 */
.team-mini-manager{width:min(560px,calc(100vw - 28px));max-height:min(820px,calc(100vh - 28px));padding:20px;overflow:auto}
.team-mini-manager .team-manager-head{margin-bottom:12px}
.team-mini-manager .team-manager-head h2{font-size:22px;line-height:1.2;font-weight:800}
.team-mini-manager .team-manager-close{width:40px;height:40px;min-width:40px;border-radius:12px}
.team-mini-space-summary,.team-mini-current-card,.team-mini-fold>summary,.team-mini-danger{min-height:60px;height:60px;box-sizing:border-box;border:1px solid #e4e8ed;border-radius:12px;background:#fff}
.team-mini-space-summary{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:0 14px;background:#f8fafc}
.team-mini-space-main{min-width:0;display:flex;flex-direction:column;justify-content:center;gap:2px}
.team-mini-space-main span{font-size:12px;color:#98a1ad;font-weight:500}
.team-mini-space-main strong{font-size:17px;line-height:1.2;color:#17202b;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.team-mini-switch-trigger{height:38px;padding:0 8px 0 12px;border:0;background:transparent;color:#344054;font-size:13px;font-weight:700;display:flex;align-items:center;gap:7px;cursor:pointer}
.team-mini-arrow{font-size:17px;color:#98a1ad;transition:transform .16s ease}.team-mini-arrow.open{transform:rotate(180deg)}
.team-mini-fold-panel{margin-top:8px;padding:7px;border:1px solid #e4e8ed;border-radius:12px;background:#fbfcfd}
.team-mini-space-list{display:flex;flex-direction:column;gap:5px}
.team-mini-space-item{width:100%;height:46px;padding:0 12px;border:0;border-radius:9px;background:transparent;color:#344054;display:flex;align-items:center;justify-content:space-between;font-size:13px;font-weight:650;text-align:left;cursor:pointer;box-sizing:border-box}
.team-mini-space-item:hover{background:#f4f6f8}.team-mini-space-item.active{background:#edf9f2;color:#087b43}.team-mini-space-check{font-size:16px;color:#08a357;font-weight:800}
.team-mini-current-card{margin-top:10px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 12px}
.team-mini-current-main{flex:1;min-width:0}.team-mini-current-name{display:block;font-size:16px;line-height:1.2;font-weight:800;color:#17202b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.team-mini-code-row{margin-top:5px;gap:7px!important;padding:2px 3px;margin-left:-3px;border-radius:7px}.team-mini-code-row:hover{background:#f6f8fa}.team-mini-code-row span{font-size:11px!important;color:#98a1ad!important}.team-mini-code-row strong{font-size:14px!important;line-height:1.2!important;letter-spacing:.12em!important;color:#475467}.team-mini-code-row small{padding:3px 6px!important;border-radius:6px!important;font-size:10px!important}
.team-mini-qr-toggle{flex:0 0 auto;height:38px;padding:0 12px;border:1px solid #dce3ea;border-radius:9px;background:#f8fafc;color:#344054;font-size:12px;font-weight:700;cursor:pointer}.team-mini-qr-toggle:hover{background:#f1f4f7}
.team-mini-manager .team-web-qr-panel{margin-top:8px;padding:14px;border:1px solid #e4e8ed;border-radius:12px}.team-mini-manager .team-web-qr{width:190px;height:190px;border-radius:8px}
.team-mini-manager .team-web-fold{margin-top:10px;border:0;border-radius:12px;background:transparent;overflow:visible}
.team-mini-manager .team-mini-fold>summary{padding:0 14px;display:flex;align-items:center;justify-content:space-between;list-style:none;color:#27313d;font-size:14px;font-weight:750;cursor:pointer}
.team-mini-manager .team-mini-fold>summary::-webkit-details-marker{display:none}.team-mini-manager .team-mini-fold>summary::after{content:'⌄';font-size:16px;color:#98a1ad;transition:transform .16s ease}.team-mini-manager .team-mini-fold[open]>summary::after{transform:rotate(180deg)}
.team-mini-fold-title-row{display:flex;align-items:center;gap:8px}.team-mini-fold-title-row>strong{font-size:14px}.team-mini-fold-title-row>span{font-size:12px;color:#98a1ad;font-weight:500}
.team-mini-manager .team-web-fold-body{margin-top:8px;padding:12px;border:1px solid #e4e8ed;border-radius:12px;background:#fbfcfd}
.team-mini-manager .team-web-inline{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.team-mini-manager .team-web-inline input{height:40px;min-height:40px;padding:0 11px;border:1px solid #d8dde4;border-radius:9px;font-size:13px}.team-mini-manager .team-web-inline .button{height:40px;min-height:40px;padding:0 14px;border-radius:9px;font-size:12px;font-weight:700}
.team-mini-manager .team-web-members{margin-top:8px;padding:3px 12px;border:1px solid #e4e8ed;border-radius:12px;background:#fbfcfd}.team-mini-manager .team-web-member{min-height:50px;padding:7px 0;border-top:1px solid #edf0f3}.team-mini-manager .team-web-member:first-child{border-top:0}.team-mini-manager .team-web-member-avatar{width:34px;height:34px;flex:0 0 34px;font-size:13px}.team-mini-manager .team-web-member strong{font-size:13px}
.team-mini-danger{width:100%;margin-top:10px;padding:0;display:flex;align-items:center;justify-content:center;border-color:#f1d2cf;background:#fff9f8;color:#e24b42;font-size:13px;font-weight:750;cursor:pointer}.team-mini-danger:hover{background:#fff4f3}
#teamJoinToggleBtn{min-width:94px}
@media(max-width:620px){.team-mini-manager{padding:16px}.team-mini-manager .team-web-inline{grid-template-columns:1fr}.team-mini-manager .team-web-inline .button{width:100%}.team-mini-space-summary,.team-mini-current-card,.team-mini-fold>summary,.team-mini-danger{min-height:58px;height:auto}}

/* v1.2.061 — fixed quick-action popup + stable device-card layout */
.refined-control-grid>.panel+.panel{margin-top:0!important}
.refined-control-grid>.control-device-picker-panel,
.refined-control-grid>.control-main-panel{align-self:start;margin-top:0!important}
.control-device-picker-panel .panel-head,
.control-main-panel>.panel-head{min-height:48px;margin-bottom:14px;box-sizing:border-box}
.control-device-picker-panel .panel-head{align-items:flex-start}

/* Dashboard device cards: one stable 3-column grid, no reflow when clicked. */
.my-devices-panel .device-card{
  min-height:112px;
  display:grid!important;
  grid-template-columns:minmax(0,1fr) auto auto;
  align-items:center!important;
  column-gap:10px;
  padding:18px 20px!important;
  cursor:pointer;
}
.my-devices-panel .device-card-main{
  align-self:stretch;
  display:flex;
  flex-direction:column;
  justify-content:center;
  min-height:74px;
  min-width:0;
  text-align:left;
}
.my-devices-panel .device-card-main .device-title,
.my-devices-panel .device-card-main .device-meta{width:100%;min-width:0}
.my-devices-panel .device-card-main .device-title strong,
.my-devices-panel .device-card-main .device-title small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.my-devices-panel .device-rename-btn,
.my-devices-panel .device-status-button{align-self:center;margin:0;flex:none}
.my-devices-panel .device-card:focus{outline:none}
.my-devices-panel .device-card:focus-visible{box-shadow:0 0 0 2px rgba(52,199,89,.22)}

/* Control-page picker stays vertically centered and aligned. */
.control-device-picker-panel .picker-item-wrap{min-height:86px;display:flex;align-items:center}
.control-device-picker-panel .picker-item-wrap .picker-item{
  min-height:86px;height:86px;
  display:flex;flex-direction:column;justify-content:center;
  padding-top:10px;padding-bottom:10px
}
.control-device-picker-panel .picker-item-wrap .device-status-button{top:50%;transform:translateY(-50%)}

/* Floating menu is detached from layout, so opening it never moves cards/buttons. */
.device-quick-actions{
  position:fixed!important;
  z-index:190;
  width:170px;
  padding:8px;
  margin:0!important;
  border:1px solid #dfe4e8;
  border-radius:12px;
  background:#fff;
  box-shadow:0 14px 42px rgba(15,23,42,.16);
  display:grid;
  gap:6px;
  transform:none!important;
}
.device-quick-actions.hidden{display:none!important}
.device-quick-actions>strong{
  padding:5px 8px 7px;
  font-size:12px;
  color:#66717d;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis
}
.device-quick-actions>button{
  height:40px;
  border:1px solid #e3e7eb;
  border-radius:9px;
  background:#fff;
  color:#202a35;
  text-align:left;
  padding:0 12px;
  font-size:13px;
  font-weight:650;
  cursor:pointer
}
.device-quick-actions>button:hover{background:#f2f8f5;border-color:#c9ddd2;color:#087744}


/* v1.2.065 — one compact device-card size across Devices / Control / Transfer */
:root{
  --lybom-device-card-h:76px;
  --lybom-device-card-w:320px;
  --lybom-device-card-radius:14px;
  --lybom-device-card-pad-x:14px;
}

/* Devices page */
.my-devices-panel .device-grid{
  grid-template-columns:repeat(auto-fill,minmax(280px,var(--lybom-device-card-w)))!important;
  justify-content:start;
  align-items:start;
  gap:10px;
}
.my-devices-panel .device-card{
  width:100%;
  max-width:var(--lybom-device-card-w);
  height:var(--lybom-device-card-h)!important;
  min-height:var(--lybom-device-card-h)!important;
  padding:9px var(--lybom-device-card-pad-x)!important;
  border-radius:var(--lybom-device-card-radius)!important;
  align-items:center!important;
}
.my-devices-panel .device-card-main{
  min-height:0!important;
  height:100%;
  justify-content:center!important;
}
.my-devices-panel .device-card-main .device-meta{margin-top:4px!important}

/* Control page */
.control-device-picker-panel .device-picker{justify-items:start}
.control-device-picker-panel .picker-item-wrap{
  width:100%;
  max-width:var(--lybom-device-card-w);
  height:var(--lybom-device-card-h)!important;
  min-height:var(--lybom-device-card-h)!important;
  display:flex;
  align-items:center;
}
.control-device-picker-panel .picker-item-wrap .picker-item{
  width:100%;
  height:var(--lybom-device-card-h)!important;
  min-height:var(--lybom-device-card-h)!important;
  padding:9px 76px 9px var(--lybom-device-card-pad-x)!important;
  border-radius:var(--lybom-device-card-radius)!important;
  display:flex;
  flex-direction:column;
  justify-content:center;
}
.control-device-picker-panel .picker-item-wrap .device-status-button{
  top:50%!important;
  transform:translateY(-50%)!important;
  right:10px!important;
}

/* Transfer page */
.unified-targets .batch-device-list,
.refined-batch-list{
  grid-template-columns:repeat(auto-fill,minmax(280px,var(--lybom-device-card-w)))!important;
  justify-content:start;
  align-items:start;
  gap:10px;
}
.unified-targets .batch-device,
.refined-batch-list .batch-device{
  width:100%;
  max-width:var(--lybom-device-card-w);
  height:var(--lybom-device-card-h)!important;
  min-height:var(--lybom-device-card-h)!important;
  padding:9px 74px 9px var(--lybom-device-card-pad-x)!important;
  border-radius:var(--lybom-device-card-radius)!important;
  align-items:center!important;
}
.unified-targets .batch-device>span,
.refined-batch-list .batch-device>span{
  display:flex;
  min-width:0;
  height:100%;
  flex-direction:column;
  justify-content:center;
}
.unified-targets .batch-device .device-status-button,
.refined-batch-list .batch-device .device-status-button{
  top:50%!important;
  transform:translateY(-50%)!important;
  right:10px!important;
}

@media(max-width:620px){
  .my-devices-panel .device-grid,
  .unified-targets .batch-device-list,
  .refined-batch-list{grid-template-columns:1fr!important}
  .my-devices-panel .device-card,
  .control-device-picker-panel .picker-item-wrap,
  .unified-targets .batch-device,
  .refined-batch-list .batch-device{max-width:none}
}

.nearby-refresh-btn{white-space:nowrap;min-width:max-content}


/* Keep the title, actions and first card close together on every console page. */
.main-content{padding:12px 24px 20px}
.topbar{min-height:58px;margin-bottom:10px}
.page{padding:0 0 24px!important}
@media(max-width:900px){.main-content{padding:12px 16px 20px}}
@media(max-width:620px){.main-content{padding:12px 12px 20px}.topbar{margin-bottom:10px}.page{padding:0 0 24px!important}}

/* Keep the existing editor. Shared device UI and compact tutorial typography. */
.v32-console #deviceGrid{align-items:start}.v32-console #deviceGrid>.v32-device{width:100%}
.v32-console{--bg:#f3f5f7;--soft:#f4f6f8;--line:#e3e8ee;--blue:#3b82f6;--ink:#27313d}
.v32-console body{background:var(--bg);font-size:14px}.v32-console button,.v32-console input,.v32-console select{font:inherit}.v32-console h1{font-size:25px}.v32-console h2{font-size:18px}.v32-console h3{font-size:15px}.v32-console .panel{border-color:#e5e9ee;box-shadow:0 6px 22px #26374b06}.v32-console .topbar{position:relative}.v32-preview-badge{position:absolute;bottom:-9px;right:0;font-size:11px;color:#718096}
/* Equal top actions stay together; device refresh lives beside the team entry. */
.v32-console .topbar{container-type:inline-size;container-name:console-toolbar;flex-direction:row;align-items:center;flex-wrap:wrap;gap:12px 16px}
.v32-console .top-actions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:center;gap:8px;min-width:0;width:min(100%,600px);margin-left:auto}
.v32-console .top-actions>.top-action-card,.v32-console .top-actions>.language-wrap{width:100%;min-width:0}
.v32-console .top-actions .top-action-card{width:100%;min-width:0;height:42px;min-height:42px;padding:0 12px;gap:7px}
.v32-console .top-actions .language-menu{top:calc(100% + 8px)}
.v32-console .device-head-tools :is(#workspaceSelect,#teamJoinToggleBtn,#refreshAllBtn){width:140px;min-width:140px;max-width:140px;flex:0 0 140px}
.v32-console .device-head-tools #refreshAllBtn{display:inline-flex;align-items:center;justify-content:center;gap:6px}
.v32-console .device-head-tools #refreshAllBtn>.ui-icon{width:18px;height:18px}
.v32-console .device-list-actions.hidden{display:none!important}
@container console-toolbar (max-width:620px){
  .v32-console .top-actions{width:min(100%,336px);gap:6px}
  .v32-console .top-actions .top-action-card{padding-inline:12px}
  .v32-console .top-actions .top-action-card:has(>.ui-icon){padding:0;gap:0}
  .v32-console .top-actions .top-action-card>.ui-icon+span{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
}
@container device-area (max-width:700px){
  .v32-console .my-devices-panel .device-list-head{display:flex!important;flex-direction:column!important;align-items:stretch!important;gap:12px!important}
  .v32-console .my-devices-panel .device-head-tools{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr));width:100%!important;flex:none!important;margin:0!important;gap:8px!important;overflow:visible!important}
  .v32-console .my-devices-panel .workspace-picker-wrap{display:contents!important}
  .v32-console .workspace-picker-wrap label{grid-column:1}
  .v32-console .workspace-picker-wrap select{grid-column:2;width:100%;min-width:0;max-width:none}
  .v32-console .device-head-tools #teamJoinToggleBtn{grid-column:1!important;width:100%;min-width:0}
  .v32-console .device-head-tools #refreshAllBtn{grid-column:2;width:100%;min-width:0}
  .v32-console .device-head-tools :is(#workspaceSelect,#teamJoinToggleBtn,#refreshAllBtn){width:100%;min-width:0;max-width:none;flex:none}
}

/* Device and add tiles share one fixed-height, row-major grid. */
.v32-console .my-devices-panel{--device-tile-height:72px;padding:20px;container-type:inline-size;container-name:device-area}
.v32-console #deviceGrid{display:grid;grid-template-columns:minmax(0,1fr)!important;max-width:360px;gap:12px;align-items:stretch;grid-auto-flow:row}
.v32-device,.v32-add-device{box-sizing:border-box;width:100%;height:var(--device-tile-height);min-height:var(--device-tile-height);margin:0;border-radius:12px;background:#fff}
.v32-device{min-width:0;border:1px solid #e5e5e5;overflow:hidden;background:#f7f7f7;cursor:pointer;transition:border-color .15s,box-shadow .15s}
.v32-device:hover,.v32-device:focus-within{border-color:#a6b9d2;box-shadow:0 2px 10px #304a6810}
.v32-device-head{height:100%;padding:10px;display:grid;grid-template-columns:minmax(0,1fr) 168px;align-items:center;gap:8px}
.v32-console .v32-device-name{min-width:0;width:100%;padding:0;display:flex;flex-direction:column;align-items:flex-start;gap:2px;background:none;border:0;text-align:left;cursor:pointer;color:var(--ink)}
.v32-device-name strong{font-size:16px;line-height:21px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v32-device-name small{font-size:12px;line-height:16px;color:#93a0af;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.v32-statuses{display:flex;align-items:stretch;gap:6px;min-width:0}
.v32-console .v32-status{margin:0;min-width:76px;min-height:44px;padding:6px 7px;border:1px solid #e6eaf0;border-radius:9px;background:#f6f8fa;text-align:left;display:flex;flex-direction:column;justify-content:center;gap:2px;color:#778494;cursor:pointer}
.v32-console .v32-status span,.v32-console .v32-status b{font-size:12px;line-height:15px;white-space:nowrap}
.v32-status span{display:flex;align-items:center;gap:4px;font-weight:600}.v32-status i{display:block;width:7px;height:7px;flex-shrink:0;border-radius:50%;background:#bdc5ce}
.v32-console .v32-status.ble.on{background:#eff6ff;border-color:#93c5fd;color:#1d4ed8}.v32-console .v32-status.lan.on{background:#fffbeb;border-color:#fcd34d;color:#a16207}.v32-console .v32-status.cloud.on{background:#f0fdf4;border-color:#7ed69a;color:#15803d}.v32-status.ble.on i{background:#3b82f6}.v32-status.lan.on i{background:#eab308}.v32-status.cloud.on i{background:#22c55e}
/* Mini-program row: name and ID on the left, three compact boxes on the right. */
.v32-device .v32-statuses{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:168px;gap:4px}
.v32-console .v32-device .v32-status{width:100%;min-width:0;min-height:40px;height:40px;padding:4px 3px;gap:2px;border-radius:6px}
.v32-console .v32-device .v32-status span,.v32-console .v32-device .v32-status b{font-size:12px;line-height:14px}
.v32-console .v32-device .v32-status span{gap:2px}
.v32-device .v32-status i{width:5px;height:5px}
.v32-device .v32-status:not(.on) b{color:#344054}
.v32-add-device{display:flex;align-items:center;justify-content:center;gap:10px;border:1px dashed #cbd3de;color:#4b5b70;cursor:pointer}.v32-add-device span{font-size:25px;font-weight:300}.v32-add-device:hover{background:#f7f9fc;border-color:#8fa9cb}
.v32-console #deviceQuickActions{width:220px;max-width:calc(100vw - 24px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;padding:8px;border-radius:14px;box-shadow:0 12px 36px #23375126}
.v32-console #deviceQuickActions>strong{font-size:12px;line-height:20px;padding:2px 8px;color:#8491a2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v32-console #deviceQuickActions>button{font-size:14px;line-height:20px;min-height:40px;height:auto;padding:9px 12px;font-weight:600;cursor:pointer}
.v32-console #deviceQuickActions>button:hover:not(:disabled){background:#f2f6fc;color:#315d94;border-color:#bccfe8}
.v32-console #deviceQuickActions>button:disabled{opacity:.4;cursor:default}
.v32-console .v32-device-name:focus-visible,.v32-add-device:focus-visible{outline:2px solid #82a7da;outline-offset:3px;border-radius:6px}
.v32-console .device-list-actions #manualAddToggleBtn{display:none}.v32-add-card{width:min(660px,calc(100vw - 32px));max-height:calc(100vh - 40px);overflow:auto;padding:24px!important}.v32-add-tabs{display:flex;gap:8px;margin:18px 0}.v32-add-tabs button{flex:1;border:0;background:#f1f4f8;border-radius:10px;padding:11px;color:#647184;cursor:pointer}.v32-add-tabs button.active{color:#315d94;background:#eaf1fc;font-weight:650}.v32-add-card .nearby-device-panel{box-shadow:none;padding:0;border:0}.v32-add-card .nearby-device-head{flex-wrap:wrap;gap:12px}.v32-add-card .nearby-device-head h2{font-size:15px}.v32-add-card .manual-add{display:flex;flex-wrap:wrap;margin-top:18px;padding:14px;background:#f7f9fc;border:1px solid #e5eaf0;border-radius:12px}.v32-add-card .manual-add input{flex:1;min-width:160px}.v32-add-card [data-add-panel][hidden]{display:none}.v32-csv-table{width:100%;font-size:12px;margin:14px 0;border-collapse:collapse;table-layout:fixed}.v32-csv-table td{padding:8px;border-bottom:1px solid #edf0f4;overflow-wrap:anywhere}.v32-file{cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.v32-sample{margin-left:12px;font-size:13px;color:#5278a8}.v32-muted{font-size:12px;color:#8a96a6}.v32-console .device-discovery-status{margin-bottom:0;color:#7b8797;font-size:13px}
.v32-console .control-grid,.v32-workspace{display:grid;grid-template-columns:248px minmax(0,1fr);gap:18px;align-items:start}.v32-composer-main{min-width:0;position:relative}.v32-console .v32-picker-panel{position:sticky;top:20px;padding:16px;min-width:0}.v32-picker-panel .panel-head{gap:8px;align-items:center;margin-bottom:14px;flex-wrap:wrap}.v32-picker-panel h2{font-size:16px;margin:0}.v32-picker-count{display:block;margin-top:4px;color:#8a97a8;font-size:12px}.v32-picker-tools{display:flex;gap:6px}.v32-picker-tools button{border:0;border-radius:12px;background:#f1f4f8;color:#718096;padding:5px 8px;font-size:12px;cursor:pointer}.v32-picker-tools button:disabled{opacity:.4;cursor:default}.v32-console #controlDeviceList,.v32-console #batchDeviceList{display:flex;flex-direction:column;gap:9px;max-height:440px;overflow-y:auto;scrollbar-width:thin;transition:max-height .18s ease}.v32-console #controlDeviceList.is-folded,.v32-console #batchDeviceList.is-folded{max-height:130px}.v32-picker-row{display:flex;align-items:center;gap:9px;border:1px solid #e4e9f0;border-radius:12px;padding:12px 10px;background:#fff;cursor:pointer;min-width:0}.v32-picker-row>span{min-width:0;flex:1}.v32-picker-row strong{display:block;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v32-picker-row small{display:block;color:#98a2b0;font-size:10px;overflow-wrap:anywhere;line-height:1.6}.v32-picker-row input{accent-color:#5379a8;width:16px;height:16px;flex-shrink:0}.v32-picker-row.selected{border-color:#b5ccea;background:#f6f9ff}.v32-picker-row.unavailable{opacity:.5;cursor:default}.v32-picker-row .v32-result{font-size:11px;color:#7a8ca4}.v32-empty{font-size:13px;color:#92a0b0}.v32-console .batch-target-panel{margin-top:18px}.v32-console .batch-footer{flex-wrap:wrap;gap:14px}.v32-console .composer-grid{grid-template-columns:minmax(0,1fr) 250px}.v32-roster{display:flex;align-items:center;flex-wrap:wrap;gap:12px;padding:0 0 16px}.v32-roster small{flex-basis:100%;color:#8290a2}.v32-roster a{font-size:12px;color:#5278a8}.v32-console #controlActionPanel{position:relative}.v32-console #v32FirmwareStatus{display:block;margin-top:12px;font-size:12px;color:#8290a2;line-height:1.6}.v32-gate{position:absolute;top:150px;left:50%;transform:translateX(-50%);z-index:3;white-space:nowrap;border:1px solid #d6dfe9;border-radius:13px;background:#fff;padding:15px 22px;color:#4e6c94;font-weight:650;box-shadow:0 0 20px 8px #65758c35,0 0 46px 18px #65758c14;cursor:pointer}.v32-gate[hidden]{display:none}.v32-locked>.panel-head,.v32-locked>.control-block-grid,.v32-locked>#composerEditorMount,.v32-locked>.batch-target-panel{filter:blur(5px);opacity:.43;pointer-events:none;transition:filter .4s ease,opacity .4s ease}.v32-composer-main>#composerEditorMount,.control-block-grid{transition:filter .4s ease,opacity .4s ease}.v32-wifi-scan{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:9px}.v32-wifi-scan small{font-size:12px;color:#8491a2}.v32-console .device-connection-popover{z-index:1300}.v32-console .device-status-button{max-width:260px}.v32-demo .main-content{box-shadow:inset 0 0 42px #2c3f5725}.v32-attention{animation:v32-flash .5s ease-in-out 3}@keyframes v32-flash{50%{filter:drop-shadow(0 0 8px #85aeea);opacity:.62}}
.v32-console #controlDevicePicker:focus{outline:none}
.v32-console #controlDevicePicker:focus-visible{outline:2px solid #739bc9;outline-offset:3px}
.v32-console #controlDevicePicker.device-selection-prompt{border-color:#78a7de;animation:control-picker-pulse .7s ease-out 2}
@keyframes control-picker-pulse{0%{box-shadow:0 0 0 5px #739bc936,0 12px 30px #315d9430;border-color:#78a7de}100%{box-shadow:0 2px 6px #15362203;border-color:var(--line)}}
@media(max-width:1100px){.v32-console .composer-grid{grid-template-columns:minmax(0,1fr)}.v32-status{min-width:73px}.v32-status span{font-size:11px}.v32-status b{font-size:12px}.v32-console .control-grid,.v32-workspace{grid-template-columns:240px minmax(0,1fr)}}
@media(max-width:800px){.v32-console .control-grid,.v32-workspace{grid-template-columns:1fr}.v32-console .v32-picker-panel{position:static}.v32-console .my-devices-panel{padding:16px}.v32-preview-badge{display:none}}
@media(prefers-reduced-motion:reduce){.v32-device-fold,.v32-picker-panel *{transition:none}.v32-attention{animation:none}.v32-console #controlDevicePicker.device-selection-prompt{animation:none;box-shadow:0 0 0 5px #739bc92e,0 12px 30px #315d9429}}

.v32-console #controlDeviceList,.v32-console #batchDeviceList{transition:height .18s ease,max-height .18s ease}.v32-preview-badge{pointer-events:none}.v32-console .brand-mark{display:grid;place-items:center;color:#fff;background:#455568;border-radius:10px;font-size:22px;font-weight:700}

/* Picker indicators show the same connections; the entire row selects a device. */
.v32-picker-row{display:grid;grid-template-columns:16px minmax(0,1fr);gap:10px 8px}
.v32-picker-row>.v32-statuses{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:3px}
.v32-console .v32-picker-row .v32-status{min-width:0;min-height:44px;padding:5px 3px;cursor:inherit}
.v32-console .v32-picker-row .v32-status>span{gap:2px}
.v32-picker-row .v32-status i{width:6px;height:6px}
.v32-picker-row>.v32-result{grid-column:1/-1;margin:0}
.v32-console #controlDeviceList.is-folded,.v32-console #batchDeviceList.is-folded{max-height:180px}

/* Allow 300–360px tiles so a nearly wide-enough panel can show three devices. */
@container device-area (min-width:612px){
  .v32-console #deviceGrid{max-width:732px;grid-template-columns:repeat(2,minmax(0,1fr))!important}
}
@container device-area (min-width:924px){
  .v32-console #deviceGrid{max-width:1104px;grid-template-columns:repeat(3,minmax(0,1fr))!important}
}

/* Keep the Wi-Fi form aligned regardless of scan results or helper text. */
.v32-console #bleModal{padding:16px}
.v32-console #bleModal>.modal-card{max-height:calc(100dvh - 32px);overflow-y:auto;overscroll-behavior:contain}
.v32-console #bleModal .modal-head{align-items:flex-start}
.v32-console #bleModal .modal-head>div{min-width:0}
.v32-console #bleSummary{margin:0;line-height:20px;overflow-wrap:anywhere}
.v32-console #bleCloseBtn{width:32px;height:32px;min-width:32px;flex:0 0 32px;border-radius:10px;font-size:20px;line-height:1;cursor:pointer}
.v32-console #bleModal .ble-status-box{margin:14px 0 0;line-height:20px}
.v32-console #bleModal .ble-wifi-details{margin-top:16px;padding-top:16px}
.v32-console #bleModal .ble-wifi-details>.muted{line-height:20px}
.v32-console #bleModal .row{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start}
.v32-console #bleModal .field{min-width:0;margin:0;align-content:start;grid-template-rows:auto 40px;gap:6px}
.v32-console #bleModal .field label{line-height:18px}
.v32-console #bleModal .field input{height:40px;min-height:40px}
.v32-console #bleModal .v32-wifi-scan{margin-top:10px;align-items:center;gap:8px}
.v32-console #bleModal .v32-wifi-scan button{flex:none;min-height:34px}
.v32-console #bleModal .v32-wifi-scan select{min-width:0;max-width:100%;flex:1 1 180px;height:34px;padding:0 8px;border:1px solid var(--line);border-radius:8px;background:#fff}
.v32-console #bleModal .v32-wifi-scan small{flex-basis:100%;line-height:18px;overflow-wrap:anywhere}
.v32-console #bleModal .v32-wifi-scan small:empty{display:none}
.v32-console #bleModal .ios-row{margin-top:16px;padding:12px;border:1px solid var(--line);border-radius:10px;background:#f7f9fb}
.v32-console #bleModal .ios-row>div{min-width:0}
.v32-console #bleModal .ios-row strong{display:block;font-size:14px;line-height:20px}
.v32-console #bleModal .ios-row p{margin:3px 0 0;font-size:12px;line-height:18px}
.v32-console #bleModal .ios-switch{flex:none}
.v32-console #bleModal .control-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:16px}
.v32-console #bleModal .control-actions button{min-width:0;min-height:42px;margin:0;line-height:20px;white-space:normal}
@media(max-width:560px){
  .v32-console #bleModal>.modal-card{padding:16px}
  .v32-console #bleModal .row{grid-template-columns:minmax(0,1fr)}
}

/* Rename uses the same in-page controls in installed and browser consoles. */
.v32-rename-card{max-width:420px;max-height:calc(100dvh - 40px);overflow:auto}
.v32-rename-card .modal-head{align-items:center}.v32-rename-card .modal-head h2{margin:0}
.v32-rename-card .muted{overflow-wrap:anywhere}.v32-rename-card .icon-btn{flex-shrink:0}
.v32-rename-card .field{margin-top:16px}.v32-rename-card #v32RenameError{color:#ad3434;font-size:13px;min-height:20px;margin:8px 0}
.v32-rename-card .control-actions{display:grid;grid-template-columns:1fr 1fr;margin-top:12px}

/* Batch entry is visible before the editor, including with zero or one device. */
.v32-console #v32Roster{display:block;margin:0 0 16px;padding:16px 18px;min-width:0}
.v32-roster-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.v32-roster-head h2{margin:0;font-size:17px}.v32-roster-head small{font-size:12px;color:#7b8797}
#v32RosterHint{font-size:13px;color:#718096;line-height:1.6;margin:7px 0 10px}
.v32-roster-tools{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.v32-roster-tools>.mini-button{margin:0;min-height:36px;padding:7px 12px;display:inline-flex;align-items:center;justify-content:center;text-decoration:none;font-size:13px;line-height:20px;box-sizing:border-box;cursor:pointer}
.v32-roster-tools>[hidden]{display:none!important}.v32-roster-tools:has(input:disabled) .v32-file{opacity:.5;cursor:default}
#v32RosterResult{font-size:13px;line-height:1.6;margin:10px 0 0;color:#5278a8;overflow-wrap:anywhere}#v32RosterResult:empty{display:none}
#v32RosterMapping{margin-top:10px;font-size:13px;color:#53677e}#v32RosterMapping[hidden]{display:none}
#v32RosterMapping summary{cursor:pointer;line-height:24px}.v32-roster-table-wrap{max-height:210px;overflow:auto;margin-top:8px;border:1px solid #e5eaf0;border-radius:10px}
.v32-roster-table-wrap table{border-collapse:collapse;width:100%;min-width:480px;text-align:left;font-size:12px}
.v32-roster-table-wrap th{position:sticky;top:0;background:#f5f7fa;color:#718096;z-index:1}
.v32-roster-table-wrap td,.v32-roster-table-wrap th{padding:8px 10px;border-bottom:1px solid #e9edf2;max-width:240px;overflow-wrap:anywhere}
.v32-roster-table-wrap small{display:block;color:#95a0ae;font-size:10px}.v32-roster-table-wrap strong{font-weight:600}
@media(max-width:560px){.v32-console #v32Roster{padding:14px}.v32-roster-tools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.v32-roster-tools>.mini-button{min-width:0}}

.v32-console #v32CsvEditor{z-index:1450;padding:16px;grid-template-columns:minmax(0,1fr);justify-items:center}
.v32-console .v32-csv-editor-card{width:min(960px,100%);max-width:100%;max-height:calc(100dvh - 32px);display:flex;flex-direction:column;gap:14px;min-width:0;min-height:0;padding:20px}
.v32-console .v32-csv-editor-card .modal-head{gap:16px}
.v32-console .v32-csv-editor-card .modal-head>div{min-width:0}
.v32-console #v32CsvEditorHint{margin:7px 0 0;line-height:19px;white-space:normal;overflow-wrap:anywhere}
.v32-console #v32CsvEditorClose{width:32px;height:32px;min-width:32px;flex:none;border-radius:10px;font-size:20px;cursor:pointer}
.v32-console .v32-csv-editor-tools{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.v32-console .v32-csv-editor-tools a{margin-left:auto;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
.v32-console .v32-csv-editor-tools .mini-button{font-size:14px;min-height:36px}
.v32-console .v32-csv-editor-scroll{width:100%;min-width:0;min-height:0;max-height:440px;overflow:auto;border:1px solid var(--line);border-radius:10px;overscroll-behavior:contain}
.v32-console .v32-csv-editor-scroll table{width:100%;min-width:650px;border-collapse:separate;border-spacing:0;table-layout:fixed}
.v32-console #v32CsvEditor[data-kind="roster"] table{min-width:850px}
.v32-console .v32-csv-editor-scroll th{position:sticky;top:0;z-index:1;background:#f4f6f8;padding:10px 8px;text-align:left;font-size:12px;line-height:18px;color:#647184;font-weight:600;border-bottom:1px solid var(--line)}
.v32-console .v32-csv-editor-scroll td{padding:5px 4px;border-bottom:1px solid #edf0f4;vertical-align:middle}
.v32-console .v32-csv-editor-scroll tbody tr:last-child td{border-bottom:0}
.v32-console .v32-csv-editor-scroll :is(th,td):first-child{width:38px;text-align:center}
.v32-console .v32-csv-editor-scroll :is(th,td):nth-child(2){width:220px}
.v32-console .v32-csv-editor-scroll :is(th,td):last-child{width:38px;text-align:center}
.v32-console .v32-csv-number{font-size:12px;color:#8b97a6}
.v32-console .v32-csv-cell{display:block;width:100%;min-width:0;height:38px;padding:8px;border:1px solid transparent;border-radius:6px;background:#fff;color:var(--ink);font-size:14px;line-height:20px}
.v32-console .v32-csv-cell:hover{border-color:#dce4ee}
.v32-console .v32-csv-cell:focus{outline:2px solid #93b4e0;outline-offset:-1px;border-color:transparent;background:#f8fbff}
.v32-console .v32-csv-remove{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;border-radius:6px;background:transparent;color:#8793a2;font-size:20px;cursor:pointer}
.v32-console .v32-csv-remove:hover{background:#fff0f0;color:#b54343}
.v32-console #v32CsvEditorStatus{margin:0;font-size:12px;line-height:18px;overflow-wrap:anywhere}
.v32-console #v32CsvEditorStatus:empty{display:none}
.v32-console #v32CsvEditorStatus.error{color:#b44343}
.v32-console .v32-csv-editor-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:auto}
.v32-console .v32-csv-editor-actions button{min-width:0;min-height:42px;font-size:14px;font-weight:600;cursor:pointer}
.v32-console .v32-csv-import-tools{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.v32-console .v32-csv-import-tools .v32-sample{margin:0 0 0 4px}
@media(max-width:560px){.v32-console .v32-csv-editor-card{padding:16px;gap:12px}.v32-console .v32-csv-editor-tools a{margin-left:0}}

.table-choice,.table-selftest{border:1px solid #d5dce6;border-radius:18px;padding:24px;color:#293549;background:#fff;max-width:calc(100vw - 32px);box-sizing:border-box;font:inherit;}
.table-choice{width:480px;}.table-choice select{display:block;width:100%;margin:18px 0;padding:12px;border:1px solid #d5dce6;border-radius:12px;}
.table-choice>div,.table-test-actions,.table-selftest footer{display:flex;gap:12px;flex-wrap:wrap;}.table-choice>div{justify-content:flex-end;}
.table-selftest{width:900px;max-height:calc(100dvh - 40px);overflow:auto;}.table-selftest::backdrop,.table-choice::backdrop{background:rgb(20 29 44 / 40%);}
.table-selftest header{display:flex;justify-content:space-between;align-items:center;gap:16px;}.table-selftest h2{margin:0;font-size:24px;}
.table-selftest textarea{display:block;box-sizing:border-box;width:100%;height:43dvh;min-height:180px;resize:vertical;padding:14px;border:1px solid #dce3ed;border-radius:12px;background:#f7f9fc;color:#293549;font:15px/1.6 system-ui,sans-serif;margin:16px 0;}
.table-selftest [data-test-status]{font-weight:600;overflow-wrap:anywhere;}.v32-csv-editor-actions select{border:1px solid #d7dfe9;border-radius:10px;padding:10px;font:inherit;min-width:130px;max-width:100%;}
.v32-csv-editor-tools{flex-wrap:wrap;}#tableSelfTestOpen{margin-left:auto;white-space:nowrap;}
@media(max-width:600px){.table-selftest{padding:18px;}.table-selftest h2{font-size:21px;}.table-test-actions>button,.table-selftest footer>button{flex:1;min-width:110px;}.v32-csv-editor-actions{flex-wrap:wrap;}.v32-csv-editor-actions select{flex:1 0 100%;}.v32-roster-head{flex-wrap:wrap;}}

.visual-debug-banner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;margin:0 0 18px;padding:16px 18px;border:1px solid #c5d9f5;border-radius:14px;background:#eef5ff;color:#31577f}
.visual-debug-banner[hidden]{display:none}.visual-debug-banner strong{font-size:16px}.visual-debug-banner small{display:block;font-size:13px;margin-top:5px;color:#637c98}.visual-debug-actions{display:flex;gap:8px;flex-wrap:wrap}.visual-debug-actions .button{font-size:13px;min-height:40px;padding:8px 13px}
.visual-debug-dialog{width:720px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 40px);box-sizing:border-box;overflow:auto;border:1px solid #dce3ec;border-radius:18px;background:#fff;color:#27313d;font:14px/1.5 system-ui,sans-serif;padding:24px;box-shadow:0 20px 80px #18243830}
.visual-debug-dialog::backdrop{background:#16223566}.visual-debug-dialog header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.visual-debug-dialog h2{margin:0;font-size:23px}.visual-debug-dialog h3{margin:0 0 14px;font-size:18px}.visual-debug-dialog p{color:#718096;margin:8px 0 16px}.visual-debug-dialog section{padding-top:22px;margin-top:16px;border-top:1px solid #e6ebf1}.visual-debug-dialog .icon-btn{flex-shrink:0}.visual-debug-create{display:flex;align-items:flex-end;gap:20px;flex-wrap:wrap;margin-bottom:18px}.visual-debug-create>label{display:grid;gap:7px;font-weight:600}.visual-debug-create input[type=number]{width:110px;box-sizing:border-box;padding:10px 12px;border:1px solid #d7e0eb;border-radius:10px;font:inherit}.visual-debug-create fieldset{display:flex;gap:16px;flex-wrap:wrap;padding:0 0 10px;border:0;margin:0}.visual-debug-create legend{font-weight:600;margin-bottom:12px}.visual-debug-dialog label{display:flex;align-items:center;gap:6px}.visual-debug-dialog input[type=checkbox]{width:17px;height:17px;accent-color:#4c7ab3}#visualDebugMessage:empty{display:none}#visualDebugMessage{color:#b34a23}#visualDebugDevices{max-height:260px;overflow:auto;margin-bottom:16px}.visual-device-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;padding:12px 0;border-bottom:1px solid #e8edf4}.visual-device-row>div{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.visual-device-row strong,.visual-device-row small{display:block}.visual-device-row small{font-size:12px;color:#8b99ac}.visual-image-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}.visual-image-grid article{min-width:0;padding:12px;border:1px solid #dfe7f1;border-radius:12px}.visual-image-grid strong,.visual-image-grid small{display:block}.visual-image-grid small{font-size:12px;color:#8a96a6}.visual-image-grid img{display:block;width:100%;margin-top:10px;border:1px solid #e5eaf0}
@media(max-width:600px){.visual-debug-dialog{padding:18px}.visual-debug-actions{width:100%}.visual-debug-actions .button{flex:1}.visual-debug-banner{padding:14px}.visual-device-row>div{gap:10px}.visual-debug-create{gap:14px}.visual-debug-create fieldset{gap:12px}}

/* All UI icon paths match the mini program; labels remain normal text. */
.ui-icon{display:inline-block;width:20px;height:20px;flex:0 0 auto;vertical-align:middle;pointer-events:none;}
.device-quick-actions>button{display:flex;align-items:center;gap:12px;}.device-quick-actions>button>.ui-icon{width:20px;height:20px;}
.account-avatar{display:flex;align-items:center;justify-content:center;}.account-avatar>.ui-icon{width:20px;height:20px;}
.v32-add-device>.ui-icon{width:22px;height:22px;}.ly32-head [data-guide-restart]{display:inline-flex;align-items:center;gap:5px;}.ly32-head [data-guide-restart]>.ui-icon{width:15px;height:15px;}
.qr-refresh>.ui-icon{width:28px;height:28px;}
.icon-btn,.ly32-close,#deviceConnectionClose{font-size:22px!important;line-height:1;display:inline-flex;align-items:center;justify-content:center;}
#v32CsvEditorClose{font-size:20px!important;line-height:1;display:inline-flex;align-items:center;justify-content:center;}

/* Top workspace controls and right drawers share the console's neutral controls. */
.console-side-panels{scrollbar-gutter:stable}
.console-side-panels.v32-console{--workspace-title-size:18px;--workspace-title-weight:650;--workspace-title-height:28px;--workspace-inset-x:22px;--workspace-inset-y:12px}
.console-side-panels .v32-workspace{display:block}
.console-side-panels.v32-console .composer-grid{container-type:inline-size;container-name:composer-workspace;grid-template-columns:minmax(0,1fr) var(--console-picker-width,406px);grid-template-areas:"preview controls" "templates controls";grid-template-rows:auto auto}
.console-composer-sidebar{grid-area:controls;display:flex;flex-direction:column;gap:16px;min-width:0;align-self:start;align-items:stretch}
.console-side-panels.v32-console .console-composer-sidebar>.console-compact-picker{width:100%;min-width:0;padding:var(--workspace-inset-y) var(--workspace-inset-x)!important}
.console-composer-sidebar .console-compact-picker .panel-head{margin-bottom:8px!important}
.console-composer-sidebar #batchDeviceList{width:100%;max-width:360px}
.console-side-panels.v32-console .control-grid{grid-template-columns:minmax(0,1fr)}
.console-side-panels .control-device-picker-panel{grid-column:1;grid-row:1;width:min(620px,100%);justify-self:start}
.console-side-panels #controlActionPanel{grid-column:1;grid-row:2}
.console-side-panels .template-panel{min-width:0}
.console-side-panels.v32-console .console-composer-sidebar>.advanced-tools{align-self:stretch;display:flex;flex-direction:column;gap:0;width:100%;margin:0}
.console-side-panels.v32-console .console-composer-sidebar>.console-component-selection{min-width:0;margin:0;padding:var(--workspace-inset-y) var(--workspace-inset-x)!important}
.console-side-panels #sharedEditor .console-component-selection>.components-group{padding:0;border:0}
.console-side-panels.v32-console .console-composer-sidebar>.console-background-change{display:block;width:100%;min-width:0;height:auto;margin:0;padding:var(--workspace-inset-y) var(--workspace-inset-x)!important}
.console-background-change .background-change-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;min-width:0}
.console-side-panels #sharedEditor .background-change-actions>.mini-button{gap:7px;margin:0;border:1px solid var(--line);background:#fff;color:var(--ink);cursor:pointer;word-break:keep-all;overflow-wrap:anywhere}
.console-side-panels #sharedEditor .background-change-actions>.mini-button:hover{background:#f7f8fa;border-color:#cdd5df}
.console-side-panels #sharedEditor .background-change-file{background:#fff!important;color:#171717!important;border:1px solid var(--line)!important}
/* Section headings share one type scale and one inset from their panels. */
.console-side-panels.v32-console #sharedEditor :is(.console-compact-picker h2,.tool-title-row h3,.template-group h3,.v32-roster-head h2,.canvas-toolbar strong){font-family:inherit;font-size:var(--workspace-title-size)!important;font-weight:var(--workspace-title-weight);line-height:var(--workspace-title-height)}
.console-side-panels.v32-console #sharedEditor>:is(.editor-canvas-panel,.template-panel),.console-side-panels.v32-console #sharedEditor .console-composer-sidebar>.advanced-tools,.console-side-panels.v32-console #sharedEditor .console-compact-roster{padding:var(--workspace-inset-y) var(--workspace-inset-x)!important}
.console-side-panels #sharedEditor .panel-head h2,.console-side-panels #sharedEditor .tool-title-row h3{margin:0}
.console-side-panels #sharedEditor .console-compact-picker .panel-head{flex-direction:row;flex-wrap:wrap}
.console-side-panels #sharedEditor .advanced-tools>.tool-section{padding:0}
.console-side-panels.v32-console #sharedEditor .advanced-tools>.component-editor-section{gap:0;align-items:stretch}
.console-side-panels #sharedEditor .tool-title-row{min-height:var(--workspace-title-height);margin:0 0 8px!important;gap:10px;align-items:center}
.console-side-panels #sharedEditor .advanced-tools>.tool-section:not(.hidden)~.tool-section:not(.hidden){margin-top:16px}
.console-side-panels #sharedEditor .template-group h3{margin:0 0 8px}
.console-side-panels #sharedEditor .component-grid{display:grid;grid-template-columns:repeat(4,max-content);align-items:center;gap:6px}
.console-side-panels #sharedEditor .component-choice{flex:0 0 auto;width:auto;min-width:0;max-width:100%;padding:6px 8px;gap:6px;border:1px solid #e7e7e7;border-radius:9px;background:#fff;font-size:10px;white-space:nowrap}
.console-side-panels #sharedEditor .component-choice input{margin:0;flex:none}
.console-side-panels:lang(en) #sharedEditor .component-grid{grid-template-columns:repeat(2,max-content)}
@media(max-width:400px){.console-side-panels #sharedEditor .component-grid{grid-template-columns:repeat(2,max-content)}}
.console-side-panels #sharedEditor .template-actions>.mini-button{display:inline-flex;align-items:center;justify-content:center;align-self:stretch;box-sizing:border-box;margin:0;font-family:inherit;font-weight:550;line-height:20px}
.console-side-panels #sharedEditor .canvas-toolbar{min-height:var(--workspace-title-height);margin:0 0 8px;padding:0}
.console-side-panels #sharedEditor .component-card-head strong{font-size:var(--workspace-title-size);font-weight:var(--workspace-title-weight);line-height:20px}
.console-side-panels.v32-console .console-compact-picker{--device-tile-height:72px;position:static;margin:0;padding:20px!important;border:1px solid var(--line);border-radius:18px;box-shadow:none;background:#fff}
.console-compact-picker .panel-head{margin-bottom:12px!important;gap:8px!important;align-items:center!important}
.console-compact-picker .panel-head>div:first-child{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.console-compact-picker .v32-picker-count{margin:0}
.console-compact-picker h2{font-size:17px!important}.console-compact-picker .v32-picker-count{font-size:12px}
.console-compact-picker .v32-picker-tools button{min-height:32px;padding:6px 10px;font-size:12px;white-space:nowrap}
.console-side-panels #controlDeviceList,.console-side-panels #batchDeviceList{height:auto!important;max-height:none!important;overflow:visible;align-items:stretch}
.console-compact-picker .v32-picker-row{display:grid;width:100%;grid-template-columns:18px minmax(0,1fr) 168px;align-items:center;gap:8px!important;height:72px;min-height:72px;padding:10px!important;border-radius:12px;background:#f7f7f7}
.console-compact-picker .v32-picker-row.selected{border-color:#a6bbd8;background:#f2f6fc}
.console-compact-picker .v32-picker-info strong{font-size:16px;line-height:21px}.console-compact-picker .v32-picker-info small{font-size:12px;line-height:16px}
.console-compact-picker .v32-picker-info .v32-result{font-size:11px;line-height:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.console-compact-picker .v32-picker-row>.v32-statuses{grid-column:3;grid-row:1;width:168px;gap:4px}.console-compact-picker .v32-picker-row .v32-status{min-height:40px;height:40px;padding:4px 3px}.console-compact-picker .v32-status span,.console-compact-picker .v32-status b{font-size:12px;line-height:14px}
.console-picker-empty{font-size:14px;font-weight:600}.console-picker-empty .ui-icon{width:22px;height:22px;flex-shrink:0}
.console-side-panels .console-compact-roster{display:block;padding:16px!important;margin:18px 0 0!important;border:1px solid var(--line);border-radius:16px;background:#fafbfc;box-shadow:none}
.console-compact-roster .v32-roster-head{flex-wrap:nowrap;gap:8px}.console-compact-roster .v32-roster-head h2{font-size:17px;white-space:nowrap}.console-compact-roster .v32-roster-head small{flex-basis:auto;white-space:nowrap}
.console-compact-roster #v32RosterHint{font-size:12px;line-height:1.65;margin:8px 0 12px;color:#85909e}
.console-compact-roster #v32RosterHint:empty{display:none}.console-compact-roster #v32RosterHint:empty+.v32-roster-tools{margin-top:12px}
.console-compact-roster.has-draft #v32RosterHint{color:#966522;font-weight:600}
.console-compact-roster .v32-roster-tools{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.console-compact-roster .v32-roster-tools>.mini-button{min-width:0;min-height:42px;padding:8px 4px;border-radius:12px;font-size:14px;font-weight:600;white-space:nowrap}
.console-compact-roster #v32RosterEdit{grid-column:1;grid-row:1}.console-compact-roster #v32RosterImport{grid-column:2;grid-row:1}
.console-compact-roster :is(#v32RosterTemplate,#v32RosterClear,#v32RosterMapping){display:none!important}
.console-compact-roster #v32RosterResult{font-size:12px;line-height:1.6;overflow-wrap:anywhere;margin:10px 0 0}.console-compact-roster #v32RosterResult:empty{display:none}
body.console-panel-open,body.console-csv-open{overflow:hidden}
.console-side-panels .console-device-drawer.modal{z-index:1120;display:block;width:100vw;right:auto;padding:0;overflow:hidden;background:rgba(22,29,39,0);transition:background .22s ease}
.console-device-drawer.is-open{background:rgba(22,29,39,.28)!important}
.console-side-card{position:absolute;top:0;right:0;bottom:0;display:flex;flex-direction:column;gap:0;width:75vw;background:var(--panel,#fff);border-radius:24px 0 0 24px;border-left:1px solid var(--line);box-shadow:-20px 0 70px #17203322;transform:translateX(calc(100% + 40px));transition:transform .22s cubic-bezier(.2,.7,.2,1);outline:0}
.is-open>.console-side-card{transform:translateX(0)}
.console-side-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:26px 24px 20px;border-bottom:1px solid var(--line);flex-shrink:0}
.console-side-head h2{font-size:23px;margin:0;font-weight:700}.console-drawer-heading{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.console-drawer-heading small{font-size:14px;line-height:1.6;color:#8792a2}
.console-collapse{display:inline-flex;align-items:center;gap:6px;min-height:40px;white-space:nowrap;flex-shrink:0}.console-collapse .ui-icon{width:16px;height:16px}
.console-side-handle{position:absolute;left:-34px;top:calc(50% - 36px);display:grid;place-items:center;width:34px;height:72px;background:var(--panel,#fff);border:1px solid var(--line);border-right:0;border-radius:14px 0 0 14px;box-shadow:-8px 0 20px #1720330b;color:#687485;cursor:pointer}
.console-drawer-tools{display:flex;gap:12px;padding:20px 24px}.console-drawer-search{flex:1;min-width:0}.console-drawer-search input{width:100%;height:42px;border:1px solid var(--line);border-radius:12px;padding:0 12px;font-size:14px;background:#fafbfc;color:var(--ink)}
.console-drawer-tools>.mini-button{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;min-height:42px;padding:8px 16px;border-radius:12px;font-size:14px}
.console-drawer-list{--device-tile-height:72px;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,var(--console-device-width,360px)),var(--console-device-width,360px)));justify-content:start;align-content:start;gap:12px;flex:1;min-height:0;overflow:auto;padding:0 24px 24px;overscroll-behavior:contain;scrollbar-gutter:stable}
.console-drawer-device{margin:0;padding:0!important}.console-drawer-device .v32-device-head{display:grid;grid-template-columns:18px minmax(0,1fr) 168px;padding:10px;gap:8px}
.console-drawer-device input{width:18px;height:18px;margin:0;accent-color:#3b6da9;cursor:pointer}.console-drawer-device.selected{border-color:#a6bbd8;background:#f2f6fc}.console-drawer-device.unavailable .v32-device-name{opacity:.6}.console-drawer-device.unavailable{cursor:default}
.console-drawer-no-match{grid-column:1/-1;font-size:14px;margin:0;color:#8792a2}.console-drawer-list .v32-add-device{font-size:15px;font-weight:600}
.console-side-panels #v32AddModal{z-index:1350}.console-side-panels #bleModal{z-index:1360}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel{display:block;width:100vw;right:auto;padding:0;overflow:hidden;justify-items:initial;background:rgba(22,29,39,0);transition:background .22s ease}
.console-side-panels #v32CsvEditor[data-closing="1"]{pointer-events:none}
.console-side-panels #v32CsvEditor.is-side-panel.is-open{background:rgba(22,29,39,.28)}
.console-side-panels #v32CsvEditor.is-side-panel>.v32-csv-editor-card{position:absolute;top:0;right:0;bottom:0;width:min(1080px,calc(100vw - 48px));height:100%;max-height:100%;border-radius:24px 0 0 24px;border-left:1px solid var(--line);padding:26px 24px 20px;gap:18px;transform:translateX(calc(100% + 40px));transition:transform .22s cubic-bezier(.2,.7,.2,1)}
.console-side-panels #v32CsvEditor.is-side-panel.is-open>.v32-csv-editor-card{transform:translateX(0)}
.is-side-panel .v32-csv-editor-card .modal-head h2{font-size:23px;margin:0}.is-side-panel #v32CsvEditorHint{font-size:13px!important;line-height:1.65!important}
.is-side-panel #v32CsvEditorClose{display:none}.is-side-panel .v32-csv-editor-scroll{flex:1;max-height:none;min-height:0;scrollbar-gutter:stable}
.console-side-panels #v32CsvEditor.is-side-panel table{min-width:760px}.console-side-panels #v32CsvEditor.is-side-panel :is(th,td):first-child{width:180px;text-align:left;padding:12px}
.console-side-panels #v32CsvEditor.is-side-panel th{font-size:14px;padding:14px 10px}.console-side-panels #v32CsvEditor.is-side-panel td{padding:10px 6px}
.console-side-panels #v32CsvEditor.is-side-panel td:first-child{position:sticky;left:0;z-index:1;background:#fff}.console-side-panels #v32CsvEditor.is-side-panel th:first-child{left:0;z-index:3}
.console-csv-device-name{display:block;font-size:14px;font-weight:650;color:#384454;line-height:1.5}.console-csv-device-id{display:block;font-size:11px;color:#8d97a6;font-weight:400;line-height:1.6;overflow-wrap:anywhere}
.console-side-panels #v32CsvEditor.is-side-panel .v32-csv-cell{height:44px;border:1px solid #e5e9ef;border-radius:9px;padding:10px;font-size:15px}.is-side-panel .v32-csv-editor-tools .mini-button{min-height:40px;border-radius:12px;font-size:14px}.is-side-panel .v32-csv-editor-actions{padding-top:16px;border-top:1px solid var(--line);grid-template-columns:minmax(90px,auto) 1fr 1fr}.is-side-panel .v32-csv-editor-actions select{min-width:0;border:1px solid var(--line);border-radius:12px;padding:8px;font-size:13px}.is-side-panel .v32-csv-editor-actions button{border-radius:12px;min-height:44px}
.console-side-panels #v32CsvEditor:not(.is-side-panel) :is(.console-csv-collapse,.console-side-handle){display:none}
@media(max-width:1100px){.console-side-panels.v32-console .composer-grid{grid-template-columns:minmax(0,1fr) 290px}}
@media(max-width:820px){.console-side-panels.v32-console .composer-grid{grid-template-columns:1fr;grid-template-areas:"background" "preview" "templates" "components" "controls" "devices" "roster";grid-template-rows:auto}.console-side-panels .console-compact-picker{width:100%}.console-side-card{width:calc(100vw - 36px)}}
@media(max-width:560px){.console-side-card,.console-side-panels #v32CsvEditor.is-side-panel>.v32-csv-editor-card{width:calc(100vw - 12px);border-radius:18px 0 0 18px}.console-side-handle{display:none}.console-side-head{padding:20px 16px 16px;gap:10px}.console-side-head h2,.is-side-panel .v32-csv-editor-card .modal-head h2{font-size:20px}.console-drawer-tools{padding:16px;gap:8px}.console-drawer-list{padding:0 16px 16px}.console-side-panels #v32CsvEditor.is-side-panel>.v32-csv-editor-card{padding:20px 16px 16px;gap:14px}.is-side-panel .v32-csv-editor-actions{grid-template-columns:1fr 1fr}.is-side-panel .v32-csv-editor-actions select{grid-column:1/-1}.console-side-panels #v32CsvEditor.is-side-panel .v32-csv-editor-tools a{margin-left:0}.console-compact-picker .v32-picker-row{grid-template-columns:18px minmax(0,1fr) 144px}.console-compact-picker .v32-picker-row>.v32-statuses{width:144px;grid-column:3;grid-row:1}}
@media(prefers-reduced-motion:reduce){.console-side-card,.console-device-drawer,.console-side-panels #v32CsvEditor.is-side-panel,.console-side-panels #v32CsvEditor.is-side-panel>.v32-csv-editor-card{transition:none!important}}

.canvas-component-menu{position:fixed;z-index:1090;width:210px;max-width:calc(100vw - 16px);padding:7px;border:1px solid #dfe3e9;border-radius:14px;background:#fff;box-shadow:0 12px 40px #202b3e26;color:var(--ink);outline:0}
.canvas-context-target{padding:7px 10px 9px;font-size:12px;line-height:1.5;color:#8b95a3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-bottom:1px solid #edf0f4;margin-bottom:5px}
.canvas-component-menu>button{display:flex;align-items:center;gap:10px;width:100%;min-height:42px;padding:10px;border:0;border-radius:9px;background:transparent;color:#344257;font-family:inherit;font-size:15px;font-weight:600;line-height:1.4;text-align:left;cursor:pointer}
.canvas-component-menu>button .ui-icon{width:19px;height:19px;flex:none}.canvas-component-menu>button:hover,.canvas-component-menu>button:focus-visible{background:#f0f4f9;outline:0}.canvas-component-menu>button:disabled{opacity:.45;cursor:default;background:transparent}
#screenCanvas:focus-visible{outline:2px solid #96b5dc;outline-offset:4px}

/* Keep the content readable while the surrounding property controls stay compact. */
#componentPopover #textEditorPanel{display:grid;gap:10px}
#componentPopover #textEditorPanel.hidden{display:none}
#textEditorPanel .field{min-width:0;margin:0;gap:5px}
#textEditorPanel .field label{font-size:12px;line-height:18px;white-space:nowrap}
#textEditorPanel #textContent{box-sizing:border-box;width:100%;min-height:112px;height:112px;max-height:240px;resize:vertical;overflow:auto;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font:inherit;font-size:14px;line-height:1.6;overflow-wrap:anywhere}
#textEditorPanel .text-geometry-grid,#textEditorPanel .text-style-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:start;gap:8px}
#textEditorPanel .text-style-grid .field{display:flex;flex-direction:column;align-items:flex-start;gap:5px}
#componentPopover #textEditorPanel #textAlign{width:100%}
#textEditorPanel .field :is(input:not([type=checkbox]),select){box-sizing:border-box;width:100%;min-width:0;min-height:36px;height:36px;padding:6px 7px;border-radius:8px;font-size:13px;color:var(--ink)}
#componentPopover #textEditorPanel .field :is(input:not([type=checkbox]),select){border-radius:8px!important}
#textEditorPanel .field input[type=color]{flex:none;box-sizing:border-box;width:36px;height:36px;min-width:36px;min-height:36px;max-width:36px;max-height:36px;padding:4px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer}
#textEditorPanel .field input[type=color]::-webkit-color-swatch-wrapper{padding:0}
#textEditorPanel .field input[type=color]::-webkit-color-swatch{border:1px solid #0002;border-radius:4px}
#textEditorPanel .field input[type=color]::-moz-color-swatch{border:1px solid #0002;border-radius:4px}
#textEditorPanel .text-style-controls{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:0;min-height:36px}
#textEditorPanel .text-outline-field:has(#textOutline:not(:checked)) #outlineColor{display:none}
#textEditorPanel .text-style-controls input[type=checkbox]{appearance:none;-webkit-appearance:none;position:relative;flex:none;box-sizing:border-box;width:30px;height:18px;min-height:18px;margin:0;padding:0;border:0;border-radius:999px;background:#cbd1d8!important;cursor:pointer;transition:background .15s}
#textEditorPanel .text-style-controls input[type=checkbox]::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0002;transition:transform .15s}
#textEditorPanel .text-style-controls input[type=checkbox]:checked{background:#466b98!important}
#textEditorPanel .text-style-controls input[type=checkbox]:checked::after{transform:translateX(12px)}
#textEditorPanel .text-editor-actions{display:flex;justify-content:flex-end;gap:8px}
#textEditorPanel .text-editor-actions .mini-button{box-sizing:border-box;width:calc((100% - 24px)/4);min-width:80px;height:36px;min-height:36px;margin:0;padding:6px;border:1px solid var(--line);border-radius:8px;background:#fafafa;font-family:inherit;font-size:14px;font-weight:500;line-height:20px;white-space:nowrap}
@media(prefers-reduced-motion:reduce){#textEditorPanel .text-style-controls input[type=checkbox],#textEditorPanel .text-style-controls input[type=checkbox]::after{transition:none}}
#textEditorPanel :is(textarea,input,select):focus-visible{outline:2px solid #7998c2;outline-offset:2px}
#textEditorPanel textarea:disabled{opacity:.55;cursor:default}

/* One type scale and responsive layout for the complete transfer workspace. */
.console-side-panels.v32-console{--workspace-subtitle-size:15px;--workspace-body-size:14px;--workspace-meta-size:13px;--workspace-caption-size:12px;--workspace-action-height:42px;--workspace-panel-radius:18px}
.console-side-panels.v32-console .v32-composer-main{container-type:inline-size;container-name:composer-page}
.console-side-panels.v32-console #sharedEditor{grid-template-columns:minmax(0,1fr) var(--console-picker-width,406px);grid-template-areas:"preview controls" "templates controls";grid-template-rows:repeat(2,auto);gap:16px;font-size:var(--workspace-body-size);line-height:1.5}
.console-side-panels.v32-console #sharedEditor>:is(.panel,.console-composer-sidebar) {min-width:0}
.console-side-panels.v32-console #sharedEditor .panel{border-radius:var(--workspace-panel-radius)}
.console-side-panels.v32-console #sharedEditor .template-panel{container-type:inline-size;container-name:template-tools}
.console-side-panels.v32-console #sharedEditor .console-compact-roster{grid-area:roster;margin:0!important;padding:var(--workspace-inset-y) var(--workspace-inset-x)!important;background:var(--panel,#fff)}

/* Section titles > card titles > action/body text > supporting information. */
.console-side-panels.v32-console #sharedEditor :is(.component-card-head strong,.saved-template-head,.v32-picker-info strong){font-size:var(--workspace-subtitle-size);font-weight:600;line-height:22px}
.console-side-panels.v32-console #sharedEditor :is(.v32-picker-count,.v32-roster-head small,#canvasSizeInfo,#canvasDragHint){font-size:var(--workspace-meta-size);font-weight:400;line-height:20px}
.console-side-panels.v32-console #sharedEditor .canvas-toolbar{flex-wrap:wrap}
.console-side-panels.v32-console #sharedEditor .canvas-toolbar-title{display:flex;align-items:center;gap:8px;min-width:0}
.console-side-panels.v32-console #sharedEditor .canvas-history-tools{display:flex;align-items:center;gap:2px}
.console-side-panels.v32-console #sharedEditor .canvas-history-button{display:grid;place-items:center;flex:none;width:28px;height:28px;min-height:28px;margin:0;padding:4px;border:0;border-radius:7px;background:transparent;color:#7b8794;cursor:pointer;box-shadow:none}
.console-side-panels.v32-console #sharedEditor .canvas-history-button svg{display:block;width:19px;height:19px}
.console-side-panels.v32-console #sharedEditor .canvas-history-button:hover:not(:disabled){background:#f0f2f5;color:#424f5f}
.console-side-panels.v32-console #sharedEditor .canvas-history-button:disabled{color:#bcc4ce;cursor:default}
.console-side-panels.v32-console #sharedEditor .canvas-history-button:focus-visible{outline:2px solid #7998c2;outline-offset:1px}
.console-side-panels.v32-console #sharedEditor .canvas-toolbar-meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:4px 12px;min-width:0;max-width:100%;margin-left:auto;color:var(--muted)}
.console-side-panels.v32-console #sharedEditor #canvasDragHint{min-width:0;overflow-wrap:anywhere}
.console-side-panels.v32-console #sharedEditor #canvasSizeInfo{flex:none;white-space:nowrap}
.console-side-panels.v32-console #sharedEditor :is(.tool-title-row .muted,#v32RosterHint,.saved-template-head small,.text-component-select small,.component-card-open small){font-size:var(--workspace-caption-size);font-weight:400;line-height:18px;overflow-wrap:anywhere}
.console-side-panels.v32-console #sharedEditor .field label{font-size:var(--workspace-meta-size);font-weight:550;line-height:20px}
.console-side-panels.v32-console #sharedEditor .console-compact-picker h2{white-space:nowrap}
.console-side-panels.v32-console #sharedEditor .v32-picker-tools button{min-height:34px;font-size:var(--workspace-meta-size);font-weight:500;line-height:20px}
.console-side-panels.v32-console #sharedEditor .component-choice{min-height:36px;padding:6px 8px;font-size:var(--workspace-body-size);font-weight:500;line-height:20px}
.console-side-panels.v32-console #sharedEditor .component-choice input{width:16px;height:16px}
.console-side-panels.v32-console #sharedEditor .console-picker-empty{font-size:var(--workspace-body-size);font-weight:550}
.console-side-panels.v32-console #sharedEditor .console-picker-empty b{font-weight:inherit}

/* All primary workspace actions share readable type and control geometry. */
.console-side-panels.v32-console #sharedEditor :is(.template-actions>.mini-button,.v32-roster-tools>.mini-button,.background-actions>.mini-button,.background-change-actions>.mini-button){display:inline-flex;align-items:center;justify-content:center;min-width:0;min-height:var(--workspace-action-height);height:auto;padding:8px 10px;border-radius:12px;font:inherit;font-size:var(--workspace-body-size);font-weight:550;line-height:20px;text-align:center;white-space:normal}
.console-side-panels.v32-console #sharedEditor .template-actions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:1fr;gap:8px;margin-top:12px}
.console-side-panels.v32-console #sharedEditor .template-actions>.mini-button{gap:6px;word-break:keep-all}
.console-side-panels.v32-console #sharedEditor .v32-roster-tools{gap:8px;margin-top:12px}
.console-side-panels.v32-console #sharedEditor #v32RosterResult{font-size:var(--workspace-meta-size);line-height:20px}

/* Cards grow with their contents; narrow containers choose fewer columns. */
.console-side-panels.v32-console #sharedEditor .template-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,132px),1fr));grid-auto-rows:1fr;gap:10px;max-height:none;overflow:visible;padding:0}
.console-side-panels.v32-console #sharedEditor .template-card{min-width:0;min-height:0;padding:8px;gap:8px;font-size:var(--workspace-body-size);font-weight:500;border-radius:12px}
.console-side-panels.v32-console #sharedEditor .template-card.template-action-card{display:flex;align-items:center;justify-content:center;grid-template-rows:none;margin:0;font-family:inherit;font-weight:550;line-height:22px;text-align:center;white-space:normal;word-break:keep-all;overflow-wrap:anywhere;background:#fff;color:var(--ink)}
.console-side-panels.v32-console #sharedEditor .template-card span{font-size:inherit;line-height:20px;white-space:normal;overflow-wrap:anywhere}
.saved-template-shell{position:relative;display:grid;min-width:0}
.console-side-panels.v32-console #sharedEditor .saved-template-card{width:100%;height:100%;margin:0;font-family:inherit}
.saved-template-remove{position:absolute;top:12px;right:12px;display:grid;place-items:center;width:26px;height:26px;padding:0;border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.95);color:#687485;font-family:inherit;font-size:18px;line-height:24px;cursor:pointer}
.saved-template-remove:hover{border-color:#e7baba;background:#fff4f4;color:#b33b3b}
.console-side-panels.v32-console #sharedEditor #componentOptions{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));align-items:stretch;gap:10px;width:100%;flex:0 0 auto;overflow:visible}
.console-side-panels.v32-console #sharedEditor :is(.component-edit-card,.component-add-card){box-sizing:border-box;flex:0 0 auto;min-width:0;min-height:var(--console-device-height,72px);max-height:var(--console-device-height,72px);height:var(--console-device-height,72px);padding:10px 12px;border-radius:14px}
.console-side-panels.v32-console #sharedEditor .component-card-head{height:26px;min-height:26px;margin-bottom:2px}
.console-side-panels.v32-console #sharedEditor .component-remove{width:26px;height:26px;font-size:18px;line-height:24px}
.console-side-panels.v32-console #sharedEditor :is(.text-component-select,.component-card-open){flex-direction:row;align-items:center;justify-content:space-between;min-width:0;gap:8px;padding:0;font-size:var(--workspace-body-size);line-height:22px}
.console-side-panels.v32-console #sharedEditor .text-component-select span{flex:1;min-width:0;font-size:var(--workspace-body-size);line-height:22px}
.console-side-panels.v32-console #sharedEditor :is(.text-component-select,.component-card-open) small{flex:none;white-space:nowrap}
.console-side-panels.v32-console #sharedEditor .component-add-card{flex-direction:row;gap:8px}
.console-side-panels.v32-console #sharedEditor .component-add-card span{font-size:24px;line-height:24px}
.console-side-panels.v32-console #sharedEditor .component-add-card small{font-size:var(--workspace-body-size);line-height:22px}
.console-side-panels.v32-console #sharedEditor .saved-templates{gap:8px}
.console-side-panels.v32-console #sharedEditor .saved-templates .mini-button{min-width:0;min-height:40px;padding:8px 10px;font-size:var(--workspace-body-size);font-weight:500;white-space:normal;overflow-wrap:anywhere}

/* The floating component editor uses the same scale with compact property fields. */
.console-side-panels.v32-console #componentPopover .component-popover-head strong{font-size:var(--workspace-title-size);font-weight:var(--workspace-title-weight);line-height:var(--workspace-title-height)}
.console-side-panels.v32-console #componentPopover.is-stacked{top:auto;bottom:12px;right:12px;width:min(410px,calc(100vw - 28px));max-height:min(72vh,calc(100dvh - 24px))}
.console-side-panels.v32-console #componentPopover :is(.component-card-fields label,#textEditorPanel .field label){font-size:var(--workspace-meta-size);font-weight:550;line-height:20px}
.console-side-panels.v32-console #componentPopover :is(.component-card-fields input,#textEditorPanel input:not([type=checkbox]),#textEditorPanel select,#textEditorPanel .text-editor-actions label,#textEditorPanel .mini-button){font-size:var(--workspace-body-size)}

@container template-tools (max-width:600px){.console-side-panels.v32-console #sharedEditor .template-actions{grid-template-columns:repeat(2,minmax(0,1fr))}}
@container template-tools (max-width:300px){.console-side-panels.v32-console #sharedEditor .template-actions{grid-template-columns:minmax(0,1fr)}}
.console-side-panels.v32-console #sharedEditor .roster-narrow .v32-roster-tools{grid-template-columns:1fr}
.console-side-panels.v32-console #sharedEditor .roster-narrow :is(#v32RosterEdit,#v32RosterImport){grid-column:auto;grid-row:auto}
@container composer-page (max-width:920px){.console-side-panels.v32-console #sharedEditor{grid-template-columns:minmax(0,1fr);grid-template-areas:"background" "preview" "templates" "components" "controls" "devices" "roster";grid-template-rows:repeat(7,auto)}.console-side-panels.v32-console #sharedEditor>.console-composer-sidebar{display:contents}.console-side-panels.v32-console #sharedEditor .console-composer-sidebar>.console-background-change{grid-area:background}.console-side-panels.v32-console #sharedEditor .console-composer-sidebar>.console-component-selection{grid-area:components}.console-side-panels.v32-console #sharedEditor .console-composer-sidebar>.console-compact-picker{grid-area:devices;width:min(var(--console-picker-width,406px),100%);justify-self:start}.console-side-panels.v32-console #sharedEditor .console-composer-sidebar>.advanced-tools{grid-area:controls}}

.console-side-panels #composerDevicePicker{scroll-margin-block:24px}
.console-side-panels #composerDevicePicker:focus-visible{outline:2px solid #739bc9;outline-offset:3px}
.console-side-panels #composerDevicePicker.device-selection-prompt{outline:3px solid transparent;outline-offset:3px;animation:device-selection-pulse .6s ease-in-out 2}
@keyframes device-selection-pulse{0%,100%{outline-color:transparent}50%{outline-color:#739bc9}}
.console-side-panels #batchSendBtn.needs-device{background:#a5a5a5!important;border-color:#a5a5a5!important;color:#fff;opacity:1;cursor:pointer;box-shadow:none!important}
.console-side-panels #batchSendBtn.needs-device:hover:not(:disabled){background:#929292!important;border-color:#929292!important}
.console-side-panels.v32-console .unified-targets .cloud-sync-control{display:inline-flex;flex:0 0 auto;align-items:center;gap:8px;box-sizing:border-box;height:48px;min-height:48px;margin:0;padding:0 14px;border:1px solid var(--line);border-radius:13px;background:#fff;font-family:inherit;font-size:14px;font-weight:700;line-height:1.2;white-space:nowrap}
.console-side-panels.v32-console .cloud-sync-control:has(input:disabled){color:var(--muted);cursor:default}
.console-side-panels.v32-console .unified-targets{--send-setting-width:200px;padding:12px var(--workspace-inset-x,22px)!important}
.console-side-panels.v32-console .unified-targets .batch-footer{margin-top:0;padding-top:0;border-top:0}
.console-side-panels.v32-console .unified-targets .send-settings>:is(.save-controls,.jpeg-quality-wrap,.cloud-sync-control){box-sizing:border-box;flex:0 0 var(--send-setting-width);width:var(--send-setting-width);max-width:100%}
.console-side-panels.v32-console .unified-targets .save-controls{display:grid;grid-template-columns:minmax(0,1fr) 76px;justify-content:stretch;gap:4px 6px;padding:4px 8px}
.console-side-panels.v32-console .unified-targets .save-controls .send-toggle{min-width:0;margin:0;white-space:normal}
.console-side-panels.v32-console .unified-targets .save-controls .send-toggle span{min-width:0}
.console-side-panels.v32-console .unified-targets #saveModeWrap{min-width:0}
.console-side-panels.v32-console .unified-targets #saveMode{width:100%;max-width:none;padding:0 7px}
.console-side-panels.v32-console .unified-targets #slotInputWrap{grid-column:2;min-width:0}
.console-side-panels.v32-console .unified-targets #slotInput{width:100%;max-width:none}
.console-side-panels.v32-console .unified-targets #jpegQualityBtn{width:100%}
.console-side-panels.v32-console .unified-targets .cloud-sync-control{justify-content:center}
.console-side-panels.v32-console .v32-add-card .device-discovery-status{margin:10px 0 0;font-size:14px;font-weight:400;line-height:22px;color:var(--muted);overflow-wrap:anywhere}
.console-side-panels.v32-console .v32-add-card .device-discovery-status:empty{display:none}
.console-side-panels.v32-console .v32-add-card .nearby-device-panel:has(.device-discovery-status:not(:empty)) .nearby-device-empty{display:none}
.console-side-panels.v32-console .v32-add-card .v32-device-import-hint{margin:0 0 16px;font-size:14px;line-height:22px;color:var(--muted)}
.console-side-panels.v32-console .v32-add-card [data-add-panel=csv] .v32-sample[hidden],.console-side-panels.v32-console .v32-add-card #v32CsvConfirm:disabled,.console-side-panels.v32-console .v32-add-card #v32CsvResult:empty,.console-side-panels.v32-console .v32-add-card .v32-csv-table:has(tbody:empty){display:none}
.console-side-panels.v32-console .v32-add-card #v32CsvResult{font-size:14px;line-height:22px;color:var(--muted)}
@media(prefers-reduced-motion:reduce){.console-side-panels #composerDevicePicker.device-selection-prompt{animation:none;outline-color:#739bc9}}

/* A separate draft color input keeps Cancel and Escape free of editor changes. */
.background-color-swatch{display:inline-block;flex:none;width:18px;height:18px;border:1px solid var(--line);border-radius:5px;background:#fff}
.console-action-dialog{width:min(360px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;padding:20px;border:1px solid var(--line);border-radius:18px;background:var(--panel,#fff);color:var(--ink);box-shadow:0 20px 70px #17203333}
.console-action-dialog::backdrop{background:rgba(22,29,39,.28)}
.background-color-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}
.background-color-head h2{margin:0;font-size:18px;font-weight:650;line-height:28px}
.background-color-head .icon-btn{width:32px;height:32px;flex:none;border:0;border-radius:50%;background:var(--soft);font-size:22px;font-weight:400}
.background-color-label{display:block;margin-bottom:8px;font-size:13px;font-weight:550;color:var(--muted)}
.background-color-field{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--soft)}
.background-color-field input{display:block;flex:none;width:72px;height:44px;padding:3px;border:1px solid var(--line);border-radius:8px;background:var(--panel);cursor:pointer}
.background-color-field input::-webkit-color-swatch-wrapper{padding:0}
.background-color-field input::-webkit-color-swatch{border:0;border-radius:4px}
.background-color-field output{font-size:14px;line-height:22px}
.background-color-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:20px}
.background-color-actions .button{min-height:42px;padding:8px 12px;border-radius:12px;font-size:14px;font-weight:550;line-height:20px}
.template-transfer-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.template-transfer-actions>.mini-button{min-width:0;min-height:42px;margin:0;padding:8px 10px;border-radius:12px;font:inherit;font-size:14px;font-weight:550;line-height:20px;text-align:center;word-break:keep-all}
.template-name-input{display:block;width:100%;min-width:0;height:42px;padding:8px 12px;border:1px solid var(--line);border-radius:12px;background:var(--panel,#fff);color:var(--ink);font:inherit;font-size:14px}
.template-name-label-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin-bottom:8px}
.template-name-label-row .background-color-label{margin:0}
.template-name-error{color:#b33b3b;font-size:13px;font-weight:500;line-height:20px}
.template-name-error[hidden]{display:none}
.template-name-input[aria-invalid=true]{border-color:#b33b3b!important}
.template-delete-dialog #templateDeleteMessage{margin:0;font-size:14px;line-height:22px;overflow-wrap:anywhere}
.template-delete-dialog #templateDeleteConfirm{border-color:#b33b3b!important;background:#b33b3b!important;color:#fff!important}

/* The control-page selector shares the transfer and home device-card geometry. */
.console-side-panels.v32-console{--console-device-width:360px;--console-device-height:72px;--console-picker-width:calc(var(--console-device-width) + var(--workspace-inset-x) + var(--workspace-inset-x) + 2px)}
.console-side-panels.v32-console #page-control .control-device-picker-panel{width:min(var(--console-picker-width),100%);height:auto;min-height:0;max-height:none;padding:var(--workspace-inset-y) var(--workspace-inset-x)!important;align-self:start;justify-self:start;border-radius:var(--workspace-panel-radius)}
.console-side-panels.v32-console #page-control .control-device-picker-panel .panel-head{min-height:0;min-width:0;flex-direction:row;flex-wrap:wrap;align-items:center!important;gap:8px!important;margin:0 0 8px!important}
.console-side-panels.v32-console #page-control .control-device-picker-panel h2{margin:0;font-size:var(--workspace-title-size)!important;font-weight:var(--workspace-title-weight);line-height:var(--workspace-title-height);white-space:nowrap}
.console-side-panels.v32-console #page-control .v32-picker-count{font-size:var(--workspace-meta-size);font-weight:400;line-height:20px}
.console-side-panels.v32-console #page-control .v32-picker-tools button{min-height:34px;padding:6px 10px;font-size:var(--workspace-meta-size);font-weight:500;line-height:20px}
.console-side-panels.v32-console #controlDeviceList{width:100%;max-width:var(--console-device-width)}
.console-side-panels.v32-console .console-compact-picker{--device-tile-height:var(--console-device-height)}
.console-side-panels.v32-console :is(.console-compact-picker .v32-picker-info,.my-devices-panel .v32-device-name) strong{font-size:var(--workspace-subtitle-size);font-weight:600;line-height:22px}
.console-side-panels.v32-console .v32-add-device{min-height:var(--console-device-height);height:var(--console-device-height);border-radius:12px;font-size:var(--workspace-body-size);font-weight:550;line-height:20px}
.console-side-panels.v32-console .v32-add-device b{font-weight:inherit}
.console-side-panels.v32-console .my-devices-panel{--device-tile-height:var(--console-device-height)}
.console-side-panels.v32-console .console-compact-picker.picker-narrow .v32-picker-row{grid-template-columns:18px minmax(0,1fr) 144px}
.console-side-panels.v32-console .console-compact-picker.picker-narrow .v32-picker-row>.v32-statuses{width:144px}
.console-side-panels.v32-console .console-compact-picker.picker-stacked .v32-picker-row{grid-template-columns:18px minmax(0,1fr);height:auto;min-height:var(--console-device-height)}
.console-side-panels.v32-console .console-compact-picker.picker-stacked .v32-picker-row>.v32-statuses{grid-column:1/-1;grid-row:auto;width:100%}

/* Compact batch editor: the sheet grows with the list and scrolls only when needed. */
.v32-console #v32CsvEditor[data-kind="roster"]{--roster-title-size:22px;--roster-heading-size:16px;--roster-body-size:15px;--roster-meta-size:13px;font-family:inherit;font-size:var(--roster-body-size);line-height:22px}
.v32-csv-title-line{display:flex;align-items:center;gap:10px;min-width:0}
#v32CsvFilesOpen[hidden],.v32-csv-add-row[hidden]{display:none!important}
.v32-csv-title-line #v32CsvEditorCount{font-size:var(--roster-meta-size,13px);font-weight:400;line-height:20px;white-space:nowrap;color:#8792a2}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel>.v32-csv-editor-card{
  top:20px;right:20px;bottom:auto;width:min(920px,calc(100vw - 40px));height:auto;max-height:calc(100dvh - 40px);
  padding:20px;gap:16px;border:1px solid var(--line);border-radius:20px;box-shadow:0 16px 60px #17203326;
}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .modal-head{align-items:flex-start;gap:14px;flex:none;margin:0}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .modal-head h2{margin:0;font-size:var(--roster-title-size);font-weight:650;line-height:30px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorHint{margin:4px 0 0;font-size:var(--roster-meta-size)!important;font-weight:400;line-height:20px!important;color:#8792a2}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorCollapse{min-height:36px;padding:6px 10px;border-radius:10px;font-size:var(--roster-body-size);font-weight:550;line-height:22px;box-shadow:none}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .console-side-handle{display:none}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .v32-csv-editor-tools{flex:none;gap:8px;margin:0}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .v32-csv-editor-tools>.mini-button{display:inline-flex;align-items:center;justify-content:center;min-height:40px;margin:0;padding:8px 14px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font-size:var(--roster-body-size);font-weight:550;line-height:22px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorClear{border-color:transparent;color:#7b8794}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorClear:hover{background:#fff4f4;color:#b44343}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .v32-csv-editor-scroll{flex:0 1 auto;min-height:0;max-height:none;border:0;border-radius:0;scrollbar-gutter:auto;overscroll-behavior:contain}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel table{width:100%;border:1px solid var(--line);border-radius:12px;background:#fff}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel :is(th,td){padding:8px;font-size:var(--roster-body-size);line-height:22px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel th{padding:10px 8px;background:#f7f8fa;color:#485464;font-size:var(--roster-heading-size);font-weight:600;line-height:24px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel :is(th,td):first-child{width:140px;padding-left:12px;text-align:left}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel :is(th,td):nth-child(2){width:auto}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel :is(th,td):last-child{width:44px;text-align:center}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel th:first-child{border-top-left-radius:11px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel th:last-child{border-top-right-radius:11px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel tbody tr:last-child td:first-child{border-bottom-left-radius:11px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .console-csv-device-name{font-size:var(--roster-body-size);font-weight:550;line-height:22px;overflow-wrap:anywhere}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .v32-csv-cell{height:40px;padding:8px 10px;border:1px solid #e5e9ef;border-radius:9px;background:#fff;font-family:inherit;font-size:var(--roster-body-size);font-weight:400;line-height:22px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .v32-csv-cell::placeholder{color:#a3aab4}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .v32-csv-remove{width:28px;height:28px;font-size:20px;line-height:24px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .v32-csv-add-row{position:sticky;left:0;width:100%;margin-top:10px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorAdd{display:block;width:100%;min-height:40px;padding:8px 12px;border:1px dashed #d5dce6;border-radius:10px;background:#fff;color:#566577;font-size:var(--roster-body-size);font-weight:550;line-height:22px;text-align:center}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorAdd:hover{background:#f8fafc}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel .v32-csv-editor-actions{display:flex;justify-content:flex-end;flex:none;margin:0;padding-top:14px;border-top:1px solid var(--line)}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorApply{width:180px;min-height:42px;padding:9px 18px;border-radius:11px;font-size:var(--roster-body-size);font-weight:550;line-height:22px}
.console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorStatus{font-size:var(--roster-meta-size);font-weight:400;line-height:20px}
.roster-file-dialog{width:min(380px,calc(100vw - 32px))}
.roster-file-tools,.roster-file-export{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.roster-file-export{margin-top:12px;grid-template-columns:minmax(0,1fr) auto}
.roster-file-dialog #v32CsvFilesTitle{font-family:inherit;font-size:var(--roster-title-size,22px);font-weight:650;line-height:30px}
.roster-file-dialog :is(.mini-button,select,.button){display:inline-flex;align-items:center;justify-content:center;min-width:0;min-height:40px;margin:0;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font:inherit;font-size:var(--roster-body-size,15px);font-weight:550;line-height:22px;text-align:center;text-decoration:none;box-shadow:none}
.roster-file-dialog #v32CsvEditorDownload{min-width:108px}
.roster-file-dialog #v32CsvFilesClose{font-size:22px;font-weight:400}
.roster-file-dialog :is(button,select,a):focus-visible{outline:2px solid #93b4e0;outline-offset:2px;box-shadow:none}
@media(max-width:560px){
  .console-side-panels.v32-console #v32CsvEditor.is-side-panel>.v32-csv-editor-card{top:8px;right:8px;width:calc(100vw - 16px);max-height:calc(100dvh - 16px);padding:16px;gap:14px;border-radius:18px}
  .console-side-panels.v32-console #v32CsvEditor.is-side-panel :is(th,td):first-child{width:120px;padding-left:10px}
  .console-side-panels.v32-console #v32CsvEditor.is-side-panel #v32CsvEditorApply{width:100%}
}

/* One bounded control workspace with a shared grid, type scale and control geometry. */
.console-side-panels.v32-console #page-control .control-grid{width:100%;max-width:800px;gap:16px}
.console-side-panels.v32-console #page-control .control-grid>.panel{margin:0}
.console-side-panels.v32-console #controlActionPanel{min-height:0;padding:var(--workspace-inset-y) var(--workspace-inset-x)!important;border-radius:var(--workspace-panel-radius);background:#fff}
.console-side-panels.v32-console #controlActionPanel{container-type:inline-size;container-name:device-controls;--control-columns:4;--control-gap:10px;--control-radius:10px;--control-height:40px;--control-text:14px;--control-ink:#333;--control-border:#dedede;color:var(--control-ink);font-size:var(--control-text);line-height:22px}
.console-side-panels.v32-console #controlActionPanel>.panel-head{min-height:28px;margin:0 0 12px}
.console-side-panels.v32-console #controlActionPanel>.panel-head h2{margin:0;font-size:var(--workspace-title-size);font-weight:var(--workspace-title-weight);line-height:var(--workspace-title-height)}
.console-side-panels.v32-console #controlActionPanel .control-block-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--control-gap);margin:0;filter:none;opacity:1;pointer-events:auto}
.console-side-panels.v32-console #controlActionPanel.v32-locked>:is(.panel-head,.control-block-grid){filter:none;opacity:1;pointer-events:auto;transition:none}
.console-side-panels.v32-console #controlActionPanel.control-disabled{filter:none;opacity:1}
.console-side-panels.v32-console #controlActionPanel .control-section{display:grid;gap:var(--control-gap);min-width:0;padding:12px;border:1px solid var(--control-border);border-radius:var(--control-radius);background:#fff}
.console-side-panels.v32-console #controlActionPanel h3{margin:0;font-size:var(--control-text);font-weight:600;line-height:22px;color:var(--control-ink)}
.console-side-panels.v32-console #controlActionPanel :is(.button,.slot-chip,#batteryRefreshBtn){display:inline-flex;align-items:center;justify-content:center;min-width:0;min-height:var(--control-height)!important;height:var(--control-height)!important;margin:0;padding:8px;border:1px solid var(--control-border)!important;border-radius:var(--control-radius)!important;background:#fff!important;color:var(--control-ink)!important;font-family:inherit;font-size:var(--control-text);font-weight:500;line-height:22px;box-shadow:none!important;white-space:normal;overflow-wrap:anywhere}
.console-side-panels.v32-console #controlActionPanel :is(.button,.slot-chip):hover:not(:disabled){background:#f7f8fa!important;border-color:#aab4c0!important}
.console-side-panels.v32-console #controlActionPanel :is(.button,.slot-chip,#batteryRefreshBtn,input,select):disabled{background:#fff!important;color:#89929d!important;filter:none;opacity:1!important}
.console-side-panels.v32-console #controlActionPanel :is(.control-brightness-row,.control-primary-actions,.control-image-actions){display:grid;grid-template-columns:repeat(var(--control-columns),minmax(0,1fr));gap:var(--control-gap);align-items:center}
.console-side-panels.v32-console #controlActionPanel .control-brightness-field{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px;min-width:0;height:var(--control-height)}
.console-side-panels.v32-console #controlActionPanel .control-brightness-row input{width:100%;min-width:0;max-width:200px;accent-color:#606b79!important}
.console-side-panels.v32-console #controlActionPanel .control-brightness-row strong{text-align:center;font-size:var(--control-text);font-weight:500}
.console-side-panels.v32-console #controlActionPanel #brightnessBtn{grid-column:2;justify-self:stretch;width:100%;min-width:0}
.console-side-panels.v32-console #controlActionPanel .control-display-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--control-gap);font-size:var(--control-text);line-height:22px}
.console-side-panels.v32-console #controlActionPanel .control-display-head label{display:flex;align-items:center;gap:var(--control-gap)}
.console-side-panels.v32-console #controlActionPanel .control-display-head strong{font-weight:500}
.console-side-panels.v32-console #controlActionPanel .control-display-switch label{font-size:var(--control-text);font-weight:400}
.console-side-panels.v32-console #controlActionPanel .control-position-field{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:center;gap:2px;min-width:0;height:var(--control-height);padding:6px 8px;border:1px solid var(--control-border);border-radius:var(--control-radius);background:#fff;line-height:20px;color:var(--control-ink)}
.console-side-panels.v32-console #controlActionPanel .control-position-field:has(select:disabled){color:#89929d}
.console-side-panels.v32-console #controlActionPanel .control-position-field span{min-width:0;white-space:nowrap}
.console-side-panels.v32-console #controlActionPanel #displaySlotInput{box-sizing:border-box;width:100%;min-width:0;height:26px;min-height:0;padding:0!important;border:0!important;border-radius:0!important;box-shadow:none!important;background:#fff!important;font-size:var(--control-text);color:var(--control-ink);text-align:left;text-align-last:left}
.console-side-panels.v32-console #controlActionPanel .saved-slot-wrap{display:flex;flex-wrap:wrap;align-items:center;gap:var(--control-gap);margin:0}
.console-side-panels.v32-console #controlActionPanel .mini-label{font-size:var(--control-text);color:var(--control-ink);font-weight:400}
.console-side-panels.v32-console #controlActionPanel .slot-chips{display:flex;flex-wrap:wrap;gap:var(--control-gap);margin:0}
.console-side-panels.v32-console #controlActionPanel .slot-chip{width:48px;padding:8px}
.console-side-panels.v32-console #controlActionPanel .info-grid{display:grid;grid-template-columns:repeat(var(--control-columns),minmax(0,1fr));gap:var(--control-gap);margin:0}
.console-side-panels.v32-console #controlActionPanel .info-grid>div{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;min-width:0;padding:0;border:0;background:#fff;border-radius:0}
.console-side-panels.v32-console #controlActionPanel .info-grid>div:nth-child(odd){grid-column:1/span 2}
.console-side-panels.v32-console #controlActionPanel .info-grid>div:nth-child(even){grid-column:3/span 2}
.console-side-panels.v32-console #controlActionPanel .info-grid>div:nth-child(-n+2){grid-row:1}
.console-side-panels.v32-console #controlActionPanel .info-grid>div:nth-child(n+3){grid-row:2}
.console-side-panels.v32-console #controlActionPanel .info-grid :is(span,strong){margin:0;font-size:var(--control-text);font-weight:400;line-height:22px;color:var(--control-ink);white-space:normal;overflow-wrap:anywhere}
.console-side-panels.v32-console #controlActionPanel.control-disabled #batteryRefreshBtn{display:none}
@container device-controls (max-width:560px){.console-side-panels.v32-console #controlActionPanel :is(.control-brightness-row,.control-primary-actions,.control-image-actions,.info-grid){--control-columns:2}.console-side-panels.v32-console #controlActionPanel .info-grid>div:nth-child(odd){grid-column:1}.console-side-panels.v32-console #controlActionPanel .info-grid>div:nth-child(even){grid-column:2}}
@container device-controls (max-width:260px){.console-side-panels.v32-console #controlActionPanel .info-grid{grid-template-columns:minmax(0,1fr)}.console-side-panels.v32-console #controlActionPanel .info-grid>div:nth-child(n){grid-column:1;grid-row:auto}.console-side-panels.v32-console #controlActionPanel :is(.control-primary-actions,.control-image-actions)>:is(.button,#batteryRefreshBtn){height:60px!important}.console-side-panels.v32-console #controlActionPanel .control-position-field{height:60px;grid-template-columns:minmax(0,1fr);grid-template-rows:20px 24px;gap:0}}
.cloud-firmware-dialog{width:min(500px,calc(100vw - 32px))}
.cloud-firmware-note{margin:0 0 12px;color:var(--muted);font-size:14px;line-height:22px}
.cloud-firmware-list{display:grid;gap:8px;max-height:40vh;overflow:auto}
.cloud-firmware-row{display:grid;gap:4px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:14px;line-height:22px}
.cloud-firmware-row strong{font-weight:600;overflow-wrap:anywhere}
.cloud-firmware-row small{font-size:13px;line-height:20px;color:var(--muted);overflow-wrap:anywhere}
.cloud-firmware-version{display:flex;justify-content:space-between;gap:12px;min-width:0}
.cloud-firmware-version span:last-child{overflow-wrap:anywhere;text-align:right}
.cloud-firmware-actions button:disabled{background:#f5f5f5;color:#999;cursor:not-allowed;opacity:1}
.cloud-firmware-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:16px}
.cloud-firmware-actions button{min-height:40px;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font:inherit;font-size:14px}

/* Keep the complete sign-in card reachable in short and narrow windows. */
#loginOverlay{display:flex;flex-direction:column;align-items:center;overflow:auto;overscroll-behavior:contain;padding:20px;background:#f3f4f6!important}
#loginOverlay.hidden{display:none!important}
#loginOverlay .login-card{flex:none;width:min(420px,100%);max-width:420px!important;margin:auto;padding:20px 28px 28px;border:1px solid #e2e5e9;border-radius:18px;background:#fff;box-shadow:0 12px 40px #1725360b}
#loginOverlay .login-language{display:flex;justify-content:flex-end;margin-bottom:14px}
.login-language-control{position:relative;gap:7px;cursor:pointer}
.login-language-control .ui-icon{width:17px;height:17px;flex:none}
.login-language-control select{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
.login-language-control:focus-within{outline:2px solid #65758c;outline-offset:2px}
#loginOverlay h1{margin:0;font-size:24px!important;line-height:34px;font-weight:650}
#loginOverlay .qrbox{width:min(224px,100%);height:auto;aspect-ratio:1;margin:20px auto 14px;padding:10px;border:1px solid #e2e5e9!important;border-radius:12px!important;background:#fff}
#loginOverlay .qr-cover{background:#fff}
#loginOverlay .qr-refresh{flex-direction:row;gap:7px;width:auto;height:40px;min-height:40px;padding:8px 12px;border:1px solid #dce0e5;border-radius:9px;background:#fff;color:#444;box-shadow:none;font-size:13px}
#loginOverlay .qr-refresh .ui-icon{width:18px;height:18px}
#loginOverlay .qr-refresh span{display:inline}
#loginOverlay #loginTip{display:block;font-size:14px;font-weight:500;line-height:22px;color:#555}
#loginOverlay #loginMode:empty,#loginOverlay #loginError:empty{display:none}
#loginOverlay #loginError{margin:8px 0 0;font-size:13px!important;line-height:20px;overflow-wrap:anywhere}
.login-actions{display:grid;gap:10px;margin-top:22px}
#loginOverlay :is(.login-language-control,#localModeBtn,.login-download){display:flex;align-items:center;justify-content:center;min-height:44px!important;height:auto;margin:0!important;padding:10px 12px!important;border:1px solid #dce0e5!important;border-radius:10px!important;background:#fff!important;color:#222!important;font-family:inherit;font-size:14px!important;font-weight:550!important;line-height:22px!important;text-decoration:none;box-shadow:none!important;transform:none}
#loginOverlay .login-actions :is(#localModeBtn,.login-download){width:100%}
#loginOverlay :is(.login-language-control,#localModeBtn,.login-download):hover{background:#f7f8fa!important;border-color:#aab4c0!important}
@media(max-width:420px){#loginOverlay{padding:12px}#loginOverlay .login-card{padding:16px 20px 20px}}
@media(max-height:600px){#loginOverlay .login-language{margin-bottom:8px}#loginOverlay .qrbox{width:min(184px,100%);margin-top:14px}.login-actions{margin-top:16px}}

/* The transfer workspace is the type reference for all four console pages. */
.console-side-panels.v32-console{
  --console-font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  --console-page-size:25px;--console-page-weight:650;--console-page-line:32.5px;
  --workspace-title-size:18px;--workspace-title-weight:650;--workspace-title-height:28px;
  --workspace-subtitle-size:15px;--workspace-subtitle-weight:600;--workspace-subtitle-line:22px;
  --workspace-body-size:14px;--workspace-body-line:22px;
  --workspace-action-weight:550;--workspace-action-line:20px;
  --workspace-meta-size:13px;--workspace-meta-line:20px;
  --workspace-caption-size:12px;--workspace-caption-line:18px;
}
.console-side-panels.v32-console :is(#pageTitle,#page-dashboard,#page-control,#page-composer,#page-settings){font-family:var(--console-font-family)}
.console-side-panels.v32-console #pageTitle{font-size:var(--console-page-size)!important;font-weight:var(--console-page-weight)!important;line-height:var(--console-page-line)!important}
.console-side-panels.v32-console :is(#page-dashboard,#page-control,#page-settings){font-size:var(--workspace-body-size);line-height:var(--workspace-body-line)}

/* Section titles align with Templates, Preview, Components and Batch content. */
.console-side-panels.v32-console :is(#page-dashboard,#page-control,#page-settings) h2{font-size:var(--workspace-title-size)!important;font-weight:var(--workspace-title-weight)!important;line-height:var(--workspace-title-height)!important}
.console-side-panels.v32-console :is(#page-dashboard,#page-control,#page-settings) h3{font-size:var(--workspace-subtitle-size)!important;font-weight:var(--workspace-subtitle-weight)!important;line-height:var(--workspace-subtitle-line)!important}
.console-side-panels.v32-console :is(#page-dashboard .v32-device-name,#page-control .v32-picker-info,#sharedEditor .v32-picker-info) strong{font-size:var(--workspace-subtitle-size)!important;font-weight:var(--workspace-subtitle-weight)!important;line-height:var(--workspace-subtitle-line)!important}

/* Action/body text follows the transfer controls, without touching icon-only buttons. */
.console-side-panels.v32-console :is(#page-dashboard,#page-control,#page-settings) :is(.button,.mini-button,.compact-action,.nearby-add-btn,.segmented button){font-family:inherit;font-size:var(--workspace-body-size)!important;font-weight:var(--workspace-action-weight)!important;line-height:var(--workspace-action-line)!important}
.console-side-panels.v32-console :is(#page-dashboard,#page-control,#page-settings) :is(.manual-add input,.workspace-picker-wrap select,#settingsLanguage button){font-family:inherit;font-size:var(--workspace-body-size)!important;line-height:20px!important}
.console-side-panels.v32-console #controlActionPanel{--control-text:var(--workspace-body-size)}
.console-side-panels.v32-console #page-control :is(.control-display-switch label,#displaySlotInput,.info-grid span,.info-grid strong,.control-brightness-row strong){font-family:inherit;font-size:var(--workspace-body-size)!important;font-weight:var(--workspace-action-weight)!important;line-height:var(--workspace-action-line)!important}
.console-side-panels.v32-console :is(#page-dashboard,#page-control,#page-settings) .v32-add-device{font-size:var(--workspace-body-size)!important;font-weight:550!important;line-height:20px!important}

/* Secondary descriptions and dense identifiers retain the transfer page's smaller tiers. */
.console-side-panels.v32-console :is(#deviceSummary,#page-dashboard .device-discovery-status,#page-dashboard .workspace-picker-wrap>label,#page-settings .settings-row p,#page-settings .muted,#page-control .v32-picker-count){font-size:var(--workspace-meta-size)!important;font-weight:400;line-height:var(--workspace-meta-line)!important}
.console-side-panels.v32-console :is(#page-dashboard .v32-device-name,#page-control .v32-picker-info,#sharedEditor .v32-picker-info) small{font-size:var(--workspace-caption-size)!important;font-weight:400;line-height:var(--workspace-caption-line)!important}
.console-side-panels.v32-console #page-control .v32-picker-tools button{font-size:var(--workspace-meta-size)!important;font-weight:500;line-height:var(--workspace-meta-line)!important}
.console-side-panels.v32-console #page-settings .settings-row{flex-wrap:wrap;gap:12px}
.console-side-panels.v32-console #settingsLanguage{max-width:100%;flex-wrap:wrap}

.ly32-root{--guide-title:23px;--guide-body:15px;--guide-note:12px;position:fixed;inset:0;z-index:100000;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;color:#2b3645;line-height:1.55;pointer-events:none}.ly32-root *{box-sizing:border-box}.ly32-root button,.ly32-root select{font-family:inherit;font-size:var(--guide-body);cursor:pointer;line-height:1.35}.ly32-root button:focus-visible,.ly32-root select:focus-visible{outline:3px solid #8aaddb;outline-offset:3px}.ly32-modal{display:flex;align-items:center;justify-content:center;padding:24px}.ly32-backdrop{position:absolute;inset:0;background:#23324766;backdrop-filter:blur(2px);pointer-events:auto}.ly32-card{position:relative;width:min(710px,100%);max-height:calc(100dvh - 48px);overflow:auto;background:#fff;border:1px solid #e1e7ef;border-radius:22px;box-shadow:0 24px 100px #20344e30;pointer-events:auto;animation:ly32-in .16s ease-out}.ly32-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:15px 22px 9px;font-size:var(--guide-body)}.ly32-head strong{font-size:var(--guide-body);font-weight:650;white-space:nowrap}.ly32-head strong span{font-weight:400;color:#97a3b3;margin-left:6px}.ly32-head>div{display:flex;align-items:center;gap:7px}.ly32-head button,.ly32-head select{border:0;background:#f3f5f8;color:#647286;border-radius:20px;padding:7px 11px;font-size:var(--guide-note);font-weight:600;min-height:32px}.ly32-head select{max-width:120px}.ly32-head .ly32-close{font-size:23px;line-height:1;width:32px;padding:3px}.ly32-progress{display:flex;gap:7px;padding:0 22px 10px}.ly32-progress i{flex:1;height:3px;border-radius:4px;background:#edf0f4}.ly32-progress i.done{background:#526479}.ly32-body{padding:16px 24px 22px}.ly32-root h2{font-size:var(--guide-title);line-height:1.4;margin:0 0 14px;font-weight:700}.ly32-root h3{font-size:var(--guide-body);margin:17px 0 10px;font-weight:700}.ly32-body p{font-size:var(--guide-body);color:#7e8a9b;margin:10px 0}.ly32-buttons{display:flex;justify-content:space-between;gap:14px;padding:14px 22px;border-top:1px solid #edf0f3}.ly32-buttons>button{flex:1;min-height:46px;border-radius:12px;border:0;font-weight:650;padding:12px 16px}.ly32-primary{background:#455568;color:#fff;border:1px solid #455568;border-radius:12px;padding:14px 18px;font-weight:650}.ly32-secondary{background:#f1f4f8;color:#67768a;border:1px solid #e5eaf1;border-radius:12px;padding:14px 18px;font-weight:650}.ly32-link{border:0;background:none;color:#8895a7}.ly32-capability{display:flex;gap:14px;margin:24px 0 2px}.ly32-capability>button{flex:1;min-height:54px}.ly32-diagram{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:24px;background:#f7f9fc;border:1px solid #e3eaf3;border-radius:16px}.ly32-end{display:flex;flex-direction:column;align-items:center;gap:12px;flex:1;min-width:0;font-size:var(--guide-body)}.ly32-end svg{width:80px;height:54px;color:#52647e}.ly32-arrow{color:#a6b6c9;font-size:26px}.ly32-methods{display:flex;flex-direction:column;gap:8px;flex:1.3;text-align:center}.ly32-methods>div{background:#fff;border:1px solid #dce5f1;border-radius:10px;padding:8px 10px;font-size:var(--guide-body);font-weight:650;white-space:nowrap}.ly32-methods small{font-size:var(--guide-note);color:#8f9db0}.ly32-root i.ble{background:#3b82f6}.ly32-root i.lan{background:#eab308}.ly32-root i.cloud{background:#22c55e}.ly32-methods i,.ly32-table i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:8px;vertical-align:1px}.ly32-table{width:100%;border-collapse:separate;border-spacing:0 7px;font-size:var(--guide-body);table-layout:fixed}.ly32-table th{color:#8996a7;font-weight:600;padding:3px 12px;text-align:left;font-size:var(--guide-body)}.ly32-table th:nth-child(2),.ly32-table td:nth-child(2){text-align:center}.ly32-table th:last-child,.ly32-table td:last-child{text-align:right}.ly32-table td{padding:12px;background:#f8fafc;border-top:1px solid #e4eaf2;border-bottom:1px solid #e4eaf2;white-space:nowrap}.ly32-table td:first-child{border-left:1px solid #e4eaf2;border-radius:11px 0 0 11px}.ly32-table td:last-child{border-right:1px solid #e4eaf2;border-radius:0 11px 11px 0}.ly32-hardware{position:relative;margin:24px 0 36px;padding-top:38px;min-height:235px}.ly32-labels{position:absolute;left:4%;right:4%;top:0;height:30px;display:flex;align-items:center;color:#697a91;font-size:var(--guide-body)}.ly32-labels span{position:absolute;transform:translateX(-50%);white-space:nowrap}.ly32-labels span:nth-child(1){left:16.1%}.ly32-labels span:nth-child(2){left:36%}.ly32-labels span:nth-child(3){left:56.5%}.ly32-labels span:nth-child(4){left:84.5%}.ly32-controls{position:relative;margin:0 4%;height:145px;overflow:visible}.ly32-controls>img{position:absolute;width:100%;height:auto;left:0;bottom:0;clip-path:inset(35% 0 0 0)}.ly32-side-outline{position:absolute;left:-8px;top:-8px;width:calc(100% + 16px);height:calc(100% + 8px);overflow:visible;pointer-events:none}.ly32-side-outline path{fill:none;stroke:#9ca8b7;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.ly32-hold-hand{position:absolute;top:104px;width:40px;height:58px;filter:drop-shadow(0 3px 3px #324c6a35)}.ly32-hold-hand.key1{left:15.8%}.ly32-hold-hand.key2{left:53%}.ly32-hold-hand strong{position:absolute;top:22px;left:46px;white-space:nowrap;padding:8px 12px;background:#f3f6fb;border-radius:10px;font-size:var(--guide-body);overflow:hidden;color:#607994}.ly32-hold-hand strong i{position:absolute;height:3px;left:0;bottom:0;background:#87a8d2;animation:ly32-hold linear infinite}.ly32-root .ly32-instruction{padding:15px 17px;background:#f4f6f9;border-radius:12px;font-weight:650;color:#52657e}.ly32-connected{display:inline-flex;align-items:center;padding:7px 12px;background:#eff6ff;color:#1d4ed8;border-radius:20px;font-size:var(--guide-body);margin-bottom:18px}.ly32-qr{display:flex;justify-content:center;margin:20px 0}.ly32-qr img{width:220px;height:220px;object-fit:contain;border:1px solid #e7ebf1;border-radius:16px;padding:10px}.ly32-phone-note{background:#f5f7fa;padding:14px;border-radius:12px}.ly32-success{margin:0 auto 20px;width:60px;height:60px;border-radius:50%;background:#edf7f1;color:#549874;font-size:32px;display:grid;place-items:center}.ly32-result-image{display:block;width:min(100%,400px);aspect-ratio:1024/600;object-fit:cover;margin:20px auto 0;border-radius:12px}.ly32-live .ly32-top,.ly32-live .ly32-bottom{position:fixed;left:calc(var(--sidebar,224px) + 22px);right:22px;background:#fff;border:1px solid #e3e9f1;border-radius:17px;box-shadow:0 5px 20px #25374c12;pointer-events:auto;z-index:4}.ly32-top{top:14px}.ly32-top .ly32-head{padding:9px 16px 5px}.ly32-top .ly32-progress{padding:0 16px 8px}.ly32-demo-label{position:absolute;right:0;bottom:-22px;color:#738298;font-size:11px;padding:0 10px;background:#f3f5f7ee;border-radius:0 0 8px 8px}.ly32-bottom{bottom:18px}.ly32-bottom>p{display:flex;gap:13px;align-items:baseline;font-size:var(--guide-body);font-weight:650;margin:0;padding:14px 18px}.ly32-bottom>p>b{color:#6a86ad;min-width:28px}.ly32-bottom .ly32-buttons{padding:9px 12px;gap:12px}.ly32-bottom .ly32-buttons>button{min-height:39px;padding:10px}.ly32-focus{position:fixed;border:2px solid #9db9df;border-radius:13px;background:transparent;padding:0;box-shadow:0 0 0 3000px #26364c24,0 0 0 5px #a9c3e42e;z-index:2;transition:left .2s ease,top .2s ease,width .2s ease,height .2s ease;pointer-events:auto;cursor:pointer}.ly32-hand{position:fixed;width:40px;height:58px;z-index:3;pointer-events:none;filter:drop-shadow(0 2px 3px #243b5b50);transition:left .2s ease,top .2s ease}.ly32-live .ly32-focus[hidden],.ly32-live .ly32-hand[hidden]{display:none}.ly32-guiding .main-content{scroll-padding-top:110px;scroll-padding-bottom:190px}.ly32-guiding .modal-card{scroll-padding-top:80px;scroll-padding-bottom:180px}.ly32-top *,.ly32-bottom *{pointer-events:auto}.ly32-root button:disabled{opacity:.55;cursor:default}
@keyframes ly32-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes ly32-hold{from{width:0}to{width:100%}}
@media(max-width:800px){.ly32-live .ly32-top,.ly32-live .ly32-bottom{left:12px;right:12px}.ly32-root{--guide-title:20px;--guide-body:14px}.ly32-diagram{padding:15px;gap:10px}.ly32-end svg{width:56px}.ly32-table td,.ly32-table th{padding:9px 6px;font-size:12px}.ly32-card{max-height:calc(100dvh - 24px)}.ly32-modal{padding:12px}.ly32-hardware{min-height:190px}.ly32-controls{height:115px}.ly32-hold-hand{top:81px}.ly32-labels{font-size:12px}.ly32-head{padding:12px 16px 8px}.ly32-head button,.ly32-head select{padding:6px 8px;font-size:11px}.ly32-body{padding:14px 17px 18px}.ly32-capability{flex-direction:column}.ly32-top .ly32-head strong{font-size:12px}.ly32-top .ly32-head button[data-guide-restart]{font-size:0}.ly32-top .ly32-head button[data-guide-restart]:first-letter{font-size:15px}}
@media(prefers-reduced-motion:reduce){.ly32-card,.ly32-hold-hand i{animation:none}.ly32-focus,.ly32-hand{transition:none}}

.ly32-language{position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:32px;padding:6px 11px;background:#f3f5f8;border-radius:20px;color:#647286;font-size:12px;font-weight:600;white-space:nowrap}.ly32-language select{position:absolute;inset:0;opacity:0;width:100%;max-width:none;cursor:pointer}.ly32-root .ly32-hardware{min-height:210px;margin-bottom:18px}

.ly32-language>span{display:flex;align-items:center;gap:6px}.ly32-language svg{width:15px;height:15px}.ly32-guiding .main-content{padding-bottom:260px!important}.ly32-hand.low{transform:rotate(-55deg);transform-origin:18px 0}
.ly32-live .ly32-focus{transition:width .2s ease,height .2s ease}
.ly32-live .ly32-following{transition:none!important}

.ly32-phone-note>p{margin:0}.ly32-phone-note>p+p{margin-top:8px}.ly32-phone-note strong{color:#52657e}
@media(max-height:760px){.ly32-root .ly32-qr{margin:16px 0}.ly32-root .ly32-qr img{width:192px;height:192px}}

.ly32-preview .ly32-hand{display:none!important}
.ly32-preview .ly32-focus{pointer-events:none}
.ly32-preview .ly32-focus.ly32-preview-ready{border-width:4px;animation:ly32-background-ready .8s ease-in-out 2 both}
@keyframes ly32-background-ready{0%,100%{border-color:transparent;box-shadow:0 0 0 3000px #26364c66,0 0 0 0 #60a5fa00}25%,65%{border-color:#2563eb;box-shadow:0 0 0 3000px #26364c66,0 0 0 7px #60a5fa99}}
@media(prefers-reduced-motion:reduce){.ly32-preview .ly32-focus.ly32-preview-ready{animation:none;border-color:#2563eb;box-shadow:0 0 0 3000px #26364c66,0 0 0 5px #60a5fa66}}

/* Keep the connection overview readable without spending a screen on padding. */
.ly32-body .ly32-bluetooth-result{margin:14px 0 0;padding:12px 14px;border:1px solid #e2e8f0;border-radius:12px;background:#f5f7fa;color:#647286;font-size:var(--guide-body)}
.ly32-body .ly32-bluetooth-result[data-state="available"]{border-color:#b7d8c4;background:#f0f8f3;color:#35764d}
.ly32-bluetooth-result[hidden]{display:none}
.ly32-live .ly32-status-highlight{cursor:default;box-shadow:0 0 0 4px #a9c3e42e;opacity:0;animation:ly32-status-blink .65s ease-in-out 2}
@keyframes ly32-status-blink{0%,100%{opacity:0}25%,60%{opacity:1}}
@media(prefers-reduced-motion:reduce){.ly32-live .ly32-status-highlight{animation:none;opacity:1}}
.ly32-intro{display:flex;flex-direction:column;overflow:hidden}
.ly32-intro>.ly32-head,.ly32-intro>.ly32-progress,.ly32-intro>.ly32-buttons{flex-shrink:0}
.ly32-intro .ly32-body{min-height:0;overflow-y:auto;overscroll-behavior:contain;padding-block:12px 16px}
.ly32-intro h2{margin-bottom:12px}
.ly32-intro .ly32-diagram{padding:16px 20px;gap:16px}
.ly32-intro .ly32-methods{gap:6px}
.ly32-intro .ly32-methods>div{padding:4px 10px}
.ly32-intro h3{margin:14px 0 6px}
.ly32-intro .ly32-table{border-spacing:0 5px}
.ly32-intro .ly32-table td{padding:8px 12px}
.ly32-intro>.ly32-buttons{padding-block:10px}
@media(max-height:700px){
  .ly32-intro>.ly32-head{padding-block:12px 7px}
  .ly32-intro>.ly32-progress{padding-bottom:8px}
  .ly32-intro .ly32-body{padding-block:8px 12px}
  .ly32-intro .ly32-diagram{padding:10px 18px}
  .ly32-intro .ly32-methods{gap:4px}
  .ly32-intro .ly32-methods>div{padding-block:3px}
  .ly32-intro h3{margin:12px 0 4px}
  .ly32-intro .ly32-table td{padding-block:6px}
}
@media(max-width:800px){
  .ly32-intro .ly32-diagram{gap:10px;padding-inline:12px}
  .ly32-intro .ly32-table td{padding-inline:6px}
}
