:root{--bg: #f4f6ef;--panel: #ffffff;--ink: #132a13;--sub: #3c4a3c;--accent: #0ea5e9;--danger: #dc2626;--border: #d8e0cf}*{box-sizing:border-box}body{margin:0;font-family:Space Grotesk,Noto Sans SC,PingFang SC,sans-serif;background:radial-gradient(circle at 10% 10%,#e8f6ff 0%,var(--bg) 45%),radial-gradient(circle at 90% 30%,#fff0d8 0%,var(--bg) 55%);color:var(--ink)}button,input,select{font-family:inherit}.page{width:min(1400px,96vw);margin:24px auto 40px;display:grid;gap:14px}.topbar{display:flex;justify-content:space-between;align-items:flex-end;background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:16px 20px}.topbar h1{margin:0;font-size:22px}.topbar p{margin:6px 0 0;color:var(--sub)}.actions{display:flex;gap:10px}button{border:1px solid var(--border);background:#fff;color:var(--ink);border-radius:10px;padding:8px 14px;cursor:pointer}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}.card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:12px;display:flex;flex-direction:column;gap:8px}.card span{color:var(--sub);font-size:13px}.card strong{font-size:20px}.ws-connected{color:#166534}.ws-connecting,.ws-reconnecting{color:#b45309}.ws-disconnected{color:#991b1b}.charts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px}.chart-card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:12px}.chart-title{font-weight:600;margin-bottom:8px}.chart-svg{width:100%;height:110px;background:linear-gradient(180deg,#f2fafc,#fff);border-radius:10px}.chart-meta{color:var(--sub);font-size:12px;margin-top:6px}.panel-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:10px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:14px}.panel h2{margin:0 0 10px;font-size:18px}.sub-title{margin:14px 0 8px;font-size:15px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(160px,1fr));gap:10px}.form-grid label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--sub)}input,select{border:1px solid var(--border);border-radius:8px;padding:8px 10px;outline:none;background:#fff}.status-list{margin:0;padding-left:16px;line-height:1.9}.tables{display:grid;grid-template-columns:1fr 1fr;gap:10px}.table-panel table{width:100%;border-collapse:collapse;font-size:12px}.table-panel th,.table-panel td{border-bottom:1px solid var(--border);text-align:left;padding:6px;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.login-wrapper{min-height:100vh;display:grid;place-items:center;padding:20px}.login-card{width:min(420px,95vw);display:grid;gap:10px;background:var(--panel);border:1px solid var(--border);border-radius:18px;padding:24px}.login-card h1{margin:0;font-size:24px}.login-card p{margin:0 0 4px;color:var(--sub)}.error-text,.error-banner{color:#991b1b;background:#fee2e2;border:1px solid #fecaca;border-radius:10px;padding:8px 10px;font-size:13px}.error-banner{margin-top:-4px}.notice-banner{color:#0f5132;background:#d1e7dd;border:1px solid #badbcc;border-radius:10px;padding:8px 10px;font-size:13px;margin-top:-4px}.panel-tip{margin:0 0 10px;font-size:13px;color:var(--sub)}.slider-grid{display:grid;gap:12px}.slider-field{display:grid;gap:6px}.slider-label-row{display:flex;justify-content:space-between;align-items:center}.slider-label{font-size:13px;color:var(--ink)}.slider-value,.slider-hint{font-size:12px;color:var(--sub)}.preview-list{display:grid;gap:4px;font-size:12px;color:var(--sub)}.checkbox-label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink)}.form-grid label.checkbox-label{flex-direction:row;align-items:center}.checkbox-label input{width:16px;height:16px}.block-hint{font-size:12px;color:#b45309;background:#ffedd5;border:1px solid #fed7aa;border-radius:8px;padding:8px}.readonly-field{display:flex;justify-content:space-between;align-items:center;border:1px solid var(--border);border-radius:8px;padding:10px;margin-bottom:10px;font-size:13px}.readonly-field span{color:var(--sub)}@media(max-width:980px){.panel-grid,.tables,.form-grid{grid-template-columns:1fr}.topbar{align-items:flex-start;flex-direction:column;gap:10px}}
