:root{font-family:Inter,Segoe UI,Arial,sans-serif;color:#242a2e;background:#f6f7f8;font-synthesis:none;--muted:#778087;--line:#e3e7e9;--green:#94f064;--dark:#151b1e}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{ -webkit-tap-highlight-color:transparent}button{cursor:pointer;border:1px solid #dce1e3;background:white;color:#263036;border-radius:7px;padding:11px 16px;font-size:13px;font-weight:600;transition:background .15s}button:hover{background:#edf1f2}button:disabled{opacity:.6;cursor:wait}button.primary{background:var(--green);border-color:var(--green);color:#142017}button.primary:hover{background:#a5f77f}a{color:inherit;text-decoration:none}a:hover{color:#42802b}.app{display:flex;min-height:100vh}aside{width:238px;background:#101719;color:#c2c9cb;position:fixed;inset:0 auto 0 0;padding:30px 20px;display:flex;flex-direction:column;border-right:1px solid #252e30}.brand{display:flex;align-items:center;gap:10px;color:#fff;font-size:23px;font-weight:700;letter-spacing:-.8px;margin-bottom:48px}.brand:hover{color:white}.brand-icon{font-size:29px;position:relative;width:36px;height:38px;border:2px solid var(--green);border-radius:10px;color:var(--green);line-height:34px;text-align:center}.brand-icon span{font-size:16px;position:absolute;right:-4px;top:-9px;background:#101719}.brand small{display:block;font-size:8px;letter-spacing:1.5px;font-weight:500;color:#8e9a9e;margin-top:6px}.section-label{font-size:9px;letter-spacing:1.7px;color:#6d7a7e;margin:0 13px 14px;font-weight:600}nav .section-label{margin-top:32px}nav a{display:flex;gap:12px;align-items:center;font-size:12px;padding:13px 12px;margin-bottom:5px;border-radius:6px;line-height:1.4}nav a:hover{background:#1c272a;color:#fff}nav a.active{background:#24322a;color:var(--green)}nav a b{margin-left:auto;background:#3a4c3e;border-radius:4px;padding:1px 5px;font-size:10px}.nav-name{flex:1}.nav-dot{width:6px;height:6px;background:#657175;flex-shrink:0;border-radius:50%}.nav-dot.on{background:var(--green)}nav small{font-size:8px;letter-spacing:.6px;color:#6f7f84}.aside-bottom{margin-top:auto;font-size:11px;color:#b5c1c5;padding:24px 10px 0}.aside-bottom small{display:block;font-size:9px;color:#6f7f84;margin-top:10px;line-height:1.8}.local-dot{display:inline-block;border-radius:50%;width:6px;height:6px;background:#83c656;margin-right:7px}.app>main{margin-left:238px;flex:1;min-width:0}header{height:80px;padding:0 42px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;background:#fff}.breadcrumb{font-size:10px;letter-spacing:1px;color:#748087}.breadcrumb span{letter-spacing:0;margin-left:15px}.breadcrumb span:last-child{color:#29343a;font-size:12px}.header-right{display:flex;align-items:center;gap:21px;font-size:12px;color:#748087}.avatar{background:#ebefed;color:#536959;border-radius:50%;width:32px;height:32px;display:grid;place-items:center;font-weight:600;font-size:10px}#content{padding:38px 42px 24px;max-width:1720px;margin:auto}.page-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:28px;gap:20px}.eyebrow{font-size:9px;letter-spacing:2px;color:#78848a;font-weight:600;margin-bottom:9px}h1{font-size:32px;letter-spacing:-1.1px;font-weight:650;margin:0 0 9px;line-height:1.2}.heading-dot{color:#70ae4d;margin-left:2px}.page-heading p{margin:0;font-size:12px;color:var(--muted);line-height:1.8}.page-actions{display:flex;gap:9px}.summary{background:white;border:1px solid var(--line);border-radius:9px;display:grid;grid-template-columns:repeat(3,1fr) 1.1fr;padding:23px 25px;margin-bottom:30px}.summary>div{display:flex;gap:16px;align-items:center;padding-left:24px;border-left:1px solid var(--line)}.summary>div:first-child{padding-left:0;border:0}.summary-icon{color:#858e93;font-size:24px}.summary-icon.green{color:#81bc60;font-size:18px}.summary small{font-size:8px;letter-spacing:1px;color:#899197;display:block;margin-bottom:6px}.summary b{font-size:23px;font-weight:600;letter-spacing:-.6px}.summary b span{font-size:11px;letter-spacing:0;font-weight:400;color:#949ca1;margin-left:5px}.summary .summary-note{display:block;align-content:center;font-size:11px;color:#607568}.summary-note small{letter-spacing:0;margin-top:9px;margin-bottom:0;margin-left:13px;font-size:10px;color:#949ca1}.grid-label{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;font-size:9px;letter-spacing:1.5px;color:#7f8b90}.grid-label>span:first-child{color:#48545b;font-weight:600}.grid-label b{font-size:8px;background:#e7ebed;padding:3px 5px;border-radius:3px;margin-left:6px}.camera-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.tile{background:#fff;border:1px solid #e0e5e7;border-radius:10px;overflow:hidden;box-shadow:0 2px 4px #00000002}.tile-heading{display:flex;align-items:center;gap:11px;padding:18px 20px}.machine-number{border:1px solid #e4e8ea;background:#f9fafb;border-radius:7px;width:34px;height:36px;display:grid;place-items:center;font-size:11px;color:#8e989f;flex-shrink:0}.tile-heading a{font-size:12px;font-weight:650;display:block}.tile-heading a span{color:#b2bbbf;margin-left:6px;font-size:13px}.tile-heading small{font-size:8px;letter-spacing:1px;color:#929ba0;display:block;margin-top:6px}.badge{margin-left:auto;font-size:9px;background:#f1f3f4;color:#879299;padding:5px 8px;border-radius:4px;white-space:nowrap}.badge.online{color:#3c7229;background:#e8f5e1}.camera{position:relative;aspect-ratio:16/8.5;background:radial-gradient(ellipse at 50% 60%,#212c30,#141c20);color:#a1b0b8;overflow:hidden}.camera:before{content:'';position:absolute;inset:0;opacity:.18;background-image:linear-gradient(#60717622 1px,transparent 1px),linear-gradient(90deg,#60717622 1px,transparent 1px);background-size:26px 26px}.cam-top{position:absolute;left:16px;right:16px;top:13px;display:flex;align-items:center;justify-content:space-between;font-size:8px;letter-spacing:.4px;z-index:2;pointer-events:none}.cam-label{background:#0e1519b0;padding:5px 7px;border:1px solid #ffffff14;border-radius:3px;letter-spacing:1.1px;color:#82939d}.camera-empty{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:30px 15px 10px}.camera-empty[hidden]{display:none}.camera-glyph{font-size:28px;color:#6d858c;line-height:1;margin-bottom:12px}.camera-empty strong{font-size:12px;font-weight:500;color:#a7b8bf}.camera-empty p{font-size:10px;color:#6e838d;margin:8px 0 13px;line-height:1.6;max-width:320px}.camera-empty button{background:#29353b;border:1px solid #3a494f;font-size:10px;color:#b5c6cd;border-radius:5px;padding:7px 11px}.camera-empty button:hover{background:#36484e}.camera-empty button span{margin-left:10px}.camera img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}.job{padding:17px 20px 15px}.job-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:11px}.job-top>span{font-size:11px;color:#7f8b93;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.job-top b{font-size:18px;font-weight:500}.job-top b small{font-size:11px;color:#89959c}.progress{height:4px;border-radius:2px;background:#edf0f1;overflow:hidden}.progress i{display:block;height:100%;background:#8ac461;transition:width .4s}.job-bottom{display:flex;justify-content:space-between;font-size:9px;color:#98a0a5;margin-top:9px}.tile-metrics{padding:14px 20px;border-top:1px solid #edf0f2;display:grid;grid-template-columns:1fr 1fr 1.2fr}.tile-metrics>div+div{border-left:1px solid #edf0f2;padding-left:22px}.tile-metrics small{display:block;font-size:8px;letter-spacing:1px;color:#939da3;margin-bottom:6px}.tile-metrics b{font-size:13px;font-weight:500;color:#637077}.tile-metrics b span{font-size:10px;color:#9aa3a8}.bottom-note{display:flex;gap:15px;padding:25px 2px 0;color:#7d8b91}.bottom-note>span{font-size:25px;color:#7ea46a}.bottom-note b{font-size:11px;color:#65767e;font-weight:500}.bottom-note p{font-size:10px;line-height:1.8;margin:6px 0}.bottom-note a{color:#5e8547}footer{max-width:1720px;margin:0 auto;padding:20px 42px;border-top:1px solid var(--line);font-size:8px;letter-spacing:2px;color:#9aa3a7;display:flex;justify-content:space-between}footer span{letter-spacing:.3px}.discovery-panel,.compatibility{background:#fff;border:1px solid var(--line);border-radius:10px;padding:25px;margin-bottom:22px}h2{font-size:17px;letter-spacing:-.3px;margin:0 0 9px}h3{font-size:13px;margin:0 0 9px}.discovery-panel p,.compatibility p,.connection-list p{font-size:12px;color:#7e8b91;line-height:1.9;margin:4px 0 12px}.discovery-controls{display:flex;gap:10px;margin-top:18px}select,input{border:1px solid #dce3e6;border-radius:6px;background:#fff;padding:10px 11px;color:#4f5d65;font-size:12px;min-width:0}select{flex:1}.hint{font-size:11px!important;color:#94a0a6!important;line-height:1.8;margin-top:15px!important}.empty-search{margin-top:20px;background:#f6f8f9;border:1px dashed #dfe5e8;border-radius:7px;padding:18px}.empty-search b{font-size:12px;font-weight:600;color:#63737c}.empty-search p{margin-bottom:0;font-size:11px}.connection-list{display:grid;gap:10px;margin-bottom:30px}.connection-list article{display:flex;gap:15px;align-items:center;background:white;border:1px solid var(--line);padding:19px 23px;border-radius:8px}.connection-list h3{margin-bottom:3px}.connection-list p{font-size:10px;margin:0}.connection-list button{margin-left:auto}.compat-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:26px;margin-top:24px}.compat-tag{font-size:8px;letter-spacing:1px;background:#e9f4e3;color:#67894e;padding:5px 7px;border-radius:3px}.compat-tag.amber{background:#fff3dc;color:#a28b54}.compat-grid h3{margin-top:16px}.compat-grid p{font-size:11px;line-height:1.9}.compat-grid a{font-size:11px;color:#6a914f}.found{display:flex;align-items:center;gap:20px;padding:17px 0;border-bottom:1px solid var(--line)}.found b{font-size:12px}.found small{display:block;font-size:10px;color:#93a0a7;margin-top:7px}.found select{flex:0 1 220px;margin-left:auto}.detail-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(280px,1fr);gap:24px}.large{aspect-ratio:16/11;border-radius:9px 9px 0 0}.detail-job{background:white;border:1px solid var(--line);border-radius:0 0 9px 9px}.detail-panel{background:white;border:1px solid var(--line);border-radius:9px;padding:24px}.panel-title{display:flex;align-items:center;gap:10px;font-size:9px;letter-spacing:1px;color:#7e8b92}.connection-message{font-size:12px;line-height:1.9;color:#788b93;margin:24px 0}dl{font-size:11px;display:grid;grid-template-columns:1fr 1.5fr;gap:18px 10px;padding:22px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-bottom:25px}dt{color:#8b979d}dd{margin:0;color:#566971;text-align:right;overflow-wrap:anywhere}.temperature{display:flex;justify-content:space-between;font-size:12px;margin:17px 0}.temperature small{font-weight:400;color:#9aa5ac}.muted{color:#8b969c;font-size:11px}.raw-panel{padding:24px 0;font-size:12px;color:#7b8c94}summary{cursor:pointer}pre{font-size:11px;overflow:auto;background:#e9eef0;border-radius:7px;padding:20px;max-height:350px}dialog{border:1px solid var(--line);border-radius:12px;padding:28px;width:460px;max-width:94vw;box-shadow:0 30px 100px #0004}dialog::backdrop{background:#0e181d99;backdrop-filter:blur(3px)}.dialog-head{display:flex;align-items:center;justify-content:space-between}.dialog-head button{font-size:23px;border:0;padding:0 4px}.dialog-head h2{margin:0}#setup-model{font-size:12px;color:#85949b;margin:12px 0 22px}form label{display:block;font-size:11px;color:#63737b;margin-bottom:16px}form label input{display:block;width:100%;margin-top:8px}form label.check{display:flex;align-items:center;gap:9px;font-size:11px}form .check input{width:auto;margin:0}form button[type=submit]{width:100%;margin-top:4px}#form-error{font-size:12px;color:#ab5147}#toast{position:fixed;bottom:25px;left:50%;transform:translate(-50%,20px);background:#22352b;color:#e2f2dd;font-size:12px;border-radius:8px;padding:14px 22px;opacity:0;pointer-events:none;transition:.2s;z-index:10}#toast.show{opacity:1;transform:translate(-50%,0)}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0)}:focus-visible{outline:2px solid #78b94e;outline-offset:4px}@media(min-width:1650px){.camera{aspect-ratio:16/8}.large{aspect-ratio:16/10}}@media(max-width:1200px){aside{width:205px;padding:25px 13px}.app>main{margin-left:205px}#content{padding:30px 25px}header{padding:0 25px}.tile-heading{padding:16px 13px;gap:8px}.tile-heading a{font-size:11px}.machine-number{width:29px;height:32px}.badge{font-size:8px;padding:4px 5px}.summary{padding:21px 17px}.summary>div{padding-left:15px;gap:10px}.summary-icon{font-size:20px}.summary small{font-size:7px}.summary .summary-note{font-size:10px}.page-actions button{padding:10px;font-size:11px}.camera{aspect-ratio:16/10}.large{aspect-ratio:16/13}.camera-empty p{font-size:9px}.detail-grid{grid-template-columns:1.5fr 1fr}}@media(max-width:950px){.page-heading{align-items:flex-start}.page-actions{flex-direction:column}.summary{grid-template-columns:1fr 1fr 1fr}.summary .summary-note{display:none}.camera-grid{gap:15px}.camera{aspect-ratio:4/3}.camera-empty p{max-width:180px}.tile-heading .machine-number{display:none}.tile-metrics{padding:14px}.tile-metrics>div+div{padding-left:10px}.compat-grid{grid-template-columns:1fr}.detail-grid{grid-template-columns:1fr}.large{aspect-ratio:16/10}}@media(max-width:720px){aside{position:static;width:100%;padding:18px 18px 8px;display:block}.app{display:block}.brand{margin-bottom:18px}.brand small{font-size:7px}.brand-icon{height:32px;line-height:29px;font-size:24px}.brand{font-size:21px}aside>.section-label,.aside-bottom,nav .section-label,nav small,nav .nav-dot{display:none}nav{display:flex;overflow-x:auto;gap:7px;scrollbar-width:none}nav a{white-space:nowrap;font-size:10px;padding:10px;gap:6px;flex-shrink:0}nav a b{font-size:8px}.app>main{margin-left:0}header{height:55px;padding:0 20px}.breadcrumb{font-size:8px}.breadcrumb span:last-child{font-size:10px}#content{padding:27px 18px 18px}h1{font-size:27px}.page-heading{gap:10px}.page-heading p{font-size:11px}.page-actions>button:first-child{display:none}.summary{padding:17px 12px;margin-bottom:23px}.summary>div{padding-left:12px;gap:8px}.summary-icon{display:none}.summary b{font-size:21px}.summary small{font-size:6px}.summary b span{font-size:9px}.camera-grid{grid-template-columns:1fr}.camera{aspect-ratio:16/9}.tile-heading{padding:18px}.tile-heading .machine-number{display:grid}.tile-heading a{font-size:12px}.badge{font-size:9px}.camera-empty p{max-width:260px}.tile-metrics{padding:15px 20px}.tile-metrics>div+div{padding-left:20px}.bottom-note{padding-top:22px}.discovery-panel,.compatibility{padding:20px}.discovery-controls{flex-direction:column}.found{flex-wrap:wrap}.found select{margin-left:0;flex:1}.connection-list article{padding:16px 12px;gap:10px}.connection-list .machine-number{display:none}.connection-list button{font-size:10px;padding:8px}.connection-list h3{font-size:12px}footer{padding:20px}.header-right{font-size:10px}.large{aspect-ratio:16/11}.detail-panel{padding:20px}}
progress.progress{display:block;width:100%;border:0;appearance:none;height:4px}progress.progress::-webkit-progress-bar{background:#edf0f1;border-radius:2px}progress.progress::-webkit-progress-value{background:#8ac461;border-radius:2px}progress.progress::-moz-progress-bar{background:#8ac461;border-radius:2px}
@media(min-width:1100px){body[data-view=overview] header{height:52px}body[data-view=overview] #content{padding:23px 32px 14px}body[data-view=overview] .page-heading{margin-bottom:20px}body[data-view=overview] .eyebrow{display:none}body[data-view=overview] h1{font-size:28px;margin-bottom:5px}body[data-view=overview] .summary,body[data-view=overview] .bottom-note{display:none}body[data-view=overview] .camera-grid{gap:16px}body[data-view=overview] .tile-heading{padding:11px 16px;height:56px}body[data-view=overview] .camera{aspect-ratio:auto;height:clamp(105px,calc((100dvh - 455px)/2),360px)}body[data-view=overview] .job{padding:10px 16px}body[data-view=overview] .job-top{margin-bottom:6px}body[data-view=overview] .job-top b{font-size:14px}body[data-view=overview] .job-bottom{margin-top:7px}body[data-view=overview] .tile-metrics{padding:10px 16px}body[data-view=overview] .tile-metrics small{font-size:7px;margin-bottom:4px}body[data-view=overview] .tile-metrics b{font-size:12px}body[data-view=overview] footer{padding:13px 32px}body[data-view=overview] .camera-empty{padding:22px 12px 8px}body[data-view=overview] .camera-glyph{font-size:22px;margin-bottom:8px}}
@media(min-width:1100px){body[data-view=overview] .tile-heading{height:48px;padding:8px 16px}body[data-view=overview] .camera{height:clamp(105px,calc((100dvh - 530px)/2),360px)}body[data-view=overview] .job{padding:8px 16px}body[data-view=overview] .tile-metrics{padding:9px 16px}body[data-view=overview] .tile-metrics>div{display:flex;gap:8px;align-items:baseline}body[data-view=overview] .tile-metrics small{display:inline;margin:0}}
.camera.large img{transform-origin:center;will-change:transform;user-select:none}
.camera.large.zoom-ready{touch-action:none;cursor:zoom-in;outline-offset:-3px}
.camera.large.zoomed{cursor:grab}
.camera.large.dragging{cursor:grabbing}
.camera-zoom{background:#fff;border:1px solid var(--line);border-top:0;padding:12px 16px}
.zoom-controls{display:flex;align-items:center;gap:9px}
.zoom-controls button{padding:7px 11px;font-size:12px;white-space:nowrap}
.zoom-controls input[type=range]{flex:1;width:100px;min-width:50px;padding:0;accent-color:#82bd5e}
.zoom-controls output{font-size:12px;color:#536959;min-width:42px;text-align:center;font-variant-numeric:tabular-nums}
.zoom-controls button:disabled{cursor:default}
.camera-zoom p{font-size:10px;line-height:1.6;color:#839097;margin:9px 0 0}
@media(max-width:720px){.camera-zoom{padding:11px}.zoom-controls{gap:6px}.zoom-controls button{padding:8px}.zoom-controls output{min-width:36px}}
.camera-stale .cam-label{color:#ffd48f;border-color:#bd8a4455}
.camera-warning{position:absolute;bottom:12px;left:12px;right:12px;z-index:2;background:#32250ee8;color:#ffe0af;border:1px solid #96713399;border-radius:5px;padding:9px 11px;font-size:11px;pointer-events:none}
.camera-warning[hidden]{display:none}

.auth-panel{max-width:470px;margin:5vh auto;padding:30px;background:#fff;border:1px solid var(--line);border-radius:8px}.auth-panel h1{font-size:28px}.auth-panel p{line-height:1.65;color:#65747d}.auth-panel label{display:block;font-size:13px;margin:20px 0 8px}.auth-panel input{display:block;width:100%;margin-top:8px;box-sizing:border-box}.auth-panel form{margin-bottom:24px}.auth-panel button{margin-top:12px}.auth-panel>a,.auth-link{font-size:13px;color:#416d30}.auth-panel #auth-error{color:#a12c2c;min-height:1em}.header-right .guest-avatar{width:auto;border-radius:5px;padding:9px;font-size:12px;white-space:nowrap}.header-right .avatar a{color:inherit;text-decoration:none}@media(max-width:720px){.auth-panel{margin:12px auto;padding:20px}.auth-panel h1{font-size:24px}}
