/* ext-core.css — 扩展模块共用基础样式。后续模块可各自追加 ext-<module>.css。 */
.ext-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px 18px;margin:0 0 14px;backdrop-filter:blur(8px)}
.ext-card>h3{margin:0 0 10px;font-size:15px;font-weight:600}
.ext-sub{color:var(--muted);font-size:12.5px;line-height:1.6;margin:0 0 10px}
.ext-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.ext-stat{background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.ext-stat b{display:block;font-size:20px;line-height:1.3}
.ext-stat span{color:var(--muted);font-size:12px}
.ext-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:8px 0}
.ext-table{width:100%;border-collapse:collapse;font-size:13px;margin:6px 0}
.ext-table th,.ext-table td{border-bottom:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top}
.ext-table th{color:var(--muted);font-weight:500;white-space:nowrap}
.ext-table tr:hover td{background:var(--surface-2)}
.ext-input,.ext-select,.ext-textarea{background:var(--surface-2);color:var(--text);border:1px solid var(--line);border-radius:10px;padding:9px 11px;font:inherit;font-size:13.5px;min-width:0}
.ext-textarea{min-height:96px;width:100%;resize:vertical}
.ext-input:focus,.ext-select:focus,.ext-textarea:focus{outline:2px solid rgba(154,120,255,.5);outline-offset:1px}
.ext-btn{border:1px solid var(--line);background:var(--surface-2);color:var(--text);border-radius:10px;padding:8px 14px;font:inherit;font-size:13.5px;cursor:pointer}
.ext-btn:hover{filter:brightness(1.12)}
.ext-btn.primary{background:linear-gradient(135deg,#7d5cff,#a855f7);border-color:transparent;color:#fff}
.ext-btn.danger{border-color:rgba(255,90,90,.55);color:#ff8f8f}
.ext-btn:disabled{opacity:.5;cursor:not-allowed}
.ext-badge{display:inline-block;border-radius:999px;padding:2px 9px;font-size:11.5px;border:1px solid var(--line);background:var(--surface-2)}
.ext-badge.ok{color:#6ee7a8;border-color:rgba(110,231,168,.45)}
.ext-badge.warn{color:#ffd479;border-color:rgba(255,212,121,.45)}
.ext-badge.bad{color:#ff8f8f;border-color:rgba(255,143,143,.45)}
.ext-msg{font-size:13px;color:var(--muted);min-height:18px;margin:6px 0}
.ext-msg.ok{color:#6ee7a8}
.ext-msg.bad{color:#ff8f8f}
.ext-empty{color:var(--muted);font-size:13px;padding:14px;text-align:center;border:1px dashed var(--line);border-radius:12px}
.ext-kv{display:grid;grid-template-columns:minmax(96px,140px) 1fr;gap:6px 12px;font-size:13px}
.ext-kv dt{color:var(--muted)}
.ext-kv dd{margin:0;word-break:break-all}
.ext-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
.ext-tab{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:999px;padding:6px 13px;font:inherit;font-size:12.5px;cursor:pointer}
.ext-tab.on{color:var(--text);background:var(--surface-2)}
.ext-progress{height:8px;border-radius:999px;background:var(--surface-2);overflow:hidden;border:1px solid var(--line)}
.ext-progress>i{display:block;height:100%;background:linear-gradient(90deg,#7d5cff,#a855f7)}
.ext-modal{position:fixed;inset:0;background:rgba(10,8,16,.6);display:flex;align-items:center;justify-content:center;z-index:60;padding:18px}
.ext-modal>.ext-card{max-width:560px;width:100%;max-height:86vh;overflow:auto;margin:0}
.ext-code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;word-break:break-all}
.ext-inline{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.ext-danger-note{color:#ff8f8f;font-size:12.5px;line-height:1.6}
