:root{--factory-navy:#082d42;--factory-blue:#0a6f91;--factory-cyan:#25b6bd;--factory-bg:#f2f6f7;--factory-line:#dbe6e8;--factory-ink:#17313d;--factory-muted:#6c818a;--factory-danger:#b74040;--factory-warn:#b87516;--factory-ok:#17845f}
*{box-sizing:border-box}.factory-body{margin:0;background:var(--factory-bg);color:var(--factory-ink);font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif}.factory-app{min-height:100vh}.factory-header{height:72px;padding:0 28px;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(110deg,#06283b,#0a4659);box-shadow:0 8px 25px rgba(5,38,54,.18);position:sticky;top:0;z-index:30}.factory-header__right{display:flex;align-items:center;gap:18px;color:#d9edf1}.factory-connection{display:inline-flex;align-items:center;gap:8px;font-size:13px}.factory-connection i{width:8px;height:8px;border-radius:50%;background:#f0b94f}.factory-connection.is-online i{background:#45d39b;box-shadow:0 0 0 4px rgba(69,211,155,.14)}.factory-connection.is-error i{background:#ff7979}.factory-admin{padding-left:18px;border-left:1px solid rgba(255,255,255,.18)}.factory-back{color:#fff;text-decoration:none;border:1px solid rgba(255,255,255,.28);padding:9px 14px;border-radius:9px}.factory-layout{display:grid;grid-template-columns:220px minmax(0,1fr);min-height:calc(100vh - 72px)}.factory-nav{padding:28px 16px;background:#fff;border-right:1px solid var(--factory-line)}.factory-nav>p{margin:0 12px 16px;color:#94a4aa;font-size:11px;letter-spacing:.16em}.factory-nav button{width:100%;border:0;background:transparent;padding:13px 14px;margin:3px 0;border-radius:10px;text-align:left;color:#49616b;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.factory-nav button span{font-weight:700;font-size:15px}.factory-nav button small{font-size:10px;color:#9aabb1}.factory-nav button:hover{background:#eef6f7}.factory-nav button.is-active{color:#fff;background:linear-gradient(120deg,var(--factory-blue),#138aa0);box-shadow:0 8px 18px rgba(10,111,145,.22)}.factory-nav button.is-active small{color:#c9f0f2}.factory-main{padding:34px clamp(20px,3vw,46px) 60px;min-width:0}.factory-title{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:25px}.factory-title h1{margin:3px 0 7px;font-size:31px}.factory-title p:last-child{margin:0;color:var(--factory-muted)}.factory-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:18px}.factory-stats article{min-height:132px;background:#fff;border:1px solid var(--factory-line);border-radius:15px;padding:21px;box-shadow:0 8px 24px rgba(20,52,64,.055);position:relative;overflow:hidden}.factory-stats article:after{content:"";position:absolute;width:76px;height:76px;border-radius:50%;right:-25px;top:-25px;background:rgba(37,182,189,.11)}.factory-stats small{color:var(--factory-muted)}.factory-stats strong{display:block;margin:10px 0 5px;font-size:31px}.factory-stats span{font-size:12px;color:#82959d}.factory-grid{display:grid;gap:18px}.factory-grid--overview{grid-template-columns:minmax(0,1.6fr) minmax(300px,.8fr)}.factory-grid--firmware{grid-template-columns:minmax(0,1.35fr) minmax(330px,.75fr)}.factory-card{background:#fff;border:1px solid var(--factory-line);border-radius:15px;box-shadow:0 8px 24px rgba(20,52,64,.05);overflow:hidden}.factory-card>header{padding:20px 22px;border-bottom:1px solid #e8eff0;display:flex;align-items:center;justify-content:space-between}.factory-card header small{color:#82959d}.factory-card header h2{font-size:18px;margin:4px 0 0}.factory-card header button{border:0;background:transparent;color:var(--factory-blue);cursor:pointer}.factory-list{padding:8px 20px 16px}.attention-item{display:grid;grid-template-columns:10px minmax(0,1fr) auto;gap:12px;align-items:center;padding:14px 2px;border-bottom:1px solid #edf2f3}.attention-item:last-child{border:0}.attention-item>i{width:8px;height:8px;border-radius:50%;background:var(--factory-warn)}.attention-item.is-critical>i{background:var(--factory-danger)}.attention-item strong,.attention-item small{display:block}.attention-item small{margin-top:3px;color:var(--factory-muted)}.attention-item button{border:0;background:#edf6f7;color:var(--factory-blue);padding:7px 10px;border-radius:7px;cursor:pointer}.ota-guardrails{list-style:none;padding:8px 22px 20px;margin:0}.ota-guardrails li{display:flex;gap:13px;padding:13px 0;border-bottom:1px solid #edf2f3}.ota-guardrails li:last-child{border:0}.ota-guardrails b{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:#e7f4f5;color:var(--factory-blue)}.ota-guardrails strong,.ota-guardrails small{display:block}.ota-guardrails small{margin-top:3px;color:var(--factory-muted)}.factory-toolbar{display:flex;gap:12px;margin-bottom:14px;flex-wrap:wrap}.factory-toolbar label{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--factory-line);padding:8px 11px;border-radius:10px;color:var(--factory-muted);font-size:12px}.factory-toolbar input,.factory-toolbar select{border:0;outline:0;background:transparent;color:var(--factory-ink);min-width:130px}.factory-search{flex:1}.factory-search input{width:100%}.factory-table-wrap{overflow:auto}.factory-table{width:100%;border-collapse:collapse;min-width:920px}.factory-table th{padding:14px 15px;text-align:left;color:#71858d;font-size:11px;letter-spacing:.04em;background:#f8fafb;border-bottom:1px solid var(--factory-line)}.factory-table td{padding:15px;border-bottom:1px solid #edf2f3;font-size:13px;vertical-align:middle}.factory-table tr:hover td{background:#fbfdfd}.factory-table strong,.factory-table small{display:block}.factory-table small{color:var(--factory-muted);margin-top:3px}.table-action{border:0;background:#eaf5f6;color:var(--factory-blue);border-radius:8px;padding:7px 10px;cursor:pointer}.status-tag{display:inline-flex;align-items:center;gap:5px;padding:5px 8px;border-radius:20px;font-size:11px;background:#edf1f2;color:#61747b}.status-tag:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.status-tag.is-online,.status-tag.is-synced{background:#e7f6ef;color:var(--factory-ok)}.status-tag.is-warning,.status-tag.is-pending{background:#fff2dc;color:var(--factory-warn)}.status-tag.is-danger,.status-tag.is-offline{background:#fbe9e9;color:var(--factory-danger)}.factory-empty{padding:50px;text-align:center;color:var(--factory-muted)}.event-list,.firmware-list,.ota-job-list{padding:8px 20px 18px}.event-item,.firmware-item,.ota-job{padding:15px 2px;border-bottom:1px solid #edf2f3;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px}.event-item:last-child,.firmware-item:last-child,.ota-job:last-child{border:0}.event-item strong,.event-item small,.firmware-item strong,.firmware-item small,.ota-job strong,.ota-job small{display:block}.event-item small,.firmware-item small,.ota-job small{color:var(--factory-muted);margin-top:4px}.event-item__meta,.firmware-item__actions{display:flex;gap:8px;align-items:center}.usage-note{padding:14px 17px;margin-bottom:14px;border-radius:12px;background:#e7f3f5;border:1px solid #cfe4e7;display:flex;gap:12px;color:#48656f}.usage-note strong{white-space:nowrap;color:#17465a}.factory-form{padding:20px 22px;display:grid;gap:15px}.factory-form label>span{display:block;margin-bottom:6px;font-size:12px;color:#667c85}.factory-form input,.factory-form select,.factory-form textarea{width:100%;border:1px solid #cfdddf;border-radius:9px;padding:10px 11px;background:#fbfdfd;color:var(--factory-ink);font:inherit}.factory-form__row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-caution{margin:0;padding:11px;border-radius:9px;background:#fff4df;color:#8d5f1e;font-size:12px}.ota-preview{padding:13px;border-radius:10px;background:#f3f7f8;color:#5e747d;font-size:13px;line-height:1.6}.ota-preview.is-ready{background:#e8f6ef;color:#176d52}.progress{height:7px;background:#e6edef;border-radius:10px;margin-top:9px;overflow:hidden}.progress i{display:block;height:100%;background:linear-gradient(90deg,var(--factory-blue),var(--factory-cyan))}.factory-message{padding:13px 16px;border-radius:10px;margin-bottom:16px;background:#fff3df;color:#855b20}.factory-message.is-error{background:#fbeaea;color:#963b3b}.gateway-drawer{position:fixed;z-index:60;right:0;top:0;width:min(560px,94vw);height:100vh;background:#fff;box-shadow:-20px 0 60px rgba(12,43,55,.23);transform:translateX(105%);transition:transform .25s ease;overflow:auto;padding:28px}.gateway-drawer.is-open{transform:translateX(0)}.gateway-drawer__close{position:absolute;right:18px;top:14px;border:0;background:#edf3f4;width:35px;height:35px;border-radius:50%;font-size:24px;cursor:pointer}.drawer-backdrop{position:fixed;z-index:50;inset:0;background:rgba(4,28,39,.35)}.detail-heading-block{padding-right:45px}.detail-heading-block h2{margin:5px 0}.detail-heading-block p{color:var(--factory-muted);margin:0}.detail-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin:22px 0}.detail-kpis article{background:#f3f7f8;padding:12px;border-radius:10px}.detail-kpis small,.detail-kpis strong{display:block}.detail-kpis strong{margin-top:6px}.detail-section{margin-top:20px;padding-top:18px;border-top:1px solid var(--factory-line)}.detail-section h3{font-size:15px}.detail-config{display:grid;grid-template-columns:1fr 1fr;gap:10px}.detail-config label span{font-size:11px;color:var(--factory-muted)}.detail-config input{width:100%;padding:9px;border:1px solid #d3e0e2;border-radius:8px;margin-top:4px}.detail-actions{display:flex;gap:9px;margin-top:13px}.factory-toast{position:fixed;right:24px;bottom:24px;z-index:80;background:#123d4d;color:#fff;padding:13px 17px;border-radius:10px;box-shadow:0 10px 30px rgba(0,0,0,.2)}.factory-access{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(145deg,#eaf4f5,#f8fbfb)}.factory-access section{max-width:480px;background:#fff;padding:45px;border:1px solid var(--factory-line);border-radius:18px;text-align:center;box-shadow:0 18px 55px rgba(11,48,61,.12)}.factory-logo{display:grid;place-items:center;margin:0 auto 20px;width:62px;height:62px;border-radius:18px;background:var(--factory-navy);color:#fff;font-weight:800}.factory-access h1{font-size:27px}.factory-access p{color:var(--factory-muted);line-height:1.7}.factory-access .button{margin-top:15px}.factory-view[hidden]{display:none!important}
@media(max-width:1050px){.factory-layout{grid-template-columns:1fr}.factory-nav{position:sticky;top:72px;z-index:25;padding:10px;display:flex;overflow:auto;border-right:0;border-bottom:1px solid var(--factory-line)}.factory-nav>p{display:none}.factory-nav button{min-width:130px;margin:0 3px}.factory-grid--overview,.factory-grid--firmware{grid-template-columns:1fr}.factory-stats{grid-template-columns:1fr 1fr}}
@media(max-width:650px){.factory-header{height:64px;padding:0 14px}.factory-header .brand small,.factory-admin,.factory-connection{display:none}.factory-layout{min-height:calc(100vh - 64px)}.factory-nav{top:64px}.factory-main{padding:24px 12px 45px}.factory-title{align-items:flex-start}.factory-title .button{padding:0 12px}.factory-title h1{font-size:25px}.factory-stats{gap:9px}.factory-stats article{min-height:112px;padding:16px}.factory-stats strong{font-size:25px}.factory-form__row,.detail-config{grid-template-columns:1fr}.usage-note{flex-direction:column}.gateway-drawer{padding:22px 17px}.detail-kpis{grid-template-columns:1fr 1fr}}
