:root{--color-bg:#f5f6f8;--color-surface:#fff;--color-border:#e3e6ea;--color-text:#1f2328;--color-muted:#6b7280;--color-primary:#2f6feb;--color-danger:#d1242f;--color-ok-bg:#e6f4ea;--color-ok-text:#1a7f37;--radius:8px}*{box-sizing:border-box}body{background:var(--color-bg);color:var(--color-text);margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,PingFang SC,Roboto,sans-serif;font-size:14px;line-height:1.6}code{background:#f0f2f5;border-radius:4px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px}.app-header{background:var(--color-surface);border-bottom:1px solid var(--color-border);align-items:center;gap:24px;height:56px;padding:0 24px;display:flex}.brand{color:var(--color-text);font-size:16px;font-weight:600;text-decoration:none}.app-nav{gap:16px;display:flex}.app-nav a{color:var(--color-muted);text-decoration:none}.app-nav a.router-link-active{color:var(--color-primary);font-weight:500}.app-main{flex-direction:column;gap:16px;max-width:960px;margin:0 auto;padding:24px;display:flex}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:16px 20px}.card h2{margin:0;font-size:15px;font-weight:600}.card-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.check-list{margin:0;padding-left:18px}.check-list li{margin-bottom:6px}.hint{color:var(--color-muted);margin:8px 0 0;font-size:12px}.badge{border-radius:999px;margin-left:8px;padding:1px 8px;font-size:12px;display:inline-block}.badge-ok{background:var(--color-ok-bg);color:var(--color-ok-text)}.badge-idle{color:var(--color-muted);background:#eef0f3}.badge-warn{color:#92400e;background:#fef3c7}.alert{border-radius:var(--radius);color:var(--color-danger);background:#ffebe9;margin:0;padding:8px 12px}.form-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));align-items:end;gap:12px;display:grid}.form-grid label{color:var(--color-muted);flex-direction:column;gap:4px;font-size:12px;display:flex}.form-grid .form-grid-wide{grid-column:1/-1}input{border:1px solid var(--color-border);color:var(--color-text);border-radius:6px;padding:6px 10px;font-size:14px}input:focus{border-color:var(--color-primary);outline:2px solid #2f6feb40}button{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);cursor:pointer;border-radius:6px;padding:6px 14px;font-size:14px}button[type=submit]{border-color:var(--color-primary);background:var(--color-primary);color:#fff;justify-self:start}button:disabled{opacity:.55;cursor:not-allowed}button.danger{color:var(--color-danger);border-color:#ffd7d5}.table{border-collapse:collapse;width:100%}.table th,.table td{text-align:left;border-bottom:1px solid var(--color-border);padding:8px 10px}.table th{color:var(--color-muted);font-size:12px;font-weight:600}.col-action{text-align:right;width:80px}.col-action-wide{width:170px}.row-actions{justify-content:flex-end;gap:6px;display:flex}.empty{color:var(--color-muted);text-align:center}.pager{justify-content:flex-end;gap:8px;margin-top:12px;display:flex}.app-user{align-items:center;gap:8px;margin-left:auto;font-size:13px;display:flex}.user-name{color:var(--color-text);font-weight:500}.link-button{border:1px solid var(--color-border);color:var(--color-text);border-radius:6px;padding:4px 12px;text-decoration:none}.link-button-primary{border-color:var(--color-primary);background:var(--color-primary);color:#fff}.auth-card{max-width:420px;margin:32px auto 0;padding:24px 28px}.auth-title{margin:0;font-size:20px;font-weight:600}.auth-form{flex-direction:column;gap:14px;margin-top:16px;display:flex}.field{color:var(--color-muted);flex-direction:column;gap:4px;font-size:12px;display:flex}.field-inline{gap:8px;display:flex}.field-inline input{flex:1;min-width:0}.field-inline button{white-space:nowrap}.field-hint{color:var(--color-muted);font-size:12px}.optional{margin-left:2px;font-size:12px}.notice{border-radius:var(--radius);color:var(--color-primary);background:#eef4ff;margin:0;padding:8px 12px;font-size:12px}.btn-primary{border-color:var(--color-primary);background:var(--color-primary);color:#fff}.btn-block{width:100%;padding:8px 14px}.auth-switch{color:var(--color-muted);text-align:center;margin:16px 0 0;font-size:13px}.auth-switch a{color:var(--color-primary);text-decoration:none}.detail-grid{grid-template-columns:120px 1fr;gap:8px 16px;margin:0;display:grid}.detail-grid dt{color:var(--color-muted);font-size:12px}.detail-grid dd{word-break:break-all;margin:0}.detail-actions{align-items:center;gap:12px;margin-top:16px;display:flex}.point-groups{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;margin-top:12px;display:grid}.point-group h3{color:var(--color-muted);margin:0 0 8px;font-size:13px;font-weight:600}.point-group .detail-grid{grid-template-columns:1fr auto;gap:6px 12px}.point-group .detail-grid dd{text-align:right}.param-grid{grid-template-columns:1fr auto;column-gap:24px;margin-top:0}.param-grid dd{text-align:right;white-space:nowrap}.param-value{font-weight:600}.param-range{color:var(--color-muted);margin-left:8px;font-size:11px}.main-parameter{align-items:baseline;gap:12px;margin-top:12px;display:flex}.main-parameter-label{color:var(--color-muted);font-size:13px}.main-parameter-value{font-size:28px;font-weight:700}.power-state{align-items:center;gap:12px;margin-top:12px;display:flex}.power-state-label{color:var(--color-muted);font-size:13px}.is-missing{color:var(--color-muted)}.param-cell{justify-content:flex-end;align-items:baseline;gap:8px;display:flex}.param-cell.is-clickable{cursor:pointer;border-radius:4px}.param-cell.is-clickable:hover{background:var(--color-bg)}.modal-mask{z-index:50;background:#0006;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal{width:min(480px,100%);max-height:85vh;overflow:auto}.data-table{border-collapse:collapse;width:100%;margin-top:12px;font-size:14px}.data-table th,.data-table td{border-bottom:1px solid var(--color-border);text-align:left;vertical-align:top;padding:8px 12px}.data-table th{color:var(--color-muted);font-size:12px;font-weight:600}.filter-row{align-items:flex-end;gap:12px;margin-top:12px;display:flex}.section-title{margin:20px 0 4px;font-size:14px}.required{color:#d33}.list-field{margin-top:12px}.list-field-head{align-items:center;gap:12px;display:flex}.list-row{gap:8px;margin-top:6px;display:flex}.list-row input{flex:1}.code-input{width:100%;margin-top:8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;line-height:1.5}.checkbox-row{align-items:center;gap:8px;display:flex}.checkbox-row input[type=checkbox]{width:16px;height:16px;margin:0}select{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);border-radius:6px;padding:6px 10px;font-size:14px}select:focus{border-color:var(--color-primary);outline:2px solid #2f6feb40}select:disabled{opacity:.55;cursor:not-allowed}@font-face{font-family:sanhe-control;src:url(/fonts/iconfont.ttf)format("truetype")}.iconfont{-webkit-font-smoothing:antialiased;font-family:sanhe-control;font-style:normal}.icon-picker{flex-wrap:wrap;gap:8px;margin:8px 0 12px;display:flex}.icon-chip{cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-radius:6px;align-items:center;gap:6px;padding:6px 10px;display:inline-flex}.icon-chip:hover{border-color:var(--color-primary)}.icon-chip-glyph{color:var(--color-primary);font-size:18px;line-height:1}.icon-chip-name{font-family:monospace;font-size:13px}.icon-chip-label{color:var(--color-muted);font-size:12px}
