:root{--bg:#f5f7fb;--panel:#fff;--text:#172033;--muted:#687287;--line:#e7ebf2;--primary:#2457d6;--danger:#d12f2f;--green:#148a4b;--yellow:#b27b00;--blue:#1e65c1;--shadow:0 18px 45px rgba(28,45,80,.08)}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",Arial,sans-serif;background:var(--bg);color:var(--text)}a{color:var(--primary);text-decoration:none}h1{margin:0 0 18px;font-size:28px}h2{margin:0 0 16px;font-size:18px}p{line-height:1.7}.mobile-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(circle at top left,#e9f0ff,#f7f8fb 42%,#fff)}.hero-card,.login-card,.panel{background:var(--panel);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow)}.hero-card{width:min(720px,100%);padding:34px}.pill{display:inline-block;margin-bottom:14px;padding:6px 12px;border-radius:999px;background:#edf3ff;color:var(--primary);font-size:13px;font-weight:700}.form-card{display:grid;gap:10px;margin-top:18px}label{font-size:14px;color:#303a4d;font-weight:700;margin-top:10px}label span{color:var(--danger)}input,select,textarea{width:100%;border:1px solid #d8deeb;border-radius:12px;padding:12px 13px;background:#fff;font-size:15px;outline:none}textarea{min-height:86px;resize:vertical}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(36,87,214,.12)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid #d8deeb;background:#fff;color:#1f2a44;border-radius:12px;padding:11px 15px;font-weight:700;cursor:pointer;margin-top:10px}.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.small{font-size:12px;padding:6px 9px;border-radius:9px;margin-top:4px}.tips{margin-top:20px;padding:16px;border-radius:16px;background:#f7f9fc;color:var(--muted)}.alert{border-radius:14px;padding:12px 14px;margin:12px 0}.alert.success{background:#eaf8f0;color:#106d3b}.alert.danger,.alert.error{background:#fff0f0;color:#a51e1e}.alert.warning{background:#fff8e8;color:#7a5200}.muted{color:var(--muted);font-size:13px}.result-box{margin:18px 0;padding:16px;border-radius:16px;background:#f7f9fc}.result-box label{display:block;color:var(--muted);margin:10px 0 6px}.result-box code,.udid{word-break:break-all}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.login-card{width:min(420px,100%);padding:30px}.login-card h1{margin-bottom:6px}.admin-shell{display:flex;min-height:100vh}.sidebar{width:240px;background:#111827;color:#fff;padding:22px;display:flex;flex-direction:column;position:fixed;left:0;top:0;bottom:0}.brand{font-size:18px;font-weight:800;margin-bottom:24px}.sidebar nav{display:grid;gap:8px}.sidebar a{color:#c9d2e3;padding:11px 12px;border-radius:12px}.sidebar a.active,.sidebar a:hover{background:#23314a;color:#fff}.sidebar-foot{margin-top:auto;color:#9aa6bc;font-size:13px}.sidebar-foot a{padding:0;color:#fff}.admin-main{margin-left:240px;padding:30px;width:calc(100% - 240px)}.stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:18px}.stat{background:#fff;border:1px solid var(--line);border-radius:20px;padding:22px;box-shadow:var(--shadow)}.stat b{display:block;font-size:32px}.stat span{color:var(--muted)}.panel{padding:22px;margin-bottom:18px}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px}.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}table{width:100%;border-collapse:collapse;font-size:14px}th,td{padding:12px;border-bottom:1px solid var(--line);vertical-align:top;text-align:left}th{background:#f7f9fc;color:#4b5568;white-space:nowrap}tr:last-child td{border-bottom:none}.badge{display:inline-block;padding:4px 8px;border-radius:999px;font-size:12px;font-weight:800}.badge.green{background:#e9f8ef;color:#0a763c}.badge.red{background:#fff0f0;color:#a51e1e}.badge.blue{background:#eaf2ff;color:#155bbb}.badge.yellow{background:#fff6dc;color:#875c00}.badge.gray{background:#eef1f6;color:#526071}.toolbar{display:flex;gap:10px;margin-bottom:14px}.toolbar input{max-width:420px}.form-inline-block{max-width:740px}.link{display:inline-block;margin-top:14px}@media(max-width:900px){.admin-shell{display:block}.sidebar{position:static;width:auto}.admin-main{margin-left:0;width:auto;padding:18px}.stat-grid,.grid-2{grid-template-columns:1fr}.hero-card{padding:24px}h1{font-size:24px}}

/* v23 OTA install page UI/UX */
.install-page{align-items:flex-start;padding:32px 16px;background:linear-gradient(145deg,#eef4ff 0%,#f8fbff 42%,#ffffff 100%)}
.install-card{width:min(760px,100%);margin:24px auto;background:rgba(255,255,255,.96);border:1px solid rgba(215,224,240,.95);border-radius:28px;box-shadow:0 24px 70px rgba(40,71,122,.12);padding:34px;overflow:hidden;position:relative}.install-card:before{content:"";position:absolute;right:-80px;top:-90px;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,#dce8ff,rgba(220,232,255,0));pointer-events:none}.install-top{display:flex;align-items:center;gap:18px;margin-bottom:24px}.app-icon{width:72px;height:72px;border-radius:22px;background:linear-gradient(135deg,#255be8,#6aa5ff);color:#fff;display:flex;align-items:center;justify-content:center;font-size:34px;font-weight:900;box-shadow:0 14px 28px rgba(37,91,232,.25)}.status-badge{display:inline-flex;align-items:center;width:max-content;padding:7px 13px;border-radius:999px;background:#edf4ff;color:#2457d6;font-size:13px;font-weight:900;margin-bottom:10px}.status-badge.danger{background:#fff0f0;color:#b42318}.install-card h1{font-size:34px;letter-spacing:-.5px;margin:0 0 6px;color:#101828}.install-card .lead{margin:0;color:#53627a;font-size:16px}.action-panel{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:28px 0 22px}.install-button{display:inline-flex;align-items:center;justify-content:center;min-width:176px;height:58px;border-radius:17px;background:linear-gradient(135deg,#2457d6,#1b4fd1);color:#fff!important;font-size:18px;font-weight:900;box-shadow:0 12px 28px rgba(36,87,214,.25);border:none}.install-button:active{transform:translateY(1px)}.secondary-button{height:58px;border-radius:17px;border:1px solid #d9e2f2;background:#fff;color:#254064;font-size:16px;font-weight:800;padding:0 18px;cursor:pointer}.steps-card,.release-note,.debug-box{margin-top:18px;border-radius:22px;background:#f5f8fd;border:1px solid #edf1f7;padding:20px;color:#53627a}.steps-card h2,.release-note h2{margin:0 0 10px;color:#26364f;font-size:17px}.steps-card ol{margin:0;padding-left:22px;line-height:1.75}.debug-box summary{cursor:pointer;font-weight:800;color:#31527e}.debug-box p{margin:10px 0 0}.small-muted{font-size:13px;color:#718096;word-break:break-all}.notice{border-radius:18px;padding:14px 16px;margin:16px 0;line-height:1.65}.notice.warning{background:#fff8e6;color:#7a5200;border:1px solid #ffe4a3}.notice.danger{background:#fff0f0;color:#a51e1e;border:1px solid #ffd0d0}@media(max-width:640px){.install-page{padding:18px 12px}.install-card{padding:24px 18px;border-radius:24px;margin:10px auto}.install-top{align-items:flex-start}.app-icon{width:60px;height:60px;border-radius:18px;font-size:28px}.install-card h1{font-size:28px}.action-panel{display:grid;grid-template-columns:1fr}.install-button,.secondary-button{width:100%}}
