:root{--bg:#f5f6f8;--card:#fff;--text:#111827;--muted:#6b7280;--border:#d9dde3;--blue:#1677ff;--green:#22c55e}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,PingFang SC,Microsoft YaHei,sans-serif}.center{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.card{background:var(--card);border-radius:10px;box-shadow:0 2px 12px rgba(0,0,0,.08);padding:32px;width:100%;max-width:420px}h1{font-size:24px;margin:0 0 10px}.sub{color:var(--muted);font-size:14px;margin:0 0 20px;line-height:1.55}input{width:100%;padding:12px 14px;border:1px solid var(--border);border-radius:6px;font-size:15px;outline:none;background:#fff}input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(22,119,255,.12)}button{width:100%;padding:12px 14px;border:none;border-radius:6px;font-size:15px;font-weight:600;cursor:pointer;margin-top:12px}button:disabled{opacity:.45;cursor:not-allowed}.btn-blue{background:var(--blue);color:#fff}.btn-green{background:var(--green);color:#fff}.btn-plain{background:none;color:var(--blue);font-weight:500;font-size:13px;width:auto;margin:0;padding:0}.err{color:#dc2626;margin-top:12px;line-height:1.4}.err,.ok{font-size:13px}.ok{color:#16a34a;margin-top:10px}.hint{color:var(--muted);font-size:12px;margin-top:8px;text-align:center}.hub{max-width:820px;margin:0 auto;padding:48px 24px 64px}.topbar{display:flex;justify-content:flex-end;gap:14px;align-items:center;font-size:13px;color:var(--muted)}.hub-title{text-align:center;font-size:28px;margin:8px 0 6px;font-weight:700}.hub-sub{text-align:center;color:var(--muted);font-size:14px;margin:0}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));grid-gap:16px;gap:16px;margin-top:32px}.appcard{display:flex;gap:14px;align-items:flex-start;background:#fff;border-radius:10px;padding:18px;box-shadow:0 1px 6px rgba(0,0,0,.06);text-decoration:none;color:inherit;transition:.15s;border:1px solid transparent}.appcard:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,.1);border-color:#e5e7eb}.icon{width:44px;height:44px;border-radius:10px;background:#eef2ff;display:flex;align-items:center;justify-content:center;font-size:22px;flex:none}.appname{font-size:16px;font-weight:600;margin:0 0 4px}.appdesc{font-size:13px;margin:0}.appdesc,.meta{color:var(--muted)}.meta{font-size:12px;margin-top:8px;display:flex;align-items:center}.dot{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:6px}.dot.on{background:var(--green)}.dot.off{background:#9ca3af}.empty{text-align:center;color:var(--muted);padding:56px 0;font-size:14px}